fix sourcemap filename resolution

This commit is contained in:
Sebastian McKenzie
2014-10-01 14:36:31 +10:00
parent 0727240873
commit 4aeb62bee9
4 changed files with 50 additions and 33 deletions

View File

@@ -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);
};

View File

@@ -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));
});
}