UNPKG

openapi-typescript

Version:

Convert OpenAPI 3.0 & 3.1 schemas to TypeScript

106 lines (99 loc) 3.67 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); const ts$1 = require('typescript'); const ts = require('../lib/ts.cjs'); const utils = require('../lib/utils.cjs'); const parametersArray = require('./parameters-array.cjs'); const requestBodyObject = require('./request-body-object.cjs'); const responsesObject = require('./responses-object.cjs'); function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; } const ts__default = /*#__PURE__*/_interopDefaultCompat(ts$1); function transformOperationObject(operationObject, options) { const type = []; type.push(...parametersArray.transformParametersArray(operationObject.parameters ?? [], options)); if (operationObject.requestBody) { const requestBodyType = "$ref" in operationObject.requestBody ? ts.oapiRef(operationObject.requestBody.$ref) : requestBodyObject(operationObject.requestBody, { ...options, path: utils.createRef([options.path, "requestBody"]) }); const required = !!("$ref" in operationObject.requestBody ? options.ctx.resolve(operationObject.requestBody.$ref) : operationObject.requestBody)?.required; const property = ts__default.factory.createPropertySignature( /* modifiers */ ts.tsModifiers({ readonly: options.ctx.immutable }), /* name */ ts.tsPropertyIndex("requestBody"), /* questionToken */ required ? void 0 : ts.QUESTION_TOKEN, /* type */ requestBodyType ); ts.addJSDocComment(operationObject.requestBody, property); type.push(property); } else { type.push( ts__default.factory.createPropertySignature( /* modifiers */ ts.tsModifiers({ readonly: options.ctx.immutable }), /* name */ ts.tsPropertyIndex("requestBody"), /* questionToken */ ts.QUESTION_TOKEN, /* type */ ts.NEVER ) ); } type.push( ts__default.factory.createPropertySignature( /* modifiers */ ts.tsModifiers({ readonly: options.ctx.immutable }), /* name */ ts.tsPropertyIndex("responses"), /* questionToken */ void 0, /* type */ responsesObject(operationObject.responses ?? {}, options) ) ); return type; } function injectOperationObject(operationId, operationObject, options) { let operations = options.ctx.injectFooter.find( (node) => ts__default.isInterfaceDeclaration(node) && node.name.text === "operations" ); if (!operations) { operations = ts__default.factory.createInterfaceDeclaration( /* modifiers */ ts.tsModifiers({ export: true // important: do NOT make this immutable }), /* name */ ts__default.factory.createIdentifier("operations"), /* typeParameters */ void 0, /* heritageClauses */ void 0, /* members */ [] ); options.ctx.injectFooter.push(operations); } const type = transformOperationObject(operationObject, options); operations.members = ts__default.factory.createNodeArray([ ...operations.members, ts__default.factory.createPropertySignature( /* modifiers */ ts.tsModifiers({ readonly: options.ctx.immutable }), /* name */ ts.tsPropertyIndex(operationId), /* questionToken */ void 0, /* type */ ts__default.factory.createTypeLiteralNode(type) ) ]); } exports.default = transformOperationObject; exports.injectOperationObject = injectOperationObject; //# sourceMappingURL=operation-object.cjs.map