diff --git a/lib/6to5/transform.js b/lib/6to5/transform.js index c5cb44a380..f99837c1d2 100644 --- a/lib/6to5/transform.js +++ b/lib/6to5/transform.js @@ -8,22 +8,22 @@ var transform = module.exports = function (code, opts) { opts = opts || {}; _.defaults(opts, { - blacklist: [], - whitelist: [], - sourceMap: false, - filename: "unknown", - format: {} + sourceMapObject: false, + blacklist: [], + whitelist: [], + sourceMap: false, + filename: "unknown", + format: {} }); - var tree; + if (opts.sourceMapObject) opts.sourceMap = true; - try { - tree = util.parse(code); - } catch (err) { - err.message = opts.filename + ": " + err.message; - throw err; - } + return util.parse(opts.filename, code, function (tree) { + return transform._run(code, tree, opts); + }, true); +}; +transform._run = function (code, tree, opts) { traverse.replace(tree, function (node) { if (node.type === "EmptyStatement") { return traverse.Delete; @@ -60,7 +60,11 @@ var transform = module.exports = function (code, opts) { var result = escodegen.generate(tree, genOpts); if (genOpts.sourceMapWithCode) { - return result.code + "\n" + util.sourceMapToComment(result.map) + "\n"; + if (opts.sourceMapObject) { + return result; + } else { + return result.code + "\n" + util.sourceMapToComment(result.map) + "\n"; + } } else { return result + "\n"; } @@ -77,23 +81,21 @@ transform._runTransformer = function (transformer, tree, opts, generateUid) { }); }; -transform.test = function (actual, expect, opts) { - expect = [].concat(expect).join("\n"); - actual = [].concat(actual).join("\n"); +transform.test = function (actual, expect, opts, debug) { opts = opts || {}; _.defaults(opts, { filename: "test" }); - actual = util.parse(transform(actual, opts)); - expect = util.parse(expect); + var actualCode = actual.code.trim(); + var transformedCode = transform(actualCode, opts); + var actualAst = util.parse(actual.filename, transformedCode); - try { - assert.deepEqual(actual, expect); - } catch (err) { - actual = escodegen.generate(actual); - expect = escodegen.generate(expect); - assert.equal(actual, expect); - } + var expectCode = expect.code.trim(); + var expectAst = util.parse(expect.filename, expectCode); + + actualCode = escodegen.generate(actualAst); + expectCode = escodegen.generate(expectAst); + assert.equal(actualCode, expectCode); }; transform.transformers = {