浏览代码

`ignoreRequireImports` option renamed to `ignoreImports`

sanex 3 年之前
父节点
当前提交
faaab45c6a

+ 4 - 0
CHANGELOG.md

@@ -1,5 +1,9 @@
 Change Log
 
+v3.0.0
+---
+* **Breaking change:** `ignoreRequireImports` option renamed to `ignoreImports`
+
 v2.19.1
 ---
 * Updated `@javascript-obfuscator/escodegen` with fixed parenthesis of `default export` IIFE

+ 1 - 1
README.md

@@ -421,7 +421,7 @@ Following options are available for the JS Obfuscator:
     --identifier-names-generator <string> [dictionary, hexadecimal, mangled, mangled-shuffled]
     --identifiers-dictionary '<list>' (comma separated)
     --identifiers-prefix <string>
-    --ignore-require-imports <boolean>
+    --ignore-imports <boolean>
     --log <boolean>
     --numbers-to-expressions <boolean>
     --options-preset <string> [default, low-obfuscation, medium-obfuscation, high-obfuscation]

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "javascript-obfuscator",
-  "version": "2.19.1",
+  "version": "3.0.0",
   "description": "JavaScript obfuscator",
   "keywords": [
     "obfuscator",

+ 1 - 1
src/cli/JavaScriptObfuscatorCLI.ts

@@ -271,7 +271,7 @@ export class JavaScriptObfuscatorCLI implements IInitializable {
                 ArraySanitizer
             )
             .option(
-                '--ignore-require-imports <boolean>', 'Prevents obfuscation of `require` imports',
+                '--ignore-imports <boolean>', 'Prevents obfuscation of `require` and `dynamic` imports',
                 BooleanSanitizer
             )
             .option(

+ 3 - 3
src/container/modules/node-transformers/PreparingTransformersModule.ts

@@ -13,7 +13,7 @@ import { ConditionalCommentObfuscatingGuard } from '../../../node-transformers/p
 import { CustomCodeHelpersTransformer } from '../../../node-transformers/preparing-transformers/CustomCodeHelpersTransformer';
 import { EvalCallExpressionTransformer } from '../../../node-transformers/preparing-transformers/EvalCallExpressionTransformer';
 import { ForceTransformStringObfuscatingGuard } from '../../../node-transformers/preparing-transformers/obfuscating-guards/ForceTransformStringObfuscatingGuard';
-import { IgnoredRequireImportObfuscatingGuard } from '../../../node-transformers/preparing-transformers/obfuscating-guards/IgnoredRequireImportObfuscatingGuard';
+import { IgnoredImportObfuscatingGuard } from '../../../node-transformers/preparing-transformers/obfuscating-guards/IgnoredImportObfuscatingGuard';
 import { MetadataTransformer } from '../../../node-transformers/preparing-transformers/MetadataTransformer';
 import { ObfuscatingGuardsTransformer } from '../../../node-transformers/preparing-transformers/ObfuscatingGuardsTransformer';
 import { ParentificationTransformer } from '../../../node-transformers/preparing-transformers/ParentificationTransformer';
@@ -63,9 +63,9 @@ export const preparingTransformersModule: interfaces.ContainerModule = new Conta
         .whenTargetNamed(ObfuscatingGuard.ForceTransformStringObfuscatingGuard);
 
     bind<IObfuscatingGuard>(ServiceIdentifiers.INodeGuard)
-        .to(IgnoredRequireImportObfuscatingGuard)
+        .to(IgnoredImportObfuscatingGuard)
         .inSingletonScope()
-        .whenTargetNamed(ObfuscatingGuard.IgnoredRequireImportObfuscatingGuard);
+        .whenTargetNamed(ObfuscatingGuard.IgnoredImportObfuscatingGuard);
 
     bind<IObfuscatingGuard>(ServiceIdentifiers.INodeGuard)
         .to(ReservedStringObfuscatingGuard)

+ 1 - 1
src/enums/node-transformers/preparing-transformers/obfuscating-guards/ObfuscatingGuard.ts

@@ -2,6 +2,6 @@ export enum ObfuscatingGuard {
     BlackListObfuscatingGuard = 'BlackListObfuscatingGuard',
     ConditionalCommentObfuscatingGuard = 'ConditionalCommentObfuscatingGuard',
     ForceTransformStringObfuscatingGuard = 'ForceTransformStringObfuscatingGuard',
-    IgnoredRequireImportObfuscatingGuard = 'IgnoredRequireImportObfuscatingGuard',
+    IgnoredImportObfuscatingGuard = 'IgnoredImportObfuscatingGuard',
     ReservedStringObfuscatingGuard = 'ReservedStringObfuscatingGuard'
 }

+ 1 - 1
src/interfaces/options/IOptions.ts

@@ -27,7 +27,7 @@ export interface IOptions {
     readonly identifierNamesGenerator: TTypeFromEnum<typeof IdentifierNamesGenerator>;
     readonly identifiersDictionary: string[];
     readonly identifiersPrefix: string;
-    readonly ignoreRequireImports: boolean;
+    readonly ignoreImports: boolean;
     readonly inputFileName: string;
     readonly log: boolean;
     readonly numbersToExpressions: boolean;

+ 1 - 1
src/node-transformers/preparing-transformers/ObfuscatingGuardsTransformer.ts

@@ -31,7 +31,7 @@ export class ObfuscatingGuardsTransformer extends AbstractNodeTransformer {
         ObfuscatingGuard.BlackListObfuscatingGuard,
         ObfuscatingGuard.ConditionalCommentObfuscatingGuard,
         ObfuscatingGuard.ForceTransformStringObfuscatingGuard,
-        ObfuscatingGuard.IgnoredRequireImportObfuscatingGuard,
+        ObfuscatingGuard.IgnoredImportObfuscatingGuard,
         ObfuscatingGuard.ReservedStringObfuscatingGuard
     ];
 

+ 26 - 10
src/node-transformers/preparing-transformers/obfuscating-guards/IgnoredRequireImportObfuscatingGuard.ts → src/node-transformers/preparing-transformers/obfuscating-guards/IgnoredImportObfuscatingGuard.ts

@@ -12,7 +12,7 @@ import { ServiceIdentifiers } from '../../../container/ServiceIdentifiers';
 import { NodeGuards } from '../../../node/NodeGuards';
 
 @injectable()
-export class IgnoredRequireImportObfuscatingGuard implements IObfuscatingGuard {
+export class IgnoredImportObfuscatingGuard implements IObfuscatingGuard {
     /**
      * @type {IOptions}
      */
@@ -27,20 +27,36 @@ export class IgnoredRequireImportObfuscatingGuard implements IObfuscatingGuard {
         this.options = options;
     }
 
+    /**
+     * @param {Node} node
+     * @returns {boolean}
+     */
+    private static isDynamicImport (node: ESTree.Node): boolean {
+        return NodeGuards.isImportExpressionNode(node);
+    }
+
+    /**
+     * @param {Node} node
+     * @returns {boolean}
+     */
+    private static isRequireImport (node: ESTree.Node): boolean {
+        return NodeGuards.isCallExpressionNode(node)
+            && NodeGuards.isIdentifierNode(node.callee)
+            && node.callee.name === 'require';
+    }
+
     /**
      * @param {Node} node
      * @returns {ObfuscatingGuardResult}
      */
     public check (node: ESTree.Node): ObfuscatingGuardResult {
-        if (this.options.ignoreRequireImports) {
-            if (
-                NodeGuards.isCallExpressionNode(node)
-                && NodeGuards.isIdentifierNode(node.callee)
-                && node.callee.name === 'require'
-            ) { return ObfuscatingGuardResult.Ignore; }
-            if (
-                NodeGuards.isImportExpressionNode(node)
-            ) { return ObfuscatingGuardResult.Ignore; }
+        if (this.options.ignoreImports) {
+            const isIgnoredImport = IgnoredImportObfuscatingGuard.isDynamicImport(node)
+                || IgnoredImportObfuscatingGuard.isRequireImport(node);
+
+            if (isIgnoredImport) {
+                return ObfuscatingGuardResult.Ignore;
+            }
         }
 
         return ObfuscatingGuardResult.Transform;

+ 1 - 1
src/options/Options.ts

@@ -191,7 +191,7 @@ export class Options implements IOptions {
      * @type {boolean}
      */
     @IsBoolean()
-    public readonly ignoreRequireImports!: boolean;
+    public readonly ignoreImports!: boolean;
 
     /**
      * @type {string}

+ 1 - 1
src/options/presets/Default.ts

@@ -28,7 +28,7 @@ export const DEFAULT_PRESET: TInputOptions = Object.freeze({
     identifierNamesGenerator: IdentifierNamesGenerator.HexadecimalIdentifierNamesGenerator,
     identifiersPrefix: '',
     identifiersDictionary: [],
-    ignoreRequireImports: false,
+    ignoreImports: false,
     inputFileName: '',
     log: false,
     numbersToExpressions: false,

+ 1 - 1
src/options/presets/NoCustomNodes.ts

@@ -25,7 +25,7 @@ export const NO_ADDITIONAL_NODES_PRESET: TInputOptions = Object.freeze({
     identifierNamesGenerator: IdentifierNamesGenerator.HexadecimalIdentifierNamesGenerator,
     identifiersPrefix: '',
     identifiersDictionary: [],
-    ignoreRequireImports: false,
+    ignoreImports: false,
     inputFileName: '',
     log: false,
     numbersToExpressions: false,

+ 11 - 10
test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/ignored-require-import-obfuscating-guard/IgnoredRequireImportObfuscatingGuard.spec.ts → test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/ignored-import-obfuscating-guard/IgnoredImportObfuscatingGuard.spec.ts

@@ -6,13 +6,14 @@ import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../../src/options/preset
 
 import { readFileAsString } from '../../../../../helpers/readFileAsString';
 
-describe('IgnoredRequireImportObfuscatingGuard', () => {
+describe('IgnoredImportObfuscatingGuard', () => {
     describe('check', () => {
-        describe('`ignoreRequireImports` option is enabled', () => {
+        describe('`ignoreImports` option is enabled', () => {
             const obfuscatingGuardRegExp: RegExp = new RegExp(
                 'const foo *= *require\\(\'\\./foo\'\\);.*' +
                 'import _0x(?:[a-f0-9]){4,6} from *\'\\./bar\';.*' +
-                'const baz *= *_0x(?:[a-f0-9]){4,6}\\(0x0\\);'
+                'const baz *= *_0x(?:[a-f0-9]){4,6}\\(0x0\\);.*' +
+                'const bark *= *await import\\(\'\\./bark\'\\);'
             );
 
             let obfuscatedCode: string;
@@ -24,24 +25,24 @@ describe('IgnoredRequireImportObfuscatingGuard', () => {
                     code,
                     {
                         ...NO_ADDITIONAL_NODES_PRESET,
-                        ignoreRequireImports: true,
+                        ignoreImports: true,
                         stringArray: true,
                         stringArrayThreshold: 1
                     }
                 ).getObfuscatedCode();
             });
 
-            it('match #1: shouldn\'t obfuscate require import', () => {
+            it('match #1: shouldn\'t obfuscate imports', () => {
                 assert.match(obfuscatedCode, obfuscatingGuardRegExp);
             });
         });
 
-        describe('`ignoreRequireImports` option is disabled', () => {
+        describe('`ignoreImports` option is disabled', () => {
             const obfuscatingGuardRegExp: RegExp = new RegExp(
                 'const foo *= *require\\(_0x(?:[a-f0-9]){4,6}\\(0x0\\)\\);.*' +
                 'import _0x(?:[a-f0-9]){4,6} from *\'\\./bar\';.*' +
-                'const baz *= *_0x(?:[a-f0-9]){4,6}\\(0x1\\);' +
-                'const qux *= *import\\(_0x(?:[a-f0-9]){4,6}\\(0x0\\)\\);.*'
+                'const baz *= *_0x(?:[a-f0-9]){4,6}\\(0x1\\);.*' +
+                'const bark *= *await import\\(_0x(?:[a-f0-9]){4,6}\\(0x2\\)\\);'
             );
 
             let obfuscatedCode: string;
@@ -53,14 +54,14 @@ describe('IgnoredRequireImportObfuscatingGuard', () => {
                     code,
                     {
                         ...NO_ADDITIONAL_NODES_PRESET,
-                        ignoreRequireImports: false,
+                        ignoreImports: false,
                         stringArray: true,
                         stringArrayThreshold: 1
                     }
                 ).getObfuscatedCode();
             });
 
-            it('match #1: should obfuscate require import', () => {
+            it('match #1: should obfuscate imports', () => {
                 assert.match(obfuscatedCode, obfuscatingGuardRegExp);
             });
         });

+ 1 - 1
test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/ignored-require-import-obfuscating-guard/fixtures/base-behaviour.js → test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/ignored-import-obfuscating-guard/fixtures/base-behaviour.js

@@ -1,4 +1,4 @@
 const foo = require('./foo');
 import bar from './bar';
 const baz = 'baz';
-const qux = await import('quux')
+const bark = await import('./bark');

+ 1 - 1
test/index.spec.ts

@@ -108,7 +108,7 @@ import './functional-tests/node-transformers/preparing-transformers/eval-call-ex
 import './functional-tests/node-transformers/preparing-transformers/obfuscating-guards/black-list-obfuscating-guard/BlackListObfuscatingGuard.spec';
 import './functional-tests/node-transformers/preparing-transformers/obfuscating-guards/conditional-comment-obfuscating-guard/ConditionalCommentObfuscatingGuard.spec';
 import './functional-tests/node-transformers/preparing-transformers/obfuscating-guards/force-transform-string-obfuscating-guard/ForceTransformStringObfuscatingGuard.spec';
-import './functional-tests/node-transformers/preparing-transformers/obfuscating-guards/ignored-require-import-obfuscating-guard/IgnoredRequireImportObfuscatingGuard.spec';
+import './functional-tests/node-transformers/preparing-transformers/obfuscating-guards/ignored-import-obfuscating-guard/IgnoredImportObfuscatingGuard.spec';
 import './functional-tests/node-transformers/preparing-transformers/obfuscating-guards/reserved-string-obfuscating-guard/ReservedStringObfuscatingGuard.spec';
 import './functional-tests/node-transformers/preparing-transformers/variable-preserve-transformer/VariablePreserveTransformer.spec';
 import './functional-tests/node-transformers/rename-identifiers-transformers/identifier-replacer/IdentifierReplacer.spec';