webpack/test/helpers/captureStdio.js

49 lines
1.1 KiB
JavaScript

const stripAnsi = require("strip-ansi");
module.exports = (stdio, tty) => {
let logs = [];
const write = stdio.write;
const isTTY = stdio.isTTY;
stdio.write = function(str) {
logs.push(str);
};
if (tty !== undefined) stdio.isTTY = tty;
// isTTY flag is only read once on initialization
// therefore we need to clear some module caches
// to get the mocked value
delete require.cache[require.resolve("../../")];
delete require.cache[require.resolve("../../lib/node/NodeEnvironmentPlugin")];
delete require.cache[require.resolve("../../lib/node/nodeConsole")];
return {
data: logs,
reset: () => (logs = []),
toString: () => {
return stripAnsi(logs.join("")).replace(
/\([^)]+\) (\[[^\]]+\]\s*)?DeprecationWarning.+(\n\s+at .*)*\n?/g,
""
);
},
toStringRaw: () => {
return logs.join("");
},
restore() {
stdio.write = write;
stdio.isTTY = isTTY;
delete require.cache[require.resolve("../../")];
delete require.cache[
require.resolve("../../lib/node/NodeEnvironmentPlugin")
];
delete require.cache[require.resolve("../../lib/node/nodeConsole")];
}
};
};