@kubb/plugin-oas 3.15.1 → 3.16.1

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 (37) hide show
  1. package/dist/{OperationGenerator-DyM5QANw.d.ts → OperationGenerator-C7NPZtOM.d.ts} +7 -21
  2. package/dist/{OperationGenerator-LFwakDt7.d.cts → OperationGenerator-DJE2XQ83.d.cts} +7 -21
  3. package/dist/{chunk-S7ZYTJXL.js → chunk-MBX66JAT.js} +5 -5
  4. package/dist/chunk-MBX66JAT.js.map +1 -0
  5. package/dist/{chunk-2LJ3ZJZP.cjs → chunk-NFLZLRQS.cjs} +39 -43
  6. package/dist/chunk-NFLZLRQS.cjs.map +1 -0
  7. package/dist/{chunk-JSR2ZSPP.js → chunk-P2VXWGXZ.js} +38 -43
  8. package/dist/chunk-P2VXWGXZ.js.map +1 -0
  9. package/dist/{chunk-S3UPJP7I.cjs → chunk-QJMOOF2A.cjs} +5 -5
  10. package/dist/chunk-QJMOOF2A.cjs.map +1 -0
  11. package/dist/components.d.cts +1 -1
  12. package/dist/components.d.ts +1 -1
  13. package/dist/generators.cjs +2 -2
  14. package/dist/generators.d.cts +1 -1
  15. package/dist/generators.d.ts +1 -1
  16. package/dist/generators.js +1 -1
  17. package/dist/hooks.cjs +2 -2
  18. package/dist/hooks.d.cts +1 -1
  19. package/dist/hooks.d.ts +1 -1
  20. package/dist/hooks.js +1 -1
  21. package/dist/index.cjs +126 -191
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.cts +2 -2
  24. package/dist/index.d.ts +2 -2
  25. package/dist/index.js +122 -188
  26. package/dist/index.js.map +1 -1
  27. package/dist/utils.d.cts +1 -1
  28. package/dist/utils.d.ts +1 -1
  29. package/package.json +8 -7
  30. package/src/OperationGenerator.ts +126 -223
  31. package/src/SchemaGenerator.ts +37 -46
  32. package/src/generator.tsx +4 -12
  33. package/src/types.ts +0 -1
  34. package/dist/chunk-2LJ3ZJZP.cjs.map +0 -1
  35. package/dist/chunk-JSR2ZSPP.js.map +0 -1
  36. package/dist/chunk-S3UPJP7I.cjs.map +0 -1
  37. package/dist/chunk-S7ZYTJXL.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { Plugin, Output, Group, PluginFactoryOptions, ResolveNameParams, FileMetaBase, BaseGenerator, PluginManager } from '@kubb/core';
2
2
  import { KubbFile } from '@kubb/core/fs';
3
- import { HttpMethod, Operation, SchemaObject, Oas, contentType } from '@kubb/oas';
3
+ import { HttpMethod, SchemaObject, Operation, Oas, contentType } from '@kubb/oas';
4
4
  import { KubbNode } from '@kubb/react/types';
5
5
  import { S as Schema, d as SchemaKeywordMapper } from './SchemaMapper-B21ZmWag.js';
6
6
 
@@ -121,10 +121,6 @@ type OperationSchemas = {
121
121
  statusCodes?: Array<OperationSchema>;
122
122
  errors?: Array<OperationSchema>;
123
123
  };
124
- type OperationsByMethod = Record<string, Record<HttpMethod, {
125
- operation: Operation;
126
- schemas: OperationSchemas;
127
- }>>;
128
124
  type ByTag = {
129
125
  type: 'tag';
130
126
  pattern: string | RegExp;
@@ -218,17 +214,12 @@ declare class SchemaGenerator<TOptions extends SchemaGeneratorOptions = SchemaGe
218
214
  static find<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined;
219
215
  static combineObjects(tree: Schema[] | undefined): Schema[];
220
216
  build(...generators: Array<Generator<TPluginOptions>>): Promise<Array<KubbFile.File<TFileMeta>>>;
221
- /**
222
- * Schema
223
- */
224
- schema(_name: string, _object: SchemaObject, _options: TOptions): SchemaMethodResult<TFileMeta>;
225
217
  }
226
218
 
227
219
  type OperationsProps<TOptions extends PluginFactoryOptions> = {
228
220
  instance: Omit<OperationGenerator<TOptions>, 'build'>;
229
221
  options: TOptions['resolvedOptions'];
230
222
  operations: Array<Operation>;
231
- operationsByMethod: OperationsByMethod;
232
223
  };
233
224
  type OperationProps<TOptions extends PluginFactoryOptions> = {
234
225
  instance: Omit<OperationGenerator<TOptions>, 'build'>;
@@ -283,20 +274,15 @@ type Context<TOptions, TPluginOptions extends PluginFactoryOptions> = {
283
274
  };
284
275
  declare class OperationGenerator<TPluginOptions extends PluginFactoryOptions = PluginFactoryOptions, TFileMeta extends FileMetaBase = FileMetaBase> extends BaseGenerator<TPluginOptions['resolvedOptions'], Context<TPluginOptions['resolvedOptions'], TPluginOptions>> {
285
276
  #private;
286
- get operationsByMethod(): OperationsByMethod;
287
- set operationsByMethod(paths: OperationsByMethod);
288
277
  getSchemas(operation: Operation, { resolveName, }?: {
289
278
  resolveName?: (name: string) => string;
290
279
  }): OperationSchemas;
280
+ getOperations(): Promise<Array<{
281
+ path: string;
282
+ method: HttpMethod;
283
+ operation: Operation;
284
+ }>>;
291
285
  build(...generators: Array<Generator<TPluginOptions>>): Promise<Array<KubbFile.File<TFileMeta>>>;
292
- /**
293
- * Operation
294
- */
295
- operation(_operation: Operation, _options: TPluginOptions['resolvedOptions']): OperationMethodResult<TFileMeta>;
296
- /**
297
- * Combination of GET, POST, PATCH, PUT, DELETE
298
- */
299
- all(_operations: Operation[], _paths: OperationsByMethod): OperationMethodResult<TFileMeta>;
300
286
  }
301
287
 
302
- 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, createGenerator as f, createReactGenerator as g, type Generator as h, type GeneratorOptions as i, type ResolvePathOptions as j, type Ref as k, type Refs as l, type Resolver as m, type OperationSchema as n, type OperationSchemas as o, type OperationsByMethod as p, type Override as q };
288
+ 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, createGenerator as f, createReactGenerator as g, type Generator as h, type GeneratorOptions as i, type ResolvePathOptions as j, type Ref as k, type Refs as l, type Resolver as m, type OperationSchema as n, type OperationSchemas as o, type Override as p };
@@ -1,6 +1,6 @@
1
1
  import { Plugin, Output, Group, PluginFactoryOptions, ResolveNameParams, FileMetaBase, BaseGenerator, PluginManager } from '@kubb/core';
2
2
  import { KubbFile } from '@kubb/core/fs';
3
- import { HttpMethod, Operation, SchemaObject, Oas, contentType } from '@kubb/oas';
3
+ import { HttpMethod, SchemaObject, Operation, Oas, contentType } from '@kubb/oas';
4
4
  import { KubbNode } from '@kubb/react/types';
5
5
  import { S as Schema, d as SchemaKeywordMapper } from './SchemaMapper-B21ZmWag.cjs';
6
6
 
@@ -121,10 +121,6 @@ type OperationSchemas = {
121
121
  statusCodes?: Array<OperationSchema>;
122
122
  errors?: Array<OperationSchema>;
123
123
  };
124
- type OperationsByMethod = Record<string, Record<HttpMethod, {
125
- operation: Operation;
126
- schemas: OperationSchemas;
127
- }>>;
128
124
  type ByTag = {
129
125
  type: 'tag';
130
126
  pattern: string | RegExp;
@@ -218,17 +214,12 @@ declare class SchemaGenerator<TOptions extends SchemaGeneratorOptions = SchemaGe
218
214
  static find<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined;
219
215
  static combineObjects(tree: Schema[] | undefined): Schema[];
220
216
  build(...generators: Array<Generator<TPluginOptions>>): Promise<Array<KubbFile.File<TFileMeta>>>;
221
- /**
222
- * Schema
223
- */
224
- schema(_name: string, _object: SchemaObject, _options: TOptions): SchemaMethodResult<TFileMeta>;
225
217
  }
226
218
 
227
219
  type OperationsProps<TOptions extends PluginFactoryOptions> = {
228
220
  instance: Omit<OperationGenerator<TOptions>, 'build'>;
229
221
  options: TOptions['resolvedOptions'];
230
222
  operations: Array<Operation>;
231
- operationsByMethod: OperationsByMethod;
232
223
  };
233
224
  type OperationProps<TOptions extends PluginFactoryOptions> = {
234
225
  instance: Omit<OperationGenerator<TOptions>, 'build'>;
@@ -283,20 +274,15 @@ type Context<TOptions, TPluginOptions extends PluginFactoryOptions> = {
283
274
  };
284
275
  declare class OperationGenerator<TPluginOptions extends PluginFactoryOptions = PluginFactoryOptions, TFileMeta extends FileMetaBase = FileMetaBase> extends BaseGenerator<TPluginOptions['resolvedOptions'], Context<TPluginOptions['resolvedOptions'], TPluginOptions>> {
285
276
  #private;
286
- get operationsByMethod(): OperationsByMethod;
287
- set operationsByMethod(paths: OperationsByMethod);
288
277
  getSchemas(operation: Operation, { resolveName, }?: {
289
278
  resolveName?: (name: string) => string;
290
279
  }): OperationSchemas;
280
+ getOperations(): Promise<Array<{
281
+ path: string;
282
+ method: HttpMethod;
283
+ operation: Operation;
284
+ }>>;
291
285
  build(...generators: Array<Generator<TPluginOptions>>): Promise<Array<KubbFile.File<TFileMeta>>>;
292
- /**
293
- * Operation
294
- */
295
- operation(_operation: Operation, _options: TPluginOptions['resolvedOptions']): OperationMethodResult<TFileMeta>;
296
- /**
297
- * Combination of GET, POST, PATCH, PUT, DELETE
298
- */
299
- all(_operations: Operation[], _paths: OperationsByMethod): OperationMethodResult<TFileMeta>;
300
286
  }
301
287
 
302
- 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, createGenerator as f, createReactGenerator as g, type Generator as h, type GeneratorOptions as i, type ResolvePathOptions as j, type Ref as k, type Refs as l, type Resolver as m, type OperationSchema as n, type OperationSchemas as o, type OperationsByMethod as p, type Override as q };
288
+ 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, createGenerator as f, createReactGenerator as g, type Generator as h, type GeneratorOptions as i, type ResolvePathOptions as j, type Ref as k, type Refs as l, type Resolver as m, type OperationSchema as n, type OperationSchemas as o, type Override as p };
@@ -10,7 +10,7 @@ function createGenerator(parseOptions) {
10
10
  function createReactGenerator(parseOptions) {
11
11
  return {
12
12
  ...parseOptions,
13
- async operations({ instance, options, operations, operationsByMethod }) {
13
+ async operations({ instance, options, operations }) {
14
14
  if (!parseOptions.Operations) {
15
15
  return [];
16
16
  }
@@ -20,7 +20,7 @@ function createReactGenerator(parseOptions) {
20
20
  });
21
21
  const Component = parseOptions.Operations.bind(this);
22
22
  root.render(
23
- /* @__PURE__ */ jsx(App, { pluginManager, plugin, mode, children: /* @__PURE__ */ jsx(Oas, { oas, operations, generator: instance, children: /* @__PURE__ */ jsx(Component, { operations, instance, operationsByMethod, options }) }) })
23
+ /* @__PURE__ */ jsx(App, { pluginManager, plugin, mode, children: /* @__PURE__ */ jsx(Oas, { oas, operations, generator: instance, children: /* @__PURE__ */ jsx(Component, { operations, instance, options }) }) })
24
24
  );
25
25
  return root.files;
26
26
  },
@@ -43,10 +43,10 @@ function createReactGenerator(parseOptions) {
43
43
  return [];
44
44
  }
45
45
  const { pluginManager, oas, plugin, mode } = instance.context;
46
+ const Component = parseOptions.Schema.bind(this);
46
47
  const root = createRoot({
47
48
  logger: pluginManager.logger
48
49
  });
49
- const Component = parseOptions.Schema.bind(this);
50
50
  root.render(
51
51
  /* @__PURE__ */ jsx(App, { pluginManager, plugin: { ...plugin, options }, mode, children: /* @__PURE__ */ jsx(Oas, { oas, children: /* @__PURE__ */ jsx(Oas.Schema, { name: schema.name, schemaObject: schema.value, tree: schema.tree, children: /* @__PURE__ */ jsx(Component, { schema, options, instance }) }) }) })
52
52
  );
@@ -89,5 +89,5 @@ var jsonGenerator = createGenerator({
89
89
  });
90
90
 
91
91
  export { createGenerator, createReactGenerator, jsonGenerator };
92
- //# sourceMappingURL=chunk-S7ZYTJXL.js.map
93
- //# sourceMappingURL=chunk-S7ZYTJXL.js.map
92
+ //# sourceMappingURL=chunk-MBX66JAT.js.map
93
+ //# sourceMappingURL=chunk-MBX66JAT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/generator.tsx","../src/generators/jsonGenerator.ts"],"names":[],"mappings":"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","file":"chunk-MBX66JAT.js","sourcesContent":["import type { PluginFactoryOptions } from '@kubb/core'\nimport type { KubbFile } from '@kubb/core/fs'\nimport type { Operation, SchemaObject } from '@kubb/oas'\nimport { App, createRoot } from '@kubb/react'\nimport type { KubbNode } from '@kubb/react/types'\nimport { Oas } from './components/Oas.tsx'\nimport type { OperationGenerator } from './OperationGenerator.ts'\nimport type { SchemaGenerator, SchemaGeneratorOptions } from './SchemaGenerator.ts'\nimport type { Schema } from './SchemaMapper.ts'\n\ntype OperationsProps<TOptions extends PluginFactoryOptions> = {\n instance: Omit<OperationGenerator<TOptions>, 'build'>\n options: TOptions['resolvedOptions']\n operations: Array<Operation>\n}\n\ntype OperationProps<TOptions extends PluginFactoryOptions> = {\n instance: Omit<OperationGenerator<TOptions>, 'build'>\n options: TOptions['resolvedOptions']\n operation: Operation\n}\n\ntype SchemaProps<TOptions extends PluginFactoryOptions> = {\n instance: Omit<SchemaGenerator<SchemaGeneratorOptions, TOptions>, 'build'>\n options: TOptions['resolvedOptions']\n schema: {\n name: string\n tree: Array<Schema>\n value: SchemaObject\n }\n}\n\nexport type GeneratorOptions<TOptions extends PluginFactoryOptions> = {\n name: string\n operations?: (this: GeneratorOptions<TOptions>, props: OperationsProps<TOptions>) => Promise<KubbFile.File[]>\n operation?: (this: GeneratorOptions<TOptions>, props: OperationProps<TOptions>) => Promise<KubbFile.File[]>\n schema?: (this: GeneratorOptions<TOptions>, props: SchemaProps<TOptions>) => Promise<KubbFile.File[]>\n}\n\nexport type Generator<TOptions extends PluginFactoryOptions> = GeneratorOptions<TOptions>\n\nexport function createGenerator<TOptions extends PluginFactoryOptions>(parseOptions: GeneratorOptions<TOptions>): Generator<TOptions> {\n return parseOptions\n}\n\nexport type ReactGeneratorOptions<TOptions extends PluginFactoryOptions> = {\n name: string\n Operations?: (this: ReactGeneratorOptions<TOptions>, props: OperationsProps<TOptions>) => KubbNode\n Operation?: (this: ReactGeneratorOptions<TOptions>, props: OperationProps<TOptions>) => KubbNode\n Schema?: (this: ReactGeneratorOptions<TOptions>, props: SchemaProps<TOptions>) => KubbNode\n}\n\n/****\n * Creates a generator that uses React component functions to generate files for OpenAPI operations and schemas.\n *\n * The returned generator exposes async methods for generating files from operations, a single operation, or a schema, using the corresponding React components if provided. If a component is not defined, the method returns an empty array.\n *\n * @returns A generator object with async methods for operations, operation, and schema file generation.\n */\nexport function createReactGenerator<TOptions extends PluginFactoryOptions>(parseOptions: ReactGeneratorOptions<TOptions>): Generator<TOptions> {\n return {\n ...parseOptions,\n async operations({ instance, options, operations }) {\n if (!parseOptions.Operations) {\n return []\n }\n\n const { pluginManager, oas, plugin, mode } = instance.context\n const root = createRoot({\n logger: pluginManager.logger,\n })\n const Component = parseOptions.Operations.bind(this)\n\n root.render(\n <App pluginManager={pluginManager} plugin={plugin} mode={mode}>\n <Oas oas={oas} operations={operations} generator={instance}>\n <Component operations={operations} instance={instance} options={options} />\n </Oas>\n </App>,\n )\n return root.files\n },\n async operation({ instance, operation, options }) {\n if (!parseOptions.Operation) {\n return []\n }\n\n const { pluginManager, oas, plugin, mode } = instance.context\n const root = createRoot({\n logger: pluginManager.logger,\n })\n const Component = parseOptions.Operation.bind(this)\n\n root.render(\n <App pluginManager={pluginManager} plugin={{ ...plugin, options }} mode={mode}>\n <Oas oas={oas} operations={[operation]} generator={instance}>\n <Oas.Operation operation={operation}>\n <Component operation={operation} options={options} instance={instance} />\n </Oas.Operation>\n </Oas>\n </App>,\n )\n return root.files\n },\n async schema({ instance, schema, options }) {\n if (!parseOptions.Schema) {\n return []\n }\n\n const { pluginManager, oas, plugin, mode } = instance.context\n\n const Component = parseOptions.Schema.bind(this)\n const root = createRoot({\n logger: pluginManager.logger,\n })\n root.render(\n <App pluginManager={pluginManager} plugin={{ ...plugin, options }} mode={mode}>\n <Oas oas={oas}>\n <Oas.Schema name={schema.name} schemaObject={schema.value} tree={schema.tree}>\n <Component schema={schema} options={options} instance={instance} />\n </Oas.Schema>\n </Oas>\n </App>,\n )\n return root.files\n },\n }\n}\n","import { camelCase } from '@kubb/core/transformers'\nimport { createGenerator } from '../generator.tsx'\nimport type { PluginOas } from '../types.ts'\nimport { getBanner } from '../utils/getBanner.ts'\nimport { getFooter } from '../utils/getFooter.ts'\n\nexport const jsonGenerator = createGenerator<PluginOas>({\n name: 'plugin-oas',\n async schema({ schema, instance }) {\n const { pluginManager, plugin } = instance.context\n const file = pluginManager.getFile({\n name: camelCase(schema.name),\n extname: '.json',\n mode: 'split',\n pluginKey: plugin.key,\n })\n\n return [\n {\n ...file,\n sources: [\n {\n name: camelCase(schema.name),\n isExportable: false,\n isIndexable: false,\n value: JSON.stringify(schema.value),\n },\n ],\n banner: getBanner({\n oas: instance.context.oas,\n output: plugin.options.output,\n config: pluginManager.config,\n }),\n format: getFooter({ oas: instance.context.oas, output: plugin.options.output }),\n },\n ]\n },\n})\n"]}
@@ -7,10 +7,12 @@ var transformers = require('@kubb/core/transformers');
7
7
  var utils = require('@kubb/core/utils');
8
8
  var oas = require('@kubb/oas');
9
9
  var remeda = require('remeda');
10
+ var pLimit = require('p-limit');
10
11
 
11
12
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
13
 
13
14
  var transformers__default = /*#__PURE__*/_interopDefault(transformers);
15
+ var pLimit__default = /*#__PURE__*/_interopDefault(pLimit);
14
16
 
15
17
  var SchemaGenerator = class _SchemaGenerator extends core.BaseGenerator {
16
18
  // Collect the types of all referenced schemas, so we can export them later
@@ -681,12 +683,16 @@ var SchemaGenerator = class _SchemaGenerator extends core.BaseGenerator {
681
683
  if (schemaObject["const"] === void 0) {
682
684
  return [{ keyword: chunkYWMMI3MO_cjs.schemaKeywords.undefined }];
683
685
  }
686
+ let format = typeof schemaObject["const"];
687
+ if (format !== "number" && format !== "boolean") {
688
+ format = "string";
689
+ }
684
690
  return [
685
691
  {
686
692
  keyword: chunkYWMMI3MO_cjs.schemaKeywords.const,
687
693
  args: {
688
694
  name: schemaObject["const"],
689
- format: typeof schemaObject["const"] === "number" ? "number" : "string",
695
+ format,
690
696
  value: schemaObject["const"]
691
697
  }
692
698
  },
@@ -825,49 +831,39 @@ var SchemaGenerator = class _SchemaGenerator extends core.BaseGenerator {
825
831
  async build(...generators) {
826
832
  const { oas, contentType, include } = this.context;
827
833
  const schemas = chunkZVFL3NXX_cjs.getSchemas({ oas, contentType, includes: include });
828
- const promises = Object.entries(schemas).reduce((acc, [name, value]) => {
829
- if (!value) {
830
- return acc;
831
- }
832
- const options = this.#getOptions({ name });
833
- const promiseOperation = this.schema.call(this, name, value, {
834
- ...this.options,
835
- ...options
836
- });
837
- if (promiseOperation) {
838
- acc.push(promiseOperation);
839
- }
840
- generators?.forEach((generator) => {
841
- const tree = this.parse({ schemaObject: value, name });
842
- const promise = generator.schema?.({
843
- instance: this,
844
- schema: {
845
- name,
846
- value,
847
- tree
848
- },
849
- options: {
850
- ...this.options,
851
- ...options
852
- }
853
- });
854
- if (promise) {
855
- acc.push(promise);
856
- }
857
- });
858
- return acc;
859
- }, []);
860
- const files = await Promise.all(promises);
861
- return files.flat().filter(Boolean);
862
- }
863
- /**
864
- * Schema
865
- */
866
- async schema(_name, _object, _options) {
867
- return [];
834
+ const schemaEntries = Object.entries(schemas);
835
+ const generatorLimit = pLimit__default.default(1);
836
+ const schemaLimit = pLimit__default.default(10);
837
+ const writeTasks = generators.map(
838
+ (generator) => generatorLimit(async () => {
839
+ const schemaTasks = schemaEntries.map(
840
+ ([name, schemaObject]) => schemaLimit(async () => {
841
+ const options = this.#getOptions({ name });
842
+ const tree = this.parse({ name, schemaObject });
843
+ const result = await generator.schema?.({
844
+ instance: this,
845
+ schema: {
846
+ name,
847
+ value: schemaObject,
848
+ tree
849
+ },
850
+ options: {
851
+ ...this.options,
852
+ ...options
853
+ }
854
+ });
855
+ return result ?? [];
856
+ })
857
+ );
858
+ const schemaResults = await Promise.all(schemaTasks);
859
+ return schemaResults.flat();
860
+ })
861
+ );
862
+ const nestedResults = await Promise.all(writeTasks);
863
+ return nestedResults.flat();
868
864
  }
869
865
  };
870
866
 
871
867
  exports.SchemaGenerator = SchemaGenerator;
872
- //# sourceMappingURL=chunk-2LJ3ZJZP.cjs.map
873
- //# sourceMappingURL=chunk-2LJ3ZJZP.cjs.map
868
+ //# sourceMappingURL=chunk-NFLZLRQS.cjs.map
869
+ //# sourceMappingURL=chunk-NFLZLRQS.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/SchemaGenerator.ts"],"names":["BaseGenerator","uniqueWith","isDeepEqual","isKeyword","schemaKeywords","isDiscriminator","getUniqueName","getSchemaFactory","isNullable","transformers","isReference","pascalCase","name","isNumber","min","max","getSchemas","pLimit"],"mappings":"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","file":"chunk-NFLZLRQS.cjs","sourcesContent":["import type { Plugin, PluginFactoryOptions, PluginManager, ResolveNameParams } from '@kubb/core'\nimport { BaseGenerator, type FileMetaBase } from '@kubb/core'\nimport type { KubbFile } from '@kubb/core/fs'\nimport transformers, { pascalCase } from '@kubb/core/transformers'\nimport { getUniqueName } from '@kubb/core/utils'\nimport type { contentType, Oas, OpenAPIV3, SchemaObject } from '@kubb/oas'\nimport { isDiscriminator, isNullable, isReference } from '@kubb/oas'\nimport { isDeepEqual, isNumber, uniqueWith } from 'remeda'\nimport type { Generator } from './generator.tsx'\nimport type { Schema, SchemaKeywordMapper } from './SchemaMapper.ts'\nimport { isKeyword, schemaKeywords } from './SchemaMapper.ts'\nimport type { OperationSchema, Override, Refs } from './types.ts'\nimport { getSchemaFactory } from './utils/getSchemaFactory.ts'\nimport { getSchemas } from './utils/getSchemas.ts'\nimport pLimit from 'p-limit'\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 emptySchemaType: 'any' | 'unknown' | 'void'\n enumType?: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal'\n enumSuffix?: string\n usedEnumNames?: Record<string, number>\n mapper?: Record<string, string>\n typed?: boolean\n transformers: {\n /**\n * Customize the names based on the type that is provided by the plugin.\n */\n name?: (name: ResolveNameParams['name'], type?: ResolveNameParams['type']) => string\n /**\n * Receive schema and name(propertName) and return FakerMeta array\n * TODO TODO add docs\n * @beta\n */\n schema?: (schemaProps: SchemaProps, defaultSchemas: Schema[]) => Schema[] | undefined\n }\n}\n\nexport type SchemaGeneratorBuildOptions = Omit<OperationSchema, 'name' | 'schema'>\n\ntype SchemaProps = {\n schemaObject?: SchemaObject\n name?: string\n parentName?: string\n}\n\nexport class SchemaGenerator<\n TOptions extends SchemaGeneratorOptions = SchemaGeneratorOptions,\n TPluginOptions extends PluginFactoryOptions = PluginFactoryOptions,\n TFileMeta extends FileMetaBase = FileMetaBase,\n> extends BaseGenerator<TOptions, Context<TOptions, TPluginOptions>> {\n // Collect the types of all referenced schemas, so we can export them later\n refs: Refs = {}\n\n // Keep track of already used type aliases\n #usedAliasNames: Record<string, number> = {}\n\n /**\n * Creates a type node from a given schema.\n * Delegates to getBaseTypeFromSchema internally and\n * optionally adds a union with null.\n */\n parse(props: SchemaProps): Schema[] {\n const options = this.#getOptions(props)\n\n const defaultSchemas = this.#parseSchemaObject(props)\n const schemas = options.transformers?.schema?.(props, defaultSchemas) || defaultSchemas || []\n\n return uniqueWith(schemas, isDeepEqual)\n }\n\n 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\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\n\n tree?.forEach((schema) => {\n if (!foundItem && schema.keyword === keyword) {\n foundItem = schema as SchemaKeywordMapper[T]\n }\n\n if (isKeyword(schema, schemaKeywords.array)) {\n schema.args.items.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n\n if (isKeyword(schema, schemaKeywords.and)) {\n schema.args.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n\n if (isKeyword(schema, schemaKeywords.tuple)) {\n schema.args.items.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n\n if (isKeyword(schema, schemaKeywords.union)) {\n schema.args.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n })\n\n return foundItem\n }\n\n static combineObjects(tree: Schema[] | undefined): Schema[] {\n if (!tree) {\n return []\n }\n\n return tree.map((schema) => {\n if (!isKeyword(schema, schemaKeywords.and)) {\n return schema\n }\n\n let mergedProperties: Record<string, Schema[]> | null = null\n let mergedAdditionalProps: Schema[] = []\n\n const newArgs: Schema[] = []\n\n for (const subSchema of schema.args) {\n if (isKeyword(subSchema, schemaKeywords.object)) {\n const { properties = {}, additionalProperties = [] } = subSchema.args ?? {}\n\n if (!mergedProperties) {\n mergedProperties = {}\n }\n\n for (const [key, value] of Object.entries(properties)) {\n mergedProperties[key] = value\n }\n\n if (additionalProperties.length > 0) {\n mergedAdditionalProps = additionalProperties\n }\n } else {\n newArgs.push(subSchema)\n }\n }\n\n if (mergedProperties) {\n newArgs.push({\n keyword: schemaKeywords.object,\n args: {\n properties: mergedProperties,\n additionalProperties: mergedAdditionalProps,\n },\n })\n }\n\n return {\n keyword: schemaKeywords.and,\n args: newArgs,\n }\n })\n }\n\n #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 #getUnknownType(props: SchemaProps) {\n const options = this.#getOptions(props)\n\n if (options.unknownType === 'any') {\n return schemaKeywords.any\n }\n if (options.unknownType === 'void') {\n return schemaKeywords.void\n }\n\n return schemaKeywords.unknown\n }\n\n #getEmptyType(props: SchemaProps) {\n const options = this.#getOptions(props)\n\n if (options.emptySchemaType === 'any') {\n return schemaKeywords.any\n }\n if (options.emptySchemaType === 'void') {\n return schemaKeywords.void\n }\n\n return schemaKeywords.unknown\n }\n\n /**\n * Recursively creates a type literal with the given props.\n */\n #parseProperties({ schemaObject, name }: SchemaProps): Schema[] {\n const properties = schemaObject?.properties || {}\n const additionalProperties = schemaObject?.additionalProperties\n const required = schemaObject?.required\n\n const propertiesSchemas = Object.keys(properties)\n .map((propertyName) => {\n const validationFunctions: Schema[] = []\n const propertySchema = properties[propertyName] as SchemaObject\n\n const isRequired = Array.isArray(required) ? required?.includes(propertyName) : !!required\n const nullable = propertySchema.nullable ?? propertySchema['x-nullable'] ?? false\n\n validationFunctions.push(...this.parse({ schemaObject: propertySchema, name: propertyName, parentName: name }))\n\n validationFunctions.push({\n keyword: schemaKeywords.name,\n args: propertyName,\n })\n\n if (!isRequired && nullable) {\n validationFunctions.push({ keyword: schemaKeywords.nullish })\n } else if (!isRequired) {\n validationFunctions.push({ keyword: schemaKeywords.optional })\n }\n\n return {\n [propertyName]: validationFunctions,\n }\n })\n .reduce((acc, curr) => ({ ...acc, ...curr }), {})\n let additionalPropertiesSchemas: Schema[] = []\n\n if (additionalProperties) {\n additionalPropertiesSchemas =\n additionalProperties === true || !Object.keys(additionalProperties).length\n ? [{ keyword: this.#getUnknownType({ schemaObject, name }) }]\n : this.parse({ schemaObject: additionalProperties as SchemaObject, parentName: name })\n }\n\n return [\n {\n keyword: schemaKeywords.object,\n args: {\n properties: propertiesSchemas,\n additionalProperties: additionalPropertiesSchemas,\n },\n },\n ]\n }\n\n /**\n * Create a type alias for the schema referenced by the given ReferenceObject\n */\n #getRefAlias(schemaObject: OpenAPIV3.ReferenceObject, name: string | undefined): Schema[] {\n const { $ref } = schemaObject\n const ref = this.refs[$ref]\n\n if (ref) {\n const dereferencedSchema = this.context.oas.dereferenceWithRef(schemaObject)\n // pass name to getRefAlias and use that to find in discriminator.mapping value\n\n if (dereferencedSchema && isDiscriminator(dereferencedSchema)) {\n const [key] = Object.entries(dereferencedSchema.discriminator.mapping || {}).find(([_key, value]) => value.replace(/.+\\//, '') === name) || []\n\n if (key) {\n return [\n {\n keyword: schemaKeywords.and,\n args: [\n {\n keyword: schemaKeywords.ref,\n args: { name: ref.propertyName, $ref, path: ref.path, isImportable: !!this.context.oas.get($ref) },\n },\n {\n keyword: schemaKeywords.object,\n args: {\n properties: {\n [dereferencedSchema.discriminator.propertyName]: [\n {\n keyword: schemaKeywords.const,\n args: {\n name: key,\n format: 'string',\n value: key,\n },\n },\n ],\n },\n },\n },\n ],\n },\n ] as Schema[]\n }\n }\n\n return [\n {\n keyword: schemaKeywords.ref,\n args: { name: ref.propertyName, $ref, path: ref.path, isImportable: !!this.context.oas.get($ref) },\n },\n ]\n }\n\n const originalName = getUniqueName($ref.replace(/.+\\//, ''), this.#usedAliasNames)\n const propertyName = this.context.pluginManager.resolveName({\n name: originalName,\n pluginKey: this.context.plugin.key,\n type: 'function',\n })\n\n const fileName = this.context.pluginManager.resolveName({\n name: originalName,\n pluginKey: this.context.plugin.key,\n type: 'file',\n })\n const file = this.context.pluginManager.getFile({\n name: fileName,\n pluginKey: this.context.plugin.key,\n extname: '.ts',\n })\n\n this.refs[$ref] = {\n propertyName,\n originalName,\n path: file.path,\n }\n\n return this.#getRefAlias(schemaObject, name)\n }\n\n #getParsedSchemaObject(schema?: SchemaObject) {\n return getSchemaFactory(this.context.oas)(schema)\n }\n\n #addDiscriminatorToSchema<TSchema extends Schema>({\n schema,\n schemaObject,\n discriminator,\n }: {\n schemaObject: SchemaObject\n schema: TSchema\n discriminator: OpenAPIV3.DiscriminatorObject\n }): TSchema {\n if (!isKeyword(schema, schemaKeywords.union)) {\n return schema\n }\n\n const objectPropertySchema = SchemaGenerator.find(this.parse({ schemaObject: schemaObject }), schemaKeywords.object)\n\n return {\n ...schema,\n args: Object.entries(discriminator.mapping || {}).map(([key, value]) => {\n const arg = schema.args.find((item) => isKeyword(item, schemaKeywords.ref) && item.args.$ref === value)\n return {\n keyword: schemaKeywords.and,\n args: [\n arg,\n {\n keyword: schemaKeywords.object,\n args: {\n properties: {\n ...(objectPropertySchema?.args?.properties || {}),\n [discriminator.propertyName]: [\n {\n keyword: schemaKeywords.const,\n args: {\n name: key,\n format: 'string',\n value: key,\n },\n },\n //enum and literal will conflict\n ...(objectPropertySchema?.args?.properties[discriminator.propertyName] || []),\n ].filter((item) => !isKeyword(item, schemaKeywords.enum)),\n },\n },\n },\n ],\n }\n }),\n }\n }\n\n /**\n * This is the very core of the OpenAPI to TS conversion - it takes a\n * schema and returns the appropriate type.\n */\n #parseSchemaObject({ schemaObject: _schemaObject, name, parentName }: SchemaProps): Schema[] {\n const { schemaObject, version } = this.#getParsedSchemaObject(_schemaObject)\n\n const options = this.#getOptions({ schemaObject, name })\n const emptyType = this.#getEmptyType({ schemaObject, name })\n\n if (!schemaObject) {\n return [{ keyword: emptyType }]\n }\n\n const baseItems: Schema[] = [\n {\n keyword: schemaKeywords.schema,\n args: {\n type: schemaObject.type as any,\n format: schemaObject.format,\n },\n },\n ]\n const min = schemaObject.minimum ?? schemaObject.minLength ?? schemaObject.minItems ?? undefined\n const max = schemaObject.maximum ?? schemaObject.maxLength ?? schemaObject.maxItems ?? undefined\n 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 || schemaObject.anyOf) {\n // union\n const schemaWithoutOneOf = { ...schemaObject, oneOf: undefined, anyOf: undefined }\n const discriminator = this.context.oas.getDiscriminator(schemaObject)\n\n const union: SchemaKeywordMapper['union'] = {\n keyword: schemaKeywords.union,\n args: (schemaObject.oneOf || schemaObject.anyOf)!\n .map((item) => {\n // first item, this will be ref\n return item && this.parse({ schemaObject: item as SchemaObject, name, parentName })[0]\n })\n .filter(Boolean)\n .filter((item) => !isKeyword(item, schemaKeywords.unknown)),\n }\n\n if (discriminator) {\n if (this.context) 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.allOf) {\n // intersection/add\n const schemaWithoutAllOf = { ...schemaObject, allOf: undefined }\n\n const and: Schema = {\n keyword: schemaKeywords.and,\n args: schemaObject.allOf\n .map((item) => {\n return item && this.parse({ schemaObject: item as SchemaObject, name, parentName })[0]\n })\n .filter(Boolean)\n .filter((item) => !isKeyword(item, schemaKeywords.unknown)),\n }\n\n if (schemaWithoutAllOf.required?.length) {\n const allOfItems = schemaObject.allOf\n const resolvedSchemas: SchemaObject[] = []\n\n for (const item of allOfItems) {\n const resolved = isReference(item) ? (this.context.oas.get(item.$ref) as SchemaObject) : item\n\n if (resolved) {\n resolvedSchemas.push(resolved)\n }\n }\n\n const existingKeys = schemaWithoutAllOf.properties ? new Set(Object.keys(schemaWithoutAllOf.properties)) : null\n\n const parsedItems: SchemaObject[] = []\n\n for (const key of schemaWithoutAllOf.required) {\n if (existingKeys?.has(key)) {\n continue\n }\n\n for (const schema of resolvedSchemas) {\n if (schema.properties?.[key]) {\n parsedItems.push({\n properties: {\n [key]: schema.properties[key],\n },\n required: [key],\n } as SchemaObject)\n break\n }\n }\n }\n\n for (const item of parsedItems) {\n const parsed = this.parse({ schemaObject: item, name, parentName })\n\n if (Array.isArray(parsed)) {\n and.args = and.args ? and.args.concat(parsed) : parsed\n }\n }\n }\n\n if (schemaWithoutAllOf.properties) {\n and.args = [...(and.args || []), ...this.parse({ schemaObject: schemaWithoutAllOf, name, parentName })]\n }\n\n return SchemaGenerator.combineObjects([and, ...baseItems])\n }\n\n if (schemaObject.enum) {\n if (options.enumSuffix === '') {\n this.context.pluginManager.logger.emit('info', 'EnumSuffix set to an empty string does not work')\n }\n\n const enumName = getUniqueName(pascalCase([parentName, name, options.enumSuffix].join(' ')), this.#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\n if (schemaObject['const'] === null) {\n return [{ keyword: schemaKeywords.null }]\n }\n if (schemaObject['const'] === undefined) {\n return [{ keyword: schemaKeywords.undefined }]\n }\n\n let format = typeof schemaObject['const']\n if (format !== 'number' && format !== 'boolean') {\n format = 'string'\n }\n\n return [\n {\n keyword: schemaKeywords.const,\n args: {\n name: schemaObject['const'],\n format,\n value: schemaObject['const'],\n },\n },\n ...baseItems,\n ]\n }\n\n /**\n * > Structural validation alone may be insufficient to allow an application to correctly utilize certain values. The \"format\"\n * > annotation keyword is defined to allow schema authors to convey semantic information for a fixed subset of values which are\n * > accurately described by authoritative resources, be they RFCs or other external specifications.\n *\n * In other words: format is more specific than type alone, hence it should override the type value, if possible.\n *\n * see also https://json-schema.org/draft/2020-12/draft-bhutton-json-schema-validation-00#rfc.section.7\n */\n if (schemaObject.format) {\n if (schemaObject.type === 'integer' && (schemaObject.format === 'int32' || schemaObject.format === 'int64')) {\n baseItems.unshift({ keyword: schemaKeywords.integer })\n return baseItems\n }\n\n if (schemaObject.type === 'number' && (schemaObject.format === 'float' || schemaObject.format === 'double')) {\n baseItems.unshift({ keyword: schemaKeywords.number })\n return baseItems\n }\n\n switch (schemaObject.format) {\n case 'binary':\n baseItems.push({ keyword: schemaKeywords.blob })\n return baseItems\n case 'date-time':\n if (options.dateType) {\n if (options.dateType === 'date') {\n baseItems.unshift({ keyword: schemaKeywords.date, args: { type: 'date' } })\n\n return baseItems\n }\n\n if (options.dateType === 'stringOffset') {\n baseItems.unshift({ keyword: schemaKeywords.datetime, args: { offset: true } })\n return baseItems\n }\n\n if (options.dateType === 'stringLocal') {\n baseItems.unshift({ keyword: schemaKeywords.datetime, args: { local: true } })\n return baseItems\n }\n\n baseItems.unshift({ keyword: schemaKeywords.datetime, args: { offset: false } })\n\n return baseItems\n }\n break\n case 'date':\n if (options.dateType) {\n if (options.dateType === 'date') {\n baseItems.unshift({ keyword: schemaKeywords.date, args: { type: 'date' } })\n\n return baseItems\n }\n\n baseItems.unshift({ keyword: schemaKeywords.date, args: { type: 'string' } })\n\n return baseItems\n }\n break\n case 'time':\n if (options.dateType) {\n if (options.dateType === 'date') {\n baseItems.unshift({ keyword: schemaKeywords.time, args: { type: 'date' } })\n\n return baseItems\n }\n\n baseItems.unshift({ keyword: schemaKeywords.time, args: { type: 'string' } })\n\n return baseItems\n }\n break\n case 'uuid':\n baseItems.unshift({ keyword: schemaKeywords.uuid })\n return baseItems\n case 'email':\n case 'idn-email':\n baseItems.unshift({ keyword: schemaKeywords.email })\n return baseItems\n case 'uri':\n case 'ipv4':\n case 'ipv6':\n case 'uri-reference':\n case 'hostname':\n case 'idn-hostname':\n baseItems.unshift({ keyword: schemaKeywords.url })\n return baseItems\n // case 'duration':\n // case 'json-pointer':\n // case 'relative-json-pointer':\n default:\n // formats not yet implemented: ignore.\n break\n }\n }\n\n if (schemaObject.pattern && schemaObject.type === 'string') {\n baseItems.unshift({\n keyword: schemaKeywords.matches,\n args: schemaObject.pattern,\n })\n\n return baseItems\n }\n\n // type based logic\n if ('items' in schemaObject || schemaObject.type === ('array' as 'string')) {\n const min = schemaObject.minimum ?? schemaObject.minLength ?? schemaObject.minItems ?? undefined\n const max = schemaObject.maximum ?? schemaObject.maxLength ?? schemaObject.maxItems ?? undefined\n const items = this.parse({ schemaObject: 'items' in schemaObject ? (schemaObject.items as SchemaObject) : [], name, parentName })\n const unique = !!schemaObject.uniqueItems\n\n return [\n {\n keyword: schemaKeywords.array,\n args: {\n items,\n min,\n max,\n unique,\n },\n },\n ...baseItems.filter((item) => item.keyword !== schemaKeywords.min && item.keyword !== schemaKeywords.max),\n ]\n }\n\n if (schemaObject.properties || schemaObject.additionalProperties) {\n if (isDiscriminator(schemaObject)) {\n // override schema to set type to be based on discriminator mapping, use of enum to convert type string to type 'mapping1' | 'mapping2'\n const schemaObjectOverriden = Object.keys(schemaObject.properties || {}).reduce((acc, propertyName) => {\n if (acc.properties?.[propertyName] && propertyName === schemaObject.discriminator.propertyName) {\n return {\n ...acc,\n properties: {\n ...acc.properties,\n [propertyName]: {\n ...((acc.properties[propertyName] as any) || {}),\n enum: schemaObject.discriminator.mapping ? Object.keys(schemaObject.discriminator.mapping) : undefined,\n },\n },\n }\n }\n\n return acc\n }, schemaObject || {}) as SchemaObject\n\n return [\n ...this.#parseProperties({\n schemaObject: schemaObjectOverriden,\n name,\n }),\n ...baseItems,\n ]\n }\n\n return [...this.#parseProperties({ schemaObject, name }), ...baseItems]\n }\n\n if (schemaObject.type) {\n const type = (\n Array.isArray(schemaObject.type) ? schemaObject.type.filter((item) => item !== 'null')[0] : schemaObject.type\n ) as OpenAPIV3.NonArraySchemaObjectType\n\n if (!['boolean', 'object', 'number', 'string', 'integer', 'null'].includes(type)) {\n this.context.pluginManager.logger.emit('warning', `Schema type '${schemaObject.type}' is not valid for schema ${parentName}.${name}`)\n }\n\n // 'string' | 'number' | 'integer' | 'boolean'\n return [{ keyword: type }, ...baseItems]\n }\n\n return [{ keyword: emptyType }]\n }\n\n async build(...generators: Array<Generator<TPluginOptions>>): Promise<Array<KubbFile.File<TFileMeta>>> {\n const { oas, contentType, include } = this.context\n const schemas = getSchemas({ oas, contentType, includes: include })\n const schemaEntries = Object.entries(schemas)\n\n const generatorLimit = pLimit(1)\n const schemaLimit = pLimit(10)\n\n const writeTasks = generators.map((generator) =>\n generatorLimit(async () => {\n const schemaTasks = schemaEntries.map(([name, schemaObject]) =>\n schemaLimit(async () => {\n const options = this.#getOptions({ name })\n const tree = this.parse({ name, schemaObject })\n\n const result = await generator.schema?.({\n instance: this,\n schema: {\n name,\n value: schemaObject,\n tree,\n },\n options: {\n ...this.options,\n ...options,\n },\n })\n\n return result ?? []\n }),\n )\n\n const schemaResults = await Promise.all(schemaTasks)\n return schemaResults.flat() as unknown as KubbFile.File<TFileMeta>\n }),\n )\n\n const nestedResults = await Promise.all(writeTasks)\n\n return nestedResults.flat()\n }\n}\n"]}
@@ -5,6 +5,7 @@ import transformers, { pascalCase } from '@kubb/core/transformers';
5
5
  import { getUniqueName } from '@kubb/core/utils';
6
6
  import { isDiscriminator, isNullable, isReference } from '@kubb/oas';
7
7
  import { uniqueWith, isDeepEqual, isNumber } from 'remeda';
8
+ import pLimit from 'p-limit';
8
9
 
9
10
  var SchemaGenerator = class _SchemaGenerator extends BaseGenerator {
10
11
  // Collect the types of all referenced schemas, so we can export them later
@@ -675,12 +676,16 @@ var SchemaGenerator = class _SchemaGenerator extends BaseGenerator {
675
676
  if (schemaObject["const"] === void 0) {
676
677
  return [{ keyword: schemaKeywords.undefined }];
677
678
  }
679
+ let format = typeof schemaObject["const"];
680
+ if (format !== "number" && format !== "boolean") {
681
+ format = "string";
682
+ }
678
683
  return [
679
684
  {
680
685
  keyword: schemaKeywords.const,
681
686
  args: {
682
687
  name: schemaObject["const"],
683
- format: typeof schemaObject["const"] === "number" ? "number" : "string",
688
+ format,
684
689
  value: schemaObject["const"]
685
690
  }
686
691
  },
@@ -819,49 +824,39 @@ var SchemaGenerator = class _SchemaGenerator extends BaseGenerator {
819
824
  async build(...generators) {
820
825
  const { oas, contentType, include } = this.context;
821
826
  const schemas = getSchemas({ oas, contentType, includes: include });
822
- const promises = Object.entries(schemas).reduce((acc, [name, value]) => {
823
- if (!value) {
824
- return acc;
825
- }
826
- const options = this.#getOptions({ name });
827
- const promiseOperation = this.schema.call(this, name, value, {
828
- ...this.options,
829
- ...options
830
- });
831
- if (promiseOperation) {
832
- acc.push(promiseOperation);
833
- }
834
- generators?.forEach((generator) => {
835
- const tree = this.parse({ schemaObject: value, name });
836
- const promise = generator.schema?.({
837
- instance: this,
838
- schema: {
839
- name,
840
- value,
841
- tree
842
- },
843
- options: {
844
- ...this.options,
845
- ...options
846
- }
847
- });
848
- if (promise) {
849
- acc.push(promise);
850
- }
851
- });
852
- return acc;
853
- }, []);
854
- const files = await Promise.all(promises);
855
- return files.flat().filter(Boolean);
856
- }
857
- /**
858
- * Schema
859
- */
860
- async schema(_name, _object, _options) {
861
- return [];
827
+ const schemaEntries = Object.entries(schemas);
828
+ const generatorLimit = pLimit(1);
829
+ const schemaLimit = pLimit(10);
830
+ const writeTasks = generators.map(
831
+ (generator) => generatorLimit(async () => {
832
+ const schemaTasks = schemaEntries.map(
833
+ ([name, schemaObject]) => schemaLimit(async () => {
834
+ const options = this.#getOptions({ name });
835
+ const tree = this.parse({ name, schemaObject });
836
+ const result = await generator.schema?.({
837
+ instance: this,
838
+ schema: {
839
+ name,
840
+ value: schemaObject,
841
+ tree
842
+ },
843
+ options: {
844
+ ...this.options,
845
+ ...options
846
+ }
847
+ });
848
+ return result ?? [];
849
+ })
850
+ );
851
+ const schemaResults = await Promise.all(schemaTasks);
852
+ return schemaResults.flat();
853
+ })
854
+ );
855
+ const nestedResults = await Promise.all(writeTasks);
856
+ return nestedResults.flat();
862
857
  }
863
858
  };
864
859
 
865
860
  export { SchemaGenerator };
866
- //# sourceMappingURL=chunk-JSR2ZSPP.js.map
867
- //# sourceMappingURL=chunk-JSR2ZSPP.js.map
861
+ //# sourceMappingURL=chunk-P2VXWGXZ.js.map
862
+ //# sourceMappingURL=chunk-P2VXWGXZ.js.map