소스 검색

Removed `obfuscation-event-emitter` to allow more flexible append of node inside custom code helper groups.

sanex 4 년 전
부모
커밋
a118112095

+ 4 - 0
CHANGELOG.md

@@ -1,5 +1,9 @@
 Change Log
 
+v2.10.0
+---
+* Some internal refactoring related to node append events
+
 v2.9.4
 ---
 * Fixed missing prefix of root identifiers added by `stringArrayWrappersCount` option when `identifiersPrefix` option is set

+ 1 - 2
package.json

@@ -1,6 +1,6 @@
 {
   "name": "javascript-obfuscator",
-  "version": "2.9.4",
+  "version": "2.10.0",
   "description": "JavaScript obfuscator",
   "keywords": [
     "obfuscator",
@@ -31,7 +31,6 @@
     "commander": "6.2.1",
     "eslint-scope": "5.1.1",
     "estraverse": "5.2.0",
-    "eventemitter3": "4.0.7",
     "fast-deep-equal": "3.1.3",
     "inversify": "5.0.5",
     "js-string-escape": "1.0.1",

+ 0 - 7
src/container/InversifyContainerFacade.ts

@@ -28,7 +28,6 @@ import { ICodeTransformersRunner } from '../interfaces/code-transformers/ICodeTr
 import { IInversifyContainerFacade } from '../interfaces/container/IInversifyContainerFacade';
 import { IJavaScriptObfuscator } from '../interfaces/IJavaScriptObfsucator';
 import { ILogger } from '../interfaces/logger/ILogger';
-import { IObfuscationEventEmitter } from '../interfaces/event-emitters/IObfuscationEventEmitter';
 import { IObfuscatedCode } from '../interfaces/source-code/IObfuscatedCode';
 import { ISourceCode } from '../interfaces/source-code/ISourceCode';
 import { INodeTransformersRunner } from '../interfaces/node-transformers/INodeTransformersRunner';
@@ -37,7 +36,6 @@ import { CodeTransformersRunner } from '../code-transformers/CodeTransformersRun
 import { JavaScriptObfuscator } from '../JavaScriptObfuscator';
 import { Logger } from '../logger/Logger';
 import { NodeTransformersRunner } from '../node-transformers/NodeTransformersRunner';
-import { ObfuscationEventEmitter } from '../event-emitters/ObfuscationEventEmitter';
 import { ObfuscatedCode } from '../source-code/ObfuscatedCode';
 import { SourceCode } from '../source-code/SourceCode';
 
@@ -199,11 +197,6 @@ export class InversifyContainerFacade implements IInversifyContainerFacade {
                 };
             });
 
-        this.container
-            .bind<IObfuscationEventEmitter>(ServiceIdentifiers.IObfuscationEventEmitter)
-            .to(ObfuscationEventEmitter)
-            .inSingletonScope();
-
         // modules
         this.container.load(analyzersModule);
         this.container.load(codeTransformersModule);

+ 0 - 1
src/container/ServiceIdentifiers.ts

@@ -40,7 +40,6 @@ export enum ServiceIdentifiers {
     INodeTransformerNamesGroupsBuilder = 'INodeTransformerNamesGroupsBuilder',
     INodeTransformersRunner = 'INodeTransformersRunner',
     INumberNumericalExpressionAnalyzer = 'INumberNumericalExpressionAnalyzer',
-    IObfuscationEventEmitter = 'IObfuscationEventEmitter',
     IObfuscatedCode = 'IObfuscatedCode',
     IOptions = 'IOptions',
     IOptionsNormalizer = 'IOptionsNormalizer',

+ 0 - 21
src/custom-code-helpers/AbstractCustomCodeHelperGroup.ts

@@ -2,9 +2,7 @@ import { inject, injectable } from 'inversify';
 import { ServiceIdentifiers } from '../container/ServiceIdentifiers';
 
 import { TIdentifierNamesGeneratorFactory } from '../types/container/generators/TIdentifierNamesGeneratorFactory';
-import { TNodeWithStatements } from '../types/node/TNodeWithStatements';
 
-import { ICallsGraphData } from '../interfaces/analyzers/calls-graph-analyzer/ICallsGraphData';
 import { ICustomCodeHelper } from '../interfaces/custom-code-helpers/ICustomCodeHelper';
 import { ICustomCodeHelperGroup } from '../interfaces/custom-code-helpers/ICustomCodeHelperGroup';
 import { IIdentifierNamesGenerator } from '../interfaces/generators/identifier-names-generators/IIdentifierNamesGenerator';
@@ -12,7 +10,6 @@ import { IOptions } from '../interfaces/options/IOptions';
 import { IRandomGenerator } from '../interfaces/utils/IRandomGenerator';
 
 import { CustomCodeHelper } from '../enums/custom-code-helpers/CustomCodeHelper';
-import { ObfuscationEvent } from '../enums/event-emitters/ObfuscationEvent';
 
 @injectable()
 export abstract class AbstractCustomCodeHelperGroup implements ICustomCodeHelperGroup {
@@ -31,11 +28,6 @@ export abstract class AbstractCustomCodeHelperGroup implements ICustomCodeHelper
      */
     protected readonly randomGenerator: IRandomGenerator;
 
-    /**
-     * @type {ObfuscationEvent}
-     */
-    protected abstract readonly appendEvent: ObfuscationEvent;
-
     /**
      * @type {Map<CustomCodeHelper, ICustomCodeHelper>}
      */
@@ -57,13 +49,6 @@ export abstract class AbstractCustomCodeHelperGroup implements ICustomCodeHelper
         this.options = options;
     }
 
-    /**
-     * @returns {ObfuscationEvent}
-     */
-    public getAppendEvent (): ObfuscationEvent {
-        return this.appendEvent;
-    }
-
     /**
      * @returns {Map<CustomCodeHelper, ICustomCodeHelper>}
      */
@@ -94,11 +79,5 @@ export abstract class AbstractCustomCodeHelperGroup implements ICustomCodeHelper
         return this.randomGenerator.getRandomInteger(0, Math.max(0, Math.round(callsGraphLength - 1)));
     }
 
-    /**
-     * @param {TNodeWithStatements} nodeWithStatements
-     * @param {ICallsGraphData[]} callsGraphData
-     */
-    public abstract appendNodes (nodeWithStatements: TNodeWithStatements, callsGraphData: ICallsGraphData[]): void;
-
     public abstract initialize (): void;
 }

+ 8 - 8
src/custom-code-helpers/calls-controller/CallsControllerFunctionCodeHelper.ts

@@ -9,7 +9,7 @@ import { ICustomCodeHelperFormatter } from '../../interfaces/custom-code-helpers
 import { IOptions } from '../../interfaces/options/IOptions';
 import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
 
-import { ObfuscationEvent } from '../../enums/event-emitters/ObfuscationEvent';
+import { NodeTransformationStage } from '../../enums/node-transformers/NodeTransformationStage';
 
 import { initializable } from '../../decorators/Initializable';
 
@@ -27,10 +27,10 @@ export class CallsControllerFunctionCodeHelper extends AbstractCustomCodeHelper
     protected callsControllerFunctionName!: string;
 
     /**
-     * @type {ObfuscationEvent}
+     * @type {NodeTransformationStage}
      */
     @initializable()
-    private appendEvent!: ObfuscationEvent;
+    private nodeTransformationStage!: NodeTransformationStage;
 
     /**
      * @param {TIdentifierNamesGeneratorFactory} identifierNamesGeneratorFactory
@@ -57,12 +57,12 @@ export class CallsControllerFunctionCodeHelper extends AbstractCustomCodeHelper
     }
 
     /**
-     * @param {ObfuscationEvent} appendEvent
+     * @param {NodeTransformationStage} nodeTransformationStage
      * @param {string} callsControllerFunctionName
      */
-    public initialize (appendEvent: ObfuscationEvent, callsControllerFunctionName: string): void {
-        this.appendEvent = appendEvent;
-        this.callsControllerFunctionName = callsControllerFunctionName;
+    public initialize (nodeTransformationStage: NodeTransformationStage, callsControllerFunctionName: string): void {
+        this.nodeTransformationStage = nodeTransformationStage;
+        this.callsControllerFunctionName = nodeTransformationStage;
     }
 
     /**
@@ -77,7 +77,7 @@ export class CallsControllerFunctionCodeHelper extends AbstractCustomCodeHelper
      * @returns {string}
      */
     protected getCodeHelperTemplate (): string {
-        if (this.appendEvent === ObfuscationEvent.AfterObfuscation) {
+        if (this.nodeTransformationStage === NodeTransformationStage.Finalizing) {
             return this.customCodeHelperObfuscator.obfuscateTemplate(
                 this.customCodeHelperFormatter.formatTemplate(SingleCallControllerTemplate(), {
                     callControllerFunctionName: this.callsControllerFunctionName

+ 3 - 8
src/custom-code-helpers/console-output/group/ConsoleOutputCodeHelperGroup.ts

@@ -15,7 +15,7 @@ import { ICallsGraphData } from '../../../interfaces/analyzers/calls-graph-analy
 import { initializable } from '../../../decorators/Initializable';
 
 import { CustomCodeHelper } from '../../../enums/custom-code-helpers/CustomCodeHelper';
-import { ObfuscationEvent } from '../../../enums/event-emitters/ObfuscationEvent';
+import { NodeTransformationStage } from '../../../enums/node-transformers/NodeTransformationStage';
 
 import { AbstractCustomCodeHelperGroup } from '../../AbstractCustomCodeHelperGroup';
 import { CallsControllerFunctionCodeHelper } from '../../calls-controller/CallsControllerFunctionCodeHelper';
@@ -31,11 +31,6 @@ export class ConsoleOutputCodeHelperGroup extends AbstractCustomCodeHelperGroup
     @initializable()
     protected customCodeHelpers!: Map <CustomCodeHelper, ICustomCodeHelper>;
 
-    /**
-     * @type {ObfuscationEvent}
-     */
-    protected readonly appendEvent: ObfuscationEvent = ObfuscationEvent.BeforeObfuscation;
-
     /**
      * @type {TCustomCodeHelperFactory}
      */
@@ -63,7 +58,7 @@ export class ConsoleOutputCodeHelperGroup extends AbstractCustomCodeHelperGroup
      * @param {TNodeWithStatements} nodeWithStatements
      * @param {ICallsGraphData[]} callsGraphData
      */
-    public appendNodes (nodeWithStatements: TNodeWithStatements, callsGraphData: ICallsGraphData[]): void {
+    public appendOnPreparing (nodeWithStatements: TNodeWithStatements, callsGraphData: ICallsGraphData[]): void {
         if (!this.options.disableConsoleOutput) {
             return;
         }
@@ -101,7 +96,7 @@ export class ConsoleOutputCodeHelperGroup extends AbstractCustomCodeHelperGroup
         this.appendCustomNodeIfExist(
             CustomCodeHelper.CallsControllerFunction,
             (customCodeHelper: ICustomCodeHelper<TInitialData<CallsControllerFunctionCodeHelper>>) => {
-                customCodeHelper.initialize(this.appendEvent, callsControllerFunctionName);
+                customCodeHelper.initialize(NodeTransformationStage.Preparing, callsControllerFunctionName);
 
                 NodeAppender.prepend(callsControllerHostNode, customCodeHelper.getNode());
             }

+ 3 - 8
src/custom-code-helpers/debug-protection/group/DebugProtectionCodeHelperGroup.ts

@@ -15,7 +15,7 @@ import { ICallsGraphData } from '../../../interfaces/analyzers/calls-graph-analy
 import { initializable } from '../../../decorators/Initializable';
 
 import { CustomCodeHelper } from '../../../enums/custom-code-helpers/CustomCodeHelper';
-import { ObfuscationEvent } from '../../../enums/event-emitters/ObfuscationEvent';
+import { NodeTransformationStage } from '../../../enums/node-transformers/NodeTransformationStage';
 
 import { AbstractCustomCodeHelperGroup } from '../../AbstractCustomCodeHelperGroup';
 import { CallsControllerFunctionCodeHelper } from '../../calls-controller/CallsControllerFunctionCodeHelper';
@@ -34,11 +34,6 @@ export class DebugProtectionCodeHelperGroup extends AbstractCustomCodeHelperGrou
     @initializable()
     protected customCodeHelpers!: Map <CustomCodeHelper, ICustomCodeHelper>;
 
-    /**
-     * @type {ObfuscationEvent}
-     */
-    protected readonly appendEvent: ObfuscationEvent = ObfuscationEvent.BeforeObfuscation;
-
     /**
      * @type {TCustomCodeHelperFactory}
      */
@@ -66,7 +61,7 @@ export class DebugProtectionCodeHelperGroup extends AbstractCustomCodeHelperGrou
      * @param {TNodeWithStatements} nodeWithStatements
      * @param {ICallsGraphData[]} callsGraphData
      */
-    public appendNodes (nodeWithStatements: TNodeWithStatements, callsGraphData: ICallsGraphData[]): void {
+    public appendOnPreparing (nodeWithStatements: TNodeWithStatements, callsGraphData: ICallsGraphData[]): void {
         if (!this.options.debugProtection) {
             return;
         }
@@ -104,7 +99,7 @@ export class DebugProtectionCodeHelperGroup extends AbstractCustomCodeHelperGrou
         this.appendCustomNodeIfExist(
             CustomCodeHelper.CallsControllerFunction,
             (customCodeHelper: ICustomCodeHelper<TInitialData<CallsControllerFunctionCodeHelper>>) => {
-                customCodeHelper.initialize(this.appendEvent, callsControllerFunctionName);
+                customCodeHelper.initialize(NodeTransformationStage.Preparing, callsControllerFunctionName);
 
                 NodeAppender.prepend(callsControllerHostNode, customCodeHelper.getNode());
             }

+ 3 - 8
src/custom-code-helpers/domain-lock/group/DomainLockCustomCodeHelperGroup.ts

@@ -15,7 +15,7 @@ import { ICallsGraphData } from '../../../interfaces/analyzers/calls-graph-analy
 import { initializable } from '../../../decorators/Initializable';
 
 import { CustomCodeHelper } from '../../../enums/custom-code-helpers/CustomCodeHelper';
-import { ObfuscationEvent } from '../../../enums/event-emitters/ObfuscationEvent';
+import { NodeTransformationStage } from '../../../enums/node-transformers/NodeTransformationStage';
 
 import { AbstractCustomCodeHelperGroup } from '../../AbstractCustomCodeHelperGroup';
 import { CallsControllerFunctionCodeHelper } from '../../calls-controller/CallsControllerFunctionCodeHelper';
@@ -31,11 +31,6 @@ export class DomainLockCustomCodeHelperGroup extends AbstractCustomCodeHelperGro
     @initializable()
     protected customCodeHelpers!: Map <CustomCodeHelper, ICustomCodeHelper>;
 
-    /**
-     * @type {ObfuscationEvent}
-     */
-    protected readonly appendEvent: ObfuscationEvent = ObfuscationEvent.BeforeObfuscation;
-
     /**
      * @type {TCustomCodeHelperFactory}
      */
@@ -63,7 +58,7 @@ export class DomainLockCustomCodeHelperGroup extends AbstractCustomCodeHelperGro
      * @param {TNodeWithStatements} nodeWithStatements
      * @param {ICallsGraphData[]} callsGraphData
      */
-    public appendNodes (nodeWithStatements: TNodeWithStatements, callsGraphData: ICallsGraphData[]): void {
+    public appendOnPreparing (nodeWithStatements: TNodeWithStatements, callsGraphData: ICallsGraphData[]): void {
         if (!this.options.domainLock.length) {
             return;
         }
@@ -101,7 +96,7 @@ export class DomainLockCustomCodeHelperGroup extends AbstractCustomCodeHelperGro
         this.appendCustomNodeIfExist(
             CustomCodeHelper.CallsControllerFunction,
             (customCodeHelper: ICustomCodeHelper<TInitialData<CallsControllerFunctionCodeHelper>>) => {
-                customCodeHelper.initialize(this.appendEvent, callsControllerFunctionName);
+                customCodeHelper.initialize(NodeTransformationStage.Preparing, callsControllerFunctionName);
 
                 NodeAppender.prepend(callsControllerHostNode, customCodeHelper.getNode());
             }

+ 3 - 8
src/custom-code-helpers/self-defending/group/SelfDefendingCodeHelperGroup.ts

@@ -15,7 +15,7 @@ import { ICallsGraphData } from '../../../interfaces/analyzers/calls-graph-analy
 import { initializable } from '../../../decorators/Initializable';
 
 import { CustomCodeHelper } from '../../../enums/custom-code-helpers/CustomCodeHelper';
-import { ObfuscationEvent } from '../../../enums/event-emitters/ObfuscationEvent';
+import { NodeTransformationStage } from '../../../enums/node-transformers/NodeTransformationStage';
 
 import { AbstractCustomCodeHelperGroup } from '../../AbstractCustomCodeHelperGroup';
 import { CallsControllerFunctionCodeHelper } from '../../calls-controller/CallsControllerFunctionCodeHelper';
@@ -31,11 +31,6 @@ export class SelfDefendingCodeHelperGroup extends AbstractCustomCodeHelperGroup
     @initializable()
     protected customCodeHelpers!: Map <CustomCodeHelper, ICustomCodeHelper>;
 
-    /**
-     * @type {ObfuscationEvent}
-     */
-    protected appendEvent: ObfuscationEvent = ObfuscationEvent.BeforeObfuscation;
-
     /**
      * @type {TCustomCodeHelperFactory}
      */
@@ -63,7 +58,7 @@ export class SelfDefendingCodeHelperGroup extends AbstractCustomCodeHelperGroup
      * @param {TNodeWithStatements} nodeWithStatements
      * @param {ICallsGraphData[]} callsGraphData
      */
-    public appendNodes (nodeWithStatements: TNodeWithStatements, callsGraphData: ICallsGraphData[]): void {
+    public appendOnPreparing (nodeWithStatements: TNodeWithStatements, callsGraphData: ICallsGraphData[]): void {
         if (!this.options.selfDefending) {
             return;
         }
@@ -101,7 +96,7 @@ export class SelfDefendingCodeHelperGroup extends AbstractCustomCodeHelperGroup
         this.appendCustomNodeIfExist(
             CustomCodeHelper.CallsControllerFunction,
             (customCodeHelper: ICustomCodeHelper<TInitialData<CallsControllerFunctionCodeHelper>>) => {
-                customCodeHelper.initialize(this.appendEvent, callsControllerFunctionName);
+                customCodeHelper.initialize(NodeTransformationStage.Preparing, callsControllerFunctionName);
 
                 NodeAppender.prepend(callsControllerHostNode, customCodeHelper.getNode());
             }

+ 1 - 7
src/custom-code-helpers/string-array/group/StringArrayCodeHelperGroup.ts

@@ -16,7 +16,6 @@ import { IStringArrayStorage } from '../../../interfaces/storages/string-array-t
 import { initializable } from '../../../decorators/Initializable';
 
 import { CustomCodeHelper } from '../../../enums/custom-code-helpers/CustomCodeHelper';
-import { ObfuscationEvent } from '../../../enums/event-emitters/ObfuscationEvent';
 import { StringArrayEncoding } from '../../../enums/node-transformers/string-array-transformers/StringArrayEncoding';
 
 import { AbstractCustomCodeHelperGroup } from '../../AbstractCustomCodeHelperGroup';
@@ -42,11 +41,6 @@ export class StringArrayCodeHelperGroup extends AbstractCustomCodeHelperGroup {
     @initializable()
     protected customCodeHelpers!: Map <CustomCodeHelper, ICustomCodeHelper>;
 
-    /**
-     * @type {ObfuscationEvent}
-     */
-    protected appendEvent: ObfuscationEvent = ObfuscationEvent.AfterObfuscation;
-
     /**
      * @type {TCustomCodeHelperFactory}
      */
@@ -82,7 +76,7 @@ export class StringArrayCodeHelperGroup extends AbstractCustomCodeHelperGroup {
      * @param {TNodeWithStatements} nodeWithStatements
      * @param {ICallsGraphData[]} callsGraphData
      */
-    public appendNodes (nodeWithStatements: TNodeWithStatements, callsGraphData: ICallsGraphData[]): void {
+    public appendOnFinalizing (nodeWithStatements: TNodeWithStatements, callsGraphData: ICallsGraphData[]): void {
         if (!this.stringArrayStorage.getLength()) {
             return;
         }

+ 0 - 4
src/enums/event-emitters/ObfuscationEvent.ts

@@ -1,4 +0,0 @@
-export enum ObfuscationEvent {
-    AfterObfuscation = 'afterObfuscation',
-    BeforeObfuscation = 'beforeObfuscation'
-}

+ 0 - 9
src/event-emitters/ObfuscationEventEmitter.ts

@@ -1,9 +0,0 @@
-import { decorate, injectable } from 'inversify';
-import EventEmitter from 'eventemitter3';
-
-import { IObfuscationEventEmitter } from '../interfaces/event-emitters/IObfuscationEventEmitter';
-
-decorate(injectable(), EventEmitter);
-
-@injectable()
-export class ObfuscationEventEmitter extends EventEmitter implements IObfuscationEventEmitter {}

+ 2 - 15
src/interfaces/custom-code-helpers/ICustomCodeHelperGroup.ts

@@ -1,24 +1,11 @@
-import { TNodeWithStatements } from '../../types/node/TNodeWithStatements';
+import { TCustomCodeHelpersGroupAppendMethods } from '../../types/custom-code-helpers/TCustomCodeHelpersGroupAppendMethods';
 
 import { ICustomCodeHelper } from './ICustomCodeHelper';
 import { IInitializable } from '../IInitializable';
-import { ICallsGraphData } from '../analyzers/calls-graph-analyzer/ICallsGraphData';
 
 import { CustomCodeHelper } from '../../enums/custom-code-helpers/CustomCodeHelper';
-import { ObfuscationEvent } from '../../enums/event-emitters/ObfuscationEvent';
-
-export interface ICustomCodeHelperGroup extends IInitializable {
-    /**
-     * @param nodeWithStatements
-     * @param callsGraphData
-     */
-    appendNodes (nodeWithStatements: TNodeWithStatements, callsGraphData: ICallsGraphData[]): void;
-
-    /**
-     * @returns {ObfuscationEvent}
-     */
-    getAppendEvent (): ObfuscationEvent;
 
+export interface ICustomCodeHelperGroup extends IInitializable, TCustomCodeHelpersGroupAppendMethods {
     /**
      * @type {Map <CustomCodeHelper, ICustomCodeHelper>}
      */

+ 0 - 28
src/interfaces/event-emitters/IObfuscationEventEmitter.ts

@@ -1,28 +0,0 @@
-import * as ESTree from 'estree';
-
-import { ICallsGraphData } from '../analyzers/calls-graph-analyzer/ICallsGraphData';
-
-import { ObfuscationEvent } from '../../enums/event-emitters/ObfuscationEvent';
-
-export interface IObfuscationEventEmitter {
-    /**
-     * @param {ObfuscationEvent} event
-     * @param args
-     * @returns {boolean}
-     */
-    emit (event: ObfuscationEvent, ...args: [ESTree.Program, ICallsGraphData[]]): boolean;
-
-    /**
-     * @param event
-     * @param listener
-     * @returns this
-     */
-    on (event: ObfuscationEvent, listener: Function): this;
-
-    /**
-     * @param event
-     * @param listener
-     * @returns this
-     */
-    once (event: ObfuscationEvent, listener: Function): this;
-}

+ 19 - 27
src/node-transformers/preparing-transformers/CustomCodeHelpersTransformer.ts

@@ -6,7 +6,6 @@ import * as ESTree from 'estree';
 import { TCustomCodeHelperGroupStorage } from '../../types/storages/TCustomCodeHelperGroupStorage';
 
 import { ICustomCodeHelperGroup } from '../../interfaces/custom-code-helpers/ICustomCodeHelperGroup';
-import { IObfuscationEventEmitter } from '../../interfaces/event-emitters/IObfuscationEventEmitter';
 import { IOptions } from '../../interfaces/options/IOptions';
 import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
 import { ICallsGraphAnalyzer } from '../../interfaces/analyzers/calls-graph-analyzer/ICallsGraphAnalyzer';
@@ -15,7 +14,6 @@ import { IPrevailingKindOfVariablesAnalyzer } from '../../interfaces/analyzers/c
 import { IVisitor } from '../../interfaces/node-transformers/IVisitor';
 
 import { NodeTransformer } from '../../enums/node-transformers/NodeTransformer';
-import { ObfuscationEvent } from '../../enums/event-emitters/ObfuscationEvent';
 import { NodeTransformationStage } from '../../enums/node-transformers/NodeTransformationStage';
 
 import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
@@ -39,11 +37,6 @@ export class CustomCodeHelpersTransformer extends AbstractNodeTransformer {
      */
     private readonly customCodeHelperGroupStorage: TCustomCodeHelperGroupStorage;
 
-    /**
-     * @type {IObfuscationEventEmitter}
-     */
-    private readonly obfuscationEventEmitter: IObfuscationEventEmitter;
-
     /**
      * @type {ICallsGraphAnalyzer}
      */
@@ -62,7 +55,6 @@ export class CustomCodeHelpersTransformer extends AbstractNodeTransformer {
     /**
      * @param {ICallsGraphAnalyzer} callsGraphAnalyzer
      * @param {IPrevailingKindOfVariablesAnalyzer} prevailingKindOfVariablesAnalyzer
-     * @param {IObfuscationEventEmitter} obfuscationEventEmitter
      * @param {TCustomCodeHelperGroupStorage} customCodeHelperGroupStorage
      * @param {IRandomGenerator} randomGenerator
      * @param {IOptions} options
@@ -71,7 +63,6 @@ export class CustomCodeHelpersTransformer extends AbstractNodeTransformer {
         @inject(ServiceIdentifiers.ICallsGraphAnalyzer) callsGraphAnalyzer: ICallsGraphAnalyzer,
         @inject(ServiceIdentifiers.IPrevailingKindOfVariablesAnalyzer)
             prevailingKindOfVariablesAnalyzer: IPrevailingKindOfVariablesAnalyzer,
-        @inject(ServiceIdentifiers.IObfuscationEventEmitter) obfuscationEventEmitter: IObfuscationEventEmitter,
         @inject(ServiceIdentifiers.TCustomNodeGroupStorage) customCodeHelperGroupStorage: TCustomCodeHelperGroupStorage,
         @inject(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator,
         @inject(ServiceIdentifiers.IOptions) options: IOptions
@@ -80,7 +71,6 @@ export class CustomCodeHelpersTransformer extends AbstractNodeTransformer {
 
         this.callsGraphAnalyzer = callsGraphAnalyzer;
         this.prevailingKindOfVariablesAnalyzer = prevailingKindOfVariablesAnalyzer;
-        this.obfuscationEventEmitter = obfuscationEventEmitter;
         this.customCodeHelperGroupStorage = customCodeHelperGroupStorage;
     }
 
@@ -95,24 +85,23 @@ export class CustomCodeHelpersTransformer extends AbstractNodeTransformer {
                     leave: (node: ESTree.Node, parentNode: ESTree.Node | null): ESTree.Node | undefined => {
                         if (NodeGuards.isProgramNode(node)) {
                             this.prepareNode(node, parentNode);
-                            this.appendCustomNodesBeforeObfuscation(node, parentNode);
+                            this.appendCustomNodesForPreparingStage(node, parentNode);
 
                             return this.transformNode(node, parentNode);
                         }
                     }
                 };
 
-            case NodeTransformationStage.Finalizing:
+            default:
                 return {
-                    leave: (node: ESTree.Node, parentNode: ESTree.Node | null): void => {
+                    leave: (node: ESTree.Node, parentNode: ESTree.Node | null): ESTree.Node | undefined => {
                         if (NodeGuards.isProgramNode(node)) {
-                            this.appendCustomNodesAfterObfuscation(node, parentNode);
+                            this.appendCustomNodesForStage(nodeTransformationStage, node, parentNode);
                         }
+
+                        return node;
                     }
                 };
-
-            default:
-                return null;
         }
     }
 
@@ -138,26 +127,29 @@ export class CustomCodeHelpersTransformer extends AbstractNodeTransformer {
      * @param {Program} node
      * @param {Node | null} parentNode
      */
-    private appendCustomNodesBeforeObfuscation (node: ESTree.Program, parentNode: ESTree.Node | null): void {
+    private appendCustomNodesForPreparingStage (node: ESTree.Program, parentNode: ESTree.Node | null): void {
         this.customCodeHelperGroupStorage
             .getStorage()
             .forEach((customCodeHelperGroup: ICustomCodeHelperGroup) => {
                 customCodeHelperGroup.initialize();
-
-                this.obfuscationEventEmitter.once(
-                    customCodeHelperGroup.getAppendEvent(),
-                    customCodeHelperGroup.appendNodes.bind(customCodeHelperGroup)
-                );
+                customCodeHelperGroup.appendOnPreparing?.(node, this.callsGraphData);
             });
-
-        this.obfuscationEventEmitter.emit(ObfuscationEvent.BeforeObfuscation, node, this.callsGraphData);
     }
 
     /**
+     * @param {NodeTransformationStage} nodeTransformationStage
      * @param {Program} node
      * @param {Node | null} parentNode
      */
-    private appendCustomNodesAfterObfuscation (node: ESTree.Program, parentNode: ESTree.Node | null): void {
-        this.obfuscationEventEmitter.emit(ObfuscationEvent.AfterObfuscation, node, this.callsGraphData);
+    private appendCustomNodesForStage (
+        nodeTransformationStage: NodeTransformationStage,
+        node: ESTree.Program,
+        parentNode: ESTree.Node | null
+    ): void {
+        this.customCodeHelperGroupStorage
+            .getStorage()
+            .forEach((customCodeHelperGroup: ICustomCodeHelperGroup) => {
+                customCodeHelperGroup[`appendOn${nodeTransformationStage}`]?.(node, this.callsGraphData);
+            });
     }
 }

+ 16 - 0
src/types/custom-code-helpers/TCustomCodeHelpersGroupAppendMethods.ts

@@ -0,0 +1,16 @@
+import { TNodeWithStatements } from '../node/TNodeWithStatements';
+
+import { ICallsGraphData } from '../../interfaces/analyzers/calls-graph-analyzer/ICallsGraphData';
+
+import { NodeTransformationStage } from '../../enums/node-transformers/NodeTransformationStage';
+
+export type TCustomCodeHelpersGroupAppendMethods = {
+    /**
+     * @param nodeWithStatements
+     * @param callsGraphData
+     */
+    [key in `appendOn${Capitalize<NodeTransformationStage>}`]?: (
+        nodeWithStatements: TNodeWithStatements,
+        callsGraphData: ICallsGraphData[]
+    ) => void;
+};

+ 7 - 4
test/dev/dev.ts

@@ -7,14 +7,17 @@ import { NO_ADDITIONAL_NODES_PRESET } from '../../src/options/presets/NoCustomNo
 
     let obfuscatedCode: string = JavaScriptObfuscator.obfuscate(
         `
-            const test = () => ({
-                foo: 'bar'
-            });
+            function hi() {
+              console.log("Hello World!");
+            }
+            hi();
         `,
         {
             ...NO_ADDITIONAL_NODES_PRESET,
             compact: false,
-            transformObjectKeys: true
+            stringArray: true,
+            stringArrayThreshold: 1,
+            rotateStringArray: true
         }
     ).getObfuscatedCode();
 

+ 8 - 13
yarn.lock

@@ -530,10 +530,10 @@
   resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.3.tgz#6356df2647de9eac569f9a52eda3480fa9e70b4d"
   integrity sha512-01s+ac4qerwd6RHD+mVbOEsraDHSgUaefQlEdBbUolnQFjKwCr7luvAlEwW1RFojh67u0z4OUTjPn9LEl4zIkA==
 
-"@types/[email protected]4":
-  version "14.14.14"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.14.tgz#f7fd5f3cc8521301119f63910f0fb965c7d761ae"
-  integrity sha512-UHnOPWVWV1z+VV8k6L1HhG7UbGBgIdghqF3l9Ny9ApPghbjICXkUJSd/b9gOgQfjM1r+37cipdw/HJ3F6ICEnQ==
+"@types/[email protected]6":
+  version "14.14.16"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.16.tgz#3cc351f8d48101deadfed4c9e4f116048d437b4b"
+  integrity sha512-naXYePhweTi+BMv11TgioE2/FXU4fSl29HAH1ffxVciNsH3rYXjNP2yM8wqmSm7jS20gM8TIklKiTen+1iVncw==
 
 "@types/normalize-package-data@^2.4.0":
   version "2.4.0"
@@ -553,10 +553,10 @@
     "@types/glob" "*"
     "@types/node" "*"
 
-"@types/[email protected].9":
-  version "9.0.9"
-  resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-9.0.9.tgz#115843b491583f924080f684b6d0d7438344f73c"
-  integrity sha512-z/y8maYOQyYLyqaOB+dYQ6i0pxKLOsfwCmHmn4T7jS/SDHicIslr37oE3Dg8SCqKrKeBy6Lemu7do2yy+unLrw==
+"@types/[email protected].10":
+  version "9.0.10"
+  resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-9.0.10.tgz#7fb9bcb6794262482859cab66d59132fca18fcf7"
+  integrity sha512-/faDC0erR06wMdybwI/uR8wEKV/E83T0k4sepIpB7gXuy2gzx2xiOjmztq6a2Y6rIGJ04D+6UU0VBmWy+4HEMA==
   dependencies:
     "@types/sinonjs__fake-timers" "*"
 
@@ -2037,11 +2037,6 @@ esutils@^2.0.2:
   resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
   integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
 
[email protected]:
-  version "4.0.7"
-  resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
-  integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
-
 events@^3.2.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379"