import { TOOLCRAFT_MODEL_IMPORT_LIMIT_NAMES } from "../model-import/model-import-limit-values"; import type { ToolcraftProductModuleDefinition } from "../modules/contract/module-definition"; import { defineToolcraft } from "./define-toolcraft"; import { getProductSections } from "./define-toolcraft-test-utils"; import { resolveRequiredToolcraftAppIdentity } from "./app-identity"; import type { ToolcraftProductDefinition } from "./product-base"; import { resolveToolcraftMaterializedSchema } from "./resolve-toolcraft-materialized-schema"; import type { ToolcraftControlSchema, ToolcraftModelImportLimits, } from "./types"; export const MODEL_LIMIT_KEYS: readonly (keyof ToolcraftModelImportLimits)[] = TOOLCRAFT_MODEL_IMPORT_LIMIT_NAMES; export function createSourceControlSchema( control: ToolcraftControlSchema, modules: readonly ToolcraftProductModuleDefinition[], ): ToolcraftProductDefinition { return { base: { canvas: { enabled: true }, identity: { id: "control-section-test", title: "Controls" }, panels: { controls: { sections: [ { id: "test-section-2", controls: { source: control, }, title: "Source", }, ], title: "Controls", }, }, }, modules, }; } export function createFileDropSchema( overrides: Record, modules: readonly ToolcraftProductModuleDefinition[], ): ToolcraftProductDefinition { return createSourceControlSchema( { applicability: { mode: "always" as const }, target: "source.asset", type: "fileDrop", ...overrides, } as ToolcraftControlSchema, modules, ); } export function getSourceControl( app: Pick, "panels">, ) { return getProductSections(app)[0]?.controls.source; } export function materializeControlTestDefinition( definition: ToolcraftProductDefinition, ) { const { identity, persistence, ...schema } = definition.base; return resolveToolcraftMaterializedSchema({ identity: resolveRequiredToolcraftAppIdentity(identity), persistence, requiredPersistenceSlices: [], schema, }); }