{"version":3,"sources":["/Users/erunion/code/readme/oas/packages/oas/dist/chunk-DNLCD3K6.cjs","../src/operation/index.ts","../src/operation/lib/dedupe-common-parameters.ts","../src/samples/index.ts","../src/samples/utils.ts","../src/operation/lib/get-mediatype-examples.ts","../src/operation/lib/get-response-examples.ts","../src/operation/lib/get-callback-examples.ts","../src/operation/lib/get-example-groups.ts","../src/operation/lib/get-requestbody-examples.ts","../src/operation/lib/operationId.ts","../src/operation/transformers/get-response-as-json-schema.ts"],"names":[],"mappings":"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","file":"/Users/erunion/code/readme/oas/packages/oas/dist/chunk-DNLCD3K6.cjs","sourcesContent":[null,"import type { Extensions } from '../extensions.js';\nimport type Oas from '../index.js';\nimport type {\n  HttpMethods,\n  JSONSchema,\n  KeyedSecuritySchemeObject,\n  MediaTypeObject,\n  OAS31Document,\n  OASDocument,\n  OperationObject,\n  ParameterObject,\n  PathItemObject,\n  ReferenceObject,\n  RequestBodyObject,\n  ResponseObject,\n  SchemaWrapper,\n  SecurityRequirementObject,\n  SecuritySchemeObject,\n  SecurityType,\n  TagObject,\n} from '../types.js';\nimport type { CallbackExample } from './lib/get-callback-examples.js';\nimport type { ExampleGroups } from './lib/get-example-groups.js';\nimport type { RequestBodyExample } from './lib/get-requestbody-examples.js';\nimport type { ResponseExample } from './lib/get-response-examples.js';\nimport type { OperationIDGeneratorOptions } from './lib/operationId.js';\nimport type { getParametersAsJSONSchemaOptions } from './transformers/get-parameters-as-json-schema.js';\nimport type { ResponseSchemaObject } from './transformers/get-response-as-json-schema.js';\n\nimport { $RefParser } from '@apidevtools/json-schema-ref-parser';\n\nimport matchesMimeType from '../lib/matches-mimetype.js';\nimport { decorateComponentSchemasWithRefName, dereferenceRef, getDereferencingOptions } from '../lib/refs.js';\nimport { isRef } from '../types.js';\nimport { supportedMethods } from '../utils.js';\nimport { dedupeCommonParameters } from './lib/dedupe-common-parameters.js';\nimport { getCallbackExamples } from './lib/get-callback-examples.js';\nimport { getExampleGroups } from './lib/get-example-groups.js';\nimport { getRequestBodyExamples } from './lib/get-requestbody-examples.js';\nimport { getResponseExamples } from './lib/get-response-examples.js';\nimport { getOperationId, hasOperationId } from './lib/operationId.js';\nimport { getParametersAsJSONSchema } from './transformers/get-parameters-as-json-schema.js';\nimport { getResponseAsJSONSchema } from './transformers/get-response-as-json-schema.js';\n\nexport class Operation {\n  /**\n   * The `Oas` instance that this operation belongs to.\n   */\n  oas: Oas;\n\n  /**\n   * Schema of the operation from the API Definition.\n   */\n  schema: OperationObject;\n\n  /**\n   * OpenAPI API Definition that this operation originated from.\n   */\n  api: OASDocument;\n\n  /**\n   * Path that this operation is targeted towards.\n   */\n  path: string;\n\n  /**\n   * HTTP Method that this operation is targeted towards.\n   */\n  method: HttpMethods;\n\n  /**\n   * The primary Content Type that this operation accepts.\n   */\n  contentType: string | undefined;\n\n  /**\n   * An object with groups of all example definitions (body/header/query/path/response/etc.)\n   */\n  exampleGroups: ExampleGroups | undefined;\n\n  /**\n   * Request body examples for this operation.\n   */\n  requestBodyExamples: RequestBodyExample[] | undefined;\n\n  /**\n   * Response examples for this operation.\n   */\n  responseExamples: ResponseExample[] | undefined;\n\n  /**\n   * Callback examples for this operation (if it has callbacks).\n   */\n  callbackExamples: CallbackExample[] | undefined;\n\n  /**\n   * Flattened out arrays of both request and response headers that are utilized on this operation.\n   */\n  headers: {\n    request: string[];\n    response: string[];\n  };\n\n  /**\n   * Internal storage array that the library utilizes to keep track of the times the\n   * {@see Operation.dereference} has been called so that if you initiate multiple promises they'll\n   * all end up returning the same data set once the initial dereference call completed.\n   */\n  protected promises: {\n    reject: any;\n    resolve: any;\n  }[];\n\n  /**\n   * Internal storage array that the library utilizes to keep track of its `dereferencing` state so\n   * it doesn't initiate multiple dereferencing processes.\n   */\n  protected dereferencing: {\n    circularRefs: string[];\n    complete: boolean;\n    processing: boolean;\n  };\n\n  /**\n   * Have the component schemas within this API definition been decorated with our\n   * `x-readme-ref-name` extension?\n   *\n   * @see {@link decorateComponentSchemas}\n   */\n  protected schemasDecorated: boolean = false;\n\n  constructor(oas: Oas, path: string, method: HttpMethods, operation: OperationObject) {\n    this.oas = oas;\n    this.schema = operation;\n    this.api = oas.api;\n    this.path = path;\n    this.method = method;\n\n    this.contentType = undefined;\n    this.requestBodyExamples = undefined;\n    this.responseExamples = undefined;\n    this.callbackExamples = undefined;\n    this.exampleGroups = undefined;\n    this.headers = {\n      request: [],\n      response: [],\n    };\n\n    this.promises = [];\n    this.dereferencing = {\n      processing: false,\n      complete: false,\n      circularRefs: [],\n    };\n  }\n\n  /**\n   * Retrieve the `summary` for this operation.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-operationsummary}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-operation-summary}\n   */\n  getSummary(): string | undefined {\n    if (this.schema?.summary && typeof this.schema.summary === 'string') {\n      return this.schema.summary;\n    }\n\n    const pathItem = this.api.paths?.[this.path];\n    if (pathItem?.summary && typeof pathItem.summary === 'string') {\n      return pathItem.summary;\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Retrieve the `description` for this operation.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-operationdescription}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-operation-description}\n   */\n  getDescription(): string | undefined {\n    if (this.schema?.description && typeof this.schema.description === 'string') {\n      return this.schema.description;\n    }\n\n    const pathItem = this.api.paths?.[this.path];\n    if (pathItem?.description && typeof pathItem.description === 'string') {\n      return pathItem.description;\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Retrieve the primary content type for this operation. If multiple exist, the first JSON-like\n   * type will be returned.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-requestbodycontent}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-request-body-content}\n   */\n  getContentType(): string {\n    if (this.contentType) {\n      return this.contentType;\n    }\n\n    let types: string[] = [];\n    if (this.schema.requestBody) {\n      if (isRef(this.schema.requestBody)) {\n        this.schema.requestBody = dereferenceRef(this.schema.requestBody, this.api);\n      }\n\n      if (this.schema.requestBody && 'content' in this.schema.requestBody) {\n        types = Object.keys(this.schema.requestBody.content);\n      }\n    }\n\n    this.contentType = 'application/json';\n    if (types?.length) {\n      this.contentType = types[0];\n    }\n\n    // Favor JSON if it exists\n    types.forEach(t => {\n      if (matchesMimeType.json(t)) {\n        this.contentType = t;\n      }\n    });\n\n    return this.contentType;\n  }\n\n  /**\n   * Checks if the current operation has a `x-www-form-urlencoded` content type payload.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-requestbodycontent}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-request-body-content}\n   */\n  isFormUrlEncoded(): boolean {\n    return matchesMimeType.formUrlEncoded(this.getContentType());\n  }\n\n  /**\n   * Checks if the current operation has a mutipart content type payload.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-requestbodycontent}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-request-body-content}\n   */\n  isMultipart(): boolean {\n    return matchesMimeType.multipart(this.getContentType());\n  }\n\n  /**\n   * Checks if the current operation has a JSON-like content type payload.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-requestbodycontent}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-request-body-content}\n   */\n  isJson(): boolean {\n    return matchesMimeType.json(this.getContentType());\n  }\n\n  /**\n   * Checks if the current operation has an XML content type payload.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-requestbodycontent}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-request-body-content}\n   */\n  isXml(): boolean {\n    return matchesMimeType.xml(this.getContentType());\n  }\n\n  /**\n   * Checks if the current operation is a webhook or not.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#oas-webhooks}\n   */\n  isWebhook(): boolean {\n    return this instanceof Webhook;\n  }\n\n  /**\n   * Returns an array of all security requirements associated wtih this operation. If none are\n   * defined at the operation level, the securities for the entire API definition are returned\n   * (with an empty array as a final fallback).\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#security-requirement-object}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#security-requirement-object}\n   */\n  getSecurity(): SecurityRequirementObject[] {\n    // If this definition doesn't have any security schemes defined then regardless if there are\n    // `security` requirements defined anywhere we should return an empty array because they're all\n    // invalid an unusable without the accompanying schemes.\n    if (!this.api?.components?.securitySchemes || !Object.keys(this.api.components.securitySchemes).length) {\n      return [];\n    }\n\n    return this.schema.security || this.api.security || [];\n  }\n\n  /**\n   * Retrieve a collection of grouped security schemes. The inner array determines AND-grouped\n   * security schemes, the outer array determines OR-groups.\n   *\n   * @see {@link https://swagger.io/docs/specification/authentication/#multiple}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#security-requirement-object}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#security-requirement-object}\n   * @param filterInvalid Optional flag that, when set to `true`, filters out invalid/nonexistent\n   *    security schemes, rather than returning `false`.\n   */\n  getSecurityWithTypes(\n    filterInvalid = false,\n  ): ((false | { security: KeyedSecuritySchemeObject; type: SecurityType })[] | false)[] {\n    return this.getSecurity().map(requirement => {\n      let keys: string[];\n      try {\n        keys = Object.keys(requirement);\n      } catch {\n        return false;\n      }\n\n      const keysWithTypes = keys.map(key => {\n        let security: SecuritySchemeObject | ReferenceObject | undefined;\n        try {\n          security = this.api?.components?.securitySchemes?.[key];\n          if (!security) return false;\n          if (isRef(security)) {\n            security = dereferenceRef(security, this.api);\n            if (!security || isRef(security)) return false;\n          }\n        } catch {\n          return false;\n        }\n\n        if (!security || isRef(security)) return false;\n\n        let type: SecurityType | null = null;\n\n        if (security.type === 'http') {\n          if (security.scheme === 'basic') type = 'Basic';\n          else if (security.scheme === 'bearer') type = 'Bearer';\n          else type = security.type;\n        } else if (security.type === 'oauth2') {\n          type = 'OAuth2';\n        } else if (security.type === 'apiKey') {\n          if (security.in === 'query') type = 'Query';\n          else if (security.in === 'header') type = 'Header';\n          else if (security.in === 'cookie') type = 'Cookie';\n          else type = security.type;\n        } else {\n          return false;\n        }\n\n        return {\n          type,\n          security: {\n            ...security,\n            _key: key,\n            _requirements: requirement[key],\n          },\n        };\n      });\n\n      if (filterInvalid) return keysWithTypes.filter(key => key !== false);\n\n      return keysWithTypes;\n    });\n  }\n\n  /**\n   * Retrieve an object where the keys are unique scheme types, and the values are arrays\n   * containing each security scheme of that type.\n   *\n   */\n  prepareSecurity(): Record<SecurityType, KeyedSecuritySchemeObject[]> {\n    return this.getSecurityWithTypes().reduce(\n      (prev, securities) => {\n        if (!securities) return prev;\n\n        securities.forEach(security => {\n          // Remove non-existent schemes\n          if (!security) return;\n          if (!prev[security.type]) prev[security.type] = [];\n\n          // Only add schemes we haven't seen yet.\n          const exists = prev[security.type].some(sec => sec._key === security.security._key);\n          if (!exists) {\n            // Since an operation can require the same security scheme several times (each with\n            // different scope requirements), including the `_requirements` in this object would be\n            // misleading since we dedupe the security schemes.\n            if (security.security?._requirements) delete security.security._requirements;\n            prev[security.type].push(security.security);\n          }\n        });\n\n        return prev;\n      },\n      {} as Record<SecurityType, KeyedSecuritySchemeObject[]>,\n    );\n  }\n\n  /**\n   * Retrieve all of the headers, request and response, that are associated with this operation.\n   *\n   */\n  getHeaders(): Operation['headers'] {\n    const security = this.prepareSecurity();\n    if (security.Header) {\n      this.headers.request = security.Header.map((h: KeyedSecuritySchemeObject) => {\n        // Only `apiKey` security schemes contain headers.\n        if (!('name' in h)) return false;\n        return h.name;\n      }).filter((item): item is string => item !== false);\n    }\n\n    if (security.Bearer || security.Basic || security.OAuth2) {\n      this.headers.request.push('Authorization');\n    }\n\n    if (security.Cookie) {\n      this.headers.request.push('Cookie');\n    }\n\n    if (this.schema.parameters) {\n      this.headers.request = this.headers.request.concat(\n        this.schema.parameters\n          .map(p => {\n            let param = p;\n            if (isRef(param)) {\n              param = dereferenceRef(param, this.api);\n              if (!param || isRef(param)) return undefined;\n            }\n\n            if (param.in && param.in === 'header') return param.name;\n            return undefined;\n          })\n          .filter((item): item is string => item !== undefined),\n      );\n    }\n\n    if (this.schema.responses) {\n      this.headers.response = Object.keys(this.schema.responses)\n        .map(r => {\n          // biome-ignore-start lint/style/noNonNullAssertion: `schema.responses` is guaranteed here.\n          let response = this.schema.responses![r];\n          if (!response) return [];\n          if (isRef(response)) {\n            this.schema.responses![r] = dereferenceRef(response, this.api);\n            response = this.schema.responses![r];\n            if (!response || isRef(response)) {\n              return [];\n            }\n          }\n          // biome-ignore-end lint/style/noNonNullAssertion: --end--\n\n          return response?.headers ? Object.keys(response.headers) : [];\n        })\n        .reduce((a, b) => a.concat(b), []);\n    }\n\n    // If the operation doesn't already specify a `content-type` request header, we check if the\n    // path operation request body contains content, which implies that we should also include the\n    // `content-type` header.\n    if (!this.headers.request.includes('Content-Type') && this.schema.requestBody) {\n      let requestBody = this.schema.requestBody;\n      if (requestBody) {\n        if (isRef(requestBody)) {\n          this.schema.requestBody = dereferenceRef(requestBody, this.api);\n          requestBody = this.schema.requestBody;\n        }\n\n        if (requestBody && !isRef(requestBody) && 'content' in requestBody && Object.keys(requestBody.content)) {\n          this.headers.request.push('Content-Type');\n        }\n      }\n    }\n\n    // This is a similar approach, but in this case if we check the response content and prioritize\n    // the `accept` request header and `content-type` request header.\n    if (this.schema.responses) {\n      const hasResponseContent = Object.keys(this.schema.responses).some(r => {\n        let response = this.schema.responses?.[r];\n        if (!response) return false;\n        if (isRef(response)) {\n          // biome-ignore-start lint/style/noNonNullAssertion: `schema.responses` is guaranteed here.\n          this.schema.responses![r] = dereferenceRef(response, this.api);\n          response = this.schema.responses![r];\n          if (!response || isRef(response)) {\n            return false;\n          }\n          // biome-ignore-end lint/style/noNonNullAssertion: --end--\n        }\n\n        return response.content && Object.keys(response.content).length > 0;\n      });\n\n      if (hasResponseContent) {\n        if (!this.headers.request.includes('Accept')) this.headers.request.push('Accept');\n        if (!this.headers.response.includes('Content-Type')) this.headers.response.push('Content-Type');\n      }\n    }\n\n    return this.headers;\n  }\n\n  /**\n   * Determine if this operation has an `operationId` present in its schema. Note that if one is\n   * present in the schema but is an empty string then this will return `false`.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-operationid}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-operation-id}\n   */\n  hasOperationId(): boolean {\n    return hasOperationId(this.schema);\n  }\n\n  /**\n   * Determine if an operation has an `operationId` present in its schema. Note that if one is\n   * present in the schema but is an empty string then this will return `false`.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-operationid}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-operation-id}\n   */\n  static hasOperationId(schema: OperationObject): boolean {\n    return hasOperationId(schema);\n  }\n\n  /**\n   * Get an `operationId` for this operation. If one is not present (it's not required by the spec!)\n   * a hash of the path and method will be returned instead.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-operationid}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-operation-id}\n   */\n  getOperationId(opts: OperationIDGeneratorOptions = {}): string {\n    return getOperationId(this.path, this.method, this.schema, opts);\n  }\n\n  /**\n   * Get an `operationId` for an operation. If one is not present (it's not required by the spec!)\n   * a hash of the path and method will be returned instead.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-operationid}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-operation-id}\n   */\n  static getOperationId(\n    path: string,\n    method: string,\n    schema: OperationObject,\n    opts: OperationIDGeneratorOptions = {},\n  ): string {\n    return getOperationId(path, method, schema, opts);\n  }\n\n  /**\n   * Return an array of all tags, and their metadata, that exist on this operation.\n   *\n   */\n  getTags(): TagObject[] {\n    if (!('tags' in this.schema)) {\n      return [];\n    }\n\n    const oasTagMap: Map<string, TagObject> = new Map();\n    if (Array.isArray(this.api?.tags)) {\n      this.api.tags.forEach(tag => {\n        oasTagMap.set(tag.name, tag);\n      });\n    }\n\n    const oasTags = Object.fromEntries(oasTagMap);\n\n    const tags: TagObject[] = [];\n    if (Array.isArray(this.schema.tags)) {\n      this.schema.tags.forEach(tag => {\n        if (tag in oasTags) {\n          tags.push(oasTags[tag]);\n        } else {\n          tags.push({\n            name: tag,\n          });\n        }\n      });\n    }\n\n    return tags;\n  }\n\n  /**\n   * Return is the operation is flagged as `deprecated` or not.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-operationdeprecated}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-operation-deprecated}\n   */\n  isDeprecated(): boolean {\n    return Boolean('deprecated' in this.schema ? this.schema.deprecated : false);\n  }\n\n  /**\n   * Determine if the operation has any (non-request body) parameters.\n   *\n   */\n  hasParameters(): boolean {\n    return !!this.getParameters().length;\n  }\n\n  /**\n   * Return the parameters (non-request body) on the operation.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-operationparameters}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-operation-parameters}\n   */\n  getParameters(): ParameterObject[] {\n    let parameters = (this.schema?.parameters || [])\n      .map(p => {\n        let param = p;\n        if (isRef(param)) {\n          param = dereferenceRef(param, this.api);\n          if (!param || isRef(param)) return undefined;\n        }\n\n        return param;\n      })\n      .filter((param): param is ParameterObject => param !== undefined);\n\n    const commonParams = (this.api?.paths?.[this.path]?.parameters || [])\n      .map(p => {\n        let param = p;\n        if (isRef(param)) {\n          param = dereferenceRef(param, this.api);\n          if (!param || isRef(param)) return undefined;\n        }\n\n        return param;\n      })\n      .filter((param): param is ParameterObject => param !== undefined);\n\n    if (commonParams.length) {\n      parameters = parameters.concat(dedupeCommonParameters(parameters, commonParams) || []);\n    }\n\n    return parameters;\n  }\n\n  /**\n   * Determine if this operation has any required parameters.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-operationparameters}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-operation-parameters}\n   */\n  hasRequiredParameters(): boolean {\n    return this.getParameters().some(param => 'required' in param && param.required);\n  }\n\n  /**\n   * Convert the operation into an array of JSON Schema schemas for each available type of\n   * parameter available on the operation.\n   *\n   * Note that this method is not compatible with an operation or OpenAPI definition that has been\n   * processed with `.dereference()`. This method can only be called with the _original_ API\n   * definition that was used to initialize the `Operation` and `Oas` instance. If a dereferenced\n   * schema is present when this is called a `TypeError` will be thrown.\n   *\n   * @throws {TypeError} If the operation or OpenAPI definition has been run through `.dereference().`\n   *\n   */\n  getParametersAsJSONSchema(opts: getParametersAsJSONSchemaOptions = {}): SchemaWrapper[] | null {\n    if (this.isDereferenced()) {\n      throw new Error(\n        '`.getParametersAsJSONSchema()` is not compatible with an operation or OpenAPI definition that has been run through `.dereference().`',\n      );\n    }\n\n    // Because some downstream tooling that use these JSON Schema objects may need to know original\n    // schema names, like in some cases of discriminator mappings in our ReadMe API Explorer, we\n    // need to decorate our component schemas with a `x-readme-ref-name` property with that original\n    // schema name.\n    //\n    // This work happens automatically during our `.dereference()` process but because we do not\n    // allow dereferencing to be used with this method we need to do this ourselves.\n    if (!this.schemasDecorated) {\n      decorateComponentSchemasWithRefName(this.api);\n      this.schemasDecorated = true;\n    }\n\n    return getParametersAsJSONSchema(this, this.api, {\n      includeDiscriminatorMappingRefs: true,\n      ...opts,\n    });\n  }\n\n  /**\n   * Get a single response for this status code, formatted as JSON schema.\n   *\n   * Note that this method is not compatible with an operation or OpenAPI definition that has been\n   * processed with `.dereference()`. This method can only be called with the _original_ API\n   * definition that was used to initialize the `Operation` and `Oas` instance. If a dereferenced\n   * schema is present when this is called a `TypeError` will be thrown.\n   *\n   * @param statusCode Status code to pull a JSON Schema response for.\n   * @param opts Options for schema generation.\n   * @param opts.contentType Optional content-type to use. If specified and the response doesn't have\n   *   this content-type, the function will return null.\n   */\n  getResponseAsJSONSchema(\n    statusCode: number | string,\n    opts: {\n      /**\n       * If you wish to include discriminator mapping `$ref` components alongside your\n       * `discriminator` in schemas. Defaults to `true`.\n       */\n      includeDiscriminatorMappingRefs?: boolean;\n\n      /**\n       * Optional content-type to use. If specified and the response doesn't have this content-type,\n       * the function will return null.\n       */\n      contentType?: string;\n    } = {},\n  ): ResponseSchemaObject[] | null {\n    if (this.isDereferenced()) {\n      throw new Error(\n        '`.getResponseAsJSONSchema()` is not compatible with an operation or OpenAPI definition that has been run through `.dereference().`',\n      );\n    }\n\n    // Because some downstream tooling that use these JSON Schema objects may need to know original\n    // schema names, like in some cases of discriminator mappings in our ReadMe API Explorer, we\n    // need to decorate our component schemas with a `x-readme-ref-name` property with that original\n    // schema name.\n    //\n    // This work happens automatically during our `.dereference()` process but because we do not\n    // allow dereferencing to be used with this method we need to do this ourselves.\n    if (!this.schemasDecorated) {\n      decorateComponentSchemasWithRefName(this.api);\n      this.schemasDecorated = true;\n    }\n\n    return getResponseAsJSONSchema(this, this.api, statusCode, {\n      includeDiscriminatorMappingRefs: true,\n      ...opts,\n    });\n  }\n\n  /**\n   * Get an array of all valid response status codes for this operation.\n   *\n   */\n  getResponseStatusCodes(): string[] {\n    if (!this.schema.responses) return [];\n\n    if (isRef(this.schema.responses)) {\n      this.schema.responses = dereferenceRef(this.schema.responses, this.api);\n      if (!this.schema.responses || isRef(this.schema.responses)) {\n        return [];\n      }\n    }\n\n    return Object.keys(this.schema.responses).filter(key => {\n      // `x-` extensions aren't valid HTTP status codes so we shouldn't return them as one.\n      if (key.startsWith('x-')) {\n        return false;\n      }\n\n      const response = this.schema.responses?.[key];\n      return response && typeof response === 'object';\n    });\n  }\n\n  /**\n   * Retrieve an array of all content types that this operation can return.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#response-object}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#response-object}\n   */\n  getResponseContentTypes(): string[] {\n    if (!this.schema.responses) return [];\n\n    const contentTypes = new Set<string>();\n    Object.values(this.schema.responses).forEach((response: ReferenceObject | ResponseObject) => {\n      let resp = response;\n      if (!resp) return;\n      if (isRef(resp)) {\n        resp = dereferenceRef(resp, this.api);\n\n        // If this response still can't be resolved then we shouldn't return anything because it's\n        // either an invalid schema or a circular reference.\n        if (!resp || isRef(resp)) {\n          return;\n        }\n      }\n\n      Object.keys(resp.content || {}).forEach(mimeType => {\n        contentTypes.add(mimeType);\n      });\n    });\n\n    return Array.from(contentTypes);\n  }\n\n  /**\n   * Determine if the operation has any request bodies.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-operationrequestbody}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-operation-request-body}\n   */\n  hasRequestBody(): boolean {\n    return !!this.schema.requestBody;\n  }\n\n  /**\n   * Return the current `requestBody` object, dereferencing it in the process if it's a `$ref`\n   * pointer.\n   *\n   */\n  private getResolvedRequestBody(): RequestBodyObject | false {\n    let requestBody = this.schema.requestBody;\n    if (!requestBody) return false;\n    if (isRef(requestBody)) {\n      this.schema.requestBody = dereferenceRef(requestBody, this.api);\n      requestBody = this.schema.requestBody;\n      if (!requestBody || isRef(requestBody)) {\n        return false;\n      }\n    }\n\n    return requestBody;\n  }\n\n  /**\n   * Retrieve the list of all available media types that the operations request body can accept.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#media-type-object}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object}\n   */\n  getRequestBodyMediaTypes(): string[] {\n    if (!this.hasRequestBody()) {\n      return [];\n    }\n\n    const requestBody = this.getResolvedRequestBody();\n    if (!requestBody) return [];\n\n    return Object.keys(requestBody.content);\n  }\n\n  /**\n   * Determine if this operation has a required request body.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#media-type-object}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object}\n   */\n  hasRequiredRequestBody(): boolean {\n    if (!this.hasRequestBody()) {\n      return false;\n    }\n\n    const requestBody = this.getResolvedRequestBody();\n    if (!requestBody) return false;\n\n    if (requestBody.required) {\n      return true;\n    }\n\n    // The OpenAPI spec isn't clear on the differentiation between schema `required` and\n    // `requestBody.required` because you can have required top-level schema properties but a\n    // non-required requestBody that negates each other.\n    //\n    // To kind of work ourselves around this and present a better QOL for this accessor, if at this\n    // final point where we don't have a required request body, but the underlying Media Type Object\n    // schema says that it has required properties then we should ultimately recognize that this\n    // request body is required -- even as the request body description says otherwise.\n    const parameters = this.getParametersAsJSONSchema();\n    if (parameters === null) {\n      return false;\n    }\n\n    return !!parameters\n      .filter(js => ['body', 'formData'].includes(js.type))\n      .find(js => js.schema && Array.isArray(js.schema.required) && js.schema.required.length);\n  }\n\n  /**\n   * Retrieve a specific request body content schema off this operation.\n   *\n   * If no media type is supplied this will return either the first available JSON-like request\n   * body, or the first available if there are no JSON-like media types present. When this return\n   * comes back it's in the form of an array with the first key being the selected media type,\n   * followed by the media type object in question.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#media-type-object}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object}\n   * @param mediaType Specific request body media type to retrieve if present.\n   */\n  getRequestBody(mediaType?: string): MediaTypeObject | false | [string, MediaTypeObject, ...string[]] {\n    if (!this.hasRequestBody()) {\n      return false;\n    }\n\n    const requestBody = this.getResolvedRequestBody();\n    if (!requestBody) return false;\n\n    if (mediaType) {\n      if (!(mediaType in requestBody.content)) {\n        return false;\n      }\n\n      return requestBody.content[mediaType];\n    }\n\n    // Since no media type was supplied we need to find either the first JSON-like media type that\n    // we've got, or the first available of anything else if no JSON-like media types are present.\n    let availableMediaType: string | undefined;\n    const mediaTypes = this.getRequestBodyMediaTypes();\n    mediaTypes.forEach((mt: string) => {\n      if (!availableMediaType && matchesMimeType.json(mt)) {\n        availableMediaType = mt;\n      }\n    });\n\n    if (!availableMediaType) {\n      mediaTypes.forEach((mt: string) => {\n        if (!availableMediaType) {\n          availableMediaType = mt;\n        }\n      });\n    }\n\n    if (availableMediaType) {\n      return [\n        availableMediaType,\n        requestBody.content[availableMediaType],\n        ...(requestBody.description ? [requestBody.description] : []),\n      ];\n    }\n\n    return false;\n  }\n\n  /**\n   * Retrieve an array of request body examples that this operation has.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#request-body-examples}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#request-body-examples}\n   */\n  getRequestBodyExamples(): RequestBodyExample[] {\n    const isRequestExampleValueDefined = typeof this.requestBodyExamples?.[0]?.examples?.[0].value !== 'undefined';\n\n    if (this.requestBodyExamples && isRequestExampleValueDefined) {\n      return this.requestBodyExamples;\n    }\n\n    this.requestBodyExamples = getRequestBodyExamples(this.schema, this.api);\n    return this.requestBodyExamples;\n  }\n\n  /**\n   * Return a specific response out of the operation by a given HTTP status code.\n   *\n   * @param statusCode Status code to pull a response object for.\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#response-object}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#response-object}\n   */\n  getResponseByStatusCode(statusCode: number | string): ResponseObject | false {\n    if (!this.schema.responses) {\n      return false;\n    }\n\n    let response = this.schema.responses[statusCode];\n    if (!response) return false;\n    if (isRef(response)) {\n      this.schema.responses[statusCode] = dereferenceRef(response, this.api);\n      response = this.schema.responses[statusCode];\n      if (!response || isRef(response)) {\n        return false;\n      }\n    }\n\n    return response;\n  }\n\n  /**\n   * Retrieve an array of response examples that this operation has.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#response-object-examples}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#response-object-examples}\n   */\n  getResponseExamples(): ResponseExample[] {\n    if (this.responseExamples) {\n      return this.responseExamples;\n    }\n\n    this.responseExamples = getResponseExamples(this.schema, this.api);\n    return this.responseExamples;\n  }\n\n  /**\n   * Determine if the operation has callbacks.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#callback-object}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#callback-object}\n   */\n  hasCallbacks(): boolean {\n    return Boolean(this.schema.callbacks);\n  }\n\n  /**\n   * Retrieve a specific callback.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#callback-object}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#callback-object}\n   * @param identifier Callback identifier to look for.\n   * @param expression Callback expression to look for.\n   * @param method HTTP Method on the callback to look for.\n   */\n  getCallback(identifier: string, expression: string, method: HttpMethods): Callback | false {\n    if (!this.schema.callbacks) return false;\n\n    let callbackObj = this.schema.callbacks[identifier];\n    if (!callbackObj) return false;\n    if (isRef(callbackObj)) {\n      this.schema.callbacks[identifier] = dereferenceRef(callbackObj, this.api);\n      callbackObj = this.schema.callbacks[identifier];\n      if (!callbackObj || isRef(callbackObj)) {\n        return false;\n      }\n    }\n\n    let callback = callbackObj[expression];\n    if (!callback) return false;\n    if (isRef(callback)) {\n      callbackObj[expression] = dereferenceRef(callback, this.api);\n      callback = callbackObj[expression];\n      if (!callback || isRef(callback)) {\n        return false;\n      }\n    }\n\n    if (!callback[method]) {\n      return false;\n    }\n\n    return new Callback(this.oas, expression, method, callback[method], identifier, callback);\n  }\n\n  /**\n   * Retrieve an array of operations created from each callback.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#callback-object}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#callback-object}\n   */\n  getCallbacks(): Callback[] {\n    if (!this.hasCallbacks()) return [];\n\n    const callbacks: Callback[] = [];\n    // biome-ignore-start lint/style/noNonNullAssertion: `hasCallbacks()` has narrowed this for us.\n    Object.keys(this.schema.callbacks!).forEach(callback => {\n      let cb = this.schema.callbacks?.[callback];\n      if (!cb) return;\n      if (isRef(cb)) {\n        this.schema.callbacks![callback] = dereferenceRef(cb, this.api);\n        cb = this.schema.callbacks![callback];\n        if (!cb || isRef(cb)) {\n          return;\n        }\n      }\n\n      Object.keys(cb).forEach(expression => {\n        let callbackPath = cb[expression];\n        if (!callbackPath) return;\n        if (isRef(callbackPath)) {\n          cb[expression] = dereferenceRef(callbackPath, this.api);\n          callbackPath = cb[expression];\n          if (!callbackPath || isRef(callbackPath)) {\n            return;\n          }\n        }\n\n        Object.keys(callbackPath).forEach(method => {\n          if (!supportedMethods.includes(method as HttpMethods)) return;\n\n          const found = this.getCallback(callback, expression, method as HttpMethods);\n          if (found) {\n            callbacks.push(found);\n          }\n        });\n      });\n    });\n    // biome-ignore-end lint/style/noNonNullAssertion: --end--\n\n    return callbacks;\n  }\n\n  /**\n   * Retrieve an array of callback examples that this operation has.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#callback-object}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#callback-object}\n   */\n  getCallbackExamples(): CallbackExample[] {\n    if (this.callbackExamples) {\n      return this.callbackExamples;\n    }\n\n    this.callbackExamples = getCallbackExamples(this.schema, this.api);\n    return this.callbackExamples;\n  }\n\n  /**\n   * Determine if a given a custom specification extension exists within the operation.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#specification-extensions}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#specification-extensions}\n   * @param extension Specification extension to lookup.\n   */\n  hasExtension(extension: string): boolean {\n    return Boolean(this.schema && extension in this.schema);\n  }\n\n  /**\n   * Retrieve a custom specification extension off of the operation.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#specification-extensions}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#specification-extensions}\n   * @param extension Specification extension to lookup.\n   *\n   * @deprecated Use `oas.getExtension(extension, operation)` instead.\n   */\n  getExtension(extension: string | keyof Extensions): any {\n    return this.schema?.[extension];\n  }\n\n  /**\n   * Returns an object with groups of all example definitions (body/header/query/path/response/etc.).\n   * The examples are grouped by their key when defined via the `examples` map.\n   *\n   * Any custom code samples defined via the `x-readme.code-samples` extension are returned,\n   * regardless of if they have a matching response example.\n   *\n   * For standard OAS request parameter (e.g., body/header/query/path/etc.) examples,\n   * they are only present in the return object if they have a corresponding response example\n   * (i.e., a response example with the same key in the `examples` map).\n   */\n  getExampleGroups(): ExampleGroups {\n    if (this.exampleGroups) return this.exampleGroups;\n\n    const groups = getExampleGroups(this);\n\n    this.exampleGroups = groups;\n\n    return groups;\n  }\n\n  /**\n   * Dereference the current operation schema so it can be parsed free of worries of `$ref` schemas\n   * and circular structures.\n   *\n   */\n  async dereference(opts?: {\n    /**\n     * A callback method can be supplied to be called when dereferencing is complete. Used for\n     * debugging that the multi-promise handling within this method works.\n     *\n     * @private\n     */\n    cb?: () => void;\n  }): Promise<(typeof this.promises)[] | boolean> {\n    if (this.dereferencing.complete) {\n      return Promise.resolve(true);\n    }\n\n    if (this.dereferencing.processing) {\n      return new Promise((resolve, reject) => {\n        this.promises.push({ resolve, reject });\n      });\n    }\n\n    this.dereferencing.processing = true;\n\n    // Because referencing will eliminate any lineage back to the original `$ref`, information that\n    // we might need at some point, we should run through all available component schemas and denote\n    // what their name is so that when dereferencing happens below those names will be preserved.\n    //\n    // Note: this mutates `this.api.components.schemas` in-place. Ideally we'd clone `components`\n    // to avoid the side effect but `json-schema-ref-parser` relies on object identity for reference\n    // resolution, so cloning breaks $ref handling. The mutation is idempotent (same key/value each\n    // time) so it's safe in practice.\n    if (!this.schemasDecorated) {\n      decorateComponentSchemasWithRefName(this.api);\n      this.schemasDecorated = true;\n    }\n\n    const { api, schema, promises } = this;\n\n    const circularRefs: Set<string> = new Set();\n    const dereferencingOptions = getDereferencingOptions(circularRefs);\n\n    const parser = new $RefParser();\n    return parser\n      .dereference(\n        '#/__INTERNAL__',\n        {\n          // Because `json-schema-ref-parser` will dereference this entire object as we only want\n          // to dereference this operation schema we're attaching it to the `__INTERNAL__` key, and\n          // later using that to extract our dereferenced schema. If we didn't do this then we run\n          // the risk of any keyword in `schema` being overriden by `paths` and `components`.\n          //\n          // This solution isn't the best and still requires us to send `json-schema-ref-parser`\n          // basically the entire API defintiion but because we don't know what `$ref` pointers in\n          // `schema` reference, we can't know which parts of full API definition we could safely\n          // exclude from this process.\n          __INTERNAL__: structuredClone(schema),\n          paths: api.paths ?? undefined,\n          components: api.components ?? undefined,\n        },\n        {\n          ...dereferencingOptions,\n          dereference: {\n            ...dereferencingOptions.dereference,\n\n            /**\n             * Because we only want to dereference our `__INTERNAL__` schema, not the **entire**\n             * API definition if the parser attemps to dereference anything but that then we\n             * should bail out of that crawler.\n             *\n             * @fixme this may cause issues where a path references a schema within itself to be ignored.\n             */\n            excludedPathMatcher: (path: string) => {\n              if (path === '#/paths' || path.startsWith('#/paths/')) {\n                return true;\n              }\n              return path === '#/components' || path.startsWith('#/components/');\n            },\n          },\n        },\n      )\n      .then(res => {\n        const dereferenced = res as JSONSchema & {\n          __INTERNAL__: OperationObject;\n          components?: OASDocument['components'];\n        };\n\n        // Refresh the current schema with the newly dereferenced one.\n        this.schema = dereferenced.__INTERNAL__;\n\n        this.promises = promises;\n        this.dereferencing = {\n          processing: false,\n          complete: true,\n          // We need to convert our `Set` to an array in order to match the typings.\n          circularRefs: [...circularRefs],\n        };\n\n        // Used for debugging that dereferencing promise awaiting works.\n        if (opts?.cb) {\n          opts.cb();\n        }\n      })\n      .then(() => {\n        return this.promises.map(deferred => deferred.resolve());\n      })\n      .catch(err => {\n        this.dereferencing.processing = false;\n        this.promises.map(deferred => deferred.reject(err));\n        throw err;\n      });\n  }\n\n  /**\n   * Determine if the current operation schema, or the OpenAPI definition it's part of, has been\n   * dereferenced or not with `.dereference()`.\n   *\n   * @see Operation.dereference\n   */\n  isDereferenced(): boolean {\n    return this.oas.isDereferenced() || this.dereferencing.processing || this.dereferencing.complete;\n  }\n\n  /**\n   * Retrieve any circular `$ref` pointers that maybe present within operation schema.\n   *\n   * This method requires that you first dereference the definition.\n   *\n   * @see Operation.dereference\n   */\n  getCircularReferences(): string[] {\n    if (!this.dereferencing.complete) {\n      throw new Error('.dereference() must be called first in order for this method to obtain circular references.');\n    }\n\n    return this.dereferencing.circularRefs;\n  }\n}\n\nexport class Callback extends Operation {\n  /**\n   * The identifier that this callback is set to.\n   */\n  identifier: string;\n\n  /**\n   * The parent path item object that this Callback exists within.\n   */\n  parentSchema: PathItemObject;\n\n  constructor(\n    oas: Oas,\n    path: string,\n    method: HttpMethods,\n    operation: OperationObject,\n    identifier: string,\n    parentPathItem: PathItemObject,\n  ) {\n    super(oas, path, method, operation);\n\n    this.identifier = identifier;\n    this.parentSchema = parentPathItem;\n  }\n\n  /**\n   * Return the primary identifier for this callback.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#callback-object}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#callback-object}\n   */\n  getIdentifier(): string {\n    return this.identifier;\n  }\n\n  /**\n   * Retrieve the `summary` for this callback.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-operationsummary}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-operation-summary}\n   */\n  getSummary(): string | undefined {\n    if (this.schema?.summary && typeof this.schema.summary === 'string') {\n      return this.schema.summary;\n    } else if (this.parentSchema.summary && typeof this.parentSchema.summary === 'string') {\n      return this.parentSchema.summary;\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Retrieve the `description` for this operation.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-operationdescription}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-operation-description}\n   */\n  getDescription(): string | undefined {\n    if (this.schema?.description && typeof this.schema.description === 'string') {\n      return this.schema.description;\n    } else if (this.parentSchema.description && typeof this.parentSchema.description === 'string') {\n      return this.parentSchema.description;\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Return the parameters (non-request body) on the operation.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-operationparameters}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-operation-parameters}\n   */\n  getParameters(): ParameterObject[] {\n    let parameters = (this.schema?.parameters || [])\n      .map(p => {\n        let param = p;\n        if (isRef(param)) {\n          param = dereferenceRef(param, this.api);\n          if (!param || isRef(param)) return undefined;\n        }\n\n        return param;\n      })\n      .filter((param): param is ParameterObject => param !== undefined);\n\n    const commonParams = (this.parentSchema.parameters || [])\n      .map(p => {\n        let param = p;\n        if (isRef(param)) {\n          param = dereferenceRef(param, this.api);\n          if (!param || isRef(param)) return undefined;\n        }\n\n        return param;\n      })\n      .filter((param): param is ParameterObject => param !== undefined);\n\n    if (commonParams.length) {\n      parameters = parameters.concat(dedupeCommonParameters(parameters, commonParams) || []);\n    }\n\n    return parameters;\n  }\n}\n\nexport class Webhook extends Operation {\n  /**\n   * OpenAPI API Definition that this webhook originated from.\n   */\n  declare api: OAS31Document;\n\n  /**\n   * Retrieve the `summary` for this callback.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-operationsummary}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-operation-summary}\n   */\n  getSummary(): string | undefined {\n    if (this.schema?.summary && typeof this.schema.summary === 'string') {\n      return this.schema.summary;\n    } else if (!this.api.webhooks) {\n      return undefined;\n    }\n\n    let webhookPath = this.api.webhooks[this.path];\n    if (isRef(webhookPath)) {\n      this.api.webhooks[this.path] = dereferenceRef(webhookPath, this.api);\n      webhookPath = this.api.webhooks[this.path];\n    }\n\n    return webhookPath?.summary;\n  }\n\n  /**\n   * Retrieve the `description` for this operation.\n   *\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#user-content-operationdescription}\n   * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.2.md#user-content-operation-description}\n   */\n  getDescription(): string | undefined {\n    if (this.schema?.description && typeof this.schema.description === 'string') {\n      return this.schema.description;\n    } else if (!this.api.webhooks) {\n      return undefined;\n    }\n\n    let webhookPath = this.api.webhooks[this.path];\n    if (isRef(webhookPath)) {\n      this.api.webhooks[this.path] = dereferenceRef(webhookPath, this.api);\n      webhookPath = this.api.webhooks[this.path];\n    }\n\n    return webhookPath?.description;\n  }\n}\n","import type { ParameterObject } from '../../types.js';\n\nimport { isRef } from '../../types.js';\n\n/**\n * With an array of common parameters filter down them to what isn't already present in a list of\n * non-common parameters.\n *\n * @param parameters Array of parameters defined at the operation level.\n * @param commonParameters Array of **common** parameters defined at the path item level.\n */\nexport function dedupeCommonParameters(\n  parameters: ParameterObject[],\n  commonParameters: ParameterObject[],\n): ParameterObject[] {\n  return commonParameters.filter((param: ParameterObject) => {\n    return !parameters.find((param2: ParameterObject) => {\n      if (param.name && param2.name) {\n        return param.name === param2.name && param.in === param2.in;\n      } else if (isRef(param) && isRef(param2)) {\n        return param.$ref === param2.$ref;\n      }\n\n      return false;\n    });\n  });\n}\n","/**\n * This file has been extracted and modified from Swagger UI.\n *\n * @license Apache-2.0\n * @see {@link https://github.com/swagger-api/swagger-ui/blob/master/src/core/plugins/samples/fn.js}\n */\nimport type { OASDocument, SchemaObject } from '../types.js';\n\nimport mergeJSONSchemaAllOf from 'json-schema-merge-allof';\nimport memoize from 'memoizee';\n\nimport { isRef } from '../types.js';\nimport { dereferenceRef } from '../utils.js';\nimport { deeplyStripKey, isFunc, normalizeArray, objectify, usesPolymorphism } from './utils.js';\n\nconst sampleDefaults = (genericSample: boolean | number | string) => {\n  return (schema: SchemaObject): typeof genericSample =>\n    typeof schema.default === typeof genericSample ? schema.default : genericSample;\n};\n\nconst primitives: Record<string, (arg: SchemaObject) => boolean | number | string> = {\n  string: sampleDefaults('string'),\n  string_email: sampleDefaults('user@example.com'),\n  'string_date-time': sampleDefaults(new Date().toISOString()),\n  string_date: sampleDefaults(new Date().toISOString().substring(0, 10)),\n  'string_YYYY-MM-DD': sampleDefaults(new Date().toISOString().substring(0, 10)),\n  string_uuid: sampleDefaults('3fa85f64-5717-4562-b3fc-2c963f66afa6'),\n  string_hostname: sampleDefaults('example.com'),\n  string_ipv4: sampleDefaults('198.51.100.42'),\n  string_ipv6: sampleDefaults('2001:0db8:5b96:0000:0000:426f:8e17:642a'),\n  number: sampleDefaults(0),\n  number_float: sampleDefaults(0.0),\n  integer: sampleDefaults(0),\n  boolean: sampleDefaults(true),\n};\n\nconst primitive = (schema: SchemaObject) => {\n  const objectifiedSchema = objectify(schema);\n  const { format } = objectifiedSchema;\n  let { type } = objectifiedSchema;\n\n  if (type === 'null') {\n    return null;\n  } else if (Array.isArray(type)) {\n    if (type.length === 1) {\n      type = type[0];\n    } else {\n      // If one of our types is `null` then we should generate a sample for the non-null value.\n      if (type.includes('null')) {\n        type = type.filter(t => t !== 'null');\n      }\n\n      type = type.shift();\n    }\n  }\n\n  // @todo add support for if `type` is an array\n  const fn = primitives[`${type}_${format}`] || primitives[type as string];\n  if (isFunc(fn)) {\n    return fn(objectifiedSchema);\n  }\n\n  return `Unknown Type: ${objectifiedSchema.type}`;\n};\n\n/**\n * Generate a piece of sample data from a JSON Schema object. If `example` declarations are present\n * they will be utilized, but generally this will generate fake data for the information present in\n * the schema.\n *\n * @param schema JSON Schema to generate a sample for.\n */\nfunction sampleFromSchema(\n  schema: SchemaObject,\n  opts: {\n    /**\n     * An OpenAPI definition to use when resolving `$ref` pointers.\n     */\n    definition?: OASDocument;\n\n    /**\n     * If you wish to include data that's flagged as `readOnly`.\n     */\n    includeReadOnly?: boolean;\n\n    /**\n     * If you wish to include data that's flatted as `writeOnly`.\n     */\n    includeWriteOnly?: boolean;\n\n    /**\n     * Collection of `$ref` pointers to keep track of when dereferencing schemas here in order to\n     * prevent infinite loops on circular references\n     */\n    seenRefs?: Set<string>;\n  } = {},\n): Record<string, unknown> | unknown[] | boolean | number | string | null | undefined {\n  const seenRefs = opts.seenRefs || new Set<string>();\n  let objectifySchema = objectify(schema);\n\n  // If this is a `$ref` pointer we should make an attempt to resolve it so we can generate a full\n  // sample for this schema.\n  let refToRelease: string | undefined;\n  if (opts.definition && isRef(objectifySchema)) {\n    refToRelease = objectifySchema.$ref;\n    if (seenRefs.has(refToRelease)) {\n      return undefined;\n    }\n\n    objectifySchema = dereferenceRef(objectifySchema, opts.definition, seenRefs);\n    if (!objectifySchema || isRef(objectifySchema)) {\n      return undefined;\n    }\n  }\n\n  try {\n    return sampleFromResolvedSchema(objectifySchema, opts, seenRefs);\n  } finally {\n    // In order to support generating samples from schemas that have circular references we're\n    // releasing our `$ref` from the `seenRefs` store here so, it's re-used again in another\n    // top-level property we're processing, we can generated another sample for it.\n    if (refToRelease) {\n      seenRefs.delete(refToRelease);\n    }\n  }\n}\n\nfunction sampleFromResolvedSchema(\n  schema: Record<string, any>,\n  opts: {\n    definition?: OASDocument;\n    includeReadOnly?: boolean;\n    includeWriteOnly?: boolean;\n    seenRefs?: Set<string>;\n  },\n  seenRefs: Set<string>,\n) {\n  let { type } = schema;\n\n  const hasPolymorphism = usesPolymorphism(schema);\n  if (hasPolymorphism === 'allOf') {\n    try {\n      const definition = opts.definition;\n      const resolvedAllOf = schema.allOf.map((subSchema: SchemaObject) => {\n        let sub = objectify(subSchema);\n        if (definition && isRef(sub)) {\n          // We need to dereference `$ref` pointers before mmerging our schemas together because\n          // `json-schema-merge-allof` does not support `$ref` resolutions.\n          const resolved = dereferenceRef(sub, definition, new Set<string>());\n          if (resolved && !isRef(resolved)) {\n            sub = resolved as SchemaObject;\n          }\n        }\n\n        return sub;\n      });\n\n      return sampleFromSchema(\n        mergeJSONSchemaAllOf(\n          { ...schema, allOf: resolvedAllOf },\n          {\n            resolvers: {\n              // Ignore any unrecognized OAS-specific keywords that might be present on the schema\n              // (like `xml`).\n              defaultResolver: mergeJSONSchemaAllOf.options.resolvers.title,\n            },\n          },\n        ),\n        {\n          ...opts,\n          seenRefs,\n        },\n      );\n    } catch {\n      return undefined;\n    }\n  } else if (hasPolymorphism) {\n    const samples = (schema[hasPolymorphism] as SchemaObject[]).map(s => {\n      return sampleFromSchema(s, { ...opts, seenRefs });\n    });\n\n    if (samples.length === 1) {\n      return samples[0];\n    } else if (samples.some(s => s === null)) {\n      // If one of our samples is null then we should try to surface the first non-null one.\n      return samples.find(s => s !== null);\n    }\n\n    // If we still don't have a sample then we should just return whatever the first sample we've\n    // got is. The sample might not be a _full_ example but it should be enough to act as a sample.\n    return samples[0];\n  }\n\n  const { example, additionalProperties, properties, items } = schema;\n  const { includeReadOnly, includeWriteOnly } = opts;\n\n  if (example !== undefined) {\n    return deeplyStripKey(example, '$$ref', (val: unknown): val is string => {\n      // do a couple of quick sanity tests to ensure the value\n      // looks like a $$ref that swagger-client generates.\n      return typeof val === 'string' && val.indexOf('#') > -1;\n    });\n  }\n\n  if (!type) {\n    if (properties || additionalProperties) {\n      type = 'object';\n    } else if (items) {\n      type = 'array';\n    } else {\n      return undefined;\n    }\n  }\n\n  if (type === 'object' || (Array.isArray(type) && type.includes('object'))) {\n    const props = objectify(properties);\n    const obj: Record<string, any> = {};\n    for (const name in props) {\n      if (props?.[name].deprecated) {\n        continue;\n      }\n\n      if (props?.[name].readOnly && !includeReadOnly) {\n        continue;\n      }\n\n      if (props?.[name].writeOnly && !includeWriteOnly) {\n        continue;\n      }\n\n      if (props[name].examples?.length) {\n        obj[name] = props[name].examples[0];\n        continue;\n      }\n\n      obj[name] = sampleFromSchema(props[name], { ...opts, seenRefs });\n    }\n\n    if (additionalProperties === true) {\n      obj.additionalProp = {};\n    } else if (additionalProperties) {\n      const additionalProps = objectify(additionalProperties);\n      const additionalPropVal = sampleFromSchema(additionalProps, { ...opts, seenRefs });\n\n      obj.additionalProp = additionalPropVal;\n    }\n\n    return obj;\n  }\n\n  if (type === 'array' || (Array.isArray(type) && type.includes('array'))) {\n    // `items` should always be present on arrays, but if it isn't we should at least do our best\n    // to support its absence.\n    if (typeof items === 'undefined') {\n      return [];\n    }\n\n    if (Array.isArray(items.anyOf)) {\n      return items.anyOf.map((i: SchemaObject) =>\n        sampleFromSchema(i, {\n          ...opts,\n          seenRefs,\n        }),\n      );\n    }\n\n    if (Array.isArray(items.oneOf)) {\n      return items.oneOf.map((i: SchemaObject) =>\n        sampleFromSchema(i, {\n          ...opts,\n          seenRefs,\n        }),\n      );\n    }\n\n    return [sampleFromSchema(items, { ...opts, seenRefs })];\n  }\n\n  if (schema.enum) {\n    if (schema.default) {\n      return schema.default;\n    }\n\n    return normalizeArray(schema.enum as string[])[0];\n  }\n\n  if (type === 'file') {\n    return undefined;\n  }\n\n  return primitive(schema);\n}\n\nconst memo: typeof sampleFromSchema = memoize(sampleFromSchema);\n\n// biome-ignore lint/style/noDefaultExport: This is safe for now.\nexport default memo;\n","/**\n * Portions of this file have been extracted and modified from Swagger UI.\n *\n * @license Apache-2.0\n * @see {@link https://github.com/swagger-api/swagger-ui/blob/master/src/core/utils.js}\n */\nimport type { SchemaObject } from '../types.js';\n\nimport { isObject } from '../lib/helpers.js';\n\nexport function usesPolymorphism(schema: SchemaObject): 'allOf' | 'anyOf' | 'oneOf' | false {\n  if (schema.oneOf) {\n    return 'oneOf';\n  } else if (schema.anyOf) {\n    return 'anyOf';\n  } else if (schema.allOf) {\n    return 'allOf';\n  }\n\n  return false;\n}\n\nexport function objectify(thing: Record<string, unknown> | unknown): Record<string, any> {\n  if (!isObject(thing)) {\n    return {};\n  }\n\n  return thing;\n}\n\nexport function normalizeArray(arr: (number | string)[] | number | string): (number | string)[] {\n  if (Array.isArray(arr)) {\n    return arr;\n  }\n\n  return [arr];\n}\n\n// biome-ignore lint/complexity/noBannedTypes: This is part of a type guard.\nexport function isFunc(thing: unknown): thing is Function {\n  return typeof thing === 'function';\n}\n\n// Deeply strips a specific key from an object.\n//\n// `predicate` can be used to discriminate the stripping further,\n// by preserving the key's place in the object based on its value.\n// @todo make this have a better type than `any`\nexport function deeplyStripKey(\n  input: unknown,\n  keyToStrip: string,\n  predicate = (obj: unknown, key?: string): boolean => true,\n): SchemaObject | any {\n  if (typeof input !== 'object' || Array.isArray(input) || input === null || !keyToStrip) {\n    return input;\n  }\n\n  const obj = { ...input } as Record<string, SchemaObject>;\n\n  Object.keys(obj).forEach(k => {\n    if (k === keyToStrip && predicate(obj[k], k)) {\n      delete obj[k];\n      return;\n    }\n\n    obj[k] = deeplyStripKey(obj[k], keyToStrip, predicate);\n  });\n\n  return obj;\n}\n","import type { MediaTypeObject, OASDocument } from '../../types.js';\n\nimport matchesMimeType from '../../lib/matches-mimetype.js';\nimport { collectRefsInSchema, dereferenceRef, dereferenceRefDeep } from '../../lib/refs.js';\nimport sampleFromSchema from '../../samples/index.js';\nimport { isRef } from '../../types.js';\n\nexport interface MediaTypeExample {\n  description?: string;\n  summary?: string;\n  title?: string;\n  value: unknown;\n}\n\n/**\n * Extracts a collection of examples from an OpenAPI Media Type Object. The example will either\n * come from the `example` property, the first item in an `examples` array, or if none of those are\n * present it will generate an example based off its schema.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#media-type-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object}\n * @param mediaType The media type that we're looking for examples for.\n * @param mediaTypeObject The media type object that we're looking for examples for.\n */\nexport function getMediaTypeExamples(\n  mediaType: string,\n  mediaTypeObject: MediaTypeObject,\n  definition: OASDocument,\n  opts: {\n    /**\n     * If you wish to include data that's flagged as `readOnly`.\n     */\n    includeReadOnly?: boolean;\n\n    /**\n     * If you wish to include data that's flatted as `writeOnly`.\n     */\n    includeWriteOnly?: boolean;\n  } = {},\n): MediaTypeExample[] {\n  if (mediaTypeObject.example) {\n    mediaTypeObject.example = dereferenceRefDeep(mediaTypeObject.example, definition);\n\n    // If there is no example or if it contains any `$ref` pointers that we couldn't resolve then\n    // we shouldn't return anything because to the user it'll look like we generated an invalid\n    // example.\n    if (mediaTypeObject.example === undefined || collectRefsInSchema(mediaTypeObject.example).size > 0) {\n      return [];\n    }\n\n    return [\n      {\n        value: mediaTypeObject.example,\n      },\n    ];\n  } else if (mediaTypeObject.examples) {\n    const { examples } = mediaTypeObject;\n    const multipleExamples = Object.keys(examples)\n      .map(key => {\n        let summary: string | undefined = key;\n        let description: string | undefined;\n\n        let example = examples[key];\n        if (example !== null && typeof example === 'object') {\n          if (isRef(example)) {\n            example = dereferenceRef(example, definition);\n            if (!example || isRef(example)) {\n              return false;\n            }\n          }\n\n          if ('summary' in example) {\n            summary = example.summary;\n          }\n\n          if ('description' in example) {\n            description = example.description;\n          }\n\n          if ('value' in example) {\n            example.value = dereferenceRefDeep(example.value, definition);\n\n            // If there is no example value or if it contains any `$ref` pointers that we couldn't\n            // resolve then we shouldn't return anything because to the user it'll look like we\n            // generated an invalid example.\n            if (example.value === undefined || collectRefsInSchema(example.value).size > 0) {\n              return false;\n            }\n\n            example = example.value;\n          }\n        }\n\n        const ret: MediaTypeExample = { summary, title: key, value: example };\n        if (description) {\n          ret.description = description;\n        }\n\n        return ret;\n      })\n      .filter((item): item is MediaTypeExample => item !== false);\n\n    // If we were able to grab examples from the `examples` property return them (`examples` can\n    // sometimes be an empty object), otherwise we should try to generate some instead.\n    if (multipleExamples.length) {\n      return multipleExamples;\n    }\n  }\n\n  if (mediaTypeObject.schema) {\n    // We do not fully support XML so we shouldn't generate XML samples for XML schemas.\n    if (!matchesMimeType.xml(mediaType)) {\n      return [\n        {\n          value: sampleFromSchema(structuredClone(mediaTypeObject.schema), {\n            ...opts,\n            definition,\n          }),\n        },\n      ];\n    }\n  }\n\n  return [];\n}\n","import type { OASDocument, OperationObject } from '../../types.js';\nimport type { MediaTypeExample } from './get-mediatype-examples.js';\n\nimport { dereferenceRef } from '../../lib/refs.js';\nimport { isRef } from '../../types.js';\nimport { getMediaTypeExamples } from './get-mediatype-examples.js';\n\nexport interface ResponseExample {\n  mediaTypes: Record<string, MediaTypeExample[]>;\n  onlyHeaders?: boolean;\n  status: string;\n}\n\n/**\n * Retrieve a collection of response examples keyed, by their media type.\n *\n * @param operation Operation to retrieve response examples for.\n */\nexport function getResponseExamples(operation: OperationObject, definition: OASDocument): ResponseExample[] {\n  return Object.keys(operation.responses || {})\n    .map(status => {\n      let response = operation.responses?.[status];\n      let onlyHeaders = false;\n\n      if (!response) return false;\n      if (isRef(response)) {\n        response = dereferenceRef(response, definition);\n        if (!response || isRef(response)) return false;\n      }\n\n      const mediaTypes: Record<string, MediaTypeExample[]> = {};\n      (response?.content ? Object.keys(response.content) : []).forEach(mediaType => {\n        if (!mediaType) return;\n\n        const mediaTypeObject = response.content?.[mediaType];\n        if (!mediaTypeObject) return;\n\n        const examples = getMediaTypeExamples(mediaType, mediaTypeObject, definition, {\n          includeReadOnly: true,\n          includeWriteOnly: false,\n        });\n\n        if (examples) {\n          mediaTypes[mediaType] = examples;\n        }\n      });\n\n      // If the response has no content, but has headers, hardcode an empty example so the headers\n      // modal will still display\n      if (response.headers && Object.keys(response.headers).length && !Object.keys(mediaTypes).length) {\n        mediaTypes['*/*'] = [];\n        onlyHeaders = true;\n      }\n\n      if (!Object.keys(mediaTypes).length) {\n        return false;\n      }\n\n      return {\n        status,\n        mediaTypes,\n        ...(onlyHeaders ? { onlyHeaders } : {}),\n      };\n    })\n    .filter((item): item is ResponseExample => item !== false);\n}\n","import type { OASDocument, OperationObject } from '../../types.js';\nimport type { ResponseExample } from './get-response-examples.js';\n\nimport { dereferenceRef } from '../../lib/refs.js';\nimport { isRef } from '../../types.js';\nimport { getResponseExamples } from './get-response-examples.js';\n\nexport interface CallbackExample {\n  example: ResponseExample[];\n  expression: string;\n  identifier: string;\n  method: string;\n}\n\n/**\n * With an OpenAPI Operation Object return back a collection of examples for any callbacks that may\n * be present.\n *\n * @param operation Operation to retrieve callback examples from.\n */\nexport function getCallbackExamples(operation: OperationObject, definition: OASDocument): CallbackExample[] {\n  if (!operation.callbacks) {\n    return [];\n  }\n\n  const examples = Object.keys(operation.callbacks).map(identifier => {\n    let callback = operation.callbacks?.[identifier];\n    if (!callback) return [];\n    if (isRef(callback)) {\n      callback = dereferenceRef(callback, definition);\n      if (!callback || isRef(callback)) return [];\n    }\n\n    const items = Object.keys(callback).map(expression => {\n      let callbackPath = callback[expression];\n      if (!callbackPath) return [];\n      if (isRef(callbackPath)) {\n        callbackPath = dereferenceRef(callbackPath, definition);\n        if (!callbackPath || isRef(callbackPath)) return [];\n      }\n\n      return Object.keys(callbackPath).map(method => {\n        if (['servers', 'parameters', 'summary', 'description'].includes(method)) {\n          return false;\n        }\n\n        // This is a `PathItemObject` but `PathItemObject` extends `OperationObject` so this is\n        // fine to force cast.\n        const pathItem = callbackPath as Record<string, OperationObject>;\n        const example = getResponseExamples(pathItem[method], definition);\n        if (!example.length) return false;\n\n        return {\n          identifier,\n          expression,\n          method,\n          example,\n        };\n      });\n    });\n\n    return items.flat().filter(item => item !== false);\n  });\n\n  return examples.flat();\n}\n","import type { Extensions } from '../../extensions.js';\nimport type { DataForHAR } from '../../types.js';\nimport type { Operation } from '../index.js';\nimport type { MediaTypeExample } from './get-mediatype-examples.js';\n\nimport { getExtension } from '../../extensions.js';\nimport { dereferenceRef } from '../../lib/refs.js';\nimport { isRef } from '../../types.js';\n\nexport type ExampleGroups = Record<\n  string,\n  {\n    /**\n     * Array of custom code samples that contain `correspondingExample` key.\n     * Mutually exclusive of `request`. Note that if this object is present,\n     * there may or may not be corresponding responses in the `response` object.\n     */\n    customCodeSamples?: (NonNullable<Extensions['code-samples']>[number] & {\n      /**\n       * The index in the originally defined `code-samples` array\n       */\n      originalIndex: number;\n    })[];\n\n    /**\n     * Title of example group. This is derived from the `summary` field of one of\n     * the operation's example objects. The precedence is as follows (from highest to lowest):\n     * 1. The first custom code sample's `name` field.\n     * 2. The first request parameter (e.g., cookie/header/path/query) example object that\n     *  contains a `summary` field\n     * 3. The request body example object's `summary` field\n     * 4. The response example object's `summary` field\n     *\n     * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#example-object}\n     * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#example-object}\n     */\n    name: string;\n\n    /**\n     * Object containing the example request data for the current example key.\n     * Mutually exclusive of `customCodeSamples`. If `customCodeSamples` is present,\n     * any request example definitions are ignored.\n     */\n    request?: DataForHAR;\n\n    /**\n     * Object containing the example response data for the current example key.\n     */\n    response?: {\n      /**\n       * The content type of the current example\n       *\n       * @example \"application/json\"\n       * @example \"text/plain\"\n       */\n      mediaType: string;\n\n      /**\n       * The entire response example object. The example value itself is contained\n       * within `value`.\n       *\n       * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#example-object}\n       * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#example-object}\n       */\n      mediaTypeExample: MediaTypeExample;\n\n      /**\n       * The HTTP status code for the current response example\n       *\n       * @example \"2xx\"\n       * @example \"400\"\n       */\n      status: string;\n    };\n  }\n>;\n\n/**\n * Internal key to represent custom code samples that do not have a corresponding response example.\n */\nconst noCorrespondingResponseKey = 'NoCorrespondingResponseForCustomCodeSample';\n\n/**\n * Takes a groups object and an operation and adds any matching response examples\n * to existing groups object\n */\nfunction addMatchingResponseExamples(groups: ExampleGroups, operation: Operation) {\n  operation.getResponseExamples().forEach(example => {\n    Object.entries(example.mediaTypes || {}).forEach(([mediaType, mediaTypeExamples]) => {\n      mediaTypeExamples.forEach(mediaTypeExample => {\n        // only add a response example if the `title` field exists\n        // and it matches one of the existing example keys\n        if (mediaTypeExample.title && Object.keys(groups).includes(mediaTypeExample.title)) {\n          groups[mediaTypeExample.title].response = {\n            mediaType,\n            mediaTypeExample,\n            status: example.status,\n          };\n\n          // if the current group doesn't already have a name set,\n          // use the response example object's summary field\n          if (!groups[mediaTypeExample.title].name) {\n            groups[mediaTypeExample.title].name = mediaTypeExample.summary || mediaTypeExample.title;\n          }\n        }\n      });\n    });\n  });\n}\n\n/**\n * Returns a name for the given custom code sample. If there isn't already one defined,\n * we construct a fallback value based on where the sample is in the array.\n */\nfunction getDefaultName(\n  sample: NonNullable<Extensions['code-samples']>[number],\n  count: Record<string, number>,\n): string {\n  return sample.name && sample.name.length > 0\n    ? sample.name\n    : `Default${count[sample.language] > 1 ? ` #${count[sample.language]}` : ''}`;\n}\n\n/**\n * Returns an object with groups of all example definitions (body/header/query/path/response/etc.).\n * The examples are grouped by their key when defined via the `examples` map.\n *\n * Any custom code samples defined via the `x-readme.code-samples` extension are returned,\n * regardless of if they have a matching response example.\n *\n * For standard OAS request parameter (e.g., body/header/query/path/etc.) examples,\n * they are only present in the return object if they have a corresponding response example\n * (i.e., a response example with the same key in the `examples` map).\n */\nexport function getExampleGroups(operation: Operation): ExampleGroups {\n  const namelessCodeSampleCounts: Record<string, number> = {};\n  const groups: ExampleGroups = {};\n\n  // add custom code samples\n  const codeSamples = getExtension('code-samples', operation.api, operation) as Extensions['code-samples'];\n  codeSamples?.forEach((sample, i) => {\n    if (namelessCodeSampleCounts[sample.language]) {\n      namelessCodeSampleCounts[sample.language] += 1;\n    } else {\n      namelessCodeSampleCounts[sample.language] = 1;\n    }\n    const name = getDefaultName(sample, namelessCodeSampleCounts);\n\n    // sample contains `correspondingExample` key\n    if (sample.correspondingExample) {\n      if (groups[sample.correspondingExample]?.customCodeSamples?.length) {\n        // biome-ignore lint/style/noNonNullAssertion: `customCodeSamples` is guaranteed to be an array here.\n        groups[sample.correspondingExample].customCodeSamples!.push({ ...sample, name, originalIndex: i });\n      } else if (sample.correspondingExample) {\n        groups[sample.correspondingExample] = {\n          name,\n          customCodeSamples: [{ ...sample, name, originalIndex: i }],\n        };\n      }\n    }\n\n    // sample does not contain a corresponding response example\n    else if (groups[noCorrespondingResponseKey]?.customCodeSamples?.length) {\n      groups[noCorrespondingResponseKey].customCodeSamples.push({ ...sample, name, originalIndex: i });\n    } else {\n      groups[noCorrespondingResponseKey] = {\n        name,\n        customCodeSamples: [{ ...sample, name, originalIndex: i }],\n      };\n    }\n  });\n\n  // if we added any custom code samples, add the corresponding response examples and return\n  if (Object.keys(groups).length) {\n    addMatchingResponseExamples(groups, operation);\n    return groups;\n  }\n\n  // add request param examples\n  operation.getParameters().forEach(param => {\n    Object.entries(param.examples || {}).forEach(([exampleKey, paramExample]) => {\n      let example = paramExample;\n      if (isRef(example)) {\n        example = dereferenceRef(example, operation.api);\n        if (!example || isRef(example)) return;\n      }\n\n      groups[exampleKey] = {\n        ...groups[exampleKey],\n        name: groups[exampleKey]?.name || example.summary || exampleKey,\n        request: {\n          ...groups[exampleKey]?.request,\n          [param.in]: {\n            ...groups[exampleKey]?.request?.[param.in],\n            [param.name]: example.value,\n          },\n        },\n      };\n    });\n  });\n\n  // add request body examples\n  operation.getRequestBodyExamples().forEach(requestExample => {\n    requestExample.examples.forEach((mediaTypeExample: MediaTypeExample) => {\n      if (mediaTypeExample.title) {\n        const mediaType = requestExample.mediaType === 'application/x-www-form-urlencoded' ? 'formData' : 'body';\n        groups[mediaTypeExample.title] = {\n          ...groups[mediaTypeExample.title],\n          name: groups[mediaTypeExample.title]?.name || mediaTypeExample.summary || mediaTypeExample.title,\n          request: {\n            ...groups[mediaTypeExample.title]?.request,\n            [mediaType]: mediaTypeExample.value,\n          },\n        };\n      }\n    });\n  });\n\n  // if we added any request examples, add the corresponding response examples\n  if (Object.keys(groups).length) {\n    addMatchingResponseExamples(groups, operation);\n  }\n\n  // prune any objects that don't have both a request and a response\n  Object.entries(groups).forEach(([groupId, group]) => {\n    if (group.request && !group.response) {\n      delete groups[groupId];\n    }\n  });\n\n  return groups;\n}\n","import type { OASDocument, OperationObject } from '../../types.js';\nimport type { MediaTypeExample } from './get-mediatype-examples.js';\n\nimport { dereferenceRef } from '../../lib/refs.js';\nimport { isRef } from '../../types.js';\nimport { getMediaTypeExamples } from './get-mediatype-examples.js';\n\nexport interface RequestBodyExample {\n  examples: MediaTypeExample[];\n  mediaType: string;\n}\n\n/**\n * Retrieve a collection of request body examples, keyed by their media type.\n *\n * @param operation Operation to retrieve requestBody examples for.\n */\nexport function getRequestBodyExamples(operation: OperationObject, definition: OASDocument): RequestBodyExample[] {\n  let requestBody = operation.requestBody;\n  if (!requestBody) {\n    return [];\n  } else if (isRef(requestBody)) {\n    requestBody = dereferenceRef(requestBody, definition);\n  }\n\n  // If this request body still can't be resolved then we shouldn't return anything because it's\n  // either an invalid schema or a circular reference.\n  if (!requestBody || isRef(requestBody) || !requestBody.content) {\n    return [];\n  }\n\n  return Object.keys(requestBody.content || {})\n    .map(mediaType => {\n      const mediaTypeObject = requestBody.content[mediaType];\n      const examples = getMediaTypeExamples(mediaType, mediaTypeObject, definition, {\n        includeReadOnly: false,\n        includeWriteOnly: true,\n      });\n\n      if (!examples.length) {\n        return false;\n      }\n\n      return {\n        mediaType,\n        examples,\n      };\n    })\n    .filter((item): item is RequestBodyExample => item !== false);\n}\n","import type { OperationObject } from '../../types.ts';\n\nexport interface OperationIDGeneratorOptions {\n  /**\n   * Generate a JS method-friendly operation ID when one isn't present.\n   *\n   * For backwards compatiblity reasons this option will be indefinitely supported however we\n   * recommend using `friendlyCase` instead as it's a heavily improved version of this option.\n   *\n   * @see {friendlyCase}\n   * @deprecated\n   */\n  camelCase?: boolean;\n\n  /**\n   * Generate a human-friendly, but still camelCase, operation ID when one isn't present. The\n   * difference between this and `camelCase` is that this also ensure that consecutive words are\n   * not present in the resulting ID. For example, for the endpoint `/candidate/{candidate}` will\n   * return `getCandidateCandidate` for `camelCase` however `friendlyCase` will return\n   * `getCandidate`.\n   *\n   * The reason this friendliness is just not a part of the `camelCase` option is because we have\n   * a number of consumers of the old operation ID style and making that change there would a\n   * breaking change that we don't have any easy way to resolve.\n   */\n  friendlyCase?: boolean;\n}\n\n/**\n * Determine if an operation has an `operationId` present in its schema. Note that if one is\n * present in the schema but is an empty string then this will return false.\n *\n */\nexport function hasOperationId(operation: OperationObject): boolean {\n  return Boolean('operationId' in operation && operation.operationId?.length);\n}\n\n/**\n * Get an `operationId` for an operation. If one is not present (it's not required by the spec!)\n * a hash of the path and method will be returned instead.\n *\n */\nexport function getOperationId(\n  path: string,\n  method: string,\n  operation: OperationObject,\n  opts: OperationIDGeneratorOptions = {},\n): string {\n  function sanitize(id: string) {\n    // We aren't sanitizing underscores here by default in order to preserve operation IDs that\n    // were already generated with this method in the past.\n    return id\n      .replace(opts?.camelCase || opts?.friendlyCase ? /[^a-zA-Z0-9_]/g : /[^a-zA-Z0-9]/g, '-') // Remove weird characters\n      .replace(/--+/g, '-') // Remove double --'s\n      .replace(/^-|-$/g, ''); // Don't start or end with -\n  }\n\n  const operationIdExists = hasOperationId(operation);\n  let operationId: string;\n  if (operationIdExists) {\n    // `operationId` has already been guaranteed to be a truthy string by `hasOperationId()`.\n    operationId = operation.operationId as string;\n  } else {\n    operationId = sanitize(path).toLowerCase();\n  }\n\n  const currMethod = method.toLowerCase();\n  if (opts?.camelCase || opts?.friendlyCase) {\n    if (opts?.friendlyCase) {\n      // In order to generate friendlier operation IDs we should swap out underscores with spaces\n      // so the end result will be _slightly_ more camelCase.\n      operationId = operationId.replaceAll('_', ' ');\n\n      if (!operationIdExists) {\n        // In another effort to generate friendly operation IDs we should prevent words from\n        // appearing in consecutive order (eg. `/candidate/{candidate}` should generate\n        // `getCandidate` not `getCandidateCandidate`). However we only want to do this if we're\n        // generating the operation ID as if they intentionally added a consecutive word into the\n        // operation ID then we should respect that.\n        operationId = operationId\n          .replace(/[^a-zA-Z0-9_]+(.)/g, (_, chr) => ` ${chr}`)\n          .split(' ')\n          .filter((word, i, arr) => word !== arr[i - 1])\n          .join(' ');\n      }\n    }\n\n    operationId = operationId.replace(/[^a-zA-Z0-9_]+(.)/g, (_, chr) => chr.toUpperCase());\n    if (operationIdExists) {\n      operationId = sanitize(operationId);\n    }\n\n    // Never start with a number.\n    operationId = operationId.replace(/^[0-9]/g, match => `_${match}`);\n\n    // Ensure that the first character of an `operationId` is always lowercase.\n    operationId = operationId.charAt(0).toLowerCase() + operationId.slice(1);\n\n    // If the generated `operationId` already starts with the method (eg. `getPets`) we don't want\n    // to double it up into `getGetPets`.\n    if (operationId.startsWith(currMethod)) {\n      return operationId;\n    }\n\n    // If this operation already has an `operationId` and we just cleaned it up then we shouldn't\n    // prefix it with an HTTP method.\n    if (operationIdExists) {\n      return operationId;\n    }\n\n    // Because we're merging the `operationId` into an HTTP method we need to reset the first\n    // character of it back to lowercase so we end up with `getBuster`, not `getbuster`.\n    operationId = operationId.charAt(0).toUpperCase() + operationId.slice(1);\n    return `${currMethod}${operationId}`;\n  } else if (operationIdExists) {\n    return operationId;\n  }\n\n  return `${currMethod}_${operationId}`;\n}\n","import type { toJSONSchemaOptions } from '../../lib/openapi-to-json-schema.js';\nimport type { HeaderObject, MediaTypeObject, OASDocument, ResponseObject, SchemaObject } from '../../types.js';\nimport type { Operation } from '../index.js';\n\nimport { applyDiscriminatorOneOfToUsedSchemas } from '../../lib/build-discriminator-one-of.js';\nimport { cloneObject } from '../../lib/clone-object.js';\nimport { isPrimitive } from '../../lib/helpers.js';\nimport matches from '../../lib/matches-mimetype.js';\nimport { getSchemaVersionString, toJSONSchema } from '../../lib/openapi-to-json-schema.js';\nimport { dereferenceRef, filterRequiredRefsToReferenced, mergeReferencedSchemasIntoRoot } from '../../lib/refs.js';\nimport { isRef } from '../../types.js';\n\nexport interface ResponseSchemaObject {\n  description?: string;\n  label: string;\n  schema: SchemaObject;\n  type: string[] | string;\n}\n\nconst isJSON = matches.json;\n\n/**\n * Turn a header map from OpenAPI 3.0 (and some earlier versions too) into a schema.\n *\n * Note: This does not support OpenAPI 3.1's header format.\n *\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#header-object}\n * @see {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.3.md#header-object}\n * @param response Response object to build a JSON Schema object for its headers for.\n * @param schemaOptions Optional options to pass to toJSONSchema (e.g. for ref resolution).\n */\nfunction buildHeadersSchema(response: ResponseObject, schemaOptions: toJSONSchemaOptions) {\n  const headersSchema: SchemaObject = {\n    type: 'object',\n    properties: {},\n  };\n\n  const api = schemaOptions.definition;\n  const seenRefs = schemaOptions.seenRefs ?? new Set<string>();\n\n  if (response.headers) {\n    Object.keys(response.headers).forEach(key => {\n      let headerEntry = response.headers?.[key];\n      if (!headerEntry) return;\n      if (isRef(headerEntry)) {\n        headerEntry = dereferenceRef(headerEntry, api, seenRefs);\n        if (!headerEntry || isRef(headerEntry)) return;\n      }\n\n      if (headerEntry.schema) {\n        const header: HeaderObject = headerEntry;\n\n        let headerSchema = header.schema;\n        if (!headerSchema) return;\n        if (isRef(headerSchema)) {\n          headerSchema = dereferenceRef(headerSchema, api, seenRefs);\n          if (!headerSchema || isRef(headerSchema)) return;\n        }\n\n        // TODO: Response headers are essentially parameters in OAS\n        //    This means they can have content instead of schema.\n        //    We should probably support that in the future\n        // biome-ignore lint/style/noNonNullAssertion: This is guaranteed.\n        headersSchema.properties![key] = toJSONSchema(cloneObject(headerSchema), {\n          addEnumsToDescriptions: true,\n          ...schemaOptions,\n        });\n\n        if (header.description) {\n          // biome-ignore lint/style/noNonNullAssertion: This is guaranteed.\n          headersSchema.properties![key].description = header.description;\n        }\n      }\n    });\n  }\n\n  const headersWrapper: {\n    description?: string;\n    label: string;\n    schema: SchemaObject;\n    type: string;\n  } = {\n    schema: headersSchema,\n    type: 'object',\n    label: 'Headers',\n  };\n\n  if (response.description && headersWrapper.schema) {\n    headersWrapper.description = response.description;\n  }\n\n  return headersWrapper;\n}\n\n/**\n * Extract all the response schemas, matching the format of `get-parameters-as-json-schema`.\n *\n * This automatically resolves `$ref` pointers on the fly and attaches used schemas as components\n * within the generated JSON Schema object.\n *\n * @param operation Operation to construct a response JSON Schema for.\n * @param api The OpenAPI definition that this operation originates.\n * @param statusCode The response status code to generate a schema for.\n * @param opts Options for schema generation.\n * @param opts.contentType Optional content-type to use. If specified and the response doesn't have\n *   this content-type, the function will return null.\n */\nexport function getResponseAsJSONSchema(\n  operation: Operation,\n  api: OASDocument,\n  statusCode: number | string,\n  opts?: {\n    includeDiscriminatorMappingRefs?: boolean;\n    /**\n     * Optional content-type to use. If specified and the response doesn't have this content-type,\n     * the function will return null.\n     */\n    contentType?: string;\n  },\n): ResponseSchemaObject[] | null {\n  const response = operation.getResponseByStatusCode(statusCode);\n  const jsonSchema: ResponseSchemaObject[] = [];\n\n  if (!response) {\n    return null;\n  }\n\n  const usedSchemas = new Map<string, SchemaObject>();\n  const seenRefs = new Set<string>();\n  const refsByGroup = new Map<'body' | 'headers', Set<string>>();\n\n  function refLoggerForSchemaGroup(group: 'body' | 'headers'): Set<string> {\n    let set = refsByGroup.get(group);\n    if (!set) {\n      set = new Set();\n      refsByGroup.set(group, set);\n    }\n    return set;\n  }\n\n  const baseSchemaOptions: toJSONSchemaOptions = {\n    addEnumsToDescriptions: true,\n    definition: api,\n    seenRefs,\n    usedSchemas,\n    refLogger: ref => refLoggerForSchemaGroup('body').add(ref),\n  };\n\n  /**\n   * @param content An array of `MediaTypeObject`'s to retrieve a preferred schema out of. We\n   *    prefer JSON media types.\n   * @param preferredContentType Optional content-type to use. If specified and not found, returns null.\n   */\n  function getPreferredSchema(content: Record<string, MediaTypeObject> | undefined, preferredContentType?: string) {\n    if (!content) {\n      return null;\n    }\n\n    const contentTypes = Object.keys(content);\n    if (!contentTypes.length) {\n      return null;\n    }\n\n    // If a specific content-type is requested, use it if it exists\n    if (preferredContentType) {\n      if (contentTypes.includes(preferredContentType)) {\n        const schema = cloneObject(content[preferredContentType].schema);\n        if (!schema) {\n          return null;\n        }\n\n        return toJSONSchema(schema, baseSchemaOptions);\n      }\n\n      // Requested `content-type` not found, return null\n      return null;\n    }\n\n    // Default behavior: prefer JSON media types\n    for (let i = 0; i < contentTypes.length; i++) {\n      if (isJSON(contentTypes[i])) {\n        const schema = cloneObject(content[contentTypes[i]].schema);\n        if (!schema) {\n          return {};\n        }\n\n        return toJSONSchema(schema, baseSchemaOptions);\n      }\n    }\n\n    // We always want to prefer the JSON-compatible content types over everything else but if we\n    // haven't found one we should default to the first available.\n    const contentType = contentTypes.shift();\n    if (!contentType) {\n      return {};\n    }\n\n    const schema = cloneObject(content[contentType].schema);\n    if (!schema) {\n      return {};\n    }\n\n    return toJSONSchema(schema, baseSchemaOptions);\n  }\n\n  const foundSchema = getPreferredSchema(response.content, opts?.contentType);\n\n  // If a specific content-type was requested but not found, return null immediately\n  if (opts?.contentType && !foundSchema) {\n    return null;\n  }\n\n  if (foundSchema) {\n    const schema = structuredClone(foundSchema);\n    let schemaType = foundSchema.type;\n\n    // If our found schema is a `$ref` pointer then we should try to resolve its type so we can\n    // surface that to the root schema as its overall `type`.\n    if (schemaType === undefined && isRef(foundSchema) && usedSchemas.size > 0) {\n      const resolvedSchema = usedSchemas.get(foundSchema.$ref);\n      const resolvedType =\n        resolvedSchema && typeof resolvedSchema === 'object' && 'type' in resolvedSchema\n          ? resolvedSchema.type\n          : undefined;\n\n      schemaType = Array.isArray(resolvedType) ? resolvedType[0] : resolvedType;\n    }\n\n    const schemaWrapper: {\n      description?: string;\n      label: string;\n      schema: SchemaObject;\n      type: string[] | string;\n    } = {\n      // If there's no `type` then the root schema is a circular `$ref` that we likely won't be\n      // able to render so instead of generating a JSON Schema with an `undefined` type we should\n      // default to `string` so there's at least *something* the end-user can interact with.\n      type: schemaType ?? 'string',\n      schema: isPrimitive(schema)\n        ? schema\n        : {\n            ...schema,\n            $schema: getSchemaVersionString(schema, api),\n          },\n      label: 'Response body',\n    };\n\n    if (response.description && schemaWrapper.schema) {\n      schemaWrapper.description = response.description;\n    }\n\n    // Apply discriminator `oneOf` to used schemas.\n    applyDiscriminatorOneOfToUsedSchemas(api, usedSchemas, (ref: string) => {\n      if (usedSchemas.has(ref)) {\n        return usedSchemas.get(ref);\n      }\n\n      try {\n        const resolved = dereferenceRef({ $ref: ref }, api, seenRefs);\n        if (isRef(resolved)) return undefined;\n        const converted = toJSONSchema(structuredClone(resolved), {\n          ...baseSchemaOptions,\n          seenRefs,\n        });\n\n        usedSchemas.set(ref, converted);\n        return converted;\n      } catch {\n        return undefined;\n      }\n    });\n\n    // Include only schemas that are still referenced in the output; merge them into the root at their ref paths.\n    if (schemaWrapper.schema && usedSchemas.size > 0) {\n      const refsInGroup = refsByGroup.get('body') ?? new Set<string>();\n      const referencedSchemas = filterRequiredRefsToReferenced(refsInGroup, usedSchemas);\n\n      if (referencedSchemas.size > 0) {\n        mergeReferencedSchemasIntoRoot(schemaWrapper.schema, referencedSchemas);\n      }\n    }\n\n    jsonSchema.push(schemaWrapper);\n  }\n\n  // 3.0.3 and earlier headers. TODO: New format for 3.1.0\n  if (response.headers) {\n    const headersWrapper = buildHeadersSchema(response, {\n      ...baseSchemaOptions,\n      refLogger: ref => refLoggerForSchemaGroup('headers').add(ref),\n    });\n\n    if (headersWrapper.schema && usedSchemas.size > 0) {\n      const refsInGroup = refsByGroup.get('headers') ?? new Set();\n      const referencedSchemas = filterRequiredRefsToReferenced(refsInGroup, usedSchemas);\n\n      if (referencedSchemas.size > 0) {\n        mergeReferencedSchemasIntoRoot(headersWrapper.schema, referencedSchemas);\n      }\n    }\n\n    jsonSchema.push(headersWrapper);\n  }\n\n  return jsonSchema.length ? jsonSchema : null;\n}\n"]}