35 lines
1.0 KiB
JavaScript
35 lines
1.0 KiB
JavaScript
const { Transform } = require("stream");
|
|
const { parse } = require("acorn");
|
|
const { Replacement } = require("./replacement");
|
|
|
|
function astTransformStream(transformer) {
|
|
return new Transform({
|
|
objectMode: true,
|
|
|
|
transform(inputFile, _, fileDone) {
|
|
const input = inputFile.contents.toString();
|
|
|
|
const comments = [];
|
|
const ast = parse(input, {
|
|
ecmaVersion: 10,
|
|
sourceType: "module",
|
|
onComment: comments,
|
|
});
|
|
|
|
const replacement = new Replacement();
|
|
transformer(replacement, ast, comments, input);
|
|
const output = replacement.replace(input, inputFile.sourceMap);
|
|
|
|
inputFile.contents = Buffer.from(output.output);
|
|
|
|
if (inputFile.sourceMap) {
|
|
inputFile.sourceMap = output.sourceMap;
|
|
}
|
|
|
|
fileDone(null, inputFile);
|
|
}
|
|
});
|
|
}
|
|
|
|
module.exports = transformer => () => astTransformStream(transformer);
|