54 lines
1.4 KiB
TypeScript
54 lines
1.4 KiB
TypeScript
export const CANVAS_LOCAL_EDIT_CONFIG_KEY = "canvas_local_edit_config";
|
|
|
|
export type CanvasLocalEditConfig = {
|
|
modelId: string;
|
|
scaleAdjustModelId: string;
|
|
};
|
|
|
|
export type CanvasLocalEditModelIdentity = {
|
|
id: string;
|
|
modelId: string;
|
|
};
|
|
|
|
export function defaultCanvasLocalEditConfig(): CanvasLocalEditConfig {
|
|
return {
|
|
modelId: "",
|
|
scaleAdjustModelId: "",
|
|
};
|
|
}
|
|
|
|
function normalizeModelRef(value: unknown) {
|
|
return String(value || "").trim().slice(0, 128);
|
|
}
|
|
|
|
export function resolveCanvasLocalEditModelRef<
|
|
T extends CanvasLocalEditModelIdentity,
|
|
>(models: T[], value: unknown): T | null {
|
|
const modelRef = normalizeModelRef(value);
|
|
if (!modelRef) return null;
|
|
|
|
// New settings persist the database UUID so identically named runtime
|
|
// models from different providers cannot be confused. Keep modelId lookup
|
|
// as a compatibility path for settings saved before UUID persistence.
|
|
return (
|
|
models.find((model) => model.id === modelRef) ||
|
|
models.find((model) => model.modelId === modelRef) ||
|
|
null
|
|
);
|
|
}
|
|
|
|
export function normalizeCanvasLocalEditConfig(
|
|
value: unknown
|
|
): CanvasLocalEditConfig {
|
|
const defaults = defaultCanvasLocalEditConfig();
|
|
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
return defaults;
|
|
}
|
|
|
|
const raw = value as Record<string, unknown>;
|
|
return {
|
|
modelId: normalizeModelRef(raw.modelId),
|
|
scaleAdjustModelId: normalizeModelRef(raw.scaleAdjustModelId),
|
|
};
|
|
}
|