export type VideoCanvasAdvancedSettings = { autoValidateMaterial: boolean; searchEnabled: boolean; }; type VideoCanvasAdvancedSettingsDefaults = { defaultAutoValidateMaterial: boolean; defaultSearchEnabled: boolean; }; function isRecord(value: unknown): value is Record { return Boolean(value) && typeof value === "object" && !Array.isArray(value); } export function resolveVideoCanvasAdvancedSettings( value: unknown, defaults: VideoCanvasAdvancedSettingsDefaults, ): VideoCanvasAdvancedSettings { const incoming = isRecord(value) ? value : {}; return { autoValidateMaterial: typeof incoming.autoValidateMaterial === "boolean" ? incoming.autoValidateMaterial : typeof incoming.auto_validate_material === "boolean" ? incoming.auto_validate_material : defaults.defaultAutoValidateMaterial, searchEnabled: typeof incoming.searchEnabled === "boolean" ? incoming.searchEnabled : typeof incoming.search_enabled === "boolean" ? incoming.search_enabled : typeof incoming.searchable === "boolean" ? incoming.searchable : defaults.defaultSearchEnabled, }; } export function mergeVideoCanvasAdvancedSettings( paramsValue: unknown, updates: Partial, ): Record { const params = isRecord(paramsValue) ? paramsValue : {}; const settings = isRecord(params.settings) ? params.settings : {}; return { ...params, settings: { ...settings, ...updates, }, }; }