mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-20 16:43:53 +01:00
Add .oxfmtignore to skip generated bindings and wasm-pack output. Add npm format script, update DEVELOPMENT.md for Vite+ toolchain, and format all non-generated files with oxfmt. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
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;
|
|
}
|