@kubb/plugin-react-query 5.0.0-beta.30 → 5.0.0-beta.33

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 (35) hide show
  1. package/dist/{components-CDmg-RPi.js → components-BVmVgpLX.js} +142 -62
  2. package/dist/components-BVmVgpLX.js.map +1 -0
  3. package/dist/{components-MPBTffPl.cjs → components-DLUeLMsz.cjs} +147 -61
  4. package/dist/components-DLUeLMsz.cjs.map +1 -0
  5. package/dist/components.cjs +1 -1
  6. package/dist/components.d.ts +3 -1
  7. package/dist/components.js +1 -1
  8. package/dist/{generators-BtsWNz-6.cjs → generators--AcF4Y4n.cjs} +35 -153
  9. package/dist/generators--AcF4Y4n.cjs.map +1 -0
  10. package/dist/{generators-Bma51Uar.js → generators-BFn9CLBS.js} +36 -154
  11. package/dist/generators-BFn9CLBS.js.map +1 -0
  12. package/dist/generators.cjs +1 -1
  13. package/dist/generators.js +1 -1
  14. package/dist/index.cjs +40 -10
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.js +40 -10
  17. package/dist/index.js.map +1 -1
  18. package/extension.yaml +9 -32
  19. package/package.json +8 -8
  20. package/src/components/InfiniteQuery.tsx +13 -8
  21. package/src/components/InfiniteQueryOptions.tsx +8 -8
  22. package/src/components/Query.tsx +6 -1
  23. package/src/components/QueryOptions.tsx +12 -8
  24. package/src/components/SuspenseInfiniteQueryOptions.tsx +0 -6
  25. package/src/generators/hookOptionsGenerator.tsx +12 -22
  26. package/src/generators/infiniteQueryGenerator.tsx +19 -22
  27. package/src/generators/mutationGenerator.tsx +19 -22
  28. package/src/generators/queryGenerator.tsx +19 -22
  29. package/src/generators/suspenseInfiniteQueryGenerator.tsx +19 -22
  30. package/src/generators/suspenseQueryGenerator.tsx +20 -22
  31. package/src/plugin.ts +4 -16
  32. package/dist/components-CDmg-RPi.js.map +0 -1
  33. package/dist/components-MPBTffPl.cjs.map +0 -1
  34. package/dist/generators-Bma51Uar.js.map +0 -1
  35. package/dist/generators-BtsWNz-6.cjs.map +0 -1
@@ -1,5 +1,5 @@
1
- import { getOperationParameters } from '@internals/shared'
2
- import { defineGenerator } from '@kubb/core'
1
+ import { getOperationParameters, operationFileEntry } from '@internals/shared'
2
+ import { ast, defineGenerator } from '@kubb/core'
3
3
  import { File, jsxRendererSync, Type } from '@kubb/renderer-jsx'
4
4
  import type { KubbReactNode } from '@kubb/renderer-jsx/types'
5
5
  import { difference } from 'remeda'
@@ -36,6 +36,7 @@ export const hookOptionsGenerator = defineGenerator<PluginReactQuery>({
36
36
  const hookOptions: Record<string, string> = {}
37
37
 
38
38
  for (const node of nodes) {
39
+ if (!ast.isHttpOperationNode(node)) continue
39
40
  const opOverrides = resolveOperationOverrides(node, override)
40
41
  const nodeQuery: QueryOption = 'query' in opOverrides ? (opOverrides.query as QueryOption) : query
41
42
  const nodeMutation: MutationOption = 'mutation' in opOverrides ? (opOverrides.mutation as MutationOption) : mutation
@@ -57,20 +58,14 @@ export const hookOptionsGenerator = defineGenerator<PluginReactQuery>({
57
58
  if (isQueryOp) {
58
59
  const queryOptionsName = resolver.resolveQueryOptionsName(node)
59
60
  const queryHookName = resolver.resolveQueryName(node)
60
- const queryHookFile = resolver.resolveFile(
61
- { name: queryHookName, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
62
- { root, output, group: group ?? undefined },
63
- )
61
+ const queryHookFile = resolver.resolveFile(operationFileEntry(node, queryHookName), { root, output, group: group ?? undefined })
64
62
  imports.push(<File.Import name={[queryOptionsName]} root={hookOptionsFile.path} path={queryHookFile.path} />)
65
63
  hookOptions[queryHookName] = `Partial<ReturnType<typeof ${queryOptionsName}>>`
66
64
 
67
65
  if (isSuspenseOp) {
68
66
  const suspenseOptionsName = resolver.resolveSuspenseQueryOptionsName(node)
69
67
  const suspenseHookName = resolver.resolveSuspenseQueryName(node)
70
- const suspenseHookFile = resolver.resolveFile(
71
- { name: suspenseHookName, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
72
- { root, output, group: group ?? undefined },
73
- )
68
+ const suspenseHookFile = resolver.resolveFile(operationFileEntry(node, suspenseHookName), { root, output, group: group ?? undefined })
74
69
  imports.push(<File.Import name={[suspenseOptionsName]} root={hookOptionsFile.path} path={suspenseHookFile.path} />)
75
70
  hookOptions[suspenseHookName] = `Partial<ReturnType<typeof ${suspenseOptionsName}>>`
76
71
  }
@@ -84,20 +79,18 @@ export const hookOptionsGenerator = defineGenerator<PluginReactQuery>({
84
79
  if (hasQueryParam) {
85
80
  const infiniteOptionsName = resolver.resolveInfiniteQueryOptionsName(node)
86
81
  const infiniteHookName = resolver.resolveInfiniteQueryName(node)
87
- const infiniteHookFile = resolver.resolveFile(
88
- { name: infiniteHookName, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
89
- { root, output, group: group ?? undefined },
90
- )
82
+ const infiniteHookFile = resolver.resolveFile(operationFileEntry(node, infiniteHookName), { root, output, group: group ?? undefined })
91
83
  imports.push(<File.Import name={[infiniteOptionsName]} root={hookOptionsFile.path} path={infiniteHookFile.path} />)
92
84
  hookOptions[infiniteHookName] = `Partial<ReturnType<typeof ${infiniteOptionsName}>>`
93
85
 
94
86
  if (isSuspenseOp) {
95
87
  const suspenseInfiniteOptionsName = resolver.resolveSuspenseInfiniteQueryOptionsName(node)
96
88
  const suspenseInfiniteHookName = resolver.resolveSuspenseInfiniteQueryName(node)
97
- const suspenseInfiniteHookFile = resolver.resolveFile(
98
- { name: suspenseInfiniteHookName, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
99
- { root, output, group: group ?? undefined },
100
- )
89
+ const suspenseInfiniteHookFile = resolver.resolveFile(operationFileEntry(node, suspenseInfiniteHookName), {
90
+ root,
91
+ output,
92
+ group: group ?? undefined,
93
+ })
101
94
  imports.push(<File.Import name={[suspenseInfiniteOptionsName]} root={hookOptionsFile.path} path={suspenseInfiniteHookFile.path} />)
102
95
  hookOptions[suspenseInfiniteHookName] = `Partial<ReturnType<typeof ${suspenseInfiniteOptionsName}>>`
103
96
  }
@@ -108,10 +101,7 @@ export const hookOptionsGenerator = defineGenerator<PluginReactQuery>({
108
101
  if (isMutationOp) {
109
102
  const mutationOptionsName = resolver.resolveMutationOptionsName(node)
110
103
  const mutationHookName = resolver.resolveMutationName(node)
111
- const mutationHookFile = resolver.resolveFile(
112
- { name: mutationHookName, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
113
- { root, output, group: group ?? undefined },
114
- )
104
+ const mutationHookFile = resolver.resolveFile(operationFileEntry(node, mutationHookName), { root, output, group: group ?? undefined })
115
105
  imports.push(<File.Import name={[mutationOptionsName]} root={hookOptionsFile.path} path={mutationHookFile.path} />)
116
106
  hookOptions[mutationHookName] = `Partial<ReturnType<typeof ${mutationOptionsName}>>`
117
107
  }
@@ -1,7 +1,7 @@
1
1
  import path from 'node:path'
2
- import { getOperationParameters, resolveOperationTypeNames } from '@internals/shared'
2
+ import { getOperationParameters, operationFileEntry, resolveOperationTypeNames } from '@internals/shared'
3
3
  import { resolveZodSchemaNames } from '@internals/tanstack-query'
4
- import { defineGenerator } from '@kubb/core'
4
+ import { ast, defineGenerator } from '@kubb/core'
5
5
  import { Client, pluginClientName } from '@kubb/plugin-client'
6
6
  import { pluginTsName } from '@kubb/plugin-ts'
7
7
  import { pluginZodName } from '@kubb/plugin-zod'
@@ -20,6 +20,7 @@ export const infiniteQueryGenerator = defineGenerator<PluginReactQuery>({
20
20
  name: 'react-infinite-query',
21
21
  renderer: jsxRendererSync,
22
22
  operation(node, ctx) {
23
+ if (!ast.isHttpOperationNode(node)) return null
23
24
  const { config, driver, resolver, root } = ctx
24
25
  const { output, query, mutation, infinite, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, customOptions } = ctx.options
25
26
 
@@ -54,14 +55,12 @@ export const infiniteQueryGenerator = defineGenerator<PluginReactQuery>({
54
55
  const clientBaseName = resolver.resolveInfiniteClientName(node)
55
56
 
56
57
  const meta = {
57
- file: resolver.resolveFile(
58
- { name: queryName, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
59
- { root, output, group: group ?? undefined },
60
- ),
61
- fileTs: tsResolver.resolveFile(
62
- { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
63
- { root, output: pluginTs.options?.output ?? output, group: pluginTs.options?.group ?? undefined },
64
- ),
58
+ file: resolver.resolveFile(operationFileEntry(node, queryName), { root, output, group: group ?? undefined }),
59
+ fileTs: tsResolver.resolveFile(operationFileEntry(node, node.operationId), {
60
+ root,
61
+ output: pluginTs.options?.output ?? output,
62
+ group: pluginTs.options?.group ?? undefined,
63
+ }),
65
64
  }
66
65
 
67
66
  const importedTypeNames = resolveOperationTypeNames(node, tsResolver, {
@@ -73,10 +72,11 @@ export const infiniteQueryGenerator = defineGenerator<PluginReactQuery>({
73
72
  const pluginZod = parser === 'zod' ? driver.getPlugin(pluginZodName) : null
74
73
  const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : null
75
74
  const fileZod = zodResolver
76
- ? zodResolver.resolveFile(
77
- { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
78
- { root, output: pluginZod?.options?.output ?? output, group: pluginZod?.options?.group ?? undefined },
79
- )
75
+ ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
76
+ root,
77
+ output: pluginZod?.options?.output ?? output,
78
+ group: pluginZod?.options?.group ?? undefined,
79
+ })
80
80
  : null
81
81
  const zodSchemaNames = resolveZodSchemaNames(node, zodResolver)
82
82
 
@@ -86,14 +86,11 @@ export const infiniteQueryGenerator = defineGenerator<PluginReactQuery>({
86
86
  const clientResolver = shouldUseClientPlugin ? driver.getResolver(pluginClientName) : null
87
87
 
88
88
  const clientFile = shouldUseClientPlugin
89
- ? clientResolver?.resolveFile(
90
- { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
91
- {
92
- root,
93
- output: clientPlugin?.options?.output ?? output,
94
- group: clientPlugin?.options?.group ?? undefined,
95
- },
96
- )
89
+ ? clientResolver?.resolveFile(operationFileEntry(node, node.operationId), {
90
+ root,
91
+ output: clientPlugin?.options?.output ?? output,
92
+ group: clientPlugin?.options?.group ?? undefined,
93
+ })
97
94
  : null
98
95
 
99
96
  const resolvedClientName = shouldUseClientPlugin ? (clientResolver?.resolveName(node.operationId) ?? clientBaseName) : clientBaseName
@@ -1,7 +1,7 @@
1
1
  import path from 'node:path'
2
- import { resolveOperationTypeNames } from '@internals/shared'
2
+ import { operationFileEntry, resolveOperationTypeNames } from '@internals/shared'
3
3
  import { resolveZodSchemaNames } from '@internals/tanstack-query'
4
- import { defineGenerator } from '@kubb/core'
4
+ import { ast, defineGenerator } from '@kubb/core'
5
5
  import { Client, pluginClientName } from '@kubb/plugin-client'
6
6
  import { pluginTsName } from '@kubb/plugin-ts'
7
7
  import { pluginZodName } from '@kubb/plugin-zod'
@@ -19,6 +19,7 @@ export const mutationGenerator = defineGenerator<PluginReactQuery>({
19
19
  name: 'react-query-mutation',
20
20
  renderer: jsxRendererSync,
21
21
  operation(node, ctx) {
22
+ if (!ast.isHttpOperationNode(node)) return null
22
23
  const { config, driver, resolver, root } = ctx
23
24
  const { output, query, mutation, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, customOptions } = ctx.options
24
25
 
@@ -43,14 +44,12 @@ export const mutationGenerator = defineGenerator<PluginReactQuery>({
43
44
  const clientName = resolver.resolveClientName(node)
44
45
 
45
46
  const meta = {
46
- file: resolver.resolveFile(
47
- { name: mutationHookName, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
48
- { root, output, group: group ?? undefined },
49
- ),
50
- fileTs: tsResolver.resolveFile(
51
- { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
52
- { root, output: pluginTs.options?.output ?? output, group: pluginTs.options?.group ?? undefined },
53
- ),
47
+ file: resolver.resolveFile(operationFileEntry(node, mutationHookName), { root, output, group: group ?? undefined }),
48
+ fileTs: tsResolver.resolveFile(operationFileEntry(node, node.operationId), {
49
+ root,
50
+ output: pluginTs.options?.output ?? output,
51
+ group: pluginTs.options?.group ?? undefined,
52
+ }),
54
53
  }
55
54
 
56
55
  const importedTypeNames = resolveOperationTypeNames(node, tsResolver, { paramsCasing, order: 'body-response-first' })
@@ -58,10 +57,11 @@ export const mutationGenerator = defineGenerator<PluginReactQuery>({
58
57
  const pluginZod = parser === 'zod' ? driver.getPlugin(pluginZodName) : null
59
58
  const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : null
60
59
  const fileZod = zodResolver
61
- ? zodResolver.resolveFile(
62
- { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
63
- { root, output: pluginZod?.options?.output ?? output, group: pluginZod?.options?.group ?? undefined },
64
- )
60
+ ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
61
+ root,
62
+ output: pluginZod?.options?.output ?? output,
63
+ group: pluginZod?.options?.group ?? undefined,
64
+ })
65
65
  : null
66
66
  const zodSchemaNames = resolveZodSchemaNames(node, zodResolver)
67
67
 
@@ -71,14 +71,11 @@ export const mutationGenerator = defineGenerator<PluginReactQuery>({
71
71
  const clientResolver = shouldUseClientPlugin ? driver.getResolver(pluginClientName) : null
72
72
 
73
73
  const clientFile = shouldUseClientPlugin
74
- ? clientResolver?.resolveFile(
75
- { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
76
- {
77
- root,
78
- output: clientPlugin?.options?.output ?? output,
79
- group: clientPlugin?.options?.group ?? undefined,
80
- },
81
- )
74
+ ? clientResolver?.resolveFile(operationFileEntry(node, node.operationId), {
75
+ root,
76
+ output: clientPlugin?.options?.output ?? output,
77
+ group: clientPlugin?.options?.group ?? undefined,
78
+ })
82
79
  : null
83
80
 
84
81
  const resolvedClientName = shouldUseClientPlugin ? (clientResolver?.resolveName(node.operationId) ?? clientName) : clientName
@@ -1,7 +1,7 @@
1
1
  import path from 'node:path'
2
- import { resolveOperationTypeNames } from '@internals/shared'
2
+ import { operationFileEntry, resolveOperationTypeNames } from '@internals/shared'
3
3
  import { resolveZodSchemaNames } from '@internals/tanstack-query'
4
- import { defineGenerator } from '@kubb/core'
4
+ import { ast, defineGenerator } from '@kubb/core'
5
5
  import { Client, pluginClientName } from '@kubb/plugin-client'
6
6
  import { pluginTsName } from '@kubb/plugin-ts'
7
7
  import { pluginZodName } from '@kubb/plugin-zod'
@@ -19,6 +19,7 @@ export const queryGenerator = defineGenerator<PluginReactQuery>({
19
19
  name: 'react-query',
20
20
  renderer: jsxRendererSync,
21
21
  operation(node, ctx) {
22
+ if (!ast.isHttpOperationNode(node)) return null
22
23
  const { config, driver, resolver, root } = ctx
23
24
  const { output, query, mutation, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, customOptions } = ctx.options
24
25
 
@@ -44,14 +45,12 @@ export const queryGenerator = defineGenerator<PluginReactQuery>({
44
45
  const clientName = resolver.resolveClientName(node)
45
46
 
46
47
  const meta = {
47
- file: resolver.resolveFile(
48
- { name: queryName, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
49
- { root, output, group: group ?? undefined },
50
- ),
51
- fileTs: tsResolver.resolveFile(
52
- { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
53
- { root, output: pluginTs.options?.output ?? output, group: pluginTs.options?.group ?? undefined },
54
- ),
48
+ file: resolver.resolveFile(operationFileEntry(node, queryName), { root, output, group: group ?? undefined }),
49
+ fileTs: tsResolver.resolveFile(operationFileEntry(node, node.operationId), {
50
+ root,
51
+ output: pluginTs.options?.output ?? output,
52
+ group: pluginTs.options?.group ?? undefined,
53
+ }),
55
54
  }
56
55
 
57
56
  const importedTypeNames = resolveOperationTypeNames(node, tsResolver, {
@@ -63,10 +62,11 @@ export const queryGenerator = defineGenerator<PluginReactQuery>({
63
62
  const pluginZod = parser === 'zod' ? driver.getPlugin(pluginZodName) : null
64
63
  const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : null
65
64
  const fileZod = zodResolver
66
- ? zodResolver.resolveFile(
67
- { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
68
- { root, output: pluginZod?.options?.output ?? output, group: pluginZod?.options?.group ?? undefined },
69
- )
65
+ ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
66
+ root,
67
+ output: pluginZod?.options?.output ?? output,
68
+ group: pluginZod?.options?.group ?? undefined,
69
+ })
70
70
  : null
71
71
  const zodSchemaNames = resolveZodSchemaNames(node, zodResolver)
72
72
 
@@ -76,14 +76,11 @@ export const queryGenerator = defineGenerator<PluginReactQuery>({
76
76
  const clientResolver = shouldUseClientPlugin ? driver.getResolver(pluginClientName) : null
77
77
 
78
78
  const clientFile = shouldUseClientPlugin
79
- ? clientResolver?.resolveFile(
80
- { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
81
- {
82
- root,
83
- output: clientPlugin?.options?.output ?? output,
84
- group: clientPlugin?.options?.group ?? undefined,
85
- },
86
- )
79
+ ? clientResolver?.resolveFile(operationFileEntry(node, node.operationId), {
80
+ root,
81
+ output: clientPlugin?.options?.output ?? output,
82
+ group: clientPlugin?.options?.group ?? undefined,
83
+ })
87
84
  : null
88
85
 
89
86
  const resolvedClientName = shouldUseClientPlugin ? (clientResolver?.resolveName(node.operationId) ?? clientName) : clientName
@@ -1,7 +1,7 @@
1
1
  import path from 'node:path'
2
- import { getOperationParameters, resolveOperationTypeNames } from '@internals/shared'
2
+ import { getOperationParameters, operationFileEntry, resolveOperationTypeNames } from '@internals/shared'
3
3
  import { resolveZodSchemaNames } from '@internals/tanstack-query'
4
- import { defineGenerator } from '@kubb/core'
4
+ import { ast, defineGenerator } from '@kubb/core'
5
5
  import { Client, pluginClientName } from '@kubb/plugin-client'
6
6
  import { pluginTsName } from '@kubb/plugin-ts'
7
7
  import { pluginZodName } from '@kubb/plugin-zod'
@@ -20,6 +20,7 @@ export const suspenseInfiniteQueryGenerator = defineGenerator<PluginReactQuery>(
20
20
  name: 'react-suspense-infinite-query',
21
21
  renderer: jsxRendererSync,
22
22
  operation(node, ctx) {
23
+ if (!ast.isHttpOperationNode(node)) return null
23
24
  const { config, driver, resolver, root } = ctx
24
25
  const {
25
26
  output,
@@ -67,14 +68,12 @@ export const suspenseInfiniteQueryGenerator = defineGenerator<PluginReactQuery>(
67
68
  const clientBaseName = resolver.resolveSuspenseInfiniteClientName(node)
68
69
 
69
70
  const meta = {
70
- file: resolver.resolveFile(
71
- { name: queryName, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
72
- { root, output, group: group ?? undefined },
73
- ),
74
- fileTs: tsResolver.resolveFile(
75
- { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
76
- { root, output: pluginTs.options?.output ?? output, group: pluginTs.options?.group ?? undefined },
77
- ),
71
+ file: resolver.resolveFile(operationFileEntry(node, queryName), { root, output, group: group ?? undefined }),
72
+ fileTs: tsResolver.resolveFile(operationFileEntry(node, node.operationId), {
73
+ root,
74
+ output: pluginTs.options?.output ?? output,
75
+ group: pluginTs.options?.group ?? undefined,
76
+ }),
78
77
  }
79
78
 
80
79
  const importedTypeNames = resolveOperationTypeNames(node, tsResolver, { paramsCasing, order: 'body-response-first' })
@@ -82,10 +81,11 @@ export const suspenseInfiniteQueryGenerator = defineGenerator<PluginReactQuery>(
82
81
  const pluginZod = parser === 'zod' ? driver.getPlugin(pluginZodName) : null
83
82
  const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : null
84
83
  const fileZod = zodResolver
85
- ? zodResolver.resolveFile(
86
- { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
87
- { root, output: pluginZod?.options?.output ?? output, group: pluginZod?.options?.group ?? undefined },
88
- )
84
+ ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
85
+ root,
86
+ output: pluginZod?.options?.output ?? output,
87
+ group: pluginZod?.options?.group ?? undefined,
88
+ })
89
89
  : null
90
90
  const zodSchemaNames = resolveZodSchemaNames(node, zodResolver)
91
91
 
@@ -95,14 +95,11 @@ export const suspenseInfiniteQueryGenerator = defineGenerator<PluginReactQuery>(
95
95
  const clientResolver = shouldUseClientPlugin ? driver.getResolver(pluginClientName) : null
96
96
 
97
97
  const clientFile = shouldUseClientPlugin
98
- ? clientResolver?.resolveFile(
99
- { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
100
- {
101
- root,
102
- output: clientPlugin?.options?.output ?? output,
103
- group: clientPlugin?.options?.group ?? undefined,
104
- },
105
- )
98
+ ? clientResolver?.resolveFile(operationFileEntry(node, node.operationId), {
99
+ root,
100
+ output: clientPlugin?.options?.output ?? output,
101
+ group: clientPlugin?.options?.group ?? undefined,
102
+ })
106
103
  : null
107
104
 
108
105
  const resolvedClientName = shouldUseClientPlugin ? (clientResolver?.resolveName(node.operationId) ?? clientBaseName) : clientBaseName
@@ -1,7 +1,7 @@
1
1
  import path from 'node:path'
2
- import { resolveOperationTypeNames } from '@internals/shared'
2
+ import { operationFileEntry, resolveOperationTypeNames } from '@internals/shared'
3
3
  import { resolveZodSchemaNames } from '@internals/tanstack-query'
4
- import { defineGenerator } from '@kubb/core'
4
+ import { ast, defineGenerator } from '@kubb/core'
5
5
  import { Client, pluginClientName } from '@kubb/plugin-client'
6
6
  import { pluginTsName } from '@kubb/plugin-ts'
7
7
  import { pluginZodName } from '@kubb/plugin-zod'
@@ -20,6 +20,7 @@ export const suspenseQueryGenerator = defineGenerator<PluginReactQuery>({
20
20
  name: 'react-suspense-query',
21
21
  renderer: jsxRendererSync,
22
22
  operation(node, ctx) {
23
+ if (!ast.isHttpOperationNode(node)) return null
23
24
  const { config, driver, resolver, root } = ctx
24
25
  const { output, query, mutation, suspense, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, customOptions } = ctx.options
25
26
 
@@ -46,14 +47,12 @@ export const suspenseQueryGenerator = defineGenerator<PluginReactQuery>({
46
47
  const clientName = resolver.resolveSuspenseClientName(node)
47
48
 
48
49
  const meta = {
49
- file: resolver.resolveFile(
50
- { name: queryName, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
51
- { root, output, group: group ?? undefined },
52
- ),
53
- fileTs: tsResolver.resolveFile(
54
- { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
55
- { root, output: pluginTs.options?.output ?? output, group: pluginTs.options?.group ?? undefined },
56
- ),
50
+ file: resolver.resolveFile(operationFileEntry(node, queryName), { root, output, group: group ?? undefined }),
51
+ fileTs: tsResolver.resolveFile(operationFileEntry(node, node.operationId), {
52
+ root,
53
+ output: pluginTs.options?.output ?? output,
54
+ group: pluginTs.options?.group ?? undefined,
55
+ }),
57
56
  }
58
57
 
59
58
  const importedTypeNames = resolveOperationTypeNames(node, tsResolver, {
@@ -65,10 +64,11 @@ export const suspenseQueryGenerator = defineGenerator<PluginReactQuery>({
65
64
  const pluginZod = parser === 'zod' ? driver.getPlugin(pluginZodName) : null
66
65
  const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : null
67
66
  const fileZod = zodResolver
68
- ? zodResolver.resolveFile(
69
- { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
70
- { root, output: pluginZod?.options?.output ?? output, group: pluginZod?.options?.group ?? undefined },
71
- )
67
+ ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
68
+ root,
69
+ output: pluginZod?.options?.output ?? output,
70
+ group: pluginZod?.options?.group ?? undefined,
71
+ })
72
72
  : null
73
73
  const zodSchemaNames = resolveZodSchemaNames(node, zodResolver)
74
74
 
@@ -78,14 +78,11 @@ export const suspenseQueryGenerator = defineGenerator<PluginReactQuery>({
78
78
  const clientResolver = shouldUseClientPlugin ? driver.getResolver(pluginClientName) : null
79
79
 
80
80
  const clientFile = shouldUseClientPlugin
81
- ? clientResolver?.resolveFile(
82
- { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },
83
- {
84
- root,
85
- output: clientPlugin?.options?.output ?? output,
86
- group: clientPlugin?.options?.group ?? undefined,
87
- },
88
- )
81
+ ? clientResolver?.resolveFile(operationFileEntry(node, node.operationId), {
82
+ root,
83
+ output: clientPlugin?.options?.output ?? output,
84
+ group: clientPlugin?.options?.group ?? undefined,
85
+ })
89
86
  : null
90
87
 
91
88
  const resolvedClientName = shouldUseClientPlugin ? (clientResolver?.resolveName(node.operationId) ?? clientName) : clientName
@@ -163,6 +160,7 @@ export const suspenseQueryGenerator = defineGenerator<PluginReactQuery>({
163
160
  paramsType={paramsType}
164
161
  pathParamsType={pathParamsType}
165
162
  dataReturnType={clientOptions.dataReturnType || 'data'}
163
+ suspense
166
164
  />
167
165
 
168
166
  {suspense && (
package/src/plugin.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import path from 'node:path'
2
- import { camelCase } from '@internals/utils'
3
- import { ast, definePlugin, type Group } from '@kubb/core'
2
+ import { createGroupConfig } from '@internals/shared'
3
+ import { ast, definePlugin } from '@kubb/core'
4
4
  import { pluginClientName } from '@kubb/plugin-client'
5
5
  import { source as axiosClientSource } from '@kubb/plugin-client/templates/clients/axios.source'
6
6
  import { source as fetchClientSource } from '@kubb/plugin-client/templates/clients/fetch.source'
@@ -58,7 +58,7 @@ export const pluginReactQuery = definePlugin<PluginReactQuery>((options) => {
58
58
  exclude = [],
59
59
  include,
60
60
  override = [],
61
- parser = 'client',
61
+ parser = false,
62
62
  suspense = {},
63
63
  infinite = false,
64
64
  paramsType = 'inline',
@@ -90,19 +90,7 @@ export const pluginReactQuery = definePlugin<PluginReactQuery>((options) => {
90
90
  customHookOptionsFileGenerator,
91
91
  ].filter((generator): generator is NonNullable<typeof generator> => Boolean(generator))
92
92
 
93
- const groupConfig = group
94
- ? ({
95
- ...group,
96
- name: group.name
97
- ? group.name
98
- : (ctx: { group: string }) => {
99
- if (group.type === 'path') {
100
- return `${ctx.group.split('/')[1]}`
101
- }
102
- return `${camelCase(ctx.group)}Controller`
103
- },
104
- } satisfies Group)
105
- : null
93
+ const groupConfig = createGroupConfig(group, { suffix: 'Controller', honorName: true })
106
94
 
107
95
  return {
108
96
  name: pluginReactQueryName,