()
| 18 | type SignalGroup = { file: string; signals: TrackedSignal[] }; |
| 19 | |
| 20 | function buildGroups(): SignalGroup[] { |
| 21 | const groupMap = new Map<string, TrackedSignal[]>(); |
| 22 | |
| 23 | for (const s of trackedSignals) { |
| 24 | // extract filename from source path (e.g. "/ts/states/core.ts:4:44" -> "states/core.ts") |
| 25 | const match = /\/ts\/(.+?)(?::\d+)*(?:\)?)$/.exec(s.source); |
| 26 | const group = match?.[1] ?? (s.source !== "" ? s.source : s.owner); |
| 27 | const entries = groupMap.get(group) ?? []; |
| 28 | entries.push(s); |
| 29 | groupMap.set(group, entries); |
| 30 | } |
| 31 | |
| 32 | return Array.from(groupMap.entries()).map(([file, signals]) => ({ |
| 33 | file, |
| 34 | signals, |
| 35 | })); |
| 36 | } |
| 37 | |
| 38 | function formatValue(value: unknown): string { |
| 39 | if (value === null) return "null"; |
no test coverage detected