@jawis/stdio-filter
Version:
Filter the stdio from console applications.
63 lines (62 loc) • 2.93 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const node_fs_1 = __importDefault(require("node:fs"));
const node_path_1 = __importDefault(require("node:path"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const internal_1 = require("./internal");
//conf
const timeout = 300;
const folder = __dirname;
const dataFolder = node_path_1.default.join(folder, "../console-filter");
const ignoreFile = node_path_1.default.join(dataFolder, "cf-ignore.txt");
const ignorePrefixFile = node_path_1.default.join(dataFolder, "cf-ignore-prefix.txt");
const allOutputFile = node_path_1.default.join(dataFolder, "cf-all.txt");
const shownOutputFile = node_path_1.default.join(dataFolder, "cf-shown.txt");
const includeJsonFile = node_path_1.default.join(dataFolder, "includeJson.js"); //could be implemented with includeLine
const includeLineFile = node_path_1.default.join(dataFolder, "includeLine.js");
const mapLineBeforeFilterFile = node_path_1.default.join(dataFolder, "mapLineBeforeFilter.js");
const mapLineBeforeOutputFile = node_path_1.default.join(dataFolder, "mapLineBeforeOutput.js");
//ensure folder and files
fs_extra_1.default.ensureDirSync(dataFolder);
fs_extra_1.default.ensureFileSync(ignoreFile);
fs_extra_1.default.ensureFileSync(ignorePrefixFile);
//clear
node_fs_1.default.writeFileSync(allOutputFile, "");
node_fs_1.default.writeFileSync(shownOutputFile, "");
//load user functions
const includeLine = node_fs_1.default.existsSync(includeLineFile)
? eval("require")(includeLineFile)
: undefined;
const includeJson = node_fs_1.default.existsSync(includeJsonFile)
? eval("require")(includeJsonFile)
: undefined;
const mapLineBeforeFilter = node_fs_1.default.existsSync(mapLineBeforeFilterFile)
? eval("require")(mapLineBeforeFilterFile)
: undefined;
const mapLineBeforeOutput = node_fs_1.default.existsSync(mapLineBeforeOutputFile)
? eval("require")(mapLineBeforeOutputFile)
: undefined;
//make filter
const filter = (0, internal_1.makeStdioFilter)({
ignoreLiteralPrefixes: node_fs_1.default.readFileSync(ignorePrefixFile).toString().split("\n"),
ignoreLiteralLines: node_fs_1.default.readFileSync(ignoreFile).toString().split("\n"),
includeLine,
includeJson,
streamOutput: (line) => process.stdout.write(line),
onLineShown: (line) => node_fs_1.default.appendFileSync(shownOutputFile, line + "\n"),
mapLineBeforeFilter,
mapLineBeforeOutput,
timeout,
});
process.stdin.on("data", (data) => {
node_fs_1.default.appendFileSync(allOutputFile, data);
filter(data.toString());
});
//ignore signals. We keep running until stdin is closed.
process.on("SIGTERM", () => { });
process.on("SIGINT", () => { });
process.on("SIGQUIT", () => { });
process.on("SIGHUP", () => { });