UNPKG

openapi-typescript

Version:

Convert OpenAPI 3.0 & 3.1 schemas to TypeScript

1 lines 6.39 kB
{"version":3,"file":"response-object.mjs","sources":["../../src/transform/response-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport {\n NEVER,\n QUESTION_TOKEN,\n STRING,\n UNKNOWN,\n addJSDocComment,\n oapiRef,\n tsModifiers,\n tsPropertyIndex,\n} from \"../lib/ts.js\";\nimport { createRef, getEntries } from \"../lib/utils.js\";\nimport type { ResponseObject, TransformNodeOptions } from \"../types.js\";\nimport transformHeaderObject from \"./header-object.js\";\nimport transformMediaTypeObject from \"./media-type-object.js\";\n\n/**\n * Transform ResponseObject nodes (4.8.17)\n * @see https://spec.openapis.org/oas/v3.1.0#response-object\n */\nexport default function transformResponseObject(\n responseObject: ResponseObject,\n options: TransformNodeOptions,\n): ts.TypeNode {\n const type: ts.TypeElement[] = [];\n\n // headers\n const headersObject: ts.TypeElement[] = [];\n if (responseObject.headers) {\n for (const [name, headerObject] of getEntries(responseObject.headers, options.ctx)) {\n const optional = \"$ref\" in headerObject || headerObject.required ? undefined : QUESTION_TOKEN;\n const subType =\n \"$ref\" in headerObject\n ? oapiRef(headerObject.$ref)\n : transformHeaderObject(headerObject, {\n ...options,\n path: createRef([options.path, \"headers\", name]),\n });\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(name),\n /* questionToken */ optional,\n /* type */ subType,\n );\n addJSDocComment(headerObject, property);\n headersObject.push(property);\n }\n }\n // allow additional unknown headers\n headersObject.push(\n ts.factory.createIndexSignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* parameters */ [\n ts.factory.createParameterDeclaration(\n /* modifiers */ undefined,\n /* dotDotDotToken */ undefined,\n /* name */ ts.factory.createIdentifier(\"name\"),\n /* questionToken */ undefined,\n /* type */ STRING,\n ),\n ],\n /* type */ UNKNOWN,\n ),\n );\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"headers\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(headersObject),\n ),\n );\n\n // content\n const contentObject: ts.TypeElement[] = [];\n if (responseObject.content) {\n for (const [contentType, mediaTypeObject] of getEntries(responseObject.content ?? {}, options.ctx)) {\n const property = ts.factory.createPropertySignature(\n /* modifiers */ tsModifiers({ readonly: options.ctx.immutable }),\n /* name */ tsPropertyIndex(contentType),\n /* questionToken */ undefined,\n /* type */ transformMediaTypeObject(mediaTypeObject, {\n ...options,\n path: createRef([options.path, \"content\", contentType]),\n }),\n );\n addJSDocComment(mediaTypeObject, property);\n contentObject.push(property);\n }\n }\n if (contentObject.length) {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"content\"),\n /* questionToken */ undefined,\n /* type */ ts.factory.createTypeLiteralNode(contentObject),\n ),\n );\n } else {\n type.push(\n ts.factory.createPropertySignature(\n /* modifiers */ undefined,\n /* name */ tsPropertyIndex(\"content\"),\n /* questionToken */ QUESTION_TOKEN,\n /* type */ NEVER,\n ),\n );\n }\n\n return ts.factory.createTypeLiteralNode(type);\n}\n"],"names":[],"mappings":";;;;;;AAoBwB,SAAA,uBAAA,CACtB,gBACA,OACa,EAAA;AACb,EAAA,MAAM,OAAyB,EAAC;AAGhC,EAAA,MAAM,gBAAkC,EAAC;AACzC,EAAA,IAAI,eAAe,OAAS,EAAA;AAC1B,IAAW,KAAA,MAAA,CAAC,MAAM,YAAY,CAAA,IAAK,WAAW,cAAe,CAAA,OAAA,EAAS,OAAQ,CAAA,GAAG,CAAG,EAAA;AAClF,MAAA,MAAM,QAAW,GAAA,MAAA,IAAU,YAAgB,IAAA,YAAA,CAAa,WAAW,MAAY,GAAA,cAAA;AAC/E,MAAM,MAAA,OAAA,GACJ,UAAU,YACN,GAAA,OAAA,CAAQ,aAAa,IAAI,CAAA,GACzB,sBAAsB,YAAc,EAAA;AAAA,QAClC,GAAG,OAAA;AAAA,QACH,MAAM,SAAU,CAAA,CAAC,QAAQ,IAAM,EAAA,SAAA,EAAW,IAAI,CAAC;AAAA,OAChD,CAAA;AACP,MAAM,MAAA,QAAA,GAAW,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,QACN,YAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,QAC/C,gBAAgB,IAAI,CAAA;AAAA;AAAA,QACpB,QAAA;AAAA;AAAA,QACA;AAAA,OACtB;AACA,MAAA,eAAA,CAAgB,cAAc,QAAQ,CAAA;AACtC,MAAA,aAAA,CAAc,KAAK,QAAQ,CAAA;AAAA;AAC7B;AAGF,EAAc,aAAA,CAAA,IAAA;AAAA,IACZ,GAAG,OAAQ,CAAA,oBAAA;AAAA;AAAA,MACW,YAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,MAClD;AAAA,QACf,GAAG,OAAQ,CAAA,0BAAA;AAAA;AAAA,UACY,MAAA;AAAA;AAAA,UACA,MAAA;AAAA;AAAA,UACA,EAAA,CAAG,OAAQ,CAAA,gBAAA,CAAiB,MAAM,CAAA;AAAA;AAAA,UAClC,MAAA;AAAA;AAAA,UACA;AAAA;AACvB,OACF;AAAA;AAAA,MACoB;AAAA;AACtB,GACF;AACA,EAAK,IAAA,CAAA,IAAA;AAAA,IACH,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,MACW,MAAA;AAAA;AAAA,MACA,gBAAgB,SAAS,CAAA;AAAA;AAAA,MACzB,MAAA;AAAA;AAAA,MACA,EAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,aAAa;AAAA;AACpE,GACF;AAGA,EAAA,MAAM,gBAAkC,EAAC;AACzC,EAAA,IAAI,eAAe,OAAS,EAAA;AAC1B,IAAW,KAAA,MAAA,CAAC,WAAa,EAAA,eAAe,CAAK,IAAA,UAAA,CAAW,cAAe,CAAA,OAAA,IAAW,EAAC,EAAG,OAAQ,CAAA,GAAG,CAAG,EAAA;AAClG,MAAM,MAAA,QAAA,GAAW,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,QACN,YAAY,EAAE,QAAA,EAAU,OAAQ,CAAA,GAAA,CAAI,WAAW,CAAA;AAAA;AAAA,QAC/C,gBAAgB,WAAW,CAAA;AAAA;AAAA,QAC3B,MAAA;AAAA;AAAA,QACA,yBAAyB,eAAiB,EAAA;AAAA,UAC5D,GAAG,OAAA;AAAA,UACH,MAAM,SAAU,CAAA,CAAC,QAAQ,IAAM,EAAA,SAAA,EAAW,WAAW,CAAC;AAAA,SACvD;AAAA,OACH;AACA,MAAA,eAAA,CAAgB,iBAAiB,QAAQ,CAAA;AACzC,MAAA,aAAA,CAAc,KAAK,QAAQ,CAAA;AAAA;AAC7B;AAEF,EAAA,IAAI,cAAc,MAAQ,EAAA;AACxB,IAAK,IAAA,CAAA,IAAA;AAAA,MACH,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,QACW,MAAA;AAAA;AAAA,QACA,gBAAgB,SAAS,CAAA;AAAA;AAAA,QACzB,MAAA;AAAA;AAAA,QACA,EAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,aAAa;AAAA;AACpE,KACF;AAAA,GACK,MAAA;AACL,IAAK,IAAA,CAAA,IAAA;AAAA,MACH,GAAG,OAAQ,CAAA,uBAAA;AAAA;AAAA,QACW,MAAA;AAAA;AAAA,QACA,gBAAgB,SAAS,CAAA;AAAA;AAAA,QACzB,cAAA;AAAA;AAAA,QACA;AAAA;AACtB,KACF;AAAA;AAGF,EAAO,OAAA,EAAA,CAAG,OAAQ,CAAA,qBAAA,CAAsB,IAAI,CAAA;AAC9C;;;;"}