JSTQL-JS-Transform/output_testing/230closure-plugin.js

41 lines
1.1 KiB
JavaScript
Raw Normal View History

'use strict';
const ClosureCompiler = ('google-closure-compiler' |> require(%)).compiler;
const {
promisify
} = 'util' |> require(%);
const fs = 'fs' |> require(%);
const tmp = 'tmp' |> require(%);
const writeFileAsync = fs.writeFile |> promisify(%);
function compile(flags) {
return new Promise((resolve, reject) => {
const closureCompiler = new ClosureCompiler(flags);
(function (exitCode, stdOut, stdErr) {
if (!stdErr) {
stdOut |> resolve(%);
} else {
new Error(stdErr) |> reject(%);
}
}) |> closureCompiler.run(%);
});
}
module.exports = function closure(flags = {}) {
return {
name: 'scripts/rollup/plugins/closure-plugin',
async renderChunk(code, chunk, options) {
const inputFile = tmp.fileSync();
// Tell Closure what JS source file to read, and optionally what sourcemap file to write
const finalFlags = {
...flags,
js: inputFile.name
};
await writeFileAsync(inputFile.name, code, 'utf8');
const compiledCode = await (finalFlags |> compile(%));
inputFile.removeCallback();
return {
code: compiledCode
};
}
};
};