@@ -4,9 +4,11 @@ import { ServiceIdentifiers } from './container/ServiceIdentifiers';
44import * as estraverse from 'estraverse' ;
55import * as ESTree from 'estree' ;
66
7+ import { TNodeGuard } from './types/node/TNodeGuard' ;
78import { TNodeTransformerFactory } from './types/container/node-transformers/TNodeTransformerFactory' ;
89import { TVisitorDirection } from './types/TVisitorDirection' ;
910import { TVisitorFunction } from './types/TVisitorFunction' ;
11+ import { TVisitorResult } from './types/TVisitorResult' ;
1012
1113import { ICustomNodeGroup } from './interfaces/custom-nodes/ICustomNodeGroup' ;
1214import { IObfuscationEventEmitter } from './interfaces/event-emitters/IObfuscationEventEmitter' ;
@@ -26,6 +28,13 @@ import { NodeUtils } from './node/NodeUtils';
2628
2729@injectable ( )
2830export class Obfuscator implements IObfuscator {
31+ /**
32+ * @type {((node: Node) => boolean)[] }
33+ */
34+ private static readonly blackListGuards : TNodeGuard [ ] = [
35+ Node . isUseStrictOperator
36+ ] ;
37+
2938 /**
3039 * @type {NodeTransformer[] }
3140 */
@@ -109,6 +118,26 @@ export class Obfuscator implements IObfuscator {
109118 this . options = options ;
110119 }
111120
121+ /**
122+ * @param {Node } node
123+ * @returns {boolean }
124+ */
125+ private static isBlackListNode ( node : ESTree . Node ) : boolean {
126+ const guardsLength : number = Obfuscator . blackListGuards . length ;
127+
128+ let guard : TNodeGuard ;
129+
130+ for ( let i : number = 0 ; i < guardsLength ; i ++ ) {
131+ guard = Obfuscator . blackListGuards [ i ] ;
132+
133+ if ( guard ( node ) ) {
134+ return true ;
135+ }
136+ }
137+
138+ return false ;
139+ }
140+
112141 /**
113142 * @param {Program } astTree
114143 * @returns {Program }
@@ -211,6 +240,10 @@ export class Obfuscator implements IObfuscator {
211240 let visitor : IVisitor ;
212241
213242 return ( node : ESTree . Node , parentNode : ESTree . Node ) => {
243+ if ( Obfuscator . isBlackListNode ( node ) ) {
244+ return estraverse . VisitorOption . Skip ;
245+ }
246+
214247 for ( let i : number = 0 ; i < visitorsLength ; i ++ ) {
215248 visitor = visitors [ i ] ;
216249
@@ -220,9 +253,9 @@ export class Obfuscator implements IObfuscator {
220253 continue ;
221254 }
222255
223- const visitorResult : ESTree . Node | void = visitorFunction ( node , parentNode ) ;
256+ const visitorResult : TVisitorResult = visitorFunction ( node , parentNode ) ;
224257
225- if ( ! visitorResult ) {
258+ if ( ! visitorResult || ! Node . isNode ( visitorResult ) ) {
226259 continue ;
227260 }
228261
0 commit comments