Last active
November 2, 2023 02:05
-
-
Save bengourley/c3c62e41c9b579ecc1d51e9d9eb8b9d2 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) | |
})) | |
})) |
@bengourley im getting
$ cat types.js.map | node decode .
stdin is not a tty
Can you please help me?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thank you for your guide/blog post! Really helped me (alongside the official source map rev. 3 proposal) to understanding source maps.