fix sourcemap filename resolution
This commit is contained in:
@@ -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);
|
||||
};
|
||||
|
||||
|
||||
@@ -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));
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user