import type { CanvasState, CanvasWorkspaceType } from "@/types/canvas"; export type CanvasSaveRevisionOptions = { baseCanvasRevision?: string | null; baseCanvasUpdatedAt?: string | null; }; function normalizeRevisionValue(value: unknown) { return String(value || "").trim() || undefined; } export function mergeCanvasSaveRevisionOptions(params: { options?: CanvasSaveRevisionOptions; fallbackOptions?: CanvasSaveRevisionOptions; }): CanvasSaveRevisionOptions { return { baseCanvasRevision: normalizeRevisionValue(params.options?.baseCanvasRevision) ?? normalizeRevisionValue(params.fallbackOptions?.baseCanvasRevision), baseCanvasUpdatedAt: normalizeRevisionValue(params.options?.baseCanvasUpdatedAt) ?? normalizeRevisionValue(params.fallbackOptions?.baseCanvasUpdatedAt), }; } export function buildCanvasSaveRequestBody(params: { canvasData: CanvasState; workspaceType?: CanvasWorkspaceType; options?: CanvasSaveRevisionOptions; fallbackOptions?: CanvasSaveRevisionOptions; }) { const revisionOptions = mergeCanvasSaveRevisionOptions({ options: params.options, fallbackOptions: params.fallbackOptions, }); return params.workspaceType ? { canvasData: params.canvasData, workspaceType: params.workspaceType, ...revisionOptions } : { canvasData: params.canvasData, ...revisionOptions }; }