@nestia/sdk
Version:
Nestia SDK and Swagger generator
121 lines • 8.89 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SdkHttpSimulationProgrammer = void 0;
const factory_1 = require("@ttsc/factory");
const ExpressionFactory_1 = require("../../factories/ExpressionFactory");
const IdentifierFactory_1 = require("../../factories/IdentifierFactory");
const LiteralFactory_1 = require("../../factories/LiteralFactory");
const StatementFactory_1 = require("../../factories/StatementFactory");
const TypeFactory_1 = require("../../factories/TypeFactory");
const legacy_1 = require("../../internal/legacy");
const SdkAliasCollection_1 = require("./SdkAliasCollection");
const SdkHttpParameterProgrammer_1 = require("./SdkHttpParameterProgrammer");
const SdkImportWizard_1 = require("./SdkImportWizard");
var SdkHttpSimulationProgrammer;
(function (SdkHttpSimulationProgrammer) {
SdkHttpSimulationProgrammer.random = (project) => (importer) => (route) => {
const output = SdkAliasCollection_1.SdkAliasCollection.responseBody(project)(importer)(route);
return constant("random")(factory_1.factory.createArrowFunction(undefined, undefined, [], project.config.primitive === false || route.success.binary === true
? output
: factory_1.factory.createTypeReferenceNode(SdkImportWizard_1.SdkImportWizard.Resolved(importer), [output]), undefined, route.success.binary === true
? factory_1.factory.createNewExpression(factory_1.factory.createIdentifier("ReadableStream"), [SdkAliasCollection_1.SdkAliasCollection.binaryChunk()], [])
: factory_1.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(factory_1.factory.createIdentifier(SdkImportWizard_1.SdkImportWizard.typia(importer)), "random"), [output], undefined)));
};
SdkHttpSimulationProgrammer.simulate = (project) => (importer) => (route) => {
var _a;
const output = project.config.propagate === true ||
route.success.binary === true ||
(0, legacy_1.sizeOf)(route.success.metadata) !== 0;
const caller = () => factory_1.factory.createCallExpression(factory_1.factory.createIdentifier("random"), undefined, undefined);
return constant("simulate")(factory_1.factory.createArrowFunction(undefined, undefined, [
IdentifierFactory_1.IdentifierFactory.parameter(SdkHttpParameterProgrammer_1.SdkHttpParameterProgrammer.getSignificant(route, true).length !==
0
? "connection"
: "_connection", factory_1.factory.createTypeReferenceNode(SdkImportWizard_1.SdkImportWizard.IConnection(importer), route.headerObject
? [factory_1.factory.createTypeReferenceNode(`${route.name}.Headers`)]
: [])),
...SdkHttpParameterProgrammer_1.SdkHttpParameterProgrammer.getParameterDeclarations({
project,
importer,
route,
body: true,
prefix: false,
}),
], factory_1.factory.createTypeReferenceNode(output ? "Output" : "void"), undefined, factory_1.factory.createBlock([
...assert(project)(importer)(route),
factory_1.factory.createReturnStatement(project.config.propagate
? factory_1.factory.createAsExpression(factory_1.factory.createObjectLiteralExpression([
factory_1.factory.createPropertyAssignment("success", factory_1.factory.createTrue()),
factory_1.factory.createPropertyAssignment("status", ExpressionFactory_1.ExpressionFactory.number((_a = route.success.status) !== null && _a !== void 0 ? _a : (route.method === "POST" ? 201 : 200))),
factory_1.factory.createPropertyAssignment("headers", LiteralFactory_1.LiteralFactory.write({
"Content-Type": route.success.contentType,
})),
factory_1.factory.createPropertyAssignment("data", caller()),
], true), factory_1.factory.createTypeReferenceNode("Output"))
: caller()),
], true)));
};
const assert = (project) => (importer) => (route) => {
const parameters = SdkHttpParameterProgrammer_1.SdkHttpParameterProgrammer.getSignificant(route, true);
if (parameters.length === 0)
return [];
const typia = SdkImportWizard_1.SdkImportWizard.typia(importer);
const validator = StatementFactory_1.StatementFactory.constant({
name: "assert",
value: factory_1.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(factory_1.factory.createIdentifier(importer.external({
file: `@nestia/fetcher`,
declaration: false,
type: "element",
name: "NestiaSimulator",
})), "assert"), undefined, [
factory_1.factory.createObjectLiteralExpression([
factory_1.factory.createPropertyAssignment("method", factory_1.factory.createIdentifier("METADATA.method")),
factory_1.factory.createPropertyAssignment("host", factory_1.factory.createIdentifier("connection.host")),
factory_1.factory.createPropertyAssignment("path", factory_1.factory.createCallExpression(factory_1.factory.createIdentifier("path"), undefined, SdkHttpParameterProgrammer_1.SdkHttpParameterProgrammer.getArguments({
project,
route,
body: false,
}))),
factory_1.factory.createPropertyAssignment("contentType", factory_1.factory.createIdentifier(JSON.stringify(route.success.contentType))),
], true),
]),
});
const individual = parameters
.map((p) => factory_1.factory.createCallExpression((() => {
const base = IdentifierFactory_1.IdentifierFactory.access(factory_1.factory.createIdentifier("assert"), p.category);
if (p.category !== "param")
return base;
return factory_1.factory.createCallExpression(base, undefined, [
factory_1.factory.createStringLiteral(p.name),
]);
})(), undefined, [
factory_1.factory.createArrowFunction(undefined, undefined, [], undefined, undefined, factory_1.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(factory_1.factory.createIdentifier(typia), "assert"), undefined, [
project.config.keyword === true
? factory_1.factory.createIdentifier(`props.${p.name}`)
: factory_1.factory.createIdentifier(p.name),
])),
]))
.map(factory_1.factory.createExpressionStatement);
return [
validator,
...(project.config.propagate !== true
? individual
: [tryAndCatch(importer)(individual)]),
];
};
const tryAndCatch = (importer) => (individual) => factory_1.factory.createTryStatement(factory_1.factory.createBlock(individual, true), factory_1.factory.createCatchClause("exp", factory_1.factory.createBlock([
factory_1.factory.createIfStatement(factory_1.factory.createLogicalNot(factory_1.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(factory_1.factory.createIdentifier(SdkImportWizard_1.SdkImportWizard.typia(importer)), "is"), [
factory_1.factory.createTypeReferenceNode(SdkImportWizard_1.SdkImportWizard.HttpError(importer)),
], [factory_1.factory.createIdentifier("exp")])), factory_1.factory.createThrowStatement(factory_1.factory.createIdentifier("exp"))),
factory_1.factory.createReturnStatement(factory_1.factory.createAsExpression(factory_1.factory.createObjectLiteralExpression([
factory_1.factory.createPropertyAssignment("success", factory_1.factory.createFalse()),
factory_1.factory.createPropertyAssignment("status", factory_1.factory.createIdentifier("exp.status")),
factory_1.factory.createPropertyAssignment("headers", factory_1.factory.createIdentifier("exp.headers")),
factory_1.factory.createPropertyAssignment("data", factory_1.factory.createIdentifier("exp.toJSON().message")),
], true), TypeFactory_1.TypeFactory.keyword("any"))),
], true)), undefined);
})(SdkHttpSimulationProgrammer || (exports.SdkHttpSimulationProgrammer = SdkHttpSimulationProgrammer = {}));
const constant = (name) => (expression) => factory_1.factory.createVariableStatement([factory_1.factory.createModifier(factory_1.SyntaxKind.ExportKeyword)], factory_1.factory.createVariableDeclarationList([
factory_1.factory.createVariableDeclaration(factory_1.factory.createIdentifier(name), undefined, undefined, expression),
], factory_1.NodeFlags.Const));
//# sourceMappingURL=SdkHttpSimulationProgrammer.js.map