pathfinder/demo/client/build/rustdoc-webpack-plugin/index.js

44 lines
1.6 KiB
JavaScript

const {spawn} = require('child_process');
class RustdocPlugin {
constructor(options) {
this.options = Object.assign({
directories: [],
onBeforeSetup: Function.prototype,
onBeforeAddPartials: Function.prototype,
onBeforeCompile: Function.prototype,
onBeforeRender: Function.prototype,
onBeforeSave: Function.prototype,
onDone: Function.prototype
}, options);
}
apply(compiler) {
compiler.plugin("make", (compilation, done) => {
let directoriesLeft = this.options.directories.length;
for (const directory of this.options.directories) {
console.log("Building documentation for `" + directory + "`...");
const cargo = spawn("cargo", ["doc"], {cwd: directory});
cargo.stdout.setEncoding('utf8');
cargo.stderr.setEncoding('utf8');
cargo.stdout.on('data', data => console.log(data));
cargo.stderr.on('data', data => console.log(data));
cargo.on('close', code => {
if (code !== 0) {
const message = "Failed to build documentation for `" + directory + "`!";
console.error(message);
throw new Error(message);
}
console.log("Built documentation for `" + directory + "`.");
directoriesLeft--;
if (directoriesLeft === 0)
done();
});
}
});
}
}
module.exports = RustdocPlugin;