@@ -35,6 +35,15 @@ const captureMock = vi.hoisted(() => {
|
35 | 35 | return acc; |
36 | 36 | }, {}), |
37 | 37 | ).map(([value, count]) => ({ value, count })); |
| 38 | +const countMatching = <T>(values: T[], predicate: (value: T) => boolean) => { |
| 39 | +let count = 0; |
| 40 | +for (const value of values) { |
| 41 | +if (predicate(value)) { |
| 42 | +count += 1; |
| 43 | +} |
| 44 | +} |
| 45 | +return count; |
| 46 | +}; |
38 | 47 | |
39 | 48 | const store = { |
40 | 49 | upsertSession(session: Record<string, unknown>) { |
@@ -46,7 +55,7 @@ const captureMock = vi.hoisted(() => {
|
46 | 55 | listSessions(limit: number) { |
47 | 56 | return sessions.slice(0, limit).map((session) => |
48 | 57 | Object.assign({}, session, { |
49 | | -eventCount: events.filter((event) => event.sessionId === session.id).length, |
| 58 | +eventCount: countMatching(events, (event) => event.sessionId === session.id), |
50 | 59 | }), |
51 | 60 | ); |
52 | 61 | }, |
@@ -59,7 +68,7 @@ const captureMock = vi.hoisted(() => {
|
59 | 68 | return { |
60 | 69 | sessionId, |
61 | 70 | totalEvents: selected.length, |
62 | | -unlabeledEventCount: metas.filter((meta) => !meta.provider && !meta.model).length, |
| 71 | +unlabeledEventCount: countMatching(metas, (meta) => !meta.provider && !meta.model), |
63 | 72 | providers: countValues(metas.map((meta) => meta.provider as string | undefined)), |
64 | 73 | apis: countValues(metas.map((meta) => meta.api as string | undefined)), |
65 | 74 | models: countValues(metas.map((meta) => meta.model as string | undefined)), |
|