UNPKG

tsconfig.js

Version:

Polyfill for tsconfig.js, because TypeScript does not natively support JS config files

91 lines (70 loc) 1.84 kB
const winston = require('winston') const pretty = require('pretty-format') module.exports = withLogger const $hasRun = Symbol() function withLogger(base) { enhancedWithLogger.displayName = base.name + '(withLogger)' return enhancedWithLogger function enhancedWithLogger(allOptions = {}) { if (allOptions[$hasRun]) return base(allOptions) const { logger, logLevel, logFile, logToConsole = true, ...options } = allOptions options[$hasRun] = true if (logger) { logger.debug('Launching with given logger') logger.debug('Options (except logger):') logger.debug(options) enhanceLogger(logger) return base({ ...options, log: logger }) } const { cli, combine, logstash, timestamp, } = winston.format const stringify = winston.format(({ message, ...info }) => ({ ...info, message: ( typeof message === 'string' ? message : pretty(message) ) })) const transports = [ new winston.transports.Console({ silent: !logToConsole, format: combine( stringify(), cli(), ), }) ] if (logFile) { transports.push(new winston.transports.File({ filename: logFile, format: combine( timestamp(), stringify(), logstash(), ) })) } const log = winston.createLogger({ level: logLevel, transports, }) log.debug('Launching without given logger') logToConsole && log.debug('Will log to Console') logFile && log.debug(`Will log to File “${logFile}”`) log.debug('Options:') log.debug(allOptions) enhanceLogger(log) return base({ ...options, log }) } } function enhanceLogger(logger) { logger.debug('Adding handler for Error to logger') logger.errorError = (logger.levels[logger.level] < logger.levels.verbose) ? ({ message }) => logger.error(message) : ({ stack }) => logger.error(stack) }