import _ from "lodash";
import { createLeafFuncSpec } from "../../spec/funcs.ts";
import { ExpandedPkgSpec } from "../../spec/pkgs.ts";
import { FuncSpec } from "../../bindings/FuncSpec.ts";
export function generateDefaultLeafFuncs(
specs: ExpandedPkgSpec[],
fn: LeafFn,
): ExpandedPkgSpec[] {
for (const spec of specs) {
const [schema] = spec.schemas;
const [schemaVariant] = schema.variants;
const funcs = spec.funcs;
const leafFuncs = schemaVariant.leafFunctions;
const domain_id = schemaVariant.domain.uniqueId;
if (!domain_id) {
console.log(
`Could not generate codegen funcs for ${spec.name}: missing domain id!`,
);
continue;
}
const defaultCodeGenFuncs = fn(domain_id);
for (const codeGenFunc of defaultCodeGenFuncs) {
// clone otherwise modifications to these cause changes on all
// specs
funcs.push(_.cloneDeep(codeGenFunc));
leafFuncs.push(
createLeafFuncSpec("codeGeneration", codeGenFunc.uniqueId, ["domain"]),
);
}
}
return specs;
}
export type LeafFn = (domain_id: string) => FuncSpec[];