@autobe/agent
Version:
AI backend server code generator
124 lines • 5.73 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());
});
};
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