{"version":3,"file":"index.cjs","names":["BaseOas","oas","options: Options","#options","$ref: string","value: unknown","schema: OasTypes.SchemaObject","schema","refSchema: OpenAPIV3.SchemaObject","schema?: unknown","responseBody: boolean | ResponseObject","availablecontentType: string | undefined","mt: string","matchesMimeType","operation: Operation","statusCode: string | number","#getResponseBodyFactory","inKey: 'path' | 'query' | 'header'","OASNormalize","doc: any","obj: ParameterObject | SchemaObject","schema?: SchemaObject & { 'x-nullable'?: boolean }","obj?: any","schema?: SchemaObject","pathOrApi: string | OASDocument","OASNormalize","pathOrApi: Array<string | OASDocument>"],"sources":["../src/types.ts","../src/Oas.ts","../src/utils.ts"],"sourcesContent":["import type * as OasTypes from 'oas/types'\n\n// external packages\nexport type { Operation } from 'oas/operation'\nexport type { HttpMethods as HttpMethod } from 'oas/types'\nexport type * as OasTypes from 'oas/types'\nexport type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types'\n\nexport type contentType = 'application/json' | (string & {})\n\nexport type SchemaObject = OasTypes.SchemaObject & {\n  'x-nullable'?: boolean\n  $ref?: string\n}\n\nexport const HttpMethods = {\n  GET: 'get',\n  POST: 'post',\n  PUT: 'put',\n  PATCH: 'patch',\n  DELETE: 'delete',\n  HEAD: 'head',\n  OPTIONS: 'options',\n  TRACE: 'trace',\n} satisfies Record<Uppercase<OasTypes.HttpMethods>, OasTypes.HttpMethods>\n","import jsonpointer from 'jsonpointer'\nimport BaseOas from 'oas'\nimport type { Operation } from 'oas/operation'\nimport type { MediaTypeObject, OASDocument, ResponseObject, SchemaObject, User } from 'oas/types'\nimport { matchesMimeType } from 'oas/utils'\nimport OASNormalize from 'oas-normalize'\nimport type { OpenAPIV3 } from 'openapi-types'\nimport type { OasTypes } from './index.ts'\nimport type { contentType } from './types.ts'\nimport { isDiscriminator, isReference } from './utils.ts'\n\ntype Options = {\n  contentType?: contentType\n  discriminator?: 'strict' | 'inherit'\n}\n\nexport class Oas<const TOAS = unknown> extends BaseOas {\n  #options: Options = {\n    discriminator: 'strict',\n  }\n  document: TOAS = undefined as unknown as TOAS\n\n  constructor({ oas, user }: { oas: TOAS | OASDocument | string; user?: User }) {\n    if (typeof oas === 'string') {\n      oas = JSON.parse(oas)\n    }\n\n    super(oas as OASDocument, user)\n\n    this.document = oas as TOAS\n  }\n\n  setOptions(options: Options) {\n    this.#options = options\n  }\n\n  get options(): Options {\n    return this.#options\n  }\n\n  get($ref: string) {\n    const origRef = $ref\n    $ref = $ref.trim()\n    if ($ref === '') {\n      return false\n    }\n    if ($ref.startsWith('#')) {\n      $ref = globalThis.decodeURIComponent($ref.substring(1))\n    } else {\n      return null\n    }\n    const current = jsonpointer.get(this.api, $ref)\n\n    if (!current) {\n      throw new Error(`Could not find a definition for ${origRef}.`)\n    }\n    return current\n  }\n\n  getKey($ref: string) {\n    const key = $ref.split('/').pop()\n    return key === '' ? undefined : key\n  }\n  set($ref: string, value: unknown) {\n    $ref = $ref.trim()\n    if ($ref === '') {\n      return false\n    }\n    if ($ref.startsWith('#')) {\n      $ref = globalThis.decodeURIComponent($ref.substring(1))\n\n      jsonpointer.set(this.api, $ref, value)\n    }\n  }\n\n  getDiscriminator(schema: OasTypes.SchemaObject): OpenAPIV3.DiscriminatorObject | undefined {\n    if (!isDiscriminator(schema)) {\n      return undefined\n    }\n\n    const { mapping = {}, propertyName } = schema.discriminator\n\n    if (this.#options.discriminator === 'inherit') {\n      Object.entries(mapping).forEach(([mappingKey, mappingValue]) => {\n        if (mappingValue) {\n          const childSchema = this.get(mappingValue)\n          if (!childSchema.properties) {\n            childSchema.properties = {}\n          }\n\n          const property = childSchema.properties[propertyName] as SchemaObject\n\n          if (childSchema.properties) {\n            childSchema.properties[propertyName] = {\n              ...(childSchema.properties ? childSchema.properties[propertyName] : {}),\n              enum: [...(property?.enum?.filter((value) => value !== mappingKey) ?? []), mappingKey],\n            }\n\n            childSchema.required = [...(childSchema.required ?? []), propertyName]\n\n            this.set(mappingValue, childSchema)\n          }\n        }\n      })\n    }\n\n    // loop over oneOf and add default mapping when none is defined\n    if (schema.oneOf) {\n      schema.oneOf.forEach((schema) => {\n        if (isReference(schema)) {\n          const key = this.getKey(schema.$ref)\n          const refSchema: OpenAPIV3.SchemaObject = this.get(schema.$ref)\n          // special case where enum in the schema is set without mapping being defined, see https://github.com/kubb-labs/kubb/issues/1669\n          const propertySchema = refSchema.properties?.[propertyName] as OpenAPIV3.SchemaObject\n          const canAdd = key && !Object.values(mapping).includes(schema.$ref)\n\n          if (canAdd && propertySchema?.enum?.length === 1) {\n            mapping[propertySchema.enum[0]] = schema.$ref\n          } else if (canAdd) {\n            mapping[key] = schema.$ref\n          }\n        }\n      })\n    }\n\n    if (schema.anyOf) {\n      schema.anyOf.forEach((schema) => {\n        if (isReference(schema)) {\n          const key = this.getKey(schema.$ref)\n          const refSchema: OpenAPIV3.SchemaObject = this.get(schema.$ref)\n          // special case where enum in the schema is set without mapping being defined, see https://github.com/kubb-labs/kubb/issues/1669\n          const propertySchema = refSchema.properties?.[propertyName] as OpenAPIV3.SchemaObject\n          const canAdd = key && !Object.values(mapping).includes(schema.$ref)\n\n          if (canAdd && propertySchema?.enum?.length === 1) {\n            mapping[propertySchema.enum[0]] = schema.$ref\n          } else if (canAdd) {\n            mapping[key] = schema.$ref\n          }\n        }\n      })\n    }\n\n    return {\n      ...schema.discriminator,\n      mapping,\n    }\n  }\n\n  // TODO add better typing\n  dereferenceWithRef(schema?: unknown) {\n    if (isReference(schema)) {\n      return {\n        ...schema,\n        ...this.get(schema.$ref),\n        $ref: schema.$ref,\n      }\n    }\n\n    return schema\n  }\n\n  /**\n   * Oas does not have a getResponseBody(contentType)\n   */\n  #getResponseBodyFactory(responseBody: boolean | ResponseObject): (contentType?: string) => MediaTypeObject | false | [string, MediaTypeObject, ...string[]] {\n    function hasResponseBody(res = responseBody): res is ResponseObject {\n      return !!res\n    }\n\n    return (contentType) => {\n      if (!hasResponseBody(responseBody)) {\n        return false\n      }\n\n      if (isReference(responseBody)) {\n        // If the request body is still a `$ref` pointer we should return false because this library\n        // assumes that you've run dereferencing beforehand.\n        return false\n      }\n\n      if (!responseBody.content) {\n        return false\n      }\n\n      if (contentType) {\n        if (!(contentType in responseBody.content)) {\n          return false\n        }\n\n        return responseBody.content[contentType]!\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 availablecontentType: string | undefined\n      const contentTypes = Object.keys(responseBody.content)\n      contentTypes.forEach((mt: string) => {\n        if (!availablecontentType && matchesMimeType.json(mt)) {\n          availablecontentType = mt\n        }\n      })\n\n      if (!availablecontentType) {\n        contentTypes.forEach((mt: string) => {\n          if (!availablecontentType) {\n            availablecontentType = mt\n          }\n        })\n      }\n\n      if (availablecontentType) {\n        return [availablecontentType, responseBody.content[availablecontentType]!, ...(responseBody.description ? [responseBody.description] : [])]\n      }\n\n      return false\n    }\n  }\n\n  getResponseSchema(operation: Operation, statusCode: string | number): SchemaObject {\n    if (operation.schema.responses) {\n      Object.keys(operation.schema.responses).forEach((key) => {\n        const schema = operation.schema.responses![key]\n        const $ref = isReference(schema) ? schema.$ref : undefined\n\n        if (schema && $ref) {\n          operation.schema.responses![key] = this.get($ref)\n        }\n      })\n    }\n\n    const getResponseBody = this.#getResponseBodyFactory(operation.getResponseByStatusCode(statusCode))\n\n    const { contentType } = this.#options\n    const responseBody = getResponseBody(contentType)\n\n    if (responseBody === false) {\n      // return empty object because response will always be defined(request does not need a body)\n      return {}\n    }\n\n    const schema = Array.isArray(responseBody) ? responseBody[1].schema : responseBody.schema\n\n    if (!schema) {\n      // return empty object because response will always be defined(request does not need a body)\n\n      return {}\n    }\n\n    return this.dereferenceWithRef(schema)\n  }\n\n  getRequestSchema(operation: Operation): SchemaObject | undefined {\n    const { contentType } = this.#options\n\n    if (operation.schema.requestBody) {\n      operation.schema.requestBody = this.dereferenceWithRef(operation.schema.requestBody)\n    }\n\n    const requestBody = operation.getRequestBody(contentType)\n\n    if (requestBody === false) {\n      return undefined\n    }\n\n    const schema = Array.isArray(requestBody) ? requestBody[1].schema : requestBody.schema\n\n    if (!schema) {\n      return undefined\n    }\n\n    return this.dereferenceWithRef(schema)\n  }\n\n  getParametersSchema(operation: Operation, inKey: 'path' | 'query' | 'header'): SchemaObject | null {\n    const { contentType = operation.getContentType() } = this.#options\n    const params = operation\n      .getParameters()\n      .map((schema) => {\n        return this.dereferenceWithRef(schema)\n      })\n      .filter((v) => v.in === inKey)\n\n    if (!params.length) {\n      return null\n    }\n\n    return params.reduce(\n      (schema, pathParameters) => {\n        const property = pathParameters.content?.[contentType]?.schema ?? (pathParameters.schema as SchemaObject)\n        const required = [...(schema.required || ([] as any)), pathParameters.required ? pathParameters.name : undefined].filter(Boolean)\n\n        return {\n          ...schema,\n          description: schema.description,\n          deprecated: schema.deprecated,\n          example: schema.example,\n          required,\n          properties: {\n            ...schema.properties,\n            [pathParameters.name]: {\n              description: pathParameters.description,\n              ...property,\n            },\n          },\n        }\n      },\n      { type: 'object', required: [], properties: {} } as SchemaObject,\n    )\n  }\n\n  async valdiate() {\n    const oasNormalize = new OASNormalize(this.api, {\n      enablePaths: true,\n      colorizeErrors: true,\n    })\n\n    return oasNormalize.validate({\n      parser: {\n        validate: {\n          errors: {\n            colorize: true,\n          },\n        },\n      },\n    })\n  }\n}\n","import type { OASDocument, ParameterObject, SchemaObject } from 'oas/types'\nimport { isRef, isSchema } from 'oas/types'\nimport OASNormalize from 'oas-normalize'\nimport type { OpenAPI, OpenAPIV2, OpenAPIV3, OpenAPIV3_1 } from 'openapi-types'\nimport { isPlainObject, mergeDeep } from 'remeda'\nimport swagger2openapi from 'swagger2openapi'\nimport { Oas } from './Oas.ts'\n\nexport function isOpenApiV2Document(doc: any): doc is OpenAPIV2.Document {\n  return doc && isPlainObject(doc) && !('openapi' in doc)\n}\nexport function isOpenApiV3Document(doc: any): doc is OpenAPIV3.Document {\n  return doc && isPlainObject(doc) && 'openapi' in doc\n}\n\nexport function isOpenApiV3_1Document(doc: any): doc is OpenAPIV3_1.Document {\n  return doc && isPlainObject<OpenAPIV3_1.Document>(doc) && 'openapi' in doc && doc.openapi.startsWith('3.1')\n}\n\nexport function isJSONSchema(obj?: unknown): obj is SchemaObject {\n  return !!obj && isSchema(obj)\n}\n\nexport function isParameterObject(obj: ParameterObject | SchemaObject): obj is ParameterObject {\n  return obj && 'in' in obj\n}\n\n/**\n * Determines if a schema is nullable, considering both the standard `nullable` property and the legacy `x-nullable` extension.\n *\n * @param schema - The schema object to check.\n * @returns `true` if the schema is marked as nullable; otherwise, `false`.\n */\nexport function isNullable(schema?: SchemaObject & { 'x-nullable'?: boolean }): boolean {\n  return schema?.nullable ?? schema?.['x-nullable'] ?? false\n}\n\n/**\n * Determines if the given object is an OpenAPI ReferenceObject.\n *\n * @returns True if {@link obj} is a ReferenceObject; otherwise, false.\n */\nexport function isReference(obj?: any): obj is OpenAPIV3.ReferenceObject | OpenAPIV3_1.ReferenceObject {\n  return !!obj && isRef(obj)\n}\n\n/**\n * Determines if the given object is a SchemaObject with a discriminator property of type DiscriminatorObject.\n *\n * @returns True if {@link obj} is a SchemaObject containing a non-string {@link discriminator} property.\n */\nexport function isDiscriminator(obj?: any): obj is SchemaObject & { discriminator: OpenAPIV3.DiscriminatorObject } {\n  return !!obj && obj?.['discriminator'] && typeof obj.discriminator !== 'string'\n}\n\n/**\n * Determines whether a schema is required.\n *\n * Returns true if the schema has a non-empty {@link SchemaObject.required} array or a truthy {@link SchemaObject.required} property.\n *\n * @param schema - The schema object to check.\n * @returns True if the schema is required; otherwise, false.\n */\nexport function isRequired(schema?: SchemaObject): boolean {\n  if (!schema) {\n    return false\n  }\n\n  return Array.isArray(schema.required) ? !!schema.required?.length : !!schema.required\n}\n\nexport function isOptional(schema?: SchemaObject): boolean {\n  return !isRequired(schema)\n}\n\nexport async function parse(\n  pathOrApi: string | OASDocument,\n  { oasClass = Oas, canBundle = true, enablePaths = true }: { oasClass?: typeof Oas; canBundle?: boolean; enablePaths?: boolean } = {},\n): Promise<Oas> {\n  const { loadConfig, bundle } = await import('@redocly/openapi-core')\n\n  if (typeof pathOrApi === 'string' && canBundle) {\n    // resolve external refs\n    const config = await loadConfig()\n    const bundleResults = await bundle({ ref: pathOrApi, config, base: pathOrApi })\n\n    return parse(bundleResults.bundle.parsed as string)\n  }\n\n  const oasNormalize = new OASNormalize(pathOrApi, {\n    enablePaths,\n    colorizeErrors: true,\n  })\n  const document = (await oasNormalize.load()) as OpenAPI.Document\n\n  if (isOpenApiV2Document(document)) {\n    const { openapi } = await swagger2openapi.convertObj(document, {\n      anchors: true,\n    })\n\n    return new oasClass({ oas: openapi as OASDocument })\n  }\n\n  return new oasClass({ oas: document })\n}\n\nexport async function merge(pathOrApi: Array<string | OASDocument>, { oasClass = Oas }: { oasClass?: typeof Oas } = {}): Promise<Oas> {\n  const instances = await Promise.all(pathOrApi.map((p) => parse(p, { oasClass, enablePaths: false, canBundle: false })))\n\n  if (instances.length === 0) {\n    throw new Error('No OAS instances provided for merging.')\n  }\n\n  const merged = instances.reduce(\n    (acc, current) => {\n      return mergeDeep(acc, current.document as OASDocument)\n    },\n    {\n      openapi: '3.0.0',\n      info: {\n        title: 'Merged API',\n        version: '1.0.0',\n      },\n      paths: {},\n      components: {\n        schemas: {},\n      },\n    } as any,\n  )\n\n  return parse(merged, { oasClass })\n}\n"],"mappings":"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"}