UNPKG

@autobe/agent

Version:

AI backend server code generator

62 lines (55 loc) 1.92 kB
import { AutoBeInterfaceEndpointDesign, AutoBeInterfaceEndpointEvent, AutoBeInterfaceGroup, AutoBeOpenApi, AutoBeProgressEventBase, } from "@autobe/interface"; import { AutoBeOpenApiEndpointComparator } from "@autobe/utils"; import { HashMap, Pair } from "tstl"; import typia from "typia"; import { AutoBeContext } from "../../context/AutoBeContext"; import { orchestrateInterfaceActionEndpoint } from "./orchestrateInterfaceActionEndpoint"; import { orchestrateInterfaceBaseEndpoint } from "./orchestrateInterfaceBaseEndpoint"; export const orchestrateInterfaceEndpoint = async ( ctx: AutoBeContext, props: { instruction: string; authorizeOperations: AutoBeOpenApi.IOperation[]; groups: AutoBeInterfaceGroup[]; }, ): Promise<AutoBeInterfaceEndpointDesign[]> => { const writeProgress: AutoBeProgressEventBase = { completed: 0, total: props.groups.length * ENDPOINT_STEPS, }; // BASE ENDPOINTS const baseEndpoints: AutoBeInterfaceEndpointDesign[] = await orchestrateInterfaceBaseEndpoint(ctx, { instruction: props.instruction, authorizeOperations: props.authorizeOperations, groups: props.groups, progress: writeProgress, }); // ACTION ENDPOINTS const actionEndpoints: AutoBeInterfaceEndpointDesign[] = await orchestrateInterfaceActionEndpoint(ctx, { instruction: props.instruction, authorizeOperations: props.authorizeOperations, groups: props.groups, baseEndpoints: baseEndpoints, progress: writeProgress, }); // UNIQUE FILTERING return new HashMap( [...baseEndpoints, ...actionEndpoints].map( (design) => new Pair(design.endpoint, design), ), AutoBeOpenApiEndpointComparator.hashCode, AutoBeOpenApiEndpointComparator.equals, ) .toJSON() .map((it) => it.second); }; const ENDPOINT_STEPS = typia.misc.literals<AutoBeInterfaceEndpointEvent["kind"]>().length;