UNPKG

@autobe/agent

Version:

AI backend server code generator

140 lines 6.66 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()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AutoBeTestGenerateProgrammer = void 0; const utils_1 = require("@autobe/utils"); const utils_2 = require("@typia/utils"); const path_1 = __importDefault(require("path")); const validateEmptyCode_1 = require("../../../utils/validateEmptyCode"); const AutoBeTestFunctionProgrammer_1 = require("./AutoBeTestFunctionProgrammer"); const AutoBeTestPrepareProgrammer_1 = require("./AutoBeTestPrepareProgrammer"); var AutoBeTestGenerateProgrammer; (function (AutoBeTestGenerateProgrammer) { /* ---------------------------------------------------------------- GETTERS ---------------------------------------------------------------- */ function is(document, operation) { if (operation.requestBody === null) return false; const schema = document.components.schemas[operation.requestBody.typeName]; if (schema === undefined) return false; return AutoBeTestPrepareProgrammer_1.AutoBeTestPrepareProgrammer.is(operation.requestBody.typeName, schema); } AutoBeTestGenerateProgrammer.is = is; function size(document) { return document.operations.filter((operation) => AutoBeTestGenerateProgrammer.is(document, operation)).length; } AutoBeTestGenerateProgrammer.size = size; function getFunctionName(operation) { const accessor = operation.accessor.map(utils_2.NamingConvention.snake); return `generate_random_${accessor.join("_")}`; } AutoBeTestGenerateProgrammer.getFunctionName = getFunctionName; /* ---------------------------------------------------------------- WRITERS ---------------------------------------------------------------- */ function writeTemplateCode(props) { var _a, _b, _c, _d; const functionName = getFunctionName(props.operation); const input = (_b = (_a = props.operation.requestBody) === null || _a === void 0 ? void 0 : _a.typeName) !== null && _b !== void 0 ? _b : "unknown"; const output = (_d = (_c = props.operation.responseBody) === null || _c === void 0 ? void 0 : _c.typeName) !== null && _d !== void 0 ? _d : "void"; return utils_1.StringUtil.trim ` export async function ${functionName}( connection: api.IConnection, props: { body?: DeepPartial<${input}> | undefined; ${writeParameterDeclarations(props.operation)} } ): Promise<${output}> { const prepared: ${input} = ${props.prepare.name}( props.body ); return await api.functional.${props.operation.accessor.join(".")}( connection, { body: prepared, ${writeParameterArguments(props.operation)} }, ); } `; } AutoBeTestGenerateProgrammer.writeTemplateCode = writeTemplateCode; function writeParameterDeclarations(operation) { if (operation.parameters.length === 0) return ""; return utils_1.StringUtil.trim ` params: { ${operation.parameters.map((p) => ` ${p.name}: ${p.schema.type};`).join("\n")} }; ` .split("\n") .filter((line) => line.length !== 0) .map((line) => ` ${line.trim()}`) .join("\n"); } function writeParameterArguments(operation) { if (operation.parameters.length === 0) return ""; return operation.parameters .map((p) => ` ${p.name}: props.params.${p.name},`) .join("\n"); } /* ---------------------------------------------------------------- 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, [props.procedure.prepare.location]: props.procedure.prepare.content, }, progress: props.progress, step: props.step, }); } AutoBeTestGenerateProgrammer.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), `import { ${props.prepare.name} } from "${path_1.default .relative(path_1.default.dirname(props.location), props.prepare.location.replace(".ts", "")) .replaceAll(path_1.default.sep, "/")}";`, ]; code = [...imports, code].join("\n"); return yield props.compiler.typescript.beautify(code); }); } AutoBeTestGenerateProgrammer.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, }); } AutoBeTestGenerateProgrammer.validate = validate; })(AutoBeTestGenerateProgrammer || (exports.AutoBeTestGenerateProgrammer = AutoBeTestGenerateProgrammer = {})); //# sourceMappingURL=AutoBeTestGenerateProgrammer.js.map