@autobe/agent
Version:
AI backend server code generator
72 lines (69 loc) • 2.64 kB
text/typescript
import {
AutoBeOpenApi,
AutoBeProgressEventBase,
AutoBeRealizeAuthorization,
AutoBeRealizeCollectorFunction,
AutoBeRealizeOperationFunction,
AutoBeRealizeTransformerFunction,
} from "@autobe/interface";
import { AutoBeContext } from "../../context/AutoBeContext";
import { orchestrateRealizeCorrectCasting } from "./correct/orchestrateRealizeCorrectCasting";
import { AutoBeRealizeOperationProgrammer } from "./programmers/AutoBeRealizeOperationProgrammer";
import { IAutoBeRealizeScenarioResult } from "./structures/IAutoBeRealizeScenarioResult";
export const orchestrateRealizeOperationCorrectCasting = async (
ctx: AutoBeContext,
props: {
authorizations: AutoBeRealizeAuthorization[];
collectors: AutoBeRealizeCollectorFunction[];
transformers: AutoBeRealizeTransformerFunction[];
functions: AutoBeRealizeOperationFunction[];
progress: AutoBeProgressEventBase;
},
): Promise<AutoBeRealizeOperationFunction[]> => {
const document: AutoBeOpenApi.IDocument = ctx.state().interface!.document;
return await orchestrateRealizeCorrectCasting(ctx, {
programmer: {
template: (func) =>
AutoBeRealizeOperationProgrammer.writeTemplate({
authorizations: props.authorizations,
schemas: document.components.schemas,
operation: document.operations.find(
(o) =>
o.method === func.endpoint.method &&
o.path === func.endpoint.path,
)!,
collectors: props.collectors,
transformers: props.transformers,
}),
replaceImportStatements: async (next) => {
const scenario: IAutoBeRealizeScenarioResult =
AutoBeRealizeOperationProgrammer.getScenario({
authorizations: props.authorizations,
operation: document.operations.find(
(o) =>
o.method === next.function.endpoint.method &&
o.path === next.function.endpoint.path,
)!,
});
return await AutoBeRealizeOperationProgrammer.replaceImportStatements(
ctx,
{
operation: scenario.operation,
schemas: document.components.schemas,
code: next.code,
payload: scenario.decoratorEvent?.payload.name,
},
);
},
additional: () =>
AutoBeRealizeOperationProgrammer.getAdditional({
authorizations: props.authorizations,
collectors: props.collectors,
transformers: props.transformers,
}),
location: "src/providers",
},
functions: props.functions,
progress: props.progress,
});
};