Explorar o código

Merge remote-tracking branch 'origin/master' into tslint-rules-update

# Conflicts:
#	dist/index.js
sanex3339 %!s(int64=7) %!d(string=hai) anos
pai
achega
87b8c52a20

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
dist/index.js


+ 4 - 4
package.json

@@ -1,6 +1,6 @@
 {
   "name": "javascript-obfuscator",
-  "version": "0.15.0-dev.6",
+  "version": "0.15.0",
   "description": "JavaScript obfuscator",
   "keywords": [
     "obfuscator",
@@ -53,7 +53,7 @@
     "@types/mkdirp": "0.5.2",
     "@types/mocha": "5.0.0",
     "@types/multimatch": "2.1.2",
-    "@types/node": "9.6.0",
+    "@types/node": "9.6.1",
     "@types/rimraf": "2.0.2",
     "@types/sinon": "4.3.0",
     "@types/string-template": "1.0.2",
@@ -66,7 +66,7 @@
     "mocha": "5.0.5",
     "pre-commit": "1.2.2",
     "rimraf": "2.6.2",
-    "sinon": "4.4.9",
+    "sinon": "4.4.10",
     "threads": "0.10.1",
     "ts-node": "5.0.1",
     "tslint": "5.9.1",
@@ -75,7 +75,7 @@
     "tslint-microsoft-contrib": "5.0.3",
     "tslint-webpack-plugin": "1.2.2",
     "typescript": "2.8.1",
-    "webpack": "4.3.0",
+    "webpack": "4.4.1",
     "webpack-cli": "2.0.13",
     "webpack-node-externals": "1.6.0"
   },

+ 6 - 0
src/interfaces/storages/IMapStorage.d.ts

@@ -28,6 +28,12 @@ export interface IMapStorage <K, V> extends IInitializable {
      */
     getStorageId (): string;
 
+    /**
+     * @param {K} key
+     * @returns {boolean}
+     */
+    has (key: K): boolean;
+
     /**
      * @param args
      */

+ 13 - 18
src/node/NodeUtils.ts

@@ -13,22 +13,18 @@ import { NodeMetadata } from './NodeMetadata';
 
 export class NodeUtils {
     /**
-     * @param {T} astTree
+     * @param {T} node
      * @returns {T}
      */
-    public static addXVerbatimPropertyToLiterals <T extends ESTree.Node = ESTree.Node> (astTree: T): T {
-        estraverse.replace(astTree, {
-            leave: (node: ESTree.Node) => {
-                if (NodeGuards.isLiteralNode(node)) {
-                    node['x-verbatim-property'] = {
-                        content: node.raw,
-                        precedence: escodegen.Precedence.Primary
-                    };
-                }
-            }
-        });
+    public static addXVerbatimPropertyToLiteralNode <T extends ESTree.Node = ESTree.Node> (node: T): T {
+        if (NodeGuards.isLiteralNode(node)) {
+            node['x-verbatim-property'] = {
+                content: node.raw,
+                precedence: escodegen.Precedence.Primary
+            };
+        }
 
-        return astTree;
+        return node;
     }
 
     /**
@@ -44,13 +40,12 @@ export class NodeUtils {
      * @returns {Statement[]}
      */
     public static convertCodeToStructure (code: string): ESTree.Statement[] {
-        let structure: ESTree.Program = espree.parse(code, { sourceType: 'script' });
-
-        structure = NodeUtils.addXVerbatimPropertyToLiterals(structure);
-        structure = NodeUtils.parentize(structure);
+        const structure: ESTree.Program = espree.parse(code, { sourceType: 'script' });
 
         estraverse.replace(structure, {
-            enter: (node: ESTree.Node): ESTree.Node => {
+            enter: (node: ESTree.Node, parentNode: ESTree.Node | null): ESTree.Node => {
+                NodeUtils.parentizeNode(node, parentNode);
+                NodeUtils.addXVerbatimPropertyToLiteralNode(node);
                 NodeMetadata.set(node, { ignoredNode: false });
 
                 return node;

+ 8 - 0
src/storages/MapStorage.ts

@@ -98,6 +98,14 @@ export abstract class MapStorage <K, V> implements IMapStorage <K, V> {
         return this.storageId;
     }
 
+    /**
+     * @param {K} key
+     * @returns {boolean}
+     */
+    public has (key: K): boolean {
+        return this.storage.has(key);
+    }
+
     /**
      * @param {this} storage
      * @param {boolean} mergeId

+ 1 - 1
test/unit-tests/node/node-utils/NodeUtils.spec.ts

@@ -20,7 +20,7 @@ describe('NodeUtils', () => {
 
             expectedLiteralNode = NodeFactory.literalNode('value');
 
-            NodeUtils.addXVerbatimPropertyToLiterals(literalNode);
+            NodeUtils.addXVerbatimPropertyToLiteralNode(literalNode);
         });
 
         it('should add `x-verbatim-property` to `Literal` node', () => {

+ 2 - 0
test/unit-tests/storages/ArrayStorage.spec.ts

@@ -1,3 +1,5 @@
+import 'reflect-metadata';
+
 import { assert } from 'chai';
 
 import { ServiceIdentifiers } from '../../../src/container/ServiceIdentifiers';

+ 37 - 0
test/unit-tests/storages/MapStorage.spec.ts

@@ -1,3 +1,5 @@
+import 'reflect-metadata';
+
 import { assert } from 'chai';
 
 import { ServiceIdentifiers } from '../../../src/container/ServiceIdentifiers';
@@ -175,6 +177,41 @@ describe('MapStorage', () => {
         });
     });
 
+    describe('has (key: K): boolean', () => {
+        describe('Variant #1: item is presenting in storage', () => {
+            const expectedItemExistence: boolean = true;
+
+            let itemExistence: boolean;
+
+            before(() => {
+                storage = getStorageInstance<string>();
+                storage.set(storageKey, storageValue);
+
+                itemExistence = storage.has(storageKey);
+            });
+
+            it('should return `true` if item is presenting in storage', () => {
+                assert.equal(itemExistence, expectedItemExistence);
+            });
+        });
+
+        describe('Variant #2: item isn\'t presenting in storage', () => {
+            const expectedItemExistence: boolean = false;
+
+            let itemExistence: boolean;
+
+            before(() => {
+                storage = getStorageInstance<string>();
+
+                itemExistence = storage.has(storageKey);
+            });
+
+            it('should return `false` if item isn\'t presenting in storage', () => {
+                assert.equal(itemExistence, expectedItemExistence);
+            });
+        });
+    });
+
     describe('set (key: K, value: V): void', () => {
         let value: string;
 

+ 11 - 7
yarn.lock

@@ -595,10 +595,14 @@
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/@types/multimatch/-/multimatch-2.1.2.tgz#7d705c35b6ec6ae94f2dbfc384adb05f0974e6d7"
 
-"@types/node@*", "@types/[email protected]":
+"@types/node@*":
   version "9.6.0"
   resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.0.tgz#d3480ee666df9784b1001a1872a2f6ccefb6c2d7"
 
+"@types/[email protected]":
+  version "9.6.1"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.1.tgz#e2d374ef15b315b48e7efc308fa1a7cd51faa06c"
+
 "@types/[email protected]":
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-2.0.2.tgz#7f0fc3cf0ff0ad2a99bb723ae1764f30acaf8b6e"
@@ -5174,9 +5178,9 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
 
[email protected].9:
-  version "4.4.9"
-  resolved "https://registry.yarnpkg.com/sinon/-/sinon-4.4.9.tgz#0792a2a5171eb0cf242edacb0eba3898b8b4297f"
[email protected].10:
+  version "4.4.10"
+  resolved "https://registry.yarnpkg.com/sinon/-/sinon-4.4.10.tgz#592ba39256cd5aecd35c883e1da2759b75d90e02"
   dependencies:
     "@sinonjs/formatio" "^2.0.0"
     diff "^3.1.0"
@@ -5994,9 +5998,9 @@ webpack-sources@^1.0.1, webpack-sources@^1.1.0:
     source-list-map "^2.0.0"
     source-map "~0.6.1"
 
-webpack@4.3.0:
-  version "4.3.0"
-  resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.3.0.tgz#0b0c1e211311b3995dd25aed47ab46ea658be070"
+webpack@4.4.1:
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.4.1.tgz#b0105789890c28bfce9f392623ef5850254328a4"
   dependencies:
     acorn "^5.0.0"
     acorn-dynamic-import "^3.0.0"

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio