@nestia/sdk
Version:
Nestia SDK and Swagger generator
120 lines • 10.9 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SdkHttpSimulationProgrammer = void 0;
const typescript_1 = __importDefault(require("typescript"));
const ExpressionFactory_1 = require("typia/lib/factories/ExpressionFactory");
const IdentifierFactory_1 = require("typia/lib/factories/IdentifierFactory");
const LiteralFactory_1 = require("typia/lib/factories/LiteralFactory");
const StatementFactory_1 = require("typia/lib/factories/StatementFactory");
const TypeFactory_1 = require("typia/lib/factories/TypeFactory");
const SdkAliasCollection_1 = require("./SdkAliasCollection");
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")(typescript_1.default.factory.createArrowFunction(undefined, undefined, [
typescript_1.default.factory.createParameterDeclaration(undefined, undefined, "g", typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken), typescript_1.default.factory.createTypeReferenceNode(typescript_1.default.factory.createIdentifier("Partial"), [
typescript_1.default.factory.createTypeReferenceNode(`${SdkImportWizard_1.SdkImportWizard.typia(importer)}.IRandomGenerator`),
])),
], project.config.primitive === false
? output
: typescript_1.default.factory.createTypeReferenceNode(SdkImportWizard_1.SdkImportWizard.Resolved(importer), [output]), undefined, typescript_1.default.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(typescript_1.default.factory.createIdentifier(SdkImportWizard_1.SdkImportWizard.typia(importer)), "random"), [output], [typescript_1.default.factory.createIdentifier("g")])));
};
SdkHttpSimulationProgrammer.simulate = (project) => (importer) => (route, props) => {
var _a;
const output = project.config.propagate === true ||
route.success.metadata.size() !== 0;
const caller = () => typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("random"), undefined, [
typescript_1.default.factory.createConditionalExpression(typescript_1.default.factory.createLogicalAnd(typescript_1.default.factory.createStrictEquality(typescript_1.default.factory.createStringLiteral("object"), typescript_1.default.factory.createTypeOfExpression(typescript_1.default.factory.createIdentifier("connection.simulate"))), typescript_1.default.factory.createStrictInequality(typescript_1.default.factory.createNull(), typescript_1.default.factory.createIdentifier("connection.simulate"))), undefined, typescript_1.default.factory.createIdentifier("connection.simulate"), undefined, typescript_1.default.factory.createIdentifier("undefined")),
]);
return constant("simulate")(typescript_1.default.factory.createArrowFunction(undefined, undefined, [
IdentifierFactory_1.IdentifierFactory.parameter("connection", typescript_1.default.factory.createTypeReferenceNode(SdkImportWizard_1.SdkImportWizard.IConnection(importer), route.parameters.some((p) => p.category === "headers" && p.field === null)
? [
typescript_1.default.factory.createTypeReferenceNode(`${route.name}.Headers`),
]
: [])),
...route.parameters
.filter((p) => p.category !== "headers")
.map((p) => typescript_1.default.factory.createParameterDeclaration([], undefined, p.name, p.metadata.optional
? typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken)
: undefined, project.config.primitive !== false &&
(p === props.query || p === props.input)
? typescript_1.default.factory.createTypeReferenceNode(`${route.name}.${p === props.query ? "Query" : "Input"}`)
: project.config.clone === true
? SdkAliasCollection_1.SdkAliasCollection.from(project)(importer)(p.metadata)
: SdkAliasCollection_1.SdkAliasCollection.name(p))),
], typescript_1.default.factory.createTypeReferenceNode(output ? "Output" : "void"), undefined, typescript_1.default.factory.createBlock([
...assert(project)(importer)(route),
typescript_1.default.factory.createReturnStatement(project.config.propagate
? typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createObjectLiteralExpression([
typescript_1.default.factory.createPropertyAssignment("success", typescript_1.default.factory.createTrue()),
typescript_1.default.factory.createPropertyAssignment("status", ExpressionFactory_1.ExpressionFactory.number((_a = route.success.status) !== null && _a !== void 0 ? _a : (route.method === "POST" ? 201 : 200))),
typescript_1.default.factory.createPropertyAssignment("headers", LiteralFactory_1.LiteralFactory.write({
"Content-Type": route.success.contentType,
})),
typescript_1.default.factory.createPropertyAssignment("data", caller()),
], true), typescript_1.default.factory.createTypeReferenceNode("Output"))
: caller()),
], true)));
};
const assert = (project) => (importer) => (route) => {
const parameters = route.parameters.filter((p) => p.category !== "headers");
if (parameters.length === 0)
return [];
const typia = SdkImportWizard_1.SdkImportWizard.typia(importer);
const validator = StatementFactory_1.StatementFactory.constant({
name: "assert",
value: typescript_1.default.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(typescript_1.default.factory.createIdentifier(importer.external({
type: false,
library: `@nestia/fetcher/lib/NestiaSimulator`,
instance: "NestiaSimulator",
})), "assert"), undefined, [
typescript_1.default.factory.createObjectLiteralExpression([
typescript_1.default.factory.createPropertyAssignment("method", typescript_1.default.factory.createIdentifier("METADATA.method")),
typescript_1.default.factory.createPropertyAssignment("host", typescript_1.default.factory.createIdentifier("connection.host")),
typescript_1.default.factory.createPropertyAssignment("path", typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("path"), undefined, route.parameters
.filter((p) => p.category === "param" || p.category === "query")
.map((p) => typescript_1.default.factory.createIdentifier(p.name)))),
typescript_1.default.factory.createPropertyAssignment("contentType", typescript_1.default.factory.createIdentifier(JSON.stringify(route.success.contentType))),
], true),
]),
});
const individual = parameters
.map((p) => typescript_1.default.factory.createCallExpression((() => {
const base = IdentifierFactory_1.IdentifierFactory.access(typescript_1.default.factory.createIdentifier("assert"), p.category);
if (p.category !== "param")
return base;
return typescript_1.default.factory.createCallExpression(base, undefined, [
typescript_1.default.factory.createStringLiteral(p.name),
]);
})(), undefined, [
typescript_1.default.factory.createArrowFunction(undefined, undefined, [], undefined, undefined, typescript_1.default.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(typescript_1.default.factory.createIdentifier(typia), "assert"), undefined, [typescript_1.default.factory.createIdentifier(p.name)])),
]))
.map(typescript_1.default.factory.createExpressionStatement);
return [
validator,
...(project.config.propagate !== true
? individual
: [tryAndCatch(importer)(individual)]),
];
};
const tryAndCatch = (importer) => (individual) => typescript_1.default.factory.createTryStatement(typescript_1.default.factory.createBlock(individual, true), typescript_1.default.factory.createCatchClause("exp", typescript_1.default.factory.createBlock([
typescript_1.default.factory.createIfStatement(typescript_1.default.factory.createLogicalNot(typescript_1.default.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(typescript_1.default.factory.createIdentifier(SdkImportWizard_1.SdkImportWizard.typia(importer)), "is"), [
typescript_1.default.factory.createTypeReferenceNode(SdkImportWizard_1.SdkImportWizard.HttpError(importer)),
], [typescript_1.default.factory.createIdentifier("exp")])), typescript_1.default.factory.createThrowStatement(typescript_1.default.factory.createIdentifier("exp"))),
typescript_1.default.factory.createReturnStatement(typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createObjectLiteralExpression([
typescript_1.default.factory.createPropertyAssignment("success", typescript_1.default.factory.createFalse()),
typescript_1.default.factory.createPropertyAssignment("status", typescript_1.default.factory.createIdentifier("exp.status")),
typescript_1.default.factory.createPropertyAssignment("headers", typescript_1.default.factory.createIdentifier("exp.headers")),
typescript_1.default.factory.createPropertyAssignment("data", typescript_1.default.factory.createIdentifier("exp.toJSON().message")),
], true), TypeFactory_1.TypeFactory.keyword("any"))),
], true)), undefined);
})(SdkHttpSimulationProgrammer || (exports.SdkHttpSimulationProgrammer = SdkHttpSimulationProgrammer = {}));
const constant = (name) => (expression) => typescript_1.default.factory.createVariableStatement([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createVariableDeclarationList([
typescript_1.default.factory.createVariableDeclaration(typescript_1.default.factory.createIdentifier(name), undefined, undefined, expression),
], typescript_1.default.NodeFlags.Const));
//# sourceMappingURL=SdkHttpSimulationProgrammer.js.map
;