roarr
Version:
JSON logger for Node.js and browser.
50 lines (39 loc) • 1.21 kB
text/typescript
import { logLevels } from '../constants';
import {
type Logger,
type MessageContext,
type MessageEventHandler,
} from '../types';
const noopLevelMethod = () => {
return undefined;
};
const mockLoggerPrototype: any = Object.create(Function.prototype);
mockLoggerPrototype.adopt = async function (_routine: any) {
return _routine();
};
mockLoggerPrototype.child = function (this: any) {
// eslint-disable-next-line @typescript-eslint/no-use-before-define
return createMockLogger(this.onMessage, this.parentMessageContext);
};
mockLoggerPrototype.getContext = function () {
return {};
};
for (const logLevelName of Object.keys(logLevels) as Array<
keyof typeof logLevels
>) {
mockLoggerPrototype[logLevelName] = noopLevelMethod;
mockLoggerPrototype[logLevelName + 'Once'] = noopLevelMethod;
}
export const createMockLogger = (
onMessage: MessageEventHandler,
parentContext?: MessageContext,
): Logger => {
// eslint-disable-next-line unicorn/consistent-function-scoping
const log: any = () => {
return undefined;
};
log.onMessage = onMessage;
log.parentMessageContext = parentContext;
Object.setPrototypeOf(log, mockLoggerPrototype);
return log as Logger;
};