lihai 8d6c751f49 feat: push | 2 years ago | |
---|---|---|
.. | ||
node_modules | 2 years ago | |
LICENSE | 2 years ago | |
README.md | 2 years ago | |
index.js | 2 years ago | |
package.json | 2 years ago |
Merge old source map and new source map in multi-transform flow
var merge = require('merge-source-map')
merge(oldMap, newMap)
Merge old source map and new source map and return merged. If old or new source map value is falsy, return another one as it is.
oldMap
: object|undefined
newmap
: object|undefined
var esprima = require('esprima'),
estraverse = require('estraverse'),
escodegen = require('escodegen'),
convert = require('convert-source-map'),
merge = require('merge-source-map')
const CODE = 'a = 1',
FILEPATH = 'a.js'
// create AST of original code
var ast = esprima.parse(CODE, {sourceType: 'module', loc: true})
// transform AST of original code
estraverse.replace(ast, {
enter: function(node, parent) { /* change AST */ },
leave: function(node, parent) { /* change AST */ }
})
// generate code and source map from transformed AST
var gen = escodegen.generate(ast, {
sourceMap: FILEPATH,
sourceMapWithCode: true,
sourceContent: CODE
})
// merge old source map and new source map
var oldMap = convert.fromSource(CODE) && convert.fromSource(CODE).toObject(),
newMap = JSON.parse(gen.map.toString()),
mergedMap = merge(oldMap, newMap),
mapComment = convert.fromObject(mergedMap).toComment()
// attach merge source map to transformed code
var transformed = gen.code + '\n' + mapComment
console.log(transformed);
% npm install
% npm test
MIT (c) keik