@kubb/plugin-oas 4.36.1 → 5.0.0-alpha.10

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 (47) hide show
  1. package/dist/{createGenerator-CBXpHeVY.d.ts → createGenerator-Cl7uTbJt.d.ts} +67 -61
  2. package/dist/{generators-CyWd3UXA.cjs → generators-BfTTScuN.cjs} +7 -7
  3. package/dist/generators-BfTTScuN.cjs.map +1 -0
  4. package/dist/{generators-D7C3CXsN.js → generators-BjsINk-u.js} +7 -7
  5. package/dist/generators-BjsINk-u.js.map +1 -0
  6. package/dist/generators.cjs +1 -1
  7. package/dist/generators.d.ts +2 -2
  8. package/dist/generators.js +1 -1
  9. package/dist/hooks.cjs +42 -62
  10. package/dist/hooks.cjs.map +1 -1
  11. package/dist/hooks.d.ts +15 -32
  12. package/dist/hooks.js +45 -64
  13. package/dist/hooks.js.map +1 -1
  14. package/dist/index.cjs +10 -10
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.d.ts +26 -13
  17. package/dist/index.js +11 -11
  18. package/dist/index.js.map +1 -1
  19. package/dist/{requestBody-DIM-iDpM.cjs → requestBody-DyTNWJql.cjs} +45 -34
  20. package/dist/requestBody-DyTNWJql.cjs.map +1 -0
  21. package/dist/{requestBody-mUXoBwsu.js → requestBody-gV_d8sCu.js} +46 -35
  22. package/dist/requestBody-gV_d8sCu.js.map +1 -0
  23. package/dist/utils.cjs +1 -1
  24. package/dist/utils.cjs.map +1 -1
  25. package/dist/utils.d.ts +1 -1
  26. package/dist/utils.js +1 -1
  27. package/dist/utils.js.map +1 -1
  28. package/package.json +8 -8
  29. package/src/OperationGenerator.ts +12 -12
  30. package/src/SchemaGenerator.ts +19 -22
  31. package/src/generators/createGenerator.ts +12 -15
  32. package/src/generators/createReactGenerator.ts +12 -15
  33. package/src/generators/jsonGenerator.ts +4 -4
  34. package/src/generators/types.ts +5 -40
  35. package/src/hooks/index.ts +0 -1
  36. package/src/hooks/useOas.ts +5 -2
  37. package/src/hooks/useOperationManager.ts +34 -34
  38. package/src/hooks/useSchemaManager.ts +16 -15
  39. package/src/index.ts +1 -1
  40. package/src/plugin.ts +6 -6
  41. package/src/types.ts +7 -6
  42. package/src/utils.tsx +53 -35
  43. package/dist/generators-CyWd3UXA.cjs.map +0 -1
  44. package/dist/generators-D7C3CXsN.js.map +0 -1
  45. package/dist/requestBody-DIM-iDpM.cjs.map +0 -1
  46. package/dist/requestBody-mUXoBwsu.js.map +0 -1
  47. package/src/hooks/useRootNode.ts +0 -25
@@ -212,10 +212,10 @@ async function buildOperations(operationsOrNodes, options) {
212
212
  const fabricChild = (0, _kubb_react_fabric.createReactFabric)();
213
213
  if (isBuildOperationsV1Options(options)) {
214
214
  const { generator, Component } = options;
215
- const { pluginManager, oas, mode } = generator.context;
216
- await fabricChild.render(/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.App, {
215
+ const { driver, oas, mode } = generator.context;
216
+ await fabricChild.render(/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.Fabric, {
217
217
  meta: {
218
- pluginManager,
218
+ driver,
219
219
  plugin,
220
220
  mode,
221
221
  oas
@@ -228,17 +228,18 @@ async function buildOperations(operationsOrNodes, options) {
228
228
  })
229
229
  }));
230
230
  } else {
231
- const { Component } = options;
232
- await fabricChild.render(/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.App, {
231
+ const { Component, adapter } = options;
232
+ await fabricChild.render(/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.Fabric, {
233
233
  meta: { plugin },
234
234
  children: /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(Component, {
235
235
  config,
236
+ adapter,
236
237
  nodes: operationsOrNodes,
237
- plugin
238
+ options: options.options
238
239
  })
239
240
  }));
240
241
  }
241
- await fabric.context.fileManager.upsert(...fabricChild.files);
242
+ fabric.context.fileManager.upsert(...fabricChild.files);
242
243
  fabricChild.unmount();
243
244
  }
244
245
  function isBuildOperationV1Options(options) {
@@ -250,10 +251,10 @@ async function buildOperation(operationOrNode, options) {
250
251
  const fabricChild = (0, _kubb_react_fabric.createReactFabric)();
251
252
  if (isBuildOperationV1Options(options)) {
252
253
  const { generator, Component } = options;
253
- const { pluginManager, oas, mode } = generator.context;
254
- await fabricChild.render(/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.App, {
254
+ const { driver, oas, mode } = generator.context;
255
+ await fabricChild.render(/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.Fabric, {
255
256
  meta: {
256
- pluginManager,
257
+ driver,
257
258
  plugin,
258
259
  mode,
259
260
  oas
@@ -266,17 +267,22 @@ async function buildOperation(operationOrNode, options) {
266
267
  })
267
268
  }));
268
269
  } else {
269
- const { Component } = options;
270
- await fabricChild.render(/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.App, {
271
- meta: { plugin },
270
+ const { Component, adapter, driver, mode } = options;
271
+ await fabricChild.render(/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.Fabric, {
272
+ meta: {
273
+ plugin,
274
+ driver,
275
+ mode
276
+ },
272
277
  children: /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(Component, {
273
278
  config,
279
+ adapter,
274
280
  node: operationOrNode,
275
- plugin
281
+ options: options.options
276
282
  })
277
283
  }));
278
284
  }
279
- await fabric.context.fileManager.upsert(...fabricChild.files);
285
+ fabric.context.fileManager.upsert(...fabricChild.files);
280
286
  fabricChild.unmount();
281
287
  }
282
288
  function isBuildSchemaV1Options(options) {
@@ -288,10 +294,10 @@ async function buildSchema(schema, options) {
288
294
  const fabricChild = (0, _kubb_react_fabric.createReactFabric)();
289
295
  if (isBuildSchemaV1Options(options)) {
290
296
  const { generator, Component } = options;
291
- const { pluginManager, oas, mode } = generator.context;
292
- await fabricChild.render(/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.App, {
297
+ const { driver, oas, mode } = generator.context;
298
+ await fabricChild.render(/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.Fabric, {
293
299
  meta: {
294
- pluginManager,
300
+ driver,
295
301
  plugin,
296
302
  mode,
297
303
  oas
@@ -304,17 +310,22 @@ async function buildSchema(schema, options) {
304
310
  })
305
311
  }));
306
312
  } else {
307
- const { Component } = options;
308
- await fabricChild.render(/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.App, {
309
- meta: { plugin },
313
+ const { Component, adapter, driver, mode } = options;
314
+ await fabricChild.render(/* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(_kubb_react_fabric.Fabric, {
315
+ meta: {
316
+ plugin,
317
+ driver,
318
+ mode
319
+ },
310
320
  children: /* @__PURE__ */ (0, _kubb_react_fabric_jsx_runtime.jsx)(Component, {
311
321
  config,
322
+ adapter,
312
323
  node: schema,
313
- plugin
324
+ options: options.options
314
325
  })
315
326
  }));
316
327
  }
317
- await fabric.context.fileManager.upsert(...fabricChild.files);
328
+ fabric.context.fileManager.upsert(...fabricChild.files);
318
329
  fabricChild.unmount();
319
330
  }
320
331
  //#endregion
@@ -599,19 +610,19 @@ var SchemaGenerator = class SchemaGenerator {
599
610
  this.#ensureNameMapping();
600
611
  const originalName = $ref.replace(/.+\//, "");
601
612
  const resolvedName = this.#schemaNameMapping.get($ref) || originalName;
602
- const propertyName = this.context.pluginManager.resolveName({
613
+ const propertyName = this.context.driver.resolveName({
603
614
  name: resolvedName,
604
- pluginKey: this.context.plugin.key,
615
+ pluginName: this.context.plugin.name,
605
616
  type: "function"
606
617
  });
607
- const fileName = this.context.pluginManager.resolveName({
618
+ const fileName = this.context.driver.resolveName({
608
619
  name: resolvedName,
609
- pluginKey: this.context.plugin.key,
620
+ pluginName: this.context.plugin.name,
610
621
  type: "file"
611
622
  });
612
- const file = this.context.pluginManager.getFile({
623
+ const file = this.context.driver.getFile({
613
624
  name: fileName,
614
- pluginKey: this.context.plugin.key,
625
+ pluginName: this.context.plugin.name,
615
626
  extname: ".ts"
616
627
  });
617
628
  this.refs[$ref] = {
@@ -921,9 +932,9 @@ var SchemaGenerator = class SchemaGenerator {
921
932
  options.enumSuffix
922
933
  ];
923
934
  const enumName = useCollisionDetection ? require_getFooter.pascalCase(enumNameParts.join(" ")) : getUniqueName(require_getFooter.pascalCase(enumNameParts.join(" ")), this.options.usedEnumNames || {});
924
- const typeName = this.context.pluginManager.resolveName({
935
+ const typeName = this.context.driver.resolveName({
925
936
  name: enumName,
926
- pluginKey: this.context.plugin.key,
937
+ pluginName: this.context.plugin.name,
927
938
  type: "type"
928
939
  });
929
940
  if (schemaObject.enum.includes(null)) baseItems.push({ keyword: require_SchemaMapper.schemaKeywords.nullable });
@@ -1267,7 +1278,7 @@ var SchemaGenerator = class SchemaGenerator {
1267
1278
  value: schemaObject,
1268
1279
  tree
1269
1280
  }, {
1270
- config: this.context.pluginManager.config,
1281
+ config: this.context.driver.config,
1271
1282
  fabric: this.context.fabric,
1272
1283
  Component: v1Generator.Schema,
1273
1284
  generator: this,
@@ -1282,7 +1293,7 @@ var SchemaGenerator = class SchemaGenerator {
1282
1293
  return [];
1283
1294
  }
1284
1295
  return await v1Generator.schema?.({
1285
- config: this.context.pluginManager.config,
1296
+ config: this.context.driver.config,
1286
1297
  generator: this,
1287
1298
  schema: {
1288
1299
  name,
@@ -1380,4 +1391,4 @@ Object.defineProperty(exports, "withRequiredRequestBodySchema", {
1380
1391
  }
1381
1392
  });
1382
1393
 
1383
- //# sourceMappingURL=requestBody-DIM-iDpM.cjs.map
1394
+ //# sourceMappingURL=requestBody-DyTNWJql.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestBody-DyTNWJql.cjs","names":["#head","#tail","#size","Fabric","#options","#context","#nameMappingInitialized","#schemaNameMapping","#getOptions","#parseCache","#parseSchemaObject","isDeepEqual","isKeyword","schemaKeywords","#getUnknownType","#ensureNameMapping","#getRefAlias","KUBB_INLINE_REF_PREFIX","#getParsedSchemaObject","#getEmptyType","#addDiscriminatorToSchema","#wouldCreateCircularReference","pascalCase","#parseProperties","#doBuild"],"sources":["../../../internals/utils/src/names.ts","../../../internals/utils/src/string.ts","../../../internals/utils/src/object.ts","../../../node_modules/.pnpm/yocto-queue@1.2.2/node_modules/yocto-queue/index.js","../../../node_modules/.pnpm/p-limit@7.3.0/node_modules/p-limit/index.js","../src/utils/getSchemaFactory.ts","../src/utils.tsx","../src/SchemaGenerator.ts","../src/utils/requestBody.ts"],"sourcesContent":["/**\n * Returns a unique name by appending an incrementing numeric suffix when the name has already been used.\n * Mutates `data` in-place as a usage counter so subsequent calls remain consistent.\n *\n * @example\n * const seen: Record<string, number> = {}\n * getUniqueName('Foo', seen) // 'Foo'\n * getUniqueName('Foo', seen) // 'Foo2'\n * getUniqueName('Foo', seen) // 'Foo3'\n */\nexport function getUniqueName(originalName: string, data: Record<string, number>): string {\n let used = data[originalName] || 0\n if (used) {\n data[originalName] = ++used\n originalName += used\n }\n data[originalName] = 1\n return originalName\n}\n\n/**\n * Registers `originalName` in `data` without altering the returned name.\n * Use this when you need to track usage frequency but always emit the original identifier.\n */\nexport function setUniqueName(originalName: string, data: Record<string, number>): string {\n let used = data[originalName] || 0\n if (used) {\n data[originalName] = ++used\n return originalName\n }\n data[originalName] = 1\n return originalName\n}\n","/**\n * Strips a single matching pair of `\"...\"`, `'...'`, or `` `...` `` from both ends of `text`.\n * Returns the string unchanged when no balanced quote pair is found.\n *\n * @example\n * trimQuotes('\"hello\"') // 'hello'\n * trimQuotes('hello') // 'hello'\n */\nexport function trimQuotes(text: string): string {\n if (text.length >= 2) {\n const first = text[0]\n const last = text[text.length - 1]\n if ((first === '\"' && last === '\"') || (first === \"'\" && last === \"'\") || (first === '`' && last === '`')) {\n return text.slice(1, -1)\n }\n }\n return text\n}\n\n/**\n * Escapes characters that are not allowed inside JS string literals.\n * Handles quotes, backslashes, and Unicode line terminators (U+2028 / U+2029).\n *\n * @see http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4\n */\nexport function jsStringEscape(input: unknown): string {\n return `${input}`.replace(/[\"'\\\\\\n\\r\\u2028\\u2029]/g, (character) => {\n switch (character) {\n case '\"':\n case \"'\":\n case '\\\\':\n return `\\\\${character}`\n case '\\n':\n return '\\\\n'\n case '\\r':\n return '\\\\r'\n case '\\u2028':\n return '\\\\u2028'\n case '\\u2029':\n return '\\\\u2029'\n default:\n return ''\n }\n })\n}\n\n/**\n * Returns a masked version of a string, showing only the first and last few characters.\n * Useful for logging sensitive values (tokens, keys) without exposing the full value.\n *\n * @example\n * maskString('KUBB_STUDIO-abc123-xyz789') // 'KUBB_STUDIO-…789'\n */\nexport function maskString(value: string, start = 8, end = 4): string {\n if (value.length <= start + end) return value\n return `${value.slice(0, start)}…${value.slice(-end)}`\n}\n","import { trimQuotes } from './string.ts'\n\n/**\n * Serializes a primitive value to a JSON string literal, stripping any surrounding quote characters first.\n *\n * @example\n * stringify('hello') // '\"hello\"'\n * stringify('\"hello\"') // '\"hello\"'\n */\nexport function stringify(value: string | number | boolean | undefined): string {\n if (value === undefined || value === null) return '\"\"'\n return JSON.stringify(trimQuotes(value.toString()))\n}\n\n/**\n * Converts a plain object into a multiline key-value string suitable for embedding in generated code.\n * Nested objects are recursively stringified with indentation.\n *\n * @example\n * stringifyObject({ foo: 'bar', nested: { a: 1 } })\n * // 'foo: bar,\\nnested: {\\n a: 1\\n }'\n */\nexport function stringifyObject(value: Record<string, unknown>): string {\n const items = Object.entries(value)\n .map(([key, val]) => {\n if (val !== null && typeof val === 'object') {\n return `${key}: {\\n ${stringifyObject(val as Record<string, unknown>)}\\n }`\n }\n return `${key}: ${val}`\n })\n .filter(Boolean)\n return items.join(',\\n')\n}\n\n/**\n * Serializes plugin options for safe JSON transport.\n * Strips functions, symbols, and `undefined` values recursively.\n */\nexport function serializePluginOptions<TOptions extends object>(options: TOptions): TOptions {\n if (options === null || options === undefined) return {} as TOptions\n if (typeof options !== 'object') return options\n if (Array.isArray(options)) return options.map(serializePluginOptions) as unknown as TOptions\n\n const serialized: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(options)) {\n if (typeof value === 'function' || typeof value === 'symbol' || value === undefined) continue\n serialized[key] = value !== null && typeof value === 'object' ? serializePluginOptions(value as object) : value\n }\n return serialized as TOptions\n}\n\n/**\n * Converts a dot-notation path or string array into an optional-chaining accessor expression.\n *\n * @example\n * getNestedAccessor('pagination.next.id', 'lastPage')\n * // → \"lastPage?.['pagination']?.['next']?.['id']\"\n */\nexport function getNestedAccessor(param: string | string[], accessor: string): string | undefined {\n const parts = Array.isArray(param) ? param : param.split('.')\n if (parts.length === 0 || (parts.length === 1 && parts[0] === '')) return undefined\n return `${accessor}?.['${`${parts.join(\"']?.['\")}']`}`\n}\n","/*\nHow it works:\n`this.#head` is an instance of `Node` which keeps track of its current value and nests another instance of `Node` that keeps the value that comes after it. When a value is provided to `.enqueue()`, the code needs to iterate through `this.#head`, going deeper and deeper to find the last value. However, iterating through every single item is slow. This problem is solved by saving a reference to the last value as `this.#tail` so that it can reference it to add a new value.\n*/\n\nclass Node {\n\tvalue;\n\tnext;\n\n\tconstructor(value) {\n\t\tthis.value = value;\n\t}\n}\n\nexport default class Queue {\n\t#head;\n\t#tail;\n\t#size;\n\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\n\tenqueue(value) {\n\t\tconst node = new Node(value);\n\n\t\tif (this.#head) {\n\t\t\tthis.#tail.next = node;\n\t\t\tthis.#tail = node;\n\t\t} else {\n\t\t\tthis.#head = node;\n\t\t\tthis.#tail = node;\n\t\t}\n\n\t\tthis.#size++;\n\t}\n\n\tdequeue() {\n\t\tconst current = this.#head;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#head = this.#head.next;\n\t\tthis.#size--;\n\n\t\t// Clean up tail reference when queue becomes empty\n\t\tif (!this.#head) {\n\t\t\tthis.#tail = undefined;\n\t\t}\n\n\t\treturn current.value;\n\t}\n\n\tpeek() {\n\t\tif (!this.#head) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.#head.value;\n\n\t\t// TODO: Node.js 18.\n\t\t// return this.#head?.value;\n\t}\n\n\tclear() {\n\t\tthis.#head = undefined;\n\t\tthis.#tail = undefined;\n\t\tthis.#size = 0;\n\t}\n\n\tget size() {\n\t\treturn this.#size;\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tlet current = this.#head;\n\n\t\twhile (current) {\n\t\t\tyield current.value;\n\t\t\tcurrent = current.next;\n\t\t}\n\t}\n\n\t* drain() {\n\t\twhile (this.#head) {\n\t\t\tyield this.dequeue();\n\t\t}\n\t}\n}\n","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tlet rejectOnClear = false;\n\n\tif (typeof concurrency === 'object') {\n\t\t({concurrency, rejectOnClear = false} = concurrency);\n\t}\n\n\tvalidateConcurrency(concurrency);\n\n\tif (typeof rejectOnClear !== 'boolean') {\n\t\tthrow new TypeError('Expected `rejectOnClear` to be a boolean');\n\t}\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst resumeNext = () => {\n\t\t// Process the next queued function if we're under the concurrency limit\n\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\tactiveCount++;\n\t\t\tqueue.dequeue().run();\n\t\t}\n\t};\n\n\tconst next = () => {\n\t\tactiveCount--;\n\t\tresumeNext();\n\t};\n\n\tconst run = async (function_, resolve, arguments_) => {\n\t\t// Execute the function and capture the result promise\n\t\tconst result = (async () => function_(...arguments_))();\n\n\t\t// Resolve immediately with the promise (don't wait for completion)\n\t\tresolve(result);\n\n\t\t// Wait for the function to complete (success or failure)\n\t\t// We catch errors here to prevent unhandled rejections,\n\t\t// but the original promise rejection is preserved for the caller\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\t// Decrement active count and process next queued function\n\t\tnext();\n\t};\n\n\tconst enqueue = (function_, resolve, reject, arguments_) => {\n\t\tconst queueItem = {reject};\n\n\t\t// Queue the internal resolve function instead of the run function\n\t\t// to preserve the asynchronous execution context.\n\t\tnew Promise(internalResolve => { // eslint-disable-line promise/param-names\n\t\t\tqueueItem.run = internalResolve;\n\t\t\tqueue.enqueue(queueItem);\n\t\t}).then(run.bind(undefined, function_, resolve, arguments_)); // eslint-disable-line promise/prefer-await-to-then\n\n\t\t// Start processing immediately if we haven't reached the concurrency limit\n\t\tif (activeCount < concurrency) {\n\t\t\tresumeNext();\n\t\t}\n\t};\n\n\tconst generator = (function_, ...arguments_) => new Promise((resolve, reject) => {\n\t\tenqueue(function_, resolve, reject, arguments_);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue() {\n\t\t\t\tif (!rejectOnClear) {\n\t\t\t\t\tqueue.clear();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst abortError = AbortSignal.abort().reason;\n\n\t\t\t\twhile (queue.size > 0) {\n\t\t\t\t\tqueue.dequeue().reject(abortError);\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\tconcurrency: {\n\t\t\tget: () => concurrency,\n\n\t\t\tset(newConcurrency) {\n\t\t\t\tvalidateConcurrency(newConcurrency);\n\t\t\t\tconcurrency = newConcurrency;\n\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\t// eslint-disable-next-line no-unmodified-loop-condition\n\t\t\t\t\twhile (activeCount < concurrency && queue.size > 0) {\n\t\t\t\t\t\tresumeNext();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t\tmap: {\n\t\t\tasync value(iterable, function_) {\n\t\t\t\tconst promises = Array.from(iterable, (value, index) => this(function_, value, index));\n\t\t\t\treturn Promise.all(promises);\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n\nexport function limitFunction(function_, options) {\n\tconst limit = pLimit(options);\n\n\treturn (...arguments_) => limit(() => function_(...arguments_));\n}\n\nfunction validateConcurrency(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n}\n","import type { Oas, OpenAPIV3, OpenAPIV3_1, SchemaObject } from '@kubb/oas'\nimport { isOpenApiV3_1Document } from '@kubb/oas'\n\n/**\n * Make it possible to narrow down the schema based on a specific version(3 or 3.1)\n */\ntype SchemaResult<TWithRef extends boolean = false> =\n | {\n schemaObject:\n | ((TWithRef extends true ? OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject : OpenAPIV3.SchemaObject) & {\n nullable?: boolean\n 'x-nullable'?: boolean\n })\n | null\n version: '3.0'\n }\n | {\n schemaObject:\n | ((TWithRef extends true ? OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject : OpenAPIV3_1.SchemaObject) & {\n nullable?: boolean\n 'x-nullable'?: boolean\n })\n | null\n version: '3.1'\n }\n\n/**\n * Creates a factory function that generates a versioned OpenAPI schema result.\n *\n * The returned function accepts an optional schema object and produces a {@link SchemaResult} containing the dereferenced schema and the OpenAPI version ('3.0' or '3.1').\n *\n * @returns A function that takes an optional schema and returns a versioned schema result.\n */\nexport function getSchemaFactory<TWithRef extends boolean = false>(oas: Oas): (schema: SchemaObject | null) => SchemaResult<TWithRef> {\n return (schema: SchemaObject | null) => {\n const version = isOpenApiV3_1Document(oas.api) ? '3.1' : '3.0'\n\n return {\n schemaObject: oas.dereferenceWithRef(schema),\n version,\n } as SchemaResult<TWithRef>\n }\n}\n","import type { OperationNode, SchemaNode } from '@kubb/ast/types'\nimport type { Adapter, Config, Plugin, PluginDriver, PluginFactoryOptions, ReactGeneratorV2 } from '@kubb/core'\nimport type { KubbFile } from '@kubb/fabric-core/types'\nimport type { Operation, SchemaObject } from '@kubb/oas'\nimport { createReactFabric, Fabric } from '@kubb/react-fabric'\nimport type { Fabric as FabricType } from '@kubb/react-fabric/types'\nimport type { ReactGenerator } from './generators/createReactGenerator.ts'\nimport type { OperationGenerator } from './OperationGenerator.ts'\nimport type { SchemaGenerator, SchemaGeneratorOptions } from './SchemaGenerator.ts'\nimport type { Schema } from './SchemaMapper.ts'\n\ntype BuildOperationsBaseOptions<TOptions extends PluginFactoryOptions> = {\n config: Config\n fabric: FabricType\n plugin: Plugin<TOptions>\n}\n\ntype BuildOperationsV1Options<TOptions extends PluginFactoryOptions> = BuildOperationsBaseOptions<TOptions> & {\n version?: '1'\n Component: ReactGenerator<TOptions>['Operations']\n generator: Omit<OperationGenerator<TOptions>, 'build'>\n}\n\ntype BuildOperationsV2Options<TOptions extends PluginFactoryOptions> = BuildOperationsBaseOptions<TOptions> & {\n version: '2'\n Component: ReactGeneratorV2<TOptions>['Operations'] | undefined\n adapter: Adapter\n driver: PluginDriver\n mode: KubbFile.Mode\n options: TOptions['resolvedOptions']\n}\n\nfunction isBuildOperationsV1Options<TOptions extends PluginFactoryOptions>(\n options: BuildOperationsV1Options<TOptions> | BuildOperationsV2Options<TOptions>,\n): options is BuildOperationsV1Options<TOptions> {\n return (options.version ?? '1') === '1'\n}\n\nexport async function buildOperations<TOptions extends PluginFactoryOptions>(\n operations: Array<Operation>,\n options: BuildOperationsV1Options<TOptions>,\n): Promise<void>\nexport async function buildOperations<TOptions extends PluginFactoryOptions>(\n nodes: Array<OperationNode>,\n options: BuildOperationsV2Options<TOptions>,\n): Promise<void>\nexport async function buildOperations<TOptions extends PluginFactoryOptions>(\n operationsOrNodes: Array<Operation> | Array<OperationNode>,\n options: BuildOperationsV1Options<TOptions> | BuildOperationsV2Options<TOptions>,\n): Promise<void> {\n const { config, fabric, plugin } = options\n\n if (!options.Component) {\n return undefined\n }\n\n const fabricChild = createReactFabric()\n\n if (isBuildOperationsV1Options(options)) {\n const { generator, Component } = options\n const { driver, oas, mode } = generator.context\n\n await fabricChild.render(\n <Fabric meta={{ driver, plugin, mode, oas }}>\n <Component config={config} operations={operationsOrNodes as Array<Operation>} generator={generator} plugin={plugin} />\n </Fabric>,\n )\n } else {\n const { Component, adapter } = options\n\n await fabricChild.render(\n <Fabric meta={{ plugin }}>\n <Component config={config} adapter={adapter} nodes={operationsOrNodes as Array<OperationNode>} options={options.options} />\n </Fabric>,\n )\n }\n\n fabric.context.fileManager.upsert(...fabricChild.files)\n fabricChild.unmount()\n}\n\ntype BuildOperationBaseOptions<TOptions extends PluginFactoryOptions> = {\n config: Config\n fabric: FabricType\n plugin: Plugin<TOptions>\n}\n\ntype BuildOperationV1Options<TOptions extends PluginFactoryOptions> = BuildOperationBaseOptions<TOptions> & {\n version?: '1'\n Component: ReactGenerator<TOptions>['Operation']\n generator: Omit<OperationGenerator<TOptions>, 'build'>\n}\n\ntype BuildOperationV2Options<TOptions extends PluginFactoryOptions> = BuildOperationBaseOptions<TOptions> & {\n version: '2'\n Component: ReactGeneratorV2<TOptions>['Operation'] | undefined\n adapter: Adapter\n driver: PluginDriver\n mode: KubbFile.Mode\n options: TOptions['resolvedOptions']\n}\n\nfunction isBuildOperationV1Options<TOptions extends PluginFactoryOptions>(\n options: BuildOperationV1Options<TOptions> | BuildOperationV2Options<TOptions>,\n): options is BuildOperationV1Options<TOptions> {\n return (options.version ?? '1') === '1'\n}\n\nexport async function buildOperation<TOptions extends PluginFactoryOptions>(operation: Operation, options: BuildOperationV1Options<TOptions>): Promise<void>\nexport async function buildOperation<TOptions extends PluginFactoryOptions>(node: OperationNode, options: BuildOperationV2Options<TOptions>): Promise<void>\nexport async function buildOperation<TOptions extends PluginFactoryOptions>(\n operationOrNode: Operation | OperationNode,\n options: BuildOperationV1Options<TOptions> | BuildOperationV2Options<TOptions>,\n): Promise<void> {\n const { config, fabric, plugin } = options\n\n if (!options.Component) {\n return undefined\n }\n\n const fabricChild = createReactFabric()\n\n if (isBuildOperationV1Options(options)) {\n const { generator, Component } = options\n const { driver, oas, mode } = generator.context\n\n await fabricChild.render(\n <Fabric meta={{ driver, plugin, mode, oas }}>\n <Component config={config} operation={operationOrNode as Operation} plugin={plugin} generator={generator} />\n </Fabric>,\n )\n } else {\n const { Component, adapter, driver, mode } = options\n\n await fabricChild.render(\n <Fabric meta={{ plugin, driver, mode }}>\n <Component config={config} adapter={adapter} node={operationOrNode as OperationNode} options={options.options} />\n </Fabric>,\n )\n }\n\n fabric.context.fileManager.upsert(...fabricChild.files)\n fabricChild.unmount()\n}\n\ntype BuildSchemaBaseOptions<TOptions extends PluginFactoryOptions> = {\n config: Config\n fabric: FabricType\n plugin: Plugin<TOptions>\n}\n\ntype BuildSchemaV1Options<TOptions extends PluginFactoryOptions> = BuildSchemaBaseOptions<TOptions> & {\n version?: '1'\n Component: ReactGenerator<TOptions>['Schema']\n generator: Omit<SchemaGenerator<SchemaGeneratorOptions, TOptions>, 'build'>\n}\n\ntype BuildSchemaV2Options<TOptions extends PluginFactoryOptions> = BuildSchemaBaseOptions<TOptions> & {\n version: '2'\n Component: ReactGeneratorV2<TOptions>['Schema'] | undefined\n adapter: Adapter\n driver: PluginDriver\n mode: KubbFile.Mode\n options: TOptions['resolvedOptions']\n}\n\nfunction isBuildSchemaV1Options<TOptions extends PluginFactoryOptions>(\n options: BuildSchemaV1Options<TOptions> | BuildSchemaV2Options<TOptions>,\n): options is BuildSchemaV1Options<TOptions> {\n return (options.version ?? '1') === '1'\n}\n\nexport async function buildSchema<TOptions extends PluginFactoryOptions>(\n schema: { name: string; tree: Array<Schema>; value: SchemaObject },\n options: BuildSchemaV1Options<TOptions>,\n): Promise<void>\nexport async function buildSchema<TOptions extends PluginFactoryOptions>(schema: SchemaNode, options: BuildSchemaV2Options<TOptions>): Promise<void>\nexport async function buildSchema<TOptions extends PluginFactoryOptions>(\n schema: { name: string; tree: Array<Schema>; value: SchemaObject } | SchemaNode,\n options: BuildSchemaV1Options<TOptions> | BuildSchemaV2Options<TOptions>,\n): Promise<void> {\n const { config, fabric, plugin } = options\n\n if (!options.Component) {\n return undefined\n }\n\n const fabricChild = createReactFabric()\n\n if (isBuildSchemaV1Options(options)) {\n const { generator, Component } = options\n const { driver, oas, mode } = generator.context\n\n await fabricChild.render(\n <Fabric meta={{ driver, plugin, mode, oas }}>\n <Component config={config} schema={schema as { name: string; tree: Array<Schema>; value: SchemaObject }} plugin={plugin} generator={generator} />\n </Fabric>,\n )\n } else {\n const { Component, adapter, driver, mode } = options\n\n await fabricChild.render(\n <Fabric meta={{ plugin, driver, mode }}>\n <Component config={config} adapter={adapter} node={schema as SchemaNode} options={options.options} />\n </Fabric>,\n )\n }\n\n fabric.context.fileManager.upsert(...fabricChild.files)\n\n fabricChild.unmount()\n}\n","import type { AsyncEventEmitter } from '@internals/utils'\nimport { getUniqueName, pascalCase, stringify } from '@internals/utils'\nimport type { FileMetaBase, KubbEvents, Plugin, PluginDriver, PluginFactoryOptions, ResolveNameParams } from '@kubb/core'\nimport type { Fabric as FabricType, KubbFile } from '@kubb/fabric-core/types'\nimport type { contentType, Oas, OasTypes, OpenAPIV3, SchemaObject } from '@kubb/oas'\nimport { isDiscriminator, isNullable, isReference, KUBB_INLINE_REF_PREFIX } from '@kubb/oas'\nimport pLimit from 'p-limit'\nimport { isDeepEqual, isNumber, uniqueWith } from 'remeda'\nimport type { CoreGenerator } from './generators/createGenerator.ts'\nimport type { ReactGenerator } from './generators/createReactGenerator.ts'\nimport type { Generator } from './generators/types.ts'\nimport { isKeyword, type Schema, type SchemaKeywordMapper, schemaKeywords } from './SchemaMapper.ts'\nimport type { OperationSchema, Override, Refs } from './types.ts'\nimport { getSchemaFactory } from './utils/getSchemaFactory.ts'\nimport { buildSchema } from './utils.tsx'\n\nexport type GetSchemaGeneratorOptions<T extends SchemaGenerator<any, any, any>> = T extends SchemaGenerator<infer Options, any, any> ? Options : never\n\nexport type SchemaMethodResult<TFileMeta extends FileMetaBase> = Promise<KubbFile.File<TFileMeta> | Array<KubbFile.File<TFileMeta>> | null>\n\n/** Max concurrent generator tasks (across generators). */\nconst GENERATOR_CONCURRENCY = 3\n/** Max concurrent schema parsing tasks (per generator). */\nconst SCHEMA_CONCURRENCY = 30\n\ntype Context<TOptions, TPluginOptions extends PluginFactoryOptions> = {\n fabric: FabricType\n oas: Oas\n driver: PluginDriver\n events?: AsyncEventEmitter<KubbEvents>\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 integerType?: 'number' | 'bigint'\n unknownType: 'any' | 'unknown' | 'void'\n emptySchemaType: 'any' | 'unknown' | 'void'\n enumType?: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal' | 'inlineLiteral'\n enumSuffix?: string\n /**\n * @deprecated Will be removed in v5. Use `collisionDetection: true` instead to prevent enum name collisions.\n * When `collisionDetection` is enabled, the rootName-based approach eliminates the need for numeric suffixes.\n * @internal\n */\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(propertyName) and return Schema array.\n * Return `undefined` to fall through to default schema generation.\n * @beta\n */\n schema?: (schemaProps: SchemaProps, defaultSchemas: Schema[]) => Array<Schema> | undefined\n }\n}\n\nexport type SchemaGeneratorBuildOptions = Omit<OperationSchema, 'name' | 'schema'>\n\ntype SchemaProps = {\n schema: SchemaObject | null\n name: string | null\n parentName: string | null\n rootName?: string | null\n}\n\nexport class SchemaGenerator<\n TOptions extends SchemaGeneratorOptions = SchemaGeneratorOptions,\n TPluginOptions extends PluginFactoryOptions = PluginFactoryOptions,\n TFileMeta extends FileMetaBase = FileMetaBase,\n> {\n #options: TOptions\n #context: Context<TOptions, TPluginOptions>\n\n constructor(options: TOptions, context: Context<TOptions, TPluginOptions>) {\n this.#options = options\n this.#context = context\n }\n\n get options(): TOptions {\n return this.#options\n }\n\n set options(options: TOptions) {\n this.#options = { ...this.#options, ...options }\n }\n\n get context(): Context<TOptions, TPluginOptions> {\n return this.#context\n }\n // Collect the types of all referenced schemas, so we can export them later\n refs: Refs = {}\n\n // Map from original component paths to resolved schema names (after collision resolution)\n // e.g., { '#/components/schemas/Order': 'OrderSchema', '#/components/responses/Product': 'ProductResponse' }\n #schemaNameMapping: Map<string, string> = new Map()\n\n // Flag to track if nameMapping has been initialized\n #nameMappingInitialized = false\n\n // Cache for parsed schemas to avoid redundant parsing\n // Using WeakMap for automatic garbage collection when schemas are no longer referenced\n #parseCache: Map<string, Schema[]> = new Map()\n\n /**\n * Ensure the name mapping is initialized (lazy initialization)\n */\n #ensureNameMapping() {\n if (this.#nameMappingInitialized) {\n return\n }\n\n const { oas, contentType, include } = this.context\n const { nameMapping } = oas.getSchemas({ contentType, includes: include })\n this.#schemaNameMapping = nameMapping\n this.#nameMappingInitialized = true\n }\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.name)\n\n // Only cache when schema is a simple object (not null/undefined)\n // and doesn't have transformers that could affect the result\n let shouldCache = props.schema && typeof props.schema === 'object' && !options.transformers?.schema\n let cacheKey = ''\n\n if (shouldCache) {\n // Create cache key using stable JSON stringify for correctness\n // Cache hit rate is still high for identical schemas across operations\n try {\n cacheKey = JSON.stringify({\n schema: props.schema,\n name: props.name,\n parentName: props.parentName,\n rootName: props.rootName,\n })\n\n const cached = this.#parseCache.get(cacheKey)\n if (cached) {\n return cached\n }\n } catch {\n // If JSON.stringify fails (circular refs), skip caching\n shouldCache = false\n }\n }\n\n const defaultSchemas = this.#parseSchemaObject(props)\n const schemas = options.transformers?.schema?.(props, defaultSchemas) || defaultSchemas || []\n\n const result = uniqueWith(schemas, isDeepEqual)\n\n // Cache the result only if we created a valid cache key\n if (shouldCache && cacheKey) {\n this.#parseCache.set(cacheKey, result)\n }\n\n return result\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 if (schema.args?.patternProperties) {\n Object.values(schema.args.patternProperties).forEach((entrySchemas) => {\n entrySchemas.forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n })\n }\n }\n\n if (isKeyword(schema, schemaKeywords.array)) {\n schema.args.items.forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n\n if (isKeyword(schema, schemaKeywords.and)) {\n schema.args.forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n\n if (isKeyword(schema, schemaKeywords.tuple)) {\n schema.args.items.forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n\n if (isKeyword(schema, schemaKeywords.union)) {\n schema.args.forEach((entrySchema) => {\n foundItems.push(...SchemaGenerator.deepSearch<T>([entrySchema], keyword))\n })\n }\n })\n\n return foundItems\n }\n\n static find<T extends keyof SchemaKeywordMapper>(tree: Schema[] | undefined, keyword: T): SchemaKeywordMapper[T] | undefined {\n let foundItem: SchemaKeywordMapper[T] | undefined\n\n tree?.forEach((schema) => {\n if (!foundItem && schema.keyword === keyword) {\n foundItem = schema as SchemaKeywordMapper[T]\n }\n\n if (isKeyword(schema, schemaKeywords.array)) {\n schema.args.items.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n\n if (isKeyword(schema, schemaKeywords.and)) {\n schema.args.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n\n if (isKeyword(schema, schemaKeywords.tuple)) {\n schema.args.items.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n\n if (isKeyword(schema, schemaKeywords.union)) {\n schema.args.forEach((entrySchema) => {\n if (!foundItem) {\n foundItem = SchemaGenerator.find<T>([entrySchema], keyword)\n }\n })\n }\n })\n\n return foundItem\n }\n\n static combineObjects(tree: Schema[] | undefined): Schema[] {\n if (!tree) {\n return []\n }\n\n return tree.map((schema) => {\n if (!isKeyword(schema, schemaKeywords.and)) {\n return schema\n }\n\n let mergedProperties: Record<string, Schema[]> | null = null\n let mergedAdditionalProps: Schema[] = []\n\n const newArgs: Schema[] = []\n\n for (const subSchema of schema.args) {\n if (isKeyword(subSchema, schemaKeywords.object)) {\n const { properties = {}, additionalProperties = [] } = subSchema.args ?? {}\n\n if (!mergedProperties) {\n mergedProperties = {}\n }\n\n for (const [key, value] of Object.entries(properties)) {\n mergedProperties[key] = value\n }\n\n if (additionalProperties.length > 0) {\n mergedAdditionalProps = additionalProperties\n }\n } else {\n newArgs.push(subSchema)\n }\n }\n\n if (mergedProperties) {\n newArgs.push({\n keyword: schemaKeywords.object,\n args: {\n properties: mergedProperties,\n additionalProperties: mergedAdditionalProps,\n },\n })\n }\n\n return {\n keyword: schemaKeywords.and,\n args: newArgs,\n }\n })\n }\n\n #getOptions(name: string | null): 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(name: string | null): string {\n const options = this.#getOptions(name)\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(name: string | null): string {\n const options = this.#getOptions(name)\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(name: string | null, schemaObject: SchemaObject, rootName?: string | null): Schema[] {\n const properties = schemaObject?.properties || {}\n const additionalProperties = schemaObject?.additionalProperties\n const required = schemaObject?.required\n const patternProperties = schemaObject && 'patternProperties' in schemaObject ? schemaObject.patternProperties : undefined\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 = isNullable(propertySchema)\n\n validationFunctions.push(...this.parse({ schema: propertySchema, name: propertyName, parentName: name, rootName: rootName || 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(name) }]\n : this.parse({ schema: additionalProperties as SchemaObject, name: null, parentName: name, rootName: rootName || name })\n }\n\n let patternPropertiesSchemas: Record<string, Schema[]> = {}\n\n if (patternProperties && typeof patternProperties === 'object') {\n patternPropertiesSchemas = Object.entries(patternProperties).reduce((acc, [pattern, patternSchema]) => {\n const schemas =\n patternSchema === true || !Object.keys(patternSchema as object).length\n ? [{ keyword: this.#getUnknownType(name) }]\n : this.parse({ schema: patternSchema, name: null, parentName: name, rootName: rootName || name })\n\n return {\n ...acc,\n [pattern]: schemas,\n }\n }, {})\n }\n\n const args: {\n properties: typeof propertiesSchemas\n additionalProperties: typeof additionalPropertiesSchemas\n patternProperties?: typeof patternPropertiesSchemas\n } = {\n properties: propertiesSchemas,\n additionalProperties: additionalPropertiesSchemas,\n }\n\n if (Object.keys(patternPropertiesSchemas).length > 0) {\n args['patternProperties'] = patternPropertiesSchemas\n }\n\n return [\n {\n keyword: schemaKeywords.object,\n args,\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 | null): 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 // Handle non-component internal refs (e.g., #/paths/... created by the bundler when deduplicating\n // external schemas referenced multiple times). These path-based refs produce misleading names\n // from their last path segment (e.g., \"#/.../schema/items\" → \"items\" → \"itemsSchema\").\n // Resolve them inline instead of registering them as named schema references.\n if ($ref.startsWith('#') && !$ref.startsWith('#/components/')) {\n try {\n const inlineSchema = this.context.oas.get<SchemaObject>($ref)\n if (inlineSchema && !isReference(inlineSchema)) {\n return this.parse({ schema: inlineSchema, name, parentName: null, rootName: null })\n }\n } catch {\n // If lookup fails, fall through to standard processing\n }\n }\n\n // Ensure name mapping is initialized before resolving names\n this.#ensureNameMapping()\n\n const originalName = $ref.replace(/.+\\//, '')\n // Use the full $ref path to look up the collision-resolved name\n const resolvedName = this.#schemaNameMapping.get($ref) || originalName\n\n const propertyName = this.context.driver.resolveName({\n name: resolvedName,\n pluginName: this.context.plugin.name,\n type: 'function',\n })\n\n const fileName = this.context.driver.resolveName({\n name: resolvedName,\n pluginName: this.context.plugin.name,\n type: 'file',\n })\n const file = this.context.driver.getFile({\n name: fileName,\n pluginName: this.context.plugin.name,\n extname: '.ts',\n })\n\n this.refs[$ref] = {\n propertyName,\n originalName: resolvedName,\n path: file.path,\n }\n\n return this.#getRefAlias(schemaObject, name)\n }\n\n #getParsedSchemaObject(schema: SchemaObject | null) {\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 // If the discriminator property is an extension property (starts with x-),\n // its metadata and not an actual schema property, so we can't add constraints for it.\n // In this case, return the union as-is without adding discriminator constraints.\n if (discriminator.propertyName.startsWith('x-')) {\n return schema\n }\n\n const objectPropertySchema = SchemaGenerator.find(this.parse({ schema: schemaObject, name: null, parentName: null, rootName: null }), schemaKeywords.object)\n\n return {\n ...schema,\n args: Object.entries(discriminator.mapping || {})\n .map(([key, value]) => {\n let arg: Schema | undefined\n\n // Check if this is a synthetic ref for inline schemas (e.g., #kubb-inline-0)\n if (value.startsWith(KUBB_INLINE_REF_PREFIX)) {\n const index = Number.parseInt(value.replace(KUBB_INLINE_REF_PREFIX, ''), 10)\n // Validate index is within bounds\n if (!Number.isNaN(index) && index >= 0 && index < schema.args.length) {\n arg = schema.args[index]\n }\n } else {\n // Regular ref - find by $ref value\n arg = schema.args.find((item) => isKeyword(item, schemaKeywords.ref) && item.args.$ref === value)\n }\n\n // Skip discriminator mappings that don't have a corresponding schema in the oneOf/anyOf\n if (!arg) {\n return undefined\n }\n return {\n keyword: schemaKeywords.and,\n args: [\n arg,\n {\n keyword: schemaKeywords.object,\n args: {\n properties: {\n ...(objectPropertySchema?.args?.properties || {}),\n [discriminator.propertyName]: [\n {\n keyword: schemaKeywords.const,\n args: {\n name: key,\n format: 'string',\n value: key,\n },\n },\n //enum and literal will conflict\n ...(objectPropertySchema?.args?.properties[discriminator.propertyName] || []),\n ].filter((item) => !isKeyword(item, schemaKeywords.enum)),\n },\n },\n },\n ],\n }\n })\n .filter(Boolean) as SchemaKeywordMapper['union']['args'],\n }\n }\n\n /**\n * Checks if an allOf item reference would create a circular reference.\n * This happens when a child schema extends a discriminator parent via allOf,\n * and the parent has a oneOf/anyOf that references or maps to the child.\n *\n * Without oneOf/anyOf, the discriminator is just for documentation/validation\n * purposes and doesn't create a TypeScript union type that would be circular.\n */\n #wouldCreateCircularReference(item: unknown, childSchemaName: string | null): boolean {\n if (!isReference(item) || !childSchemaName) {\n return false\n }\n\n const dereferencedSchema = this.context.oas.dereferenceWithRef(item)\n\n if (dereferencedSchema && isDiscriminator(dereferencedSchema)) {\n // Only check for circular references if parent has oneOf/anyOf\n // Without oneOf/anyOf, the discriminator doesn't create a union type\n const parentOneOf = dereferencedSchema.oneOf || dereferencedSchema.anyOf\n if (!parentOneOf) {\n return false\n }\n\n const childRef = `#/components/schemas/${childSchemaName}`\n\n const inOneOf = parentOneOf.some((oneOfItem) => {\n return isReference(oneOfItem) && oneOfItem.$ref === childRef\n })\n if (inOneOf) {\n return true\n }\n\n const mapping = dereferencedSchema.discriminator.mapping || {}\n const inMapping = Object.values(mapping).some((value) => value === childRef)\n\n if (inMapping) {\n return true\n }\n }\n return false\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: _schemaObject, name, parentName, rootName }: SchemaProps): Schema[] {\n const normalizedSchema = this.context.oas.flattenSchema(_schemaObject)\n\n const { schemaObject, version } = this.#getParsedSchemaObject(normalizedSchema)\n\n const options = this.#getOptions(name)\n const emptyType = this.#getEmptyType(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 SchemaKeywordMapper['schema']['args']['type'],\n format: schemaObject.format,\n },\n },\n ]\n const min = schemaObject.minimum ?? schemaObject.minLength ?? schemaObject.minItems ?? undefined\n const max = schemaObject.maximum ?? schemaObject.maxLength ?? schemaObject.maxItems ?? undefined\n\n const exclusiveMinimum = schemaObject.exclusiveMinimum\n const exclusiveMaximum = schemaObject.exclusiveMaximum\n\n const nullable = isNullable(schemaObject)\n const defaultNullAndNullable = schemaObject.default === null && nullable\n\n if (schemaObject.default !== undefined && !defaultNullAndNullable && !Array.isArray(schemaObject.default)) {\n if (typeof schemaObject.default === 'string') {\n baseItems.push({\n keyword: schemaKeywords.default,\n args: stringify(schemaObject.default),\n })\n } else if (typeof schemaObject.default === 'boolean') {\n baseItems.push({\n keyword: schemaKeywords.default,\n args: schemaObject.default ?? false,\n })\n } else {\n baseItems.push({\n keyword: schemaKeywords.default,\n args: schemaObject.default,\n })\n }\n }\n\n if (schemaObject.deprecated) {\n baseItems.push({\n keyword: schemaKeywords.deprecated,\n })\n }\n\n if (schemaObject.description) {\n baseItems.push({\n keyword: schemaKeywords.describe,\n args: schemaObject.description,\n })\n }\n\n if (max !== undefined) {\n if (exclusiveMaximum) {\n baseItems.unshift({ keyword: schemaKeywords.exclusiveMaximum, args: max })\n } else {\n baseItems.unshift({ keyword: schemaKeywords.max, args: max })\n }\n }\n\n if (min !== undefined) {\n if (exclusiveMinimum) {\n baseItems.unshift({ keyword: schemaKeywords.exclusiveMinimum, args: min })\n } else {\n baseItems.unshift({ keyword: schemaKeywords.min, args: min })\n }\n }\n\n if (typeof exclusiveMaximum === 'number') {\n //OPENAPI v3.1.0: https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0\n baseItems.unshift({ keyword: schemaKeywords.exclusiveMaximum, args: exclusiveMaximum })\n }\n if (typeof exclusiveMinimum === 'number') {\n //OPENAPI v3.1.0: https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0\n baseItems.unshift({ keyword: schemaKeywords.exclusiveMinimum, args: exclusiveMinimum })\n }\n if (nullable) {\n baseItems.push({ keyword: schemaKeywords.nullable })\n }\n\n if (schemaObject.type && Array.isArray(schemaObject.type)) {\n // OPENAPI v3.1.0: https://www.openapis.org/blog/2021/02/16/migrating-from-openapi-3-0-to-3-1-0\n const items = schemaObject.type.filter((value) => value !== 'null') as Array<OpenAPIV3.NonArraySchemaObjectType>\n\n if (items.length > 1) {\n const parsedItems = [\n {\n keyword: schemaKeywords.union,\n args: items\n .map(\n (item) =>\n this.parse({\n schema: { ...schemaObject, type: item },\n name,\n parentName,\n rootName,\n })[0],\n )\n .filter((x): x is Schema => Boolean(x))\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 ...baseItems.filter((item) => item.keyword === schemaKeywords.default),\n schemaObject.description && {\n keyword: schemaKeywords.describe,\n args: schemaObject.description,\n },\n schemaObject.pattern &&\n schemaObject.type === 'string' && {\n keyword: schemaKeywords.matches,\n args: schemaObject.pattern,\n },\n nullable && { keyword: schemaKeywords.nullable },\n schemaObject.readOnly && { keyword: schemaKeywords.readOnly },\n schemaObject.writeOnly && { keyword: schemaKeywords.writeOnly },\n {\n keyword: schemaKeywords.schema,\n args: {\n type: schemaObject.type as SchemaKeywordMapper['schema']['args']['type'],\n format: schemaObject.format,\n },\n },\n ].filter((x): x is Schema => Boolean(x))\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 is ref\n return item && this.parse({ schema: item as SchemaObject, name, parentName, rootName })[0]\n })\n .filter((x): x is Schema => Boolean(x)),\n }\n\n if (discriminator) {\n // In 'inherit' mode, the discriminator property is already added to child schemas by Oas.getDiscriminator()\n // so we should NOT add it at the union level\n if (this.context && this.context.oas.options.discriminator !== 'inherit') {\n return [this.#addDiscriminatorToSchema({ schemaObject: schemaWithoutOneOf, schema: union, discriminator }), ...baseItems]\n }\n }\n\n if (schemaWithoutOneOf.properties) {\n const propertySchemas = this.parse({ schema: schemaWithoutOneOf, name, parentName, rootName })\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 .flatMap((item) => {\n // Skip items that would create circular references\n if (this.#wouldCreateCircularReference(item, name)) {\n return []\n }\n\n return item ? this.parse({ schema: item, name, parentName, rootName }) : []\n })\n .filter(Boolean),\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({ schema: item, name, parentName, rootName })\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({ schema: schemaWithoutAllOf, name, parentName, rootName })]\n }\n\n return SchemaGenerator.combineObjects([and, ...baseItems])\n }\n\n if (schemaObject.enum) {\n // Handle malformed schema where enum exists at array level instead of in items\n // This normalizes: { type: 'array', enum: [...], items: {...} }\n // Into: { type: 'array', items: { type: 'string', enum: [...] } }\n if (schemaObject.type === 'array') {\n const isItemsObject = typeof schemaObject.items === 'object' && !Array.isArray(schemaObject.items)\n const normalizedItems = {\n ...(isItemsObject ? schemaObject.items : {}),\n enum: schemaObject.enum,\n } as SchemaObject\n\n const { enum: _, ...schemaWithoutEnum } = schemaObject\n const normalizedSchema = {\n ...schemaWithoutEnum,\n items: normalizedItems,\n } as SchemaObject\n\n return this.parse({ schema: normalizedSchema, name, parentName, rootName })\n }\n\n // Removed verbose enum parsing debug log - too noisy for hundreds of enums\n\n // Include rootName in enum naming to avoid collisions for nested enums with same path\n // Only add rootName if it differs from parentName to avoid duplication\n // This is controlled by the collisionDetection flag to maintain backward compatibility\n const useCollisionDetection = this.context.oas.options.collisionDetection ?? false\n const enumNameParts =\n useCollisionDetection && rootName && rootName !== parentName ? [rootName, parentName, name, options.enumSuffix] : [parentName, name, options.enumSuffix]\n\n // @deprecated usedEnumNames will be removed in v5 - collisionDetection with rootName-based naming eliminates the need for numeric suffixes\n const enumName = useCollisionDetection\n ? pascalCase(enumNameParts.join(' '))\n : getUniqueName(pascalCase(enumNameParts.join(' ')), this.options.usedEnumNames || {})\n const typeName = this.context.driver.resolveName({\n name: enumName,\n pluginName: this.context.plugin.name,\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: 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: 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({ schema: item, name, parentName, rootName })[0]\n })\n .filter((x): x is Schema => Boolean(x)),\n rest: this.parse({\n schema: items,\n name,\n parentName,\n rootName,\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 precedence 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 // Handle OpenAPI 3.1 contentMediaType for binary data\n if (schemaObject.type === 'string' && (schemaObject as SchemaObject & { contentMediaType?: string }).contentMediaType === 'application/octet-stream') {\n baseItems.unshift({ keyword: schemaKeywords.blob })\n return baseItems\n }\n\n if (schemaObject.format) {\n if (schemaObject.type === 'integer' && schemaObject.format === 'int64') {\n baseItems.unshift({ keyword: options.integerType === 'bigint' ? schemaKeywords.bigint : schemaKeywords.integer })\n return baseItems\n }\n\n if (schemaObject.type === 'integer' && schemaObject.format === 'int32') {\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.unshift({ 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({ schema: 'items' in schemaObject ? (schemaObject.items as SchemaObject) : [], name, parentName, rootName })\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 || 'patternProperties' in schemaObject) {\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 schemaObjectOverridden = Object.keys(schemaObject.properties || {}).reduce<SchemaObject>((acc, propertyName) => {\n if (acc.properties?.[propertyName] && propertyName === schemaObject.discriminator.propertyName) {\n const existingProperty = acc.properties[propertyName] as SchemaObject\n return {\n ...acc,\n properties: {\n ...acc.properties,\n [propertyName]: {\n ...existingProperty,\n enum: schemaObject.discriminator.mapping ? Object.keys(schemaObject.discriminator.mapping) : undefined,\n },\n },\n } as SchemaObject\n }\n\n return acc\n }, schemaObject as SchemaObject)\n\n return [...this.#parseProperties(name, schemaObjectOverridden, rootName), ...baseItems]\n }\n\n return [...this.#parseProperties(name, schemaObject, rootName), ...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.events?.emit('warn', `Schema type '${schemaObject.type}' is not valid for schema ${parentName}.${name}`)\n // Removed duplicate debug log - warning already provides the information needed\n }\n\n // 'string' | 'number' | 'integer' | 'boolean'\n return [{ keyword: type }, ...baseItems]\n }\n\n // Infer type from constraints when no explicit type is provided\n let inferredType: OpenAPIV3.NonArraySchemaObjectType | undefined\n if (schemaObject.minLength !== undefined || schemaObject.maxLength !== undefined || schemaObject.pattern !== undefined) {\n inferredType = 'string'\n } else if (schemaObject.minimum !== undefined || schemaObject.maximum !== undefined) {\n inferredType = 'number'\n }\n // Note: minItems/maxItems don't infer type 'array' because arrays are handled\n // specially with schemaKeywords.array and require an items property\n\n if (inferredType) {\n return [{ keyword: inferredType }, ...baseItems]\n }\n\n return [{ keyword: emptyType }, ...baseItems]\n }\n\n async build(...generators: Array<Generator<TPluginOptions>>): Promise<Array<KubbFile.File<TFileMeta>>> {\n const { oas, contentType, include } = this.context\n\n // Initialize the name mapping if not already done\n if (!this.#nameMappingInitialized) {\n const { schemas, nameMapping } = oas.getSchemas({ contentType, includes: include })\n this.#schemaNameMapping = nameMapping\n this.#nameMappingInitialized = true\n const schemaEntries = Object.entries(schemas)\n\n this.context.events?.emit('debug', {\n date: new Date(),\n logs: [`Building ${schemaEntries.length} schemas`, ` • Content Type: ${contentType || 'application/json'}`, ` • Generators: ${generators.length}`],\n })\n\n // Continue with build using the schemas\n return this.#doBuild(schemas, generators)\n }\n // If already initialized, just get the schemas (without mapping)\n const { schemas } = oas.getSchemas({ contentType, includes: include })\n return this.#doBuild(schemas, generators)\n }\n\n async #doBuild(schemas: Record<string, OasTypes.SchemaObject>, generators: Array<Generator<TPluginOptions>>): Promise<Array<KubbFile.File<TFileMeta>>> {\n const schemaEntries = Object.entries(schemas)\n\n const generatorLimit = pLimit(GENERATOR_CONCURRENCY)\n const schemaLimit = pLimit(SCHEMA_CONCURRENCY)\n\n const writeTasks = generators.map((generator) =>\n generatorLimit(async () => {\n if (generator.version === '2') {\n return []\n }\n\n // After the v2 guard above, all generators here are v1\n const v1Generator = generator as ReactGenerator<TPluginOptions> | CoreGenerator<TPluginOptions>\n\n const schemaTasks = schemaEntries.map(([name, schemaObject]) =>\n schemaLimit(async () => {\n const options = this.#getOptions(name)\n\n const tree = this.parse({ schema: schemaObject as SchemaObject, name, parentName: null, rootName: name })\n\n if (v1Generator.type === 'react') {\n await buildSchema(\n {\n name,\n value: schemaObject as SchemaObject,\n tree,\n },\n {\n config: this.context.driver.config,\n fabric: this.context.fabric,\n Component: v1Generator.Schema,\n generator: this,\n plugin: {\n ...this.context.plugin,\n options: {\n ...this.options,\n ...options,\n },\n },\n },\n )\n\n return []\n }\n\n const result = await v1Generator.schema?.({\n config: this.context.driver.config,\n generator: this,\n schema: {\n name,\n value: schemaObject as SchemaObject,\n tree,\n },\n plugin: {\n ...this.context.plugin,\n options: {\n ...this.options,\n ...options,\n },\n },\n })\n\n return result ?? []\n }),\n )\n\n const schemaResults = await Promise.all(schemaTasks)\n return schemaResults.flat() as unknown as KubbFile.File<TFileMeta>\n }),\n )\n\n const nestedResults = await Promise.all(writeTasks)\n\n return nestedResults.flat()\n }\n}\n","import type { OasTypes } from '@kubb/oas'\nimport type { OperationSchema } from '../types.ts'\n\n/**\n * Sentinel value injected into `schema.required` to signal that the request body is required.\n * Downstream generators check for this marker to emit the correct required constraint.\n */\nexport const KUBB_REQUIRED_REQUEST_BODY_MARKER = '__kubb_required_request_body__'\n\nfunction getRequestBody(operationSchema: OperationSchema | undefined): OasTypes.RequestBodyObject | undefined {\n const requestBody = operationSchema?.operation?.schema?.requestBody\n\n if (!requestBody || '$ref' in requestBody) {\n return undefined\n }\n\n return requestBody\n}\n\nexport function isRequestBodyRequired(operationSchema: OperationSchema | undefined): boolean {\n const requestBody = getRequestBody(operationSchema)\n\n return !!requestBody && requestBody.required === true\n}\n\nexport function withRequiredRequestBodySchema(operationSchema: OperationSchema | undefined): OperationSchema | undefined {\n if (!operationSchema || !isRequestBodyRequired(operationSchema)) {\n return operationSchema\n }\n\n if (Array.isArray(operationSchema.schema.required) && operationSchema.schema.required.length > 0) {\n return operationSchema\n }\n\n return {\n ...operationSchema,\n schema: {\n ...operationSchema.schema,\n required: [KUBB_REQUIRED_REQUEST_BODY_MARKER],\n },\n }\n}\n"],"x_google_ignoreList":[3,4],"mappings":"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"}
@@ -3,7 +3,7 @@ import { i as pascalCase } from "./getFooter-Pw3tLCiV.js";
3
3
  import { n as schemaKeywords, t as isKeyword } from "./SchemaMapper-CqMkO2T1.js";
4
4
  import { KUBB_INLINE_REF_PREFIX, isDiscriminator, isNullable, isOpenApiV3_1Document, isReference } from "@kubb/oas";
5
5
  import { isDeepEqual, isNumber, uniqueWith } from "remeda";
6
- import { App, createReactFabric } from "@kubb/react-fabric";
6
+ import { Fabric, createReactFabric } from "@kubb/react-fabric";
7
7
  import { jsx } from "@kubb/react-fabric/jsx-runtime";
8
8
  //#region ../../internals/utils/src/names.ts
9
9
  /**
@@ -212,10 +212,10 @@ async function buildOperations(operationsOrNodes, options) {
212
212
  const fabricChild = createReactFabric();
213
213
  if (isBuildOperationsV1Options(options)) {
214
214
  const { generator, Component } = options;
215
- const { pluginManager, oas, mode } = generator.context;
216
- await fabricChild.render(/* @__PURE__ */ jsx(App, {
215
+ const { driver, oas, mode } = generator.context;
216
+ await fabricChild.render(/* @__PURE__ */ jsx(Fabric, {
217
217
  meta: {
218
- pluginManager,
218
+ driver,
219
219
  plugin,
220
220
  mode,
221
221
  oas
@@ -228,17 +228,18 @@ async function buildOperations(operationsOrNodes, options) {
228
228
  })
229
229
  }));
230
230
  } else {
231
- const { Component } = options;
232
- await fabricChild.render(/* @__PURE__ */ jsx(App, {
231
+ const { Component, adapter } = options;
232
+ await fabricChild.render(/* @__PURE__ */ jsx(Fabric, {
233
233
  meta: { plugin },
234
234
  children: /* @__PURE__ */ jsx(Component, {
235
235
  config,
236
+ adapter,
236
237
  nodes: operationsOrNodes,
237
- plugin
238
+ options: options.options
238
239
  })
239
240
  }));
240
241
  }
241
- await fabric.context.fileManager.upsert(...fabricChild.files);
242
+ fabric.context.fileManager.upsert(...fabricChild.files);
242
243
  fabricChild.unmount();
243
244
  }
244
245
  function isBuildOperationV1Options(options) {
@@ -250,10 +251,10 @@ async function buildOperation(operationOrNode, options) {
250
251
  const fabricChild = createReactFabric();
251
252
  if (isBuildOperationV1Options(options)) {
252
253
  const { generator, Component } = options;
253
- const { pluginManager, oas, mode } = generator.context;
254
- await fabricChild.render(/* @__PURE__ */ jsx(App, {
254
+ const { driver, oas, mode } = generator.context;
255
+ await fabricChild.render(/* @__PURE__ */ jsx(Fabric, {
255
256
  meta: {
256
- pluginManager,
257
+ driver,
257
258
  plugin,
258
259
  mode,
259
260
  oas
@@ -266,17 +267,22 @@ async function buildOperation(operationOrNode, options) {
266
267
  })
267
268
  }));
268
269
  } else {
269
- const { Component } = options;
270
- await fabricChild.render(/* @__PURE__ */ jsx(App, {
271
- meta: { plugin },
270
+ const { Component, adapter, driver, mode } = options;
271
+ await fabricChild.render(/* @__PURE__ */ jsx(Fabric, {
272
+ meta: {
273
+ plugin,
274
+ driver,
275
+ mode
276
+ },
272
277
  children: /* @__PURE__ */ jsx(Component, {
273
278
  config,
279
+ adapter,
274
280
  node: operationOrNode,
275
- plugin
281
+ options: options.options
276
282
  })
277
283
  }));
278
284
  }
279
- await fabric.context.fileManager.upsert(...fabricChild.files);
285
+ fabric.context.fileManager.upsert(...fabricChild.files);
280
286
  fabricChild.unmount();
281
287
  }
282
288
  function isBuildSchemaV1Options(options) {
@@ -288,10 +294,10 @@ async function buildSchema(schema, options) {
288
294
  const fabricChild = createReactFabric();
289
295
  if (isBuildSchemaV1Options(options)) {
290
296
  const { generator, Component } = options;
291
- const { pluginManager, oas, mode } = generator.context;
292
- await fabricChild.render(/* @__PURE__ */ jsx(App, {
297
+ const { driver, oas, mode } = generator.context;
298
+ await fabricChild.render(/* @__PURE__ */ jsx(Fabric, {
293
299
  meta: {
294
- pluginManager,
300
+ driver,
295
301
  plugin,
296
302
  mode,
297
303
  oas
@@ -304,17 +310,22 @@ async function buildSchema(schema, options) {
304
310
  })
305
311
  }));
306
312
  } else {
307
- const { Component } = options;
308
- await fabricChild.render(/* @__PURE__ */ jsx(App, {
309
- meta: { plugin },
313
+ const { Component, adapter, driver, mode } = options;
314
+ await fabricChild.render(/* @__PURE__ */ jsx(Fabric, {
315
+ meta: {
316
+ plugin,
317
+ driver,
318
+ mode
319
+ },
310
320
  children: /* @__PURE__ */ jsx(Component, {
311
321
  config,
322
+ adapter,
312
323
  node: schema,
313
- plugin
324
+ options: options.options
314
325
  })
315
326
  }));
316
327
  }
317
- await fabric.context.fileManager.upsert(...fabricChild.files);
328
+ fabric.context.fileManager.upsert(...fabricChild.files);
318
329
  fabricChild.unmount();
319
330
  }
320
331
  //#endregion
@@ -599,19 +610,19 @@ var SchemaGenerator = class SchemaGenerator {
599
610
  this.#ensureNameMapping();
600
611
  const originalName = $ref.replace(/.+\//, "");
601
612
  const resolvedName = this.#schemaNameMapping.get($ref) || originalName;
602
- const propertyName = this.context.pluginManager.resolveName({
613
+ const propertyName = this.context.driver.resolveName({
603
614
  name: resolvedName,
604
- pluginKey: this.context.plugin.key,
615
+ pluginName: this.context.plugin.name,
605
616
  type: "function"
606
617
  });
607
- const fileName = this.context.pluginManager.resolveName({
618
+ const fileName = this.context.driver.resolveName({
608
619
  name: resolvedName,
609
- pluginKey: this.context.plugin.key,
620
+ pluginName: this.context.plugin.name,
610
621
  type: "file"
611
622
  });
612
- const file = this.context.pluginManager.getFile({
623
+ const file = this.context.driver.getFile({
613
624
  name: fileName,
614
- pluginKey: this.context.plugin.key,
625
+ pluginName: this.context.plugin.name,
615
626
  extname: ".ts"
616
627
  });
617
628
  this.refs[$ref] = {
@@ -921,9 +932,9 @@ var SchemaGenerator = class SchemaGenerator {
921
932
  options.enumSuffix
922
933
  ];
923
934
  const enumName = useCollisionDetection ? pascalCase(enumNameParts.join(" ")) : getUniqueName(pascalCase(enumNameParts.join(" ")), this.options.usedEnumNames || {});
924
- const typeName = this.context.pluginManager.resolveName({
935
+ const typeName = this.context.driver.resolveName({
925
936
  name: enumName,
926
- pluginKey: this.context.plugin.key,
937
+ pluginName: this.context.plugin.name,
927
938
  type: "type"
928
939
  });
929
940
  if (schemaObject.enum.includes(null)) baseItems.push({ keyword: schemaKeywords.nullable });
@@ -1267,7 +1278,7 @@ var SchemaGenerator = class SchemaGenerator {
1267
1278
  value: schemaObject,
1268
1279
  tree
1269
1280
  }, {
1270
- config: this.context.pluginManager.config,
1281
+ config: this.context.driver.config,
1271
1282
  fabric: this.context.fabric,
1272
1283
  Component: v1Generator.Schema,
1273
1284
  generator: this,
@@ -1282,7 +1293,7 @@ var SchemaGenerator = class SchemaGenerator {
1282
1293
  return [];
1283
1294
  }
1284
1295
  return await v1Generator.schema?.({
1285
- config: this.context.pluginManager.config,
1296
+ config: this.context.driver.config,
1286
1297
  generator: this,
1287
1298
  schema: {
1288
1299
  name,
@@ -1333,4 +1344,4 @@ function withRequiredRequestBodySchema(operationSchema) {
1333
1344
  //#endregion
1334
1345
  export { buildOperations as a, pLimit as c, buildOperation as i, withRequiredRequestBodySchema as n, buildSchema as o, SchemaGenerator as r, getSchemaFactory as s, isRequestBodyRequired as t };
1335
1346
 
1336
- //# sourceMappingURL=requestBody-mUXoBwsu.js.map
1347
+ //# sourceMappingURL=requestBody-gV_d8sCu.js.map