@graphql-hive/logger-winston
Version:
85 lines (82 loc) • 2.36 kB
JavaScript
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 };