Skip to main content
Glama
generateDefaultLeafFuncs.ts1.84 kB
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); // Get available handlers from the schema const superSchema = schemaVariant.superSchema; const availableHandlers = superSchema.handlers ? Object.keys(superSchema.handlers) : []; for (const codeGenFunc of defaultCodeGenFuncs) { // Check if this func has required handlers if (codeGenFunc.requiredHandlers && codeGenFunc.requiredHandlers.length > 0) { // Check if all required handlers exist on this schema const hasAllHandlers = codeGenFunc.requiredHandlers.every( (required) => availableHandlers.includes(required) ); if (!hasAllHandlers) { // Skip this codegen func for this schema continue; } } // clone otherwise modifications to these cause changes on all // specs funcs.push(_.cloneDeep(codeGenFunc.spec)); leafFuncs.push( createLeafFuncSpec("codeGeneration", codeGenFunc.spec.uniqueId, ["domain"]), ); } } return specs; } export type LeafFn = (domain_id: string) => Array<{ spec: FuncSpec; requiredHandlers?: string[] }>;

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systeminit/si'

If you have feedback or need assistance with the MCP directory API, please join our Discord server