learngerman/source-from-sourcemaps.js

48 lines
1.3 KiB
JavaScript
Raw Normal View History

2021-10-11 20:25:55 +00:00
#!/usr/bin/env node
const fs = require("fs");
const util = require("util");
const writeFileP = util.promisify(fs.writeFile);
const readFileP = util.promisify(fs.readFile);
const mkdirp = require("mkdirp");
const path = require("path");
const { SourceMapConsumer } = require("source-map");
const minimist = require("minimist");
async function processSource(consumer, src) {
const fsSrc =
"sources-gen/" +
src
.replace(/webpack:\/\/\//, "")
.replace(/~\//, "node_modules/")
.replace(/\?.+$/, "");
const source = consumer.sourceContentFor(src, true);
if (!source) {
console.warn("Unable to source:", src);
return;
}
await mkdirp(path.dirname(fsSrc));
await writeFileP(fsSrc, source, "UTF-8");
console.log(`Wrote ${fsSrc}`);
}
async function processFile(pth) {
const data = await readFileP(pth, "UTF-8");
return await SourceMapConsumer.with(data, null, async (consumer) => {
const processors = consumer.sources.map((src) =>
processSource(consumer, src)
);
return await Promise.all(processors);
});
}
async function main() {
const args = minimist(process.argv.slice(2));
const processors = args._.map((pth) => processFile(pth));
return await Promise.all(processors);
}
if (!module.parent) {
main().then(() => process.exit(0));
}