.version('0.1.0', '-v, --version')
.option('-s, --signature <str>', 'function signature for --wrap', 'async (_require, _pathname, _root)')
.option('-b, --bare-returns', 'allow return in top level code', false)
- .option('-o, --output <ast|astring|uglify>', 'output AST, or via astring/UglifyJS', 'astring')
+ .option('-o, --output <ast0|ast1|astring|uglify>', 'output raw or transformed AST, or via astring/UglifyJS', 'astring')
.option('-i, --indent <n>', 'indent per level (ast/astring only)', '2')
.option('-j, --initial-indent <n>', 'initial indent (astring only)', '0')
.option('-c, --compress', 'compress the logic (UglifyJS only)', true)
},
options || {}
)
- let ast = transform.transform(
- visitors,
- acorn.parse(
- text,
- {
- allowReturnOutsideFunction: options.bare_returns,
- ecmaVersion: options.ecma_version
- }
- )
+
+ let ast0 = acorn.parse(
+ text,
+ {
+ allowReturnOutsideFunction: options.bare_returns,
+ ecmaVersion: options.ecma_version
+ }
)
- if (options.output === 'ast')
- return JSON.stringify(ast, null, options.ast_options.indent)
+ if (options.output === 'ast0')
+ return JSON.stringify(ast0, null, options.ast_options.indent)
+
+ let ast1 = transform.transform(visitors, ast0)
+ if (options.output === 'ast1')
+ return JSON.stringify(ast1, null, options.ast_options.indent)
+
if (options.output === 'astring')
- return astring.generate(ast, options.astring_options)
+ return astring.generate(ast1, options.astring_options)
+
let render = uglify_js.minify(
- uglify_js.AST_Node.from_mozilla_ast(ast),
+ uglify_js.AST_Node.from_mozilla_ast(ast1),
options.uglify_options
)
if (render.error)
return node
}
visitors.ThrowStatement =
-visitors.SpreadElement = (node, st, c) =>
+visitors.SpreadElement = (node, st, c) => {
node.argument = c(node.argument, st, 'Expression')
+ return node
+}
visitors.TryStatement = (node, st, c) => {
node.block = c(node.block, st, 'Statement')
if (node.handler) node.handler = c(node.handler, st)
}
visitors.VariablePattern = ignore
visitors.MemberPattern = skipThrough
-visitors.RestElement = (node, st, c) =>
+visitors.RestElement = (node, st, c) => {
node.argument = c(node.argument, st, 'Pattern')
+ return node
+}
visitors.ArrayPattern = (node, st, c) => {
for (let i = 0; i < node.elements.length; ++i) {
let elt = node.elements[i]