@kubb/plugin-oas 3.0.0-beta.6 → 3.0.0-beta.7

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.
Files changed (36) hide show
  1. package/dist/{OperationGenerator-DzH5RnH5.d.cts → OperationGenerator-BjT70q5u.d.cts} +11 -6
  2. package/dist/{OperationGenerator-DzH5RnH5.d.ts → OperationGenerator-BjT70q5u.d.ts} +11 -6
  3. package/dist/{Schema-D1kzJa7q.d.cts → Schema-BRWI5s-t.d.cts} +1 -1
  4. package/dist/{Schema-CO-T_KTl.d.ts → Schema-do5CU6y2.d.ts} +1 -1
  5. package/dist/{chunk-QT6ZFRNJ.cjs → chunk-AJDXMZ4A.cjs} +4 -4
  6. package/dist/chunk-AJDXMZ4A.cjs.map +1 -0
  7. package/dist/{chunk-V2JO6RHI.js → chunk-IFIW32E5.js} +4 -4
  8. package/dist/chunk-IFIW32E5.js.map +1 -0
  9. package/dist/components.d.cts +2 -2
  10. package/dist/components.d.ts +2 -2
  11. package/dist/generators.d.cts +1 -1
  12. package/dist/generators.d.ts +1 -1
  13. package/dist/hooks.cjs +3 -15
  14. package/dist/hooks.cjs.map +1 -1
  15. package/dist/hooks.d.cts +2 -6
  16. package/dist/hooks.d.ts +2 -6
  17. package/dist/hooks.js +2 -14
  18. package/dist/hooks.js.map +1 -1
  19. package/dist/index.cjs +20 -16
  20. package/dist/index.cjs.map +1 -1
  21. package/dist/index.d.cts +2 -2
  22. package/dist/index.d.ts +2 -2
  23. package/dist/index.js +17 -13
  24. package/dist/index.js.map +1 -1
  25. package/dist/utils.d.cts +2 -2
  26. package/dist/utils.d.ts +2 -2
  27. package/package.json +10 -10
  28. package/src/OperationGenerator.ts +21 -18
  29. package/src/SchemaGenerator.ts +2 -2
  30. package/src/SchemaMapper.ts +12 -1
  31. package/src/hooks/useOperationManager.ts +0 -22
  32. package/src/hooks/useSchemaManager.ts +1 -1
  33. package/src/index.ts +1 -4
  34. package/src/types.ts +2 -1
  35. package/dist/chunk-QT6ZFRNJ.cjs.map +0 -1
  36. package/dist/chunk-V2JO6RHI.js.map +0 -1
@@ -112,7 +112,15 @@ type SchemaKeywordMapper = {
112
112
  keyword: 'ref';
113
113
  args: {
114
114
  name: string;
115
+ /**
116
+ * Full qualified path.
117
+ */
115
118
  path: KubbFile.OptionalPath;
119
+ /**
120
+ * When true `File.Import` will be used.
121
+ * When false a reference will be used inside the current file.
122
+ */
123
+ isImportable: boolean;
116
124
  };
117
125
  };
118
126
  matches: {
@@ -337,7 +345,7 @@ type OperationSchema = {
337
345
  /**
338
346
  * OperationName in PascalCase, only being used in OperationGenerator
339
347
  */
340
- operationName?: string;
348
+ operationName: string;
341
349
  description?: string;
342
350
  statusCode?: number;
343
351
  keys?: string[];
@@ -356,6 +364,7 @@ type OperationSchemas = {
356
364
  };
357
365
  request?: OperationSchema;
358
366
  response: OperationSchema;
367
+ responses: Array<OperationSchema>;
359
368
  statusCodes?: Array<OperationSchema>;
360
369
  errors?: Array<OperationSchema>;
361
370
  };
@@ -492,10 +501,6 @@ type ReactGeneratorOptions<TOptions extends PluginFactoryOptions> = {
492
501
  };
493
502
  declare function createReactGenerator<TOptions extends PluginFactoryOptions>(parseOptions: ReactGeneratorOptions<TOptions>): Generator<TOptions>;
494
503
 
495
- /**
496
- * @deprecated
497
- */
498
- type GetOperationGeneratorOptions<T = any> = any;
499
504
  type OperationMethodResult<TFileMeta extends FileMetaBase> = Promise<KubbFile.File<TFileMeta> | Array<KubbFile.File<TFileMeta>> | null>;
500
505
  type Context<TOptions, TPluginOptions extends PluginFactoryOptions> = {
501
506
  oas: Oas;
@@ -548,4 +553,4 @@ declare class OperationGenerator<TPluginOptions extends PluginFactoryOptions = P
548
553
  all(operations: Operation[], paths: OperationsByMethod): OperationMethodResult<TFileMeta>;
549
554
  }
550
555
 
551
- export { type API as A, getSchemas as B, type Exclude as E, type GetOperationGeneratorOptions as G, type Include as I, type Options as O, type PluginOas as P, type ReactGeneratorOptions as R, type SchemaGeneratorBuildOptions as S, type OperationMethodResult as a, OperationGenerator as b, type GetSchemaGeneratorOptions as c, type SchemaGeneratorOptions as d, type SchemaMethodResult as e, SchemaGenerator as f, type Schema as g, type SchemaKeyword as h, type SchemaKeywordBase as i, type SchemaKeywordMapper as j, type SchemaMapper as k, isKeyword as l, createGenerator as m, createReactGenerator as n, type Generator as o, type GeneratorOptions as p, type ResolvePathOptions as q, type Ref as r, schemaKeywords as s, type Refs as t, type Resolver as u, type OperationSchema as v, type OperationSchemas as w, type OperationsByMethod as x, type Override as y, type GetSchemasProps as z };
556
+ export { type API as A, type Exclude as E, type GetSchemaGeneratorOptions as G, type Include as I, type Options as O, type PluginOas as P, type ReactGeneratorOptions as R, type SchemaGeneratorBuildOptions as S, type OperationMethodResult as a, OperationGenerator as b, type SchemaGeneratorOptions as c, type SchemaMethodResult as d, SchemaGenerator as e, type Schema as f, type SchemaKeyword as g, type SchemaKeywordBase as h, type SchemaKeywordMapper as i, type SchemaMapper as j, isKeyword as k, createGenerator as l, createReactGenerator as m, type Generator as n, type GeneratorOptions as o, type ResolvePathOptions as p, type Ref as q, type Refs as r, schemaKeywords as s, type Resolver as t, type OperationSchema as u, type OperationSchemas as v, type OperationsByMethod as w, type Override as x, type GetSchemasProps as y, getSchemas as z };
@@ -112,7 +112,15 @@ type SchemaKeywordMapper = {
112
112
  keyword: 'ref';
113
113
  args: {
114
114
  name: string;
115
+ /**
116
+ * Full qualified path.
117
+ */
115
118
  path: KubbFile.OptionalPath;
119
+ /**
120
+ * When true `File.Import` will be used.
121
+ * When false a reference will be used inside the current file.
122
+ */
123
+ isImportable: boolean;
116
124
  };
117
125
  };
118
126
  matches: {
@@ -337,7 +345,7 @@ type OperationSchema = {
337
345
  /**
338
346
  * OperationName in PascalCase, only being used in OperationGenerator
339
347
  */
340
- operationName?: string;
348
+ operationName: string;
341
349
  description?: string;
342
350
  statusCode?: number;
343
351
  keys?: string[];
@@ -356,6 +364,7 @@ type OperationSchemas = {
356
364
  };
357
365
  request?: OperationSchema;
358
366
  response: OperationSchema;
367
+ responses: Array<OperationSchema>;
359
368
  statusCodes?: Array<OperationSchema>;
360
369
  errors?: Array<OperationSchema>;
361
370
  };
@@ -492,10 +501,6 @@ type ReactGeneratorOptions<TOptions extends PluginFactoryOptions> = {
492
501
  };
493
502
  declare function createReactGenerator<TOptions extends PluginFactoryOptions>(parseOptions: ReactGeneratorOptions<TOptions>): Generator<TOptions>;
494
503
 
495
- /**
496
- * @deprecated
497
- */
498
- type GetOperationGeneratorOptions<T = any> = any;
499
504
  type OperationMethodResult<TFileMeta extends FileMetaBase> = Promise<KubbFile.File<TFileMeta> | Array<KubbFile.File<TFileMeta>> | null>;
500
505
  type Context<TOptions, TPluginOptions extends PluginFactoryOptions> = {
501
506
  oas: Oas;
@@ -548,4 +553,4 @@ declare class OperationGenerator<TPluginOptions extends PluginFactoryOptions = P
548
553
  all(operations: Operation[], paths: OperationsByMethod): OperationMethodResult<TFileMeta>;
549
554
  }
550
555
 
551
- export { type API as A, getSchemas as B, type Exclude as E, type GetOperationGeneratorOptions as G, type Include as I, type Options as O, type PluginOas as P, type ReactGeneratorOptions as R, type SchemaGeneratorBuildOptions as S, type OperationMethodResult as a, OperationGenerator as b, type GetSchemaGeneratorOptions as c, type SchemaGeneratorOptions as d, type SchemaMethodResult as e, SchemaGenerator as f, type Schema as g, type SchemaKeyword as h, type SchemaKeywordBase as i, type SchemaKeywordMapper as j, type SchemaMapper as k, isKeyword as l, createGenerator as m, createReactGenerator as n, type Generator as o, type GeneratorOptions as p, type ResolvePathOptions as q, type Ref as r, schemaKeywords as s, type Refs as t, type Resolver as u, type OperationSchema as v, type OperationSchemas as w, type OperationsByMethod as x, type Override as y, type GetSchemasProps as z };
556
+ export { type API as A, type Exclude as E, type GetSchemaGeneratorOptions as G, type Include as I, type Options as O, type PluginOas as P, type ReactGeneratorOptions as R, type SchemaGeneratorBuildOptions as S, type OperationMethodResult as a, OperationGenerator as b, type SchemaGeneratorOptions as c, type SchemaMethodResult as d, SchemaGenerator as e, type Schema as f, type SchemaKeyword as g, type SchemaKeywordBase as h, type SchemaKeywordMapper as i, type SchemaMapper as j, isKeyword as k, createGenerator as l, createReactGenerator as m, type Generator as n, type GeneratorOptions as o, type ResolvePathOptions as p, type Ref as q, type Refs as r, schemaKeywords as s, type Resolver as t, type OperationSchema as u, type OperationSchemas as v, type OperationsByMethod as w, type Override as x, type GetSchemasProps as y, getSchemas as z };
@@ -1,7 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { SchemaObject } from '@kubb/oas';
3
3
  import { KubbNode } from '@kubb/react/types';
4
- import { g as Schema$1 } from './OperationGenerator-DzH5RnH5.cjs';
4
+ import { f as Schema$1 } from './OperationGenerator-BjT70q5u.cjs';
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 { KubbNode } from '@kubb/react/types';
4
- import { g as Schema$1 } from './OperationGenerator-DzH5RnH5.js';
4
+ import { f as Schema$1 } from './OperationGenerator-BjT70q5u.js';
5
5
 
6
6
  type SchemaContextProps = {
7
7
  name: string;
@@ -268,7 +268,7 @@ var SchemaGenerator = class _SchemaGenerator extends core.BaseGenerator {
268
268
  return [
269
269
  {
270
270
  keyword: schemaKeywords.ref,
271
- args: { name: ref.propertyName, path: ref.path }
271
+ args: { name: ref.propertyName, path: ref.path, isImportable: !!this.context.oas.get($ref) }
272
272
  }
273
273
  ];
274
274
  }
@@ -290,7 +290,7 @@ var SchemaGenerator = class _SchemaGenerator extends core.BaseGenerator {
290
290
  return [
291
291
  {
292
292
  keyword: schemaKeywords.ref,
293
- args: { name: ref.propertyName, path: ref?.path }
293
+ args: { name: ref.propertyName, path: ref?.path, isImportable: !!this.context.oas.get($ref) }
294
294
  }
295
295
  ];
296
296
  }
@@ -748,5 +748,5 @@ var SchemaGenerator = class _SchemaGenerator extends core.BaseGenerator {
748
748
  exports.SchemaGenerator = SchemaGenerator;
749
749
  exports.isKeyword = isKeyword;
750
750
  exports.schemaKeywords = schemaKeywords;
751
- //# sourceMappingURL=chunk-QT6ZFRNJ.cjs.map
752
- //# sourceMappingURL=chunk-QT6ZFRNJ.cjs.map
751
+ //# sourceMappingURL=chunk-AJDXMZ4A.cjs.map
752
+ //# sourceMappingURL=chunk-AJDXMZ4A.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/SchemaMapper.ts","../src/SchemaGenerator.ts"],"names":["BaseGenerator","uniqueWith","isDeepEqual","getUniqueName","getSchemaFactory","transformers","_schema","nullable","isReference","pascalCase","name","isNumber","min","max","getSchemas"],"mappings":"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","file":"chunk-AJDXMZ4A.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 strict: { keyword: 'strict' }\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 }\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 /**\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 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}\n\nexport const schemaKeywords = {\n any: 'any',\n strict: 'strict',\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 /* 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} 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 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 { 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'\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 schema?: 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): 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): 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 (schema.keyword === schemaKeywords.object) {\n const subItem = schema as SchemaKeywordMapper['object']\n\n Object.values(subItem.args?.properties || {}).forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>(entrySchema, keyword))\n })\n\n Object.values(subItem.args?.additionalProperties || {}).forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n\n if (schema.keyword === schemaKeywords.array) {\n const subItem = schema as SchemaKeywordMapper['array']\n\n subItem.args.items.forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n\n if (schema.keyword === schemaKeywords.and) {\n const subItem = schema as SchemaKeywordMapper['and']\n\n subItem.args.forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n\n if (schema.keyword === schemaKeywords.tuple) {\n const subItem = schema as SchemaKeywordMapper['tuple']\n\n subItem.args.items.forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n\n if (schema.keyword === schemaKeywords.union) {\n const subItem = schema as SchemaKeywordMapper['union']\n\n subItem.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 (schema.keyword === schemaKeywords.object) {\n const subItem = schema as SchemaKeywordMapper['object']\n\n Object.values(subItem.args?.properties || {}).forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>(entrySchema, keyword)\n }\n })\n\n Object.values(subItem.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 (schema.keyword === schemaKeywords.array) {\n const subItem = schema as SchemaKeywordMapper['array']\n\n subItem.args.items.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n\n if (schema.keyword === schemaKeywords.and) {\n const subItem = schema as SchemaKeywordMapper['and']\n\n subItem.args.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n\n if (schema.keyword === schemaKeywords.tuple) {\n const subItem = schema as SchemaKeywordMapper['tuple']\n\n subItem.args.items.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n\n if (schema.keyword === schemaKeywords.union) {\n const subItem = schema as SchemaKeywordMapper['union']\n\n subItem.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\n return schemaKeywords.unknown\n }\n\n /**\n * Recursively creates a type literal with the given props.\n */\n #parseProperties({ schema, name }: SchemaProps): Schema[] {\n const properties = schema?.properties || {}\n const additionalProperties = schema?.additionalProperties\n const required = schema?.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({ schema: 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({ schema, name }) }]\n : this.parse({ schema: 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(obj: OpenAPIV3.ReferenceObject): Schema[] {\n const { $ref } = obj\n let ref = this.refs[$ref]\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 if (ref) {\n return [\n {\n keyword: schemaKeywords.ref,\n args: { name: ref.propertyName, path: ref.path, isImportable: !!this.context.oas.get($ref) },\n },\n ]\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 ref = this.refs[$ref] = {\n propertyName,\n originalName,\n path: file.path,\n }\n\n return [\n {\n keyword: schemaKeywords.ref,\n args: { name: ref.propertyName, path: ref?.path, isImportable: !!this.context.oas.get($ref) },\n },\n ]\n }\n\n #getParsedSchemaObject(schema?: SchemaObject) {\n const parsedSchema = getSchemaFactory(this.context.oas)(schema)\n return parsedSchema\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({ schema: _schema, name, parentName }: SchemaProps): Schema[] {\n const options = this.#getOptions({ schema: _schema, name })\n const unknownReturn = this.#getUnknownReturn({ schema: _schema, name })\n const { schema, version } = this.#getParsedSchemaObject(_schema)\n if (!schema) {\n return [{ keyword: unknownReturn }]\n }\n\n const baseItems: Schema[] = [\n {\n keyword: schemaKeywords.schema,\n args: {\n type: schema.type as any,\n format: schema.format,\n },\n },\n ]\n const min = schema.minimum ?? schema.minLength ?? schema.minItems ?? undefined\n const max = schema.maximum ?? schema.maxLength ?? schema.maxItems ?? undefined\n const nullable = schema.nullable ?? schema['x-nullable'] ?? false\n\n if (schema.default !== undefined && !Array.isArray(schema.default)) {\n if (typeof schema.default === 'string') {\n baseItems.push({\n keyword: schemaKeywords.default,\n args: transformers.stringify(schema.default),\n })\n } else if (typeof schema.default === 'boolean') {\n baseItems.push({\n keyword: schemaKeywords.default,\n args: schema.default ?? false,\n })\n } else {\n baseItems.push({\n keyword: schemaKeywords.default,\n args: schema.default,\n })\n }\n }\n\n if (schema.description) {\n baseItems.push({\n keyword: schemaKeywords.describe,\n args: schema.description,\n })\n }\n\n if (schema.pattern) {\n baseItems.unshift({\n keyword: schemaKeywords.matches,\n args: schema.pattern,\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 (schema.type && Array.isArray(schema.type)) {\n const [_schema, nullable] = schema.type\n\n if (nullable === 'null') {\n baseItems.push({ keyword: schemaKeywords.nullable })\n }\n }\n\n if (schema.readOnly) {\n baseItems.push({ keyword: schemaKeywords.readOnly })\n }\n\n if (schema.writeOnly) {\n baseItems.push({ keyword: schemaKeywords.writeOnly })\n }\n\n if (isReference(schema)) {\n return [\n ...this.#getRefAlias(schema),\n nullable && { keyword: schemaKeywords.nullable },\n schema.readOnly && { keyword: schemaKeywords.readOnly },\n schema.writeOnly && { keyword: schemaKeywords.writeOnly },\n {\n keyword: schemaKeywords.schema,\n args: {\n type: schema.type as any,\n format: schema.format,\n },\n },\n ].filter(Boolean)\n }\n\n if (schema.oneOf) {\n // union\n const schemaWithoutOneOf = { ...schema, oneOf: undefined }\n\n const union: Schema = {\n keyword: schemaKeywords.union,\n args: schema.oneOf\n .map((item) => {\n return item && this.parse({ schema: item as SchemaObject, name, parentName })[0]\n })\n .filter(Boolean)\n .filter((item) => {\n return item && item.keyword !== unknownReturn\n }),\n }\n if (schemaWithoutOneOf.properties) {\n const propertySchemas = this.parse({ schema: schemaWithoutOneOf, name, parentName })\n\n return [\n {\n ...union,\n args: union.args.map((arg) => {\n return {\n keyword: schemaKeywords.and,\n args: [arg, ...propertySchemas],\n }\n }),\n },\n ...baseItems,\n ]\n }\n\n return [union, ...baseItems]\n }\n\n if (schema.anyOf) {\n // union\n const schemaWithoutAnyOf = { ...schema, anyOf: undefined }\n\n const union: Schema = {\n keyword: schemaKeywords.union,\n args: schema.anyOf\n .map((item) => {\n return item && this.parse({ schema: item as SchemaObject, name, parentName })[0]\n })\n .filter(Boolean)\n .filter((item) => {\n return item && item.keyword !== unknownReturn\n })\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 if (schemaWithoutAnyOf.properties) {\n return [...this.parse({ schema: schemaWithoutAnyOf, name, parentName }), union, ...baseItems]\n }\n\n return [union, ...baseItems]\n }\n if (schema.allOf) {\n // intersection/add\n const schemaWithoutAllOf = { ...schema, allOf: undefined }\n\n const and: Schema = {\n keyword: schemaKeywords.and,\n args: schema.allOf\n .map((item) => {\n return item && this.parse({ schema: item as SchemaObject, name, parentName })[0]\n })\n .filter(Boolean)\n .filter((item) => {\n return item && item.keyword !== unknownReturn\n }),\n }\n\n if (schemaWithoutAllOf.properties) {\n return [\n {\n ...and,\n args: [...(and.args || []), ...this.parse({ schema: schemaWithoutAllOf, name, parentName })],\n },\n ...baseItems,\n ]\n }\n\n return [and, ...baseItems]\n }\n\n if (schema.enum) {\n const enumName = getUniqueName(pascalCase([parentName, name, options.enumSuffix].join(' ')), this.#getUsedEnumNames({ schema, 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 = schema.enum.includes(null)\n if (nullableEnum) {\n baseItems.push({ keyword: schemaKeywords.nullable })\n }\n const filteredValues = schema.enum.filter((value) => value !== null)\n\n // x-enumNames has priority\n const extensionEnums = ['x-enumNames', 'x-enum-varnames']\n .filter((extensionKey) => extensionKey in schema)\n .map((extensionKey) => {\n return [\n {\n keyword: schemaKeywords.enum,\n args: {\n name,\n typeName,\n asConst: false,\n items: [...new Set(schema[extensionKey as keyof typeof schema] as string[])].map((name: string | number, index) => ({\n name: transformers.stringify(name),\n value: schema.enum?.[index] as string | number,\n format: isNumber(schema.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 (schema.type === 'number' || schema.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 (schema.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 schema) {\n const prefixItems = schema.prefixItems as SchemaObject[]\n const min = schema.minimum ?? schema.minLength ?? schema.minItems ?? undefined\n const max = schema.maximum ?? schema.maxLength ?? schema.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({ schema: 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 schema) {\n // const keyword takes precendence over the actual type.\n if (schema['const']) {\n return [\n {\n keyword: schemaKeywords.const,\n args: {\n name: schema['const'],\n format: typeof schema['const'] === 'number' ? 'number' : 'string',\n value: schema['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 (schema.format) {\n switch (schema.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 break\n case 'email':\n case 'idn-email':\n baseItems.unshift({ keyword: schemaKeywords.email })\n break\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 break\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 // type based logic\n if ('items' in schema || schema.type === ('array' as 'string')) {\n const min = schema.minimum ?? schema.minLength ?? schema.minItems ?? undefined\n const max = schema.maximum ?? schema.maxLength ?? schema.maxItems ?? undefined\n const items = this.parse({ schema: 'items' in schema ? (schema.items as SchemaObject) : [], name, parentName })\n\n return [\n {\n keyword: schemaKeywords.array,\n args: {\n items,\n min,\n max,\n },\n },\n ...baseItems.filter((item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max),\n ]\n }\n\n if (schema.properties || schema.additionalProperties) {\n return [...this.#parseProperties({ schema, name }), ...baseItems]\n }\n\n if (schema.type) {\n if (Array.isArray(schema.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 [type] = schema.type as Array<OpenAPIV3.NonArraySchemaObjectType>\n\n return [\n ...this.parse({\n schema: {\n ...schema,\n type,\n },\n name,\n parentName,\n }),\n ...baseItems,\n ].filter(Boolean)\n }\n\n if (!['boolean', 'object', 'number', 'string', 'integer', 'null'].includes(schema.type)) {\n this.context.pluginManager.logger.emit('warning', `Schema type '${schema.type}' is not valid for schema ${parentName}.${name}`)\n }\n\n // 'string' | 'number' | 'integer' | 'boolean'\n return [{ keyword: schema.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 oas.resolveDiscriminators()\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({ schema: 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"]}
@@ -262,7 +262,7 @@ var SchemaGenerator = class _SchemaGenerator extends BaseGenerator {
262
262
  return [
263
263
  {
264
264
  keyword: schemaKeywords.ref,
265
- args: { name: ref.propertyName, path: ref.path }
265
+ args: { name: ref.propertyName, path: ref.path, isImportable: !!this.context.oas.get($ref) }
266
266
  }
267
267
  ];
268
268
  }
@@ -284,7 +284,7 @@ var SchemaGenerator = class _SchemaGenerator extends BaseGenerator {
284
284
  return [
285
285
  {
286
286
  keyword: schemaKeywords.ref,
287
- args: { name: ref.propertyName, path: ref?.path }
287
+ args: { name: ref.propertyName, path: ref?.path, isImportable: !!this.context.oas.get($ref) }
288
288
  }
289
289
  ];
290
290
  }
@@ -740,5 +740,5 @@ var SchemaGenerator = class _SchemaGenerator extends BaseGenerator {
740
740
  };
741
741
 
742
742
  export { SchemaGenerator, isKeyword, schemaKeywords };
743
- //# sourceMappingURL=chunk-V2JO6RHI.js.map
744
- //# sourceMappingURL=chunk-V2JO6RHI.js.map
743
+ //# sourceMappingURL=chunk-IFIW32E5.js.map
744
+ //# sourceMappingURL=chunk-IFIW32E5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/SchemaMapper.ts","../src/SchemaGenerator.ts"],"names":["_schema","nullable","name","min","max"],"mappings":"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","file":"chunk-IFIW32E5.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 strict: { keyword: 'strict' }\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 }\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 /**\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 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}\n\nexport const schemaKeywords = {\n any: 'any',\n strict: 'strict',\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 /* 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} 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 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 { 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'\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 schema?: 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): 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): 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 (schema.keyword === schemaKeywords.object) {\n const subItem = schema as SchemaKeywordMapper['object']\n\n Object.values(subItem.args?.properties || {}).forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>(entrySchema, keyword))\n })\n\n Object.values(subItem.args?.additionalProperties || {}).forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n\n if (schema.keyword === schemaKeywords.array) {\n const subItem = schema as SchemaKeywordMapper['array']\n\n subItem.args.items.forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n\n if (schema.keyword === schemaKeywords.and) {\n const subItem = schema as SchemaKeywordMapper['and']\n\n subItem.args.forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n\n if (schema.keyword === schemaKeywords.tuple) {\n const subItem = schema as SchemaKeywordMapper['tuple']\n\n subItem.args.items.forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n\n if (schema.keyword === schemaKeywords.union) {\n const subItem = schema as SchemaKeywordMapper['union']\n\n subItem.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 (schema.keyword === schemaKeywords.object) {\n const subItem = schema as SchemaKeywordMapper['object']\n\n Object.values(subItem.args?.properties || {}).forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>(entrySchema, keyword)\n }\n })\n\n Object.values(subItem.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 (schema.keyword === schemaKeywords.array) {\n const subItem = schema as SchemaKeywordMapper['array']\n\n subItem.args.items.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n\n if (schema.keyword === schemaKeywords.and) {\n const subItem = schema as SchemaKeywordMapper['and']\n\n subItem.args.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n\n if (schema.keyword === schemaKeywords.tuple) {\n const subItem = schema as SchemaKeywordMapper['tuple']\n\n subItem.args.items.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n\n if (schema.keyword === schemaKeywords.union) {\n const subItem = schema as SchemaKeywordMapper['union']\n\n subItem.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\n return schemaKeywords.unknown\n }\n\n /**\n * Recursively creates a type literal with the given props.\n */\n #parseProperties({ schema, name }: SchemaProps): Schema[] {\n const properties = schema?.properties || {}\n const additionalProperties = schema?.additionalProperties\n const required = schema?.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({ schema: 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({ schema, name }) }]\n : this.parse({ schema: 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(obj: OpenAPIV3.ReferenceObject): Schema[] {\n const { $ref } = obj\n let ref = this.refs[$ref]\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 if (ref) {\n return [\n {\n keyword: schemaKeywords.ref,\n args: { name: ref.propertyName, path: ref.path, isImportable: !!this.context.oas.get($ref) },\n },\n ]\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 ref = this.refs[$ref] = {\n propertyName,\n originalName,\n path: file.path,\n }\n\n return [\n {\n keyword: schemaKeywords.ref,\n args: { name: ref.propertyName, path: ref?.path, isImportable: !!this.context.oas.get($ref) },\n },\n ]\n }\n\n #getParsedSchemaObject(schema?: SchemaObject) {\n const parsedSchema = getSchemaFactory(this.context.oas)(schema)\n return parsedSchema\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({ schema: _schema, name, parentName }: SchemaProps): Schema[] {\n const options = this.#getOptions({ schema: _schema, name })\n const unknownReturn = this.#getUnknownReturn({ schema: _schema, name })\n const { schema, version } = this.#getParsedSchemaObject(_schema)\n if (!schema) {\n return [{ keyword: unknownReturn }]\n }\n\n const baseItems: Schema[] = [\n {\n keyword: schemaKeywords.schema,\n args: {\n type: schema.type as any,\n format: schema.format,\n },\n },\n ]\n const min = schema.minimum ?? schema.minLength ?? schema.minItems ?? undefined\n const max = schema.maximum ?? schema.maxLength ?? schema.maxItems ?? undefined\n const nullable = schema.nullable ?? schema['x-nullable'] ?? false\n\n if (schema.default !== undefined && !Array.isArray(schema.default)) {\n if (typeof schema.default === 'string') {\n baseItems.push({\n keyword: schemaKeywords.default,\n args: transformers.stringify(schema.default),\n })\n } else if (typeof schema.default === 'boolean') {\n baseItems.push({\n keyword: schemaKeywords.default,\n args: schema.default ?? false,\n })\n } else {\n baseItems.push({\n keyword: schemaKeywords.default,\n args: schema.default,\n })\n }\n }\n\n if (schema.description) {\n baseItems.push({\n keyword: schemaKeywords.describe,\n args: schema.description,\n })\n }\n\n if (schema.pattern) {\n baseItems.unshift({\n keyword: schemaKeywords.matches,\n args: schema.pattern,\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 (schema.type && Array.isArray(schema.type)) {\n const [_schema, nullable] = schema.type\n\n if (nullable === 'null') {\n baseItems.push({ keyword: schemaKeywords.nullable })\n }\n }\n\n if (schema.readOnly) {\n baseItems.push({ keyword: schemaKeywords.readOnly })\n }\n\n if (schema.writeOnly) {\n baseItems.push({ keyword: schemaKeywords.writeOnly })\n }\n\n if (isReference(schema)) {\n return [\n ...this.#getRefAlias(schema),\n nullable && { keyword: schemaKeywords.nullable },\n schema.readOnly && { keyword: schemaKeywords.readOnly },\n schema.writeOnly && { keyword: schemaKeywords.writeOnly },\n {\n keyword: schemaKeywords.schema,\n args: {\n type: schema.type as any,\n format: schema.format,\n },\n },\n ].filter(Boolean)\n }\n\n if (schema.oneOf) {\n // union\n const schemaWithoutOneOf = { ...schema, oneOf: undefined }\n\n const union: Schema = {\n keyword: schemaKeywords.union,\n args: schema.oneOf\n .map((item) => {\n return item && this.parse({ schema: item as SchemaObject, name, parentName })[0]\n })\n .filter(Boolean)\n .filter((item) => {\n return item && item.keyword !== unknownReturn\n }),\n }\n if (schemaWithoutOneOf.properties) {\n const propertySchemas = this.parse({ schema: schemaWithoutOneOf, name, parentName })\n\n return [\n {\n ...union,\n args: union.args.map((arg) => {\n return {\n keyword: schemaKeywords.and,\n args: [arg, ...propertySchemas],\n }\n }),\n },\n ...baseItems,\n ]\n }\n\n return [union, ...baseItems]\n }\n\n if (schema.anyOf) {\n // union\n const schemaWithoutAnyOf = { ...schema, anyOf: undefined }\n\n const union: Schema = {\n keyword: schemaKeywords.union,\n args: schema.anyOf\n .map((item) => {\n return item && this.parse({ schema: item as SchemaObject, name, parentName })[0]\n })\n .filter(Boolean)\n .filter((item) => {\n return item && item.keyword !== unknownReturn\n })\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 if (schemaWithoutAnyOf.properties) {\n return [...this.parse({ schema: schemaWithoutAnyOf, name, parentName }), union, ...baseItems]\n }\n\n return [union, ...baseItems]\n }\n if (schema.allOf) {\n // intersection/add\n const schemaWithoutAllOf = { ...schema, allOf: undefined }\n\n const and: Schema = {\n keyword: schemaKeywords.and,\n args: schema.allOf\n .map((item) => {\n return item && this.parse({ schema: item as SchemaObject, name, parentName })[0]\n })\n .filter(Boolean)\n .filter((item) => {\n return item && item.keyword !== unknownReturn\n }),\n }\n\n if (schemaWithoutAllOf.properties) {\n return [\n {\n ...and,\n args: [...(and.args || []), ...this.parse({ schema: schemaWithoutAllOf, name, parentName })],\n },\n ...baseItems,\n ]\n }\n\n return [and, ...baseItems]\n }\n\n if (schema.enum) {\n const enumName = getUniqueName(pascalCase([parentName, name, options.enumSuffix].join(' ')), this.#getUsedEnumNames({ schema, 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 = schema.enum.includes(null)\n if (nullableEnum) {\n baseItems.push({ keyword: schemaKeywords.nullable })\n }\n const filteredValues = schema.enum.filter((value) => value !== null)\n\n // x-enumNames has priority\n const extensionEnums = ['x-enumNames', 'x-enum-varnames']\n .filter((extensionKey) => extensionKey in schema)\n .map((extensionKey) => {\n return [\n {\n keyword: schemaKeywords.enum,\n args: {\n name,\n typeName,\n asConst: false,\n items: [...new Set(schema[extensionKey as keyof typeof schema] as string[])].map((name: string | number, index) => ({\n name: transformers.stringify(name),\n value: schema.enum?.[index] as string | number,\n format: isNumber(schema.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 (schema.type === 'number' || schema.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 (schema.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 schema) {\n const prefixItems = schema.prefixItems as SchemaObject[]\n const min = schema.minimum ?? schema.minLength ?? schema.minItems ?? undefined\n const max = schema.maximum ?? schema.maxLength ?? schema.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({ schema: 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 schema) {\n // const keyword takes precendence over the actual type.\n if (schema['const']) {\n return [\n {\n keyword: schemaKeywords.const,\n args: {\n name: schema['const'],\n format: typeof schema['const'] === 'number' ? 'number' : 'string',\n value: schema['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 (schema.format) {\n switch (schema.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 break\n case 'email':\n case 'idn-email':\n baseItems.unshift({ keyword: schemaKeywords.email })\n break\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 break\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 // type based logic\n if ('items' in schema || schema.type === ('array' as 'string')) {\n const min = schema.minimum ?? schema.minLength ?? schema.minItems ?? undefined\n const max = schema.maximum ?? schema.maxLength ?? schema.maxItems ?? undefined\n const items = this.parse({ schema: 'items' in schema ? (schema.items as SchemaObject) : [], name, parentName })\n\n return [\n {\n keyword: schemaKeywords.array,\n args: {\n items,\n min,\n max,\n },\n },\n ...baseItems.filter((item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max),\n ]\n }\n\n if (schema.properties || schema.additionalProperties) {\n return [...this.#parseProperties({ schema, name }), ...baseItems]\n }\n\n if (schema.type) {\n if (Array.isArray(schema.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 [type] = schema.type as Array<OpenAPIV3.NonArraySchemaObjectType>\n\n return [\n ...this.parse({\n schema: {\n ...schema,\n type,\n },\n name,\n parentName,\n }),\n ...baseItems,\n ].filter(Boolean)\n }\n\n if (!['boolean', 'object', 'number', 'string', 'integer', 'null'].includes(schema.type)) {\n this.context.pluginManager.logger.emit('warning', `Schema type '${schema.type}' is not valid for schema ${parentName}.${name}`)\n }\n\n // 'string' | 'number' | 'integer' | 'boolean'\n return [{ keyword: schema.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 oas.resolveDiscriminators()\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({ schema: 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-D1kzJa7q.cjs';
1
+ import { S as Schema } from './Schema-BRWI5s-t.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-DzH5RnH5.cjs';
5
+ import { b as OperationGenerator } from './OperationGenerator-BjT70q5u.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-CO-T_KTl.js';
1
+ import { S as Schema } from './Schema-do5CU6y2.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-DzH5RnH5.js';
5
+ import { b as OperationGenerator } from './OperationGenerator-BjT70q5u.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-DzH5RnH5.cjs';
1
+ import { n as Generator, P as PluginOas } from './OperationGenerator-BjT70q5u.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-DzH5RnH5.js';
1
+ import { n as Generator, P as PluginOas } from './OperationGenerator-BjT70q5u.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 chunkQT6ZFRNJ_cjs = require('./chunk-QT6ZFRNJ.cjs');
3
+ var chunkAJDXMZ4A_cjs = require('./chunk-AJDXMZ4A.cjs');
4
4
  require('./chunk-QAFBZLJA.cjs');
5
5
  var chunkZWHQ54JM_cjs = require('./chunk-ZWHQ54JM.cjs');
6
6
  var react = require('@kubb/react');
@@ -41,17 +41,6 @@ function useOperationManager() {
41
41
  })
42
42
  });
43
43
  };
44
- const getSchemaName = (operation, key, { pluginKey = plugin.key, type } = {}) => {
45
- const schemas = getSchemas(operation);
46
- if (!schemas[key]?.name) {
47
- throw new Error(`SchemaName not found for ${operation.getOperationId()}`);
48
- }
49
- return pluginManager.resolveName({
50
- name: schemas[key]?.name,
51
- pluginKey,
52
- type
53
- });
54
- };
55
44
  const getFile = (operation, { prefix, suffix, pluginKey = plugin.key, tag = operation.getTags().at(0)?.name, extname = ".ts" } = {}) => {
56
45
  const name = getName(operation, { type: "file", pluginKey, prefix, suffix });
57
46
  const file = pluginManager.getFile({
@@ -132,7 +121,6 @@ function useOperationManager() {
132
121
  getName,
133
122
  getFile,
134
123
  getSchemas,
135
- getSchemaName,
136
124
  groupSchemasByName
137
125
  };
138
126
  }
@@ -181,9 +169,9 @@ function useSchemaManager() {
181
169
  };
182
170
  };
183
171
  const getImports = (tree) => {
184
- const refs = chunkQT6ZFRNJ_cjs.SchemaGenerator.deepSearch(tree, chunkQT6ZFRNJ_cjs.schemaKeywords.ref);
172
+ const refs = chunkAJDXMZ4A_cjs.SchemaGenerator.deepSearch(tree, chunkAJDXMZ4A_cjs.schemaKeywords.ref);
185
173
  return refs?.map((item, i) => {
186
- if (!item.args.path) {
174
+ if (!item.args.path || !item.args.isImportable) {
187
175
  return void 0;
188
176
  }
189
177
  return {