UNPKG

@akala/core

Version:
38 lines 1.51 kB
export class MulticastLogMiddleware { loggers; constructor(loggers = []) { this.loggers = loggers; } use(...middlewares) { this.loggers.push(...middlewares); } shouldHandle(logLevel, namespaces) { return this.loggers.reduce((previous, current) => previous && current.shouldHandle(logLevel, namespaces), true); } handle(logLevel, namespaces, ...args) { const results = this.loggers.filter(l => l.shouldHandle(logLevel, namespaces)).map(l => { try { return { status: 'fulfilled', value: l.handle(logLevel, namespaces, ...args) }; } catch (e) { return { status: 'rejected', reason: e }; } }).filter(x => x); const fullfilled = results.filter(r => r.status === 'fulfilled').map(r => r.value).filter(r => r); const rejected = results.filter(r => r.status === 'rejected').map(r => r.reason); if (results.length === 0 || rejected.length == 0) throw undefined; if (fullfilled.length === 1) return (fullfilled[0]); if (rejected.length === 1) throw rejected[0]; if (fullfilled.length > 1) return new AggregateError(fullfilled, 'Multiple loggers handled the message'); if (rejected.length > 1) throw rejected; } } export function multicastLogger(...loggers) { return new MulticastLogMiddleware(loggers); } //# sourceMappingURL=multicast.js.map