{"version":3,"file":"response-object.mjs","sources":["../../src/transform/response-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport {\n  addJSDocComment,\n  NEVER,\n  oapiRef,\n  QUESTION_TOKEN,\n  STRING,\n  tsModifiers,\n  tsPropertyIndex,\n  UNKNOWN,\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":"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"}