import type { CallTemplateFunctionArgs, JsonPrimitive, TemplateFunctionArg, } from "@yaakapp-internal/plugins"; export function validateTemplateFunctionArgs( fnName: string, args: TemplateFunctionArg[], values: CallTemplateFunctionArgs["values"], ): string | null { for (const arg of args) { if ("inputs" in arg && arg.inputs) { // Recurse down const err = validateTemplateFunctionArgs(fnName, arg.inputs, values); if (err) return err; } if (!("name" in arg)) continue; if (arg.optional) continue; if (arg.defaultValue != null) continue; if (arg.hidden) continue; if (values[arg.name] != null) continue; return `Missing required argument "${arg.label || arg.name}" for template function ${fnName}()`; } return null; } /** Recursively apply form input defaults to a set of values */ export function applyFormInputDefaults( inputs: TemplateFunctionArg[], values: { [p: string]: JsonPrimitive | undefined }, ) { let newValues: { [p: string]: JsonPrimitive | undefined } = { ...values }; for (const input of inputs) { if ("defaultValue" in input && values[input.name] === undefined) { newValues[input.name] = input.defaultValue; } if (input.type === "checkbox" && values[input.name] === undefined) { newValues[input.name] = false; } // Recurse down to all child inputs if ("inputs" in input) { newValues = applyFormInputDefaults(input.inputs ?? [], newValues); } } return newValues; }