UNPKG

@nestia/sdk

Version:

Nestia SDK and Swagger generator

121 lines 8.89 kB
"use strict"; 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