(raw: string, path: string)
| 254 | } |
| 255 | |
| 256 | function parseStoredCanvasData(raw: string, path: string): StoredCanvasData { |
| 257 | let parsed: unknown; |
| 258 | try { |
| 259 | parsed = JSON.parse(raw); |
| 260 | } catch { |
| 261 | throw new ChoiceAbortError(`Canvas file is not valid JSON: ${path}`); |
| 262 | } |
| 263 | |
| 264 | if (!parsed || typeof parsed !== "object") { |
| 265 | throw new ChoiceAbortError(`Canvas file has invalid structure: ${path}`); |
| 266 | } |
| 267 | |
| 268 | const maybeData = parsed as { nodes?: unknown }; |
| 269 | if (!Array.isArray(maybeData.nodes)) { |
| 270 | throw new ChoiceAbortError( |
| 271 | `Canvas file has no nodes array: ${path}`, |
| 272 | ); |
| 273 | } |
| 274 | |
| 275 | return parsed as StoredCanvasData; |
| 276 | } |
| 277 | |
| 278 | export function resolveActiveCanvasCaptureTarget( |
| 279 | app: App, |
no test coverage detected