UNPKG

oas

Version:

Comprehensive tooling for working with OpenAPI definitions

1 lines 126 kB
{"version":3,"sources":["/Users/erunion/code/readme/oas/packages/oas/dist/chunk-2X4PY2BS.cjs","../src/lib/matches-mimetype.ts","../src/lib/get-parameter-content-type.ts","../src/lib/refs.ts","../src/lib/helpers.ts","../src/lib/clone-object.ts","../src/lib/build-discriminator-one-of.ts","../src/lib/openapi-to-json-schema.ts","../src/operation/transformers/get-parameters-as-json-schema.ts","../src/utils.ts"],"names":["types","converted","schema"],"mappings":"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","file":"/Users/erunion/code/readme/oas/packages/oas/dist/chunk-2X4PY2BS.cjs","sourcesContent":[null,"function matchesMediaType(types: string[], mediaType: string): boolean {\n return types.some(type => {\n return mediaType.indexOf(type) > -1;\n });\n}\n\nexport default {\n formUrlEncoded: (mimeType: string): boolean => {\n return matchesMediaType(['application/x-www-form-urlencoded'], mimeType);\n },\n\n json: (contentType: string): boolean => {\n return matchesMediaType(\n ['application/json', 'application/x-json', 'text/json', 'text/x-json', '+json'],\n contentType,\n );\n },\n\n multipart: (contentType: string): boolean => {\n return matchesMediaType(\n ['multipart/mixed', 'multipart/related', 'multipart/form-data', 'multipart/alternative'],\n contentType,\n );\n },\n\n wildcard: (contentType: string): boolean => {\n return contentType === '*/*';\n },\n\n xml: (contentType: string): boolean => {\n return matchesMediaType(\n [\n 'application/xml',\n 'application/xml-external-parsed-entity',\n 'application/xml-dtd',\n 'text/xml',\n 'text/xml-external-parsed-entity',\n '+xml',\n ],\n contentType,\n );\n },\n};\n","import matchesMimetype from './matches-mimetype.js';\n\n/**\n * Selects a content type from an array of content type keys, prioritizing `application/json`\n * and other JSON-like content types over other content types.\n *\n * When multiple content types are present:\n * - If there's exactly one content type, it's returned\n * - If there are multiple content types, JSON-like content types (e.g., `application/json`,\n * `application/vnd.api+json`) are prioritized\n * - If no JSON-like content types are present, the first content type is returned\n *\n * @param contentKeys - Array of content type keys (e.g., ['application/json', 'application/xml'])\n * @returns The selected content type, or undefined if the array is empty\n */\nexport function getParameterContentType(contentKeys: string[]): string | undefined {\n if (contentKeys.length === 0) {\n return undefined;\n }\n\n if (contentKeys.length === 1) {\n return contentKeys[0];\n }\n\n // We should always try to prioritize `application/json` over any other possible\n // content that might be present on this schema.\n const jsonLikeContentTypes = contentKeys.filter(k => matchesMimetype.json(k));\n if (jsonLikeContentTypes.length) {\n return jsonLikeContentTypes[0];\n }\n\n return contentKeys[0];\n}\n","import type { OASDocument, SchemaObject } from '../types.js';\nimport type { ParserOptions } from '@readme/openapi-parser';\n\nimport jsonpointer from 'jsonpointer';\n\nimport { isRef } from '../types.js';\n\nimport { isPrimitive } from './helpers.js';\n\n/**\n * Decorate component schemas within the API definition with a `x-readme-ref-name` property so we\n * can retin their original schema names during dereferencing or `$ref` resolution operations.\n *\n */\nexport function decorateComponentSchemasWithRefName(api: OASDocument): void {\n if (!api?.components?.schemas || typeof api.components.schemas !== 'object') {\n return;\n }\n\n Object.keys(api.components.schemas).forEach(schemaName => {\n // As of OpenAPI 3.1 component schemas can be primitives or arrays. If this happens then we\n // shouldn't try to add `x-readme-ref-name` properties because we can't. We'll have some data\n // loss on these schemas but as they aren't objects they likely won't be used in ways that\n // would require needing a `title` or `x-readme-ref-name` anyways.\n if (\n isPrimitive(api.components?.schemas?.[schemaName]) ||\n Array.isArray(api.components?.schemas?.[schemaName]) ||\n api.components?.schemas?.[schemaName] === null\n ) {\n return;\n }\n\n // oxlint-disable-next-line no-unsafe-optional-chaining\n (api.components?.schemas?.[schemaName] as SchemaObject)['x-readme-ref-name'] = schemaName;\n });\n}\n\n/**\n * Encode a string to be used as a JSON pointer.\n *\n * @see {@link https://tools.ietf.org/html/rfc6901}\n * @param str String to encode into string that can be used as a JSON pointer.\n */\nexport function encodePointer(str: string): string {\n return str.replaceAll('~', '~0').replaceAll('/', '~1');\n}\n\n/**\n * Decode a JSON pointer string.\n *\n * Per RFC 6901, `~0` is unescaped to `~` and `~1` to `/`. A single-pass replacement is required:\n * the sequence `~01` must decode to `~1` (tilde then one), not `~/`. Replacing `~1` before `~0`\n * would incorrectly turn `~01` into `~/`.\n *\n * @see {@link https://tools.ietf.org/html/rfc6901}\n * @param str String to decode a JSON pointer from\n */\nexport function decodePointer(str: string): string {\n return str.replace(/~([01])/g, (_, digit) => (digit === '0' ? '~' : '/'));\n}\n\n/**\n * Lookup a reference pointer within an a JSON object and return the schema that it resolves to.\n *\n * @param $ref Reference to look up a schema for.\n * @param definition OpenAPI definition to look for the `$ref` pointer in.\n */\nfunction findRef($ref: string, definition: OASDocument | SchemaObject): any {\n let currRef = $ref.trim();\n if (currRef === '') {\n // If this ref is empty, don't bother trying to look for it.\n return false;\n }\n\n if (currRef.startsWith('#')) {\n // Decode URI fragment representation.\n currRef = decodeURIComponent(currRef.substring(1));\n } else {\n throw new Error(`Could not find a definition for ${$ref}.`);\n }\n\n const current = jsonpointer.get(definition, currRef);\n if (current === undefined) {\n throw new Error(`Could not find a definition for ${$ref}.`);\n }\n\n return current;\n}\n\n/**\n * Dereference a `$ref` pointer if present, otherwise return the value as-is.\n *\n * This function handles `$ref` pointers on-the-fly without requiring full dereferencing and\n * prevents infinite loops by tracking seen `$ref` pointers and not re-processing circular\n * references.\n *\n * @param value The value that may contain a `$ref` pointer.\n * @param definition OpenAPI definition to look for the `$ref` pointer in.\n * @param seenRefs Optional Set to track `$ref` pointers that have already been processed to prevent circular references.\n * @returns The dereferenced value if it was a `$ref`, otherwise the original value. Returns the original `$ref` if it's circular.\n */\nexport function dereferenceRef<T>(\n value: T,\n definition?: OASDocument | SchemaObject,\n seenRefs: Set<string> = new Set<string>(),\n): T {\n if (value === undefined) {\n return undefined as T;\n }\n\n if (isRef(value)) {\n if (!definition) {\n return value as T;\n }\n\n const ref = value.$ref;\n\n // If we've seen this `$ref` before then it's circular and we should return the original `$ref`\n // to prevent infinite loops\n if (seenRefs.has(ref)) {\n return value as T;\n }\n\n // Track this `$ref` as having been seen so we can avoid infinitely processing circular\n // references.\n seenRefs.add(ref);\n\n try {\n const dereferenced = findRef(ref, definition);\n\n // If the dereferenced value is itself a `$ref` then recursively dereference it (but with\n // `seenRefs` tracking).\n if (isRef(dereferenced)) {\n return dereferenceRef(dereferenced, definition, seenRefs) as T;\n }\n\n return {\n ...dereferenced,\n } as T;\n } catch {\n // If dereferencing fails return the original `$ref`.\n return value as T;\n }\n }\n\n return value;\n}\n\n/**\n * Recursively resolve `$ref` pointers inside a given schema.\n *\n * Uses the same `seenRefs` logic as `dereferenceRef` for protection against circular references.\n *\n * @see {@link dereferenceRef}\n */\nexport function dereferenceRefDeep<T>(\n value: T,\n definition?: OASDocument | SchemaObject,\n seenRefs: Set<string> = new Set<string>(),\n): T {\n if (value === null || value === undefined) return value;\n if (typeof value !== 'object') return value;\n\n if (isRef(value)) {\n if (!definition) return value;\n\n const resolved = dereferenceRef(value, definition, seenRefs);\n if (isRef(resolved)) return resolved as T;\n\n return dereferenceRefDeep(resolved, definition, seenRefs) as T;\n }\n\n if (Array.isArray(value)) {\n return value.map(entry => dereferenceRefDeep(entry, definition, seenRefs)) as T;\n }\n\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(value)) {\n out[key] = dereferenceRefDeep((value as Record<string, unknown>)[key], definition, seenRefs);\n }\n\n return out as T;\n}\n\n/**\n * Retrive our dereferencing configuration for `@readme/openapi-parser`.\n *\n */\nexport function getDereferencingOptions(circularRefs: Set<string>): Pick<ParserOptions, 'resolve' | 'dereference'> {\n return {\n resolve: {\n // We shouldn't be resolving external pointers at this point so just ignore them.\n external: false,\n },\n dereference: {\n // If circular `$refs` are ignored they'll remain in the schema as `$ref: String`, otherwise\n // `$ref` just won't exist. This, in tandem with `onCircular`, allows us to do easy and\n // accumulate a list of circular references.\n circular: 'ignore',\n\n onCircular: (path: string) => {\n // The circular references that are coming out of `json-schema-ref-parser` are prefixed\n // with the schema path (file path, URL, whatever) that the schema exists in. Because we\n // don't care about this information for this reporting mechanism, and only the `$ref`\n // pointer, we're removing it.\n circularRefs.add(`#${path.split('#')[1]}`);\n },\n },\n };\n}\n\n/**\n * Recursively collect all `$ref` pointers in a schema.\n *\n */\nexport function collectRefsInSchema(schema: unknown): Set<string> {\n const refs = new Set<string>();\n if (!schema || typeof schema !== 'object') return refs;\n const obj = schema as Record<string, unknown>;\n if (isRef(obj)) {\n refs.add(obj.$ref);\n }\n\n for (const value of Object.values(obj)) {\n if (Array.isArray(value)) {\n for (const item of value) {\n for (const r of collectRefsInSchema(item)) refs.add(r);\n }\n } else if (value && typeof value === 'object') {\n for (const r of collectRefsInSchema(value)) refs.add(r);\n }\n }\n\n return refs;\n}\n\n/**\n * Given a set of `$ref` pointers and a full set of schema objects, mapped to their reference\n * locations, return only the schemas that are transitively referenced from those schemas.\n *\n */\nexport function filterRequiredRefsToReferenced(\n requiredRefs: Set<string>,\n usedSchemas: Map<string, SchemaObject>,\n): Map<string, SchemaObject> {\n const referenced = new Set(requiredRefs);\n\n let prevSize = 0;\n while (referenced.size > prevSize) {\n prevSize = referenced.size;\n for (const ref of referenced) {\n const schema = usedSchemas.get(ref);\n if (schema) {\n for (const r of collectRefsInSchema(schema)) {\n referenced.add(r);\n }\n }\n }\n }\n\n const filtered = new Map<string, SchemaObject>();\n for (const ref of referenced) {\n const s = usedSchemas.get(ref);\n if (s !== undefined) {\n filtered.set(ref, s);\n }\n }\n\n return filtered;\n}\n\n/**\n * Parse a `$ref` pointers (e.g. `#/x-definitions/MySchema` or `#/components/schemas/Foo`) into\n * path segments. Returns `null` if the first segment is reserved (we should not embed at root\n * under that key).\n *\n */\nfunction getRefPathSegments(ref: string): string[] | null {\n if (!ref.startsWith('#/')) return null;\n const path = ref\n .slice(2)\n .split('/')\n .map(seg => {\n // We need to decode these segments twice because the first decode is to decode encoded JSON\n // pointer segments, and the second is to decode any URI-encoded segments.\n return decodeURIComponent(decodePointer(seg));\n });\n\n if (path.length < 2) {\n // We need at least two pieces of a `$ref` for it to be valid. e.g. `#/x-definitions/MySchema`\n // or `#/components/schemas/Foo`.\n return null;\n }\n\n return path;\n}\n\nfunction isArrayIndexSegment(seg: string): boolean {\n return /^\\d+$/.test(seg);\n}\n\nfunction childShouldBeSchemaArray(parentKey: string, childSeg: string | undefined): boolean {\n if (!childSeg || !isArrayIndexSegment(childSeg)) {\n return false;\n }\n\n return parentKey === 'allOf' || parentKey === 'anyOf' || parentKey === 'oneOf';\n}\n\n/**\n * Merge referenced schemas into the root schema at the paths defined by their reference location.\n *\n * @example `#/components/schemas/MySchema` -> `root.components.schemas.MySchema`\n */\nexport function mergeReferencedSchemasIntoRoot(root: SchemaObject, refToSchema: Map<string, unknown>): void {\n // we need to sort this so parent schemas are placed before child schemas to\n // prevent a parent from overwriting a child's synthetically created path\n // sorting by path depth (shallowest first)\n const sortedEntries = [...refToSchema.entries()].toSorted((a, b) => {\n const aDepth = a[0].split('/').length;\n const bDepth = b[0].split('/').length;\n return aDepth - bDepth;\n });\n\n for (const [ref, schema] of sortedEntries) {\n const segments = getRefPathSegments(ref);\n if (!segments || segments.length === 0) {\n continue;\n }\n\n let current: SchemaObject = root;\n let pathInvalid = false;\n\n for (let i = 0; i < segments.length - 1; i++) {\n const seg = segments[i] as keyof SchemaObject;\n const nextSeg = segments[i + 1];\n\n if (Array.isArray(current)) {\n const idx = Number(seg);\n if (!Number.isInteger(idx) || idx < 0) {\n pathInvalid = true;\n break;\n }\n\n const slot: SchemaObject = current[idx];\n if (slot === undefined || slot === null || typeof slot !== 'object' || Array.isArray(slot)) {\n const nextObj: SchemaObject = {};\n current[idx] = nextObj;\n current = nextObj;\n } else {\n current = slot;\n }\n\n continue;\n }\n\n const cur = current;\n const existing = cur[seg] as SchemaObject;\n\n if (childShouldBeSchemaArray(seg, nextSeg)) {\n if (!Array.isArray(existing)) {\n cur[seg] = [];\n }\n\n current = cur[seg] as unknown[];\n continue;\n }\n\n let next: Record<string, unknown>;\n if (existing !== undefined && existing !== null && typeof existing === 'object' && !Array.isArray(existing)) {\n next = existing as Record<string, unknown>;\n } else {\n next = {};\n cur[seg] = next;\n }\n\n current = next;\n }\n\n if (pathInvalid) {\n continue;\n }\n\n const lastSeg = segments[segments.length - 1] as keyof SchemaObject;\n if (Array.isArray(current)) {\n const idx = Number(lastSeg);\n if (!Number.isInteger(idx) || idx < 0) {\n continue;\n }\n\n current[idx] = schema;\n } else {\n current[lastSeg] = schema;\n }\n }\n}\n","import type { SchemaObject } from '../types.js';\n\nexport function hasSchemaType(schema: SchemaObject, discriminator: 'array' | 'object'): boolean {\n if (Array.isArray(schema.type)) {\n return schema.type.includes(discriminator);\n }\n\n return schema.type === discriminator;\n}\n\nexport function isObject(val: unknown): val is Record<string, unknown> {\n return typeof val === 'object' && val !== null && !Array.isArray(val);\n}\n\nexport function isPrimitive(val: unknown): val is boolean | number | string {\n return typeof val === 'string' || typeof val === 'number' || typeof val === 'boolean';\n}\n","/**\n * @deprecated Use `structuredClone` instead\n */\nexport function cloneObject<T>(obj: T): T {\n if (typeof obj === 'undefined') {\n return undefined as T;\n }\n\n // oxlint-disable-next-line readme/json-parse-try-catch\n return JSON.parse(JSON.stringify(obj));\n}\n","import type { DiscriminatorChildrenMap, DiscriminatorObject, OASDocument, SchemaObject } from '../types.js';\n\nimport { isRef } from '../types.js';\n\nimport { cloneObject } from './clone-object.js';\n\n/**\n * Determines if a schema has a discriminator but is missing oneOf/anyOf polymorphism.\n *\n * @param schema Schema to check.\n * @returns If the schema has a discriminator but no oneOf/anyOf.\n */\nfunction hasDiscriminatorWithoutPolymorphism(schema: SchemaObject): boolean {\n if (!schema || typeof schema !== 'object') return false;\n if (!('discriminator' in schema)) return false;\n if ('oneOf' in schema || 'anyOf' in schema) return false;\n return true;\n}\n\n/**\n * Checks if a schema's allOf contains a $ref to a specific schema name.\n *\n * @param schema Schema to check.\n * @param targetSchemaName The schema name to look for (e.g., 'Pet').\n * @returns If the schema's allOf contains a $ref to the target schema.\n */\nfunction allOfReferencesSchema(schema: SchemaObject, targetSchemaName: string): boolean {\n if (!schema || typeof schema !== 'object') return false;\n if (!('allOf' in schema) || !Array.isArray(schema.allOf)) return false;\n\n return schema.allOf.some(item => {\n if (isRef(item)) {\n // Check if the $ref points to the target schema\n // Format: #/components/schemas/SchemaName\n const refParts = item.$ref.split('/');\n const refSchemaName = refParts[refParts.length - 1];\n return refSchemaName === targetSchemaName;\n }\n\n return false;\n });\n}\n\n/**\n * Phase 1: Before dereferencing, identify discriminator schemas and their children via allOf\n * inheritance. Returns a mapping that can be used after dereferencing.\n *\n * We don't add oneOf here because that would create circular references\n * (Pet → Cat → Pet via allOf) which would break dereferencing.\n *\n * Note: Schemas defined in mapping but NOT declared using anyOf, allOf or oneOf will not be considered\n * a valid child. The discriminator object is legal only when using one of the composite keywords oneOf, anyOf, allOf.\n * @link https://spec.openapis.org/oas/v3.1.0.html#fixed-fields-20\n *\n * @param api The OpenAPI definition to process (before dereferencing).\n * @returns Maps of discriminator schema names to their child schema names and `$ref` pointers.\n */\nexport function findDiscriminatorChildren(definition: Pick<OASDocument, 'components'>): {\n children: DiscriminatorChildrenMap;\n refs: Map<string, string>;\n} {\n const childrenMap: DiscriminatorChildrenMap = new Map();\n const childrenRefMap = new Map<string, string>();\n\n if (!definition?.components?.schemas || typeof definition.components.schemas !== 'object') {\n return { children: childrenMap, refs: childrenRefMap };\n }\n\n const schemas = definition.components.schemas as Record<string, SchemaObject>;\n const schemaNames = Object.keys(schemas);\n\n // Find all schemas with discriminator but no oneOf/anyOf\n const discriminatorSchemas: string[] = schemaNames.filter(name => {\n return hasDiscriminatorWithoutPolymorphism(schemas[name]);\n });\n\n // For each discriminator schema, record child schema names\n for (const baseName of discriminatorSchemas) {\n const baseSchema = schemas[baseName] as SchemaObject & { discriminator: DiscriminatorObject };\n const discriminator = baseSchema.discriminator;\n\n let childSchemaNames: string[] = [];\n\n // If there's already a mapping defined, use it but only include schemas that\n // actually inherit from this parent via allOf. A mapping entry for a schema\n // that doesn't use allOf is just a value resolution hint, not a declaration\n // of inheritance.\n if (discriminator.mapping && typeof discriminator.mapping === 'object') {\n const mappingRefs = Object.values(discriminator.mapping);\n if (mappingRefs.length > 0) {\n childSchemaNames = mappingRefs\n .map(ref => ref.split('/').pop())\n .filter((name): name is string => {\n if (!name) return false;\n const childSchema = schemas[name];\n return !!childSchema && allOfReferencesSchema(childSchema, baseName);\n });\n }\n }\n\n // Otherwise, scan for schemas that extend this base via allOf\n if (!childSchemaNames.length) {\n childSchemaNames = schemaNames.filter(name => {\n if (name === baseName) return false;\n return allOfReferencesSchema(schemas[name], baseName);\n });\n }\n\n // Store child schema names in the map\n if (childSchemaNames.length) {\n for (const childName of childSchemaNames) {\n childrenRefMap.set(childName, `#/components/schemas/${childName}`);\n }\n\n childrenMap.set(baseName, childSchemaNames);\n childrenRefMap.set(baseName, `#/components/schemas/${baseName}`);\n }\n }\n\n return { children: childrenMap, refs: childrenRefMap };\n}\n\n/**\n * Apply discriminator oneOf to a map of used schemas (e.g. from `getParametersAsJSONSchema` and\n * `getResponseAsJSONSchema`). For each discriminator base in `usedSchemas`, it ensures children\n * are in the map via `getOrAddSchema`, then sets `oneOf` on the base.\n *\n * Optionally this also strips `oneOf` from the base when it appears inside a child's `allOf`\n * schema.\n *\n * @param api The OpenAPI definition (for findDiscriminatorChildren).\n * @param usedSchemas Map of schema name -> JSON Schema to update.\n * @param getOrAddSchema Callback that resolves, converts, and adds a schema by name; returns the converted schema or undefined.\n */\nexport function applyDiscriminatorOneOfToUsedSchemas(\n definition: Pick<OASDocument, 'components'>,\n usedSchemas: Map<string, SchemaObject>,\n getOrAddSchema: (ref: string) => SchemaObject | undefined,\n): void {\n const { children: childrenMap, refs: childrenRefMap } = findDiscriminatorChildren(definition);\n if (!childrenMap.size) return;\n\n // Build oneOf for each discriminator schema\n for (const [baseName, childNames] of childrenMap) {\n const baseRef = childrenRefMap.get(baseName);\n if (!baseRef) continue;\n\n const baseSchema = usedSchemas.get(baseRef);\n if (!baseSchema || typeof baseSchema !== 'object') continue;\n\n // Build `oneOf` from raw child schema `$ref` pointers.\n const oneOf: SchemaObject[] = [];\n for (const childName of childNames) {\n const childRef = childrenRefMap.get(childName);\n if (!childRef) continue;\n\n const childSchema = getOrAddSchema(childRef);\n if (childSchema) {\n oneOf.push({\n $ref: childRef,\n });\n }\n }\n\n if (oneOf.length > 0) {\n (baseSchema as Record<string, unknown>).oneOf = oneOf;\n }\n }\n\n // Strip `oneOf` from discriminator schemas embedded in child `allOf` structures.\n //\n // When `Cat` extends `Pet` via an `allOf` and `Pet` has a `discriminator` with a `oneOf` the\n // embedded `Pet` inside `Cat`'s `allOf` should NOT have `oneOf` because this would create a\n // circular `Cat.allOf[0].oneOf[0] = Cat` reference.\n //\n // We only strip from `allOf` entries to preserve `oneOf` in direct references.\n for (const [parentSchemaName, childNames] of childrenMap) {\n for (const childName of childNames) {\n const childRef = childrenRefMap.get(childName);\n if (!childRef) continue;\n\n const childSchema = usedSchemas.get(childRef);\n if (!childSchema || !('allOf' in childSchema) || !Array.isArray(childSchema.allOf)) {\n continue;\n }\n\n for (let i = 0; i < childSchema.allOf.length; i++) {\n const item = childSchema.allOf[i];\n if (\n item &&\n typeof item === 'object' &&\n 'x-readme-ref-name' in item &&\n item['x-readme-ref-name'] === parentSchemaName &&\n 'oneOf' in item\n ) {\n // Clone the allOf entry and strip oneOf from the clone to avoid mutating the shared reference.\n // This ensures Pet in components.schemas keeps its oneOf while embedded Pet in Cat's allOf doesn't.\n const clonedItem = cloneObject(item);\n delete clonedItem.oneOf;\n childSchema.allOf[i] = clonedItem;\n }\n }\n }\n }\n}\n","import type {\n ExampleObject,\n JSONSchema,\n OASDocument,\n ReferenceObject,\n RequestBodyObject,\n SchemaObject,\n} from '../types.js';\nimport type { JSONSchema4, JSONSchema7TypeName } from 'json-schema';\nimport type { Options as JSONSchemaMergeAllOfOptions } from 'json-schema-merge-allof';\n\nimport mergeJSONSchemaAllOf from 'json-schema-merge-allof';\nimport jsonpointer from 'jsonpointer';\nimport removeUndefinedObjects from 'remove-undefined-objects';\n\nimport { isOpenAPI30, isRef, isSchema } from '../types.js';\n\nimport { hasSchemaType, isObject, isPrimitive } from './helpers.js';\nimport { collectRefsInSchema, dereferenceRef, encodePointer } from './refs.js';\n\n/**\n * This list has been pulled from `openapi-schema-to-json-schema` but been slightly modified to fit\n * within the constraints in which ReadMe uses the output from this library in schema form\n * rendering as while properties like `readOnly` aren't represented within JSON Schema, we support\n * it within that library's handling of OpenAPI-friendly JSON Schema.\n *\n * @see {@link https://github.com/openapi-contrib/openapi-schema-to-json-schema/blob/main/src/consts.ts}\n */\nconst UNSUPPORTED_SCHEMA_PROPS = [\n 'example', // OpenAPI supports `example` but we're mapping it to `examples` in this library.\n 'externalDocs',\n 'xml',\n] as const;\n\n/**\n * Annotation-only keywords we preserve when they appear as siblings of `$ref` inside `allOf`\n * properties. Validation keywords (`type`, `properties`, `items`, etc.) are intentionally\n * excluded, they would conflict with the resolved schema. `x-` extensions are also preserved\n * (handled separately at the call site).\n */\nconst METADATA_SIBLING_KEYS = new Set(['description', 'summary', 'title']);\n\nconst mergeAllOfSchemasOptions: JSONSchemaMergeAllOfOptions = {\n ignoreAdditionalProperties: true,\n resolvers: {\n // `merge-json-schema-allof` by default takes the first `description` when you're merging an\n // `allOf` but because generally when you're merging two schemas together with an `allOf` you\n // want data in the subsequent schemas to be applied to the first and `description` should be a\n // part of that.\n description: (obj: string[]) => {\n return obj.slice(-1)[0];\n },\n\n // `merge-json-schema-allof` doesn't support merging enum arrays but since that's a safe and\n // simple operation as enums always contain primitives we can handle it ourselves with a custom\n // resolver. We intersect the arrays so that child schemas can narrow a parent's broad enum\n // (e.g. [1,2,20,50] ∩ [1] = [1]).\n //\n // We unfortunately need to cast our return value as `any[]` because the internal types of\n // `merge-json-schema-allof`'s `enum` resolver are not portable.\n enum: (obj: unknown[]) => {\n const arrays = obj as any[][];\n const intersection = arrays.reduce((acc, e) => acc.filter(v => e.includes(v)));\n return intersection.length > 0 ? intersection : arrays.reduce((acc, e) => acc.concat(e), []);\n },\n\n // For any unknown keywords (e.g., `example`, `format`, `x-readme-ref-name`), we fallback to\n // using the `title` resolver (which uses the first value found).\n // https://github.com/mokkabonna/json-schema-merge-allof/blob/ea2e48ee34415022de5a50c236eb4793a943ad11/src/index.js#L292\n // https://github.com/mokkabonna/json-schema-merge-allof/blob/ea2e48ee34415022de5a50c236eb4793a943ad11/README.md?plain=1#L147\n defaultResolver: mergeJSONSchemaAllOf.options.resolvers.title,\n },\n};\n\nexport interface toJSONSchemaOptions {\n /**\n * Whether or not to extend descriptions with a list of any present enums.\n */\n addEnumsToDescriptions?: boolean;\n\n /**\n * Current location within the schema -- this is a JSON pointer.\n */\n currentLocation?: string;\n\n /**\n * An OpenAPI definition to use for schema `$ref` pointer resolutions.\n */\n definition?: OASDocument;\n\n /**\n * Object containing a global set of defaults that we should apply to schemas that match it.\n */\n globalDefaults?: Record<string, unknown>;\n\n /**\n * If you wish to hide properties that are marked as being `readOnly`.\n */\n hideReadOnlyProperties?: boolean;\n\n /**\n * If you wish to hide properties that are marked as being `writeOnly`.\n */\n hideWriteOnlyProperties?: boolean;\n\n /**\n * Is this schema the child of a polymorphic `allOf` schema?\n */\n isPolymorphicAllOfChild?: boolean;\n\n /**\n * Array of parent `default` schemas to utilize when attempting to path together schema defaults.\n */\n prevDefaultSchemas?: SchemaObject[];\n\n /**\n * Array of parent `example` schemas to utilize when attempting to path together schema examples.\n */\n prevExampleSchemas?: SchemaObject[];\n\n /**\n * A function that's called anytime a (circular) `$ref` is found.\n */\n refLogger?: (ref: string, type: 'discriminator' | 'ref') => void;\n\n /**\n * Tracks component `$ref` pointers that were already emitted as bare `{ $ref }` stubs in this\n * conversion. Used so a later duplicate bare `$ref` to the same component keeps the stub,\n * while a bare `$ref` that follows an `allOf` merge of the same ref still inlines the expanded\n * schema.\n */\n refsEmittedAsStub?: Set<string>;\n\n /**\n * A set of `$ref` pointers that have been seen during JSON Schema generation.\n */\n seenRefs?: Set<string>;\n\n /**\n * A dictionary of referenced schema names to their compiled JSON Schema objects.\n */\n usedSchemas?: Map<string, SchemaObject>;\n}\n\n/**\n * Placeholder value in `usedSchemas` while a schema is being converted (used for circular\n * references).\n */\nconst PENDING_SCHEMA = { __pending: true } as unknown as SchemaObject;\n\nfunction isPendingSchema(s: SchemaObject): boolean {\n return isObject(s) && '__pending' in s && (s as Record<string, unknown>).__pending === true;\n}\n\nexport function ge