(value: string | null)
| 123 | } |
| 124 | |
| 125 | function parseDiffBaseline(value: string | null): ProjectDiffBaseline | null { |
| 126 | if (!value) { |
| 127 | return null |
| 128 | } |
| 129 | |
| 130 | try { |
| 131 | const parsed = JSON.parse(value) as unknown |
| 132 | if (!parsed || typeof parsed !== 'object') { |
| 133 | return null |
| 134 | } |
| 135 | |
| 136 | const baseline = parsed as { |
| 137 | kind?: unknown |
| 138 | rev?: unknown |
| 139 | capturedAt?: unknown |
| 140 | sha?: unknown |
| 141 | } |
| 142 | switch (baseline.kind) { |
| 143 | case 'head': |
| 144 | case 'previous': |
| 145 | case 'yesterday': |
| 146 | case 'main-branch': |
| 147 | case 'dev-branch': |
| 148 | return { kind: baseline.kind } |
| 149 | case 'last-opened': |
| 150 | return typeof baseline.rev === 'string' && baseline.rev.trim().length > 0 |
| 151 | ? { |
| 152 | kind: 'last-opened', |
| 153 | rev: baseline.rev, |
| 154 | ...(baseline.capturedAt === undefined |
| 155 | ? {} |
| 156 | : { capturedAt: baseline.capturedAt as string | null }), |
| 157 | } |
| 158 | : null |
| 159 | case 'commit': |
| 160 | return typeof baseline.sha === 'string' && baseline.sha.trim().length > 0 |
| 161 | ? { kind: 'commit', sha: baseline.sha } |
| 162 | : null |
| 163 | default: |
| 164 | return null |
| 165 | } |
| 166 | } catch { |
| 167 | return null |
| 168 | } |
| 169 | } |
| 170 | |
| 171 | export function getThreadDiffPreferences(sessionPath: string): ProjectDiffPreferences { |
| 172 | const db = getThreadStateDatabase() |
no outgoing calls
no test coverage detected