mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
Added more tests, renamed some interfaces and classes
This commit is contained in:
Vendored
+6
-6
File diff suppressed because one or more lines are too long
Vendored
+1
-13711
File diff suppressed because one or more lines are too long
Vendored
+1
-13070
File diff suppressed because one or more lines are too long
@@ -12,7 +12,7 @@ export enum ServiceIdentifiers {
|
||||
Factory__IObfuscatedCode = 'Factory<IObfuscatedCode>',
|
||||
Factory__IObfuscatingReplacer = 'Factory<IObfuscatingReplacer>',
|
||||
Factory__IObjectExpressionKeysTransformerCustomNode = 'Factory<IObjectExpressionKeysTransformerCustomNode>',
|
||||
Factory__IPropertiesExtractor = 'Factory<IPropertiesExtractor>',
|
||||
Factory__IObjectExpressionExtractor = 'Factory<IObjectExpressionExtractor>',
|
||||
Factory__TControlFlowStorage = 'Factory<TControlFlowStorage>',
|
||||
IArrayUtils = 'IArrayUtils',
|
||||
ICalleeDataExtractor = 'ICalleeDataExtractor',
|
||||
@@ -37,7 +37,7 @@ export enum ServiceIdentifiers {
|
||||
IOptionsNormalizer = 'IOptionsNormalizer',
|
||||
IObfuscatingReplacer = 'IObfuscatingReplacer',
|
||||
IPrevailingKindOfVariablesAnalyzer = 'IPrevailingKindOfVariablesAnalyzer',
|
||||
IPropertiesExtractor = 'IPropertiesExtractor',
|
||||
IObjectExpressionExtractor = 'IObjectExpressionExtractor',
|
||||
IRandomGenerator = 'IRandomGenerator',
|
||||
ISourceCode = 'ISourceCode',
|
||||
ISourceMapCorrector = 'ISourceMapCorrector',
|
||||
|
||||
@@ -18,7 +18,7 @@ import { DomainLockCustomNodeGroup } from '../../../custom-nodes/domain-lock-nod
|
||||
import { SelfDefendingCustomNodeGroup } from '../../../custom-nodes/self-defending-nodes/group/SelfDefendingCustomNodeGroup';
|
||||
import { StringArrayCustomNodeGroup } from '../../../custom-nodes/string-array-nodes/group/StringArrayCustomNodeGroup';
|
||||
|
||||
import { BasePropertiesExtractorObjectExpressionHostNode } from '../../../custom-nodes/object-expression-keys-transformer-nodes/BasePropertiesExtractorObjectExpressionHostNode';
|
||||
import { ObjectExpressionVariableDeclarationHostNode } from '../../../custom-nodes/object-expression-keys-transformer-nodes/ObjectExpressionVariableDeclarationHostNode';
|
||||
import { BinaryExpressionFunctionNode } from '../../../custom-nodes/control-flow-flattening-nodes/BinaryExpressionFunctionNode';
|
||||
import { BlockStatementControlFlowFlatteningNode } from '../../../custom-nodes/control-flow-flattening-nodes/BlockStatementControlFlowFlatteningNode';
|
||||
import { BlockStatementDeadCodeInjectionNode } from '../../../custom-nodes/dead-code-injection-nodes/BlockStatementDeadCodeInjectionNode';
|
||||
@@ -127,8 +127,8 @@ export const customNodesModule: interfaces.ContainerModule = new ContainerModule
|
||||
|
||||
// object expression keys transformer nodes
|
||||
bind<interfaces.Newable<ICustomNode>>(ServiceIdentifiers.Newable__ICustomNode)
|
||||
.toConstructor(BasePropertiesExtractorObjectExpressionHostNode)
|
||||
.whenTargetNamed(ObjectExpressionKeysTransformerCustomNode.BasePropertiesExtractorObjectExpressionHostNode);
|
||||
.toConstructor(ObjectExpressionVariableDeclarationHostNode)
|
||||
.whenTargetNamed(ObjectExpressionKeysTransformerCustomNode.ObjectExpressionVariableDeclarationHostNode);
|
||||
|
||||
// node groups
|
||||
bind<ICustomNodeGroup>(ServiceIdentifiers.ICustomNodeGroup)
|
||||
|
||||
@@ -3,10 +3,10 @@ import { InversifyContainerFacade } from '../../InversifyContainerFacade';
|
||||
import { ServiceIdentifiers } from '../../ServiceIdentifiers';
|
||||
|
||||
import { INodeTransformer } from '../../../interfaces/node-transformers/INodeTransformer';
|
||||
import { IPropertiesExtractor } from '../../../interfaces/node-transformers/converting-transformers/properties-extractors/IPropertiesExtractor';
|
||||
import { IObjectExpressionExtractor } from '../../../interfaces/node-transformers/converting-transformers/object-expression-extractors/IObjectExpressionExtractor';
|
||||
|
||||
import { NodeTransformer } from '../../../enums/node-transformers/NodeTransformer';
|
||||
import { PropertiesExtractor } from '../../../enums/node-transformers/converting-transformers/properties-extractors/PropertiesExtractor';
|
||||
import { ObjectExpressionExtractor } from '../../../enums/node-transformers/converting-transformers/properties-extractors/ObjectExpressionExtractor';
|
||||
|
||||
import { ObjectExpressionToVariableDeclarationExtractor } from '../../../node-transformers/converting-transformers/object-expression-extractors/ObjectExpressionToVariableDeclarationExtractor';
|
||||
import { MemberExpressionTransformer } from '../../../node-transformers/converting-transformers/MemberExpressionTransformer';
|
||||
@@ -43,19 +43,19 @@ export const convertingTransformersModule: interfaces.ContainerModule = new Cont
|
||||
.to(TemplateLiteralTransformer)
|
||||
.whenTargetNamed(NodeTransformer.TemplateLiteralTransformer);
|
||||
|
||||
// properties extractors
|
||||
bind<IPropertiesExtractor>(ServiceIdentifiers.IPropertiesExtractor)
|
||||
// object expression extractors
|
||||
bind<IObjectExpressionExtractor>(ServiceIdentifiers.IObjectExpressionExtractor)
|
||||
.to(ObjectExpressionToVariableDeclarationExtractor)
|
||||
.whenTargetNamed(PropertiesExtractor.ObjectExpressionToVariableDeclarationExtractor);
|
||||
.whenTargetNamed(ObjectExpressionExtractor.ObjectExpressionToVariableDeclarationExtractor);
|
||||
|
||||
bind<IPropertiesExtractor>(ServiceIdentifiers.IPropertiesExtractor)
|
||||
bind<IObjectExpressionExtractor>(ServiceIdentifiers.IObjectExpressionExtractor)
|
||||
.to(BasePropertiesExtractor)
|
||||
.whenTargetNamed(PropertiesExtractor.BasePropertiesExtractor);
|
||||
.whenTargetNamed(ObjectExpressionExtractor.BasePropertiesExtractor);
|
||||
|
||||
// properties extractor factory
|
||||
bind<IPropertiesExtractor>(ServiceIdentifiers.Factory__IPropertiesExtractor)
|
||||
.toFactory<IPropertiesExtractor>(InversifyContainerFacade
|
||||
.getCacheFactory<PropertiesExtractor, IPropertiesExtractor>(
|
||||
ServiceIdentifiers.IPropertiesExtractor
|
||||
// object expression extractor factory
|
||||
bind<IObjectExpressionExtractor>(ServiceIdentifiers.Factory__IObjectExpressionExtractor)
|
||||
.toFactory<IObjectExpressionExtractor>(InversifyContainerFacade
|
||||
.getCacheFactory<ObjectExpressionExtractor, IObjectExpressionExtractor>(
|
||||
ServiceIdentifiers.IObjectExpressionExtractor
|
||||
));
|
||||
});
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ import { AbstractCustomNode } from '../AbstractCustomNode';
|
||||
import { NodeFactory } from '../../node/NodeFactory';
|
||||
|
||||
@injectable()
|
||||
export class BasePropertiesExtractorObjectExpressionHostNode extends AbstractCustomNode {
|
||||
export class ObjectExpressionVariableDeclarationHostNode extends AbstractCustomNode {
|
||||
/**
|
||||
* @ type {Property}
|
||||
*/
|
||||
@@ -1,4 +1,4 @@
|
||||
export enum ObjectExpressionKeysTransformerCustomNode {
|
||||
BasePropertiesExtractorObjectExpressionHostNode =
|
||||
'BasePropertiesExtractorObjectExpressionHostNode'
|
||||
ObjectExpressionVariableDeclarationHostNode =
|
||||
'ObjectExpressionVariableDeclarationHostNode'
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
export enum PropertiesExtractor {
|
||||
export enum ObjectExpressionExtractor {
|
||||
BasePropertiesExtractor = 'BasePropertiesExtractor',
|
||||
ObjectExpressionToVariableDeclarationExtractor = 'ObjectExpressionToVariableDeclarationExtractor'
|
||||
}
|
||||
-3
@@ -1,3 +0,0 @@
|
||||
export enum PropertiesExtractorFlag {
|
||||
Skip = 'skip'
|
||||
}
|
||||
+4
-4
@@ -1,15 +1,15 @@
|
||||
import * as ESTree from 'estree';
|
||||
|
||||
import { TPropertiesExtractorResult } from '../../../../types/node-transformers/TPropertiesExtractorResult';
|
||||
import { IObjectExpressionExtractorResult } from './IObjectExpressionExtractorResult';
|
||||
|
||||
export interface IPropertiesExtractor {
|
||||
export interface IObjectExpressionExtractor {
|
||||
/**
|
||||
* @param {ObjectExpression} objectExpressionNode
|
||||
* @param {Statement} hostStatement
|
||||
* @returns {TPropertiesExtractorResult}
|
||||
* @returns {IObjectExpressionExtractorResult}
|
||||
*/
|
||||
extract (
|
||||
objectExpressionNode: ESTree.ObjectExpression,
|
||||
hostStatement: ESTree.Statement
|
||||
): TPropertiesExtractorResult;
|
||||
): IObjectExpressionExtractorResult;
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
import * as ESTree from 'estree';
|
||||
|
||||
export interface IObjectExpressionExtractorResult {
|
||||
/**
|
||||
* @type {Node}
|
||||
*/
|
||||
nodeToReplace: ESTree.Node;
|
||||
|
||||
/**
|
||||
* @type {Statement}
|
||||
*/
|
||||
objectExpressionHostStatement: ESTree.Statement;
|
||||
|
||||
/**
|
||||
* @type {ObjectExpression}
|
||||
*/
|
||||
objectExpressionNode: ESTree.ObjectExpression;
|
||||
}
|
||||
@@ -4,7 +4,7 @@ import { ServiceIdentifiers } from '../../container/ServiceIdentifiers';
|
||||
import * as estraverse from 'estraverse';
|
||||
import * as ESTree from 'estree';
|
||||
|
||||
import { TPropertiesExtractorFactory } from '../../types/container/node-transformers/TPropertiesExtractorFactory';
|
||||
import { TObjectExpressionExtractorFactory } from '../../types/container/node-transformers/TObjectExpressionExtractorFactory';
|
||||
|
||||
import { IOptions } from '../../interfaces/options/IOptions';
|
||||
import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
|
||||
@@ -15,29 +15,29 @@ import { TransformationStage } from '../../enums/node-transformers/Transformatio
|
||||
import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
|
||||
import { NodeGuards } from '../../node/NodeGuards';
|
||||
import { NodeStatementUtils } from '../../node/NodeStatementUtils';
|
||||
import { PropertiesExtractor } from '../../enums/node-transformers/converting-transformers/properties-extractors/PropertiesExtractor';
|
||||
import { ObjectExpressionExtractor } from '../../enums/node-transformers/converting-transformers/properties-extractors/ObjectExpressionExtractor';
|
||||
|
||||
@injectable()
|
||||
export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer {
|
||||
/**
|
||||
* @type {TPropertiesExtractorFactory}
|
||||
* @type {TObjectExpressionExtractorFactory}
|
||||
*/
|
||||
private readonly propertiesExtractorFactory: TPropertiesExtractorFactory;
|
||||
private readonly objectExpressionExtractorFactory: TObjectExpressionExtractorFactory;
|
||||
|
||||
/**
|
||||
* @param {TPropertiesExtractorFactory} propertiesExtractorFactory
|
||||
* @param {TObjectExpressionExtractorFactory} objectExpressionExtractorFactory
|
||||
* @param {IRandomGenerator} randomGenerator
|
||||
* @param {IOptions} options
|
||||
*/
|
||||
constructor (
|
||||
@inject(ServiceIdentifiers.Factory__IPropertiesExtractor)
|
||||
propertiesExtractorFactory: TPropertiesExtractorFactory,
|
||||
@inject(ServiceIdentifiers.Factory__IObjectExpressionExtractor)
|
||||
objectExpressionExtractorFactory: TObjectExpressionExtractorFactory,
|
||||
@inject(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator,
|
||||
@inject(ServiceIdentifiers.IOptions) options: IOptions
|
||||
) {
|
||||
super(randomGenerator, options);
|
||||
|
||||
this.propertiesExtractorFactory = propertiesExtractorFactory;
|
||||
this.objectExpressionExtractorFactory = objectExpressionExtractorFactory;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -213,11 +213,11 @@ export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer {
|
||||
objectExpressionHostStatement: newObjectExpressionHostStatement,
|
||||
objectExpressionNode: newObjectExpressionNode
|
||||
} = this
|
||||
.propertiesExtractorFactory(PropertiesExtractor.ObjectExpressionToVariableDeclarationExtractor)
|
||||
.objectExpressionExtractorFactory(ObjectExpressionExtractor.ObjectExpressionToVariableDeclarationExtractor)
|
||||
.extract(objectExpressionNode, hostStatement);
|
||||
|
||||
this
|
||||
.propertiesExtractorFactory(PropertiesExtractor.BasePropertiesExtractor)
|
||||
.objectExpressionExtractorFactory(ObjectExpressionExtractor.BasePropertiesExtractor)
|
||||
.extract(newObjectExpressionNode, newObjectExpressionHostStatement);
|
||||
|
||||
return newObjectExpressionIdentifierReference;
|
||||
|
||||
+7
-7
@@ -3,9 +3,9 @@ import { injectable } from 'inversify';
|
||||
import * as ESTree from 'estree';
|
||||
|
||||
import { TNodeWithStatements } from '../../../types/node/TNodeWithStatements';
|
||||
import { TPropertiesExtractorResult } from '../../../types/node-transformers/TPropertiesExtractorResult';
|
||||
import { IObjectExpressionExtractorResult } from '../../../interfaces/node-transformers/converting-transformers/object-expression-extractors/IObjectExpressionExtractorResult';
|
||||
|
||||
import { IPropertiesExtractor } from '../../../interfaces/node-transformers/converting-transformers/properties-extractors/IPropertiesExtractor';
|
||||
import { IObjectExpressionExtractor } from '../../../interfaces/node-transformers/converting-transformers/object-expression-extractors/IObjectExpressionExtractor';
|
||||
|
||||
import { NodeAppender } from '../../../node/NodeAppender';
|
||||
import { NodeFactory } from '../../../node/NodeFactory';
|
||||
@@ -13,7 +13,7 @@ import { NodeGuards } from '../../../node/NodeGuards';
|
||||
import { NodeStatementUtils } from '../../../node/NodeStatementUtils';
|
||||
|
||||
@injectable()
|
||||
export class BasePropertiesExtractor implements IPropertiesExtractor {
|
||||
export class BasePropertiesExtractor implements IObjectExpressionExtractor {
|
||||
/**
|
||||
* @param {Property} propertyNode
|
||||
* @returns {string | null}
|
||||
@@ -64,12 +64,12 @@ export class BasePropertiesExtractor implements IPropertiesExtractor {
|
||||
*
|
||||
* @param {ObjectExpression} objectExpressionNode
|
||||
* @param {Statement} hostStatement
|
||||
* @returns {TPropertiesExtractorResult}
|
||||
* @returns {IObjectExpressionExtractorResult}
|
||||
*/
|
||||
public extract (
|
||||
objectExpressionNode: ESTree.ObjectExpression,
|
||||
hostStatement: ESTree.Statement
|
||||
): TPropertiesExtractorResult {
|
||||
): IObjectExpressionExtractorResult {
|
||||
const hostNode: ESTree.Node | undefined = objectExpressionNode.parentNode;
|
||||
|
||||
if (
|
||||
@@ -91,13 +91,13 @@ export class BasePropertiesExtractor implements IPropertiesExtractor {
|
||||
* @param {ObjectExpression} objectExpressionNode
|
||||
* @param {Statement} hostStatement
|
||||
* @param {Expression} memberExpressionHostNode
|
||||
* @returns {TPropertiesExtractorResult}
|
||||
* @returns {IObjectExpressionExtractorResult}
|
||||
*/
|
||||
private transformObjectExpressionNode (
|
||||
objectExpressionNode: ESTree.ObjectExpression,
|
||||
hostStatement: ESTree.Statement,
|
||||
memberExpressionHostNode: ESTree.Expression
|
||||
): TPropertiesExtractorResult {
|
||||
): IObjectExpressionExtractorResult {
|
||||
const properties: ESTree.Property[] = objectExpressionNode.properties;
|
||||
const [expressionStatements, removablePropertyIds]: [ESTree.ExpressionStatement[], number[]] = this
|
||||
.extractPropertiesToExpressionStatements(
|
||||
|
||||
+11
-11
@@ -5,23 +5,23 @@ import * as ESTree from 'estree';
|
||||
|
||||
import { TNodeWithStatements } from '../../../types/node/TNodeWithStatements';
|
||||
import { TObjectExpressionKeysTransformerCustomNodeFactory } from '../../../types/container/custom-nodes/TObjectExpressionKeysTransformerCustomNodeFactory';
|
||||
import { TPropertiesExtractorResult } from '../../../types/node-transformers/TPropertiesExtractorResult';
|
||||
import { IObjectExpressionExtractorResult } from '../../../interfaces/node-transformers/converting-transformers/object-expression-extractors/IObjectExpressionExtractorResult';
|
||||
import { TStatement } from '../../../types/node/TStatement';
|
||||
|
||||
import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode';
|
||||
import { TInitialData } from '../../../types/TInitialData';
|
||||
import { IPropertiesExtractor } from '../../../interfaces/node-transformers/converting-transformers/properties-extractors/IPropertiesExtractor';
|
||||
import { IObjectExpressionExtractor } from '../../../interfaces/node-transformers/converting-transformers/object-expression-extractors/IObjectExpressionExtractor';
|
||||
|
||||
import { ObjectExpressionKeysTransformerCustomNode } from '../../../enums/custom-nodes/ObjectExpressionKeysTransformerCustomNode';
|
||||
|
||||
import { BasePropertiesExtractorObjectExpressionHostNode } from '../../../custom-nodes/object-expression-keys-transformer-nodes/BasePropertiesExtractorObjectExpressionHostNode';
|
||||
import { ObjectExpressionVariableDeclarationHostNode } from '../../../custom-nodes/object-expression-keys-transformer-nodes/ObjectExpressionVariableDeclarationHostNode';
|
||||
import { NodeAppender } from '../../../node/NodeAppender';
|
||||
import { NodeGuards } from '../../../node/NodeGuards';
|
||||
import { NodeStatementUtils } from '../../../node/NodeStatementUtils';
|
||||
import { NodeUtils } from '../../../node/NodeUtils';
|
||||
|
||||
@injectable()
|
||||
export class ObjectExpressionToVariableDeclarationExtractor implements IPropertiesExtractor {
|
||||
export class ObjectExpressionToVariableDeclarationExtractor implements IObjectExpressionExtractor {
|
||||
/**
|
||||
* @type {TObjectExpressionKeysTransformerCustomNodeFactory}
|
||||
*/
|
||||
@@ -53,12 +53,12 @@ export class ObjectExpressionToVariableDeclarationExtractor implements IProperti
|
||||
*
|
||||
* @param {ObjectExpression} objectExpressionNode
|
||||
* @param {Statement} hostStatement
|
||||
* @returns {TPropertiesExtractorResult}
|
||||
* @returns {IObjectExpressionExtractorResult}
|
||||
*/
|
||||
public extract (
|
||||
objectExpressionNode: ESTree.ObjectExpression,
|
||||
hostStatement: ESTree.Statement
|
||||
): TPropertiesExtractorResult {
|
||||
): IObjectExpressionExtractorResult {
|
||||
return this.transformObjectExpressionToVariableDeclaration(
|
||||
objectExpressionNode,
|
||||
hostStatement
|
||||
@@ -73,7 +73,7 @@ export class ObjectExpressionToVariableDeclarationExtractor implements IProperti
|
||||
private transformObjectExpressionToVariableDeclaration (
|
||||
objectExpressionNode: ESTree.ObjectExpression,
|
||||
hostStatement: ESTree.Statement
|
||||
): TPropertiesExtractorResult {
|
||||
): IObjectExpressionExtractorResult {
|
||||
const properties: ESTree.Property[] = objectExpressionNode.properties;
|
||||
|
||||
const newObjectExpressionHostStatement: ESTree.VariableDeclaration = this.getObjectExpressionHostNode(properties);
|
||||
@@ -99,14 +99,14 @@ export class ObjectExpressionToVariableDeclarationExtractor implements IProperti
|
||||
* @returns {VariableDeclaration}
|
||||
*/
|
||||
private getObjectExpressionHostNode (properties: ESTree.Property[]): ESTree.VariableDeclaration {
|
||||
const objectExpressionHostCustomNode: ICustomNode<TInitialData<BasePropertiesExtractorObjectExpressionHostNode>> =
|
||||
const variableDeclarationHostNodeCustomNode: ICustomNode<TInitialData<ObjectExpressionVariableDeclarationHostNode>> =
|
||||
this.objectExpressionKeysTransformerCustomNodeFactory(
|
||||
ObjectExpressionKeysTransformerCustomNode.BasePropertiesExtractorObjectExpressionHostNode
|
||||
ObjectExpressionKeysTransformerCustomNode.ObjectExpressionVariableDeclarationHostNode
|
||||
);
|
||||
|
||||
objectExpressionHostCustomNode.initialize(properties);
|
||||
variableDeclarationHostNodeCustomNode.initialize(properties);
|
||||
|
||||
const statementNode: TStatement = objectExpressionHostCustomNode.getNode()[0];
|
||||
const statementNode: TStatement = variableDeclarationHostNodeCustomNode.getNode()[0];
|
||||
|
||||
if (
|
||||
!statementNode
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
import { IObjectExpressionExtractor } from '../../../interfaces/node-transformers/converting-transformers/object-expression-extractors/IObjectExpressionExtractor';
|
||||
|
||||
import { ObjectExpressionExtractor } from '../../../enums/node-transformers/converting-transformers/properties-extractors/ObjectExpressionExtractor';
|
||||
|
||||
export type TObjectExpressionExtractorFactory =
|
||||
(objectExpressionExtractorName: ObjectExpressionExtractor) => IObjectExpressionExtractor;
|
||||
@@ -1,5 +0,0 @@
|
||||
import { IPropertiesExtractor } from '../../../interfaces/node-transformers/converting-transformers/properties-extractors/IPropertiesExtractor';
|
||||
|
||||
import { PropertiesExtractor } from '../../../enums/node-transformers/converting-transformers/properties-extractors/PropertiesExtractor';
|
||||
|
||||
export type TPropertiesExtractorFactory = (propertiesExtractorName: PropertiesExtractor) => IPropertiesExtractor;
|
||||
@@ -1,7 +0,0 @@
|
||||
import * as ESTree from 'estree';
|
||||
|
||||
export type TPropertiesExtractorResult = {
|
||||
nodeToReplace: ESTree.Node;
|
||||
objectExpressionHostStatement: ESTree.Statement;
|
||||
objectExpressionNode: ESTree.ObjectExpression;
|
||||
};
|
||||
+30
@@ -1388,5 +1388,35 @@ describe('ObjectExpressionKeysTransformer', () => {
|
||||
assert.match(obfuscatedCode, regExp);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Variant #4: member expression node as property key', () => {
|
||||
const match: string = `` +
|
||||
`var ${variableMatch} *= *{};` +
|
||||
`${variableMatch}\\['foo'] *= *'test';` +
|
||||
`var foo *= *${variableMatch};` +
|
||||
`var ${variableMatch} *= *{\\[foo.foo] *: *'1'};` +
|
||||
`${variableMatch}\\['bar'] *= *'2';` +
|
||||
`var bar *= *${variableMatch};` +
|
||||
``;
|
||||
const regExp: RegExp = new RegExp(match);
|
||||
|
||||
let obfuscatedCode: string;
|
||||
|
||||
before(() => {
|
||||
const code: string = readFileAsString(__dirname + '/fixtures/computed-key-member-expression.js');
|
||||
|
||||
obfuscatedCode = JavaScriptObfuscator.obfuscate(
|
||||
code,
|
||||
{
|
||||
...NO_ADDITIONAL_NODES_PRESET,
|
||||
transformObjectKeys: true
|
||||
}
|
||||
).getObfuscatedCode();
|
||||
});
|
||||
|
||||
it('shouldn ignore extraction of property with member expression key', () => {
|
||||
assert.match(obfuscatedCode, regExp);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
var foo = {
|
||||
foo: 'test'
|
||||
};
|
||||
var bar = {
|
||||
[foo.foo]: '1',
|
||||
bar: '2'
|
||||
};
|
||||
+6
-1
@@ -165,6 +165,11 @@ describe('SplitStringTransformer', () => {
|
||||
|
||||
describe('Variant #10: Integration with `transformObjectKeys` option', () => {
|
||||
it('should correctly transform string when `transformObjectKeys` option is enabled', () => {
|
||||
const regExp: RegExp = new RegExp(`` +
|
||||
`var _0x[a-f0-9]{4,6} *= *{};` +
|
||||
`*_0x[a-f0-9]{4,6}\\['ab' *\\+ *'cd' *\\+ *'ef' *\\+ *'g'] *= *'ab' *\\+ *'cd' *\\+ *'ef' *\\+ *'g';` +
|
||||
`var test *= *_0x[a-f0-9]{4,6};` +
|
||||
``);
|
||||
const code: string = readFileAsString(__dirname + '/fixtures/object-string-literal.js');
|
||||
|
||||
obfuscatedCode = JavaScriptObfuscator.obfuscate(
|
||||
@@ -179,7 +184,7 @@ describe('SplitStringTransformer', () => {
|
||||
|
||||
assert.match(
|
||||
obfuscatedCode,
|
||||
/^var *test *= *{}; *test\['ab' *\+ *'cd' *\+ *'ef' *\+ *'g'] *= *'ab' *\+ *'cd' *\+ *'ef' *\+ *'g';$/
|
||||
regExp
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user