logpipes
Version:
Console.log transformation pipes
128 lines • 5.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getOriginalConsoleMethods = exports.getConsoleOverrides = exports.uninstallAllConsoleOverrides = exports.uninstallConsoleOverrides = exports.uninstallConsoleOverride = exports.installConsoleOverrides = exports.installConsoleOverride = exports.LOG_LEVELS = void 0;
exports.LOG_LEVELS = ['debug', 'error', 'info', 'log', 'trace', 'warn'];
const consoleOverrides = [];
const noop = () => { };
const originalConsole = {
debug: noop,
error: noop,
info: noop,
log: noop,
trace: noop,
warn: noop
};
/**
* Adds the pipe to the list of active console overrides.
* The pipes are called in the order they are installed.
*/
function installConsoleOverride(pipe) {
const pipes = Array.isArray(pipe) ? pipe : [pipe];
installConsoleOverrides(...pipes);
}
exports.installConsoleOverride = installConsoleOverride;
/**
* Adds the pipes to the list of active console overrides.
* The pipes are called in the order they are installed.
*/
function installConsoleOverrides(...pipes) {
initializeConsoleOverrideContextOnFirstUse();
for (const pipe of pipes) {
// Call pipe.onInstall() when pipe is installed first time.
if (!consoleOverrides.includes(pipe)) {
pipe.onInstall && pipe.onInstall();
}
consoleOverrides.push(pipe);
}
}
exports.installConsoleOverrides = installConsoleOverrides;
/** Removes the given pipe from the active console overrides. */
function uninstallConsoleOverride(pipe) {
const pipes = Array.isArray(pipe) ? pipe : [pipe];
uninstallConsoleOverrides(...pipes);
}
exports.uninstallConsoleOverride = uninstallConsoleOverride;
/** Removes the given pipes from the active console overrides. */
function uninstallConsoleOverrides(...pipes) {
for (const pipe of pipes) {
for (let pipeIndex = consoleOverrides.indexOf(pipe); pipeIndex >= 0; pipeIndex = consoleOverrides.indexOf(pipe)) {
const removedPipe = consoleOverrides.splice(pipeIndex, 1)[0];
// Call pipe.onUninstall() when the pipe is not present in the overrides anymore.
if (!consoleOverrides.includes(removedPipe)) {
(removedPipe === null || removedPipe === void 0 ? void 0 : removedPipe.onUninstall) && removedPipe.onUninstall();
}
}
}
destroyConsoleOverrideContextOnLastUse();
}
exports.uninstallConsoleOverrides = uninstallConsoleOverrides;
/** Uninstall all existing console overrides. */
function uninstallAllConsoleOverrides() {
for (const pipe of [...consoleOverrides]) {
uninstallConsoleOverride(pipe);
}
}
exports.uninstallAllConsoleOverrides = uninstallAllConsoleOverrides;
/** Returns a list of all console overrides. */
function getConsoleOverrides() {
return [...consoleOverrides];
}
exports.getConsoleOverrides = getConsoleOverrides;
/**
* Returns set of console.[log] methods captured during installation of the first pipe.
* If no pipe is installed, returns current console[log] methods.
*/
function getOriginalConsoleMethods() {
if (originalConsole['debug'] !== noop) {
return Object.assign({}, originalConsole);
}
const result = {};
for (const level of exports.LOG_LEVELS) {
result[level] = console[level];
}
return result;
}
exports.getOriginalConsoleMethods = getOriginalConsoleMethods;
function initializeConsoleOverrideContextOnFirstUse() {
if (originalConsole['debug'] !== noop) {
return; // Already installed.
}
for (const level of exports.LOG_LEVELS) {
originalConsole[level] = console[level];
console[level] = (...args) => {
var _a, _b, _c;
let resultLevel = level;
let resultArgs = args;
for (const pipe of consoleOverrides) {
const logPipeResult = pipe(resultLevel, ...resultArgs);
const isSuppressed = !logPipeResult
|| (Array.isArray(logPipeResult)
? ((_a = logPipeResult === null || logPipeResult === void 0 ? void 0 : logPipeResult.length) !== null && _a !== void 0 ? _a : 0) === 0
: ((_c = (_b = logPipeResult.args) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0) === 0);
if (isSuppressed) {
return; // Log is suppressed.
}
if (Array.isArray(logPipeResult)) {
resultArgs = logPipeResult;
continue;
}
resultLevel = logPipeResult.level;
resultArgs = logPipeResult.args;
}
originalConsole[resultLevel](...resultArgs);
};
}
}
function destroyConsoleOverrideContextOnLastUse() {
if (consoleOverrides.length > 0) {
return; // Too early to restore: there are overrides.
}
if (originalConsole['debug'] === noop) {
return; // Nothing to restore: not overridden.
}
for (const name of exports.LOG_LEVELS) {
console[name] = originalConsole[name];
originalConsole[name] = noop;
}
}
//# sourceMappingURL=ConsoleOverrides.js.map