Browse Source

Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	dist/index.js
#	package.json
sanex3339 8 years ago
parent
commit
81ba9b1fd2

+ 18 - 63
src/cli/JavaScriptObfuscatorCLI.ts

@@ -2,15 +2,15 @@ import * as commander from 'commander';
 import * as path from 'path';
 import * as path from 'path';
 
 
 import { TInputOptions } from '../types/options/TInputOptions';
 import { TInputOptions } from '../types/options/TInputOptions';
-import { TStringArrayEncoding } from '../types/options/TStringArrayEncoding';
 
 
 import { IObfuscationResult } from '../interfaces/IObfuscationResult';
 import { IObfuscationResult } from '../interfaces/IObfuscationResult';
 
 
-import { SourceMapMode } from '../enums/SourceMapMode';
-import { StringArrayEncoding } from '../enums/StringArrayEncoding';
-
 import { DEFAULT_PRESET } from '../options/presets/Default';
 import { DEFAULT_PRESET } from '../options/presets/Default';
 
 
+import { BooleanSanitizer } from './sanitizers/BooleanSanitizer';
+import { SourceMapModeSanitizer } from './sanitizers/SourceMapModeSanitizer';
+import { StringArrayEncodingSanitizer } from './sanitizers/StringArrayEncodingSanitizer';
+
 import { CLIUtils } from './CLIUtils';
 import { CLIUtils } from './CLIUtils';
 import { JavaScriptObfuscator } from '../JavaScriptObfuscator';
 import { JavaScriptObfuscator } from '../JavaScriptObfuscator';
 
 
@@ -55,51 +55,6 @@ export class JavaScriptObfuscatorCLI {
         return CLIUtils.getPackageConfig().version;
         return CLIUtils.getPackageConfig().version;
     }
     }
 
 
-    /**
-     * @param value
-     * @returns {boolean}
-     */
-    private static parseBoolean (value: string): boolean {
-        return value === 'true' || value === '1';
-    }
-
-    /**
-     * @param value
-     * @returns {string}
-     */
-    private static parseSourceMapMode (value: string): string {
-        const availableMode: boolean = Object
-            .keys(SourceMapMode)
-            .some((key: string): boolean => {
-                return SourceMapMode[key] === value;
-            });
-
-        if (!availableMode) {
-            throw new ReferenceError('Invalid value of `--sourceMapMode` option');
-        }
-
-        return value;
-    }
-
-    /**
-     * @param value
-     * @returns {TStringArrayEncoding}
-     */
-    private static parseStringArrayEncoding (value: string): TStringArrayEncoding {
-        switch (value) {
-            case 'true':
-            case '1':
-            case StringArrayEncoding.base64:
-                return true;
-
-            case StringArrayEncoding.rc4:
-                return StringArrayEncoding.rc4;
-
-            default:
-                return false;
-        }
-    }
-
     public run (): void {
     public run (): void {
         this.configureCommands();
         this.configureCommands();
 
 
@@ -152,12 +107,12 @@ export class JavaScriptObfuscatorCLI {
             .option(
             .option(
                 '--compact <boolean>',
                 '--compact <boolean>',
                 'Disable one line output code compacting',
                 'Disable one line output code compacting',
-                JavaScriptObfuscatorCLI.parseBoolean
+                BooleanSanitizer
             )
             )
             .option(
             .option(
                 '--controlFlowFlattening <boolean>',
                 '--controlFlowFlattening <boolean>',
                 'Enables control flow flattening',
                 'Enables control flow flattening',
-                JavaScriptObfuscatorCLI.parseBoolean
+                BooleanSanitizer
             )
             )
             .option(
             .option(
                 '--controlFlowFlatteningThreshold <number>',
                 '--controlFlowFlatteningThreshold <number>',
@@ -167,7 +122,7 @@ export class JavaScriptObfuscatorCLI {
             .option(
             .option(
                 '--deadCodeInjection <boolean>',
                 '--deadCodeInjection <boolean>',
                 'Enables dead code injection',
                 'Enables dead code injection',
-                JavaScriptObfuscatorCLI.parseBoolean
+                BooleanSanitizer
             )
             )
             .option(
             .option(
                 '--deadCodeInjectionThreshold <number>',
                 '--deadCodeInjectionThreshold <number>',
@@ -177,17 +132,17 @@ export class JavaScriptObfuscatorCLI {
             .option(
             .option(
                 '--debugProtection <boolean>',
                 '--debugProtection <boolean>',
                 'Disable browser Debug panel (can cause DevTools enabled browser freeze)',
                 'Disable browser Debug panel (can cause DevTools enabled browser freeze)',
-                JavaScriptObfuscatorCLI.parseBoolean
+                BooleanSanitizer
             )
             )
             .option(
             .option(
                 '--debugProtectionInterval <boolean>',
                 '--debugProtectionInterval <boolean>',
                 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)',
                 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)',
-                JavaScriptObfuscatorCLI.parseBoolean
+                BooleanSanitizer
             )
             )
             .option(
             .option(
                 '--disableConsoleOutput <boolean>',
                 '--disableConsoleOutput <boolean>',
                 'Allow console.log, console.info, console.error and console.warn messages output into browser console',
                 'Allow console.log, console.info, console.error and console.warn messages output into browser console',
-                JavaScriptObfuscatorCLI.parseBoolean
+                BooleanSanitizer
             )
             )
             .option(
             .option(
                 '--domainLock <list>',
                 '--domainLock <list>',
@@ -196,7 +151,7 @@ export class JavaScriptObfuscatorCLI {
             )
             )
             .option(
             .option(
                 '--mangle <boolean>', 'Enables mangling of variable names',
                 '--mangle <boolean>', 'Enables mangling of variable names',
-                JavaScriptObfuscatorCLI.parseBoolean
+                BooleanSanitizer
             )
             )
             .option(
             .option(
                 '--reservedNames <list>',
                 '--reservedNames <list>',
@@ -205,7 +160,7 @@ export class JavaScriptObfuscatorCLI {
             )
             )
             .option(
             .option(
                 '--rotateStringArray <boolean>', 'Disable rotation of unicode array values during obfuscation',
                 '--rotateStringArray <boolean>', 'Disable rotation of unicode array values during obfuscation',
-                JavaScriptObfuscatorCLI.parseBoolean
+                BooleanSanitizer
             )
             )
             .option(
             .option(
                 '--seed <number>',
                 '--seed <number>',
@@ -215,12 +170,12 @@ export class JavaScriptObfuscatorCLI {
             .option(
             .option(
                 '--selfDefending <boolean>',
                 '--selfDefending <boolean>',
                 'Disables self-defending for obfuscated code',
                 'Disables self-defending for obfuscated code',
-                JavaScriptObfuscatorCLI.parseBoolean
+                BooleanSanitizer
             )
             )
             .option(
             .option(
                 '--sourceMap <boolean>',
                 '--sourceMap <boolean>',
                 'Enables source map generation',
                 'Enables source map generation',
-                JavaScriptObfuscatorCLI.parseBoolean
+                BooleanSanitizer
             )
             )
             .option(
             .option(
                 '--sourceMapBaseUrl <string>',
                 '--sourceMapBaseUrl <string>',
@@ -233,17 +188,17 @@ export class JavaScriptObfuscatorCLI {
             .option(
             .option(
                 '--sourceMapMode <string> [inline, separate]',
                 '--sourceMapMode <string> [inline, separate]',
                 'Specify source map output mode',
                 'Specify source map output mode',
-                JavaScriptObfuscatorCLI.parseSourceMapMode
+                SourceMapModeSanitizer
             )
             )
             .option(
             .option(
                 '--stringArray <boolean>',
                 '--stringArray <boolean>',
                 'Disables gathering of all literal strings into an array and replacing every literal string with an array call',
                 'Disables gathering of all literal strings into an array and replacing every literal string with an array call',
-                JavaScriptObfuscatorCLI.parseBoolean
+                BooleanSanitizer
             )
             )
             .option(
             .option(
                 '--stringArrayEncoding <boolean|string> [true, false, base64, rc4]',
                 '--stringArrayEncoding <boolean|string> [true, false, base64, rc4]',
                 'Encodes all strings in strings array using base64 or rc4 (this option can slow down your code speed',
                 'Encodes all strings in strings array using base64 or rc4 (this option can slow down your code speed',
-                JavaScriptObfuscatorCLI.parseStringArrayEncoding
+                StringArrayEncodingSanitizer
             )
             )
             .option(
             .option(
                 '--stringArrayThreshold <number>',
                 '--stringArrayThreshold <number>',
@@ -253,7 +208,7 @@ export class JavaScriptObfuscatorCLI {
             .option(
             .option(
                 '--unicodeEscapeSequence <boolean>',
                 '--unicodeEscapeSequence <boolean>',
                 'Allows to enable/disable string conversion to unicode escape sequence',
                 'Allows to enable/disable string conversion to unicode escape sequence',
-                JavaScriptObfuscatorCLI.parseBoolean
+                BooleanSanitizer
             )
             )
             .parse(this.rawArguments);
             .parse(this.rawArguments);
 
 

+ 5 - 0
src/cli/sanitizers/BooleanSanitizer.ts

@@ -0,0 +1,5 @@
+import { TCLISanitizer } from '../../types/cli/TCLISanitizer';
+
+export const BooleanSanitizer: TCLISanitizer = (value: string): boolean => {
+    return value === 'true' || value === '1';
+};

+ 17 - 0
src/cli/sanitizers/SourceMapModeSanitizer.ts

@@ -0,0 +1,17 @@
+import { TCLISanitizer } from '../../types/cli/TCLISanitizer';
+
+import { SourceMapMode } from '../../enums/SourceMapMode';
+
+export const SourceMapModeSanitizer: TCLISanitizer = (value: string): string => {
+    const availableMode: boolean = Object
+        .keys(SourceMapMode)
+        .some((key: string): boolean => {
+            return SourceMapMode[key] === value;
+        });
+
+    if (!availableMode) {
+        throw new ReferenceError('Invalid value of `--sourceMapMode` option');
+    }
+
+    return value;
+};

+ 19 - 0
src/cli/sanitizers/StringArrayEncodingSanitizer.ts

@@ -0,0 +1,19 @@
+import { TCLISanitizer } from '../../types/cli/TCLISanitizer';
+import { TStringArrayEncoding } from '../../types/options/TStringArrayEncoding';
+
+import { StringArrayEncoding } from '../../enums/StringArrayEncoding';
+
+export const StringArrayEncodingSanitizer: TCLISanitizer = (value: string): TStringArrayEncoding => {
+    switch (value) {
+        case 'true':
+        case '1':
+        case StringArrayEncoding.base64:
+            return true;
+
+        case StringArrayEncoding.rc4:
+            return StringArrayEncoding.rc4;
+
+        default:
+            return false;
+    }
+};

+ 3 - 1
src/declarations/escodegen.d.ts

@@ -1,3 +1,5 @@
+import * as escodegen from 'escodegen';
+
 import { IGeneratorOutput } from '../interfaces/IGeneratorOutput';
 import { IGeneratorOutput } from '../interfaces/IGeneratorOutput';
 
 
 declare module 'escodegen' {
 declare module 'escodegen' {
@@ -6,5 +8,5 @@ declare module 'escodegen' {
      * @param options
      * @param options
      * @returns IGeneratorOutput
      * @returns IGeneratorOutput
      */
      */
-    export function generate (ast: any, options?: GenerateOptions): IGeneratorOutput;
+    export function generate (ast: any, options?: escodegen.GenerateOptions): IGeneratorOutput;
 }
 }

+ 2 - 2
src/decorators/Initializable.ts

@@ -11,12 +11,12 @@ export function initializable (
 ): (target: IInitializable, propertyKey: string | symbol) => any {
 ): (target: IInitializable, propertyKey: string | symbol) => any {
     const decoratorName: string = Object.keys(this)[0];
     const decoratorName: string = Object.keys(this)[0];
 
 
-    return (target: IInitializable, propertyKey: string | symbol): any => {
+    return (target: IInitializable, propertyKey: string | symbol): PropertyDescriptor => {
         const descriptor: PropertyDescriptor = {
         const descriptor: PropertyDescriptor = {
             configurable: true,
             configurable: true,
             enumerable: true
             enumerable: true
         };
         };
-        const initializeMethod: any = (<any>target)[initializeMethodKey];
+        const initializeMethod: Function = target[initializeMethodKey];
 
 
         if (!initializeMethod || typeof initializeMethod !== 'function') {
         if (!initializeMethod || typeof initializeMethod !== 'function') {
            throw new Error(`\`${initializeMethodKey}\` method with initialization logic not found. \`@${decoratorName}\` decorator requires \`${initializeMethodKey}\` method`);
            throw new Error(`\`${initializeMethodKey}\` method with initialization logic not found. \`@${decoratorName}\` decorator requires \`${initializeMethodKey}\` method`);

+ 2 - 0
src/interfaces/IInitializable.d.ts

@@ -1,4 +1,6 @@
 export interface IInitializable {
 export interface IInitializable {
+    [key: string]: any;
+
     /**
     /**
      * @param args
      * @param args
      */
      */

+ 1 - 0
src/types/cli/TCLISanitizer.d.ts

@@ -0,0 +1 @@
+export type TCLISanitizer = (value: string) => any;