mirror of
https://github.com/swc-project/swc.git
synced 2024-11-29 22:51:38 +03:00
70 lines
1.8 KiB
JavaScript
70 lines
1.8 KiB
JavaScript
// Copied from https://gist.github.com/bengourley/c3c62e41c9b579ecc1d51e9d9eb8b9d2
|
|
|
|
//
|
|
// 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),
|
|
})
|
|
);
|
|
})
|
|
);
|