소스 검색

Merge pull request #1004 from sxzz/feat/dynamic-import

fix: dynamic import
Timofey Kachalov 3 년 전
부모
커밋
848f1888cc

+ 1 - 0
src/enums/node/NodeType.ts

@@ -28,6 +28,7 @@ export enum NodeType {
     Identifier = 'Identifier',
     IfStatement = 'IfStatement',
     ImportDeclaration = 'ImportDeclaration',
+    ImportExpression = 'ImportExpression',
     ImportDefaultSpecifier = 'ImportDefaultSpecifier',
     ImportNamespaceSpecifier = 'ImportNamespaceSpecifier',
     ImportSpecifier = 'ImportSpecifier',

+ 9 - 7
src/node-transformers/preparing-transformers/obfuscating-guards/IgnoredRequireImportObfuscatingGuard.ts

@@ -32,13 +32,15 @@ export class IgnoredRequireImportObfuscatingGuard implements IObfuscatingGuard {
      * @returns {ObfuscatingGuardResult}
      */
     public check (node: ESTree.Node): ObfuscatingGuardResult {
-        if (
-            this.options.ignoreRequireImports
-            && NodeGuards.isCallExpressionNode(node)
-            && NodeGuards.isIdentifierNode(node.callee)
-            && node.callee.name === 'require'
-        ) {
-            return ObfuscatingGuardResult.Ignore;
+        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; }
         }
 
         return ObfuscatingGuardResult.Transform;

+ 8 - 0
src/node/NodeGuards.ts

@@ -266,6 +266,14 @@ export class NodeGuards {
         return node.type === NodeType.ImportDeclaration;
     }
 
+    /**
+     * @param {Node} node
+     * @returns {boolean}
+     */
+    public static isImportExpressionNode (node: ESTree.Node): node is ESTree.ImportExpression {
+        return node.type === NodeType.ImportExpression;
+    }
+
     /**
      * @param {Node} node
      * @returns {boolean}

+ 2 - 1
test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/ignored-require-import-obfuscating-guard/IgnoredRequireImportObfuscatingGuard.spec.ts

@@ -40,7 +40,8 @@ describe('IgnoredRequireImportObfuscatingGuard', () => {
             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 baz *= *_0x(?:[a-f0-9]){4,6}\\(0x1\\);' +
+                'const qux *= *import\\(_0x(?:[a-f0-9]){4,6}\\(0x0\\)\\);.*'
             );
 
             let obfuscatedCode: string;

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

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