in wix/light.js [12:80]
function light(options) {
const { Transform } = require("stream");
const path = require("path");
const tmp = require("tmp");
const utils = require("donuts.node/utils");
const { exec } = require("child_process");
const fs = require("fs");
const vinyl = require("cookie.gulp/vinyl");
options = options || Object.create(null);
options.intermediateDir = options.intermediateDir || tmp.dirSync({ unsafeCleanup: true }).name;
options.spdb = options.spdb === true;
options.outFileName = !utils.isString(options.outFileName) || utils.string.isEmptyOrWhitespace(options.outFileName) ? "setup.msi" : options.outFileName;
/** @type {string} */
let packDir;
/** @type {Array.<string>} */
const wxsObjs = [];
return new Transform({
objectMode: true,
flush(callback) {
const exeLight = path.join(__dirname, "./wix/light.exe");
const argSpdb = options.spdb ? "-spdb" : "";
const outDir = tmp.dirSync({ dir: options.intermediateDir, unsafeCleanup: true }).name;
const argOut = path.join(outDir, options.outFileName);
const argWxsObjs = wxsObjs.map((fileName) => `"${fileName}"`).join(" ");
const cmdLight = `"${exeLight}" -b ${packDir} ${argSpdb} -out ${argOut} ${argWxsObjs}`;
console.info("MSI", "Executing", cmdLight);
exec(cmdLight, { encoding: "utf8" },
(err, stdout, stderr) => {
console.info(stdout);
if (stderr) {
console.error(stderr);
}
if (!err) {
fs.readdirSync(outDir, "utf8")
.forEach((fileName) => {
const filePath = path.join(outDir, fileName);
this.push(vinyl(filePath, outDir));
});
}
callback(err);
});
},
/**
*
* @param {import("vinyl")} chunk
*/
transform(chunk, encoding, callback) {
if (chunk.isDirectory()) {
packDir = chunk.path;
} else {
wxsObjs.push(chunk.path);
}
callback();
}
});
}