@kubb/plugin-swr 5.0.0-beta.56 → 5.0.0-beta.64

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/{components-C8FJ3-Cb.cjs → components-DxWGjLWg.cjs} +73 -134
  2. package/dist/components-DxWGjLWg.cjs.map +1 -0
  3. package/dist/{components-CR9NLFcO.js → components-mWBRE6E4.js} +73 -134
  4. package/dist/components-mWBRE6E4.js.map +1 -0
  5. package/dist/components.cjs +1 -1
  6. package/dist/components.d.ts +1 -1
  7. package/dist/components.js +1 -1
  8. package/dist/{generators-mw3FvFJD.cjs → generators-CJ4ziuNk.cjs} +2 -2
  9. package/dist/{generators-mw3FvFJD.cjs.map → generators-CJ4ziuNk.cjs.map} +1 -1
  10. package/dist/{generators-BB6csINY.js → generators-D2blgLOY.js} +2 -2
  11. package/dist/{generators-BB6csINY.js.map → generators-D2blgLOY.js.map} +1 -1
  12. package/dist/generators.cjs +1 -1
  13. package/dist/generators.d.ts +1 -1
  14. package/dist/generators.js +1 -1
  15. package/dist/index.cjs +8 -8
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.js +8 -8
  19. package/dist/index.js.map +1 -1
  20. package/dist/{types-Dz_j0Bqv.d.ts → types-DcBaH0gA.d.ts} +3 -3
  21. package/package.json +8 -8
  22. package/dist/components-C8FJ3-Cb.cjs.map +0 -1
  23. package/dist/components-CR9NLFcO.js.map +0 -1
  24. package/src/components/Mutation.tsx +0 -155
  25. package/src/components/MutationKey.tsx +0 -25
  26. package/src/components/Query.tsx +0 -128
  27. package/src/components/QueryKey.tsx +0 -1
  28. package/src/components/QueryOptions.tsx +0 -56
  29. package/src/components/index.ts +0 -5
  30. package/src/generators/index.ts +0 -2
  31. package/src/generators/mutationGenerator.tsx +0 -166
  32. package/src/generators/queryGenerator.tsx +0 -170
  33. package/src/index.ts +0 -2
  34. package/src/plugin.ts +0 -142
  35. package/src/resolvers/resolverSwr.ts +0 -56
  36. package/src/types.ts +0 -194
  37. package/src/utils.ts +0 -17
@@ -1,5 +1,6 @@
1
1
  import { t as __name } from "./chunk-C0LytTxp.js";
2
2
  import { ast } from "@kubb/core";
3
+ import { buildGroupParam, caseParams, createOperationParams, resolveGroupType, resolveParamType } from "@kubb/ast/utils";
3
4
  import { functionPrinter } from "@kubb/plugin-ts";
4
5
  import { File, Function, Type } from "@kubb/renderer-jsx";
5
6
  import { Fragment, jsx, jsxs } from "@kubb/renderer-jsx/jsx-runtime";
@@ -258,7 +259,7 @@ function buildOperationComments(node, options = {}) {
258
259
  return filteredComments.flatMap((text) => text.split(/\r?\n/).map((line) => line.trim())).filter((comment) => Boolean(comment));
259
260
  }
260
261
  function getOperationParameters(node, options = {}) {
261
- const params = ast.caseParams(node.parameters, options.paramsCasing);
262
+ const params = caseParams(node.parameters, options.paramsCasing);
262
263
  return {
263
264
  path: params.filter((param) => param.in === "path"),
264
265
  query: params.filter((param) => param.in === "query"),
@@ -333,7 +334,7 @@ const mutationKeyTransformer = ({ node }) => {
333
334
  return [`{ url: '${Url.toPath(node.path)}' }`];
334
335
  };
335
336
  function MutationKey$1({ name, paramsCasing, node, transformer }) {
336
- const paramsNode = ast.createFunctionParameters({ params: [] });
337
+ const paramsNode = ast.factory.createFunctionParameters({ params: [] });
337
338
  const paramsSignature = declarationPrinter$4.print(paramsNode) ?? "";
338
339
  const keys = (transformer ?? mutationKeyTransformer)({
339
340
  node,
@@ -356,6 +357,14 @@ __name(MutationKey$1, "MutationKey");
356
357
  //#endregion
357
358
  //#region ../../internals/tanstack-query/src/utils.ts
358
359
  /**
360
+ * Returns the `TypeLiteral` members of a destructured group parameter, or `null`
361
+ * for a plain named parameter.
362
+ */
363
+ function groupMembers(param) {
364
+ if (typeof param.name === "string") return null;
365
+ return param.type && typeof param.type !== "string" && param.type.kind === "TypeLiteral" ? param.type.members : [];
366
+ }
367
+ /**
359
368
  * Builds the shared `(…params, config = {})` parameter list for a TanStack
360
369
  * query-options function. The trailing `config` parameter is typed as a partial
361
370
  * `RequestConfig` with an optional `client`. Framework plugins wrap the result
@@ -364,17 +373,14 @@ __name(MutationKey$1, "MutationKey");
364
373
  function buildQueryOptionsParams(node, options) {
365
374
  const { paramsType, paramsCasing, pathParamsType, resolver } = options;
366
375
  const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : void 0;
367
- return ast.createOperationParams(node, {
376
+ return createOperationParams(node, {
368
377
  paramsType,
369
378
  pathParamsType: paramsType === "object" ? "object" : pathParamsType === "object" ? "object" : "inline",
370
379
  paramsCasing,
371
380
  resolver,
372
- extraParams: [ast.createFunctionParameter({
381
+ extraParams: [ast.factory.createFunctionParameter({
373
382
  name: "config",
374
- type: ast.createParamsType({
375
- variant: "reference",
376
- name: requestName ? `Partial<RequestConfig<${requestName}>> & { client?: Client }` : "Partial<RequestConfig> & { client?: Client }"
377
- }),
383
+ type: requestName ? `Partial<RequestConfig<${requestName}>> & { client?: Client }` : "Partial<RequestConfig> & { client?: Client }",
378
384
  default: "{}"
379
385
  })]
380
386
  });
@@ -425,107 +431,52 @@ function resolveZodSchemaNames(node, zodResolver, parser) {
425
431
  ].filter((n) => Boolean(n));
426
432
  }
427
433
  /**
428
- * Resolve the type for a single path parameter.
429
- *
430
- * - When the resolver's group name differs from the individual param name
431
- * (e.g. kubbV4) → `GroupName['paramName']` (member access).
432
- * - When they match (v5 default) → `TypeName` (direct reference).
433
- */
434
- function resolvePathParamType(node, param, resolver) {
435
- const individualName = resolver.resolveParamName(node, param);
436
- const groupName = resolver.resolvePathParamsName(node, param);
437
- if (groupName !== individualName) return ast.createParamsType({
438
- variant: "member",
439
- base: groupName,
440
- key: param.name
441
- });
442
- return ast.createParamsType({
443
- variant: "reference",
444
- name: individualName
445
- });
446
- }
447
- /**
448
- * Derive a query-params group type from the resolver.
449
- * Returns `null` when no query params exist or when the group name
450
- * equals the individual param name (no real group).
451
- */
452
- function resolveQueryGroupType(node, params, resolver) {
453
- if (!params.length) return null;
454
- const firstParam = params[0];
455
- const groupName = resolver.resolveQueryParamsName(node, firstParam);
456
- if (groupName === resolver.resolveParamName(node, firstParam)) return null;
457
- return {
458
- type: ast.createParamsType({
459
- variant: "reference",
460
- name: groupName
461
- }),
462
- optional: params.every((p) => !p.required)
463
- };
464
- }
465
- /**
466
- * Build a single `FunctionParameterNode` for a query or header group.
467
- */
468
- function buildGroupParam(name, node, params, groupType, resolver) {
469
- if (groupType) return [ast.createFunctionParameter({
470
- name,
471
- type: groupType.type,
472
- optional: groupType.optional
473
- })];
474
- if (params.length) {
475
- const structProps = params.map((p) => ({
476
- name: p.name,
477
- type: ast.createParamsType({
478
- variant: "reference",
479
- name: resolver.resolveParamName(node, p)
480
- }),
481
- optional: !p.required
482
- }));
483
- return [ast.createFunctionParameter({
484
- name,
485
- type: ast.createParamsType({
486
- variant: "struct",
487
- properties: structProps
488
- }),
489
- optional: params.every((p) => !p.required)
490
- })];
491
- }
492
- return [];
493
- }
494
- /**
495
434
  * Build QueryKey params: pathParams + data + queryParams (NO headers, NO config).
496
435
  */
497
436
  function buildQueryKeyParams(node, options) {
498
437
  const { pathParamsType, paramsCasing, resolver } = options;
499
- const casedParams = ast.caseParams(node.parameters, paramsCasing);
438
+ const casedParams = caseParams(node.parameters, paramsCasing);
500
439
  const pathParams = casedParams.filter((p) => p.in === "path");
501
440
  const queryParams = casedParams.filter((p) => p.in === "query");
502
- const queryGroupType = resolveQueryGroupType(node, queryParams, resolver);
503
- const bodyType = node.requestBody?.content?.[0]?.schema ? ast.createParamsType({
504
- variant: "reference",
505
- name: resolver.resolveDataName(node)
506
- }) : null;
441
+ const queryGroupType = resolveGroupType({
442
+ node,
443
+ params: queryParams,
444
+ group: "query",
445
+ resolver
446
+ });
447
+ const bodyType = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : null;
507
448
  const bodyRequired = node.requestBody?.required ?? false;
508
449
  const params = [];
509
450
  if (pathParams.length) {
510
- const pathChildren = pathParams.map((p) => ast.createFunctionParameter({
451
+ const pathChildren = pathParams.map((p) => ({
511
452
  name: p.name,
512
- type: resolvePathParamType(node, p, resolver),
453
+ type: resolveParamType({
454
+ node,
455
+ param: p,
456
+ resolver
457
+ }),
513
458
  optional: !p.required
514
459
  }));
515
- params.push({
516
- kind: "ParameterGroup",
460
+ if (pathParamsType === "object") params.push(ast.factory.createFunctionParameter({
517
461
  properties: pathChildren,
518
- inline: pathParamsType === "inline",
519
462
  default: pathChildren.every((c) => c.optional) ? "{}" : void 0
520
- });
463
+ }));
464
+ else params.push(...pathChildren.map((child) => ast.factory.createFunctionParameter(child)));
521
465
  }
522
- if (bodyType) params.push(ast.createFunctionParameter({
466
+ if (bodyType) params.push(ast.factory.createFunctionParameter({
523
467
  name: "data",
524
468
  type: bodyType,
525
469
  optional: !bodyRequired
526
470
  }));
527
- params.push(...buildGroupParam("params", node, queryParams, queryGroupType, resolver));
528
- return ast.createFunctionParameters({ params });
471
+ params.push(...buildGroupParam({
472
+ name: "params",
473
+ node,
474
+ params: queryParams,
475
+ groupType: queryGroupType,
476
+ resolver,
477
+ wrapType: (type) => type
478
+ }));
479
+ return ast.factory.createFunctionParameters({ params });
529
480
  }
530
481
  /**
531
482
  * Collect the names of the required params (no default) that drive the `enabled`
@@ -534,12 +485,11 @@ function buildQueryKeyParams(node, options) {
534
485
  */
535
486
  function getEnabledParamNames(paramsNode) {
536
487
  const required = [];
537
- for (const param of paramsNode.params) if ("kind" in param && param.kind === "ParameterGroup") {
538
- const group = param;
539
- for (const child of group.properties) if (!child.optional && child.default === void 0) required.push(child.name);
540
- } else {
541
- const fp = param;
542
- if (!fp.optional && fp.default === void 0) required.push(fp.name);
488
+ for (const param of paramsNode.params) {
489
+ const members = groupMembers(param);
490
+ if (members) {
491
+ for (const member of members) if (!member.optional) required.push(member.name);
492
+ } else if (typeof param.name === "string" && !param.optional && param.default === void 0) required.push(param.name);
543
493
  }
544
494
  return required;
545
495
  }
@@ -555,27 +505,25 @@ function markParamsOptional(paramsNode, names) {
555
505
  if (names.length === 0) return paramsNode;
556
506
  const nameSet = new Set(names);
557
507
  const params = paramsNode.params.map((param) => {
558
- if ("kind" in param && param.kind === "ParameterGroup") {
559
- const group = param;
508
+ const members = groupMembers(param);
509
+ if (members) {
510
+ const next = members.map((member) => nameSet.has(member.name) ? {
511
+ ...member,
512
+ optional: true
513
+ } : member);
560
514
  return {
561
- ...group,
562
- properties: group.properties.map((child) => nameSet.has(child.name) ? ast.createFunctionParameter({
563
- name: child.name,
564
- type: child.type,
565
- rest: child.rest,
566
- optional: true
567
- }) : child)
515
+ ...param,
516
+ type: ast.factory.createTypeLiteral({ members: next })
568
517
  };
569
518
  }
570
- const fp = param;
571
- return nameSet.has(fp.name) ? ast.createFunctionParameter({
572
- name: fp.name,
573
- type: fp.type,
574
- rest: fp.rest,
519
+ return typeof param.name === "string" && nameSet.has(param.name) ? ast.factory.createFunctionParameter({
520
+ name: param.name,
521
+ type: param.type,
522
+ rest: param.rest,
575
523
  optional: true
576
- }) : fp;
524
+ }) : param;
577
525
  });
578
- return ast.createFunctionParameters({ params });
526
+ return ast.factory.createFunctionParameters({ params });
579
527
  }
580
528
  /**
581
529
  * Add a non-null assertion (`!`) to the named params inside a printed client-call
@@ -650,9 +598,9 @@ function QueryKey({ name, node, tsResolver, paramsCasing, pathParamsType, typeNa
650
598
  //#region src/components/Mutation.tsx
651
599
  const declarationPrinter$2 = functionPrinter({ mode: "declaration" });
652
600
  const callPrinter$2 = functionPrinter({ mode: "call" });
653
- const keysPrinter = functionPrinter({ mode: "keys" });
601
+ const keysPrinter = functionPrinter({ mode: "call" });
654
602
  function createMutationArgParams(node, options) {
655
- return ast.createOperationParams(node, {
603
+ return createOperationParams(node, {
656
604
  paramsType: "inline",
657
605
  pathParamsType: "inline",
658
606
  paramsCasing: options.paramsCasing,
@@ -665,16 +613,13 @@ function buildMutationParamsNode(node, options) {
665
613
  const errorNames = resolveErrorNames(node, resolver);
666
614
  const TData = dataReturnType === "data" ? responseName : buildStatusUnionType(node, resolver);
667
615
  const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(" | ") : "Error"}>`;
668
- return ast.createFunctionParameters({ params: [ast.createFunctionParameter({
616
+ return ast.factory.createFunctionParameters({ params: [ast.factory.createFunctionParameter({
669
617
  name: "options",
670
- type: ast.createParamsType({
671
- variant: "reference",
672
- name: `{
618
+ type: `{
673
619
  mutation?: SWRMutationConfiguration<${TData}, ${TError}, ${mutationKeyTypeName} | null, ${mutationArgTypeName}> & { throwOnError?: boolean },
674
620
  client?: ${buildRequestConfigType(node, resolver)},
675
621
  shouldFetch?: boolean,
676
- }`
677
- }),
622
+ }`,
678
623
  default: "{}"
679
624
  })] });
680
625
  }
@@ -704,17 +649,14 @@ function Mutation({ name, clientName, mutationKeyName, mutationKeyTypeName, muta
704
649
  resolver: tsResolver
705
650
  });
706
651
  const paramsSignature = declarationPrinter$2.print(paramsNode) ?? "";
707
- const clientCallParamsNode = ast.createOperationParams(node, {
652
+ const clientCallParamsNode = createOperationParams(node, {
708
653
  paramsType,
709
654
  pathParamsType: paramsType === "object" ? "object" : pathParamsType === "object" ? "object" : "inline",
710
655
  paramsCasing,
711
656
  resolver: tsResolver,
712
- extraParams: [ast.createFunctionParameter({
657
+ extraParams: [ast.factory.createFunctionParameter({
713
658
  name: "config",
714
- type: ast.createParamsType({
715
- variant: "reference",
716
- name: buildRequestConfigType(node, tsResolver)
717
- }),
659
+ type: buildRequestConfigType(node, tsResolver),
718
660
  default: "{}"
719
661
  })]
720
662
  });
@@ -824,20 +766,17 @@ function buildQueryParamsNode(node, options) {
824
766
  const errorNames = resolveErrorNames(node, resolver);
825
767
  const TData = dataReturnType === "data" ? responseName : buildStatusUnionType(node, resolver);
826
768
  const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(" | ") : "Error"}>`;
827
- const optionsParam = ast.createFunctionParameter({
769
+ const optionsParam = ast.factory.createFunctionParameter({
828
770
  name: "options",
829
- type: ast.createParamsType({
830
- variant: "reference",
831
- name: `{
771
+ type: `{
832
772
  query?: SWRConfiguration<${[TData, TError].join(", ")}>,
833
773
  client?: ${requestName ? `Partial<RequestConfig<${requestName}>> & { client?: Client }` : "Partial<RequestConfig> & { client?: Client }"},
834
774
  shouldFetch?: boolean,
835
775
  immutable?: boolean
836
- }`
837
- }),
776
+ }`,
838
777
  default: "{}"
839
778
  });
840
- return ast.createOperationParams(node, {
779
+ return createOperationParams(node, {
841
780
  paramsType,
842
781
  pathParamsType: paramsType === "object" ? "object" : pathParamsType === "object" ? "object" : "inline",
843
782
  paramsCasing,
@@ -909,4 +848,4 @@ function Query({ name, queryKeyTypeName, queryOptionsName, queryKeyName, paramsT
909
848
  //#endregion
910
849
  export { QueryKey as a, mutationKeyTransformer as c, Mutation as i, resolveOperationTypeNames as l, QueryOptions as n, queryKeyTransformer as o, MutationKey as r, resolveZodSchemaNames as s, Query as t, camelCase as u };
911
850
 
912
- //# sourceMappingURL=components-CR9NLFcO.js.map
851
+ //# sourceMappingURL=components-mWBRE6E4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components-mWBRE6E4.js","names":["declarationPrinter","MutationKey","declarationPrinter","declarationPrinter","callPrinter","getComments","SharedMutationKey","declarationPrinter","callPrinter","getComments"],"sources":["../../../internals/utils/src/casing.ts","../../../internals/utils/src/reserved.ts","../../../internals/utils/src/url.ts","../../../internals/shared/src/operation.ts","../../../internals/tanstack-query/src/components/MutationKey.tsx","../../../internals/tanstack-query/src/utils.ts","../../../internals/tanstack-query/src/components/QueryKey.tsx","../src/components/Mutation.tsx","../src/components/MutationKey.tsx","../src/components/QueryOptions.tsx","../src/components/Query.tsx"],"sourcesContent":["type Options = {\n /**\n * Text prepended before casing is applied.\n */\n prefix?: string\n /**\n * Text appended before casing is applied.\n */\n suffix?: string\n}\n\n/**\n * Shared implementation for camelCase and PascalCase conversion.\n * Splits on common word boundaries (spaces, hyphens, underscores, dots, slashes, colons)\n * and capitalizes each word according to `pascal`.\n *\n * When `pascal` is `true` the first word is also capitalized (PascalCase), otherwise only subsequent words are.\n */\nfunction toCamelOrPascal(text: string, pascal: boolean): string {\n return text\n .trim()\n .replace(/([a-z\\d])([A-Z])/g, '$1 $2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n .replace(/(\\d)([a-z])/g, '$1 $2')\n .split(/[\\s\\-_./\\\\:]+/)\n .filter(Boolean)\n .map((word, i) => {\n if (word.length > 1 && word === word.toUpperCase()) return word\n const head = i === 0 && !pascal ? word.charAt(0).toLowerCase() : word.charAt(0).toUpperCase()\n return head + word.slice(1)\n })\n .join('')\n .replace(/[^a-zA-Z0-9]/g, '')\n}\n\n/**\n * Converts `text` to camelCase.\n *\n * @example Word boundaries\n * `camelCase('hello-world') // 'helloWorld'`\n *\n * @example With a prefix\n * `camelCase('tag', { prefix: 'create' }) // 'createTag'`\n */\nexport function camelCase(text: string, { prefix = '', suffix = '' }: Options = {}): string {\n return toCamelOrPascal(`${prefix} ${text} ${suffix}`, false)\n}\n\n/**\n * Converts `text` to PascalCase.\n *\n * @example Word boundaries\n * `pascalCase('hello-world') // 'HelloWorld'`\n *\n * @example With a suffix\n * `pascalCase('tag', { suffix: 'schema' }) // 'TagSchema'`\n */\nexport function pascalCase(text: string, { prefix = '', suffix = '' }: Options = {}): string {\n return toCamelOrPascal(`${prefix} ${text} ${suffix}`, true)\n}\n\n/**\n * Converts `text` to snake_case.\n *\n * @example From camelCase\n * `snakeCase('helloWorld') // 'hello_world'`\n *\n * @example From mixed separators\n * `snakeCase('Hello-World') // 'hello_world'`\n */\nexport function snakeCase(text: string, { prefix = '', suffix = '' }: Options = {}): string {\n const processed = `${prefix} ${text} ${suffix}`.trim()\n return processed\n .replace(/([a-z])([A-Z])/g, '$1_$2')\n .replace(/[\\s\\-.]+/g, '_')\n .replace(/[^a-zA-Z0-9_]/g, '')\n .toLowerCase()\n .split('_')\n .filter(Boolean)\n .join('_')\n}\n\n/**\n * Converts `text` to SCREAMING_SNAKE_CASE.\n *\n * @example From camelCase\n * `screamingSnakeCase('helloWorld') // 'HELLO_WORLD'`\n */\nexport function screamingSnakeCase(text: string, { prefix = '', suffix = '' }: Options = {}): string {\n return snakeCase(text, { prefix, suffix }).toUpperCase()\n}\n","/**\n * JavaScript and Java reserved words.\n * @link https://github.com/jonschlinkert/reserved/blob/master/index.js\n */\nconst reservedWords = new Set([\n 'abstract',\n 'arguments',\n 'boolean',\n 'break',\n 'byte',\n 'case',\n 'catch',\n 'char',\n 'class',\n 'const',\n 'continue',\n 'debugger',\n 'default',\n 'delete',\n 'do',\n 'double',\n 'else',\n 'enum',\n 'eval',\n 'export',\n 'extends',\n 'false',\n 'final',\n 'finally',\n 'float',\n 'for',\n 'function',\n 'goto',\n 'if',\n 'implements',\n 'import',\n 'in',\n 'instanceof',\n 'int',\n 'interface',\n 'let',\n 'long',\n 'native',\n 'new',\n 'null',\n 'package',\n 'private',\n 'protected',\n 'public',\n 'return',\n 'short',\n 'static',\n 'super',\n 'switch',\n 'synchronized',\n 'this',\n 'throw',\n 'throws',\n 'transient',\n 'true',\n 'try',\n 'typeof',\n 'var',\n 'void',\n 'volatile',\n 'while',\n 'with',\n 'yield',\n 'Array',\n 'Date',\n 'hasOwnProperty',\n 'Infinity',\n 'isFinite',\n 'isNaN',\n 'isPrototypeOf',\n 'length',\n 'Math',\n 'name',\n 'NaN',\n 'Number',\n 'Object',\n 'prototype',\n 'String',\n 'toString',\n 'undefined',\n 'valueOf',\n] as const)\n\n/**\n * Returns `true` when `name` is a syntactically valid JavaScript variable name.\n *\n * @example\n * ```ts\n * isValidVarName('status') // true\n * isValidVarName('class') // false (reserved word)\n * isValidVarName('42foo') // false (starts with digit)\n * ```\n */\nexport function isValidVarName(name: string): boolean {\n if (!name || reservedWords.has(name as 'valueOf')) {\n return false\n }\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name)\n}\n\n/**\n * Returns `name` when it's a syntactically valid JavaScript variable name,\n * otherwise prefixes it with `_` so the result is a valid identifier.\n *\n * Useful for sanitizing OpenAPI schema names or operation IDs that start with\n * a digit (e.g. `409`, `504AccountCancel`) before using them as exported\n * variable, type, or function names.\n *\n * @example\n * ```ts\n * ensureValidVarName('409') // '_409'\n * ensureValidVarName('504AccountCancel') // '_504AccountCancel'\n * ensureValidVarName('Pet') // 'Pet'\n * ensureValidVarName('class') // '_class'\n * ```\n */\nexport function ensureValidVarName(name: string): string {\n if (!name || isValidVarName(name)) {\n return name\n }\n return `_${name}`\n}\n","import { camelCase } from './casing.ts'\nimport { isValidVarName } from './reserved.ts'\n\nexport type URLObject = {\n /**\n * The resolved URL string (Express-style or template literal, depending on context).\n */\n url: string\n /**\n * Extracted path parameters as a key-value map, or `null` when the path has none.\n */\n params: Record<string, string> | null\n}\n\n/**\n * Supported identifier casing strategies for path parameters.\n */\nexport type PathCasing = 'camelcase'\n\ntype TemplateOptions = {\n /**\n * Literal text prepended inside the template literal, e.g. a base URL.\n */\n prefix?: string | null\n /**\n * Transform applied to each extracted parameter name before interpolation.\n */\n replacer?: (pathParam: string) => string\n /**\n * Casing strategy applied to path parameter names.\n */\n casing?: PathCasing\n}\n\ntype ObjectOptions = {\n /**\n * Controls whether the `url` is rendered as an Express path or a template literal.\n * @default 'path'\n */\n type?: 'path' | 'template'\n /**\n * Transform applied to each extracted parameter name.\n */\n replacer?: (pathParam: string) => string\n /**\n * When `true`, the result is serialized to a string expression instead of a plain object.\n */\n stringify?: boolean\n /**\n * Casing strategy applied to path parameter names.\n */\n casing?: PathCasing\n}\n\nfunction transformParam(raw: string, casing?: PathCasing): string {\n const param = isValidVarName(raw) ? raw : camelCase(raw)\n return casing === 'camelcase' ? camelCase(param) : param\n}\n\nfunction toParamsObject(\n path: string,\n { replacer, casing }: { replacer?: (pathParam: string) => string; casing?: PathCasing } = {},\n): Record<string, string> | null {\n const params: Record<string, string> = {}\n\n for (const match of path.matchAll(/\\{([^}]+)\\}/g)) {\n const param = transformParam(match[1]!, casing)\n const key = replacer ? replacer(param) : param\n params[key] = key\n }\n\n return Object.keys(params).length > 0 ? params : null\n}\n\n/**\n * Helpers for OpenAPI/Swagger paths, plus a thin wrapper over the native `URL`.\n */\nexport class Url {\n /**\n * Reports whether `url` is a parseable absolute URL. Delegates to the native `URL.canParse`.\n *\n * @example\n * Url.canParse('https://petstore.swagger.io/v2') // true\n * Url.canParse('/pet/{petId}') // false\n */\n static canParse(url: string, base?: string | URL): boolean {\n return URL.canParse(url, base)\n }\n\n /**\n * Converts an OpenAPI/Swagger path to Express-style colon syntax.\n *\n * @example\n * Url.toPath('/pet/{petId}') // '/pet/:petId'\n */\n static toPath(path: string): string {\n return path.replace(/\\{([^}]+)\\}/g, ':$1')\n }\n\n /**\n * Converts an OpenAPI/Swagger path to a TypeScript template literal string.\n * `prefix` is prepended inside the literal, `replacer` transforms each parameter name,\n * and `casing` controls parameter identifier casing.\n *\n * @example\n * Url.toTemplateString('/pet/{petId}') // '`/pet/${petId}`'\n *\n * @example\n * Url.toTemplateString('/pet/{petId}', { prefix: 'https://api' }) // '`https://api/pet/${petId}`'\n */\n static toTemplateString(path: string, { prefix, replacer, casing }: TemplateOptions = {}): string {\n const parts = path.split(/\\{([^}]+)\\}/)\n const result = parts\n .map((part, i) => {\n if (i % 2 === 0) return part\n const param = transformParam(part, casing)\n return `\\${${replacer ? replacer(param) : param}}`\n })\n .join('')\n\n return `\\`${prefix ?? ''}${result}\\``\n }\n\n /**\n * Returns the path and its extracted params as a structured `URLObject`, or as a stringified\n * expression when `stringify` is set.\n *\n * @example\n * Url.toObject('/pet/{petId}')\n * // { url: '/pet/:petId', params: { petId: 'petId' } }\n */\n static toObject(path: string, { type = 'path', replacer, stringify, casing }: ObjectOptions = {}): URLObject | string {\n const object: URLObject = {\n url: type === 'path' ? Url.toPath(path) : Url.toTemplateString(path, { replacer, casing }),\n params: toParamsObject(path, { replacer, casing }),\n }\n\n if (stringify) {\n if (type === 'template') {\n return JSON.stringify(object).replaceAll(\"'\", '').replaceAll(`\"`, '')\n }\n\n if (object.params) {\n return `{ url: '${object.url}', params: ${JSON.stringify(object.params).replaceAll(\"'\", '').replaceAll(`\"`, '')} }`\n }\n\n return `{ url: '${object.url}' }`\n }\n\n return object\n }\n}\n","import { Url } from '@internals/utils'\nimport { ast, type ResolverFileParams } from '@kubb/core'\nimport { caseParams } from '@kubb/ast/utils'\n\n/**\n * Builds the `ResolverFileParams` every operation generator passes to\n * `resolver.resolveFile`: a file named `name`, tagged by the operation's first\n * tag (or `'default'`), at the operation's path. Centralizes the entry object\n * that was repeated at dozens of call sites across the client and query plugins.\n *\n * @example\n * ```ts\n * resolver.resolveFile(operationFileEntry(node, node.operationId), { root, output, group })\n * ```\n */\nexport function operationFileEntry(node: ast.OperationNode, name: string, extname: ResolverFileParams['extname'] = '.ts'): ResolverFileParams {\n return {\n name,\n extname,\n tag: node.tags[0] ?? 'default',\n path: node.path,\n }\n}\n\nexport type ContentTypeInfo = {\n contentTypes: string[]\n isMultipleContentTypes: boolean\n contentTypeUnion: string\n defaultContentType: string\n hasFormData: boolean\n}\n\nexport type RequestConfigResolver = {\n resolveDataName(node: ast.OperationNode): string\n}\n\nexport type ResponseStatusNameResolver = {\n resolveResponseStatusName(node: ast.OperationNode, statusCode: ast.StatusCode): string\n}\n\nexport type ResponseNameResolver = ResponseStatusNameResolver & {\n resolveResponseName(node: ast.OperationNode): string\n}\n\nexport type OperationTypeNameResolver = RequestConfigResolver &\n ResponseNameResolver & {\n resolvePathParamsName(node: ast.OperationNode, param: ast.ParameterNode): string\n resolveQueryParamsName(node: ast.OperationNode, param: ast.ParameterNode): string\n resolveHeaderParamsName(node: ast.OperationNode, param: ast.ParameterNode): string\n }\n\nexport type OperationCommentLink = 'pathTemplate' | 'urlPath' | false | ((node: ast.OperationNode) => string | undefined)\n\nexport type BuildOperationCommentsOptions = {\n link?: OperationCommentLink\n linkPosition?: 'beforeDeprecated' | 'afterDeprecated'\n splitLines?: boolean\n}\n\ntype ResponseLike = {\n statusCode: ast.StatusCode | number | string\n}\n\nexport type OperationParameterGroups = Record<ast.ParameterNode['in'], Array<ast.ParameterNode>>\n\nexport type ResolveOperationTypeNameOptions = {\n paramsCasing?: 'camelcase'\n responseStatusNames?: boolean | 'error'\n exclude?: ReadonlyArray<string | undefined>\n order?: 'params-first' | 'body-response-first'\n}\n\nfunction getOperationLink(node: ast.OperationNode, link: OperationCommentLink): string | null {\n if (!link) {\n return null\n }\n\n if (typeof link === 'function') {\n return link(node) ?? null\n }\n\n if (link === 'urlPath') {\n return node.path ? `{@link ${Url.toPath(node.path)}}` : null\n }\n\n return node.path ? `{@link ${node.path.replaceAll('{', ':').replaceAll('}', '')}}` : null\n}\n\nexport function getContentTypeInfo(node: ast.OperationNode): ContentTypeInfo {\n const contentTypes = node.requestBody?.content?.map((e) => e.contentType) ?? []\n const isMultipleContentTypes = contentTypes.length > 1\n\n return {\n contentTypes,\n isMultipleContentTypes,\n contentTypeUnion: isMultipleContentTypes ? contentTypes.map((ct) => JSON.stringify(ct)).join(' | ') : '',\n defaultContentType: contentTypes[0] ?? 'application/json',\n hasFormData: contentTypes.some((ct) => ct === 'multipart/form-data'),\n }\n}\n\nexport type ResponseType = 'arraybuffer' | 'blob' | 'document' | 'json' | 'text' | 'stream'\n\n/**\n * Derives the default `responseType` for an operation from its primary success response.\n *\n * Returns a value only when that response declares a single non-JSON content type — a binary type\n * (`application/octet-stream`, `application/pdf`, `image/*`, `audio/*`, `video/*`) maps to `'blob'`\n * and other `text/*` maps to `'text'`. Otherwise `undefined`, leaving the runtime client's\n * `Content-Type` auto-detection in charge.\n */\nexport function getResponseType(node: ast.OperationNode): ResponseType | undefined {\n const contentTypes = getPrimarySuccessResponse(node)?.content?.map((entry) => entry.contentType) ?? []\n if (contentTypes.length !== 1) return undefined\n\n const baseType = contentTypes[0]!.split(';')[0]!.trim().toLowerCase()\n if (baseType === 'application/json' || baseType.endsWith('+json') || baseType === 'text/json') return undefined\n if (baseType.startsWith('text/')) return 'text'\n if (baseType === 'application/octet-stream' || baseType === 'application/pdf' || /^(image|audio|video)\\//.test(baseType)) return 'blob'\n return undefined\n}\n\n/**\n * Maps a content type to the PascalCase suffix used to name per-content-type variants\n * (e.g. `application/json` → `Json`, `application/xml` → `Xml`, `multipart/form-data` → `FormData`).\n */\nexport function getContentTypeSuffix(contentType: string): string {\n const baseType = contentType.split(';')[0]!.trim()\n if (baseType === 'application/json') return 'Json'\n if (baseType === 'multipart/form-data') return 'FormData'\n if (baseType === 'application/x-www-form-urlencoded') return 'FormUrlEncoded'\n const subtype = baseType.split('/').pop() ?? baseType\n const parts = subtype.split(/[^a-zA-Z0-9]+/).filter(Boolean)\n if (parts.length === 0) return 'Unknown'\n return parts.map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join('')\n}\n\n/**\n * Appends a content-type suffix to a base name, keeping a trailing `Data` segment last\n * (e.g. `AddPetData` + `Json` → `AddPetJsonData`, `AddPetStatus200` + `Xml` → `AddPetStatus200Xml`).\n */\nexport function getPerContentTypeName(baseName: string, suffix: string): string {\n if (baseName.endsWith('Data')) {\n return suffix.endsWith('Data') ? baseName.slice(0, -4) + suffix : `${baseName.slice(0, -4)}${suffix}Data`\n }\n return baseName + suffix\n}\n\nexport type ContentVariantInput = { contentType: string; schema?: ast.SchemaNode | null; keysToOmit?: Array<string> | null }\nexport type ContentVariant = { name: string; suffix: string; schema: ast.SchemaNode; keysToOmit?: Array<string> | null; contentType: string }\n\n/**\n * Resolves per-content-type variant names for a set of content entries, deduplicating suffix\n * collisions with a numeric counter. Entries without a schema are skipped. The returned `suffix` is\n * the final (possibly counter-augmented) value, so callers can derive parallel names in another\n * namespace (e.g. plugin-faker deriving the matching plugin-ts type name).\n */\nexport function resolveContentTypeVariants(entries: Array<ContentVariantInput>, baseName: string): Array<ContentVariant> {\n const usedNames = new Set<string>()\n return entries\n .filter((entry) => entry.schema)\n .map((entry) => {\n const baseSuffix = getContentTypeSuffix(entry.contentType)\n let suffix = baseSuffix\n let name = getPerContentTypeName(baseName, suffix)\n let counter = 2\n while (usedNames.has(name)) {\n suffix = `${baseSuffix}${counter++}`\n name = getPerContentTypeName(baseName, suffix)\n }\n usedNames.add(name)\n return { name, suffix, schema: entry.schema!, keysToOmit: entry.keysToOmit, contentType: entry.contentType }\n })\n}\n\nexport function buildRequestConfigType(node: ast.OperationNode, resolver: RequestConfigResolver): string {\n const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : null\n const { isMultipleContentTypes, contentTypeUnion } = getContentTypeInfo(node)\n const configType = requestName ? `Partial<RequestConfig<${requestName}>>` : 'Partial<RequestConfig>'\n const configProps = ['client?: Client', isMultipleContentTypes ? `contentType?: ${contentTypeUnion}` : null].filter(Boolean).join('; ')\n\n return `${configType} & { ${configProps} }`\n}\n\nexport function buildOperationComments(node: ast.OperationNode, options: BuildOperationCommentsOptions = {}): Array<string> {\n const { link = 'pathTemplate', linkPosition = 'afterDeprecated', splitLines = false } = options\n const linkComment = getOperationLink(node, link)\n const comments =\n linkPosition === 'beforeDeprecated'\n ? [node.description && `@description ${node.description}`, node.summary && `@summary ${node.summary}`, linkComment, node.deprecated && '@deprecated']\n : [node.description && `@description ${node.description}`, node.summary && `@summary ${node.summary}`, node.deprecated && '@deprecated', linkComment]\n\n const filteredComments = comments.filter((comment): comment is string => Boolean(comment))\n\n if (!splitLines) {\n return filteredComments\n }\n\n return filteredComments.flatMap((text) => text.split(/\\r?\\n/).map((line) => line.trim())).filter((comment): comment is string => Boolean(comment))\n}\n\nexport function getOperationParameters(node: ast.OperationNode, options: { paramsCasing?: 'camelcase' } = {}): OperationParameterGroups {\n const params = caseParams(node.parameters, options.paramsCasing)\n\n return {\n path: params.filter((param) => param.in === 'path'),\n query: params.filter((param) => param.in === 'query'),\n header: params.filter((param) => param.in === 'header'),\n cookie: params.filter((param) => param.in === 'cookie'),\n }\n}\n\nexport function getStatusCodeNumber(statusCode: ast.StatusCode | number | string): number | null {\n const code = Number(statusCode)\n\n return Number.isNaN(code) ? null : code\n}\n\nexport function isSuccessStatusCode(statusCode: ast.StatusCode | number | string): boolean {\n const code = getStatusCodeNumber(statusCode)\n\n return code !== null && code >= 200 && code < 300\n}\n\nexport function isErrorStatusCode(statusCode: ast.StatusCode | number | string): boolean {\n const code = getStatusCodeNumber(statusCode)\n\n return code !== null && code >= 400\n}\n\nexport function getSuccessResponses<TResponse extends ResponseLike>(responses: ReadonlyArray<TResponse>): Array<TResponse> {\n return responses.filter((response) => isSuccessStatusCode(response.statusCode))\n}\n\nexport function getOperationSuccessResponses(node: ast.OperationNode): Array<ast.ResponseNode> {\n return getSuccessResponses(node.responses)\n}\n\nexport function getPrimarySuccessResponse(node: ast.OperationNode): ast.ResponseNode | null {\n return getOperationSuccessResponses(node)[0] ?? null\n}\n\nexport function resolveErrorNames(node: ast.OperationNode, resolver: ResponseStatusNameResolver): string[] {\n return node.responses\n .filter((response) => isErrorStatusCode(response.statusCode))\n .map((response) => resolver.resolveResponseStatusName(node, response.statusCode))\n}\n\nexport function resolveSuccessNames(node: ast.OperationNode, resolver: ResponseStatusNameResolver): string[] {\n return node.responses\n .filter((response) => isSuccessStatusCode(response.statusCode))\n .map((response) => resolver.resolveResponseStatusName(node, response.statusCode))\n}\n\nexport function resolveStatusCodeNames(node: ast.OperationNode, resolver: ResponseStatusNameResolver): string[] {\n return node.responses.map((response) => resolver.resolveResponseStatusName(node, response.statusCode))\n}\n\n/**\n * Builds the discriminated union type string for `dataReturnType: 'full'` return shapes.\n * Each member is `{ status: N; data: StatusNType; statusText: string }`.\n */\nexport function buildStatusUnionType(node: ast.OperationNode, resolver: ResponseStatusNameResolver): string {\n const members = node.responses.map((r) => {\n const typeName = resolver.resolveResponseStatusName(node, r.statusCode)\n const statusCode = Number.parseInt(r.statusCode, 10)\n const statusLiteral = Number.isNaN(statusCode) ? 'number' : String(statusCode)\n return `{ status: ${statusLiteral}; data: ${typeName}; statusText: string }`\n })\n if (members.length === 1) return members[0]!\n return `(${members.join(' | ')})`\n}\n\nconst typeNamesByResolver = new WeakMap<OperationTypeNameResolver, Map<string, string[]>>()\n\nexport function resolveOperationTypeNames(\n node: ast.OperationNode,\n resolver: OperationTypeNameResolver,\n options: ResolveOperationTypeNameOptions = {},\n): string[] {\n const cacheKey = `${node.operationId}\\0${options.paramsCasing ?? ''}\\0${options.order ?? ''}\\0${options.responseStatusNames ?? ''}\\0${(options.exclude ?? []).join(',')}`\n let byResolver = typeNamesByResolver.get(resolver)\n if (byResolver) {\n const cached = byResolver.get(cacheKey)\n if (cached) return cached\n } else {\n byResolver = new Map()\n typeNamesByResolver.set(resolver, byResolver)\n }\n\n const { path, query, header } = getOperationParameters(node, { paramsCasing: options.paramsCasing })\n const responseStatusNames =\n options.responseStatusNames === 'error'\n ? resolveErrorNames(node, resolver)\n : options.responseStatusNames === false\n ? []\n : resolveStatusCodeNames(node, resolver)\n const exclude = new Set(options.exclude ?? [])\n const paramNames = [\n ...path.map((param) => resolver.resolvePathParamsName(node, param)),\n ...query.map((param) => resolver.resolveQueryParamsName(node, param)),\n ...header.map((param) => resolver.resolveHeaderParamsName(node, param)),\n ]\n const bodyAndResponseNames = [node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : null, resolver.resolveResponseName(node)]\n const names =\n options.order === 'body-response-first'\n ? [...bodyAndResponseNames, ...paramNames, ...responseStatusNames]\n : [...paramNames, ...bodyAndResponseNames, ...responseStatusNames]\n\n const result = names.filter((name): name is string => Boolean(name) && !exclude.has(name as string))\n byResolver.set(cacheKey, result)\n return result\n}\n\nexport function resolveResponseTypes(node: ast.OperationNode, resolver: ResponseNameResolver): Array<[statusCode: number | 'default', typeName: string]> {\n const types: Array<[number | 'default', string]> = []\n\n for (const response of node.responses) {\n if (response.statusCode === 'default') {\n types.push(['default', resolver.resolveResponseName(node)])\n continue\n }\n\n const code = getStatusCodeNumber(response.statusCode)\n if (code === null) {\n continue\n }\n\n types.push([code, isSuccessStatusCode(code) ? resolver.resolveResponseName(node) : resolver.resolveResponseStatusName(node, response.statusCode)])\n }\n\n return types\n}\n\nexport function findSuccessStatusCode(responses: Array<{ statusCode: ast.StatusCode | number | string }>): ast.StatusCode | null {\n for (const response of responses) {\n if (isSuccessStatusCode(response.statusCode)) {\n return response.statusCode as ast.StatusCode\n }\n }\n\n return null\n}\n","import { Url } from '@internals/utils'\nimport { ast } from '@kubb/core'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport type { Transformer } from '../types.ts'\n\ntype Props = {\n name: string\n node: ast.OperationNode\n paramsCasing: 'camelcase' | undefined\n pathParamsType: 'object' | 'inline'\n transformer: Transformer | null | undefined\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\n\nexport const mutationKeyTransformer: Transformer = ({ node }) => {\n if (!node.path) return []\n return [`{ url: '${Url.toPath(node.path)}' }`]\n}\n\nexport function MutationKey({ name, paramsCasing, node, transformer }: Props): KubbReactNode {\n const paramsNode = ast.factory.createFunctionParameters({ params: [] })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n const keys = (transformer ?? mutationKeyTransformer)({ node, casing: paramsCasing })\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function.Arrow name={name} export params={paramsSignature} singleLine>\n {`[${keys.join(', ')}] as const`}\n </Function.Arrow>\n </File.Source>\n )\n}\n","import { getOperationParameters } from '@internals/shared'\nimport { ast } from '@kubb/core'\nimport { buildGroupParam, caseParams, createOperationParams, resolveGroupType, resolveParamType } from '@kubb/ast/utils'\nimport type { PluginTs, ResolverTs } from '@kubb/plugin-ts'\nimport type { ParamsCasing, ParamsType, PathParamsType } from './types.ts'\n\n/**\n * Returns the `TypeLiteral` members of a destructured group parameter, or `null`\n * for a plain named parameter.\n */\nfunction groupMembers(param: ast.FunctionParameterNode): ReadonlyArray<{ name: string; type: ast.TypeExpression; optional?: boolean }> | null {\n if (typeof param.name === 'string') return null\n return param.type && typeof param.type !== 'string' && param.type.kind === 'TypeLiteral' ? param.type.members : []\n}\n\n/**\n * Builds the shared `(…params, config = {})` parameter list for a TanStack\n * query-options function. The trailing `config` parameter is typed as a partial\n * `RequestConfig` with an optional `client`. Framework plugins wrap the result\n * when needed, for example vue-query applies `MaybeRefOrGetter`.\n */\nexport function buildQueryOptionsParams(\n node: ast.OperationNode,\n options: { paramsType: ParamsType; paramsCasing: ParamsCasing; pathParamsType: PathParamsType; resolver: ResolverTs },\n): ast.FunctionParametersNode {\n const { paramsType, paramsCasing, pathParamsType, resolver } = options\n const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : undefined\n\n return createOperationParams(node, {\n paramsType,\n pathParamsType: paramsType === 'object' ? 'object' : pathParamsType === 'object' ? 'object' : 'inline',\n paramsCasing,\n resolver,\n extraParams: [\n ast.factory.createFunctionParameter({\n name: 'config',\n type: requestName ? `Partial<RequestConfig<${requestName}>> & { client?: Client }` : 'Partial<RequestConfig> & { client?: Client }',\n default: '{}',\n }),\n ],\n })\n}\n\nexport function transformName(name: string, type: string, transformers?: { name?: (name: string, type?: string) => string }): string {\n return transformers?.name?.(name, type) || name\n}\n\ntype OverrideEntry<TOptions> = {\n type: string\n pattern: string | RegExp\n options?: Partial<TOptions>\n}\n\nfunction matchesPattern(node: ast.OperationNode, ov: { type: string; pattern: string | RegExp }): boolean {\n const { type, pattern } = ov\n const matches = (value: string) => (typeof pattern === 'string' ? value === pattern : pattern.test(value))\n if (type === 'operationId') return matches(node.operationId)\n if (type === 'tag') return node.tags.some((t) => matches(t))\n if (type === 'path') return node.path !== undefined && matches(node.path)\n if (type === 'method') return node.method !== undefined && matches(node.method)\n return false\n}\n\n/**\n * Resolves per-operation overrides (first matching override wins).\n *\n * @example\n * ```ts\n * const opts = resolveOperationOverrides(node, override)\n * const queryOpts = 'query' in opts ? opts.query : defaultQuery\n * ```\n */\nexport function resolveOperationOverrides<TOptions>(node: ast.OperationNode, override?: ReadonlyArray<OverrideEntry<TOptions>>): Partial<TOptions> {\n if (!override) return {}\n const match = override.find((ov) => matchesPattern(node, ov))\n return match?.options ?? {}\n}\n\ntype ZodSchemaNameResolverLike = {\n resolveResponseName?: (node: ast.OperationNode) => string | undefined\n resolveDataName?: (node: ast.OperationNode) => string | undefined\n resolveQueryParamsName?: (node: ast.OperationNode, param: ast.ParameterNode) => string | undefined\n}\n\ntype ParserOption = false | 'zod' | { request?: 'zod'; response?: 'zod' } | undefined\n\n/**\n * Returns `'zod'` when response-direction parsing is enabled.\n * The string shorthand `'zod'` also enables response parsing.\n */\nexport function resolveResponseParser(parser: ParserOption): 'zod' | null {\n if (!parser) return null\n if (parser === 'zod') return 'zod'\n return parser.response ?? null\n}\n\n/**\n * Returns `'zod'` when request body parsing is enabled.\n * The string shorthand `'zod'` also enables request body parsing (existing behavior).\n */\nexport function resolveRequestParser(parser: ParserOption): 'zod' | null {\n if (!parser) return null\n if (parser === 'zod') return 'zod'\n return parser.request ?? null\n}\n\n/**\n * Returns `'zod'` when query-params parsing is enabled.\n * Only the object form `{ request: 'zod' }` enables this. `parser: 'zod'` does not.\n */\nexport function resolveQueryParamsParser(parser: ParserOption): 'zod' | null {\n if (!parser || parser === 'zod') return null\n return parser.request ?? null\n}\n\n/**\n * Collects the Zod schema import names for an operation based on the active parser directions.\n *\n * - `parser: 'zod'`: response and request body names (backward-compatible behavior).\n * - `parser: { request: 'zod' }`: request body and query params names.\n * - `parser: { response: 'zod' }`: response name only.\n * - `parser: { request: 'zod', response: 'zod' }`: all three.\n *\n * Returns an empty array when no resolver is provided or `parser` is falsy.\n */\nexport function resolveZodSchemaNames(node: ast.OperationNode, zodResolver: ZodSchemaNameResolverLike | null | undefined, parser: ParserOption): string[] {\n if (!zodResolver || !parser) return []\n const { query: queryParams } = getOperationParameters(node)\n return [\n resolveResponseParser(parser) === 'zod' ? zodResolver.resolveResponseName?.(node) : null,\n resolveRequestParser(parser) === 'zod' && node.requestBody?.content?.[0]?.schema ? zodResolver.resolveDataName?.(node) : null,\n resolveQueryParamsParser(parser) === 'zod' && queryParams.length > 0 ? zodResolver.resolveQueryParamsName?.(node, queryParams[0]!) : null,\n ].filter((n): n is string => Boolean(n))\n}\n\n/**\n * Build QueryKey params: pathParams + data + queryParams (NO headers, NO config).\n */\nexport function buildQueryKeyParams(\n node: ast.OperationNode,\n options: {\n pathParamsType: 'object' | 'inline'\n paramsCasing: 'camelcase' | undefined\n resolver: PluginTs['resolver']\n },\n): ast.FunctionParametersNode {\n const { pathParamsType, paramsCasing, resolver } = options\n\n const casedParams = caseParams(node.parameters, paramsCasing)\n const pathParams = casedParams.filter((p) => p.in === 'path')\n const queryParams = casedParams.filter((p) => p.in === 'query')\n\n const queryGroupType = resolveGroupType({ node, params: queryParams, group: 'query', resolver })\n\n const bodyType = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : null\n const bodyRequired = node.requestBody?.required ?? false\n\n const params: Array<ast.FunctionParameterNode> = []\n\n // Path params\n if (pathParams.length) {\n const pathChildren = pathParams.map((p) => ({ name: p.name, type: resolveParamType({ node, param: p, resolver }), optional: !p.required }))\n if (pathParamsType === 'object') {\n params.push(ast.factory.createFunctionParameter({ properties: pathChildren, default: pathChildren.every((c) => c.optional) ? '{}' : undefined }))\n } else {\n params.push(...pathChildren.map((child) => ast.factory.createFunctionParameter(child)))\n }\n }\n\n // Request body\n if (bodyType) {\n params.push(ast.factory.createFunctionParameter({ name: 'data', type: bodyType, optional: !bodyRequired }))\n }\n\n // Query params\n params.push(...buildGroupParam({ name: 'params', node, params: queryParams, groupType: queryGroupType, resolver, wrapType: (type) => type }))\n\n return ast.factory.createFunctionParameters({ params })\n}\n\n/**\n * Collect the names of the required params (no default) that drive the `enabled`\n * guard. These are exactly the params that should be made optional in the\n * generated signatures so callers can pass `undefined` to reach the disabled state.\n */\nexport function getEnabledParamNames(paramsNode: ast.FunctionParametersNode): string[] {\n const required: string[] = []\n for (const param of paramsNode.params) {\n const members = groupMembers(param)\n if (members) {\n for (const member of members) {\n if (!member.optional) required.push(member.name)\n }\n } else if (typeof param.name === 'string' && !param.optional && param.default === undefined) {\n required.push(param.name)\n }\n }\n return required\n}\n\n/**\n * Return a copy of `paramsNode` with the named params marked optional.\n *\n * Used to align signatures with the `enabled` guard: the guard already disables\n * the query while a param is falsy, so the param should accept `undefined`. The\n * change is type-only — the `queryFn` keeps calling the client with a non-null\n * assertion (see `injectNonNullAssertions`), so the emitted runtime is unchanged.\n */\nexport function markParamsOptional(paramsNode: ast.FunctionParametersNode, names: ReadonlyArray<string>): ast.FunctionParametersNode {\n if (names.length === 0) return paramsNode\n const nameSet = new Set(names)\n const params = paramsNode.params.map((param) => {\n const members = groupMembers(param)\n if (members) {\n const next = members.map((member) => (nameSet.has(member.name) ? { ...member, optional: true } : member))\n return { ...param, type: ast.factory.createTypeLiteral({ members: next }) }\n }\n return typeof param.name === 'string' && nameSet.has(param.name)\n ? ast.factory.createFunctionParameter({ name: param.name, type: param.type, rest: param.rest, optional: true })\n : param\n })\n return ast.factory.createFunctionParameters({ params })\n}\n\n/**\n * Add a non-null assertion (`!`) to the named params inside a printed client-call\n * string. Bridges the type gap created by `markParamsOptional` while keeping the\n * runtime identical (the `!` is erased at compile time).\n *\n * Handles destructured shorthand groups (`{ petId }` → `{ petId: petId! }`) and\n * standalone identifiers (`params` → `params!`).\n */\nexport function injectNonNullAssertions(callStr: string, names: ReadonlyArray<string>): string {\n if (names.length === 0) return callStr\n const nameSet = new Set(names)\n\n // Step 1: destructured shorthand group `{ petId }` → `{ petId: petId! }`\n let result = callStr.replace(/\\{\\s*([\\w,\\s]+)\\s*\\}(?=\\s*,)/g, (match, inner: string) => {\n if (inner.includes(':') || inner.includes('...')) return match\n const keys = inner\n .split(',')\n .map((k: string) => k.trim())\n .filter(Boolean)\n if (!keys.some((k) => nameSet.has(k))) return match\n const rebuilt = keys.map((k) => (nameSet.has(k) ? `${k}: ${k}!` : k)).join(', ')\n return `{ ${rebuilt} }`\n })\n\n // Step 2: standalone identifiers like `params`, `data`\n result = result.replace(/(?<![{.:?])\\b(\\w+)\\b(?=\\s*,)/g, (match, name: string) => (nameSet.has(name) ? `${name}!` : match))\n\n return result\n}\n","import { getOperationParameters } from '@internals/shared'\nimport { Url } from '@internals/utils'\nimport type { ast } from '@kubb/core'\nimport type { PluginTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function, Type } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport type { Transformer } from '../types.ts'\nimport { buildQueryKeyParams, getEnabledParamNames, markParamsOptional } from '../utils.ts'\n\ntype Props = {\n name: string\n typeName: string\n node: ast.OperationNode\n tsResolver: PluginTs['resolver']\n paramsCasing: 'camelcase' | undefined\n pathParamsType: 'object' | 'inline'\n transformer: Transformer | null | undefined\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\n\nexport const queryKeyTransformer: Transformer = ({ node, casing }) => {\n if (!node.path) return []\n const hasQueryParams = getOperationParameters(node).query.length > 0\n const hasRequestBody = !!node.requestBody?.content?.[0]?.schema\n\n return [\n Url.toObject(node.path, { type: 'path', stringify: true, casing }),\n hasQueryParams ? '...(params ? [params] : [])' : null,\n hasRequestBody ? '...(data ? [data] : [])' : null,\n ].filter(Boolean) as Array<string>\n}\n\nexport function QueryKey({ name, node, tsResolver, paramsCasing, pathParamsType, typeName, transformer }: Props): KubbReactNode {\n const baseParamsNode = buildQueryKeyParams(node, { pathParamsType, paramsCasing, resolver: tsResolver })\n const paramsNode = markParamsOptional(baseParamsNode, getEnabledParamNames(baseParamsNode))\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n const keys = (transformer ?? queryKeyTransformer)({ node, casing: paramsCasing })\n\n return (\n <>\n <File.Source name={name} isExportable isIndexable>\n <Function.Arrow name={name} export params={paramsSignature} singleLine>\n {`[${keys.join(', ')}] as const`}\n </Function.Arrow>\n </File.Source>\n <File.Source name={typeName} isTypeOnly>\n <Type name={typeName}>{`ReturnType<typeof ${name}>`}</Type>\n </File.Source>\n </>\n )\n}\n","import { createOperationParams } from '@kubb/ast/utils'\nimport { ast } from '@kubb/core'\nimport type { ResolverTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function, Type } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport type { PluginSwr } from '../types.ts'\nimport { buildRequestConfigType, buildStatusUnionType, getComments, resolveErrorNames } from '../utils.ts'\n\ntype Props = {\n name: string\n clientName: string\n mutationKeyName: string\n mutationKeyTypeName: string\n mutationArgTypeName: string\n node: ast.OperationNode\n tsResolver: ResolverTs\n paramsCasing: PluginSwr['resolvedOptions']['paramsCasing']\n paramsType: PluginSwr['resolvedOptions']['paramsType']\n pathParamsType: PluginSwr['resolvedOptions']['pathParamsType']\n dataReturnType: PluginSwr['resolvedOptions']['client']['dataReturnType']\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\nconst callPrinter = functionPrinter({ mode: 'call' })\nconst keysPrinter = functionPrinter({ mode: 'call' })\n\nfunction createMutationArgParams(\n node: ast.OperationNode,\n options: {\n paramsCasing: PluginSwr['resolvedOptions']['paramsCasing']\n resolver: ResolverTs\n },\n): ast.FunctionParametersNode {\n return createOperationParams(node, {\n paramsType: 'inline',\n pathParamsType: 'inline',\n paramsCasing: options.paramsCasing,\n resolver: options.resolver,\n })\n}\n\nfunction buildMutationParamsNode(\n node: ast.OperationNode,\n options: {\n paramsCasing: PluginSwr['resolvedOptions']['paramsCasing']\n dataReturnType: PluginSwr['resolvedOptions']['client']['dataReturnType']\n mutationKeyTypeName: string\n mutationArgTypeName: string\n resolver: ResolverTs\n },\n): ast.FunctionParametersNode {\n const { dataReturnType, mutationKeyTypeName, mutationArgTypeName, resolver } = options\n const responseName = resolver.resolveResponseName(node)\n const errorNames = resolveErrorNames(node, resolver)\n\n const TData = dataReturnType === 'data' ? responseName : buildStatusUnionType(node, resolver)\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n\n return ast.factory.createFunctionParameters({\n params: [\n ast.factory.createFunctionParameter({\n name: 'options',\n type: `{\n mutation?: SWRMutationConfiguration<${TData}, ${TError}, ${mutationKeyTypeName} | null, ${mutationArgTypeName}> & { throwOnError?: boolean },\n client?: ${buildRequestConfigType(node, resolver)},\n shouldFetch?: boolean,\n}`,\n default: '{}',\n }),\n ],\n })\n}\n\nexport function Mutation({\n name,\n clientName,\n mutationKeyName,\n mutationKeyTypeName,\n mutationArgTypeName,\n paramsCasing,\n paramsType,\n pathParamsType,\n dataReturnType,\n node,\n tsResolver,\n}: Props): KubbReactNode {\n const responseName = tsResolver.resolveResponseName(node)\n const errorNames = resolveErrorNames(node, tsResolver)\n\n const TData = dataReturnType === 'data' ? responseName : buildStatusUnionType(node, tsResolver)\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n\n const mutationArgParamsNode = createMutationArgParams(node, { paramsCasing, resolver: tsResolver })\n const hasMutationParams = mutationArgParamsNode.params.length > 0\n const argTypeBody = hasMutationParams ? (declarationPrinter.print(mutationArgParamsNode) ?? '') : ''\n const argKeysStr = hasMutationParams ? (keysPrinter.print(mutationArgParamsNode) ?? '') : ''\n\n const generics = [TData, TError, `${mutationKeyTypeName} | null`, mutationArgTypeName]\n\n const paramsNode = buildMutationParamsNode(node, {\n paramsCasing,\n dataReturnType,\n mutationKeyTypeName,\n mutationArgTypeName,\n resolver: tsResolver,\n })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n\n const clientCallParamsNode = createOperationParams(node, {\n paramsType,\n pathParamsType: paramsType === 'object' ? 'object' : pathParamsType === 'object' ? 'object' : 'inline',\n paramsCasing,\n resolver: tsResolver,\n extraParams: [\n ast.factory.createFunctionParameter({\n name: 'config',\n type: buildRequestConfigType(node, tsResolver),\n default: '{}',\n }),\n ],\n })\n const clientCallStr = callPrinter.print(clientCallParamsNode) ?? ''\n\n return (\n <>\n <File.Source name={mutationArgTypeName} isExportable isIndexable isTypeOnly>\n <Type name={mutationArgTypeName} export>\n {hasMutationParams ? `{ ${argTypeBody} }` : 'never'}\n </Type>\n </File.Source>\n <File.Source name={name} isExportable isIndexable>\n <Function name={name} export params={paramsSignature} JSDoc={{ comments: getComments(node) }}>\n {`\n const { mutation: mutationOptions, client: config = {}, shouldFetch = true } = options ?? {}\n const mutationKey = ${mutationKeyName}()\n\n return useSWRMutation<${generics.join(', ')}>(\n shouldFetch ? mutationKey : null,\n async (_url${hasMutationParams ? `, { arg: { ${argKeysStr} } }` : ''}) => {\n return ${clientName}(${clientCallStr})\n },\n mutationOptions\n )\n `}\n </Function>\n </File.Source>\n </>\n )\n}\n","import type { Transformer } from '@internals/tanstack-query'\nimport { MutationKey as SharedMutationKey } from '@internals/tanstack-query'\nimport type { ast } from '@kubb/core'\nimport { File, Type } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\n\ntype Props = {\n name: string\n typeName: string\n node: ast.OperationNode\n paramsCasing: 'camelcase' | undefined\n pathParamsType: 'object' | 'inline'\n transformer: Transformer | undefined\n}\n\nexport function MutationKey({ name, typeName, node, paramsCasing, pathParamsType, transformer }: Props): KubbReactNode {\n return (\n <>\n <SharedMutationKey name={name} node={node} paramsCasing={paramsCasing} pathParamsType={pathParamsType} transformer={transformer} />\n <File.Source name={typeName} isExportable isIndexable isTypeOnly>\n <Type export name={typeName}>{`ReturnType<typeof ${name}>`}</Type>\n </File.Source>\n </>\n )\n}\n","import type { ast } from '@kubb/core'\nimport type { ResolverTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport { buildQueryOptionsParams, getEnabledParamNames, injectNonNullAssertions, markParamsOptional } from '@internals/tanstack-query'\nimport type { PluginSwr } from '../types.ts'\nimport { buildQueryKeyParams } from '../utils.ts'\n\ntype Props = {\n name: string\n clientName: string\n node: ast.OperationNode\n tsResolver: ResolverTs\n paramsCasing: PluginSwr['resolvedOptions']['paramsCasing']\n paramsType: PluginSwr['resolvedOptions']['paramsType']\n pathParamsType: PluginSwr['resolvedOptions']['pathParamsType']\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\nconst callPrinter = functionPrinter({ mode: 'call' })\n\nexport function getQueryOptionsParams(\n node: ast.OperationNode,\n options: {\n paramsType: PluginSwr['resolvedOptions']['paramsType']\n paramsCasing: PluginSwr['resolvedOptions']['paramsCasing']\n pathParamsType: PluginSwr['resolvedOptions']['pathParamsType']\n resolver: ResolverTs\n },\n): ast.FunctionParametersNode {\n return buildQueryOptionsParams(node, options)\n}\n\nexport function QueryOptions({ name, clientName, node, tsResolver, paramsCasing, paramsType, pathParamsType }: Props): KubbReactNode {\n const queryKeyParamsNode = buildQueryKeyParams(node, { pathParamsType, paramsCasing, resolver: tsResolver })\n const enabledNames = getEnabledParamNames(queryKeyParamsNode)\n\n const paramsNode = markParamsOptional(getQueryOptionsParams(node, { paramsType, paramsCasing, pathParamsType, resolver: tsResolver }), enabledNames)\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n const clientCallStr = injectNonNullAssertions(callPrinter.print(paramsNode) ?? '', enabledNames)\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function name={name} export params={paramsSignature}>\n {`\n return {\n fetcher: async () => {\n return ${clientName}(${clientCallStr})\n },\n }\n`}\n </Function>\n </File.Source>\n )\n}\n","import { createOperationParams } from '@kubb/ast/utils'\nimport { ast } from '@kubb/core'\nimport type { ResolverTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport { getEnabledParamNames, markParamsOptional } from '@internals/tanstack-query'\nimport type { PluginSwr } from '../types.ts'\nimport { buildQueryKeyParams, buildStatusUnionType, getComments, resolveErrorNames } from '../utils.ts'\nimport { getQueryOptionsParams } from './QueryOptions.tsx'\n\ntype Props = {\n name: string\n queryOptionsName: string\n queryKeyName: string\n queryKeyTypeName: string\n node: ast.OperationNode\n tsResolver: ResolverTs\n paramsCasing: PluginSwr['resolvedOptions']['paramsCasing']\n paramsType: PluginSwr['resolvedOptions']['paramsType']\n pathParamsType: PluginSwr['resolvedOptions']['pathParamsType']\n dataReturnType: PluginSwr['resolvedOptions']['client']['dataReturnType']\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\nconst callPrinter = functionPrinter({ mode: 'call' })\n\nfunction buildQueryParamsNode(\n node: ast.OperationNode,\n options: {\n paramsType: PluginSwr['resolvedOptions']['paramsType']\n paramsCasing: PluginSwr['resolvedOptions']['paramsCasing']\n pathParamsType: PluginSwr['resolvedOptions']['pathParamsType']\n dataReturnType: PluginSwr['resolvedOptions']['client']['dataReturnType']\n resolver: ResolverTs\n },\n): ast.FunctionParametersNode {\n const { paramsType, paramsCasing, pathParamsType, dataReturnType, resolver } = options\n const responseName = resolver.resolveResponseName(node)\n const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : undefined\n const errorNames = resolveErrorNames(node, resolver)\n\n const TData = dataReturnType === 'data' ? responseName : buildStatusUnionType(node, resolver)\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n\n const optionsParam = ast.factory.createFunctionParameter({\n name: 'options',\n type: `{\n query?: SWRConfiguration<${[TData, TError].join(', ')}>,\n client?: ${requestName ? `Partial<RequestConfig<${requestName}>> & { client?: Client }` : 'Partial<RequestConfig> & { client?: Client }'},\n shouldFetch?: boolean,\n immutable?: boolean\n}`,\n default: '{}',\n })\n\n return createOperationParams(node, {\n paramsType,\n pathParamsType: paramsType === 'object' ? 'object' : pathParamsType === 'object' ? 'object' : 'inline',\n paramsCasing,\n resolver,\n extraParams: [optionsParam],\n })\n}\n\nexport function Query({\n name,\n queryKeyTypeName,\n queryOptionsName,\n queryKeyName,\n paramsType,\n paramsCasing,\n pathParamsType,\n dataReturnType,\n node,\n tsResolver,\n}: Props): KubbReactNode {\n const responseName = tsResolver.resolveResponseName(node)\n const errorNames = resolveErrorNames(node, tsResolver)\n\n const TData = dataReturnType === 'data' ? responseName : buildStatusUnionType(node, tsResolver)\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n const generics = [TData, TError, `${queryKeyTypeName} | null`]\n\n const queryKeyParamsNode = buildQueryKeyParams(node, { pathParamsType, paramsCasing, resolver: tsResolver })\n const queryKeyParamsCall = callPrinter.print(queryKeyParamsNode) ?? ''\n const enabledNames = getEnabledParamNames(queryKeyParamsNode)\n\n const queryOptionsParamsNode = getQueryOptionsParams(node, { paramsType, paramsCasing, pathParamsType, resolver: tsResolver })\n const queryOptionsParamsCall = callPrinter.print(queryOptionsParamsNode) ?? ''\n\n const paramsNode = markParamsOptional(\n buildQueryParamsNode(node, { paramsType, paramsCasing, pathParamsType, dataReturnType, resolver: tsResolver }),\n enabledNames,\n )\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n\n // SWR has no `enabled` option; fold the param-presence check into the null-key gate\n // so passing `undefined` for a required param disables the request (mirrors React Query #60).\n const shouldFetchExpr = enabledNames.length ? `shouldFetch && !!(${enabledNames.join(' && ')})` : 'shouldFetch'\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function name={name} export params={paramsSignature} JSDoc={{ comments: getComments(node) }}>\n {`\n const { query: queryOptions, client: config = {}, shouldFetch = true, immutable } = options ?? {}\n\n const queryKey = ${queryKeyName}(${queryKeyParamsCall})\n\n return useSWR<${generics.join(', ')}>(\n ${shouldFetchExpr} ? queryKey : null,\n {\n ...${queryOptionsName}(${queryOptionsParamsCall}),\n ...(immutable ? {\n revalidateIfStale: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false\n } : { }),\n ...queryOptions,\n }\n )\n `}\n </Function>\n </File.Source>\n )\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_components = require("./components-C8FJ3-Cb.cjs");
2
+ const require_components = require("./components-DxWGjLWg.cjs");
3
3
  exports.Mutation = require_components.Mutation;
4
4
  exports.MutationKey = require_components.MutationKey;
5
5
  exports.Query = require_components.Query;
@@ -1,5 +1,5 @@
1
1
  import { t as __name } from "./chunk-C0LytTxp.js";
2
- import { i as Transformer, n as PluginSwr, r as QueryKey } from "./types-Dz_j0Bqv.js";
2
+ import { i as Transformer, n as PluginSwr, r as QueryKey } from "./types-DcBaH0gA.js";
3
3
  import { ast } from "@kubb/core";
4
4
  import { ResolverTs } from "@kubb/plugin-ts";
5
5
  import { KubbReactNode } from "@kubb/renderer-jsx/types";
@@ -1,2 +1,2 @@
1
- import { a as QueryKey, i as Mutation, n as QueryOptions, r as MutationKey, t as Query } from "./components-CR9NLFcO.js";
1
+ import { a as QueryKey, i as Mutation, n as QueryOptions, r as MutationKey, t as Query } from "./components-mWBRE6E4.js";
2
2
  export { Mutation, MutationKey, Query, QueryKey, QueryOptions };
@@ -1,4 +1,4 @@
1
- const require_components = require("./components-C8FJ3-Cb.cjs");
1
+ const require_components = require("./components-DxWGjLWg.cjs");
2
2
  let node_path = require("node:path");
3
3
  node_path = require_components.__toESM(node_path);
4
4
  let _kubb_core = require("@kubb/core");
@@ -419,4 +419,4 @@ Object.defineProperty(exports, "queryGenerator", {
419
419
  }
420
420
  });
421
421
 
422
- //# sourceMappingURL=generators-mw3FvFJD.cjs.map
422
+ //# sourceMappingURL=generators-CJ4ziuNk.cjs.map