{"version":3,"file":"SchemaGenerator-Bg5O155W.cjs","names":["#head","#tail","#size","App","BaseGenerator","#getOptions","#parseSchemaObject","isDeepEqual","foundItems: SchemaKeywordMapper[T][]","isKeyword","schemaKeywords","foundItem: SchemaKeywordMapper[T] | undefined","mergedProperties: Record<string, Schema[]> | null","mergedAdditionalProps: Schema[]","newArgs: Schema[]","validationFunctions: Schema[]","additionalPropertiesSchemas: Schema[]","#getUnknownType","#usedAliasNames","#getRefAlias","getSchemaFactory","#getParsedSchemaObject","#getEmptyType","baseItems: Schema[]","transformers","union: SchemaKeywordMapper['union']","#addDiscriminatorToSchema","and: Schema","resolvedSchemas: SchemaObject[]","parsedItems: SchemaObject[]","name","min","max","#parseProperties","getSchemas"],"sources":["../../../node_modules/.pnpm/yocto-queue@1.2.2/node_modules/yocto-queue/index.js","../../../node_modules/.pnpm/p-limit@7.2.0/node_modules/p-limit/index.js","../src/utils.tsx","../src/SchemaGenerator.ts"],"sourcesContent":["/*\nHow it works:\n`this.#head` is an instance of `Node` which keeps track of its current value and nests another instance of `Node` that keeps the value that comes after it. When a value is provided to `.enqueue()`, the code needs to iterate through `this.#head`, going deeper and deeper to find the last value. However, iterating through every single item is slow. This problem is solved by saving a reference to the last value as `this.#tail` so that it can reference it to add a new value.\n*/\n\nclass Node {\n\tvalue;\n\tnext;\n\n\tconstructor(value) {\n\t\tthis.value = value;\n\t}\n}\n\nexport default class Queue {\n\t#head;\n\t#tail;\n\t#size;\n\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\n\tenqueue(value) {\n\t\tconst node = new Node(value);\n\n\t\tif (this.#head) {\n\t\t\tthis.#tail.next = node;\n\t\t\tthis.#tail = node;\n\t\t} else {\n\t\t\tthis.#head = node;\n\t\t\tthis.#tail = node;\n\t\t}\n\n\t\tthis.#size++;\n\t}\n\n\tdequeue() {\n\t\tconst current = this.#head;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#head = this.#head.next;\n\t\tthis.#size--;\n\n\t\t// Clean up tail reference when queue becomes empty\n\t\tif (!this.#head) {\n\t\t\tthis.#tail = undefined;\n\t\t}\n\n\t\treturn current.value;\n\t}\n\n\tpeek() {\n\t\tif (!this.#head) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.#head.value;\n\n\t\t// TODO: Node.js 18.\n\t\t// return this.#head?.value;\n\t}\n\n\tclear() {\n\t\tthis.#head = undefined;\n\t\tthis.#tail = undefined;\n\t\tthis.#size = 0;\n\t}\n\n\tget size() {\n\t\treturn this.#size;\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tlet current = this.#head;\n\n\t\twhile (current) {\n\t\t\tyield current.value;\n\t\t\tcurrent = current.next;\n\t\t}\n\t}\n\n\t* drain() {\n\t\twhile (this.#head) {\n\t\t\tyield this.dequeue();\n\t\t}\n\t}\n}\n","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tvalidateConcurrency(concurrency);\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst resumeNext = () => {\n\t\t// Process the next queued function if we're under the concurrency limit\n\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\tactiveCount++;\n\t\t\tqueue.dequeue()();\n\t\t}\n\t};\n\n\tconst next = () => {\n\t\tactiveCount--;\n\t\tresumeNext();\n\t};\n\n\tconst run = async (function_, resolve, arguments_) => {\n\t\t// Execute the function and capture the result promise\n\t\tconst result = (async () => function_(...arguments_))();\n\n\t\t// Resolve immediately with the promise (don't wait for completion)\n\t\tresolve(result);\n\n\t\t// Wait for the function to complete (success or failure)\n\t\t// We catch errors here to prevent unhandled rejections,\n\t\t// but the original promise rejection is preserved for the caller\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\t// Decrement active count and process next queued function\n\t\tnext();\n\t};\n\n\tconst enqueue = (function_, resolve, arguments_) => {\n\t\t// Queue the internal resolve function instead of the run function\n\t\t// to preserve the asynchronous execution context.\n\t\tnew Promise(internalResolve => { // eslint-disable-line promise/param-names\n\t\t\tqueue.enqueue(internalResolve);\n\t\t}).then(run.bind(undefined, function_, resolve, arguments_)); // eslint-disable-line promise/prefer-await-to-then\n\n\t\t// Start processing immediately if we haven't reached the concurrency limit\n\t\tif (activeCount < concurrency) {\n\t\t\tresumeNext();\n\t\t}\n\t};\n\n\tconst generator = (function_, ...arguments_) => new Promise(resolve => {\n\t\tenqueue(function_, resolve, arguments_);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue() {\n\t\t\t\tqueue.clear();\n\t\t\t},\n\t\t},\n\t\tconcurrency: {\n\t\t\tget: () => concurrency,\n\n\t\t\tset(newConcurrency) {\n\t\t\t\tvalidateConcurrency(newConcurrency);\n\t\t\t\tconcurrency = newConcurrency;\n\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\t// eslint-disable-next-line no-unmodified-loop-condition\n\t\t\t\t\twhile (activeCount < concurrency && queue.size > 0) {\n\t\t\t\t\t\tresumeNext();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t\tmap: {\n\t\t\tasync value(iterable, function_) {\n\t\t\t\tconst promises = Array.from(iterable, (value, index) => this(function_, value, index));\n\t\t\t\treturn Promise.all(promises);\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n\nexport function limitFunction(function_, options) {\n\tconst {concurrency} = options;\n\tconst limit = pLimit(concurrency);\n\n\treturn (...arguments_) => limit(() => function_(...arguments_));\n}\n\nfunction validateConcurrency(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n}\n","import type { Config, Plugin, PluginFactoryOptions } from '@kubb/core'\nimport type { Operation, SchemaObject } from '@kubb/oas'\nimport { App, createReactFabric, type Fabric } from '@kubb/react-fabric'\nimport type { ReactGenerator } from './generators/createReactGenerator.ts'\nimport type { OperationGenerator } from './OperationGenerator.ts'\nimport type { SchemaGenerator, SchemaGeneratorOptions } from './SchemaGenerator.ts'\nimport type { Schema } from './SchemaMapper.ts'\n\ntype BuildOperationsOptions<TOptions extends PluginFactoryOptions> = {\n  config: Config\n  fabric: Fabric\n  Component: ReactGenerator<any>['Operations']\n  generator: Omit<OperationGenerator<TOptions>, 'build'>\n  plugin: Plugin<TOptions>\n}\n\nexport async function buildOperations<TOptions extends PluginFactoryOptions>(\n  operations: Array<Operation>,\n  { config, fabric, plugin, generator, Component }: BuildOperationsOptions<TOptions>,\n): Promise<void> {\n  if (!Component) {\n    return undefined\n  }\n\n  const { pluginManager, oas, mode } = generator.context\n\n  const fabricChild = createReactFabric()\n  await fabricChild.render(() => {\n    return (\n      <App meta={{ pluginManager, plugin, mode, oas }}>\n        <Component config={config} operations={operations} generator={generator} plugin={plugin} />\n      </App>\n    )\n  })\n\n  await fabric.context.fileManager.upsert(...fabricChild.files)\n}\n\ntype BuildOperationOptions<TOptions extends PluginFactoryOptions> = {\n  config: Config\n  fabric: Fabric\n  Component: ReactGenerator<any>['Operation']\n  generator: Omit<OperationGenerator<TOptions>, 'build'>\n  plugin: Plugin<TOptions>\n}\n\nexport async function buildOperation<TOptions extends PluginFactoryOptions>(\n  operation: Operation,\n  { config, fabric, plugin, generator, Component }: BuildOperationOptions<TOptions>,\n): Promise<void> {\n  if (!Component) {\n    return undefined\n  }\n\n  const { pluginManager, oas, mode } = generator.context\n\n  const fabricChild = createReactFabric()\n  await fabricChild.render(() => {\n    return (\n      <App meta={{ pluginManager, plugin, mode, oas }}>\n        <Component config={config} operation={operation} plugin={plugin} generator={generator} />\n      </App>\n    )\n  })\n\n  await fabric.context.fileManager.upsert(...fabricChild.files)\n}\n\ntype BuildSchemaOptions<TOptions extends PluginFactoryOptions> = {\n  config: Config\n  fabric: Fabric\n  Component: ReactGenerator<any>['Schema']\n  generator: Omit<SchemaGenerator<SchemaGeneratorOptions, TOptions>, 'build'>\n  plugin: Plugin<TOptions>\n}\n\nexport async function buildSchema<TOptions extends PluginFactoryOptions>(\n  schema: {\n    name: string\n    tree: Array<Schema>\n    value: SchemaObject\n  },\n  { config, fabric, plugin, Component, generator }: BuildSchemaOptions<TOptions>,\n): Promise<void> {\n  if (!Component) {\n    return undefined\n  }\n\n  const { pluginManager, oas, mode } = generator.context\n\n  const fabricChild = createReactFabric()\n  await fabricChild.render(() => {\n    return (\n      <App meta={{ pluginManager, plugin, mode, oas }}>\n        <Component config={config} schema={schema} plugin={plugin} generator={generator} />\n      </App>\n    )\n  })\n\n  await fabric.context.fileManager.upsert(...fabricChild.files)\n}\n","import type { Plugin, PluginFactoryOptions, PluginManager, ResolveNameParams } from '@kubb/core'\nimport { BaseGenerator, type FileMetaBase } from '@kubb/core'\nimport transformers, { pascalCase } from '@kubb/core/transformers'\nimport { getUniqueName } from '@kubb/core/utils'\nimport type { KubbFile } from '@kubb/fabric-core/types'\nimport type { contentType, Oas, OpenAPIV3, SchemaObject } from '@kubb/oas'\nimport { isDiscriminator, isNullable, isReference } from '@kubb/oas'\nimport type { Fabric } from '@kubb/react-fabric'\nimport pLimit from 'p-limit'\nimport { isDeepEqual, isNumber, uniqueWith } from 'remeda'\nimport type { Generator } from './generators/types.ts'\nimport type { Schema, SchemaKeywordMapper } from './SchemaMapper.ts'\nimport { isKeyword, schemaKeywords } from './SchemaMapper.ts'\nimport type { OperationSchema, Override, Refs } from './types.ts'\nimport { getSchemaFactory } from './utils/getSchemaFactory.ts'\nimport { getSchemas } from './utils/getSchemas.ts'\nimport { buildSchema } from './utils.tsx'\n\nexport type GetSchemaGeneratorOptions<T extends SchemaGenerator<any, any, any>> = T extends SchemaGenerator<infer Options, any, any> ? Options : never\n\nexport type SchemaMethodResult<TFileMeta extends FileMetaBase> = Promise<KubbFile.File<TFileMeta> | Array<KubbFile.File<TFileMeta>> | null>\n\ntype Context<TOptions, TPluginOptions extends PluginFactoryOptions> = {\n  fabric: Fabric\n  oas: Oas\n  pluginManager: PluginManager\n  /**\n   * Current plugin\n   */\n  plugin: Plugin<TPluginOptions>\n  mode: KubbFile.Mode\n  include?: Array<'schemas' | 'responses' | 'requestBodies'>\n  override: Array<Override<TOptions>> | undefined\n  contentType?: contentType\n  output?: string\n}\n\nexport type SchemaGeneratorOptions = {\n  dateType: false | 'string' | 'stringOffset' | 'stringLocal' | 'date'\n  unknownType: 'any' | 'unknown' | 'void'\n  emptySchemaType: 'any' | 'unknown' | 'void'\n  enumType?: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal'\n  enumSuffix?: string\n  usedEnumNames?: Record<string, number>\n  mapper?: Record<string, string>\n  typed?: boolean\n  transformers: {\n    /**\n     * Customize the names based on the type that is provided by the plugin.\n     */\n    name?: (name: ResolveNameParams['name'], type?: ResolveNameParams['type']) => string\n    /**\n     * Receive schema and name(propertName) and return FakerMeta array\n     * TODO TODO add docs\n     * @beta\n     */\n    schema?: (schemaProps: SchemaProps, defaultSchemas: Schema[]) => Schema[] | undefined\n  }\n}\n\nexport type SchemaGeneratorBuildOptions = Omit<OperationSchema, 'name' | 'schema'>\n\ntype SchemaProps = {\n  schemaObject?: SchemaObject\n  name?: string\n  parentName?: string\n}\n\nexport class SchemaGenerator<\n  TOptions extends SchemaGeneratorOptions = SchemaGeneratorOptions,\n  TPluginOptions extends PluginFactoryOptions = PluginFactoryOptions,\n  TFileMeta extends FileMetaBase = FileMetaBase,\n> extends BaseGenerator<TOptions, Context<TOptions, TPluginOptions>> {\n  // Collect the types of all referenced schemas, so we can export them later\n  refs: Refs = {}\n\n  // Keep track of already used type aliases\n  #usedAliasNames: Record<string, number> = {}\n\n  /**\n   * Creates a type node from a given schema.\n   * Delegates to getBaseTypeFromSchema internally and\n   * optionally adds a union with null.\n   */\n  parse(props: SchemaProps): Schema[] {\n    const options = this.#getOptions(props)\n\n    const defaultSchemas = this.#parseSchemaObject(props)\n    const schemas = options.transformers?.schema?.(props, defaultSchemas) || defaultSchemas || []\n\n    return uniqueWith(schemas, isDeepEqual)\n  }\n\n  static deepSearch<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): Array<SchemaKeywordMapper[T]> {\n    const foundItems: SchemaKeywordMapper[T][] = []\n\n    tree?.forEach((schema) => {\n      if (schema.keyword === keyword) {\n        foundItems.push(schema as SchemaKeywordMapper[T])\n      }\n\n      if (isKeyword(schema, schemaKeywords.object)) {\n        Object.values(schema.args?.properties || {}).forEach((entrySchema) => {\n          foundItems.push(...SchemaGenerator.deepSearch<T>(entrySchema, keyword))\n        })\n\n        Object.values(schema.args?.additionalProperties || {}).forEach((entrySchema) => {\n          foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n        })\n      }\n\n      if (isKeyword(schema, schemaKeywords.array)) {\n        schema.args.items.forEach((entrySchema) => {\n          foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n        })\n      }\n\n      if (isKeyword(schema, schemaKeywords.and)) {\n        schema.args.forEach((entrySchema) => {\n          foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n        })\n      }\n\n      if (isKeyword(schema, schemaKeywords.tuple)) {\n        schema.args.items.forEach((entrySchema) => {\n          foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n        })\n      }\n\n      if (isKeyword(schema, schemaKeywords.union)) {\n        schema.args.forEach((entrySchema) => {\n          foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n        })\n      }\n    })\n\n    return foundItems\n  }\n\n  static find<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n    let foundItem: SchemaKeywordMapper[T] | undefined\n\n    tree?.forEach((schema) => {\n      if (!foundItem && schema.keyword === keyword) {\n        foundItem = schema as SchemaKeywordMapper[T]\n      }\n\n      if (isKeyword(schema, schemaKeywords.array)) {\n        schema.args.items.forEach((entrySchema) => {\n          if (!foundItem) {\n            foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n          }\n        })\n      }\n\n      if (isKeyword(schema, schemaKeywords.and)) {\n        schema.args.forEach((entrySchema) => {\n          if (!foundItem) {\n            foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n          }\n        })\n      }\n\n      if (isKeyword(schema, schemaKeywords.tuple)) {\n        schema.args.items.forEach((entrySchema) => {\n          if (!foundItem) {\n            foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n          }\n        })\n      }\n\n      if (isKeyword(schema, schemaKeywords.union)) {\n        schema.args.forEach((entrySchema) => {\n          if (!foundItem) {\n            foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n          }\n        })\n      }\n    })\n\n    return foundItem\n  }\n\n  static combineObjects(tree: Schema[] | undefined): Schema[] {\n    if (!tree) {\n      return []\n    }\n\n    return tree.map((schema) => {\n      if (!isKeyword(schema, schemaKeywords.and)) {\n        return schema\n      }\n\n      let mergedProperties: Record<string, Schema[]> | null = null\n      let mergedAdditionalProps: Schema[] = []\n\n      const newArgs: Schema[] = []\n\n      for (const subSchema of schema.args) {\n        if (isKeyword(subSchema, schemaKeywords.object)) {\n          const { properties = {}, additionalProperties = [] } = subSchema.args ?? {}\n\n          if (!mergedProperties) {\n            mergedProperties = {}\n          }\n\n          for (const [key, value] of Object.entries(properties)) {\n            mergedProperties[key] = value\n          }\n\n          if (additionalProperties.length > 0) {\n            mergedAdditionalProps = additionalProperties\n          }\n        } else {\n          newArgs.push(subSchema)\n        }\n      }\n\n      if (mergedProperties) {\n        newArgs.push({\n          keyword: schemaKeywords.object,\n          args: {\n            properties: mergedProperties,\n            additionalProperties: mergedAdditionalProps,\n          },\n        })\n      }\n\n      return {\n        keyword: schemaKeywords.and,\n        args: newArgs,\n      }\n    })\n  }\n\n  #getOptions({ name }: SchemaProps): Partial<TOptions> {\n    const { override = [] } = this.context\n\n    return {\n      ...this.options,\n      ...(override.find(({ pattern, type }) => {\n        if (name && type === 'schemaName') {\n          return !!name.match(pattern)\n        }\n\n        return false\n      })?.options || {}),\n    }\n  }\n\n  #getUnknownType(props: SchemaProps) {\n    const options = this.#getOptions(props)\n\n    if (options.unknownType === 'any') {\n      return schemaKeywords.any\n    }\n    if (options.unknownType === 'void') {\n      return schemaKeywords.void\n    }\n\n    return schemaKeywords.unknown\n  }\n\n  #getEmptyType(props: SchemaProps) {\n    const options = this.#getOptions(props)\n\n    if (options.emptySchemaType === 'any') {\n      return schemaKeywords.any\n    }\n    if (options.emptySchemaType === 'void') {\n      return schemaKeywords.void\n    }\n\n    return schemaKeywords.unknown\n  }\n\n  /**\n   * Recursively creates a type literal with the given props.\n   */\n  #parseProperties({ schemaObject, name }: SchemaProps): Schema[] {\n    const properties = schemaObject?.properties || {}\n    const additionalProperties = schemaObject?.additionalProperties\n    const required = schemaObject?.required\n\n    const propertiesSchemas = Object.keys(properties)\n      .map((propertyName) => {\n        const validationFunctions: Schema[] = []\n        const propertySchema = properties[propertyName] as SchemaObject\n\n        const isRequired = Array.isArray(required) ? required?.includes(propertyName) : !!required\n        const nullable = propertySchema.nullable ?? propertySchema['x-nullable'] ?? false\n\n        validationFunctions.push(...this.parse({ schemaObject: propertySchema, name: propertyName, parentName: name }))\n\n        validationFunctions.push({\n          keyword: schemaKeywords.name,\n          args: propertyName,\n        })\n\n        if (!isRequired && nullable) {\n          validationFunctions.push({ keyword: schemaKeywords.nullish })\n        } else if (!isRequired) {\n          validationFunctions.push({ keyword: schemaKeywords.optional })\n        }\n\n        return {\n          [propertyName]: validationFunctions,\n        }\n      })\n      .reduce((acc, curr) => ({ ...acc, ...curr }), {})\n    let additionalPropertiesSchemas: Schema[] = []\n\n    if (additionalProperties) {\n      additionalPropertiesSchemas =\n        additionalProperties === true || !Object.keys(additionalProperties).length\n          ? [{ keyword: this.#getUnknownType({ schemaObject, name }) }]\n          : this.parse({ schemaObject: additionalProperties as SchemaObject, parentName: name })\n    }\n\n    return [\n      {\n        keyword: schemaKeywords.object,\n        args: {\n          properties: propertiesSchemas,\n          additionalProperties: additionalPropertiesSchemas,\n        },\n      },\n    ]\n  }\n\n  /**\n   * Create a type alias for the schema referenced by the given ReferenceObject\n   */\n  #getRefAlias(schemaObject: OpenAPIV3.ReferenceObject, name: string | undefined): Schema[] {\n    const { $ref } = schemaObject\n    const ref = this.refs[$ref]\n\n    if (ref) {\n      const dereferencedSchema = this.context.oas.dereferenceWithRef(schemaObject)\n      // pass name to getRefAlias and use that to find in discriminator.mapping value\n\n      if (dereferencedSchema && isDiscriminator(dereferencedSchema)) {\n        const [key] = Object.entries(dereferencedSchema.discriminator.mapping || {}).find(([_key, value]) => value.replace(/.+\\//, '') === name) || []\n\n        if (key) {\n          return [\n            {\n              keyword: schemaKeywords.and,\n              args: [\n                {\n                  keyword: schemaKeywords.ref,\n                  args: { name: ref.propertyName, $ref, path: ref.path, isImportable: !!this.context.oas.get($ref) },\n                },\n                {\n                  keyword: schemaKeywords.object,\n                  args: {\n                    properties: {\n                      [dereferencedSchema.discriminator.propertyName]: [\n                        {\n                          keyword: schemaKeywords.const,\n                          args: {\n                            name: key,\n                            format: 'string',\n                            value: key,\n                          },\n                        },\n                      ],\n                    },\n                  },\n                },\n              ],\n            },\n          ] as Schema[]\n        }\n      }\n\n      return [\n        {\n          keyword: schemaKeywords.ref,\n          args: { name: ref.propertyName, $ref, path: ref.path, isImportable: !!this.context.oas.get($ref) },\n        },\n      ]\n    }\n\n    const originalName = getUniqueName($ref.replace(/.+\\//, ''), this.#usedAliasNames)\n    const propertyName = this.context.pluginManager.resolveName({\n      name: originalName,\n      pluginKey: this.context.plugin.key,\n      type: 'function',\n    })\n\n    const fileName = this.context.pluginManager.resolveName({\n      name: originalName,\n      pluginKey: this.context.plugin.key,\n      type: 'file',\n    })\n    const file = this.context.pluginManager.getFile({\n      name: fileName,\n      pluginKey: this.context.plugin.key,\n      extname: '.ts',\n    })\n\n    this.refs[$ref] = {\n      propertyName,\n      originalName,\n      path: file.path,\n    }\n\n    return this.#getRefAlias(schemaObject, name)\n  }\n\n  #getParsedSchemaObject(schema?: SchemaObject) {\n    return getSchemaFactory(this.context.oas)(schema)\n  }\n\n  #addDiscriminatorToSchema<TSchema extends Schema>({\n    schema,\n    schemaObject,\n    discriminator,\n  }: {\n    schemaObject: SchemaObject\n    schema: TSchema\n    discriminator: OpenAPIV3.DiscriminatorObject\n  }): TSchema {\n    if (!isKeyword(schema, schemaKeywords.union)) {\n      return schema\n    }\n\n    const objectPropertySchema = SchemaGenerator.find(this.parse({ schemaObject: schemaObject }), schemaKeywords.object)\n\n    return {\n      ...schema,\n      args: Object.entries(discriminator.mapping || {}).map(([key, value]) => {\n        const arg = schema.args.find((item) => isKeyword(item, schemaKeywords.ref) && item.args.$ref === value)\n        return {\n          keyword: schemaKeywords.and,\n          args: [\n            arg,\n            {\n              keyword: schemaKeywords.object,\n              args: {\n                properties: {\n                  ...(objectPropertySchema?.args?.properties || {}),\n                  [discriminator.propertyName]: [\n                    {\n                      keyword: schemaKeywords.const,\n                      args: {\n                        name: key,\n                        format: 'string',\n                        value: key,\n                      },\n                    },\n                    //enum and literal will conflict\n                    ...(objectPropertySchema?.args?.properties[discriminator.propertyName] || []),\n                  ].filter((item) => !isKeyword(item, schemaKeywords.enum)),\n                },\n              },\n            },\n          ],\n        }\n      }),\n    }\n  }\n\n  /**\n   * This is the very core of the OpenAPI to TS conversion - it takes a\n   * schema and returns the appropriate type.\n   */\n  #parseSchemaObject({ schemaObject: _schemaObject, name, parentName }: SchemaProps): Schema[] {\n    const { schemaObject, version } = this.#getParsedSchemaObject(_schemaObject)\n\n    const options = this.#getOptions({ schemaObject, name })\n    const emptyType = this.#getEmptyType({ schemaObject, name })\n\n    if (!schemaObject) {\n      return [{ keyword: emptyType }]\n    }\n\n    const baseItems: Schema[] = [\n      {\n        keyword: schemaKeywords.schema,\n        args: {\n          type: schemaObject.type as any,\n          format: schemaObject.format,\n        },\n      },\n    ]\n    const min = schemaObject.minimum ?? schemaObject.minLength ?? schemaObject.minItems ?? undefined\n    const max = schemaObject.maximum ?? schemaObject.maxLength ?? schemaObject.maxItems ?? undefined\n\n    const exclusiveMinimum = schemaObject.exclusiveMinimum\n    const exclusiveMaximum = schemaObject.exclusiveMaximum\n\n    const nullable = isNullable(schemaObject)\n    const defaultNullAndNullable = schemaObject.default === null && nullable\n\n    if (schemaObject.default !== undefined && !defaultNullAndNullable && !Array.isArray(schemaObject.default)) {\n      if (typeof schemaObject.default === 'string') {\n        baseItems.push({\n          keyword: schemaKeywords.default,\n          args: transformers.stringify(schemaObject.default),\n        })\n      } else if (typeof schemaObject.default === 'boolean') {\n        baseItems.push({\n          keyword: schemaKeywords.default,\n          args: schemaObject.default ?? false,\n        })\n      } else {\n        baseItems.push({\n          keyword: schemaKeywords.default,\n          args: schemaObject.default,\n        })\n      }\n    }\n\n    if (schemaObject.deprecated) {\n      baseItems.push({\n        keyword: schemaKeywords.deprecated,\n      })\n    }\n\n    if (schemaObject.description) {\n      baseItems.push({\n        keyword: schemaKeywords.describe,\n        args: schemaObject.description,\n      })\n    }\n\n    if (max !== undefined) {\n      if (exclusiveMaximum) {\n        baseItems.unshift({ keyword: schemaKeywords.exclusiveMaximum, args: max })\n      } else {\n        baseItems.unshift({ keyword: schemaKeywords.max, args: max })\n      }\n    }\n\n    if (min !== undefined) {\n      if (exclusiveMinimum) {\n        baseItems.unshift({ keyword: schemaKeywords.exclusiveMinimum, args: min })\n      } else {\n        baseItems.unshift({ keyword: schemaKeywords.min, args: min })\n      }\n    }\n\n    if (typeof exclusiveMaximum === 'number') {\n      //OPENAPI v3.1.0: https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0\n      baseItems.unshift({ keyword: schemaKeywords.exclusiveMaximum, args: exclusiveMaximum })\n    }\n    if (typeof exclusiveMinimum === 'number') {\n      //OPENAPI v3.1.0: https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0\n      baseItems.unshift({ keyword: schemaKeywords.exclusiveMinimum, args: exclusiveMinimum })\n    }\n    if (nullable) {\n      baseItems.push({ keyword: schemaKeywords.nullable })\n    }\n\n    if (schemaObject.type && Array.isArray(schemaObject.type)) {\n      // OPENAPI v3.1.0: https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0\n      const items = schemaObject.type.filter((value) => value !== 'null') as Array<OpenAPIV3.NonArraySchemaObjectType>\n      const hasNull = (schemaObject.type as string[]).includes('null')\n\n      if (hasNull && !nullable) {\n        baseItems.push({ keyword: schemaKeywords.nullable })\n      }\n\n      if (items.length > 1) {\n        const parsedItems = [\n          {\n            keyword: schemaKeywords.union,\n            args: items\n              .map(\n                (item) =>\n                  this.parse({\n                    schemaObject: { ...schemaObject, type: item },\n                    name,\n                    parentName,\n                  })[0],\n              )\n              .filter(Boolean)\n              .filter((item) => !isKeyword(item, schemaKeywords.unknown))\n              .map((item) => (isKeyword(item, schemaKeywords.object) ? { ...item, args: { ...item.args, strict: true } } : item)),\n          },\n        ]\n\n        return [...parsedItems, ...baseItems].filter(Boolean)\n      }\n    }\n\n    if (schemaObject.readOnly) {\n      baseItems.push({ keyword: schemaKeywords.readOnly })\n    }\n\n    if (schemaObject.writeOnly) {\n      baseItems.push({ keyword: schemaKeywords.writeOnly })\n    }\n\n    if (isReference(schemaObject)) {\n      return [\n        ...this.#getRefAlias(schemaObject, name),\n        schemaObject.description && {\n          keyword: schemaKeywords.describe,\n          args: schemaObject.description,\n        },\n        schemaObject.pattern &&\n          schemaObject.type === 'string' && {\n            keyword: schemaKeywords.matches,\n            args: schemaObject.pattern,\n          },\n        nullable && { keyword: schemaKeywords.nullable },\n        schemaObject.readOnly && { keyword: schemaKeywords.readOnly },\n        schemaObject.writeOnly && { keyword: schemaKeywords.writeOnly },\n        {\n          keyword: schemaKeywords.schema,\n          args: {\n            type: schemaObject.type as any,\n            format: schemaObject.format,\n          },\n        },\n      ].filter(Boolean)\n    }\n\n    if (schemaObject.oneOf || schemaObject.anyOf) {\n      // union\n      const schemaWithoutOneOf = { ...schemaObject, oneOf: undefined, anyOf: undefined }\n      const discriminator = this.context.oas.getDiscriminator(schemaObject)\n\n      const union: SchemaKeywordMapper['union'] = {\n        keyword: schemaKeywords.union,\n        args: (schemaObject.oneOf || schemaObject.anyOf)!\n          .map((item) => {\n            // first item, this will be ref\n            return item && this.parse({ schemaObject: item as SchemaObject, name, parentName })[0]\n          })\n          .filter(Boolean)\n          .filter((item) => !isKeyword(item, schemaKeywords.unknown)),\n      }\n\n      if (discriminator) {\n        // In 'inherit' mode, the discriminator property is already added to child schemas by Oas.getDiscriminator()\n        // so we should NOT add it at the union level\n        if (this.context && this.context.oas.options.discriminator !== 'inherit') {\n          return [this.#addDiscriminatorToSchema({ schemaObject: schemaWithoutOneOf, schema: union, discriminator }), ...baseItems]\n        }\n      }\n\n      if (schemaWithoutOneOf.properties) {\n        const propertySchemas = this.parse({ schemaObject: schemaWithoutOneOf, name, parentName })\n\n        union.args = [\n          ...union.args.map((arg) => {\n            return {\n              keyword: schemaKeywords.and,\n              args: [arg, ...propertySchemas],\n            }\n          }),\n        ]\n\n        return [union, ...baseItems]\n      }\n\n      return [union, ...baseItems]\n    }\n\n    if (schemaObject.allOf) {\n      // intersection/add\n      const schemaWithoutAllOf = { ...schemaObject, allOf: undefined }\n\n      const and: Schema = {\n        keyword: schemaKeywords.and,\n        args: schemaObject.allOf\n          .map((item) => {\n            return item && this.parse({ schemaObject: item as SchemaObject, name, parentName })[0]\n          })\n          .filter(Boolean)\n          .filter((item) => !isKeyword(item, schemaKeywords.unknown)),\n      }\n\n      if (schemaWithoutAllOf.required?.length) {\n        const allOfItems = schemaObject.allOf\n        const resolvedSchemas: SchemaObject[] = []\n\n        for (const item of allOfItems) {\n          const resolved = isReference(item) ? (this.context.oas.get(item.$ref) as SchemaObject) : item\n\n          if (resolved) {\n            resolvedSchemas.push(resolved)\n          }\n        }\n\n        const existingKeys = schemaWithoutAllOf.properties ? new Set(Object.keys(schemaWithoutAllOf.properties)) : null\n\n        const parsedItems: SchemaObject[] = []\n\n        for (const key of schemaWithoutAllOf.required) {\n          if (existingKeys?.has(key)) {\n            continue\n          }\n\n          for (const schema of resolvedSchemas) {\n            if (schema.properties?.[key]) {\n              parsedItems.push({\n                properties: {\n                  [key]: schema.properties[key],\n                },\n                required: [key],\n              } as SchemaObject)\n              break\n            }\n          }\n        }\n\n        for (const item of parsedItems) {\n          const parsed = this.parse({ schemaObject: item, name, parentName })\n\n          if (Array.isArray(parsed)) {\n            and.args = and.args ? and.args.concat(parsed) : parsed\n          }\n        }\n      }\n\n      if (schemaWithoutAllOf.properties) {\n        and.args = [...(and.args || []), ...this.parse({ schemaObject: schemaWithoutAllOf, name, parentName })]\n      }\n\n      return SchemaGenerator.combineObjects([and, ...baseItems])\n    }\n\n    if (schemaObject.enum) {\n      if (options.enumSuffix === '') {\n        this.context.pluginManager.logger.emit('info', 'EnumSuffix set to an empty string does not work')\n      }\n\n      const enumName = getUniqueName(pascalCase([parentName, name, options.enumSuffix].join(' ')), this.options.usedEnumNames || {})\n      const typeName = this.context.pluginManager.resolveName({\n        name: enumName,\n        pluginKey: this.context.plugin.key,\n        type: 'type',\n      })\n\n      const nullableEnum = schemaObject.enum.includes(null)\n      if (nullableEnum) {\n        baseItems.push({ keyword: schemaKeywords.nullable })\n      }\n      const filteredValues = schemaObject.enum.filter((value) => value !== null)\n\n      // x-enumNames has priority\n      const extensionEnums = ['x-enumNames', 'x-enum-varnames']\n        .filter((extensionKey) => extensionKey in schemaObject)\n        .map((extensionKey) => {\n          return [\n            {\n              keyword: schemaKeywords.enum,\n              args: {\n                name,\n                typeName,\n                asConst: false,\n                items: [...new Set(schemaObject[extensionKey as keyof typeof schemaObject] as string[])].map((name: string | number, index) => ({\n                  name: transformers.stringify(name),\n                  value: schemaObject.enum?.[index] as string | number,\n                  format: isNumber(schemaObject.enum?.[index]) ? 'number' : 'string',\n                })),\n              },\n            },\n            ...baseItems.filter(\n              (item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max && item.keyword !== schemaKeywords.matches,\n            ),\n          ]\n        })\n\n      if (schemaObject.type === 'number' || schemaObject.type === 'integer') {\n        // we cannot use z.enum when enum type is number/integer\n        const enumNames = extensionEnums[0]?.find((item) => isKeyword(item, schemaKeywords.enum)) as unknown as SchemaKeywordMapper['enum']\n        return [\n          {\n            keyword: schemaKeywords.enum,\n            args: {\n              name: enumName,\n              typeName,\n              asConst: true,\n              items: enumNames?.args?.items\n                ? [...new Set(enumNames.args.items)].map(({ name, value }) => ({\n                    name,\n                    value,\n                    format: 'number',\n                  }))\n                : [...new Set(filteredValues)].map((value: string) => {\n                    return {\n                      name: value,\n                      value,\n                      format: 'number',\n                    }\n                  }),\n            },\n          },\n          ...baseItems.filter((item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max && item.keyword !== schemaKeywords.matches),\n        ]\n      }\n\n      if (schemaObject.type === 'boolean') {\n        // we cannot use z.enum when enum type is boolean\n        const enumNames = extensionEnums[0]?.find((item) => isKeyword(item, schemaKeywords.enum)) as unknown as SchemaKeywordMapper['enum']\n        return [\n          {\n            keyword: schemaKeywords.enum,\n            args: {\n              name: enumName,\n              typeName,\n              asConst: true,\n              items: enumNames?.args?.items\n                ? [...new Set(enumNames.args.items)].map(({ name, value }) => ({\n                    name,\n                    value,\n                    format: 'boolean',\n                  }))\n                : [...new Set(filteredValues)].map((value: string) => {\n                    return {\n                      name: value,\n                      value,\n                      format: 'boolean',\n                    }\n                  }),\n            },\n          },\n          ...baseItems.filter((item) => item.keyword !== schemaKeywords.matches),\n        ]\n      }\n\n      if (extensionEnums.length > 0 && extensionEnums[0]) {\n        return extensionEnums[0]\n      }\n\n      return [\n        {\n          keyword: schemaKeywords.enum,\n          args: {\n            name: enumName,\n            typeName,\n            asConst: false,\n            items: [...new Set(filteredValues)].map((value: string) => ({\n              name: transformers.stringify(value),\n              value,\n              format: isNumber(value) ? 'number' : 'string',\n            })),\n          },\n        },\n        ...baseItems.filter((item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max && item.keyword !== schemaKeywords.matches),\n      ]\n    }\n\n    if ('prefixItems' in schemaObject) {\n      const prefixItems = schemaObject.prefixItems as SchemaObject[]\n      const items = 'items' in schemaObject ? (schemaObject.items as SchemaObject[]) : []\n      const min = schemaObject.minimum ?? schemaObject.minLength ?? schemaObject.minItems ?? undefined\n      const max = schemaObject.maximum ?? schemaObject.maxLength ?? schemaObject.maxItems ?? undefined\n\n      return [\n        {\n          keyword: schemaKeywords.tuple,\n          args: {\n            min,\n            max,\n            items: prefixItems\n              .map((item) => {\n                return this.parse({ schemaObject: item, name, parentName })[0]\n              })\n              .filter(Boolean),\n            rest: this.parse({\n              schemaObject: items,\n              name,\n              parentName,\n            })[0],\n          },\n        },\n        ...baseItems.filter((item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max),\n      ]\n    }\n\n    if (version === '3.1' && 'const' in schemaObject) {\n      // const keyword takes precendence over the actual type.\n\n      if (schemaObject['const'] === null) {\n        return [{ keyword: schemaKeywords.null }]\n      }\n      if (schemaObject['const'] === undefined) {\n        return [{ keyword: schemaKeywords.undefined }]\n      }\n\n      let format = typeof schemaObject['const']\n      if (format !== 'number' && format !== 'boolean') {\n        format = 'string'\n      }\n\n      return [\n        {\n          keyword: schemaKeywords.const,\n          args: {\n            name: schemaObject['const'],\n            format,\n            value: schemaObject['const'],\n          },\n        },\n        ...baseItems,\n      ]\n    }\n\n    /**\n     * > Structural validation alone may be insufficient to allow an application to correctly utilize certain values. The \"format\"\n     * > annotation keyword is defined to allow schema authors to convey semantic information for a fixed subset of values which are\n     * > accurately described by authoritative resources, be they RFCs or other external specifications.\n     *\n     * In other words: format is more specific than type alone, hence it should override the type value, if possible.\n     *\n     * see also https://json-schema.org/draft/2020-12/draft-bhutton-json-schema-validation-00#rfc.section.7\n     */\n    if (schemaObject.format) {\n      if (schemaObject.type === 'integer' && (schemaObject.format === 'int32' || schemaObject.format === 'int64')) {\n        baseItems.unshift({ keyword: schemaKeywords.integer })\n        return baseItems\n      }\n\n      if (schemaObject.type === 'number' && (schemaObject.format === 'float' || schemaObject.format === 'double')) {\n        baseItems.unshift({ keyword: schemaKeywords.number })\n        return baseItems\n      }\n\n      switch (schemaObject.format) {\n        case 'binary':\n          baseItems.push({ keyword: schemaKeywords.blob })\n          return baseItems\n        case 'date-time':\n          if (options.dateType) {\n            if (options.dateType === 'date') {\n              baseItems.unshift({ keyword: schemaKeywords.date, args: { type: 'date' } })\n\n              return baseItems\n            }\n\n            if (options.dateType === 'stringOffset') {\n              baseItems.unshift({ keyword: schemaKeywords.datetime, args: { offset: true } })\n              return baseItems\n            }\n\n            if (options.dateType === 'stringLocal') {\n              baseItems.unshift({ keyword: schemaKeywords.datetime, args: { local: true } })\n              return baseItems\n            }\n\n            baseItems.unshift({ keyword: schemaKeywords.datetime, args: { offset: false } })\n\n            return baseItems\n          }\n          break\n        case 'date':\n          if (options.dateType) {\n            if (options.dateType === 'date') {\n              baseItems.unshift({ keyword: schemaKeywords.date, args: { type: 'date' } })\n\n              return baseItems\n            }\n\n            baseItems.unshift({ keyword: schemaKeywords.date, args: { type: 'string' } })\n\n            return baseItems\n          }\n          break\n        case 'time':\n          if (options.dateType) {\n            if (options.dateType === 'date') {\n              baseItems.unshift({ keyword: schemaKeywords.time, args: { type: 'date' } })\n\n              return baseItems\n            }\n\n            baseItems.unshift({ keyword: schemaKeywords.time, args: { type: 'string' } })\n\n            return baseItems\n          }\n          break\n        case 'uuid':\n          baseItems.unshift({ keyword: schemaKeywords.uuid })\n          return baseItems\n        case 'email':\n        case 'idn-email':\n          baseItems.unshift({ keyword: schemaKeywords.email })\n          return baseItems\n        case 'uri':\n        case 'ipv4':\n        case 'ipv6':\n        case 'uri-reference':\n        case 'hostname':\n        case 'idn-hostname':\n          baseItems.unshift({ keyword: schemaKeywords.url })\n          return baseItems\n        // case 'duration':\n        // case 'json-pointer':\n        // case 'relative-json-pointer':\n        default:\n          // formats not yet implemented: ignore.\n          break\n      }\n    }\n\n    if (schemaObject.pattern && schemaObject.type === 'string') {\n      baseItems.unshift({\n        keyword: schemaKeywords.matches,\n        args: schemaObject.pattern,\n      })\n\n      return baseItems\n    }\n\n    // type based logic\n    if ('items' in schemaObject || schemaObject.type === ('array' as 'string')) {\n      const min = schemaObject.minimum ?? schemaObject.minLength ?? schemaObject.minItems ?? undefined\n      const max = schemaObject.maximum ?? schemaObject.maxLength ?? schemaObject.maxItems ?? undefined\n      const items = this.parse({ schemaObject: 'items' in schemaObject ? (schemaObject.items as SchemaObject) : [], name, parentName })\n      const unique = !!schemaObject.uniqueItems\n\n      return [\n        {\n          keyword: schemaKeywords.array,\n          args: {\n            items,\n            min,\n            max,\n            unique,\n          },\n        },\n        ...baseItems.filter((item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max),\n      ]\n    }\n\n    if (schemaObject.properties || schemaObject.additionalProperties) {\n      if (isDiscriminator(schemaObject)) {\n        // override schema to set type to be based on discriminator mapping, use of enum to convert type string to type 'mapping1' | 'mapping2'\n        const schemaObjectOverriden = Object.keys(schemaObject.properties || {}).reduce((acc, propertyName) => {\n          if (acc.properties?.[propertyName] && propertyName === schemaObject.discriminator.propertyName) {\n            return {\n              ...acc,\n              properties: {\n                ...acc.properties,\n                [propertyName]: {\n                  ...((acc.properties[propertyName] as any) || {}),\n                  enum: schemaObject.discriminator.mapping ? Object.keys(schemaObject.discriminator.mapping) : undefined,\n                },\n              },\n            }\n          }\n\n          return acc\n        }, schemaObject || {}) as SchemaObject\n\n        return [\n          ...this.#parseProperties({\n            schemaObject: schemaObjectOverriden,\n            name,\n          }),\n          ...baseItems,\n        ]\n      }\n\n      return [...this.#parseProperties({ schemaObject, name }), ...baseItems]\n    }\n\n    if (schemaObject.type) {\n      const type = (\n        Array.isArray(schemaObject.type) ? schemaObject.type.filter((item) => item !== 'null')[0] : schemaObject.type\n      ) as OpenAPIV3.NonArraySchemaObjectType\n\n      if (!['boolean', 'object', 'number', 'string', 'integer', 'null'].includes(type)) {\n        this.context.pluginManager.logger.emit('warning', `Schema type '${schemaObject.type}' is not valid for schema ${parentName}.${name}`)\n      }\n\n      // 'string' | 'number' | 'integer' | 'boolean'\n      return [{ keyword: type }, ...baseItems]\n    }\n\n    return [{ keyword: emptyType }]\n  }\n\n  async build(...generators: Array<Generator<TPluginOptions>>): Promise<Array<KubbFile.File<TFileMeta>>> {\n    const { oas, contentType, include } = this.context\n    const schemas = getSchemas({ oas, contentType, includes: include })\n    const schemaEntries = Object.entries(schemas)\n\n    const generatorLimit = pLimit(1)\n    const schemaLimit = pLimit(10)\n\n    const writeTasks = generators.map((generator) =>\n      generatorLimit(async () => {\n        const schemaTasks = schemaEntries.map(([name, schemaObject]) =>\n          schemaLimit(async () => {\n            const options = this.#getOptions({ name })\n            const tree = this.parse({ name, schemaObject })\n\n            if (generator.type === 'react') {\n              await buildSchema(\n                {\n                  name,\n                  value: schemaObject,\n                  tree,\n                },\n                {\n                  config: this.context.pluginManager.config,\n                  fabric: this.context.fabric,\n                  Component: generator.Schema,\n                  generator: this,\n                  plugin: {\n                    ...this.context.plugin,\n                    options: {\n                      ...this.options,\n                      ...options,\n                    },\n                  },\n                },\n              )\n\n              return []\n            }\n\n            const result = await generator.schema?.({\n              config: this.context.pluginManager.config,\n              generator: this,\n              schema: {\n                name,\n                value: schemaObject,\n                tree,\n              },\n              plugin: {\n                ...this.context.plugin,\n                options: {\n                  ...this.options,\n                  ...options,\n                },\n              },\n            })\n\n            return result ?? []\n          }),\n        )\n\n        const schemaResults = await Promise.all(schemaTasks)\n        return schemaResults.flat() as unknown as KubbFile.File<TFileMeta>\n      }),\n    )\n\n    const nestedResults = await Promise.all(writeTasks)\n\n    return nestedResults.flat()\n  }\n}\n"],"x_google_ignoreList":[0,1],"mappings":"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"}