@kubb/plugin-oas 3.10.5 → 3.10.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -66,6 +66,7 @@ type SchemaKeywordMapper = {
66
66
  items: Schema[];
67
67
  min?: number;
68
68
  max?: number;
69
+ rest?: Schema;
69
70
  };
70
71
  };
71
72
  array: {
@@ -66,6 +66,7 @@ type SchemaKeywordMapper = {
66
66
  items: Schema[];
67
67
  min?: number;
68
68
  max?: number;
69
+ rest?: Schema;
69
70
  };
70
71
  };
71
72
  array: {
@@ -1,7 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { SchemaObject } from '@kubb/oas';
3
3
  import { Key, KubbNode } from '@kubb/react/types';
4
- import { f as Schema$1 } from './OperationGenerator-BrnQyed_.js';
4
+ import { f as Schema$1 } from './OperationGenerator-Doxzl3g_.js';
5
5
 
6
6
  type SchemaContextProps = {
7
7
  name: string;
@@ -1,7 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { SchemaObject } from '@kubb/oas';
3
3
  import { Key, KubbNode } from '@kubb/react/types';
4
- import { f as Schema$1 } from './OperationGenerator-BrnQyed_.cjs';
4
+ import { f as Schema$1 } from './OperationGenerator-Doxzl3g_.cjs';
5
5
 
6
6
  type SchemaContextProps = {
7
7
  name: string;
@@ -447,9 +447,7 @@ var SchemaGenerator = class _SchemaGenerator extends core.BaseGenerator {
447
447
  name,
448
448
  parentName
449
449
  })[0]
450
- ).filter(Boolean).filter((item) => !isKeyword(item, schemaKeywords.unknown)).map(
451
- (item) => isKeyword(item, schemaKeywords.object) ? { ...item, args: { ...item.args, strict: true } } : item
452
- )
450
+ ).filter(Boolean).filter((item) => !isKeyword(item, schemaKeywords.unknown)).map((item) => isKeyword(item, schemaKeywords.object) ? { ...item, args: { ...item.args, strict: true } } : item)
453
451
  }
454
452
  ];
455
453
  return [...parsedItems, ...baseItems].filter(Boolean);
@@ -688,6 +686,7 @@ var SchemaGenerator = class _SchemaGenerator extends core.BaseGenerator {
688
686
  }
689
687
  if ("prefixItems" in schemaObject) {
690
688
  const prefixItems = schemaObject.prefixItems;
689
+ const items = "items" in schemaObject ? schemaObject.items : [];
691
690
  const min2 = schemaObject.minimum ?? schemaObject.minLength ?? schemaObject.minItems ?? void 0;
692
691
  const max2 = schemaObject.maximum ?? schemaObject.maxLength ?? schemaObject.maxItems ?? void 0;
693
692
  return [
@@ -698,7 +697,12 @@ var SchemaGenerator = class _SchemaGenerator extends core.BaseGenerator {
698
697
  max: max2,
699
698
  items: prefixItems.map((item) => {
700
699
  return this.parse({ schemaObject: item, name, parentName })[0];
701
- }).filter(Boolean)
700
+ }).filter(Boolean),
701
+ rest: this.parse({
702
+ schemaObject: items,
703
+ name,
704
+ parentName
705
+ })[0]
702
706
  }
703
707
  },
704
708
  ...baseItems.filter((item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max)
@@ -898,5 +902,5 @@ var SchemaGenerator = class _SchemaGenerator extends core.BaseGenerator {
898
902
  exports.SchemaGenerator = SchemaGenerator;
899
903
  exports.isKeyword = isKeyword;
900
904
  exports.schemaKeywords = schemaKeywords;
901
- //# sourceMappingURL=chunk-ORH7X5HE.cjs.map
902
- //# sourceMappingURL=chunk-ORH7X5HE.cjs.map
905
+ //# sourceMappingURL=chunk-5MXJTXUC.cjs.map
906
+ //# sourceMappingURL=chunk-5MXJTXUC.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/SchemaMapper.ts","../src/SchemaGenerator.ts"],"names":["BaseGenerator","uniqueWith","isDeepEqual","isDiscriminator","getUniqueName","getSchemaFactory","isNullable","transformers","isReference","pascalCase","name","isNumber","min","max","getSchemas"],"mappings":"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","file":"chunk-5MXJTXUC.cjs","sourcesContent":["import type * as KubbFile from '@kubb/fs/types'\n\nexport type SchemaKeywordMapper = {\n object: {\n keyword: 'object'\n args: {\n properties: { [x: string]: Schema[] }\n additionalProperties: Schema[]\n strict?: boolean\n }\n }\n url: { keyword: 'url' }\n readOnly: { keyword: 'readOnly' }\n writeOnly: { keyword: 'writeOnly' }\n uuid: { keyword: 'uuid' }\n email: { keyword: 'email' }\n firstName: { keyword: 'firstName' }\n lastName: { keyword: 'lastName' }\n phone: { keyword: 'phone' }\n password: { keyword: 'password' }\n date: { keyword: 'date'; args: { type?: 'date' | 'string' } }\n time: { keyword: 'time'; args: { type?: 'date' | 'string' } }\n datetime: { keyword: 'datetime'; args: { offset?: boolean; local?: boolean } }\n tuple: { keyword: 'tuple'; args: { items: Schema[]; min?: number; max?: number, rest?: Schema } }\n array: {\n keyword: 'array'\n args: { items: Schema[]; min?: number; max?: number; unique?: boolean }\n }\n enum: {\n keyword: 'enum'\n args: {\n name: string\n typeName: string\n asConst: boolean\n items: Array<{\n name: string | number\n format: 'string' | 'number' | 'boolean'\n value?: string | number | boolean\n }>\n }\n }\n and: { keyword: 'and'; args: Schema[] }\n const: {\n keyword: 'const'\n args: {\n name: string | number\n format: 'string' | 'number' | 'boolean'\n value?: string | number | boolean\n }\n }\n union: { keyword: 'union'; args: Schema[] }\n ref: {\n keyword: 'ref'\n args: {\n name: string\n $ref: string\n /**\n * Full qualified path.\n */\n path: KubbFile.OptionalPath\n /**\n * When true `File.Import` will be used.\n * When false a reference will be used inside the current file.\n */\n isImportable: boolean\n }\n }\n matches: { keyword: 'matches'; args?: string }\n boolean: { keyword: 'boolean' }\n default: { keyword: 'default'; args: string | number | boolean }\n string: { keyword: 'string' }\n integer: { keyword: 'integer' }\n number: { keyword: 'number' }\n max: { keyword: 'max'; args: number }\n min: { keyword: 'min'; args: number }\n describe: { keyword: 'describe'; args: string }\n example: { keyword: 'example'; args: string }\n deprecated: { keyword: 'deprecated' }\n optional: { keyword: 'optional' }\n undefined: { keyword: 'undefined' }\n nullish: { keyword: 'nullish' }\n nullable: { keyword: 'nullable' }\n null: { keyword: 'null' }\n any: { keyword: 'any' }\n unknown: { keyword: 'unknown' }\n void: { keyword: 'void' }\n blob: { keyword: 'blob' }\n schema: { keyword: 'schema'; args: { type: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object'; format?: string } }\n name: { keyword: 'name'; args: string }\n catchall: { keyword: 'catchall' }\n interface: { keyword: 'interface' }\n}\n\nexport const schemaKeywords = {\n any: 'any',\n unknown: 'unknown',\n number: 'number',\n integer: 'integer',\n string: 'string',\n boolean: 'boolean',\n undefined: 'undefined',\n nullable: 'nullable',\n null: 'null',\n nullish: 'nullish',\n array: 'array',\n tuple: 'tuple',\n enum: 'enum',\n union: 'union',\n datetime: 'datetime',\n date: 'date',\n email: 'email',\n uuid: 'uuid',\n url: 'url',\n void: 'void',\n /* intersection */\n default: 'default',\n const: 'const',\n and: 'and',\n describe: 'describe',\n min: 'min',\n max: 'max',\n optional: 'optional',\n readOnly: 'readOnly',\n writeOnly: 'writeOnly',\n\n // custom ones\n object: 'object',\n ref: 'ref',\n matches: 'matches',\n firstName: 'firstName',\n lastName: 'lastName',\n password: 'password',\n phone: 'phone',\n blob: 'blob',\n deprecated: 'deprecated',\n example: 'example',\n schema: 'schema',\n catchall: 'catchall',\n time: 'time',\n name: 'name',\n interface: 'interface',\n} satisfies {\n [K in keyof SchemaKeywordMapper]: SchemaKeywordMapper[K]['keyword']\n}\n\nexport type SchemaKeyword = keyof SchemaKeywordMapper\n\nexport type SchemaMapper<T = string | null | undefined> = {\n [K in keyof SchemaKeywordMapper]: (() => T | undefined) | undefined\n}\n\nexport type SchemaKeywordBase<T> = {\n keyword: SchemaKeyword\n args: T\n}\n\nexport type Schema = { keyword: string } | SchemaKeywordMapper[keyof SchemaKeywordMapper]\n\nexport type SchemaTree = {\n parent: Schema | undefined\n current: Schema\n siblings: Schema[]\n /**\n * this will be equal to the key of a property(object)\n */\n name?: string\n}\n\nexport function isKeyword<T extends Schema, K extends keyof SchemaKeywordMapper>(meta: T, keyword: K): meta is Extract<T, SchemaKeywordMapper[K]> {\n return meta.keyword === keyword\n}\n","import { BaseGenerator, type FileMetaBase } from '@kubb/core'\nimport transformers, { pascalCase } from '@kubb/core/transformers'\nimport { getUniqueName } from '@kubb/core/utils'\n\nimport { isDiscriminator, isNullable, isReference } from '@kubb/oas'\nimport { isDeepEqual, isNumber, uniqueWith } from 'remeda'\nimport { isKeyword, schemaKeywords } from './SchemaMapper.ts'\nimport { getSchemaFactory } from './utils/getSchemaFactory.ts'\nimport { getSchemas } from './utils/getSchemas.ts'\n\nimport type { Plugin, PluginFactoryOptions, PluginManager, ResolveNameParams } from '@kubb/core'\nimport type * as KubbFile from '@kubb/fs/types'\n\nimport type { Oas, OpenAPIV3, SchemaObject, contentType } from '@kubb/oas'\nimport type { Schema, SchemaKeywordMapper } from './SchemaMapper.ts'\nimport type { Generator } from './generator.tsx'\nimport type { OperationSchema, Override, Refs } from './types.ts'\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 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 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 deepSearch<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): Array<SchemaKeywordMapper[T]> {\n return SchemaGenerator.deepSearch<T>(tree, keyword)\n }\n\n find<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n return SchemaGenerator.find<T>(tree, keyword)\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 findInObject<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n let foundItem: SchemaKeywordMapper[T] | undefined = 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.object)) {\n Object.values(schema.args?.properties || {}).forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>(entrySchema, keyword)\n }\n })\n\n Object.values(schema.args?.additionalProperties || {}).forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n })\n\n return foundItem\n }\n\n static find<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n let foundItem: SchemaKeywordMapper[T] | undefined = 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 #getUsedEnumNames(props: SchemaProps) {\n const options = this.#getOptions(props)\n\n return options.usedEnumNames || {}\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 #getUnknownReturn(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 /**\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.#getUnknownReturn({ 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 }: { schemaObject: SchemaObject; schema: TSchema; discriminator: OpenAPIV3.DiscriminatorObject }): 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: schema.args.map((arg) => {\n const isRef = isKeyword(arg, schemaKeywords.ref)\n\n if (isRef) {\n const [key] = Object.entries(discriminator.mapping || {}).find(([_key, value]) => value === arg.args.$ref) || []\n\n if (!key) {\n throw new Error(`Can not find a key in discriminator ${JSON.stringify(schema)}`)\n }\n\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 return arg\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 unknownReturn = this.#getUnknownReturn({ schemaObject, name })\n\n if (!schemaObject) {\n return [{ keyword: unknownReturn }]\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 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 baseItems.unshift({ keyword: schemaKeywords.max, args: max })\n }\n\n if (min !== undefined) {\n baseItems.unshift({ keyword: schemaKeywords.min, args: min })\n }\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 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) {\n // union\n const schemaWithoutOneOf = { ...schemaObject, oneOf: undefined }\n\n const union: SchemaKeywordMapper['union'] = {\n keyword: schemaKeywords.union,\n args: schemaObject.oneOf\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 const discriminator = this.context.oas.getDiscriminator(schemaObject)\n\n if (discriminator) {\n return [this.#addDiscriminatorToSchema({ schemaObject: schemaWithoutOneOf, schema: union, discriminator }), ...baseItems]\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.anyOf) {\n // union\n const schemaWithoutAnyOf = { ...schemaObject, anyOf: undefined }\n\n const union: SchemaKeywordMapper['union'] = {\n keyword: schemaKeywords.union,\n args: 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 .map((item) => {\n if (isKeyword(item, schemaKeywords.object)) {\n return {\n ...item,\n args: {\n ...item.args,\n strict: true,\n },\n }\n }\n return item\n }),\n }\n\n const discriminator = this.context.oas.getDiscriminator(schemaObject)\n\n if (discriminator) {\n return [this.#addDiscriminatorToSchema({ schemaObject: schemaWithoutAnyOf, schema: union, discriminator }), ...baseItems]\n }\n\n if (schemaWithoutAnyOf.properties) {\n const propertySchemas = this.parse({ schemaObject: schemaWithoutAnyOf, 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 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) {\n // TODO use of Required ts helper instead\n const schemas = schemaObject.allOf\n .map((item) => {\n if (isReference(item)) {\n return this.context.oas.get(item.$ref) as SchemaObject\n }\n })\n .filter(Boolean)\n\n const items = schemaWithoutAllOf.required\n .filter((key) => {\n // filter out keys that are already part of the properties(reduce duplicated keys(https://github.com/kubb-labs/kubb/issues/1492)\n if (schemaWithoutAllOf.properties) {\n return !Object.keys(schemaWithoutAllOf.properties).includes(key)\n }\n\n // schema should include required fields when necessary https://github.com/kubb-labs/kubb/issues/1522\n return true\n })\n .map((key) => {\n const schema = schemas.find((item) => item.properties && Object.keys(item.properties).find((propertyKey) => propertyKey === key))\n\n if (schema?.properties?.[key]) {\n return {\n ...schema,\n properties: {\n [key]: schema.properties[key],\n },\n required: [key],\n }\n }\n })\n .filter(Boolean)\n\n and.args = [...(and.args || []), ...items.flatMap((item) => this.parse({ schemaObject: item as SchemaObject, name, parentName }))]\n }\n\n if (schemaWithoutAllOf.properties) {\n and.args = [...(and.args || []), ...this.parse({ schemaObject: schemaWithoutAllOf, name, parentName })]\n }\n\n return [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.#getUsedEnumNames({ schemaObject, name }))\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 if (schemaObject['const']) {\n return [\n {\n keyword: schemaKeywords.const,\n args: {\n name: schemaObject['const'],\n format: typeof schemaObject['const'] === 'number' ? 'number' : 'string',\n value: schemaObject['const'],\n },\n },\n ...baseItems,\n ]\n }\n return [{ keyword: schemaKeywords.null }]\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: unknownReturn }]\n }\n\n async build(...generators: Array<Generator<TPluginOptions>>): Promise<Array<KubbFile.File<TFileMeta>>> {\n const { oas, contentType, include } = this.context\n\n const schemas = getSchemas({ oas, contentType, includes: include })\n\n const promises = Object.entries(schemas).reduce((acc, [name, value]) => {\n if (!value) {\n return acc\n }\n\n const options = this.#getOptions({ name })\n const promiseOperation = this.schema.call(this, name, value, {\n ...this.options,\n ...options,\n })\n\n if (promiseOperation) {\n acc.push(promiseOperation)\n }\n\n generators?.forEach((generator) => {\n const tree = this.parse({ schemaObject: value, name: name })\n\n const promise = generator.schema?.({\n instance: this,\n schema: {\n name,\n value,\n tree,\n },\n options: {\n ...this.options,\n ...options,\n },\n } as any) as Promise<Array<KubbFile.File<TFileMeta>>>\n\n if (promise) {\n acc.push(promise)\n }\n })\n\n return acc\n }, [] as SchemaMethodResult<TFileMeta>[])\n\n const files = await Promise.all(promises)\n\n // using .flat because schemaGenerator[method] can return an array of files or just one file\n return files.flat().filter(Boolean)\n }\n\n /**\n * Schema\n */\n async schema(_name: string, _object: SchemaObject, _options: TOptions): SchemaMethodResult<TFileMeta> {\n return []\n }\n}\n"]}
@@ -441,9 +441,7 @@ var SchemaGenerator = class _SchemaGenerator extends BaseGenerator {
441
441
  name,
442
442
  parentName
443
443
  })[0]
444
- ).filter(Boolean).filter((item) => !isKeyword(item, schemaKeywords.unknown)).map(
445
- (item) => isKeyword(item, schemaKeywords.object) ? { ...item, args: { ...item.args, strict: true } } : item
446
- )
444
+ ).filter(Boolean).filter((item) => !isKeyword(item, schemaKeywords.unknown)).map((item) => isKeyword(item, schemaKeywords.object) ? { ...item, args: { ...item.args, strict: true } } : item)
447
445
  }
448
446
  ];
449
447
  return [...parsedItems, ...baseItems].filter(Boolean);
@@ -682,6 +680,7 @@ var SchemaGenerator = class _SchemaGenerator extends BaseGenerator {
682
680
  }
683
681
  if ("prefixItems" in schemaObject) {
684
682
  const prefixItems = schemaObject.prefixItems;
683
+ const items = "items" in schemaObject ? schemaObject.items : [];
685
684
  const min2 = schemaObject.minimum ?? schemaObject.minLength ?? schemaObject.minItems ?? void 0;
686
685
  const max2 = schemaObject.maximum ?? schemaObject.maxLength ?? schemaObject.maxItems ?? void 0;
687
686
  return [
@@ -692,7 +691,12 @@ var SchemaGenerator = class _SchemaGenerator extends BaseGenerator {
692
691
  max: max2,
693
692
  items: prefixItems.map((item) => {
694
693
  return this.parse({ schemaObject: item, name, parentName })[0];
695
- }).filter(Boolean)
694
+ }).filter(Boolean),
695
+ rest: this.parse({
696
+ schemaObject: items,
697
+ name,
698
+ parentName
699
+ })[0]
696
700
  }
697
701
  },
698
702
  ...baseItems.filter((item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max)
@@ -890,5 +894,5 @@ var SchemaGenerator = class _SchemaGenerator extends BaseGenerator {
890
894
  };
891
895
 
892
896
  export { SchemaGenerator, isKeyword, schemaKeywords };
893
- //# sourceMappingURL=chunk-PIQSLW77.js.map
894
- //# sourceMappingURL=chunk-PIQSLW77.js.map
897
+ //# sourceMappingURL=chunk-P4D5362B.js.map
898
+ //# sourceMappingURL=chunk-P4D5362B.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/SchemaMapper.ts","../src/SchemaGenerator.ts"],"names":["name","min","max"],"mappings":"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","file":"chunk-P4D5362B.js","sourcesContent":["import type * as KubbFile from '@kubb/fs/types'\n\nexport type SchemaKeywordMapper = {\n object: {\n keyword: 'object'\n args: {\n properties: { [x: string]: Schema[] }\n additionalProperties: Schema[]\n strict?: boolean\n }\n }\n url: { keyword: 'url' }\n readOnly: { keyword: 'readOnly' }\n writeOnly: { keyword: 'writeOnly' }\n uuid: { keyword: 'uuid' }\n email: { keyword: 'email' }\n firstName: { keyword: 'firstName' }\n lastName: { keyword: 'lastName' }\n phone: { keyword: 'phone' }\n password: { keyword: 'password' }\n date: { keyword: 'date'; args: { type?: 'date' | 'string' } }\n time: { keyword: 'time'; args: { type?: 'date' | 'string' } }\n datetime: { keyword: 'datetime'; args: { offset?: boolean; local?: boolean } }\n tuple: { keyword: 'tuple'; args: { items: Schema[]; min?: number; max?: number, rest?: Schema } }\n array: {\n keyword: 'array'\n args: { items: Schema[]; min?: number; max?: number; unique?: boolean }\n }\n enum: {\n keyword: 'enum'\n args: {\n name: string\n typeName: string\n asConst: boolean\n items: Array<{\n name: string | number\n format: 'string' | 'number' | 'boolean'\n value?: string | number | boolean\n }>\n }\n }\n and: { keyword: 'and'; args: Schema[] }\n const: {\n keyword: 'const'\n args: {\n name: string | number\n format: 'string' | 'number' | 'boolean'\n value?: string | number | boolean\n }\n }\n union: { keyword: 'union'; args: Schema[] }\n ref: {\n keyword: 'ref'\n args: {\n name: string\n $ref: string\n /**\n * Full qualified path.\n */\n path: KubbFile.OptionalPath\n /**\n * When true `File.Import` will be used.\n * When false a reference will be used inside the current file.\n */\n isImportable: boolean\n }\n }\n matches: { keyword: 'matches'; args?: string }\n boolean: { keyword: 'boolean' }\n default: { keyword: 'default'; args: string | number | boolean }\n string: { keyword: 'string' }\n integer: { keyword: 'integer' }\n number: { keyword: 'number' }\n max: { keyword: 'max'; args: number }\n min: { keyword: 'min'; args: number }\n describe: { keyword: 'describe'; args: string }\n example: { keyword: 'example'; args: string }\n deprecated: { keyword: 'deprecated' }\n optional: { keyword: 'optional' }\n undefined: { keyword: 'undefined' }\n nullish: { keyword: 'nullish' }\n nullable: { keyword: 'nullable' }\n null: { keyword: 'null' }\n any: { keyword: 'any' }\n unknown: { keyword: 'unknown' }\n void: { keyword: 'void' }\n blob: { keyword: 'blob' }\n schema: { keyword: 'schema'; args: { type: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object'; format?: string } }\n name: { keyword: 'name'; args: string }\n catchall: { keyword: 'catchall' }\n interface: { keyword: 'interface' }\n}\n\nexport const schemaKeywords = {\n any: 'any',\n unknown: 'unknown',\n number: 'number',\n integer: 'integer',\n string: 'string',\n boolean: 'boolean',\n undefined: 'undefined',\n nullable: 'nullable',\n null: 'null',\n nullish: 'nullish',\n array: 'array',\n tuple: 'tuple',\n enum: 'enum',\n union: 'union',\n datetime: 'datetime',\n date: 'date',\n email: 'email',\n uuid: 'uuid',\n url: 'url',\n void: 'void',\n /* intersection */\n default: 'default',\n const: 'const',\n and: 'and',\n describe: 'describe',\n min: 'min',\n max: 'max',\n optional: 'optional',\n readOnly: 'readOnly',\n writeOnly: 'writeOnly',\n\n // custom ones\n object: 'object',\n ref: 'ref',\n matches: 'matches',\n firstName: 'firstName',\n lastName: 'lastName',\n password: 'password',\n phone: 'phone',\n blob: 'blob',\n deprecated: 'deprecated',\n example: 'example',\n schema: 'schema',\n catchall: 'catchall',\n time: 'time',\n name: 'name',\n interface: 'interface',\n} satisfies {\n [K in keyof SchemaKeywordMapper]: SchemaKeywordMapper[K]['keyword']\n}\n\nexport type SchemaKeyword = keyof SchemaKeywordMapper\n\nexport type SchemaMapper<T = string | null | undefined> = {\n [K in keyof SchemaKeywordMapper]: (() => T | undefined) | undefined\n}\n\nexport type SchemaKeywordBase<T> = {\n keyword: SchemaKeyword\n args: T\n}\n\nexport type Schema = { keyword: string } | SchemaKeywordMapper[keyof SchemaKeywordMapper]\n\nexport type SchemaTree = {\n parent: Schema | undefined\n current: Schema\n siblings: Schema[]\n /**\n * this will be equal to the key of a property(object)\n */\n name?: string\n}\n\nexport function isKeyword<T extends Schema, K extends keyof SchemaKeywordMapper>(meta: T, keyword: K): meta is Extract<T, SchemaKeywordMapper[K]> {\n return meta.keyword === keyword\n}\n","import { BaseGenerator, type FileMetaBase } from '@kubb/core'\nimport transformers, { pascalCase } from '@kubb/core/transformers'\nimport { getUniqueName } from '@kubb/core/utils'\n\nimport { isDiscriminator, isNullable, isReference } from '@kubb/oas'\nimport { isDeepEqual, isNumber, uniqueWith } from 'remeda'\nimport { isKeyword, schemaKeywords } from './SchemaMapper.ts'\nimport { getSchemaFactory } from './utils/getSchemaFactory.ts'\nimport { getSchemas } from './utils/getSchemas.ts'\n\nimport type { Plugin, PluginFactoryOptions, PluginManager, ResolveNameParams } from '@kubb/core'\nimport type * as KubbFile from '@kubb/fs/types'\n\nimport type { Oas, OpenAPIV3, SchemaObject, contentType } from '@kubb/oas'\nimport type { Schema, SchemaKeywordMapper } from './SchemaMapper.ts'\nimport type { Generator } from './generator.tsx'\nimport type { OperationSchema, Override, Refs } from './types.ts'\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 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 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 deepSearch<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): Array<SchemaKeywordMapper[T]> {\n return SchemaGenerator.deepSearch<T>(tree, keyword)\n }\n\n find<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n return SchemaGenerator.find<T>(tree, keyword)\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 findInObject<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n let foundItem: SchemaKeywordMapper[T] | undefined = 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.object)) {\n Object.values(schema.args?.properties || {}).forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>(entrySchema, keyword)\n }\n })\n\n Object.values(schema.args?.additionalProperties || {}).forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n })\n\n return foundItem\n }\n\n static find<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n let foundItem: SchemaKeywordMapper[T] | undefined = 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 #getUsedEnumNames(props: SchemaProps) {\n const options = this.#getOptions(props)\n\n return options.usedEnumNames || {}\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 #getUnknownReturn(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 /**\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.#getUnknownReturn({ 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 }: { schemaObject: SchemaObject; schema: TSchema; discriminator: OpenAPIV3.DiscriminatorObject }): 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: schema.args.map((arg) => {\n const isRef = isKeyword(arg, schemaKeywords.ref)\n\n if (isRef) {\n const [key] = Object.entries(discriminator.mapping || {}).find(([_key, value]) => value === arg.args.$ref) || []\n\n if (!key) {\n throw new Error(`Can not find a key in discriminator ${JSON.stringify(schema)}`)\n }\n\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 return arg\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 unknownReturn = this.#getUnknownReturn({ schemaObject, name })\n\n if (!schemaObject) {\n return [{ keyword: unknownReturn }]\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 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 baseItems.unshift({ keyword: schemaKeywords.max, args: max })\n }\n\n if (min !== undefined) {\n baseItems.unshift({ keyword: schemaKeywords.min, args: min })\n }\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 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) {\n // union\n const schemaWithoutOneOf = { ...schemaObject, oneOf: undefined }\n\n const union: SchemaKeywordMapper['union'] = {\n keyword: schemaKeywords.union,\n args: schemaObject.oneOf\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 const discriminator = this.context.oas.getDiscriminator(schemaObject)\n\n if (discriminator) {\n return [this.#addDiscriminatorToSchema({ schemaObject: schemaWithoutOneOf, schema: union, discriminator }), ...baseItems]\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.anyOf) {\n // union\n const schemaWithoutAnyOf = { ...schemaObject, anyOf: undefined }\n\n const union: SchemaKeywordMapper['union'] = {\n keyword: schemaKeywords.union,\n args: 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 .map((item) => {\n if (isKeyword(item, schemaKeywords.object)) {\n return {\n ...item,\n args: {\n ...item.args,\n strict: true,\n },\n }\n }\n return item\n }),\n }\n\n const discriminator = this.context.oas.getDiscriminator(schemaObject)\n\n if (discriminator) {\n return [this.#addDiscriminatorToSchema({ schemaObject: schemaWithoutAnyOf, schema: union, discriminator }), ...baseItems]\n }\n\n if (schemaWithoutAnyOf.properties) {\n const propertySchemas = this.parse({ schemaObject: schemaWithoutAnyOf, 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 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) {\n // TODO use of Required ts helper instead\n const schemas = schemaObject.allOf\n .map((item) => {\n if (isReference(item)) {\n return this.context.oas.get(item.$ref) as SchemaObject\n }\n })\n .filter(Boolean)\n\n const items = schemaWithoutAllOf.required\n .filter((key) => {\n // filter out keys that are already part of the properties(reduce duplicated keys(https://github.com/kubb-labs/kubb/issues/1492)\n if (schemaWithoutAllOf.properties) {\n return !Object.keys(schemaWithoutAllOf.properties).includes(key)\n }\n\n // schema should include required fields when necessary https://github.com/kubb-labs/kubb/issues/1522\n return true\n })\n .map((key) => {\n const schema = schemas.find((item) => item.properties && Object.keys(item.properties).find((propertyKey) => propertyKey === key))\n\n if (schema?.properties?.[key]) {\n return {\n ...schema,\n properties: {\n [key]: schema.properties[key],\n },\n required: [key],\n }\n }\n })\n .filter(Boolean)\n\n and.args = [...(and.args || []), ...items.flatMap((item) => this.parse({ schemaObject: item as SchemaObject, name, parentName }))]\n }\n\n if (schemaWithoutAllOf.properties) {\n and.args = [...(and.args || []), ...this.parse({ schemaObject: schemaWithoutAllOf, name, parentName })]\n }\n\n return [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.#getUsedEnumNames({ schemaObject, name }))\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 if (schemaObject['const']) {\n return [\n {\n keyword: schemaKeywords.const,\n args: {\n name: schemaObject['const'],\n format: typeof schemaObject['const'] === 'number' ? 'number' : 'string',\n value: schemaObject['const'],\n },\n },\n ...baseItems,\n ]\n }\n return [{ keyword: schemaKeywords.null }]\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: unknownReturn }]\n }\n\n async build(...generators: Array<Generator<TPluginOptions>>): Promise<Array<KubbFile.File<TFileMeta>>> {\n const { oas, contentType, include } = this.context\n\n const schemas = getSchemas({ oas, contentType, includes: include })\n\n const promises = Object.entries(schemas).reduce((acc, [name, value]) => {\n if (!value) {\n return acc\n }\n\n const options = this.#getOptions({ name })\n const promiseOperation = this.schema.call(this, name, value, {\n ...this.options,\n ...options,\n })\n\n if (promiseOperation) {\n acc.push(promiseOperation)\n }\n\n generators?.forEach((generator) => {\n const tree = this.parse({ schemaObject: value, name: name })\n\n const promise = generator.schema?.({\n instance: this,\n schema: {\n name,\n value,\n tree,\n },\n options: {\n ...this.options,\n ...options,\n },\n } as any) as Promise<Array<KubbFile.File<TFileMeta>>>\n\n if (promise) {\n acc.push(promise)\n }\n })\n\n return acc\n }, [] as SchemaMethodResult<TFileMeta>[])\n\n const files = await Promise.all(promises)\n\n // using .flat because schemaGenerator[method] can return an array of files or just one file\n return files.flat().filter(Boolean)\n }\n\n /**\n * Schema\n */\n async schema(_name: string, _object: SchemaObject, _options: TOptions): SchemaMethodResult<TFileMeta> {\n return []\n }\n}\n"]}
@@ -1,8 +1,8 @@
1
- import { S as Schema } from './Schema-DTc2F3jG.cjs';
1
+ import { S as Schema } from './Schema-DiDruSI3.cjs';
2
2
  import * as react from 'react';
3
3
  import { Operation as Operation$1, Oas as Oas$1 } from '@kubb/oas';
4
4
  import { KubbNode } from '@kubb/react/types';
5
- import { b as OperationGenerator } from './OperationGenerator-BrnQyed_.cjs';
5
+ import { b as OperationGenerator } from './OperationGenerator-Doxzl3g_.cjs';
6
6
  import '@kubb/core';
7
7
  import '@kubb/fs/types';
8
8
 
@@ -1,8 +1,8 @@
1
- import { S as Schema } from './Schema-Dhz38Get.js';
1
+ import { S as Schema } from './Schema-Binttxaz.js';
2
2
  import * as react from 'react';
3
3
  import { Operation as Operation$1, Oas as Oas$1 } from '@kubb/oas';
4
4
  import { KubbNode } from '@kubb/react/types';
5
- import { b as OperationGenerator } from './OperationGenerator-BrnQyed_.js';
5
+ import { b as OperationGenerator } from './OperationGenerator-Doxzl3g_.js';
6
6
  import '@kubb/core';
7
7
  import '@kubb/fs/types';
8
8
 
@@ -1,4 +1,4 @@
1
- import { o as Generator, P as PluginOas } from './OperationGenerator-BrnQyed_.cjs';
1
+ import { o as Generator, P as PluginOas } from './OperationGenerator-Doxzl3g_.cjs';
2
2
  import '@kubb/core';
3
3
  import '@kubb/fs/types';
4
4
  import '@kubb/oas';
@@ -1,4 +1,4 @@
1
- import { o as Generator, P as PluginOas } from './OperationGenerator-BrnQyed_.js';
1
+ import { o as Generator, P as PluginOas } from './OperationGenerator-Doxzl3g_.js';
2
2
  import '@kubb/core';
3
3
  import '@kubb/fs/types';
4
4
  import '@kubb/oas';
package/dist/hooks.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkORH7X5HE_cjs = require('./chunk-ORH7X5HE.cjs');
3
+ var chunk5MXJTXUC_cjs = require('./chunk-5MXJTXUC.cjs');
4
4
  require('./chunk-ZVFL3NXX.cjs');
5
5
  var chunkZ2NREI4X_cjs = require('./chunk-Z2NREI4X.cjs');
6
6
  var react = require('@kubb/react');
@@ -187,7 +187,7 @@ function useSchemaManager() {
187
187
  };
188
188
  };
189
189
  const getImports = (tree) => {
190
- const refs = chunkORH7X5HE_cjs.SchemaGenerator.deepSearch(tree, chunkORH7X5HE_cjs.schemaKeywords.ref);
190
+ const refs = chunk5MXJTXUC_cjs.SchemaGenerator.deepSearch(tree, chunk5MXJTXUC_cjs.schemaKeywords.ref);
191
191
  return refs?.map((item) => {
192
192
  if (!item.args.path || !item.args.isImportable) {
193
193
  return void 0;
package/dist/hooks.d.cts CHANGED
@@ -2,8 +2,8 @@ import { Oas, Operation, HttpMethod } from '@kubb/oas';
2
2
  import { Plugin, ResolveNameParams, FileMetaBase } from '@kubb/core';
3
3
  import * as KubbFile from '@kubb/fs/types';
4
4
  import { Mode } from '@kubb/fs/types';
5
- import { w as OperationSchemas, f as Schema } from './OperationGenerator-BrnQyed_.cjs';
6
- import { a as SchemaContextProps } from './Schema-DTc2F3jG.cjs';
5
+ import { w as OperationSchemas, f as Schema } from './OperationGenerator-Doxzl3g_.cjs';
6
+ import { a as SchemaContextProps } from './Schema-DiDruSI3.cjs';
7
7
  import '@kubb/react/types';
8
8
  import 'react';
9
9
 
package/dist/hooks.d.ts CHANGED
@@ -2,8 +2,8 @@ import { Oas, Operation, HttpMethod } from '@kubb/oas';
2
2
  import { Plugin, ResolveNameParams, FileMetaBase } from '@kubb/core';
3
3
  import * as KubbFile from '@kubb/fs/types';
4
4
  import { Mode } from '@kubb/fs/types';
5
- import { w as OperationSchemas, f as Schema } from './OperationGenerator-BrnQyed_.js';
6
- import { a as SchemaContextProps } from './Schema-Dhz38Get.js';
5
+ import { w as OperationSchemas, f as Schema } from './OperationGenerator-Doxzl3g_.js';
6
+ import { a as SchemaContextProps } from './Schema-Binttxaz.js';
7
7
  import '@kubb/react/types';
8
8
  import 'react';
9
9
 
package/dist/hooks.js CHANGED
@@ -1,4 +1,4 @@
1
- import { SchemaGenerator, schemaKeywords } from './chunk-PIQSLW77.js';
1
+ import { SchemaGenerator, schemaKeywords } from './chunk-P4D5362B.js';
2
2
  import './chunk-PORSNYI5.js';
3
3
  import { Oas, Operation, Schema } from './chunk-JNN4JPWK.js';
4
4
  import { useContext, useApp } from '@kubb/react';
package/dist/index.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
  var chunkES7R7N34_cjs = require('./chunk-ES7R7N34.cjs');
4
4
  var chunkDEDONPUL_cjs = require('./chunk-DEDONPUL.cjs');
5
5
  require('./chunk-PADR76WZ.cjs');
6
- var chunkORH7X5HE_cjs = require('./chunk-ORH7X5HE.cjs');
6
+ var chunk5MXJTXUC_cjs = require('./chunk-5MXJTXUC.cjs');
7
7
  require('./chunk-ZVFL3NXX.cjs');
8
8
  require('./chunk-Z2NREI4X.cjs');
9
9
  var core = require('@kubb/core');
@@ -345,7 +345,7 @@ var pluginOas = core.createPlugin((options) => {
345
345
  logger: this.logger
346
346
  });
347
347
  await oas.dereference();
348
- const schemaGenerator = new chunkORH7X5HE_cjs.SchemaGenerator(
348
+ const schemaGenerator = new chunk5MXJTXUC_cjs.SchemaGenerator(
349
349
  {
350
350
  unknownType: "unknown",
351
351
  dateType: "date",
@@ -391,15 +391,15 @@ Object.defineProperty(exports, "createReactGenerator", {
391
391
  });
392
392
  Object.defineProperty(exports, "SchemaGenerator", {
393
393
  enumerable: true,
394
- get: function () { return chunkORH7X5HE_cjs.SchemaGenerator; }
394
+ get: function () { return chunk5MXJTXUC_cjs.SchemaGenerator; }
395
395
  });
396
396
  Object.defineProperty(exports, "isKeyword", {
397
397
  enumerable: true,
398
- get: function () { return chunkORH7X5HE_cjs.isKeyword; }
398
+ get: function () { return chunk5MXJTXUC_cjs.isKeyword; }
399
399
  });
400
400
  Object.defineProperty(exports, "schemaKeywords", {
401
401
  enumerable: true,
402
- get: function () { return chunkORH7X5HE_cjs.schemaKeywords; }
402
+ get: function () { return chunk5MXJTXUC_cjs.schemaKeywords; }
403
403
  });
404
404
  exports.OperationGenerator = OperationGenerator;
405
405
  exports.pluginOas = pluginOas;
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { O as Options, P as PluginOas } from './OperationGenerator-BrnQyed_.cjs';
2
- export { A as API, E as Exclude, o as Generator, p as GeneratorOptions, G as GetSchemaGeneratorOptions, I as Include, b as OperationGenerator, a as OperationMethodResult, v as OperationSchema, w as OperationSchemas, x as OperationsByMethod, y as Override, R as ReactGeneratorOptions, r as Ref, t as Refs, q as ResolvePathOptions, u as Resolver, f as Schema, e as SchemaGenerator, S as SchemaGeneratorBuildOptions, c as SchemaGeneratorOptions, h as SchemaKeyword, i as SchemaKeywordBase, j as SchemaKeywordMapper, k as SchemaMapper, d as SchemaMethodResult, g as SchemaTree, m as createGenerator, n as createReactGenerator, l as isKeyword, s as schemaKeywords } from './OperationGenerator-BrnQyed_.cjs';
1
+ import { O as Options, P as PluginOas } from './OperationGenerator-Doxzl3g_.cjs';
2
+ export { A as API, E as Exclude, o as Generator, p as GeneratorOptions, G as GetSchemaGeneratorOptions, I as Include, b as OperationGenerator, a as OperationMethodResult, v as OperationSchema, w as OperationSchemas, x as OperationsByMethod, y as Override, R as ReactGeneratorOptions, r as Ref, t as Refs, q as ResolvePathOptions, u as Resolver, f as Schema, e as SchemaGenerator, S as SchemaGeneratorBuildOptions, c as SchemaGeneratorOptions, h as SchemaKeyword, i as SchemaKeywordBase, j as SchemaKeywordMapper, k as SchemaMapper, d as SchemaMethodResult, g as SchemaTree, m as createGenerator, n as createReactGenerator, l as isKeyword, s as schemaKeywords } from './OperationGenerator-Doxzl3g_.cjs';
3
3
  import * as _kubb_core from '@kubb/core';
4
4
  import '@kubb/fs/types';
5
5
  import '@kubb/oas';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { O as Options, P as PluginOas } from './OperationGenerator-BrnQyed_.js';
2
- export { A as API, E as Exclude, o as Generator, p as GeneratorOptions, G as GetSchemaGeneratorOptions, I as Include, b as OperationGenerator, a as OperationMethodResult, v as OperationSchema, w as OperationSchemas, x as OperationsByMethod, y as Override, R as ReactGeneratorOptions, r as Ref, t as Refs, q as ResolvePathOptions, u as Resolver, f as Schema, e as SchemaGenerator, S as SchemaGeneratorBuildOptions, c as SchemaGeneratorOptions, h as SchemaKeyword, i as SchemaKeywordBase, j as SchemaKeywordMapper, k as SchemaMapper, d as SchemaMethodResult, g as SchemaTree, m as createGenerator, n as createReactGenerator, l as isKeyword, s as schemaKeywords } from './OperationGenerator-BrnQyed_.js';
1
+ import { O as Options, P as PluginOas } from './OperationGenerator-Doxzl3g_.js';
2
+ export { A as API, E as Exclude, o as Generator, p as GeneratorOptions, G as GetSchemaGeneratorOptions, I as Include, b as OperationGenerator, a as OperationMethodResult, v as OperationSchema, w as OperationSchemas, x as OperationsByMethod, y as Override, R as ReactGeneratorOptions, r as Ref, t as Refs, q as ResolvePathOptions, u as Resolver, f as Schema, e as SchemaGenerator, S as SchemaGeneratorBuildOptions, c as SchemaGeneratorOptions, h as SchemaKeyword, i as SchemaKeywordBase, j as SchemaKeywordMapper, k as SchemaMapper, d as SchemaMethodResult, g as SchemaTree, m as createGenerator, n as createReactGenerator, l as isKeyword, s as schemaKeywords } from './OperationGenerator-Doxzl3g_.js';
3
3
  import * as _kubb_core from '@kubb/core';
4
4
  import '@kubb/fs/types';
5
5
  import '@kubb/oas';
package/dist/index.js CHANGED
@@ -2,8 +2,8 @@ import { jsonGenerator } from './chunk-RNF2QJEG.js';
2
2
  export { createGenerator, createReactGenerator } from './chunk-RNF2QJEG.js';
3
3
  import { parseFromConfig } from './chunk-QPFZUPQA.js';
4
4
  import './chunk-R47XMJ32.js';
5
- import { SchemaGenerator } from './chunk-PIQSLW77.js';
6
- export { SchemaGenerator, isKeyword, schemaKeywords } from './chunk-PIQSLW77.js';
5
+ import { SchemaGenerator } from './chunk-P4D5362B.js';
6
+ export { SchemaGenerator, isKeyword, schemaKeywords } from './chunk-P4D5362B.js';
7
7
  import './chunk-PORSNYI5.js';
8
8
  import './chunk-JNN4JPWK.js';
9
9
  import { createPlugin, FileManager, BaseGenerator } from '@kubb/core';
package/dist/utils.d.cts CHANGED
@@ -2,7 +2,7 @@ import { Operation, Oas, SchemaObject, OpenAPIV3, OpenAPIV3_1, contentType, OasT
2
2
  export { isOptional } from '@kubb/oas';
3
3
  import { FunctionParamsAST } from '@kubb/core/utils';
4
4
  import { Params } from '@kubb/react/types';
5
- import { v as OperationSchema } from './OperationGenerator-BrnQyed_.cjs';
5
+ import { v as OperationSchema } from './OperationGenerator-Doxzl3g_.cjs';
6
6
  import { Config, Output } from '@kubb/core';
7
7
  import '@kubb/fs/types';
8
8
 
package/dist/utils.d.ts CHANGED
@@ -2,7 +2,7 @@ import { Operation, Oas, SchemaObject, OpenAPIV3, OpenAPIV3_1, contentType, OasT
2
2
  export { isOptional } from '@kubb/oas';
3
3
  import { FunctionParamsAST } from '@kubb/core/utils';
4
4
  import { Params } from '@kubb/react/types';
5
- import { v as OperationSchema } from './OperationGenerator-BrnQyed_.js';
5
+ import { v as OperationSchema } from './OperationGenerator-Doxzl3g_.js';
6
6
  import { Config, Output } from '@kubb/core';
7
7
  import '@kubb/fs/types';
8
8
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/plugin-oas",
3
- "version": "3.10.5",
3
+ "version": "3.10.6",
4
4
  "description": "Generator swagger",
5
5
  "keywords": [
6
6
  "typescript",
@@ -76,18 +76,18 @@
76
76
  "dependencies": {
77
77
  "@stoplight/yaml": "^4.3.0",
78
78
  "remeda": "^2.21.3",
79
- "@kubb/core": "3.10.5",
80
- "@kubb/fs": "3.10.5",
81
- "@kubb/oas": "3.10.5",
82
- "@kubb/react": "3.10.5"
79
+ "@kubb/core": "3.10.6",
80
+ "@kubb/fs": "3.10.6",
81
+ "@kubb/oas": "3.10.6",
82
+ "@kubb/react": "3.10.6"
83
83
  },
84
84
  "devDependencies": {
85
85
  "@types/react": "^18.3.20",
86
86
  "react": "^18.3.1",
87
87
  "tsup": "^8.4.0",
88
88
  "typescript": "^5.8.3",
89
- "@kubb/config-ts": "3.10.5",
90
- "@kubb/config-tsup": "3.10.5"
89
+ "@kubb/config-ts": "3.10.6",
90
+ "@kubb/config-tsup": "3.10.6"
91
91
  },
92
92
  "peerDependencies": {
93
93
  "@kubb/react": "^3.0.0"
@@ -528,20 +528,17 @@ export class SchemaGenerator<
528
528
  {
529
529
  keyword: schemaKeywords.union,
530
530
  args: items
531
- .map((item) =>
532
- this.parse({
533
- schemaObject: { ...schemaObject, type: item },
534
- name,
535
- parentName,
536
- })[0],
531
+ .map(
532
+ (item) =>
533
+ this.parse({
534
+ schemaObject: { ...schemaObject, type: item },
535
+ name,
536
+ parentName,
537
+ })[0],
537
538
  )
538
539
  .filter(Boolean)
539
540
  .filter((item) => !isKeyword(item, schemaKeywords.unknown))
540
- .map((item) =>
541
- isKeyword(item, schemaKeywords.object)
542
- ? { ...item, args: { ...item.args, strict: true } }
543
- : item,
544
- ),
541
+ .map((item) => (isKeyword(item, schemaKeywords.object) ? { ...item, args: { ...item.args, strict: true } } : item)),
545
542
  },
546
543
  ]
547
544
 
@@ -849,6 +846,7 @@ export class SchemaGenerator<
849
846
 
850
847
  if ('prefixItems' in schemaObject) {
851
848
  const prefixItems = schemaObject.prefixItems as SchemaObject[]
849
+ const items = "items" in schemaObject ? schemaObject.items as SchemaObject[] : []
852
850
  const min = schemaObject.minimum ?? schemaObject.minLength ?? schemaObject.minItems ?? undefined
853
851
  const max = schemaObject.maximum ?? schemaObject.maxLength ?? schemaObject.maxItems ?? undefined
854
852
 
@@ -863,6 +861,11 @@ export class SchemaGenerator<
863
861
  return this.parse({ schemaObject: item, name, parentName })[0]
864
862
  })
865
863
  .filter(Boolean),
864
+ rest: this.parse({
865
+ schemaObject: items,
866
+ name,
867
+ parentName,
868
+ })[0],
866
869
  },
867
870
  },
868
871
  ...baseItems.filter((item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max),
@@ -983,7 +986,7 @@ export class SchemaGenerator<
983
986
  break
984
987
  }
985
988
  }
986
-
989
+
987
990
  if (schemaObject.pattern && schemaObject.type === 'string') {
988
991
  baseItems.unshift({
989
992
  keyword: schemaKeywords.matches,
@@ -1047,8 +1050,9 @@ export class SchemaGenerator<
1047
1050
  }
1048
1051
 
1049
1052
  if (schemaObject.type) {
1050
-
1051
- const type = (Array.isArray(schemaObject.type) ? schemaObject.type.filter((item) => item !== 'null')[0] : schemaObject.type) as OpenAPIV3.NonArraySchemaObjectType
1053
+ const type = (
1054
+ Array.isArray(schemaObject.type) ? schemaObject.type.filter((item) => item !== 'null')[0] : schemaObject.type
1055
+ ) as OpenAPIV3.NonArraySchemaObjectType
1052
1056
 
1053
1057
  if (!['boolean', 'object', 'number', 'string', 'integer', 'null'].includes(type)) {
1054
1058
  this.context.pluginManager.logger.emit('warning', `Schema type '${schemaObject.type}' is not valid for schema ${parentName}.${name}`)
@@ -21,7 +21,7 @@ export type SchemaKeywordMapper = {
21
21
  date: { keyword: 'date'; args: { type?: 'date' | 'string' } }
22
22
  time: { keyword: 'time'; args: { type?: 'date' | 'string' } }
23
23
  datetime: { keyword: 'datetime'; args: { offset?: boolean; local?: boolean } }
24
- tuple: { keyword: 'tuple'; args: { items: Schema[]; min?: number; max?: number } }
24
+ tuple: { keyword: 'tuple'; args: { items: Schema[]; min?: number; max?: number, rest?: Schema } }
25
25
  array: {
26
26
  keyword: 'array'
27
27
  args: { items: Schema[]; min?: number; max?: number; unique?: boolean }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/SchemaMapper.ts","../src/SchemaGenerator.ts"],"names":["BaseGenerator","uniqueWith","isDeepEqual","isDiscriminator","getUniqueName","getSchemaFactory","isNullable","transformers","isReference","pascalCase","name","isNumber","min","max","getSchemas"],"mappings":"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","file":"chunk-ORH7X5HE.cjs","sourcesContent":["import type * as KubbFile from '@kubb/fs/types'\n\nexport type SchemaKeywordMapper = {\n object: {\n keyword: 'object'\n args: {\n properties: { [x: string]: Schema[] }\n additionalProperties: Schema[]\n strict?: boolean\n }\n }\n url: { keyword: 'url' }\n readOnly: { keyword: 'readOnly' }\n writeOnly: { keyword: 'writeOnly' }\n uuid: { keyword: 'uuid' }\n email: { keyword: 'email' }\n firstName: { keyword: 'firstName' }\n lastName: { keyword: 'lastName' }\n phone: { keyword: 'phone' }\n password: { keyword: 'password' }\n date: { keyword: 'date'; args: { type?: 'date' | 'string' } }\n time: { keyword: 'time'; args: { type?: 'date' | 'string' } }\n datetime: { keyword: 'datetime'; args: { offset?: boolean; local?: boolean } }\n tuple: { keyword: 'tuple'; args: { items: Schema[]; min?: number; max?: number } }\n array: {\n keyword: 'array'\n args: { items: Schema[]; min?: number; max?: number; unique?: boolean }\n }\n enum: {\n keyword: 'enum'\n args: {\n name: string\n typeName: string\n asConst: boolean\n items: Array<{\n name: string | number\n format: 'string' | 'number' | 'boolean'\n value?: string | number | boolean\n }>\n }\n }\n and: { keyword: 'and'; args: Schema[] }\n const: {\n keyword: 'const'\n args: {\n name: string | number\n format: 'string' | 'number' | 'boolean'\n value?: string | number | boolean\n }\n }\n union: { keyword: 'union'; args: Schema[] }\n ref: {\n keyword: 'ref'\n args: {\n name: string\n $ref: string\n /**\n * Full qualified path.\n */\n path: KubbFile.OptionalPath\n /**\n * When true `File.Import` will be used.\n * When false a reference will be used inside the current file.\n */\n isImportable: boolean\n }\n }\n matches: { keyword: 'matches'; args?: string }\n boolean: { keyword: 'boolean' }\n default: { keyword: 'default'; args: string | number | boolean }\n string: { keyword: 'string' }\n integer: { keyword: 'integer' }\n number: { keyword: 'number' }\n max: { keyword: 'max'; args: number }\n min: { keyword: 'min'; args: number }\n describe: { keyword: 'describe'; args: string }\n example: { keyword: 'example'; args: string }\n deprecated: { keyword: 'deprecated' }\n optional: { keyword: 'optional' }\n undefined: { keyword: 'undefined' }\n nullish: { keyword: 'nullish' }\n nullable: { keyword: 'nullable' }\n null: { keyword: 'null' }\n any: { keyword: 'any' }\n unknown: { keyword: 'unknown' }\n void: { keyword: 'void' }\n blob: { keyword: 'blob' }\n schema: { keyword: 'schema'; args: { type: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object'; format?: string } }\n name: { keyword: 'name'; args: string }\n catchall: { keyword: 'catchall' }\n interface: { keyword: 'interface' }\n}\n\nexport const schemaKeywords = {\n any: 'any',\n unknown: 'unknown',\n number: 'number',\n integer: 'integer',\n string: 'string',\n boolean: 'boolean',\n undefined: 'undefined',\n nullable: 'nullable',\n null: 'null',\n nullish: 'nullish',\n array: 'array',\n tuple: 'tuple',\n enum: 'enum',\n union: 'union',\n datetime: 'datetime',\n date: 'date',\n email: 'email',\n uuid: 'uuid',\n url: 'url',\n void: 'void',\n /* intersection */\n default: 'default',\n const: 'const',\n and: 'and',\n describe: 'describe',\n min: 'min',\n max: 'max',\n optional: 'optional',\n readOnly: 'readOnly',\n writeOnly: 'writeOnly',\n\n // custom ones\n object: 'object',\n ref: 'ref',\n matches: 'matches',\n firstName: 'firstName',\n lastName: 'lastName',\n password: 'password',\n phone: 'phone',\n blob: 'blob',\n deprecated: 'deprecated',\n example: 'example',\n schema: 'schema',\n catchall: 'catchall',\n time: 'time',\n name: 'name',\n interface: 'interface',\n} satisfies {\n [K in keyof SchemaKeywordMapper]: SchemaKeywordMapper[K]['keyword']\n}\n\nexport type SchemaKeyword = keyof SchemaKeywordMapper\n\nexport type SchemaMapper<T = string | null | undefined> = {\n [K in keyof SchemaKeywordMapper]: (() => T | undefined) | undefined\n}\n\nexport type SchemaKeywordBase<T> = {\n keyword: SchemaKeyword\n args: T\n}\n\nexport type Schema = { keyword: string } | SchemaKeywordMapper[keyof SchemaKeywordMapper]\n\nexport type SchemaTree = {\n parent: Schema | undefined\n current: Schema\n siblings: Schema[]\n /**\n * this will be equal to the key of a property(object)\n */\n name?: string\n}\n\nexport function isKeyword<T extends Schema, K extends keyof SchemaKeywordMapper>(meta: T, keyword: K): meta is Extract<T, SchemaKeywordMapper[K]> {\n return meta.keyword === keyword\n}\n","import { BaseGenerator, type FileMetaBase } from '@kubb/core'\nimport transformers, { pascalCase } from '@kubb/core/transformers'\nimport { getUniqueName } from '@kubb/core/utils'\n\nimport { isDiscriminator, isNullable, isReference } from '@kubb/oas'\nimport { isDeepEqual, isNumber, uniqueWith } from 'remeda'\nimport { isKeyword, schemaKeywords } from './SchemaMapper.ts'\nimport { getSchemaFactory } from './utils/getSchemaFactory.ts'\nimport { getSchemas } from './utils/getSchemas.ts'\n\nimport type { Plugin, PluginFactoryOptions, PluginManager, ResolveNameParams } from '@kubb/core'\nimport type * as KubbFile from '@kubb/fs/types'\n\nimport type { Oas, OpenAPIV3, SchemaObject, contentType } from '@kubb/oas'\nimport type { Schema, SchemaKeywordMapper } from './SchemaMapper.ts'\nimport type { Generator } from './generator.tsx'\nimport type { OperationSchema, Override, Refs } from './types.ts'\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 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 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 deepSearch<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): Array<SchemaKeywordMapper[T]> {\n return SchemaGenerator.deepSearch<T>(tree, keyword)\n }\n\n find<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n return SchemaGenerator.find<T>(tree, keyword)\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 findInObject<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n let foundItem: SchemaKeywordMapper[T] | undefined = 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.object)) {\n Object.values(schema.args?.properties || {}).forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>(entrySchema, keyword)\n }\n })\n\n Object.values(schema.args?.additionalProperties || {}).forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n })\n\n return foundItem\n }\n\n static find<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n let foundItem: SchemaKeywordMapper[T] | undefined = 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 #getUsedEnumNames(props: SchemaProps) {\n const options = this.#getOptions(props)\n\n return options.usedEnumNames || {}\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 #getUnknownReturn(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 /**\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.#getUnknownReturn({ 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 }: { schemaObject: SchemaObject; schema: TSchema; discriminator: OpenAPIV3.DiscriminatorObject }): 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: schema.args.map((arg) => {\n const isRef = isKeyword(arg, schemaKeywords.ref)\n\n if (isRef) {\n const [key] = Object.entries(discriminator.mapping || {}).find(([_key, value]) => value === arg.args.$ref) || []\n\n if (!key) {\n throw new Error(`Can not find a key in discriminator ${JSON.stringify(schema)}`)\n }\n\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 return arg\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 unknownReturn = this.#getUnknownReturn({ schemaObject, name })\n\n if (!schemaObject) {\n return [{ keyword: unknownReturn }]\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 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 baseItems.unshift({ keyword: schemaKeywords.max, args: max })\n }\n\n if (min !== undefined) {\n baseItems.unshift({ keyword: schemaKeywords.min, args: min })\n }\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((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) =>\n isKeyword(item, schemaKeywords.object)\n ? { ...item, args: { ...item.args, strict: true } }\n : item,\n ),\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 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) {\n // union\n const schemaWithoutOneOf = { ...schemaObject, oneOf: undefined }\n\n const union: SchemaKeywordMapper['union'] = {\n keyword: schemaKeywords.union,\n args: schemaObject.oneOf\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 const discriminator = this.context.oas.getDiscriminator(schemaObject)\n\n if (discriminator) {\n return [this.#addDiscriminatorToSchema({ schemaObject: schemaWithoutOneOf, schema: union, discriminator }), ...baseItems]\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.anyOf) {\n // union\n const schemaWithoutAnyOf = { ...schemaObject, anyOf: undefined }\n\n const union: SchemaKeywordMapper['union'] = {\n keyword: schemaKeywords.union,\n args: 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 .map((item) => {\n if (isKeyword(item, schemaKeywords.object)) {\n return {\n ...item,\n args: {\n ...item.args,\n strict: true,\n },\n }\n }\n return item\n }),\n }\n\n const discriminator = this.context.oas.getDiscriminator(schemaObject)\n\n if (discriminator) {\n return [this.#addDiscriminatorToSchema({ schemaObject: schemaWithoutAnyOf, schema: union, discriminator }), ...baseItems]\n }\n\n if (schemaWithoutAnyOf.properties) {\n const propertySchemas = this.parse({ schemaObject: schemaWithoutAnyOf, 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 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) {\n // TODO use of Required ts helper instead\n const schemas = schemaObject.allOf\n .map((item) => {\n if (isReference(item)) {\n return this.context.oas.get(item.$ref) as SchemaObject\n }\n })\n .filter(Boolean)\n\n const items = schemaWithoutAllOf.required\n .filter((key) => {\n // filter out keys that are already part of the properties(reduce duplicated keys(https://github.com/kubb-labs/kubb/issues/1492)\n if (schemaWithoutAllOf.properties) {\n return !Object.keys(schemaWithoutAllOf.properties).includes(key)\n }\n\n // schema should include required fields when necessary https://github.com/kubb-labs/kubb/issues/1522\n return true\n })\n .map((key) => {\n const schema = schemas.find((item) => item.properties && Object.keys(item.properties).find((propertyKey) => propertyKey === key))\n\n if (schema?.properties?.[key]) {\n return {\n ...schema,\n properties: {\n [key]: schema.properties[key],\n },\n required: [key],\n }\n }\n })\n .filter(Boolean)\n\n and.args = [...(and.args || []), ...items.flatMap((item) => this.parse({ schemaObject: item as SchemaObject, name, parentName }))]\n }\n\n if (schemaWithoutAllOf.properties) {\n and.args = [...(and.args || []), ...this.parse({ schemaObject: schemaWithoutAllOf, name, parentName })]\n }\n\n return [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.#getUsedEnumNames({ schemaObject, name }))\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 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 },\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 if (schemaObject['const']) {\n return [\n {\n keyword: schemaKeywords.const,\n args: {\n name: schemaObject['const'],\n format: typeof schemaObject['const'] === 'number' ? 'number' : 'string',\n value: schemaObject['const'],\n },\n },\n ...baseItems,\n ]\n }\n return [{ keyword: schemaKeywords.null }]\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 \n const type = (Array.isArray(schemaObject.type) ? schemaObject.type.filter((item) => item !== 'null')[0] : schemaObject.type) 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: unknownReturn }]\n }\n\n async build(...generators: Array<Generator<TPluginOptions>>): Promise<Array<KubbFile.File<TFileMeta>>> {\n const { oas, contentType, include } = this.context\n\n const schemas = getSchemas({ oas, contentType, includes: include })\n\n const promises = Object.entries(schemas).reduce((acc, [name, value]) => {\n if (!value) {\n return acc\n }\n\n const options = this.#getOptions({ name })\n const promiseOperation = this.schema.call(this, name, value, {\n ...this.options,\n ...options,\n })\n\n if (promiseOperation) {\n acc.push(promiseOperation)\n }\n\n generators?.forEach((generator) => {\n const tree = this.parse({ schemaObject: value, name: name })\n\n const promise = generator.schema?.({\n instance: this,\n schema: {\n name,\n value,\n tree,\n },\n options: {\n ...this.options,\n ...options,\n },\n } as any) as Promise<Array<KubbFile.File<TFileMeta>>>\n\n if (promise) {\n acc.push(promise)\n }\n })\n\n return acc\n }, [] as SchemaMethodResult<TFileMeta>[])\n\n const files = await Promise.all(promises)\n\n // using .flat because schemaGenerator[method] can return an array of files or just one file\n return files.flat().filter(Boolean)\n }\n\n /**\n * Schema\n */\n async schema(_name: string, _object: SchemaObject, _options: TOptions): SchemaMethodResult<TFileMeta> {\n return []\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/SchemaMapper.ts","../src/SchemaGenerator.ts"],"names":["name","min","max"],"mappings":"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","file":"chunk-PIQSLW77.js","sourcesContent":["import type * as KubbFile from '@kubb/fs/types'\n\nexport type SchemaKeywordMapper = {\n object: {\n keyword: 'object'\n args: {\n properties: { [x: string]: Schema[] }\n additionalProperties: Schema[]\n strict?: boolean\n }\n }\n url: { keyword: 'url' }\n readOnly: { keyword: 'readOnly' }\n writeOnly: { keyword: 'writeOnly' }\n uuid: { keyword: 'uuid' }\n email: { keyword: 'email' }\n firstName: { keyword: 'firstName' }\n lastName: { keyword: 'lastName' }\n phone: { keyword: 'phone' }\n password: { keyword: 'password' }\n date: { keyword: 'date'; args: { type?: 'date' | 'string' } }\n time: { keyword: 'time'; args: { type?: 'date' | 'string' } }\n datetime: { keyword: 'datetime'; args: { offset?: boolean; local?: boolean } }\n tuple: { keyword: 'tuple'; args: { items: Schema[]; min?: number; max?: number } }\n array: {\n keyword: 'array'\n args: { items: Schema[]; min?: number; max?: number; unique?: boolean }\n }\n enum: {\n keyword: 'enum'\n args: {\n name: string\n typeName: string\n asConst: boolean\n items: Array<{\n name: string | number\n format: 'string' | 'number' | 'boolean'\n value?: string | number | boolean\n }>\n }\n }\n and: { keyword: 'and'; args: Schema[] }\n const: {\n keyword: 'const'\n args: {\n name: string | number\n format: 'string' | 'number' | 'boolean'\n value?: string | number | boolean\n }\n }\n union: { keyword: 'union'; args: Schema[] }\n ref: {\n keyword: 'ref'\n args: {\n name: string\n $ref: string\n /**\n * Full qualified path.\n */\n path: KubbFile.OptionalPath\n /**\n * When true `File.Import` will be used.\n * When false a reference will be used inside the current file.\n */\n isImportable: boolean\n }\n }\n matches: { keyword: 'matches'; args?: string }\n boolean: { keyword: 'boolean' }\n default: { keyword: 'default'; args: string | number | boolean }\n string: { keyword: 'string' }\n integer: { keyword: 'integer' }\n number: { keyword: 'number' }\n max: { keyword: 'max'; args: number }\n min: { keyword: 'min'; args: number }\n describe: { keyword: 'describe'; args: string }\n example: { keyword: 'example'; args: string }\n deprecated: { keyword: 'deprecated' }\n optional: { keyword: 'optional' }\n undefined: { keyword: 'undefined' }\n nullish: { keyword: 'nullish' }\n nullable: { keyword: 'nullable' }\n null: { keyword: 'null' }\n any: { keyword: 'any' }\n unknown: { keyword: 'unknown' }\n void: { keyword: 'void' }\n blob: { keyword: 'blob' }\n schema: { keyword: 'schema'; args: { type: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object'; format?: string } }\n name: { keyword: 'name'; args: string }\n catchall: { keyword: 'catchall' }\n interface: { keyword: 'interface' }\n}\n\nexport const schemaKeywords = {\n any: 'any',\n unknown: 'unknown',\n number: 'number',\n integer: 'integer',\n string: 'string',\n boolean: 'boolean',\n undefined: 'undefined',\n nullable: 'nullable',\n null: 'null',\n nullish: 'nullish',\n array: 'array',\n tuple: 'tuple',\n enum: 'enum',\n union: 'union',\n datetime: 'datetime',\n date: 'date',\n email: 'email',\n uuid: 'uuid',\n url: 'url',\n void: 'void',\n /* intersection */\n default: 'default',\n const: 'const',\n and: 'and',\n describe: 'describe',\n min: 'min',\n max: 'max',\n optional: 'optional',\n readOnly: 'readOnly',\n writeOnly: 'writeOnly',\n\n // custom ones\n object: 'object',\n ref: 'ref',\n matches: 'matches',\n firstName: 'firstName',\n lastName: 'lastName',\n password: 'password',\n phone: 'phone',\n blob: 'blob',\n deprecated: 'deprecated',\n example: 'example',\n schema: 'schema',\n catchall: 'catchall',\n time: 'time',\n name: 'name',\n interface: 'interface',\n} satisfies {\n [K in keyof SchemaKeywordMapper]: SchemaKeywordMapper[K]['keyword']\n}\n\nexport type SchemaKeyword = keyof SchemaKeywordMapper\n\nexport type SchemaMapper<T = string | null | undefined> = {\n [K in keyof SchemaKeywordMapper]: (() => T | undefined) | undefined\n}\n\nexport type SchemaKeywordBase<T> = {\n keyword: SchemaKeyword\n args: T\n}\n\nexport type Schema = { keyword: string } | SchemaKeywordMapper[keyof SchemaKeywordMapper]\n\nexport type SchemaTree = {\n parent: Schema | undefined\n current: Schema\n siblings: Schema[]\n /**\n * this will be equal to the key of a property(object)\n */\n name?: string\n}\n\nexport function isKeyword<T extends Schema, K extends keyof SchemaKeywordMapper>(meta: T, keyword: K): meta is Extract<T, SchemaKeywordMapper[K]> {\n return meta.keyword === keyword\n}\n","import { BaseGenerator, type FileMetaBase } from '@kubb/core'\nimport transformers, { pascalCase } from '@kubb/core/transformers'\nimport { getUniqueName } from '@kubb/core/utils'\n\nimport { isDiscriminator, isNullable, isReference } from '@kubb/oas'\nimport { isDeepEqual, isNumber, uniqueWith } from 'remeda'\nimport { isKeyword, schemaKeywords } from './SchemaMapper.ts'\nimport { getSchemaFactory } from './utils/getSchemaFactory.ts'\nimport { getSchemas } from './utils/getSchemas.ts'\n\nimport type { Plugin, PluginFactoryOptions, PluginManager, ResolveNameParams } from '@kubb/core'\nimport type * as KubbFile from '@kubb/fs/types'\n\nimport type { Oas, OpenAPIV3, SchemaObject, contentType } from '@kubb/oas'\nimport type { Schema, SchemaKeywordMapper } from './SchemaMapper.ts'\nimport type { Generator } from './generator.tsx'\nimport type { OperationSchema, Override, Refs } from './types.ts'\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 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 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 deepSearch<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): Array<SchemaKeywordMapper[T]> {\n return SchemaGenerator.deepSearch<T>(tree, keyword)\n }\n\n find<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n return SchemaGenerator.find<T>(tree, keyword)\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 findInObject<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n let foundItem: SchemaKeywordMapper[T] | undefined = 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.object)) {\n Object.values(schema.args?.properties || {}).forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>(entrySchema, keyword)\n }\n })\n\n Object.values(schema.args?.additionalProperties || {}).forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n })\n\n return foundItem\n }\n\n static find<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n let foundItem: SchemaKeywordMapper[T] | undefined = 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 #getUsedEnumNames(props: SchemaProps) {\n const options = this.#getOptions(props)\n\n return options.usedEnumNames || {}\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 #getUnknownReturn(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 /**\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.#getUnknownReturn({ 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 }: { schemaObject: SchemaObject; schema: TSchema; discriminator: OpenAPIV3.DiscriminatorObject }): 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: schema.args.map((arg) => {\n const isRef = isKeyword(arg, schemaKeywords.ref)\n\n if (isRef) {\n const [key] = Object.entries(discriminator.mapping || {}).find(([_key, value]) => value === arg.args.$ref) || []\n\n if (!key) {\n throw new Error(`Can not find a key in discriminator ${JSON.stringify(schema)}`)\n }\n\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 return arg\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 unknownReturn = this.#getUnknownReturn({ schemaObject, name })\n\n if (!schemaObject) {\n return [{ keyword: unknownReturn }]\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 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 baseItems.unshift({ keyword: schemaKeywords.max, args: max })\n }\n\n if (min !== undefined) {\n baseItems.unshift({ keyword: schemaKeywords.min, args: min })\n }\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((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) =>\n isKeyword(item, schemaKeywords.object)\n ? { ...item, args: { ...item.args, strict: true } }\n : item,\n ),\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 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) {\n // union\n const schemaWithoutOneOf = { ...schemaObject, oneOf: undefined }\n\n const union: SchemaKeywordMapper['union'] = {\n keyword: schemaKeywords.union,\n args: schemaObject.oneOf\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 const discriminator = this.context.oas.getDiscriminator(schemaObject)\n\n if (discriminator) {\n return [this.#addDiscriminatorToSchema({ schemaObject: schemaWithoutOneOf, schema: union, discriminator }), ...baseItems]\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.anyOf) {\n // union\n const schemaWithoutAnyOf = { ...schemaObject, anyOf: undefined }\n\n const union: SchemaKeywordMapper['union'] = {\n keyword: schemaKeywords.union,\n args: 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 .map((item) => {\n if (isKeyword(item, schemaKeywords.object)) {\n return {\n ...item,\n args: {\n ...item.args,\n strict: true,\n },\n }\n }\n return item\n }),\n }\n\n const discriminator = this.context.oas.getDiscriminator(schemaObject)\n\n if (discriminator) {\n return [this.#addDiscriminatorToSchema({ schemaObject: schemaWithoutAnyOf, schema: union, discriminator }), ...baseItems]\n }\n\n if (schemaWithoutAnyOf.properties) {\n const propertySchemas = this.parse({ schemaObject: schemaWithoutAnyOf, 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 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) {\n // TODO use of Required ts helper instead\n const schemas = schemaObject.allOf\n .map((item) => {\n if (isReference(item)) {\n return this.context.oas.get(item.$ref) as SchemaObject\n }\n })\n .filter(Boolean)\n\n const items = schemaWithoutAllOf.required\n .filter((key) => {\n // filter out keys that are already part of the properties(reduce duplicated keys(https://github.com/kubb-labs/kubb/issues/1492)\n if (schemaWithoutAllOf.properties) {\n return !Object.keys(schemaWithoutAllOf.properties).includes(key)\n }\n\n // schema should include required fields when necessary https://github.com/kubb-labs/kubb/issues/1522\n return true\n })\n .map((key) => {\n const schema = schemas.find((item) => item.properties && Object.keys(item.properties).find((propertyKey) => propertyKey === key))\n\n if (schema?.properties?.[key]) {\n return {\n ...schema,\n properties: {\n [key]: schema.properties[key],\n },\n required: [key],\n }\n }\n })\n .filter(Boolean)\n\n and.args = [...(and.args || []), ...items.flatMap((item) => this.parse({ schemaObject: item as SchemaObject, name, parentName }))]\n }\n\n if (schemaWithoutAllOf.properties) {\n and.args = [...(and.args || []), ...this.parse({ schemaObject: schemaWithoutAllOf, name, parentName })]\n }\n\n return [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.#getUsedEnumNames({ schemaObject, name }))\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 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 },\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 if (schemaObject['const']) {\n return [\n {\n keyword: schemaKeywords.const,\n args: {\n name: schemaObject['const'],\n format: typeof schemaObject['const'] === 'number' ? 'number' : 'string',\n value: schemaObject['const'],\n },\n },\n ...baseItems,\n ]\n }\n return [{ keyword: schemaKeywords.null }]\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 \n const type = (Array.isArray(schemaObject.type) ? schemaObject.type.filter((item) => item !== 'null')[0] : schemaObject.type) 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: unknownReturn }]\n }\n\n async build(...generators: Array<Generator<TPluginOptions>>): Promise<Array<KubbFile.File<TFileMeta>>> {\n const { oas, contentType, include } = this.context\n\n const schemas = getSchemas({ oas, contentType, includes: include })\n\n const promises = Object.entries(schemas).reduce((acc, [name, value]) => {\n if (!value) {\n return acc\n }\n\n const options = this.#getOptions({ name })\n const promiseOperation = this.schema.call(this, name, value, {\n ...this.options,\n ...options,\n })\n\n if (promiseOperation) {\n acc.push(promiseOperation)\n }\n\n generators?.forEach((generator) => {\n const tree = this.parse({ schemaObject: value, name: name })\n\n const promise = generator.schema?.({\n instance: this,\n schema: {\n name,\n value,\n tree,\n },\n options: {\n ...this.options,\n ...options,\n },\n } as any) as Promise<Array<KubbFile.File<TFileMeta>>>\n\n if (promise) {\n acc.push(promise)\n }\n })\n\n return acc\n }, [] as SchemaMethodResult<TFileMeta>[])\n\n const files = await Promise.all(promises)\n\n // using .flat because schemaGenerator[method] can return an array of files or just one file\n return files.flat().filter(Boolean)\n }\n\n /**\n * Schema\n */\n async schema(_name: string, _object: SchemaObject, _options: TOptions): SchemaMethodResult<TFileMeta> {\n return []\n }\n}\n"]}