Skip to content
  • 2 commits
  • 126 files changed
  • 0 commit comments
  • 2 contributors
Showing with 22 additions and 10,655 deletions.
  1. +1 −0 .gitignore
  2. +0 −1 node_modules/.bin/uglifyjs
  3. +0 −4 node_modules/README.md
  4. +0 −4 node_modules/commander/.npmignore
  5. +0 −4 node_modules/commander/.travis.yml
  6. +0 −107 node_modules/commander/History.md
  7. +0 −7 node_modules/commander/Makefile
  8. +0 −262 node_modules/commander/Readme.md
  9. +0 −2 node_modules/commander/index.js
  10. +0 −1,026 node_modules/commander/lib/commander.js
  11. +0 −41 node_modules/commander/package.json
  12. +0 −6 node_modules/uglify-js/.npmignore
  13. +0 −981 node_modules/uglify-js/README.html
  14. +0 −578 node_modules/uglify-js/README.org
  15. +0 −335 node_modules/uglify-js/bin/uglifyjs
  16. +0 −75 node_modules/uglify-js/docstyle.css
  17. +0 −1,220 node_modules/uglify-js/lib/consolidator.js
  18. +0 −1,364 node_modules/uglify-js/lib/parse-js.js
  19. +0 −2,091 node_modules/uglify-js/lib/process.js
  20. +0 −74 node_modules/uglify-js/lib/squeeze-more.js
  21. +0 −27 node_modules/uglify-js/package.json
  22. +0 −28 node_modules/uglify-js/test/beautify.js
  23. +0 −1,391 node_modules/uglify-js/test/testconsolidator.js
  24. +0 −409 node_modules/uglify-js/test/testparser.js
  25. +0 −1 node_modules/uglify-js/test/unit/compress/expected/1e21.js
  26. +0 −1 node_modules/uglify-js/test/unit/compress/expected/array1.js
  27. +0 −1 node_modules/uglify-js/test/unit/compress/expected/array2.js
  28. +0 −1 node_modules/uglify-js/test/unit/compress/expected/array3.js
  29. +0 −1 node_modules/uglify-js/test/unit/compress/expected/array4.js
  30. +0 −1 node_modules/uglify-js/test/unit/compress/expected/assignment.js
  31. +0 −1 node_modules/uglify-js/test/unit/compress/expected/concatstring.js
  32. +0 −1 node_modules/uglify-js/test/unit/compress/expected/const.js
  33. +0 −1 node_modules/uglify-js/test/unit/compress/expected/empty-blocks.js
  34. +0 −1 node_modules/uglify-js/test/unit/compress/expected/forstatement.js
  35. +0 −1 node_modules/uglify-js/test/unit/compress/expected/if-not.js
  36. +0 −1 node_modules/uglify-js/test/unit/compress/expected/if.js
  37. +0 −1 node_modules/uglify-js/test/unit/compress/expected/ifreturn.js
  38. +0 −1 node_modules/uglify-js/test/unit/compress/expected/ifreturn2.js
  39. +0 −1 node_modules/uglify-js/test/unit/compress/expected/infinite.js
  40. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue10.js
  41. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue11.js
  42. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue13.js
  43. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue14.js
  44. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue16.js
  45. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue17.js
  46. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue20.js
  47. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue21.js
  48. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue25.js
  49. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue27.js
  50. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue278.js
  51. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue28.js
  52. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue29.js
  53. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue30.js
  54. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue34.js
  55. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue349.js
  56. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue353.js
  57. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue372.js
  58. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue4.js
  59. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue48.js
  60. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue50.js
  61. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue53.js
  62. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue54.1.js
  63. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue68.js
  64. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue69.js
  65. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issue9.js
  66. +0 −1 node_modules/uglify-js/test/unit/compress/expected/issues222_324.js
  67. +0 −1 node_modules/uglify-js/test/unit/compress/expected/mangle.js
  68. +0 −1 node_modules/uglify-js/test/unit/compress/expected/null_string.js
  69. +0 −1 node_modules/uglify-js/test/unit/compress/expected/strict-equals.js
  70. +0 −1 node_modules/uglify-js/test/unit/compress/expected/var.js
  71. +0 −1 node_modules/uglify-js/test/unit/compress/expected/whitespace.js
  72. +0 −1 node_modules/uglify-js/test/unit/compress/expected/with.js
  73. +0 −1 node_modules/uglify-js/test/unit/compress/test/1e21.js
  74. +0 −3 node_modules/uglify-js/test/unit/compress/test/array1.js
  75. +0 −4 node_modules/uglify-js/test/unit/compress/test/array2.js
  76. +0 −4 node_modules/uglify-js/test/unit/compress/test/array3.js
  77. +0 −6 node_modules/uglify-js/test/unit/compress/test/array4.js
  78. +0 −20 node_modules/uglify-js/test/unit/compress/test/assignment.js
  79. +0 −3 node_modules/uglify-js/test/unit/compress/test/concatstring.js
  80. +0 −5 node_modules/uglify-js/test/unit/compress/test/const.js
  81. +0 −4 node_modules/uglify-js/test/unit/compress/test/empty-blocks.js
  82. +0 −10 node_modules/uglify-js/test/unit/compress/test/forstatement.js
  83. +0 −1 node_modules/uglify-js/test/unit/compress/test/if-not.js
  84. +0 −6 node_modules/uglify-js/test/unit/compress/test/if.js
  85. +0 −9 node_modules/uglify-js/test/unit/compress/test/ifreturn.js
  86. +0 −16 node_modules/uglify-js/test/unit/compress/test/ifreturn2.js
  87. +0 −1 node_modules/uglify-js/test/unit/compress/test/infinite.js
  88. +0 −1 node_modules/uglify-js/test/unit/compress/test/issue10.js
  89. +0 −3 node_modules/uglify-js/test/unit/compress/test/issue11.js
  90. +0 −1 node_modules/uglify-js/test/unit/compress/test/issue13.js
  91. +0 −1 node_modules/uglify-js/test/unit/compress/test/issue14.js
  92. +0 −1 node_modules/uglify-js/test/unit/compress/test/issue16.js
  93. +0 −4 node_modules/uglify-js/test/unit/compress/test/issue17.js
  94. +0 −1 node_modules/uglify-js/test/unit/compress/test/issue20.js
  95. +0 −6 node_modules/uglify-js/test/unit/compress/test/issue21.js
  96. +0 −7 node_modules/uglify-js/test/unit/compress/test/issue25.js
  97. +0 −1 node_modules/uglify-js/test/unit/compress/test/issue27.js
  98. +0 −1 node_modules/uglify-js/test/unit/compress/test/issue278.js
  99. +0 −3 node_modules/uglify-js/test/unit/compress/test/issue28.js
  100. +0 −1 node_modules/uglify-js/test/unit/compress/test/issue29.js
  101. +0 −3 node_modules/uglify-js/test/unit/compress/test/issue30.js
  102. +0 −3 node_modules/uglify-js/test/unit/compress/test/issue34.js
  103. +0 −25 node_modules/uglify-js/test/unit/compress/test/issue349.js
  104. +0 −4 node_modules/uglify-js/test/unit/compress/test/issue353.js
  105. +0 −32 node_modules/uglify-js/test/unit/compress/test/issue372.js
  106. +0 −3 node_modules/uglify-js/test/unit/compress/test/issue4.js
  107. +0 −1 node_modules/uglify-js/test/unit/compress/test/issue48.js
  108. +0 −9 node_modules/uglify-js/test/unit/compress/test/issue50.js
  109. +0 −1 node_modules/uglify-js/test/unit/compress/test/issue53.js
  110. +0 −3 node_modules/uglify-js/test/unit/compress/test/issue54.1.js
  111. +0 −5 node_modules/uglify-js/test/unit/compress/test/issue68.js
  112. +0 −1 node_modules/uglify-js/test/unit/compress/test/issue69.js
  113. +0 −4 node_modules/uglify-js/test/unit/compress/test/issue9.js
  114. +0 −82 node_modules/uglify-js/test/unit/compress/test/issues222_324.js
  115. +0 −5 node_modules/uglify-js/test/unit/compress/test/mangle.js
  116. +0 −1 node_modules/uglify-js/test/unit/compress/test/null_string.js
  117. +0 −3 node_modules/uglify-js/test/unit/compress/test/strict-equals.js
  118. +0 −3 node_modules/uglify-js/test/unit/compress/test/var.js
  119. +0 −21 node_modules/uglify-js/test/unit/compress/test/whitespace.js
  120. +0 −2 node_modules/uglify-js/test/unit/compress/test/with.js
  121. +0 −57 node_modules/uglify-js/test/unit/scripts.js
  122. +0 −33 node_modules/uglify-js/tmp/hoist.js
  123. +0 −97 node_modules/uglify-js/tmp/instrument.js
  124. +0 −30 node_modules/uglify-js/tmp/test.js
  125. +0 −18 node_modules/uglify-js/uglify-js.js
  126. +21 −0 package.json
View
1 .gitignore
@@ -1,2 +1,3 @@
*.swp
.DS_Store
+node_modules
View
1 node_modules/.bin/uglifyjs
View
4 node_modules/README.md
@@ -1,4 +0,0 @@
-# Node modules
-
-This is where various NodeJS packages are placed by npm. These packages are
-useful as build process components, among other things.
View
4 node_modules/commander/.npmignore
@@ -1,4 +0,0 @@
-support
-test
-examples
-*.sock
View
4 node_modules/commander/.travis.yml
@@ -1,4 +0,0 @@
-language: node_js
-node_js:
- - 0.4
- - 0.6
View
107 node_modules/commander/History.md
@@ -1,107 +0,0 @@
-
-0.6.1 / 2012-06-01
-==================
-
- * Added: append (yes or no) on confirmation
- * Added: allow node.js v0.7.x
-
-0.6.0 / 2012-04-10
-==================
-
- * Added `.prompt(obj, callback)` support. Closes #49
- * Added default support to .choose(). Closes #41
- * Fixed the choice example
-
-0.5.1 / 2011-12-20
-==================
-
- * Fixed `password()` for recent nodes. Closes #36
-
-0.5.0 / 2011-12-04
-==================
-
- * Added sub-command option support [itay]
-
-0.4.3 / 2011-12-04
-==================
-
- * Fixed custom help ordering. Closes #32
-
-0.4.2 / 2011-11-24
-==================
-
- * Added travis support
- * Fixed: line-buffered input automatically trimmed. Closes #31
-
-0.4.1 / 2011-11-18
-==================
-
- * Removed listening for "close" on --help
-
-0.4.0 / 2011-11-15
-==================
-
- * Added support for `--`. Closes #24
-
-0.3.3 / 2011-11-14
-==================
-
- * Fixed: wait for close event when writing help info [Jerry Hamlet]
-
-0.3.2 / 2011-11-01
-==================
-
- * Fixed long flag definitions with values [felixge]
-
-0.3.1 / 2011-10-31
-==================
-
- * Changed `--version` short flag to `-V` from `-v`
- * Changed `.version()` so it's configurable [felixge]
-
-0.3.0 / 2011-10-31
-==================
-
- * Added support for long flags only. Closes #18
-
-0.2.1 / 2011-10-24
-==================
-
- * "node": ">= 0.4.x < 0.7.0". Closes #20
-
-0.2.0 / 2011-09-26
-==================
-
- * Allow for defaults that are not just boolean. Default peassignment only occurs for --no-*, optional, and required arguments. [Jim Isaacs]
-
-0.1.0 / 2011-08-24
-==================
-
- * Added support for custom `--help` output
-
-0.0.5 / 2011-08-18
-==================
-
- * Changed: when the user enters nothing prompt for password again
- * Fixed issue with passwords beginning with numbers [NuckChorris]
-
-0.0.4 / 2011-08-15
-==================
-
- * Fixed `Commander#args`
-
-0.0.3 / 2011-08-15
-==================
-
- * Added default option value support
-
-0.0.2 / 2011-08-15
-==================
-
- * Added mask support to `Command#password(str[, mask], fn)`
- * Added `Command#password(str, fn)`
-
-0.0.1 / 2010-01-03
-==================
-
- * Initial release
View
7 node_modules/commander/Makefile
@@ -1,7 +0,0 @@
-
-TESTS = $(shell find test/test.*.js)
-
-test:
- @./test/run $(TESTS)
-
-.PHONY: test
View
262 node_modules/commander/Readme.md
@@ -1,262 +0,0 @@
-# Commander.js
-
- The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/visionmedia/commander).
-
- [![Build Status](https://secure.travis-ci.org/visionmedia/commander.js.png)](http://travis-ci.org/visionmedia/commander.js)
-
-## Installation
-
- $ npm install commander
-
-## Option parsing
-
- Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options.
-
-```js
-#!/usr/bin/env node
-
-/**
- * Module dependencies.
- */
-
-var program = require('commander');
-
-program
- .version('0.0.1')
- .option('-p, --peppers', 'Add peppers')
- .option('-P, --pineapple', 'Add pineapple')
- .option('-b, --bbq', 'Add bbq sauce')
- .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')
- .parse(process.argv);
-
-console.log('you ordered a pizza with:');
-if (program.peppers) console.log(' - peppers');
-if (program.pineapple) console.log(' - pineappe');
-if (program.bbq) console.log(' - bbq');
-console.log(' - %s cheese', program.cheese);
-```
-
- Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc.
-
-## Automated --help
-
- The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free:
-
-```
- $ ./examples/pizza --help
-
- Usage: pizza [options]
-
- Options:
-
- -V, --version output the version number
- -p, --peppers Add peppers
- -P, --pineapple Add pineappe
- -b, --bbq Add bbq sauce
- -c, --cheese <type> Add the specified type of cheese [marble]
- -h, --help output usage information
-
-```
-
-## Coercion
-
-```js
-function range(val) {
- return val.split('..').map(Number);
-}
-
-function list(val) {
- return val.split(',');
-}
-
-program
- .version('0.0.1')
- .usage('[options] <file ...>')
- .option('-i, --integer <n>', 'An integer argument', parseInt)
- .option('-f, --float <n>', 'A float argument', parseFloat)
- .option('-r, --range <a>..<b>', 'A range', range)
- .option('-l, --list <items>', 'A list', list)
- .option('-o, --optional [value]', 'An optional value')
- .parse(process.argv);
-
-console.log(' int: %j', program.integer);
-console.log(' float: %j', program.float);
-console.log(' optional: %j', program.optional);
-program.range = program.range || [];
-console.log(' range: %j..%j', program.range[0], program.range[1]);
-console.log(' list: %j', program.list);
-console.log(' args: %j', program.args);
-```
-
-## Custom help
-
- You can display arbitrary `-h, --help` information
- by listening for "--help". Commander will automatically
- exit once you are done so that the remainder of your program
- does not execute causing undesired behaviours, for example
- in the following executable "stuff" will not output when
- `--help` is used.
-
-```js
-#!/usr/bin/env node
-
-/**
- * Module dependencies.
- */
-
-var program = require('../');
-
-function list(val) {
- return val.split(',').map(Number);
-}
-
-program
- .version('0.0.1')
- .option('-f, --foo', 'enable some foo')
- .option('-b, --bar', 'enable some bar')
- .option('-B, --baz', 'enable some baz');
-
-// must be before .parse() since
-// node's emit() is immediate
-
-program.on('--help', function(){
- console.log(' Examples:');
- console.log('');
- console.log(' $ custom-help --help');
- console.log(' $ custom-help -h');
- console.log('');
-});
-
-program.parse(process.argv);
-
-console.log('stuff');
-```
-
-yielding the following help output:
-
-```
-
-Usage: custom-help [options]
-
-Options:
-
- -h, --help output usage information
- -V, --version output the version number
- -f, --foo enable some foo
- -b, --bar enable some bar
- -B, --baz enable some baz
-
-Examples:
-
- $ custom-help --help
- $ custom-help -h
-
-```
-
-## .prompt(msg, fn)
-
- Single-line prompt:
-
-```js
-program.prompt('name: ', function(name){
- console.log('hi %s', name);
-});
-```
-
- Multi-line prompt:
-
-```js
-program.prompt('description:', function(name){
- console.log('hi %s', name);
-});
-```
-
- Coercion:
-
-```js
-program.prompt('Age: ', Number, function(age){
- console.log('age: %j', age);
-});
-```
-
-```js
-program.prompt('Birthdate: ', Date, function(date){
- console.log('date: %s', date);
-});
-```
-
-## .password(msg[, mask], fn)
-
-Prompt for password without echoing:
-
-```js
-program.password('Password: ', function(pass){
- console.log('got "%s"', pass);
- process.stdin.destroy();
-});
-```
-
-Prompt for password with mask char "*":
-
-```js
-program.password('Password: ', '*', function(pass){
- console.log('got "%s"', pass);
- process.stdin.destroy();
-});
-```
-
-## .confirm(msg, fn)
-
- Confirm with the given `msg`:
-
-```js
-program.confirm('continue? ', function(ok){
- console.log(' got %j', ok);
-});
-```
-
-## .choose(list, fn)
-
- Let the user choose from a `list`:
-
-```js
-var list = ['tobi', 'loki', 'jane', 'manny', 'luna'];
-
-console.log('Choose the coolest pet:');
-program.choose(list, function(i){
- console.log('you chose %d "%s"', i, list[i]);
-});
-```
-
-## Links
-
- - [API documentation](http://visionmedia.github.com/commander.js/)
- - [ascii tables](https://github.com/LearnBoost/cli-table)
- - [progress bars](https://github.com/visionmedia/node-progress)
- - [more progress bars](https://github.com/substack/node-multimeter)
- - [examples](https://github.com/visionmedia/commander.js/tree/master/examples)
-
-## License
-
-(The MIT License)
-
-Copyright (c) 2011 TJ Holowaychuk &lt;tj@vision-media.ca&gt;
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
View
2 node_modules/commander/index.js
@@ -1,2 +0,0 @@
-
-module.exports = require('./lib/commander');
View
1,026 node_modules/commander/lib/commander.js
@@ -1,1026 +0,0 @@
-
-/*!
- * commander
- * Copyright(c) 2011 TJ Holowaychuk <tj@vision-media.ca>
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var EventEmitter = require('events').EventEmitter
- , path = require('path')
- , tty = require('tty')
- , basename = path.basename;
-
-/**
- * Expose the root command.
- */
-
-exports = module.exports = new Command;
-
-/**
- * Expose `Command`.
- */
-
-exports.Command = Command;
-
-/**
- * Expose `Option`.
- */
-
-exports.Option = Option;
-
-/**
- * Initialize a new `Option` with the given `flags` and `description`.
- *
- * @param {String} flags
- * @param {String} description
- * @api public
- */
-
-function Option(flags, description) {
- this.flags = flags;
- this.required = ~flags.indexOf('<');
- this.optional = ~flags.indexOf('[');
- this.bool = !~flags.indexOf('-no-');
- flags = flags.split(/[ ,|]+/);
- if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift();
- this.long = flags.shift();
- this.description = description;
-}
-
-/**
- * Return option name.
- *
- * @return {String}
- * @api private
- */
-
-Option.prototype.name = function(){
- return this.long
- .replace('--', '')
- .replace('no-', '');
-};
-
-/**
- * Check if `arg` matches the short or long flag.
- *
- * @param {String} arg
- * @return {Boolean}
- * @api private
- */
-
-Option.prototype.is = function(arg){
- return arg == this.short
- || arg == this.long;
-};
-
-/**
- * Initialize a new `Command`.
- *
- * @param {String} name
- * @api public
- */
-
-function Command(name) {
- this.commands = [];
- this.options = [];
- this.args = [];
- this.name = name;
-}
-
-/**
- * Inherit from `EventEmitter.prototype`.
- */
-
-Command.prototype.__proto__ = EventEmitter.prototype;
-
-/**
- * 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
- * @return {Command} the new command
- * @api public
- */
-
-Command.prototype.command = function(name){
- var args = name.split(/ +/);
- var cmd = new Command(args.shift());
- this.commands.push(cmd);
- cmd.parseExpectedArgs(args);
- cmd.parent = this;
- return cmd;
-};
-
-/**
- * Parse expected `args`.
- *
- * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`.
- *
- * @param {Array} args
- * @return {Command} for chaining
- * @api public
- */
-
-Command.prototype.parseExpectedArgs = function(args){
- if (!args.length) return;
- var self = this;
- args.forEach(function(arg){
- switch (arg[0]) {
- case '<':
- self.args.push({ required: true, name: arg.slice(1, -1) });
- break;
- case '[':
- self.args.push({ required: false, name: arg.slice(1, -1) });
- break;
- }
- });
- return this;
-};
-
-/**
- * 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
- */
-
-Command.prototype.action = function(fn){
- var self = this;
- this.parent.on(this.name, function(args, unknown){
- // Parse any so-far unknown options
- unknown = unknown || [];
- var parsed = self.parseOptions(unknown);
-
- // Output help if necessary
- outputHelpIfNecessary(self, parsed.unknown);
-
- // If there are still any unknown options, then we simply
- // die, unless someone asked for help, in which case we give it
- // to them, and then we die.
- if (parsed.unknown.length > 0) {
- self.unknownOption(parsed.unknown[0]);
- }
-
- self.args.forEach(function(arg, i){
- if (arg.required && null == args[i]) {
- self.missingArgument(arg.name);
- }
- });
-
- // Always append ourselves to the end of the arguments,
- // to make sure we match the number of arguments the user
- // expects
- if (self.args.length) {
- args[self.args.length] = self;
- } else {
- args.push(self);
- }
-
- fn.apply(this, args);
- });
- return this;
-};
-
-/**
- * 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 false
- * program.option('-C, --no-cheese', 'remove cheese');
- *
- * program.cheese
- * // => true
- *
- * --no-cheese
- * program.cheese
- * // => true
- *
- * // 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
- */
-
-Command.prototype.option = function(flags, description, fn, defaultValue){
- var self = this
- , option = new Option(flags, description)
- , oname = option.name()
- , name = camelcase(oname);
-
- // default as 3rd arg
- if ('function' != typeof fn) defaultValue = fn, fn = null;
-
- // preassign default value only for --no-*, [optional], or <required>
- if (false == option.bool || option.optional || option.required) {
- // when --no-* we make sure default is true
- if (false == option.bool) defaultValue = true;
- // preassign only if we have a default
- if (undefined !== defaultValue) self[name] = defaultValue;
- }
-
- // register the option
- this.options.push(option);
-
- // when it's passed assign the value
- // and conditionally invoke the callback
- this.on(oname, function(val){
- // coercion
- if (null != val && fn) val = fn(val);
-
- // unassigned or bool
- if ('boolean' == typeof self[name] || 'undefined' == typeof self[name]) {
- // if no value, bool true, and we have a default, then use it!
- if (null == val) {
- self[name] = option.bool
- ? defaultValue || true
- : false;
- } else {
- self[name] = val;
- }
- } else if (null !== val) {
- // reassign
- self[name] = val;
- }
- });
-
- return this;
-};
-
-/**
- * Parse `argv`, settings options and invoking commands when defined.
- *
- * @param {Array} argv
- * @return {Command} for chaining
- * @api public
- */
-
-Command.prototype.parse = function(argv){
- // store raw args
- this.rawArgs = argv;
-
- // guess name
- if (!this.name) this.name = basename(argv[1]);
-
- // process argv
- var parsed = this.parseOptions(this.normalize(argv.slice(2)));
- this.args = parsed.args;
- return this.parseArgs(this.args, parsed.unknown);
-};
-
-/**
- * Normalize `args`, splitting joined short flags. For example
- * the arg "-abc" is equivalent to "-a -b -c".
- *
- * @param {Array} args
- * @return {Array}
- * @api private
- */
-
-Command.prototype.normalize = function(args){
- var ret = []
- , arg;
-
- for (var i = 0, len = args.length; i < len; ++i) {
- arg = args[i];
- if (arg.length > 1 && '-' == arg[0] && '-' != arg[1]) {
- arg.slice(1).split('').forEach(function(c){
- ret.push('-' + c);
- });
- } else {
- ret.push(arg);
- }
- }
-
- return ret;
-};
-
-/**
- * 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
- */
-
-Command.prototype.parseArgs = function(args, unknown){
- var cmds = this.commands
- , len = cmds.length
- , name;
-
- if (args.length) {
- name = args[0];
- if (this.listeners(name).length) {
- this.emit(args.shift(), args, unknown);
- } else {
- this.emit('*', args);
- }
- } else {
- outputHelpIfNecessary(this, unknown);
-
- // If there were no args and we have unknown options,
- // then they are extraneous and we need to error.
- if (unknown.length > 0) {
- this.unknownOption(unknown[0]);
- }
- }
-
- return this;
-};
-
-/**
- * Return an option matching `arg` if any.
- *
- * @param {String} arg
- * @return {Option}
- * @api private
- */
-
-Command.prototype.optionFor = function(arg){
- for (var i = 0, len = this.options.length; i < len; ++i) {
- if (this.options[i].is(arg)) {
- return this.options[i];
- }
- }
-};
-
-/**
- * Parse options from `argv` returning `argv`
- * void of these options.
- *
- * @param {Array} argv
- * @return {Array}
- * @api public
- */
-
-Command.prototype.parseOptions = function(argv){
- var args = []
- , len = argv.length
- , literal
- , option
- , arg;
-
- var unknownOptions = [];
-
- // parse options
- for (var i = 0; i < len; ++i) {
- arg = argv[i];
-
- // literal args after --
- if ('--' == arg) {
- literal = true;
- continue;
- }
-
- if (literal) {
- args.push(arg);
- continue;
- }
-
- // find matching Option
- option = this.optionFor(arg);
-
- // option is defined
- if (option) {
- // requires arg
- if (option.required) {
- arg = argv[++i];
- if (null == arg) return this.optionMissingArgument(option);
- if ('-' == arg[0]) return this.optionMissingArgument(option, arg);
- this.emit(option.name(), arg);
- // optional arg
- } else if (option.optional) {
- arg = argv[i+1];
- if (null == arg || '-' == arg[0]) {
- arg = null;
- } else {
- ++i;
- }
- this.emit(option.name(), arg);
- // bool
- } else {
- this.emit(option.name());
- }
- continue;
- }
-
- // looks like an option
- if (arg.length > 1 && '-' == arg[0]) {
- unknownOptions.push(arg);
-
- // If the next argument looks like it might be
- // an argument for this option, we pass it on.
- // If it isn't, then it'll simply be ignored
- if (argv[i+1] && '-' != argv[i+1][0]) {
- unknownOptions.push(argv[++i]);
- }
- continue;
- }
-
- // arg
- args.push(arg);
- }
-
- return { args: args, unknown: unknownOptions };
-};
-
-/**
- * Argument `name` is missing.
- *
- * @param {String} name
- * @api private
- */
-
-Command.prototype.missingArgument = function(name){
- console.error();
- console.error(" error: missing required argument `%s'", name);
- console.error();
- process.exit(1);
-};
-
-/**
- * `Option` is missing an argument, but received `flag` or nothing.
- *
- * @param {String} option
- * @param {String} flag
- * @api private
- */
-
-Command.prototype.optionMissingArgument = function(option, flag){
- console.error();
- if (flag) {
- console.error(" error: option `%s' argument missing, got `%s'", option.flags, flag);
- } else {
- console.error(" error: option `%s' argument missing", option.flags);
- }
- console.error();
- process.exit(1);
-};
-
-/**
- * Unknown option `flag`.
- *
- * @param {String} flag
- * @api private
- */
-
-Command.prototype.unknownOption = function(flag){
- console.error();
- console.error(" error: unknown option `%s'", flag);
- console.error();
- process.exit(1);
-};
-
-/**
- * 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
- */
-
-Command.prototype.version = function(str, flags){
- if (0 == arguments.length) return this._version;
- this._version = str;
- flags = flags || '-V, --version';
- this.option(flags, 'output the version number');
- this.on('version', function(){
- console.log(str);
- process.exit(0);
- });
- return this;
-};
-
-/**
- * Set the description `str`.
- *
- * @param {String} str
- * @return {String|Command}
- * @api public
- */
-
-Command.prototype.description = function(str){
- if (0 == arguments.length) return this._description;
- this._description = str;
- return this;
-};
-
-/**
- * Set / get the command usage `str`.
- *
- * @param {String} str
- * @return {String|Command}
- * @api public
- */
-
-Command.prototype.usage = function(str){
- var args = this.args.map(function(arg){
- return arg.required
- ? '<' + arg.name + '>'
- : '[' + arg.name + ']';
- });
-
- var usage = '[options'
- + (this.commands.length ? '] [command' : '')
- + ']'
- + (this.args.length ? ' ' + args : '');
- if (0 == arguments.length) return this._usage || usage;
- this._usage = str;
-
- return this;
-};
-
-/**
- * Return the largest option length.
- *
- * @return {Number}
- * @api private
- */
-
-Command.prototype.largestOptionLength = function(){
- return this.options.reduce(function(max, option){
- return Math.max(max, option.flags.length);
- }, 0);
-};
-
-/**
- * Return help for options.
- *
- * @return {String}
- * @api private
- */
-
-Command.prototype.optionHelp = function(){
- var width = this.largestOptionLength();
-
- // Prepend the help information
- return [pad('-h, --help', width) + ' ' + 'output usage information']
- .concat(this.options.map(function(option){
- return pad(option.flags, width)
- + ' ' + option.description;
- }))
- .join('\n');
-};
-
-/**
- * Return command help documentation.
- *
- * @return {String}
- * @api private
- */
-
-Command.prototype.commandHelp = function(){
- if (!this.commands.length) return '';
- return [
- ''
- , ' Commands:'
- , ''
- , this.commands.map(function(cmd){
- var args = cmd.args.map(function(arg){
- return arg.required
- ? '<' + arg.name + '>'
- : '[' + arg.name + ']';
- }).join(' ');
-
- return cmd.name
- + (cmd.options.length
- ? ' [options]'
- : '') + ' ' + args
- + (cmd.description()
- ? '\n' + cmd.description()
- : '');
- }).join('\n\n').replace(/^/gm, ' ')
- , ''
- ].join('\n');
-};
-
-/**
- * Return program help documentation.
- *
- * @return {String}
- * @api private
- */
-
-Command.prototype.helpInformation = function(){
- return [
- ''
- , ' Usage: ' + this.name + ' ' + this.usage()
- , '' + this.commandHelp()
- , ' Options:'
- , ''
- , '' + this.optionHelp().replace(/^/gm, ' ')
- , ''
- , ''
- ].join('\n');
-};
-
-/**
- * Prompt for a `Number`.
- *
- * @param {String} str
- * @param {Function} fn
- * @api private
- */
-
-Command.prototype.promptForNumber = function(str, fn){
- var self = this;
- this.promptSingleLine(str, function parseNumber(val){
- val = Number(val);
- if (isNaN(val)) return self.promptSingleLine(str + '(must be a number) ', parseNumber);
- fn(val);
- });
-};
-
-/**
- * Prompt for a `Date`.
- *
- * @param {String} str
- * @param {Function} fn
- * @api private
- */
-
-Command.prototype.promptForDate = function(str, fn){
- var self = this;
- this.promptSingleLine(str, function parseDate(val){
- val = new Date(val);
- if (isNaN(val.getTime())) return self.promptSingleLine(str + '(must be a date) ', parseDate);
- fn(val);
- });
-};
-
-/**
- * Single-line prompt.
- *
- * @param {String} str
- * @param {Function} fn
- * @api private
- */
-
-Command.prototype.promptSingleLine = function(str, fn){
- if ('function' == typeof arguments[2]) {
- return this['promptFor' + (fn.name || fn)](str, arguments[2]);
- }
-
- process.stdout.write(str);
- process.stdin.setEncoding('utf8');
- process.stdin.once('data', function(val){
- fn(val.trim());
- }).resume();
-};
-
-/**
- * Multi-line prompt.
- *
- * @param {String} str
- * @param {Function} fn
- * @api private
- */
-
-Command.prototype.promptMultiLine = function(str, fn){
- var buf = [];
- console.log(str);
- process.stdin.setEncoding('utf8');
- process.stdin.on('data', function(val){
- if ('\n' == val || '\r\n' == val) {
- process.stdin.removeAllListeners('data');
- fn(buf.join('\n'));
- } else {
- buf.push(val.trimRight());
- }
- }).resume();
-};
-
-/**
- * Prompt `str` and callback `fn(val)`
- *
- * Commander supports single-line and multi-line prompts.
- * To issue a single-line prompt simply add white-space
- * to the end of `str`, something like "name: ", whereas
- * for a multi-line prompt omit this "description:".
- *
- *
- * Examples:
- *
- * program.prompt('Username: ', function(name){
- * console.log('hi %s', name);
- * });
- *
- * program.prompt('Description:', function(desc){
- * console.log('description was "%s"', desc.trim());
- * });
- *
- * @param {String|Object} str
- * @param {Function} fn
- * @api public
- */
-
-Command.prototype.prompt = function(str, fn){
- var self = this;
-
- if ('string' == typeof str) {
- if (/ $/.test(str)) return this.promptSingleLine.apply(this, arguments);
- this.promptMultiLine(str, fn);
- } else {
- var keys = Object.keys(str)
- , obj = {};
-
- function next() {
- var key = keys.shift()
- , label = str[key];
-
- if (!key) return fn(obj);
- self.prompt(label, function(val){
- obj[key] = val;
- next();
- });
- }
-
- next();
- }
-};
-
-/**
- * Prompt for password with `str`, `mask` char and callback `fn(val)`.
- *
- * The mask string defaults to '', aka no output is
- * written while typing, you may want to use "*" etc.
- *
- * Examples:
- *
- * program.password('Password: ', function(pass){
- * console.log('got "%s"', pass);
- * process.stdin.destroy();
- * });
- *
- * program.password('Password: ', '*', function(pass){
- * console.log('got "%s"', pass);
- * process.stdin.destroy();
- * });
- *
- * @param {String} str
- * @param {String} mask
- * @param {Function} fn
- * @api public
- */
-
-Command.prototype.password = function(str, mask, fn){
- var self = this
- , buf = '';
-
- // default mask
- if ('function' == typeof mask) {
- fn = mask;
- mask = '';
- }
-
- process.stdin.resume();
- tty.setRawMode(true);
- process.stdout.write(str);
-
- // keypress
- process.stdin.on('keypress', function(c, key){
- if (key && 'enter' == key.name) {
- console.log();
- process.stdin.removeAllListeners('keypress');
- tty.setRawMode(false);
- if (!buf.trim().length) return self.password(str, mask, fn);
- fn(buf);
- return;
- }
-
- if (key && key.ctrl && 'c' == key.name) {
- console.log('%s', buf);
- process.exit();
- }
-
- process.stdout.write(mask);
- buf += c;
- }).resume();
-};
-
-/**
- * Confirmation prompt with `str` and callback `fn(bool)`
- *
- * Examples:
- *
- * program.confirm('continue? ', function(ok){
- * console.log(' got %j', ok);
- * process.stdin.destroy();
- * });
- *
- * @param {String} str
- * @param {Function} fn
- * @api public
- */
-
-
-Command.prototype.confirm = function(str, fn, verbose){
- var self = this;
- this.prompt(str, function(ok){
- if (!ok.trim()) {
- if (!verbose) str += '(yes or no) ';
- return self.confirm(str, fn, true);
- }
- fn(parseBool(ok));
- });
-};
-
-/**
- * Choice prompt with `list` of items and callback `fn(index, item)`
- *
- * Examples:
- *
- * var list = ['tobi', 'loki', 'jane', 'manny', 'luna'];
- *
- * console.log('Choose the coolest pet:');
- * program.choose(list, function(i){
- * console.log('you chose %d "%s"', i, list[i]);
- * process.stdin.destroy();
- * });
- *
- * @param {Array} list
- * @param {Number|Function} index or fn
- * @param {Function} fn
- * @api public
- */
-
-Command.prototype.choose = function(list, index, fn){
- var self = this
- , hasDefault = 'number' == typeof index;
-
- if (!hasDefault) {
- fn = index;
- index = null;
- }
-
- list.forEach(function(item, i){
- if (hasDefault && i == index) {
- console.log('* %d) %s', i + 1, item);
- } else {
- console.log(' %d) %s', i + 1, item);
- }
- });
-
- function again() {
- self.prompt(' : ', function(val){
- val = parseInt(val, 10) - 1;
- if (hasDefault && isNaN(val)) val = index;
-
- if (null == list[val]) {
- again();
- } else {
- fn(val, list[val]);
- }
- });
- }
-
- again();
-};
-
-/**
- * Camel-case the given `flag`
- *
- * @param {String} flag
- * @return {String}
- * @api private
- */
-
-function camelcase(flag) {
- return flag.split('-').reduce(function(str, word){
- return str + word[0].toUpperCase() + word.slice(1);
- });
-}
-
-/**
- * Parse a boolean `str`.
- *
- * @param {String} str
- * @return {Boolean}
- * @api private
- */
-
-function parseBool(str) {
- return /^y|yes|ok|true$/i.test(str);
-}
-
-/**
- * Pad `str` to `width`.
- *
- * @param {String} str
- * @param {Number} width
- * @return {String}
- * @api private
- */
-
-function pad(str, width) {
- var len = Math.max(0, width - str.length);
- return str + Array(len + 1).join(' ');
-}
-
-/**
- * Output help information if necessary
- *
- * @param {Command} command to output help for
- * @param {Array} array of options to search for -h or --help
- * @api private
- */
-
-function outputHelpIfNecessary(cmd, options) {
- options = options || [];
- for (var i = 0; i < options.length; i++) {
- if (options[i] == '--help' || options[i] == '-h') {
- process.stdout.write(cmd.helpInformation());
- cmd.emit('--help');
- process.exit(0);
- }
- }
-}
View
41 node_modules/commander/package.json
@@ -1,41 +0,0 @@
-{
- "name": "commander",
- "version": "0.6.1",
- "description": "the complete solution for node.js command-line programs",
- "keywords": [
- "command",
- "option",
- "parser",
- "prompt",
- "stdin"
- ],
- "author": {
- "name": "TJ Holowaychuk",
- "email": "tj@vision-media.ca"
- },
- "repository": {
- "type": "git",
- "url": "git://github.com/visionmedia/commander.js.git"
- },
- "dependencies": {},
- "devDependencies": {
- "should": ">= 0.0.1"
- },
- "scripts": {
- "test": "make test"
- },
- "main": "index",
- "engines": {
- "node": ">= 0.4.x"
- },
- "_id": "commander@0.6.1",
- "optionalDependencies": {},
- "_engineSupported": true,
- "_npmVersion": "1.1.4",
- "_nodeVersion": "v0.7.9-pre",
- "_defaultsLoaded": true,
- "dist": {
- "shasum": "053140f05280d590258007cdec9434907859290e"
- },
- "_from": "commander"
-}
View
6 node_modules/uglify-js/.npmignore
@@ -1,6 +0,0 @@
-.DS_Store
-.tmp*~
-*.local.*
-.pinf-*
-node_modules/
-npm-debug.log
View
981 node_modules/uglify-js/README.html
@@ -1,981 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-lang="en" xml:lang="en">
-<head>
-<title>UglifyJS &ndash; a JavaScript parser/compressor/beautifier</title>
-<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
-<meta name="generator" content="Org-mode"/>
-<meta name="generated" content="2011-12-09 14:59:08 EET"/>
-<meta name="author" content="Mihai Bazon"/>
-<meta name="description" content="a JavaScript parser/compressor/beautifier in JavaScript"/>
-<meta name="keywords" content="javascript, js, parser, compiler, compressor, mangle, minify, minifier"/>
-<style type="text/css">
- <!--/*--><![CDATA[/*><!--*/
- html { font-family: Times, serif; font-size: 12pt; }
- .title { text-align: center; }
- .todo { color: red; }
- .done { color: green; }
- .tag { background-color: #add8e6; font-weight:normal }
- .target { }
- .timestamp { color: #bebebe; }
- .timestamp-kwd { color: #5f9ea0; }
- .right {margin-left:auto; margin-right:0px; text-align:right;}
- .left {margin-left:0px; margin-right:auto; text-align:left;}
- .center {margin-left:auto; margin-right:auto; text-align:center;}
- p.verse { margin-left: 3% }
- pre {
- border: 1pt solid #AEBDCC;
- background-color: #F3F5F7;
- padding: 5pt;
- font-family: courier, monospace;
- font-size: 90%;
- overflow:auto;
- }
- table { border-collapse: collapse; }
- td, th { vertical-align: top; }
- th.right { text-align:center; }
- th.left { text-align:center; }
- th.center { text-align:center; }
- td.right { text-align:right; }
- td.left { text-align:left; }
- td.center { text-align:center; }
- dt { font-weight: bold; }
- div.figure { padding: 0.5em; }
- div.figure p { text-align: center; }
- div.inlinetask {
- padding:10px;
- border:2px solid gray;
- margin:10px;
- background: #ffffcc;
- }
- textarea { overflow-x: auto; }
- .linenr { font-size:smaller }
- .code-highlighted {background-color:#ffff00;}
- .org-info-js_info-navigation { border-style:none; }
- #org-info-js_console-label { font-size:10px; font-weight:bold;
- white-space:nowrap; }
- .org-info-js_search-highlight {background-color:#ffff00; color:#000000;
- font-weight:bold; }
- /*]]>*/-->
-</style>
-<link rel="stylesheet" type="text/css" href="docstyle.css" />
-<script type="text/javascript">
-<!--/*--><![CDATA[/*><!--*/
- function CodeHighlightOn(elem, id)
- {
- var target = document.getElementById(id);
- if(null != target) {
- elem.cacheClassElem = elem.className;
- elem.cacheClassTarget = target.className;
- target.className = "code-highlighted";
- elem.className = "code-highlighted";
- }
- }
- function CodeHighlightOff(elem, id)
- {
- var target = document.getElementById(id);
- if(elem.cacheClassElem)
- elem.className = elem.cacheClassElem;
- if(elem.cacheClassTarget)
- target.className = elem.cacheClassTarget;
- }
-/*]]>*///-->
-</script>
-
-</head>
-<body>
-
-<div id="preamble">
-
-</div>
-
-<div id="content">
-<h1 class="title">UglifyJS &ndash; a JavaScript parser/compressor/beautifier</h1>
-
-
-<div id="table-of-contents">
-<h2>Table of Contents</h2>
-<div id="text-table-of-contents">
-<ul>
-<li><a href="#sec-1">1 UglifyJS &mdash; a JavaScript parser/compressor/beautifier </a>
-<ul>
-<li><a href="#sec-1-1">1.1 Unsafe transformations </a>
-<ul>
-<li><a href="#sec-1-1-1">1.1.1 Calls involving the global Array constructor </a></li>
-<li><a href="#sec-1-1-2">1.1.2 <code>obj.toString()</code> ==&gt; <code>obj+“”</code> </a></li>
-</ul>
-</li>
-<li><a href="#sec-1-2">1.2 Install (NPM) </a></li>
-<li><a href="#sec-1-3">1.3 Install latest code from GitHub </a></li>
-<li><a href="#sec-1-4">1.4 Usage </a>
-<ul>
-<li><a href="#sec-1-4-1">1.4.1 API </a></li>
-<li><a href="#sec-1-4-2">1.4.2 Beautifier shortcoming &ndash; no more comments </a></li>
-<li><a href="#sec-1-4-3">1.4.3 Use as a code pre-processor </a></li>
-</ul>
-</li>
-<li><a href="#sec-1-5">1.5 Compression &ndash; how good is it? </a></li>
-<li><a href="#sec-1-6">1.6 Bugs? </a></li>
-<li><a href="#sec-1-7">1.7 Links </a></li>
-<li><a href="#sec-1-8">1.8 License </a></li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-
-<div id="outline-container-1" class="outline-2">
-<h2 id="sec-1"><span class="section-number-2">1</span> UglifyJS &mdash; a JavaScript parser/compressor/beautifier </h2>
-<div class="outline-text-2" id="text-1">
-
-
-<p>
-This package implements a general-purpose JavaScript
-parser/compressor/beautifier toolkit. It is developed on <a href="http://nodejs.org/">NodeJS</a>, but it
-should work on any JavaScript platform supporting the CommonJS module system
-(and if your platform of choice doesn't support CommonJS, you can easily
-implement it, or discard the <code>exports.*</code> lines from UglifyJS sources).
-</p>
-<p>
-The tokenizer/parser generates an abstract syntax tree from JS code. You
-can then traverse the AST to learn more about the code, or do various
-manipulations on it. This part is implemented in <a href="../lib/parse-js.js">parse-js.js</a> and it's a
-port to JavaScript of the excellent <a href="http://marijn.haverbeke.nl/parse-js/">parse-js</a> Common Lisp library from <a href="http://marijn.haverbeke.nl/">Marijn Haverbeke</a>.
-</p>
-<p>
-( See <a href="http://github.com/mishoo/cl-uglify-js">cl-uglify-js</a> if you're looking for the Common Lisp version of
-UglifyJS. )
-</p>
-<p>
-The second part of this package, implemented in <a href="../lib/process.js">process.js</a>, inspects and
-manipulates the AST generated by the parser to provide the following:
-</p>
-<ul>
-<li>ability to re-generate JavaScript code from the AST. Optionally
- indented&mdash;you can use this if you want to “beautify” a program that has
- been compressed, so that you can inspect the source. But you can also run
- our code generator to print out an AST without any whitespace, so you
- achieve compression as well.
-
-</li>
-<li>shorten variable names (usually to single characters). Our mangler will
- analyze the code and generate proper variable names, depending on scope
- and usage, and is smart enough to deal with globals defined elsewhere, or
- with <code>eval()</code> calls or <code>with{}</code> statements. In short, if <code>eval()</code> or
- <code>with{}</code> are used in some scope, then all variables in that scope and any
- variables in the parent scopes will remain unmangled, and any references
- to such variables remain unmangled as well.
-
-</li>
-<li>various small optimizations that may lead to faster code but certainly
- lead to smaller code. Where possible, we do the following:
-
-<ul>
-<li>foo["bar"] ==&gt; foo.bar
-
-</li>
-<li>remove block brackets <code>{}</code>
-
-</li>
-<li>join consecutive var declarations:
- var a = 10; var b = 20; ==&gt; var a=10,b=20;
-
-</li>
-<li>resolve simple constant expressions: 1 +2 * 3 ==&gt; 7. We only do the
- replacement if the result occupies less bytes; for example 1/3 would
- translate to 0.333333333333, so in this case we don't replace it.
-
-</li>
-<li>consecutive statements in blocks are merged into a sequence; in many
- cases, this leaves blocks with a single statement, so then we can remove
- the block brackets.
-
-</li>
-<li>various optimizations for IF statements:
-
-<ul>
-<li>if (foo) bar(); else baz(); ==&gt; foo?bar():baz();
-</li>
-<li>if (!foo) bar(); else baz(); ==&gt; foo?baz():bar();
-</li>
-<li>if (foo) bar(); ==&gt; foo&amp;&amp;bar();
-</li>
-<li>if (!foo) bar(); ==&gt; foo||bar();
-</li>
-<li>if (foo) return bar(); else return baz(); ==&gt; return foo?bar():baz();
-</li>
-<li>if (foo) return bar(); else something(); ==&gt; {if(foo)return bar();something()}
-
-</li>
-</ul>
-
-</li>
-<li>remove some unreachable code and warn about it (code that follows a
- <code>return</code>, <code>throw</code>, <code>break</code> or <code>continue</code> statement, except
- function/variable declarations).
-
-</li>
-<li>act a limited version of a pre-processor (c.f. the pre-processor of
- C/C++) to allow you to safely replace selected global symbols with
- specified values. When combined with the optimisations above this can
- make UglifyJS operate slightly more like a compilation process, in
- that when certain symbols are replaced by constant values, entire code
- blocks may be optimised away as unreachable.
-</li>
-</ul>
-
-</li>
-</ul>
-
-
-
-</div>
-
-<div id="outline-container-1-1" class="outline-3">
-<h3 id="sec-1-1"><span class="section-number-3">1.1</span> <span class="target">Unsafe transformations</span> </h3>
-<div class="outline-text-3" id="text-1-1">
-
-
-<p>
-The following transformations can in theory break code, although they're
-probably safe in most practical cases. To enable them you need to pass the
-<code>--unsafe</code> flag.
-</p>
-
-</div>
-
-<div id="outline-container-1-1-1" class="outline-4">
-<h4 id="sec-1-1-1"><span class="section-number-4">1.1.1</span> Calls involving the global Array constructor </h4>
-<div class="outline-text-4" id="text-1-1-1">
-
-
-<p>
-The following transformations occur:
-</p>
-
-
-
-<pre class="src src-js"><span class="org-keyword">new</span> <span class="org-type">Array</span>(1, 2, 3, 4) =&gt; [1,2,3,4]
-Array(a, b, c) =&gt; [a,b,c]
-<span class="org-keyword">new</span> <span class="org-type">Array</span>(5) =&gt; Array(5)
-<span class="org-keyword">new</span> <span class="org-type">Array</span>(a) =&gt; Array(a)
-</pre>
-
-
-<p>
-These are all safe if the Array name isn't redefined. JavaScript does allow
-one to globally redefine Array (and pretty much everything, in fact) but I
-personally don't see why would anyone do that.
-</p>
-<p>
-UglifyJS does handle the case where Array is redefined locally, or even
-globally but with a <code>function</code> or <code>var</code> declaration. Therefore, in the
-following cases UglifyJS <b>doesn't touch</b> calls or instantiations of Array:
-</p>
-
-
-
-<pre class="src src-js"><span class="org-comment-delimiter">// </span><span class="org-comment">case 1. globally declared variable</span>
- <span class="org-keyword">var</span> <span class="org-variable-name">Array</span>;
- <span class="org-keyword">new</span> <span class="org-type">Array</span>(1, 2, 3);
- Array(a, b);
-
- <span class="org-comment-delimiter">// </span><span class="org-comment">or (can be declared later)</span>
- <span class="org-keyword">new</span> <span class="org-type">Array</span>(1, 2, 3);
- <span class="org-keyword">var</span> <span class="org-variable-name">Array</span>;
-
- <span class="org-comment-delimiter">// </span><span class="org-comment">or (can be a function)</span>
- <span class="org-keyword">new</span> <span class="org-type">Array</span>(1, 2, 3);
- <span class="org-keyword">function</span> <span class="org-function-name">Array</span>() { ... }
-
-<span class="org-comment-delimiter">// </span><span class="org-comment">case 2. declared in a function</span>
- (<span class="org-keyword">function</span>(){
- a = <span class="org-keyword">new</span> <span class="org-type">Array</span>(1, 2, 3);
- b = Array(5, 6);
- <span class="org-keyword">var</span> <span class="org-variable-name">Array</span>;
- })();
-
- <span class="org-comment-delimiter">// </span><span class="org-comment">or</span>
- (<span class="org-keyword">function</span>(<span class="org-variable-name">Array</span>){
- <span class="org-keyword">return</span> Array(5, 6, 7);
- })();
-
- <span class="org-comment-delimiter">// </span><span class="org-comment">or</span>
- (<span class="org-keyword">function</span>(){
- <span class="org-keyword">return</span> <span class="org-keyword">new</span> <span class="org-type">Array</span>(1, 2, 3, 4);
- <span class="org-keyword">function</span> <span class="org-function-name">Array</span>() { ... }
- })();
-
- <span class="org-comment-delimiter">// </span><span class="org-comment">etc.</span>
-</pre>
-
-
-</div>
-
-</div>
-
-<div id="outline-container-1-1-2" class="outline-4">
-<h4 id="sec-1-1-2"><span class="section-number-4">1.1.2</span> <code>obj.toString()</code> ==&gt; <code>obj+“”</code> </h4>
-<div class="outline-text-4" id="text-1-1-2">
-
-
-</div>
-</div>
-
-</div>
-
-<div id="outline-container-1-2" class="outline-3">
-<h3 id="sec-1-2"><span class="section-number-3">1.2</span> Install (NPM) </h3>
-<div class="outline-text-3" id="text-1-2">
-
-
-<p>
-UglifyJS is now available through NPM &mdash; <code>npm install uglify-js</code> should do
-the job.
-</p>
-</div>
-
-</div>
-
-<div id="outline-container-1-3" class="outline-3">
-<h3 id="sec-1-3"><span class="section-number-3">1.3</span> Install latest code from GitHub </h3>
-<div class="outline-text-3" id="text-1-3">
-
-
-
-
-
-<pre class="src src-sh"><span class="org-comment-delimiter">## </span><span class="org-comment">clone the repository</span>
-mkdir -p /where/you/wanna/put/it
-<span class="org-builtin">cd</span> /where/you/wanna/put/it
-git clone git://github.com/mishoo/UglifyJS.git
-
-<span class="org-comment-delimiter">## </span><span class="org-comment">make the module available to Node</span>
-mkdir -p ~/.node_libraries/
-<span class="org-builtin">cd</span> ~/.node_libraries/
-ln -s /where/you/wanna/put/it/UglifyJS/uglify-js.js
-
-<span class="org-comment-delimiter">## </span><span class="org-comment">and if you want the CLI script too:</span>
-mkdir -p ~/bin
-<span class="org-builtin">cd</span> ~/bin
-ln -s /where/you/wanna/put/it/UglifyJS/bin/uglifyjs
- <span class="org-comment-delimiter"># </span><span class="org-comment">(then add ~/bin to your $PATH if it's not there already)</span>
-</pre>
-
-
-</div>
-
-</div>
-
-<div id="outline-container-1-4" class="outline-3">
-<h3 id="sec-1-4"><span class="section-number-3">1.4</span> Usage </h3>
-<div class="outline-text-3" id="text-1-4">
-
-
-<p>
-There is a command-line tool that exposes the functionality of this library
-for your shell-scripting needs:
-</p>
-
-
-
-<pre class="src src-sh">uglifyjs [ options... ] [ filename ]
-</pre>
-
-
-<p>
-<code>filename</code> should be the last argument and should name the file from which
-to read the JavaScript code. If you don't specify it, it will read code
-from STDIN.
-</p>
-<p>
-Supported options:
-</p>
-<ul>
-<li><code>-b</code> or <code>--beautify</code> &mdash; output indented code; when passed, additional
- options control the beautifier:
-
-<ul>
-<li><code>-i N</code> or <code>--indent N</code> &mdash; indentation level (number of spaces)
-
-</li>
-<li><code>-q</code> or <code>--quote-keys</code> &mdash; quote keys in literal objects (by default,
- only keys that cannot be identifier names will be quotes).
-
-</li>
-</ul>
-
-</li>
-<li><code>--ascii</code> &mdash; pass this argument to encode non-ASCII characters as
- <code>\uXXXX</code> sequences. By default UglifyJS won't bother to do it and will
- output Unicode characters instead. (the output is always encoded in UTF8,
- but if you pass this option you'll only get ASCII).
-
-</li>
-<li><code>-nm</code> or <code>--no-mangle</code> &mdash; don't mangle names.
-
-</li>
-<li><code>-nmf</code> or <code>--no-mangle-functions</code> &ndash; in case you want to mangle variable
- names, but not touch function names.
-
-</li>
-<li><code>-ns</code> or <code>--no-squeeze</code> &mdash; don't call <code>ast_squeeze()</code> (which does various
- optimizations that result in smaller, less readable code).
-
-</li>
-<li><code>-mt</code> or <code>--mangle-toplevel</code> &mdash; mangle names in the toplevel scope too
- (by default we don't do this).
-
-</li>
-<li><code>--no-seqs</code> &mdash; when <code>ast_squeeze()</code> is called (thus, unless you pass
- <code>--no-squeeze</code>) it will reduce consecutive statements in blocks into a
- sequence. For example, "a = 10; b = 20; foo();" will be written as
- "a=10,b=20,foo();". In various occasions, this allows us to discard the
- block brackets (since the block becomes a single statement). This is ON
- by default because it seems safe and saves a few hundred bytes on some
- libs that I tested it on, but pass <code>--no-seqs</code> to disable it.
-
-</li>
-<li><code>--no-dead-code</code> &mdash; by default, UglifyJS will remove code that is
- obviously unreachable (code that follows a <code>return</code>, <code>throw</code>, <code>break</code> or
- <code>continue</code> statement and is not a function/variable declaration). Pass
- this option to disable this optimization.
-
-</li>
-<li><code>-nc</code> or <code>--no-copyright</code> &mdash; by default, <code>uglifyjs</code> will keep the initial
- comment tokens in the generated code (assumed to be copyright information
- etc.). If you pass this it will discard it.
-
-</li>
-<li><code>-o filename</code> or <code>--output filename</code> &mdash; put the result in <code>filename</code>. If
- this isn't given, the result goes to standard output (or see next one).
-
-</li>
-<li><code>--overwrite</code> &mdash; if the code is read from a file (not from STDIN) and you
- pass <code>--overwrite</code> then the output will be written in the same file.
-
-</li>
-<li><code>--ast</code> &mdash; pass this if you want to get the Abstract Syntax Tree instead
- of JavaScript as output. Useful for debugging or learning more about the
- internals.
-
-</li>
-<li><code>-v</code> or <code>--verbose</code> &mdash; output some notes on STDERR (for now just how long
- each operation takes).
-
-</li>
-<li><code>-d SYMBOL[=VALUE]</code> or <code>--define SYMBOL[=VALUE]</code> &mdash; will replace
- all instances of the specified symbol where used as an identifier
- (except where symbol has properly declared by a var declaration or
- use as function parameter or similar) with the specified value. This
- argument may be specified multiple times to define multiple
- symbols - if no value is specified the symbol will be replaced with
- the value <code>true</code>, or you can specify a numeric value (such as
- <code>1024</code>), a quoted string value (such as ="object"= or
- ='https://github.com'<code>), or the name of another symbol or keyword (such as =null</code> or <code>document</code>).
- This allows you, for example, to assign meaningful names to key
- constant values but discard the symbolic names in the uglified
- version for brevity/efficiency, or when used wth care, allows
- UglifyJS to operate as a form of <b>conditional compilation</b>
- whereby defining appropriate values may, by dint of the constant
- folding and dead code removal features above, remove entire
- superfluous code blocks (e.g. completely remove instrumentation or
- trace code for production use).
- Where string values are being defined, the handling of quotes are
- likely to be subject to the specifics of your command shell
- environment, so you may need to experiment with quoting styles
- depending on your platform, or you may find the option
- <code>--define-from-module</code> more suitable for use.
-
-</li>
-<li><code>-define-from-module SOMEMODULE</code> &mdash; will load the named module (as
- per the NodeJS <code>require()</code> function) and iterate all the exported
- properties of the module defining them as symbol names to be defined
- (as if by the <code>--define</code> option) per the name of each property
- (i.e. without the module name prefix) and given the value of the
- property. This is a much easier way to handle and document groups of
- symbols to be defined rather than a large number of <code>--define</code>
- options.
-
-</li>
-<li><code>--unsafe</code> &mdash; enable other additional optimizations that are known to be
- unsafe in some contrived situations, but could still be generally useful.
- For now only these:
-