55 lines
1.9 KiB
JavaScript
55 lines
1.9 KiB
JavaScript
const { Transform } = require("stream");
|
|
const { SourceMapConsumer, SourceMapGenerator } = require("source-map");
|
|
|
|
function removeMappedSourceStream(...sourceNames) {
|
|
const sourceNamesToRemove = new Set(sourceNames);
|
|
|
|
return new Transform({
|
|
objectMode: true,
|
|
|
|
transform(inputFile, _, fileDone) {
|
|
if (inputFile.sourceMap) {
|
|
let consumer = inputFile.sourceMap;
|
|
if (!(consumer instanceof SourceMapConsumer)) {
|
|
consumer = new SourceMapConsumer(consumer);
|
|
}
|
|
|
|
const generator = new SourceMapGenerator({
|
|
file: consumer.file,
|
|
sourceRoot: consumer.sourceRoot,
|
|
});
|
|
|
|
consumer.sources.forEach(sourceFile => {
|
|
const content = consumer.sourceContentFor(sourceFile);
|
|
if (content != null && !sourceNamesToRemove.has(sourceFile)) {
|
|
generator.setSourceContent(sourceFile, content);
|
|
}
|
|
});
|
|
|
|
consumer.eachMapping(mapping => {
|
|
if (!sourceNamesToRemove.has(mapping.source)) {
|
|
generator.addMapping({
|
|
original: {
|
|
line: mapping.originalLine,
|
|
column: mapping.originalColumn,
|
|
},
|
|
generated: {
|
|
line: mapping.generatedLine,
|
|
column: mapping.generatedColumn,
|
|
},
|
|
source: mapping.source,
|
|
name: mapping.name,
|
|
});
|
|
}
|
|
});
|
|
|
|
inputFile.sourceMap = generator.toJSON();
|
|
}
|
|
|
|
fileDone(null, inputFile);
|
|
}
|
|
});
|
|
}
|
|
|
|
module.exports = removeMappedSourceStream;
|