@autobe/agent
Version:
AI backend server code generator
140 lines • 6.66 kB
JavaScript
;
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