{"version":3,"file":"path-item-object.mjs","sources":["../../src/transform/path-item-object.ts"],"sourcesContent":["import ts from \"typescript\";\nimport { addJSDocComment, NEVER, oapiRef, QUESTION_TOKEN, tsModifiers, tsPropertyIndex } from \"../lib/ts.js\";\nimport { createRef } from \"../lib/utils.js\";\nimport type {\n  OperationObject,\n  ParameterObject,\n  PathItemObject,\n  ReferenceObject,\n  TransformNodeOptions,\n} from \"../types.js\";\nimport transformOperationObject, { injectOperationObject } from \"./operation-object.js\";\nimport { transformParametersArray } from \"./parameters-array.js\";\n\nexport type Method = \"get\" | \"put\" | \"post\" | \"delete\" | \"options\" | \"head\" | \"patch\" | \"trace\";\n\n/**\n * Transform PathItem nodes (4.8.9)\n * @see https://spec.openapis.org/oas/v3.1.0#path-item-object\n */\nexport default function transformPathItemObject(pathItem: PathItemObject, options: TransformNodeOptions): ts.TypeNode {\n  const type: ts.TypeElement[] = [];\n\n  // parameters\n  type.push(\n    ...transformParametersArray(pathItem.parameters ?? [], {\n      ...options,\n      path: createRef([options.path, \"parameters\"]),\n    }),\n  );\n\n  // methods\n  for (const method of [\"get\", \"put\", \"post\", \"delete\", \"options\", \"head\", \"patch\", \"trace\"] as Method[]) {\n    const operationObject = pathItem[method];\n    if (\n      !operationObject ||\n      (options.ctx.excludeDeprecated &&\n        (\"$ref\" in operationObject ? options.ctx.resolve<OperationObject>(operationObject.$ref) : operationObject)\n          ?.deprecated)\n    ) {\n      type.push(\n        ts.factory.createPropertySignature(\n          /* modifiers     */ tsModifiers({ readonly: options.ctx.immutable }),\n          /* name          */ tsPropertyIndex(method),\n          /* questionToken */ QUESTION_TOKEN,\n          /* type          */ NEVER,\n        ),\n      );\n      continue;\n    }\n\n    // fold top-level PathItem parameters into method-level, with the latter overriding the former\n    const keyedParameters: Record<string, ParameterObject | ReferenceObject> = {};\n    if (!(\"$ref\" in operationObject)) {\n      // important: OperationObject parameters come last, and will override any conflicts with PathItem parameters\n      for (const parameter of [...(pathItem.parameters ?? []), ...(operationObject.parameters ?? [])]) {\n        // fix: #1798, use unique key\n        const name =\n          \"$ref\" in parameter\n            ? `${options.ctx.resolve<ParameterObject>(parameter.$ref)?.in}-${options.ctx.resolve<ParameterObject>(parameter.$ref)?.name}`\n            : `${parameter.in}-${parameter.name}`;\n        if (name) {\n          keyedParameters[name] = parameter;\n        }\n      }\n    }\n\n    let operationType: ts.TypeNode;\n    if (\"$ref\" in operationObject) {\n      operationType = oapiRef(operationObject.$ref);\n    }\n    // if operationId exists, move into an `operations` export and pass the reference in here\n    else if (operationObject.operationId) {\n      // workaround for issue caused by redocly ref parsing: https://github.com/openapi-ts/openapi-typescript/issues/1542\n      const operationId = operationObject.operationId.replace(HASH_RE, \"/\");\n      operationType = oapiRef(createRef([\"operations\", operationId]));\n      injectOperationObject(\n        operationId,\n        { ...operationObject, parameters: Object.values(keyedParameters) },\n        { ...options, path: createRef([options.path, method]) },\n      );\n    } else {\n      operationType = ts.factory.createTypeLiteralNode(\n        transformOperationObject(\n          { ...operationObject, parameters: Object.values(keyedParameters) },\n          { ...options, path: createRef([options.path, method]) },\n        ),\n      );\n    }\n    const property = ts.factory.createPropertySignature(\n      /* modifiers     */ tsModifiers({ readonly: options.ctx.immutable }),\n      /* name          */ tsPropertyIndex(method),\n      /* questionToken */ undefined,\n      /* type          */ operationType,\n    );\n    addJSDocComment(operationObject, property);\n    type.push(property);\n  }\n\n  return ts.factory.createTypeLiteralNode(type);\n}\n\nconst HASH_RE = /#/g;\n"],"names":[],"mappings":"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"}