CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
// Duenner Client fuer VER-04s Backend-Voraussetzung
|
|
// (dms/internal/versioningapi.handleDiff) — enthaelt keine eigene
|
|
// Diff-Berechnung, nur den HTTP-Aufruf.
|
|
import { apiFetch, statusMessage } from "./http";
|
|
import { withCaller } from "./caller";
|
|
|
|
function apiBase(): string {
|
|
const base = process.env.NEXT_PUBLIC_VERSIONING_API_URL;
|
|
if (!base) {
|
|
throw new Error("NEXT_PUBLIC_VERSIONING_API_URL ist nicht gesetzt (Umgebungsvariable erforderlich)");
|
|
}
|
|
return base;
|
|
}
|
|
|
|
export type DiffOp = "equal" | "insert" | "delete";
|
|
|
|
export interface DiffLine {
|
|
op: DiffOp;
|
|
text: string;
|
|
}
|
|
|
|
export interface MetadataDiffEntry {
|
|
field: string;
|
|
before: string;
|
|
after: string;
|
|
}
|
|
|
|
export interface DiffResult {
|
|
text: DiffLine[];
|
|
metadata: MetadataDiffEntry[];
|
|
}
|
|
|
|
export async function fetchDiff(documentID: string, fromRevisionID: string, toRevisionID: string): Promise<DiffResult> {
|
|
const url = withCaller(`${apiBase()}/documents/${encodeURIComponent(documentID)}/diff?from=${encodeURIComponent(fromRevisionID)}&to=${encodeURIComponent(toRevisionID)}`);
|
|
const res = await apiFetch(url);
|
|
if (!res.ok) {
|
|
if (res.status === 403) throw new Error("Zugriff verweigert: keine Berechtigung für eine der beiden Revisionen.");
|
|
throw new Error(statusMessage(res, "Vergleich fehlgeschlagen"));
|
|
}
|
|
return res.json();
|
|
}
|