Commit Graph

57 Commits

Author SHA1 Message Date
Michael Ficarra
d9ad3c7cbf fixes #259: don't unnecessarily quote object properties when --screw-ie8 2013-08-18 19:45:06 -05:00
Mihai Bazon
4aa4b3e694 Support -p relative. Fix #256 2013-08-07 11:43:47 +03:00
Mihai Bazon
b7adbcab1f Fix #251 2013-07-30 12:16:29 +03:00
Mihai Bazon
3435af494f Don't require arguments to --enclose 2013-07-28 11:11:11 +03:00
Matt Robenolt
3a21861580 The extra /* */ isn't needed now 2013-05-21 08:50:21 -06:00
Matt Robenolt
1dbffd48ea SourceMapping pragma has changed to //#
See: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit

The spec was updated on May 16th since `//@` was causing some issues with IE.
2013-05-21 08:46:27 -06:00
Mihai Bazon
ca3388cf5a Add --expr, an option to parse a single expression (suitable for JSON) 2013-05-15 13:27:23 +03:00
Kim Joar Bekkelund
790b3bcdc6 Fix typo in bin and readme 2013-05-02 11:15:33 +02:00
Mihai Bazon
68394eed93 Make compress/mangle disabled by default, as before 5af144522a 2013-04-21 11:35:50 +03:00
Michael Ficarra
5af144522a fixes #189: use dotted member access when --screw-ie8 option given 2013-04-20 15:11:05 -05:00
Andreas Lind Petersen
69dde0462b uglifyjs binary: Make read_whole_file async and don't attempt to read STDIN synchronously. 2013-03-31 13:36:22 +03:00
Michał Gołębiowski
75f0bbe6e8 renamed --screw-ie to --screw-ie8, documented it in README.md, indicated it doesn't break IE9+ 2013-03-25 17:03:21 +01:00
Jake Harding
478bf4dbdd Add support for enclose option. Closes #139. 2013-03-24 11:11:23 +02:00
Mihai Bazon
b14d3df3d2 Keep legit code working even when --screw-ie is not passed.
Previously:

    Without `--screw-ie`, UglifyJS would always leak names of function
    expressions into the containing scope, as if they were function
    declarations.  That was to emulate IE<9 behavior.  Code relying on this
    IE bug would continue to work properly after mangling, although it would
    only work in IE (since other engines don't share the bug).  Sometimes
    this broke legitimage code (see #153 and #155).

    With `--screw-ie` the names would not be leaked into the current scope,
    working properly in legit cases; but still it broke legit code when
    running in IE<9 (see #24).

Currently:

    Regardless of the `--screw-ie` setting, the names will not be leaked.
    Code relying on the IE bug will not work properly after mangling.
    <evil laughter here>

    Without `--screw-ie`: a hack has been added to the mangler to avoid
    using the same name for a function expression and some other variable in
    the same scope.  This keeps legit code working, at the (negligible,
    indeed) cost of one more identifier.

    With `--screw-ie` you allow the mangler to name function expressions
    with the same identifier as another variable in scope.  After mangling
    code might break in IE<9.

Oh man, the commit message is longer than the patch.

Fix #153, #155
2013-03-22 18:04:46 +02:00
Mike Bostock
f83aca65b7 Read the entire STDIN.
The problem with reading synchronously from /dev/stdin is that you can get a
spurious EOF when the input buffer is empty, even if more content is coming. Now
STDIN is read from a loop, and only stops polling when all input has been read.
This fixes #70 #85 and other errors related to parsing large files on STDIN.
2013-03-05 20:35:49 -08:00
Mihai Bazon
26746ce316 Add --screw-ie option
For now the implication is that UglifyJS will not leak a function
expression's name in the surrounding scope (IE < 9 does that).

(ref. mishoo/UglifyJS#485)
2013-03-02 14:28:34 +02:00
Matt Robenolt
a9af2c9e62 Wraps sourceMappingURL in a multiline comment. Fixes #108 2013-02-03 16:01:01 -08:00
Mihai Bazon
297af47c89 Add --source-map-url option
Fix #100
Fix #47
2013-01-20 12:32:07 +02:00
Benoît Zugmeyer
ba403331c5 Set --version as a boolean #87 2013-01-03 11:22:37 +01:00
Benoît Zugmeyer
e82e89d1b0 --version option 2013-01-03 11:07:53 +01:00
Mihai Bazon
dbe33bbfc5 Revert "Fixed reading from STDIN."
It breaks usage like this:

    echo '...code...' | uglifyjs

This reverts commit e48802ad29.
2012-11-30 11:33:50 +02:00
Visa Kopu
e48802ad29 Fixed reading from STDIN. 2012-11-29 10:51:15 +02:00
Mihai Bazon
642ba2e92c rename the npm package to "uglify-js" and cli tool to "uglifyjs" 2012-11-21 13:27:03 +02:00
Mihai Bazon
a4f6d46118 add option to mangle names even if eval/with is in use
(for more fair comparison to Closure compiler)
2012-11-06 18:19:51 +02:00
Mihai Bazon
4fe4257c69 fix --comments (close #16) 2012-10-18 10:54:10 +03:00
Mihai Bazon
a21f3c6cdd employ a better parser for command-line arguments
to support passing commas in strings in for example:

    uglifyjs2 -cd TEST="'a,b'" <<EOF
    console.log(TEST);
    EOF

    → console.log("a,b")

close #14
2012-10-17 15:56:45 +03:00
Mihai Bazon
3799ac8973 add --lint and display {file} in scope_warnings 2012-10-10 11:26:59 +03:00
Mihai Bazon
88beddfa91 make --comments keep @cc_on too 2012-10-09 18:25:00 +03:00
Mihai Bazon
e1862cd36f add --ast-help
displays a rather cruel description of the AST classes, derived
directly from the node definitions.
2012-10-09 13:21:21 +03:00
Mihai Bazon
d4970b35ac should not expose base54.sort() in the API docs, I think 2012-10-08 13:37:27 +03:00
Mihai Bazon
dd8286bce1 added --self to easily get a browser-runnable version of UglifyJS 2012-10-08 12:55:18 +03:00
Mihai Bazon
e88dcc3819 added --acorn and --spidermonkey options 2012-10-05 15:22:12 +03:00
Mihai Bazon
5c151f90b3 fixed usage string 2012-10-02 21:08:16 +03:00
Mihai Bazon
815abcfe18 support for --comments option to keep comments containing @license or @preserve 2012-10-02 16:40:42 +03:00
Mihai Bazon
36be211e99 option to exclude certain names from mangling 2012-10-02 14:02:33 +03:00
Mihai Bazon
dde5b22b5e support defines 2012-10-02 13:20:07 +03:00
Mihai Bazon
e1098b04a7 "use strict"; 2012-10-02 12:45:58 +03:00
Mihai Bazon
9e5dd81f1e a shy attempt to obey width in the beautifier; added bracketize option to always print brackets around if/do/while/for statements; export more options via the CLI 2012-10-02 11:22:38 +03:00
Mihai Bazon
13278c6649 removed the "squeeze" method (it's now effectively "transform") 2012-09-26 19:52:32 +03:00
Mihai Bazon
e979d01f04 minor 2012-09-26 11:24:04 +03:00
Mihai Bazon
42038fd67f Support input source map
This is useful while compressing generated code; for example compressing JS
compiled by CoffeeScript (assuming you got a source map):

    uglifyjs2 --in-source-map generated.js.map \
              --source-map uglified.js.map \
              -o uglified.js

The above assumes you have a "generated.js.map" file which is the source
mapping between your CoffeeScript and the generated.js (compiled output from
CoffeeScript).  The name of the input file is not present in this example;
it will be fetched from the source map (but it can be passed manually too).

The output will be in "uglified.js" and the output map "uglified.js.map"
will actually map to the original CoffeeScript code, rather than to
generated.js.
2012-09-24 17:02:18 +03:00
Mihai Bazon
ec7f895b54 log filename in parse errors / compressor warnings 2012-09-21 14:44:25 +03:00
Mihai Bazon
5491e1d7b1 better support for multiple input files:
- use a single AST_Toplevel node for all files
- keep original source filename in the tokens
2012-09-21 14:19:05 +03:00
Mihai Bazon
d53e1a9931 support -c with no arguments to disable compression entirely 2012-09-19 10:22:36 +03:00
Mihai Bazon
924aa58060 more optimizations that v1 does and some cleanups
- a = a + x ==> a+=x
- joining consecutive var statements (hoisting is not always desirable)
- x == false ==> x == 0, x != true ==> x != 1
- x, x ==> x; x = exp(), x ==> x = exp()
- discarding useless break-s
2012-09-14 15:36:38 +03:00
Mihai Bazon
93b973c99d added -m and -c options 2012-09-13 19:45:16 +03:00
Mihai Bazon
9a629abe00 minor 2012-09-11 18:37:08 +03:00
Mihai Bazon
8e82d8d94c fixed some mess with symbols/scope
- all symbols now have a `thedef` property which is a SymbolDef object,
  instead of the `uniq` that we had before (pointing to the first occurrence
  of the name as declaration).

- for undeclared symbols we still create a SymbolDef object in the toplevel
  scope but mark it "undeclared"

- we can now call figure_out_scope after squeezing, which is useful in order
  not to mangle names that were dropped by the squeezer
2012-09-11 15:42:28 +03:00
Mihai Bazon
da407d46c6 checkpoint
- discard statements with no side effects (unsafe? could be)
- safer hoist_vars (needs some revamping of scope/mangling)
2012-09-11 13:15:55 +03:00
Mihai Bazon
1579c0fb97 hoist_vars is pretty bad, it seems. cancelled it for now. 2012-09-10 22:40:18 +03:00