UNPKG

@autobe/agent

Version:

AI backend server code generator

124 lines 5.73 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AutoBeTestAuthorizeProgrammer = void 0; const utils_1 = require("@autobe/utils"); const utils_2 = require("@typia/utils"); const validateEmptyCode_1 = require("../../../utils/validateEmptyCode"); const AutoBeTestFunctionProgrammer_1 = require("./AutoBeTestFunctionProgrammer"); var AutoBeTestAuthorizeProgrammer; (function (AutoBeTestAuthorizeProgrammer) { /* ---------------------------------------------------------------- GETTERS ---------------------------------------------------------------- */ function size(document) { return document.operations.filter((op) => op.authorizationType !== null) .length; } AutoBeTestAuthorizeProgrammer.size = size; function getFunctionName(operation) { if (operation.authorizationActor === null || operation.authorizationType === null) throw new Error("Operation is not an authorization operation."); const elements = [ "authorize", operation.authorizationActor, operation.authorizationType, ]; return elements.map(utils_2.NamingConvention.snake).join("_"); } AutoBeTestAuthorizeProgrammer.getFunctionName = getFunctionName; /* ---------------------------------------------------------------- WRITERS ---------------------------------------------------------------- */ function writeTemplate(props) { if (props.operation.requestBody === null) throw new Error("Authorization operation needs request body."); else if (props.operation.responseBody === null) throw new Error("Authorization operation needs response body."); const functionName = getFunctionName(props.operation); const accessor = props.operation.accessor; if (props.operation.authorizationActor !== "join") return utils_1.StringUtil.trim ` export async function ${functionName}( connection: api.IConnection, props: { body: ${props.operation.requestBody.typeName} }, ): Promise<${props.operation.responseBody.typeName}> { return await api.functional.${accessor.join(".")}( connection, { body: props.body, }, ); } `; return utils_1.StringUtil.trim ` export async function ${functionName}( connection: api.IConnection, props: { body?: ${props.operation.requestBody.typeName} }, ): Promise<${props.operation.responseBody.typeName}> { const joinInput = { ${Object.keys(props.schema.properties).map((k) => ` ${utils_2.NamingConvention.variable(k) ? k : `[${JSON.stringify(k)}]`}: ...,`)} } satisfies ${props.operation.requestBody.typeName}; return await api.functional.${accessor.join(".")}( connection, { body: joinInput, }, ); } `; } AutoBeTestAuthorizeProgrammer.writeTemplate = writeTemplate; /* ---------------------------------------------------------------- COMPILERS ---------------------------------------------------------------- */ function compile(props) { return AutoBeTestFunctionProgrammer_1.AutoBeTestFunctionProgrammer.compile({ compiler: props.compiler, document: props.procedure.artifacts.document, function: props.procedure.function, files: { [props.procedure.function.location]: props.procedure.function.content, }, progress: props.progress, step: props.step, }); } AutoBeTestAuthorizeProgrammer.compile = compile; function replaceImportStatements(props) { return __awaiter(this, void 0, void 0, function* () { let code = yield props.compiler.typescript.removeImportStatements(props.content); const imports = AutoBeTestFunctionProgrammer_1.AutoBeTestFunctionProgrammer.writeImportStatements(props.artifacts.document.components.schemas); code = [...imports, code].join("\n"); return yield props.compiler.typescript.beautify(code); }); } AutoBeTestAuthorizeProgrammer.replaceImportStatements = replaceImportStatements; /* ---------------------------------------------------------------- VALIDATE ---------------------------------------------------------------- */ function validate(props) { return (0, validateEmptyCode_1.validateEmptyCode)({ path: "$input", asynchronous: true, name: props.procedure.function.name, draft: props.draft, revise: props.revise, }); } AutoBeTestAuthorizeProgrammer.validate = validate; })(AutoBeTestAuthorizeProgrammer || (exports.AutoBeTestAuthorizeProgrammer = AutoBeTestAuthorizeProgrammer = {})); //# sourceMappingURL=AutoBeTestAuthorizeProgrammer.js.map