import { LogFunctionFactory, Logger as MigrateLogger, LogLevel, } from 'graphile-migrate'; import { DbLogger } from '../common'; interface MigrateLogMeta { error?: Error; } const ansiRegex = new RegExp( [ '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))', ].join('|'), 'g', ); const removeAnsiCodes = (value: T): T | string => { if (typeof value !== 'string') { return value; } return value.replace(ansiRegex, ''); }; export const createMigrationsLogger = (logger: DbLogger): MigrateLogger => { const logFactory: LogFunctionFactory> = () => { return (level: LogLevel, message: string, meta?: MigrateLogMeta): void => { switch (level) { case LogLevel.ERROR: meta?.error ? logger.error(meta?.error, removeAnsiCodes(message)) : logger.error(removeAnsiCodes(message)); break; case LogLevel.WARNING: logger.warn(message); break; case LogLevel.INFO: default: logger.log(message); } }; }; return new MigrateLogger(logFactory); };