@autobe/agent
Version:
AI backend server code generator
91 lines • 3.96 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.getTestArtifacts = getTestArtifacts;
exports.getTestScenarioArtifacts = getTestScenarioArtifacts;
const utils_1 = require("@typia/utils");
function getTestArtifacts(ctx, props) {
return __awaiter(this, void 0, void 0, function* () {
var _a;
const compiler = yield ctx.compiler();
const document = filterDocument(ctx.state().interface.document, {
endpoint: props.endpoint,
dependencies: (_a = props.dependencies) !== null && _a !== void 0 ? _a : [],
});
const entries = Object.entries(yield compiler.interface.write(document, []));
const filter = (prefix, exclude) => {
const result = entries.filter(([key]) => key.startsWith(prefix) === true);
return Object.fromEntries(exclude
? result.filter(([key]) => key.startsWith(exclude) === false)
: result);
};
return {
document,
sdk: filter("src/api", "src/api/structures"),
dto: filter("src/api/structures"),
e2e: filter("test/features"),
};
});
}
function getTestScenarioArtifacts(ctx, scenario) {
return __awaiter(this, void 0, void 0, function* () {
const compiler = yield ctx.compiler();
const document = filterDocument(ctx.state().interface.document, {
endpoint: scenario.endpoint,
dependencies: scenario.dependencies.map((dp) => dp.endpoint),
});
const entries = Object.entries(yield compiler.interface.write(document, []));
const filter = (prefix, exclude) => {
const result = entries.filter(([key]) => key.startsWith(prefix) === true);
return Object.fromEntries(exclude
? result.filter(([key]) => key.startsWith(exclude) === false)
: result);
};
return {
document,
sdk: filter("src/api", "src/api/structures"),
dto: filter("src/api/structures"),
e2e: filter("test/features"),
};
});
}
function filterDocument(document, props) {
const operations = document.operations.filter((op) => (props.endpoint.method === op.method &&
props.endpoint.path === op.path) ||
props.dependencies.some((dp) => dp.method === op.method && dp.path === op.path));
const components = {
authorizations: document.components.authorizations,
schemas: {},
};
const visit = (typeName) => {
utils_1.OpenApiTypeChecker.visit({
components: document.components,
schema: { $ref: `#/components/schemas/${typeName}` },
closure: (s) => {
if (utils_1.OpenApiTypeChecker.isReference(s)) {
const key = s.$ref.split("/").pop();
components.schemas[key] = document.components.schemas[key];
}
},
});
};
for (const op of operations) {
if (op.requestBody)
visit(op.requestBody.typeName);
if (op.responseBody)
visit(op.responseBody.typeName);
}
return {
operations,
components,
};
}
//# sourceMappingURL=getTestArtifacts.js.map