From 1571ba204528e01d7e8359deb491b0b77ad3480a Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Sat, 11 Oct 2014 15:01:42 +1100 Subject: [PATCH] add sourceMapName and sourceFileName options, make them default to the filename option - resolves #44 --- README.md | 14 +++++++++++--- lib/6to5/transform.js | 10 +++++++--- lib/6to5/util.js | 20 +++++++++++++------- 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 0e388791e4..60380f78e6 100644 --- a/README.md +++ b/README.md @@ -143,6 +143,10 @@ to5.transformFile("filename.js", options, function (err, result) { ```javascript { + // Filename for use in errors etc. + // Default: "unknown" + filename: "filename", + // List of transformers to EXCLUDE // This is a camelised version of the name found in `features` // eg. "Arrow functions" is "arrowFunctions" @@ -158,9 +162,13 @@ to5.transformFile("filename.js", options, function (err, result) { // Default: false sourceMap: true, - // Filename for use in errors etc. - // Default: "unknown" - filename: "filename" + // Set `file` on returned source map. + // Default: `filename` option. + sourceMapName: "filename", + + // Set `sources[0]` on returned source map. + // Default: `filename` option. + sourceFileName: "filename" } ``` diff --git a/lib/6to5/transform.js b/lib/6to5/transform.js index 4b375bb7a4..00961d0bd0 100644 --- a/lib/6to5/transform.js +++ b/lib/6to5/transform.js @@ -24,10 +24,15 @@ var transform = module.exports = function (code, opts) { format: {} }); + _.defaults(opts, { + sourceFileName: opts.filename, + sourceMapName: opts.filename + }); + ensureTransformerNames("blacklist", opts.blacklist); ensureTransformerNames("whitelist", opts.whitelist); - return util.parse(opts.filename, code, function (tree) { + return util.parse(opts, code, function (tree) { return transform._run(code, tree, opts); }); }; @@ -89,7 +94,6 @@ transform.test = function (task, assert) { var opts = task.options; opts.filename = actual.filename; - opts.ast = true; var actualCode = actual.code.trim(); @@ -98,7 +102,7 @@ transform.test = function (task, assert) { actualCode = recast.prettyPrint(actualAst).code; var expectCode = expect.code.trim(); - var expectAst = util.parse(expect.filename, expectCode); + var expectAst = util.parse(expect, expectCode); var expectResult = recast.prettyPrint(expectAst); expectCode = expectResult.code; diff --git a/lib/6to5/util.js b/lib/6to5/util.js index 31d5ba3f67..0efa010187 100644 --- a/lib/6to5/util.js +++ b/lib/6to5/util.js @@ -184,17 +184,21 @@ exports.repeat = function (width, cha) { exports.generate = function (ast, opts) { var printOpts = {}; if (opts.sourceMap) { - printOpts.sourceMapName = path.basename(opts.filename); + printOpts.sourceMapName = opts.sourceMapName; } return recast.print(ast, printOpts); }; -exports.parse = function (filename, code, callback) { +exports.parse = function (opts, code, callback) { try { - var ast = recast.parse(code, { - sourceFileName: path.basename(filename) - }); + var recastOpts = {}; + if (opts.sourceMap) { + recastOpts.sourceFileName = opts.sourceFileName; + recastOpts.sourceRoot = opts.sourceRoot; + } + + var ast = recast.parse(code, recastOpts); if (callback) { return callback(ast); @@ -204,7 +208,7 @@ exports.parse = function (filename, code, callback) { } catch (err) { if (!err._6to5) { err._6to5 = true; - err.message = filename + ": " + err.message; + err.message = opts.filename + ": " + err.message; if (err.lineNumber) { var frame = exports.codeFrame(code, err.lineNumber, err.column); err.message = err.message + frame; @@ -233,6 +237,8 @@ try { var loc = templatesLoc + "/" + name; var code = fs.readFileSync(loc, "utf8"); - exports.templates[key] = exports.removeProperties(exports.parse(loc, code).program); + var ast = exports.parse({ filename: loc }, code).program; + ast = exports.removeProperties(ast); + exports.templates[key] = ast; }); }