MCPcopy Create free account
hub / github.com/backnotprop/plannotator / parseSemanticDiffJson

Function parseSemanticDiffJson

packages/shared/semantic-diff.ts:347–387  ·  view source on GitHub ↗
(stdout: string, sem: ResolvedSem)

Source from the content-addressed store, hash-verified

345}
346
347export function parseSemanticDiffJson(stdout: string, sem: ResolvedSem): SemanticDiffResponse {
348 let parsed: unknown;
349 try {
350 parsed = JSON.parse(stdout);
351 } catch {
352 return {
353 status: "error",
354 reason: "invalid-json",
355 message: "sem returned invalid JSON.",
356 semVersion: sem.version,
357 semSource: sem.source,
358 };
359 }
360
361 if (!parsed || typeof parsed !== "object") {
362 return {
363 status: "error",
364 reason: "invalid-json-shape",
365 message: "sem returned an unexpected JSON payload.",
366 semVersion: sem.version,
367 semSource: sem.source,
368 };
369 }
370
371 const payload = parsed as Record<string, unknown>;
372 const changes = Array.isArray(payload.changes)
373 ? payload.changes.map(changeFromJson).filter((change): change is SemanticDiffChange => !!change)
374 : [];
375 const binaryChanges = Array.isArray(payload.binaryChanges)
376 ? payload.binaryChanges.map(binaryChangeFromJson).filter((change): change is SemanticDiffBinaryChange => !!change)
377 : [];
378
379 return {
380 status: "ok",
381 summary: summaryFromJson(payload.summary),
382 changes,
383 binaryChanges,
384 semVersion: sem.version,
385 semSource: sem.source,
386 };
387}
388
389export function normalizeSemanticDiffFileExts(fileExts: string[] | undefined): string[] {
390 return Array.from(new Set((fileExts ?? [])

Callers 1

runSemanticDiffFunction · 0.85

Calls 2

summaryFromJsonFunction · 0.85
parseMethod · 0.80

Tested by

no test coverage detected