diff --git a/lib/6to5/transform.js b/lib/6to5/transform.js index f99837c1d2..937f37adc0 100644 --- a/lib/6to5/transform.js +++ b/lib/6to5/transform.js @@ -1,8 +1,8 @@ -var escodegen = require("escodegen"); -var traverse = require("./traverse"); -var assert = require("assert"); -var util = require("./util"); -var _ = require("lodash"); +var traverse = require("./traverse"); +var assert = require("assert"); +var path = require("path"); +var util = require("./util"); +var _ = require("lodash"); var transform = module.exports = function (code, opts) { opts = opts || {}; @@ -20,7 +20,7 @@ var transform = module.exports = function (code, opts) { return util.parse(opts.filename, code, function (tree) { return transform._run(code, tree, opts); - }, true); + }); }; transform._run = function (code, tree, opts) { @@ -43,23 +43,18 @@ transform._run = function (code, tree, opts) { }); var genOpts = { - comment: true, - format: _.merge(opts.format, { - indent: { - style: " " - } - }) + format: opts.format }; if (opts.sourceMap) { - genOpts.sourceMap = true; + genOpts.sourceMap = path.basename(opts.filename); genOpts.sourceContent = code; genOpts.sourceMapWithCode = true; } - var result = escodegen.generate(tree, genOpts); + var result = util.generate(tree, genOpts); - if (genOpts.sourceMapWithCode) { + if (opts.sourceMap) { if (opts.sourceMapObject) { return result; } else { @@ -82,19 +77,18 @@ transform._runTransformer = function (transformer, tree, opts, generateUid) { }; transform.test = function (actual, expect, opts, debug) { - opts = opts || {}; _.defaults(opts, { filename: "test" }); var actualCode = actual.code.trim(); var transformedCode = transform(actualCode, opts); var actualAst = util.parse(actual.filename, transformedCode); + actualCode = util.generate(actualAst); var expectCode = expect.code.trim(); var expectAst = util.parse(expect.filename, expectCode); + expectCode = util.generate(expectAst); - actualCode = escodegen.generate(actualAst); - expectCode = escodegen.generate(expectAst); assert.equal(actualCode, expectCode); }; diff --git a/lib/6to5/util.js b/lib/6to5/util.js index 11164e769e..9f007d06f7 100644 --- a/lib/6to5/util.js +++ b/lib/6to5/util.js @@ -1,4 +1,5 @@ var estraverse = require("estraverse"); +var escodegen = require("escodegen"); var traverse = require("./traverse"); var esprima = require("esprima"); var path = require("path"); @@ -10,23 +11,17 @@ _.each(esprima.Syntax, function (name) { estraverse.VisitorKeys[name] = estraverse.VisitorKeys[name] || []; }); -exports.parse = function (filename, code, callback, opts) { - opts = opts || {}; - if (opts === true) { - opts = { +exports.parse = function (filename, code, callback) { + try { + var ast = esprima.parse(code, { comment: true, + source: filename, tokens: true, range: true, loc: true - }; - } + }); - try { - var ast = esprima.parse(code, opts); - - if (ast.tokens && ast.comments) { - estraverse.attachComments(ast, ast.comments, ast.tokens); - } + estraverse.attachComments(ast, ast.comments, ast.tokens); if (callback) { return callback(ast); @@ -43,6 +38,34 @@ exports.parse = function (filename, code, callback, opts) { } }; +exports.generate = function (ast, opts) { + opts = opts || {}; + + opts = _.merge({ + comment: true, + format: { + indent: { + style: " " + } + } + }, opts); + + return escodegen.generate(ast, opts); +}; + +exports.removeProperties = function (tree) { + var clear = function (node) { + delete node.tokens; + delete node.range; + delete node.loc; + }; + + clear(tree); + traverse(tree, clear); + + return tree; +}; + exports.errorWithNode = function (node, msg) { var line = node.loc.start.line; var col = node.loc.start.column; @@ -190,6 +213,6 @@ if (fs.existsSync(templatesCacheLoc)) { var loc = templatesLoc + "/" + name; var code = fs.readFileSync(loc, "utf8"); - exports.templates[key] = exports.parse(loc, code); + exports.templates[key] = exports.removeProperties(exports.parse(loc, code)); }); } diff --git a/package.json b/package.json index 880ae49cc6..4ce4ad97bf 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "6to5", "description": "Turn ES6 code into vanilla ES5 with no runtime required", - "version": "0.0.2", + "version": "0.0.3", "repository": { "type": "git", "url": "https://github.com/sebmck/6to5.git" diff --git a/test/fixtures/source-maps/basic/expected.js b/test/fixtures/source-maps/basic/expected.js index d611f63bf6..a1e72c8e4b 100644 --- a/test/fixtures/source-maps/basic/expected.js +++ b/test/fixtures/source-maps/basic/expected.js @@ -13,4 +13,4 @@ var Test = function() { return Test; }(); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmpzb24iLCJzb3VyY2VzIjpbIi9Vc2Vycy9zZWJhc3RpYW4vUHJvamVjdHMvNnRvNS90ZXN0L2ZpeHR1cmVzL3NvdXJjZS1tYXBzL2Jhc2ljL2FjdHVhbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiSUFBTSxDQUFDLENBQUMsQ0FBQztXQUFILENBQUMsQ0FBQyxDQUFDLElBQ087O0VBRWQ7OzBCQUhJLENBQUMsQ0FBQyxDQUFDOztzQkFLRzs7TUFFVjs7OztTQVBJLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgVGVzdCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuXG4gIH1cblxuICBnZXQgYmFyKCkge1xuXG4gIH1cbn0iXX0= +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFjdHVhbC5qcyJdLCJuYW1lcyI6WyJUZXN0Il0sIm1hcHBpbmdzIjoiSUFBTUEsSTtXQUFBQSxJLEdBQ1U7QUFBQSxHOzBCQURWQSxJOztXQUtNO0FBQUEsTzs7O1NBTE5BLEkiLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBUZXN0IHtcbiAgY29uc3RydWN0b3IoKSB7XG5cbiAgfVxuXG4gIGdldCBiYXIoKSB7XG5cbiAgfVxufSJdfQ==