Skip to content

Commit ed0f2f1

Browse files
committed
feat(Reporters): add mergeReporters helper
1 parent 1d729e8 commit ed0f2f1

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

src/reporter.spec.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
CacheEntry,
44
verboseReporter,
55
createCacheEntry,
6+
mergeReporters,
67
} from './index';
78
import { delay, prettyPrint } from './testHelpers';
89

@@ -215,6 +216,34 @@ describe('verbose reporter', () => {
215216
});
216217
});
217218

219+
describe('mergeReporters', () => {
220+
it('merges multiple reporters', async () => {
221+
const cache = new Map<string, CacheEntry>();
222+
const logger1 = createLogger();
223+
const logger2 = createLogger();
224+
225+
await cachified({
226+
cache,
227+
key: 'test',
228+
reporter: mergeReporters(
229+
verboseReporter({ logger: logger1, performance: Date }),
230+
undefined,
231+
verboseReporter({ logger: logger2, performance: Date }),
232+
),
233+
getFreshValue() {
234+
return 'ONE';
235+
},
236+
});
237+
238+
expect(logger1.print()).toMatchInlineSnapshot(
239+
`"LOG: 'Updated the cache value for test.' 'Getting a fresh value for this took 0ms.' 'Caching for forever in Map.'"`,
240+
);
241+
expect(logger2.print()).toMatchInlineSnapshot(
242+
`"LOG: 'Updated the cache value for test.' 'Getting a fresh value for this took 0ms.' 'Caching for forever in Map.'"`,
243+
);
244+
});
245+
});
246+
218247
function createLogger() {
219248
const log: string[] = [];
220249

src/reporter.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,3 +242,14 @@ export function verboseReporter<Value>({
242242
};
243243
};
244244
}
245+
246+
export function mergeReporters<Value = unknown>(
247+
...reporters: (CreateReporter<Value> | undefined)[]
248+
): CreateReporter<Value> {
249+
return (context) => {
250+
const reporter = reporters.map((r) => r?.(context));
251+
return (event) => {
252+
reporter.forEach((r) => r?.(event));
253+
};
254+
};
255+
}

0 commit comments

Comments
 (0)