sanex3339 hace 9 años
padre
commit
dcc7546557

+ 3 - 47
test/JavaScriptObfuscatorCLI.spec.ts

@@ -1,55 +1,11 @@
-import { JavaScriptObfuscator } from "../src/JavaScriptObfuscator";
-
-import { NO_CUSTOM_NODES_PRESET } from "../src/preset-options/NoCustomNodesPreset";
+import { JavaScriptObfuscatorCLI } from "../src/cli/JavaScriptObfuscatorCLI";
 
 let assert: any = require('chai').assert;
 
-describe('JavaScriptObfuscator', () => {
+describe('JavaScriptObfuscatorCLI', () => {
     describe('obfuscate (sourceCode: string, customOptions?: IOptionsPreset): string', () => {
-        it('should obfuscate simple code with variable inside global scope', () => {
-            assert.match(
-                JavaScriptObfuscator.obfuscate(
-                    `var test = 1;`,
-                    Object.assign({}, NO_CUSTOM_NODES_PRESET)
-                ),
-                /^var *test *= *0x\d+;$/
-            );
-        });
-
-        it('should obfuscate simple code with variable inside block-scope', () => {
-            assert.match(
-                JavaScriptObfuscator.obfuscate(
-                    `(function () {var test = 1;})()`,
-                    Object.assign({}, NO_CUSTOM_NODES_PRESET)
-                ),
-                /^\(function *\(\) *\{ *var *_0x[\w]+ *= *0x\d+; *\}(\(\)\)|\)\(\));?$/
-            );
-        });
-
-        it('should obfuscate simple code with literal variable value', () => {
-            let pattern: RegExp = /^var _0x(\w){4} *= *\['(\\[x|u]\d+)+'\]; *var *test *= *_0x(\w){4}\[0x0\];$/;
-
-            assert.match(
-                JavaScriptObfuscator.obfuscate(
-                    `var test = 'abc';`,
-                    Object.assign({}, NO_CUSTOM_NODES_PRESET, {
-                        unicodeArray: true,
-                        unicodeArrayThreshold: 1
-                    })
-                ),
-                pattern
-            );
+        it('should ', () => {
 
-            assert.match(
-                JavaScriptObfuscator.obfuscate(
-                    `var test = 'абц';`,
-                    Object.assign({}, NO_CUSTOM_NODES_PRESET, {
-                        unicodeArray: true,
-                        unicodeArrayThreshold: 1
-                    })
-                ),
-                pattern
-            );
         });
     });
 });

+ 413 - 0
typings/browser/ambient/commander/index.d.ts

@@ -0,0 +1,413 @@
+// Generated by typings
+// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/commander/commander.d.ts
+// Type definitions for commanderjs 2.3.0
+// Project: https://github.com/visionmedia/commander.js
+// Definitions by: Marcelo Dezem <http://github.com/mdezem>, vvakame <http://github.com/vvakame>
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+
+declare namespace commander {
+    interface ICommandStatic {
+        /**
+         * Initialize a new `Command`.
+         *
+         * @param {String} name
+         * @api public
+         */
+        new (name?:string):ICommand;
+    }
+
+    interface ICommand extends NodeJS.EventEmitter {
+        args: string[];
+        _args: { required:boolean; name: string; }[];
+
+        /**
+         * Add command `name`.
+         *
+         * The `.action()` callback is invoked when the
+         * command `name` is specified via __ARGV__,
+         * and the remaining arguments are applied to the
+         * function for access.
+         *
+         * When the `name` is "*" an un-matched command
+         * will be passed as the first arg, followed by
+         * the rest of __ARGV__ remaining.
+         *
+         * Examples:
+         *
+         *      program
+         *        .version('0.0.1')
+         *        .option('-C, --chdir <path>', 'change the working directory')
+         *        .option('-c, --config <path>', 'set config path. defaults to ./deploy.conf')
+         *        .option('-T, --no-tests', 'ignore test hook')
+         *
+         *      program
+         *        .command('setup')
+         *        .description('run remote setup commands')
+         *        .action(function(){
+         *          console.log('setup');
+         *        });
+         *
+         *      program
+         *        .command('exec <cmd>')
+         *        .description('run the given remote command')
+         *        .action(function(cmd){
+         *          console.log('exec "%s"', cmd);
+         *        });
+         *
+         *      program
+         *        .command('*')
+         *        .description('deploy the given env')
+         *        .action(function(env){
+         *          console.log('deploying "%s"', env);
+         *        });
+         *
+         *      program.parse(process.argv);
+         *
+         * @param {String} name
+         * @param {String} [desc]
+         * @param {Mixed} [opts]
+         * @return {Command} the new command
+         * @api public
+         */
+        command(name:string, desc?:string, opts?: any):ICommand;
+
+        /**
+         * Add an implicit `help [cmd]` subcommand
+         * which invokes `--help` for the given command.
+         *
+         * @api private
+         */
+        addImplicitHelpCommand():void;
+
+        /**
+         * Parse expected `args`.
+         *
+         * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`.
+         *
+         * @param {Array} args
+         * @return {Command} for chaining
+         * @api public
+         */
+        parseExpectedArgs(args:string[]):ICommand;
+
+        /**
+         * Register callback `fn` for the command.
+         *
+         * Examples:
+         *
+         *      program
+         *        .command('help')
+         *        .description('display verbose help')
+         *        .action(function(){
+         *           // output help here
+         *        });
+         *
+         * @param {Function} fn
+         * @return {Command} for chaining
+         * @api public
+         */
+        action(fn:(...args:any[])=>void):ICommand;
+
+        /**
+         * Define option with `flags`, `description` and optional
+         * coercion `fn`.
+         *
+         * The `flags` string should contain both the short and long flags,
+         * separated by comma, a pipe or space. The following are all valid
+         * all will output this way when `--help` is used.
+         *
+         *    "-p, --pepper"
+         *    "-p|--pepper"
+         *    "-p --pepper"
+         *
+         * Examples:
+         *
+         *     // simple boolean defaulting to false
+         *     program.option('-p, --pepper', 'add pepper');
+         *
+         *     --pepper
+         *     program.pepper
+         *     // => Boolean
+         *
+         *     // simple boolean defaulting to true
+         *     program.option('-C, --no-cheese', 'remove cheese');
+         *
+         *     program.cheese
+         *     // => true
+         *
+         *     --no-cheese
+         *     program.cheese
+         *     // => false
+         *
+         *     // required argument
+         *     program.option('-C, --chdir <path>', 'change the working directory');
+         *
+         *     --chdir /tmp
+         *     program.chdir
+         *     // => "/tmp"
+         *
+         *     // optional argument
+         *     program.option('-c, --cheese [type]', 'add cheese [marble]');
+         *
+         * @param {String} flags
+         * @param {String} description
+         * @param {Function|Mixed} fn or default
+         * @param {Mixed} defaultValue
+         * @return {Command} for chaining
+         * @api public
+         */
+        option(flags:string, description?:string, fn?:((arg1:any, arg2:any)=>void)|RegExp, defaultValue?:any):ICommand;
+        option(flags:string, description?:string, defaultValue?:any):ICommand;
+
+        /**
+         * Allow unknown options on the command line.
+         *
+         * @param {Boolean} arg if `true` or omitted, no error will be thrown
+         * for unknown options.
+         * @api public
+         */
+        allowUnknownOption(arg?: boolean):ICommand;
+
+        /**
+         * Parse `argv`, settings options and invoking commands when defined.
+         *
+         * @param {Array} argv
+         * @return {Command} for chaining
+         * @api public
+         */
+        parse(argv:string[]):ICommand;
+
+        /**
+         * Execute a sub-command executable.
+         *
+         * @param {Array} argv
+         * @param {Array} args
+         * @param {Array} unknown
+         * @api private
+         */
+        executeSubCommand(argv:string[], args:string[], unknown:string[]):any; /* child_process.ChildProcess */
+
+        /**
+         * Normalize `args`, splitting joined short flags. For example
+         * the arg "-abc" is equivalent to "-a -b -c".
+         * This also normalizes equal sign and splits "--abc=def" into "--abc def".
+         *
+         * @param {Array} args
+         * @return {Array}
+         * @api private
+         */
+        normalize(args:string[]):string[];
+
+        /**
+         * Parse command `args`.
+         *
+         * When listener(s) are available those
+         * callbacks are invoked, otherwise the "*"
+         * event is emitted and those actions are invoked.
+         *
+         * @param {Array} args
+         * @return {Command} for chaining
+         * @api private
+         */
+        parseArgs(args:string[], unknown:string[]):ICommand;
+
+        /**
+         * Return an option matching `arg` if any.
+         *
+         * @param {String} arg
+         * @return {Option}
+         * @api private
+         */
+        optionFor(arg:string):IOption;
+
+        /**
+         * Parse options from `argv` returning `argv`
+         * void of these options.
+         *
+         * @param {Array} argv
+         * @return {Array}
+         * @api public
+         */
+        parseOptions(argv:string[]): {args:string[]; unknown:string[];};
+
+        /**
+         * Return an object containing options as key-value pairs
+         *
+         * @return {Object}
+         * @api public
+         */
+        opts():any;
+
+        /**
+         * Argument `name` is missing.
+         *
+         * @param {String} name
+         * @api private
+         */
+        missingArgument(name:string):void;
+
+        /**
+         * `Option` is missing an argument, but received `flag` or nothing.
+         *
+         * @param {String} option
+         * @param {String} flag
+         * @api private
+         */
+        optionMissingArgument(option:{flags:string;}, flag?:string):void;
+
+        /**
+         * Unknown option `flag`.
+         *
+         * @param {String} flag
+         * @api private
+         */
+        unknownOption(flag:string):void;
+
+        /**
+         * Set the program version to `str`.
+         *
+         * This method auto-registers the "-V, --version" flag
+         * which will print the version number when passed.
+         *
+         * @param {String} str
+         * @param {String} flags
+         * @return {Command} for chaining
+         * @api public
+         */
+        version(str:string, flags?:string):ICommand;
+
+        /**
+         * Set the description to `str`.
+         *
+         * @param {String} str
+         * @return {String|Command}
+         * @api public
+         */
+        description(str:string):ICommand;
+        description():string;
+
+        /**
+         * Set an alias for the command
+         *
+         * @param {String} alias
+         * @return {String|Command}
+         * @api public
+         */
+        alias(alias:string):ICommand;
+        alias():string;
+
+        /**
+         * Set / get the command usage `str`.
+         *
+         * @param {String} str
+         * @return {String|Command}
+         * @api public
+         */
+        usage(str:string):ICommand;
+        usage():string;
+
+        /**
+         * Get the name of the command
+         *
+         * @param {String} name
+         * @return {String|Command}
+         * @api public
+         */
+        name():string;
+
+        /**
+         * Return the largest option length.
+         *
+         * @return {Number}
+         * @api private
+         */
+        largestOptionLength():number;
+
+        /**
+         * Return help for options.
+         *
+         * @return {String}
+         * @api private
+         */
+        optionHelp():string;
+
+        /**
+         * Return command help documentation.
+         *
+         * @return {String}
+         * @api private
+         */
+        commandHelp():string;
+
+        /**
+         * Return program help documentation.
+         *
+         * @return {String}
+         * @api private
+         */
+        helpInformation():string;
+
+        /**
+         * Output help information for this command
+         *
+         * @api public
+         */
+        outputHelp():void;
+
+        /**
+         * Output help information and exit.
+         *
+         * @api public
+         */
+        help():void;
+    }
+
+    interface IOptionStatic {
+        /**
+         * Initialize a new `Option` with the given `flags` and `description`.
+         *
+         * @param {String} flags
+         * @param {String} description
+         * @api public
+         */
+        new (flags:string, description?:string):IOption;
+    }
+
+    interface IOption {
+        flags:string;
+        required:boolean;
+        optional:boolean;
+        bool:boolean;
+        short?:string;
+        long:string;
+        description:string;
+
+        /**
+         * Return option name.
+         *
+         * @return {String}
+         * @api private
+         */
+        name():string;
+
+        /**
+         * Check if `arg` matches the short or long flag.
+         *
+         * @param {String} arg
+         * @return {Boolean}
+         * @api private
+         */
+        is(arg:string):boolean;
+    }
+
+    interface IExportedCommand extends ICommand {
+        Command: commander.ICommandStatic;
+        Option: commander.IOptionStatic;
+    }
+}
+
+declare module "commander" {
+    var _tmp:commander.IExportedCommand;
+    export = _tmp;
+}

+ 413 - 0
typings/main/ambient/commander/index.d.ts

@@ -0,0 +1,413 @@
+// Generated by typings
+// Source: https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/commander/commander.d.ts
+// Type definitions for commanderjs 2.3.0
+// Project: https://github.com/visionmedia/commander.js
+// Definitions by: Marcelo Dezem <http://github.com/mdezem>, vvakame <http://github.com/vvakame>
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+
+declare namespace commander {
+    interface ICommandStatic {
+        /**
+         * Initialize a new `Command`.
+         *
+         * @param {String} name
+         * @api public
+         */
+        new (name?:string):ICommand;
+    }
+
+    interface ICommand extends NodeJS.EventEmitter {
+        args: string[];
+        _args: { required:boolean; name: string; }[];
+
+        /**
+         * Add command `name`.
+         *
+         * The `.action()` callback is invoked when the
+         * command `name` is specified via __ARGV__,
+         * and the remaining arguments are applied to the
+         * function for access.
+         *
+         * When the `name` is "*" an un-matched command
+         * will be passed as the first arg, followed by
+         * the rest of __ARGV__ remaining.
+         *
+         * Examples:
+         *
+         *      program
+         *        .version('0.0.1')
+         *        .option('-C, --chdir <path>', 'change the working directory')
+         *        .option('-c, --config <path>', 'set config path. defaults to ./deploy.conf')
+         *        .option('-T, --no-tests', 'ignore test hook')
+         *
+         *      program
+         *        .command('setup')
+         *        .description('run remote setup commands')
+         *        .action(function(){
+         *          console.log('setup');
+         *        });
+         *
+         *      program
+         *        .command('exec <cmd>')
+         *        .description('run the given remote command')
+         *        .action(function(cmd){
+         *          console.log('exec "%s"', cmd);
+         *        });
+         *
+         *      program
+         *        .command('*')
+         *        .description('deploy the given env')
+         *        .action(function(env){
+         *          console.log('deploying "%s"', env);
+         *        });
+         *
+         *      program.parse(process.argv);
+         *
+         * @param {String} name
+         * @param {String} [desc]
+         * @param {Mixed} [opts]
+         * @return {Command} the new command
+         * @api public
+         */
+        command(name:string, desc?:string, opts?: any):ICommand;
+
+        /**
+         * Add an implicit `help [cmd]` subcommand
+         * which invokes `--help` for the given command.
+         *
+         * @api private
+         */
+        addImplicitHelpCommand():void;
+
+        /**
+         * Parse expected `args`.
+         *
+         * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`.
+         *
+         * @param {Array} args
+         * @return {Command} for chaining
+         * @api public
+         */
+        parseExpectedArgs(args:string[]):ICommand;
+
+        /**
+         * Register callback `fn` for the command.
+         *
+         * Examples:
+         *
+         *      program
+         *        .command('help')
+         *        .description('display verbose help')
+         *        .action(function(){
+         *           // output help here
+         *        });
+         *
+         * @param {Function} fn
+         * @return {Command} for chaining
+         * @api public
+         */
+        action(fn:(...args:any[])=>void):ICommand;
+
+        /**
+         * Define option with `flags`, `description` and optional
+         * coercion `fn`.
+         *
+         * The `flags` string should contain both the short and long flags,
+         * separated by comma, a pipe or space. The following are all valid
+         * all will output this way when `--help` is used.
+         *
+         *    "-p, --pepper"
+         *    "-p|--pepper"
+         *    "-p --pepper"
+         *
+         * Examples:
+         *
+         *     // simple boolean defaulting to false
+         *     program.option('-p, --pepper', 'add pepper');
+         *
+         *     --pepper
+         *     program.pepper
+         *     // => Boolean
+         *
+         *     // simple boolean defaulting to true
+         *     program.option('-C, --no-cheese', 'remove cheese');
+         *
+         *     program.cheese
+         *     // => true
+         *
+         *     --no-cheese
+         *     program.cheese
+         *     // => false
+         *
+         *     // required argument
+         *     program.option('-C, --chdir <path>', 'change the working directory');
+         *
+         *     --chdir /tmp
+         *     program.chdir
+         *     // => "/tmp"
+         *
+         *     // optional argument
+         *     program.option('-c, --cheese [type]', 'add cheese [marble]');
+         *
+         * @param {String} flags
+         * @param {String} description
+         * @param {Function|Mixed} fn or default
+         * @param {Mixed} defaultValue
+         * @return {Command} for chaining
+         * @api public
+         */
+        option(flags:string, description?:string, fn?:((arg1:any, arg2:any)=>void)|RegExp, defaultValue?:any):ICommand;
+        option(flags:string, description?:string, defaultValue?:any):ICommand;
+
+        /**
+         * Allow unknown options on the command line.
+         *
+         * @param {Boolean} arg if `true` or omitted, no error will be thrown
+         * for unknown options.
+         * @api public
+         */
+        allowUnknownOption(arg?: boolean):ICommand;
+
+        /**
+         * Parse `argv`, settings options and invoking commands when defined.
+         *
+         * @param {Array} argv
+         * @return {Command} for chaining
+         * @api public
+         */
+        parse(argv:string[]):ICommand;
+
+        /**
+         * Execute a sub-command executable.
+         *
+         * @param {Array} argv
+         * @param {Array} args
+         * @param {Array} unknown
+         * @api private
+         */
+        executeSubCommand(argv:string[], args:string[], unknown:string[]):any; /* child_process.ChildProcess */
+
+        /**
+         * Normalize `args`, splitting joined short flags. For example
+         * the arg "-abc" is equivalent to "-a -b -c".
+         * This also normalizes equal sign and splits "--abc=def" into "--abc def".
+         *
+         * @param {Array} args
+         * @return {Array}
+         * @api private
+         */
+        normalize(args:string[]):string[];
+
+        /**
+         * Parse command `args`.
+         *
+         * When listener(s) are available those
+         * callbacks are invoked, otherwise the "*"
+         * event is emitted and those actions are invoked.
+         *
+         * @param {Array} args
+         * @return {Command} for chaining
+         * @api private
+         */
+        parseArgs(args:string[], unknown:string[]):ICommand;
+
+        /**
+         * Return an option matching `arg` if any.
+         *
+         * @param {String} arg
+         * @return {Option}
+         * @api private
+         */
+        optionFor(arg:string):IOption;
+
+        /**
+         * Parse options from `argv` returning `argv`
+         * void of these options.
+         *
+         * @param {Array} argv
+         * @return {Array}
+         * @api public
+         */
+        parseOptions(argv:string[]): {args:string[]; unknown:string[];};
+
+        /**
+         * Return an object containing options as key-value pairs
+         *
+         * @return {Object}
+         * @api public
+         */
+        opts():any;
+
+        /**
+         * Argument `name` is missing.
+         *
+         * @param {String} name
+         * @api private
+         */
+        missingArgument(name:string):void;
+
+        /**
+         * `Option` is missing an argument, but received `flag` or nothing.
+         *
+         * @param {String} option
+         * @param {String} flag
+         * @api private
+         */
+        optionMissingArgument(option:{flags:string;}, flag?:string):void;
+
+        /**
+         * Unknown option `flag`.
+         *
+         * @param {String} flag
+         * @api private
+         */
+        unknownOption(flag:string):void;
+
+        /**
+         * Set the program version to `str`.
+         *
+         * This method auto-registers the "-V, --version" flag
+         * which will print the version number when passed.
+         *
+         * @param {String} str
+         * @param {String} flags
+         * @return {Command} for chaining
+         * @api public
+         */
+        version(str:string, flags?:string):ICommand;
+
+        /**
+         * Set the description to `str`.
+         *
+         * @param {String} str
+         * @return {String|Command}
+         * @api public
+         */
+        description(str:string):ICommand;
+        description():string;
+
+        /**
+         * Set an alias for the command
+         *
+         * @param {String} alias
+         * @return {String|Command}
+         * @api public
+         */
+        alias(alias:string):ICommand;
+        alias():string;
+
+        /**
+         * Set / get the command usage `str`.
+         *
+         * @param {String} str
+         * @return {String|Command}
+         * @api public
+         */
+        usage(str:string):ICommand;
+        usage():string;
+
+        /**
+         * Get the name of the command
+         *
+         * @param {String} name
+         * @return {String|Command}
+         * @api public
+         */
+        name():string;
+
+        /**
+         * Return the largest option length.
+         *
+         * @return {Number}
+         * @api private
+         */
+        largestOptionLength():number;
+
+        /**
+         * Return help for options.
+         *
+         * @return {String}
+         * @api private
+         */
+        optionHelp():string;
+
+        /**
+         * Return command help documentation.
+         *
+         * @return {String}
+         * @api private
+         */
+        commandHelp():string;
+
+        /**
+         * Return program help documentation.
+         *
+         * @return {String}
+         * @api private
+         */
+        helpInformation():string;
+
+        /**
+         * Output help information for this command
+         *
+         * @api public
+         */
+        outputHelp():void;
+
+        /**
+         * Output help information and exit.
+         *
+         * @api public
+         */
+        help():void;
+    }
+
+    interface IOptionStatic {
+        /**
+         * Initialize a new `Option` with the given `flags` and `description`.
+         *
+         * @param {String} flags
+         * @param {String} description
+         * @api public
+         */
+        new (flags:string, description?:string):IOption;
+    }
+
+    interface IOption {
+        flags:string;
+        required:boolean;
+        optional:boolean;
+        bool:boolean;
+        short?:string;
+        long:string;
+        description:string;
+
+        /**
+         * Return option name.
+         *
+         * @return {String}
+         * @api private
+         */
+        name():string;
+
+        /**
+         * Check if `arg` matches the short or long flag.
+         *
+         * @param {String} arg
+         * @return {Boolean}
+         * @api private
+         */
+        is(arg:string):boolean;
+    }
+
+    interface IExportedCommand extends ICommand {
+        Command: commander.ICommandStatic;
+        Option: commander.IOptionStatic;
+    }
+}
+
+declare module "commander" {
+    var _tmp:commander.IExportedCommand;
+    export = _tmp;
+}