UNPKG

@graphql-hive/logger-winston

Version:
85 lines (82 loc) 2.36 kB
import { DisposableSymbols } from '@whatwg-node/disposablestack'; function prepareArgs(messageArgs) { const flattenedMessageArgs = messageArgs.flat(Infinity).flatMap((messageArg) => { if (typeof messageArg === "function") { messageArg = messageArg(); } if (messageArg?.toJSON) { messageArg = messageArg.toJSON(); } if (messageArg instanceof AggregateError) { return messageArg.errors; } return messageArg; }); let message = ""; const extras = []; for (let messageArg of flattenedMessageArgs) { if (messageArg == null) { continue; } const typeofMessageArg = typeof messageArg; if (typeofMessageArg === "string" || typeofMessageArg === "number" || typeofMessageArg === "boolean") { message = message ? message + ", " + messageArg : messageArg; } else if (typeofMessageArg === "object") { extras.push(messageArg); } } return [message, ...extras]; } class WinstonLoggerAdapter { constructor(winstonLogger, meta = {}) { this.winstonLogger = winstonLogger; this.meta = meta; if (meta["name"]) { this.name = meta["name"]; } } name; log(...args) { if (this.winstonLogger.isInfoEnabled()) { this.winstonLogger.info(...prepareArgs(args)); } } info(...args) { if (this.winstonLogger.isInfoEnabled()) { this.winstonLogger.info(...prepareArgs(args)); } } warn(...args) { if (this.winstonLogger.isWarnEnabled()) { this.winstonLogger.warn(...prepareArgs(args)); } } error(...args) { if (this.winstonLogger.isErrorEnabled()) { this.winstonLogger.error(...prepareArgs(args)); } } debug(...lazyArgs) { if (this.winstonLogger.isDebugEnabled()) { this.winstonLogger.debug(...prepareArgs(lazyArgs)); } } child(nameOrMeta) { if (typeof nameOrMeta === "string") { nameOrMeta = { name: this.name ? this.name.includes(nameOrMeta) ? this.name : `${this.name}, ${nameOrMeta}` : nameOrMeta }; } return new WinstonLoggerAdapter(this.winstonLogger.child(nameOrMeta), { ...this.meta, ...nameOrMeta }); } [DisposableSymbols.dispose]() { return this.winstonLogger.close(); } } function createLoggerFromWinston(winstonLogger) { return new WinstonLoggerAdapter(winstonLogger); } export { createLoggerFromWinston };