openapi-typescript
Version:
Convert OpenAPI 3.0 & 3.1 schemas to TypeScript
1 lines • 6.66 kB
Source Map (JSON)
{"version":3,"file":"operation-object.cjs","sources":["../../src/transform/operation-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { NEVER, QUESTION_TOKEN, addJSDocComment, oapiRef, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef } from \"../lib/utils.js\";\nimport type { OperationObject, RequestBodyObject, TransformNodeOptions } from \"../types.js\";\nimport { transformParametersArray } from \"./parameters-array.js\";\nimport transformRequestBodyObject from \"./request-body-object.js\";\nimport transformResponsesObject from \"./responses-object.js\";\n\n/**\n * Transform OperationObject nodes (4.8.10)\n * @see https://spec.openapis.org/oas/v3.1.0#operation-object\n */\nexport default function transformOperationObject(\n operationObject: OperationObject,\n options: TransformNodeOptions,\n): ts.TypeElement[] {\n const type: ts.TypeElement[] = [];\n\n // parameters\n type.push(...transformParametersArray(operationObject.parameters ?? [], options));\n\n // requestBody\n if (operationObject.requestBody) {\n const requestBodyType =\n \"$ref\" in operationObject.requestBody\n ? oapiRef(operationObject.requestBody.$ref)\n : transformRequestBodyObject(operationObject.requestBody, {\n ...options,\n path: createRef([options.path, \"requestBody\"]),\n });\n const required = !!(\n \"$ref\" in operationObject.requestBody\n ? options.ctx.resolve<RequestBodyObject>(operationObject.requestBody.$ref)\n : operationObject.requestBody\n )?.required;\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"requestBody\"),\n /* questionToken */ required ? undefined : QUESTION_TOKEN,\n /* type */ requestBodyType,\n );\n addJSDocComment(operationObject.requestBody, property);\n type.push(property);\n } else {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"requestBody\"),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n );\n }\n\n // responses\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(\"responses\"),\n /* questionToken */ undefined,\n /* type */ transformResponsesObject(operationObject.responses ?? {}, options),\n ),\n );\n\n return type;\n}\n\n/** inject an operation at the top level */\nexport function injectOperationObject(\n operationId: string,\n operationObject: OperationObject,\n options: TransformNodeOptions,\n): void {\n // find or create top-level operations interface\n let operations = options.ctx.injectFooter.find(\n (node) => ts.isInterfaceDeclaration(node) && (node as ts.InterfaceDeclaration).name.text === \"operations\",\n ) as unknown as ts.InterfaceDeclaration;\n if (!operations) {\n operations = ts.factory.createInterfaceDeclaration(\n /* modifiers */ tsModifiers({\n export: true,\n // important: do NOT make this immutable\n }),\n /* name */ ts.factory.createIdentifier(\"operations\"),\n /* typeParameters */ undefined,\n /* heritageClauses */ undefined,\n /* members */ [],\n );\n options.ctx.injectFooter.push(operations);\n }\n\n // inject operation object\n const type = transformOperationObject(operationObject, options);\n // @ts-expect-error this is OK to mutate\n operations.members = ts.factory.createNodeArray([\n ...operations.members,\n ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(operationId),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(type),\n ),\n ]);\n}\n"],"names":["transformParametersArray","oapiRef","transformRequestBodyObject","createRef","ts","tsModifiers","tsPropertyIndex","QUESTION_TOKEN","addJSDocComment","NEVER","transformResponsesObject"],"mappings":";;;;;;;;;;;;;;;AAYwB,SAAA,wBAAA,CACtB,iBACA,OACkB,EAAA;AAClB,EAAA,MAAM,OAAyB,EAAC;AAGhC,EAAK,IAAA,CAAA,IAAA,CAAK,GAAGA,wCAAyB,CAAA,eAAA,CAAgB,cAAc,EAAC,EAAG,OAAO,CAAC,CAAA;AAGhF,EAAA,IAAI,gBAAgB,WAAa,EAAA;AAC/B,IAAM,MAAA,eAAA,GACJ,MAAU,IAAA,eAAA,CAAgB,WACtB,GAAAC,UAAA,CAAQ,eAAgB,CAAA,WAAA,CAAY,IAAI,CAAA,GACxCC,iBAA2B,CAAA,eAAA,CAAgB,WAAa,EAAA;AAAA,MACtD,GAAG,OAAA;AAAA,MACH,MAAMC,eAAU,CAAA,CAAC,OAAQ,CAAA,IAAA,EAAM,aAAa,CAAC;AAAA,KAC9C,CAAA;AACP,IAAA,MAAM,QAAW,GAAA,CAAC,CAChB,CAAA,MAAA,IAAU,gBAAgB,WACtB,GAAA,OAAA,CAAQ,GAAI,CAAA,OAAA,CAA2B,eAAgB,CAAA,WAAA,CAAY,IAAI,CAAA,GACvE,gBAAgB,WACnB,GAAA,QAAA;AACH,IAAM,MAAA,QAAA,GAAWC,YAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,MACNC,eAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAC/CC,mBAAgB,aAAa,CAAA;AAAA;AAAA,MAC7B,WAAW,MAAY,GAAAC,iBAAA;AAAA;AAAA,MACvB;AAAA,KACtB;AACA,IAAgBC,kBAAA,CAAA,eAAA,CAAgB,aAAa,QAAQ,CAAA;AACrD,IAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAAA,GACb,MAAA;AACL,IAAK,IAAA,CAAA,IAAA;AAAA,MACHJ,YAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,QACWC,eAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,QAC/CC,mBAAgB,aAAa,CAAA;AAAA;AAAA,QAC7BC,iBAAA;AAAA;AAAA,QACAE;AAAA;AACtB,KACF;AAAA;AAIF,EAAK,IAAA,CAAA,IAAA;AAAA,IACHL,YAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,MACWC,eAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAC/CC,mBAAgB,WAAW,CAAA;AAAA;AAAA,MAC3B,MAAA;AAAA;AAAA,MACAI,eAAyB,CAAA,eAAA,CAAgB,SAAa,IAAA,IAAI,OAAO;AAAA;AACvF,GACF;AAEA,EAAO,OAAA,IAAA;AACT;AAGgB,SAAA,qBAAA,CACd,WACA,EAAA,eAAA,EACA,OACM,EAAA;AAEN,EAAI,IAAA,UAAA,GAAa,OAAQ,CAAA,GAAA,CAAI,YAAa,CAAA,IAAA;AAAA,IACxC,CAAC,SAASN,WAAG,CAAA,sBAAA,CAAuB,IAAI,CAAM,IAAA,IAAA,CAAiC,KAAK,IAAS,KAAA;AAAA,GAC/F;AACA,EAAA,IAAI,CAAC,UAAY,EAAA;AACf,IAAA,UAAA,GAAaA,YAAG,OAAQ,CAAA,0BAAA;AAAA;AAAA,MACAC,cAAY,CAAA;AAAA,QAChC,MAAQ,EAAA;AAAA;AAAA,OAET,CAAA;AAAA;AAAA,MACqBD,WAAA,CAAG,OAAQ,CAAA,gBAAA,CAAiB,YAAY,CAAA;AAAA;AAAA,MACxC,MAAA;AAAA;AAAA,MACA,MAAA;AAAA;AAAA,MACA;AAAC,KACzB;AACA,IAAQ,OAAA,CAAA,GAAA,CAAI,YAAa,CAAA,IAAA,CAAK,UAAU,CAAA;AAAA;AAI1C,EAAM,MAAA,IAAA,GAAO,wBAAyB,CAAA,eAAA,EAAiB,OAAO,CAAA;AAE9D,EAAW,UAAA,CAAA,OAAA,GAAUA,WAAG,CAAA,OAAA,CAAQ,eAAgB,CAAA;AAAA,IAC9C,GAAG,UAAW,CAAA,OAAA;AAAA,IACdA,YAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,MACWC,eAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAC/CC,mBAAgB,WAAW,CAAA;AAAA;AAAA,MAC3B,MAAA;AAAA;AAAA,MACAF,WAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,IAAI;AAAA;AAC3D,GACD,CAAA;AACH;;;;;"}