This commit is contained in:
sanex
2020-10-28 00:30:40 +03:00
parent d07574a59b
commit 229c99f68c
16 changed files with 294 additions and 84 deletions
+1
View File
@@ -70,6 +70,7 @@ export class JavaScriptObfuscator implements IJavaScriptObfuscator {
NodeTransformer.DeadCodeInjectionTransformer,
NodeTransformer.EscapeSequenceTransformer,
NodeTransformer.EvalCallExpressionTransformer,
NodeTransformer.ExportSpecifierTransformer,
NodeTransformer.ExpressionStatementsMergeTransformer,
NodeTransformer.FunctionControlFlowTransformer,
NodeTransformer.IfStatementSimplifyTransformer,
@@ -10,6 +10,7 @@ import { ObjectExpressionExtractor } from '../../../enums/node-transformers/conv
import { BasePropertiesExtractor } from '../../../node-transformers/converting-transformers/object-expression-extractors/BasePropertiesExtractor';
import { BooleanLiteralTransformer } from '../../../node-transformers/converting-transformers/BooleanLiteralTransformer';
import { ExportSpecifierTransformer } from '../../../node-transformers/converting-transformers/ExportSpecifierTransformer';
import { MemberExpressionTransformer } from '../../../node-transformers/converting-transformers/MemberExpressionTransformer';
import { MethodDefinitionTransformer } from '../../../node-transformers/converting-transformers/MethodDefinitionTransformer';
import { NumberLiteralTransformer } from '../../../node-transformers/converting-transformers/NumberLiteralTransformer';
@@ -27,6 +28,10 @@ export const convertingTransformersModule: interfaces.ContainerModule = new Cont
.to(BooleanLiteralTransformer)
.whenTargetNamed(NodeTransformer.BooleanLiteralTransformer);
bind<INodeTransformer>(ServiceIdentifiers.INodeTransformer)
.to(ExportSpecifierTransformer)
.whenTargetNamed(NodeTransformer.ExportSpecifierTransformer);
bind<INodeTransformer>(ServiceIdentifiers.INodeTransformer)
.to(MemberExpressionTransformer)
.whenTargetNamed(NodeTransformer.MemberExpressionTransformer);
@@ -7,6 +7,7 @@ export enum NodeTransformer {
DeadCodeInjectionTransformer = 'DeadCodeInjectionTransformer',
EscapeSequenceTransformer = 'EscapeSequenceTransformer',
EvalCallExpressionTransformer = 'EvalCallExpressionTransformer',
ExportSpecifierTransformer = 'ExportSpecifierTransformer',
ExpressionStatementsMergeTransformer = 'ExpressionStatementsMergeTransformer',
FunctionControlFlowTransformer = 'FunctionControlFlowTransformer',
IfStatementSimplifyTransformer = 'IfStatementSimplifyTransformer',
+1
View File
@@ -16,6 +16,7 @@ export enum NodeType {
ContinueStatement = 'ContinueStatement',
ExportAllDeclaration = 'ExportAllDeclaration',
ExportNamedDeclaration = 'ExportNamedDeclaration',
ExportSpecifier = 'ExportSpecifier',
ExpressionStatement = 'ExpressionStatement',
ForStatement = 'ForStatement',
ForInStatement = 'ForInStatement',
@@ -0,0 +1,67 @@
import { inject, injectable, } from 'inversify';
import { ServiceIdentifiers } from '../../container/ServiceIdentifiers';
import * as ESTree from 'estree';
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 { AbstractNodeTransformer } from '../AbstractNodeTransformer';
import { NodeGuards } from '../../node/NodeGuards';
import { NodeUtils } from '../../node/NodeUtils';
@injectable()
export class ExportSpecifierTransformer extends AbstractNodeTransformer {
/**
* @param {IRandomGenerator} randomGenerator
* @param {IOptions} options
*/
public constructor (
@inject(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator,
@inject(ServiceIdentifiers.IOptions) options: IOptions
) {
super(randomGenerator, options);
}
/**
* @param {NodeTransformationStage} nodeTransformationStage
* @returns {IVisitor | null}
*/
public getVisitor (nodeTransformationStage: NodeTransformationStage): IVisitor | null {
switch (nodeTransformationStage) {
case NodeTransformationStage.Converting:
return {
enter: (node: ESTree.Node, parentNode: ESTree.Node | null): ESTree.Node | undefined => {
if (parentNode && NodeGuards.isExportSpecifierNode(node)) {
return this.transformNode(node, parentNode);
}
}
};
default:
return null;
}
}
/**
* Replaces:
* export {foo};
*
* on:
* export {foo as foo};
*
* @param {ExportSpecifier} exportSpecifierNode
* @param {Node} parentNode
* @returns {Node}
*/
public transformNode (exportSpecifierNode: ESTree.ExportSpecifier, parentNode: ESTree.Node): ESTree.Node {
if (exportSpecifierNode.local.name === exportSpecifierNode.exported.name) {
exportSpecifierNode.exported = NodeUtils.clone(exportSpecifierNode.local);
}
return exportSpecifierNode;
}
}
+8
View File
@@ -132,6 +132,14 @@ export class NodeGuards {
return node.type === NodeType.ExportNamedDeclaration;
}
/**
* @param {Node} node
* @returns {boolean}
*/
public static isExportSpecifierNode (node: ESTree.Node): node is ESTree.ExportSpecifier {
return node.type === NodeType.ExportSpecifier;
}
/**
* @param {Node} node
* @returns {boolean}