57 lines
1.6 KiB
JavaScript
57 lines
1.6 KiB
JavaScript
/**
|
|
* Jdenticon
|
|
* https://github.com/dmester/jdenticon
|
|
* Copyright © Daniel Mester Pirttijärvi
|
|
*/
|
|
|
|
const { rollup } = require("rollup");
|
|
const Vinyl = require("vinyl");
|
|
const applySourceMap = require("vinyl-sourcemaps-apply");
|
|
const { Transform } = require("stream");
|
|
|
|
function rollupStream(options) {
|
|
return new Transform({
|
|
objectMode: true,
|
|
|
|
transform(inputFile, _, fileDone) {
|
|
const inputOptions = {
|
|
onwarn: warn => console.warn(warn.toString()),
|
|
...options,
|
|
input: inputFile.path,
|
|
};
|
|
delete inputOptions.output;
|
|
|
|
rollup(inputOptions).then(bundle => {
|
|
return bundle.generate({
|
|
...options.output,
|
|
sourcemap: !!inputFile.sourceMap
|
|
});
|
|
|
|
}).then(outputs => {
|
|
|
|
for (const output of outputs.output) {
|
|
if (output.type === "chunk") {
|
|
const outputFile = new Vinyl({
|
|
cwd: inputFile.cwd,
|
|
base: inputFile.base,
|
|
path: inputFile.path,
|
|
contents: Buffer.from(output.code),
|
|
});
|
|
|
|
if (inputFile.sourceMap) {
|
|
applySourceMap(outputFile, output.map);
|
|
}
|
|
|
|
this.push(outputFile);
|
|
}
|
|
}
|
|
|
|
fileDone();
|
|
|
|
}, err => fileDone(err));
|
|
}
|
|
});
|
|
}
|
|
|
|
module.exports = rollupStream;
|