import { defineToolcraft } from "../schema/define-toolcraft"; import type { ResolvedToolcraftAppSchema, ToolcraftControlSchema, ToolcraftNonModelControlSchema, } from "../schema/types"; import { defineToolcraftPerformance, getToolcraftWorkloadEnvelopeErrors, type ToolcraftEnvelopePerformanceConfig, type ToolcraftWorkloadDimension, } from "./performance"; export const workloadControl: ToolcraftNonModelControlSchema = { defaultValue: 4, label: "Count", max: 12, min: 0, performanceReason: "The value changes the amount of work.", performanceRole: "workload", target: "render.count", type: "slider", }; export function createWorkloadControlWithoutNumericFields( overrides: Partial = {}, ): ToolcraftControlSchema { return { label: "Count", performanceReason: "The value changes the amount of work.", performanceRole: "workload", target: "render.count", type: "slider", ...overrides, }; } export function createSchema( controls: Record = { count: workloadControl }, renderScale = false, ): ResolvedToolcraftAppSchema { return defineToolcraft({ canvas: { enabled: true, renderScale, sizing: { mode: "intrinsic-media" }, }, panels: { controls: { sections: [{ controls }], title: "Controls", }, }, }); } export function createDimension( overrides: Partial = {}, ): ToolcraftWorkloadDimension { return { defaultValue: 4, id: "count", interactiveMax: 12, mapping: "direct", source: { kind: "schema-target", target: "render.count", workloadBoundary: "maximum", }, unit: "units", ...overrides, }; } export function createEnvelopeConfig( dimensions: readonly ToolcraftWorkloadDimension[], ): ToolcraftEnvelopePerformanceConfig { return defineToolcraftPerformance({ rendererStrategy: "none", scenarios: [], usesCustomRenderer: false, workloadEnvelope: { dimensions }, }); } export function createMalformedEnvelopeConfig( workloadEnvelope: unknown, ): ToolcraftEnvelopePerformanceConfig { return { rendererStrategy: "none", scenarios: [], usesCustomRenderer: false, workloadEnvelope, } as unknown as ToolcraftEnvelopePerformanceConfig; } export function errorsFor( dimensions: readonly ToolcraftWorkloadDimension[], schema = createSchema(), ): string[] { return getToolcraftWorkloadEnvelopeErrors(schema, createEnvelopeConfig(dimensions)); }