-
-
Save elig0n/02e2de40a36521b16f3db527b3c3ebac to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// This program reads a sourcemap from stdin | |
// and replaces the "mappings" property with | |
// human readable content. It writes the output | |
// to stdout. | |
// | |
// 1. install the dependencies: | |
// npm i concat-stream vlq | |
// | |
// 2. optional: install jq for pretty printing json | |
// | |
// 3. run the command like so: | |
// | |
// cat my-source-map.js.map | node decode | jq . | |
// | |
const concat = require('concat-stream') | |
const vlq = require('vlq') | |
const formatMappings = (mappings, sources, names) => { | |
const vlqState = [ 0, 0, 0, 0, 0 ] | |
return mappings.split(';').reduce((accum, line, i) => { | |
accum[i + 1] = formatLine(line, vlqState, sources, names) | |
vlqState[0] = 0 | |
return accum | |
}, {}) | |
} | |
const formatLine = (line, state, sources, names) => { | |
const segs = line.split(',') | |
return segs.map(seg => { | |
if (!seg) return '' | |
const decoded = vlq.decode(seg) | |
for (var i = 0; i < 5; i++) { | |
state[i] = typeof decoded[i] === 'number' ? state[i] + decoded[i] : state[i] | |
} | |
return formatSegment(...state.concat([ sources, names ])) | |
}) | |
} | |
const formatSegment = (col, source, sourceLine, sourceCol, name, sources, names) => | |
`${col + 1} => ${sources[source]} ${sourceLine + 1}:${sourceCol + 1}${names[name] ? ` ${names[name]}` : ``}` | |
process.stdin.pipe(concat((json) => { | |
const map = JSON.parse(json) | |
process.stdout.write(JSON.stringify({ | |
...map, | |
mappings: formatMappings(map.mappings, map.sources, map.names) | |
})) | |
})) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment