@akala/core
Version:
38 lines • 1.51 kB
JavaScript
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