@baseplate-dev/react-generators 0.4.4 → 0.5.0

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 (245) hide show
  1. package/dist/constants/react-packages.d.ts +2 -6
  2. package/dist/constants/react-packages.d.ts.map +1 -1
  3. package/dist/constants/react-packages.js +2 -6
  4. package/dist/constants/react-packages.js.map +1 -1
  5. package/dist/generators/admin/_providers/admin-crud-action-container.d.ts +14 -0
  6. package/dist/generators/admin/_providers/admin-crud-action-container.d.ts.map +1 -1
  7. package/dist/generators/admin/_providers/admin-crud-action-container.js.map +1 -1
  8. package/dist/generators/admin/_providers/admin-crud-column-container.d.ts +6 -2
  9. package/dist/generators/admin/_providers/admin-crud-column-container.d.ts.map +1 -1
  10. package/dist/generators/admin/_providers/admin-crud-column-container.js.map +1 -1
  11. package/dist/generators/admin/_providers/admin-crud-input-container.d.ts +4 -2
  12. package/dist/generators/admin/_providers/admin-crud-input-container.d.ts.map +1 -1
  13. package/dist/generators/admin/_providers/admin-crud-input-container.js.map +1 -1
  14. package/dist/generators/admin/_providers/index.d.ts +1 -2
  15. package/dist/generators/admin/_providers/index.d.ts.map +1 -1
  16. package/dist/generators/admin/_providers/index.js +1 -2
  17. package/dist/generators/admin/_providers/index.js.map +1 -1
  18. package/dist/generators/admin/_utils/data-loader.d.ts +48 -0
  19. package/dist/generators/admin/_utils/data-loader.d.ts.map +1 -0
  20. package/dist/generators/admin/_utils/data-loader.js +55 -0
  21. package/dist/generators/admin/_utils/data-loader.js.map +1 -0
  22. package/dist/generators/admin/_utils/get-model-name-variants.d.ts +14 -0
  23. package/dist/generators/admin/_utils/get-model-name-variants.d.ts.map +1 -0
  24. package/dist/generators/admin/_utils/get-model-name-variants.js +23 -0
  25. package/dist/generators/admin/_utils/get-model-name-variants.js.map +1 -0
  26. package/dist/generators/admin/admin-crud-delete-action/admin-crud-delete-action.generator.d.ts +15 -2
  27. package/dist/generators/admin/admin-crud-delete-action/admin-crud-delete-action.generator.d.ts.map +1 -1
  28. package/dist/generators/admin/admin-crud-delete-action/admin-crud-delete-action.generator.js +65 -17
  29. package/dist/generators/admin/admin-crud-delete-action/admin-crud-delete-action.generator.js.map +1 -1
  30. package/dist/generators/admin/admin-crud-edit/admin-crud-edit.generator.d.ts +21 -205
  31. package/dist/generators/admin/admin-crud-edit/admin-crud-edit.generator.d.ts.map +1 -1
  32. package/dist/generators/admin/admin-crud-edit/admin-crud-edit.generator.js +235 -93
  33. package/dist/generators/admin/admin-crud-edit/admin-crud-edit.generator.js.map +1 -1
  34. package/dist/generators/admin/admin-crud-edit/generated/index.d.ts +59 -18
  35. package/dist/generators/admin/admin-crud-edit/generated/index.d.ts.map +1 -1
  36. package/dist/generators/admin/admin-crud-edit/generated/template-renderers.d.ts +13 -0
  37. package/dist/generators/admin/admin-crud-edit/generated/template-renderers.d.ts.map +1 -1
  38. package/dist/generators/admin/admin-crud-edit/generated/template-renderers.js +4 -2
  39. package/dist/generators/admin/admin-crud-edit/generated/template-renderers.js.map +1 -1
  40. package/dist/generators/admin/admin-crud-edit/generated/typed-templates.d.ts +46 -18
  41. package/dist/generators/admin/admin-crud-edit/generated/typed-templates.d.ts.map +1 -1
  42. package/dist/generators/admin/admin-crud-edit/generated/typed-templates.js +21 -14
  43. package/dist/generators/admin/admin-crud-edit/generated/typed-templates.js.map +1 -1
  44. package/dist/generators/admin/admin-crud-edit/templates/create.tsx +15 -21
  45. package/dist/generators/admin/admin-crud-edit/templates/edit-form.tsx +20 -22
  46. package/dist/generators/admin/admin-crud-edit/templates/edit.tsx +18 -21
  47. package/dist/generators/admin/admin-crud-edit/templates/route.tsx +1 -1
  48. package/dist/generators/admin/admin-crud-embedded-form/admin-crud-embedded-form.generator.d.ts +2 -2
  49. package/dist/generators/admin/admin-crud-embedded-form/admin-crud-embedded-form.generator.d.ts.map +1 -1
  50. package/dist/generators/admin/admin-crud-embedded-form/admin-crud-embedded-form.generator.js +21 -21
  51. package/dist/generators/admin/admin-crud-embedded-form/admin-crud-embedded-form.generator.js.map +1 -1
  52. package/dist/generators/admin/admin-crud-embedded-input/admin-crud-embedded-input.generator.d.ts +1 -0
  53. package/dist/generators/admin/admin-crud-embedded-input/admin-crud-embedded-input.generator.d.ts.map +1 -1
  54. package/dist/generators/admin/admin-crud-embedded-input/admin-crud-embedded-input.generator.js +12 -5
  55. package/dist/generators/admin/admin-crud-embedded-input/admin-crud-embedded-input.generator.js.map +1 -1
  56. package/dist/generators/admin/admin-crud-foreign-column/admin-crud-foreign-column.generator.d.ts +3 -9
  57. package/dist/generators/admin/admin-crud-foreign-column/admin-crud-foreign-column.generator.d.ts.map +1 -1
  58. package/dist/generators/admin/admin-crud-foreign-column/admin-crud-foreign-column.generator.js +22 -33
  59. package/dist/generators/admin/admin-crud-foreign-column/admin-crud-foreign-column.generator.js.map +1 -1
  60. package/dist/generators/admin/admin-crud-foreign-input/admin-crud-foreign-input.generator.d.ts +15 -2
  61. package/dist/generators/admin/admin-crud-foreign-input/admin-crud-foreign-input.generator.d.ts.map +1 -1
  62. package/dist/generators/admin/admin-crud-foreign-input/admin-crud-foreign-input.generator.js +76 -32
  63. package/dist/generators/admin/admin-crud-foreign-input/admin-crud-foreign-input.generator.js.map +1 -1
  64. package/dist/generators/admin/admin-crud-list/admin-crud-list.generator.d.ts +28 -3
  65. package/dist/generators/admin/admin-crud-list/admin-crud-list.generator.d.ts.map +1 -1
  66. package/dist/generators/admin/admin-crud-list/admin-crud-list.generator.js +114 -89
  67. package/dist/generators/admin/admin-crud-list/admin-crud-list.generator.js.map +1 -1
  68. package/dist/generators/admin/admin-crud-list/generated/index.d.ts +38 -221
  69. package/dist/generators/admin/admin-crud-list/generated/index.d.ts.map +1 -1
  70. package/dist/generators/admin/admin-crud-list/generated/template-renderers.d.ts +13 -0
  71. package/dist/generators/admin/admin-crud-list/generated/template-renderers.d.ts.map +1 -1
  72. package/dist/generators/admin/admin-crud-list/generated/template-renderers.js +4 -4
  73. package/dist/generators/admin/admin-crud-list/generated/template-renderers.js.map +1 -1
  74. package/dist/generators/admin/admin-crud-list/generated/typed-templates.d.ts +25 -221
  75. package/dist/generators/admin/admin-crud-list/generated/typed-templates.d.ts.map +1 -1
  76. package/dist/generators/admin/admin-crud-list/generated/typed-templates.js +11 -10
  77. package/dist/generators/admin/admin-crud-list/generated/typed-templates.js.map +1 -1
  78. package/dist/generators/admin/admin-crud-list/templates/index.tsx +8 -10
  79. package/dist/generators/admin/admin-crud-list/templates/table.tsx +9 -4
  80. package/dist/generators/admin/admin-crud-text-column/admin-crud-text-column.generator.d.ts.map +1 -1
  81. package/dist/generators/admin/admin-crud-text-column/admin-crud-text-column.generator.js +2 -4
  82. package/dist/generators/admin/admin-crud-text-column/admin-crud-text-column.generator.js.map +1 -1
  83. package/dist/generators/admin/admin-home/admin-home.generator.d.ts +8 -7
  84. package/dist/generators/admin/admin-home/admin-home.generator.d.ts.map +1 -1
  85. package/dist/generators/admin/admin-home/generated/index.d.ts +16 -14
  86. package/dist/generators/admin/admin-home/generated/index.d.ts.map +1 -1
  87. package/dist/generators/admin/admin-home/generated/template-renderers.d.ts +8 -7
  88. package/dist/generators/admin/admin-home/generated/template-renderers.d.ts.map +1 -1
  89. package/dist/generators/admin/admin-home/generated/template-renderers.js +4 -4
  90. package/dist/generators/admin/admin-home/generated/template-renderers.js.map +1 -1
  91. package/dist/generators/admin/admin-home/generated/typed-templates.d.ts +8 -7
  92. package/dist/generators/admin/admin-home/generated/typed-templates.d.ts.map +1 -1
  93. package/dist/generators/admin/admin-home/generated/typed-templates.js +2 -2
  94. package/dist/generators/admin/admin-home/generated/typed-templates.js.map +1 -1
  95. package/dist/generators/admin/admin-home/templates/routes/index.tsx +14 -4
  96. package/dist/generators/admin/admin-layout/admin-layout.generator.d.ts +8 -1
  97. package/dist/generators/admin/admin-layout/admin-layout.generator.d.ts.map +1 -1
  98. package/dist/generators/admin/admin-layout/generated/index.d.ts +16 -3
  99. package/dist/generators/admin/admin-layout/generated/index.d.ts.map +1 -1
  100. package/dist/generators/admin/admin-layout/generated/template-renderers.d.ts +8 -1
  101. package/dist/generators/admin/admin-layout/generated/template-renderers.d.ts.map +1 -1
  102. package/dist/generators/admin/admin-layout/generated/template-renderers.js +7 -1
  103. package/dist/generators/admin/admin-layout/generated/template-renderers.js.map +1 -1
  104. package/dist/generators/admin/admin-layout/generated/typed-templates.d.ts +16 -3
  105. package/dist/generators/admin/admin-layout/generated/typed-templates.d.ts.map +1 -1
  106. package/dist/generators/admin/admin-layout/generated/typed-templates.js +4 -0
  107. package/dist/generators/admin/admin-layout/generated/typed-templates.js.map +1 -1
  108. package/dist/generators/admin/admin-layout/templates/components/layouts/admin-layout.tsx +4 -1
  109. package/dist/generators/admin/admin-layout/templates/components/layouts/app-breadcrumbs.tsx +31 -4
  110. package/dist/generators/admin/index.d.ts +0 -1
  111. package/dist/generators/admin/index.d.ts.map +1 -1
  112. package/dist/generators/admin/index.js +0 -1
  113. package/dist/generators/admin/index.js.map +1 -1
  114. package/dist/generators/apollo/react-apollo/generated/index.d.ts +42 -22
  115. package/dist/generators/apollo/react-apollo/generated/index.d.ts.map +1 -1
  116. package/dist/generators/apollo/react-apollo/generated/template-paths.d.ts +2 -1
  117. package/dist/generators/apollo/react-apollo/generated/template-paths.d.ts.map +1 -1
  118. package/dist/generators/apollo/react-apollo/generated/template-paths.js +3 -2
  119. package/dist/generators/apollo/react-apollo/generated/template-paths.js.map +1 -1
  120. package/dist/generators/apollo/react-apollo/generated/template-renderers.d.ts +3 -15
  121. package/dist/generators/apollo/react-apollo/generated/template-renderers.d.ts.map +1 -1
  122. package/dist/generators/apollo/react-apollo/generated/template-renderers.js +4 -33
  123. package/dist/generators/apollo/react-apollo/generated/template-renderers.js.map +1 -1
  124. package/dist/generators/apollo/react-apollo/generated/ts-import-providers.d.ts +30 -5
  125. package/dist/generators/apollo/react-apollo/generated/ts-import-providers.d.ts.map +1 -1
  126. package/dist/generators/apollo/react-apollo/generated/ts-import-providers.js +13 -5
  127. package/dist/generators/apollo/react-apollo/generated/ts-import-providers.js.map +1 -1
  128. package/dist/generators/apollo/react-apollo/generated/typed-templates.d.ts +33 -4
  129. package/dist/generators/apollo/react-apollo/generated/typed-templates.d.ts.map +1 -1
  130. package/dist/generators/apollo/react-apollo/generated/typed-templates.js +38 -10
  131. package/dist/generators/apollo/react-apollo/generated/typed-templates.js.map +1 -1
  132. package/dist/generators/apollo/react-apollo/graphql-eslint-rules.d.ts +2 -0
  133. package/dist/generators/apollo/react-apollo/graphql-eslint-rules.d.ts.map +1 -0
  134. package/dist/generators/apollo/react-apollo/graphql-eslint-rules.js +43 -0
  135. package/dist/generators/apollo/react-apollo/graphql-eslint-rules.js.map +1 -0
  136. package/dist/generators/apollo/react-apollo/providers/graphql-imports.d.ts +29 -0
  137. package/dist/generators/apollo/react-apollo/providers/graphql-imports.d.ts.map +1 -0
  138. package/dist/generators/apollo/react-apollo/providers/graphql-imports.js +11 -0
  139. package/dist/generators/apollo/react-apollo/providers/graphql-imports.js.map +1 -0
  140. package/dist/generators/apollo/react-apollo/providers/index.d.ts +1 -1
  141. package/dist/generators/apollo/react-apollo/providers/index.d.ts.map +1 -1
  142. package/dist/generators/apollo/react-apollo/providers/index.js +1 -1
  143. package/dist/generators/apollo/react-apollo/providers/index.js.map +1 -1
  144. package/dist/generators/apollo/react-apollo/react-apollo.generator.d.ts +24 -17
  145. package/dist/generators/apollo/react-apollo/react-apollo.generator.d.ts.map +1 -1
  146. package/dist/generators/apollo/react-apollo/react-apollo.generator.js +74 -83
  147. package/dist/generators/apollo/react-apollo/react-apollo.generator.js.map +1 -1
  148. package/dist/generators/apollo/react-apollo/templates/package/graphql.config.ts +6 -0
  149. package/dist/generators/apollo/react-apollo/templates/src/graphql.ts +17 -0
  150. package/dist/generators/auth/_providers/auth-hooks.d.ts +0 -2
  151. package/dist/generators/auth/_providers/auth-hooks.d.ts.map +1 -1
  152. package/dist/generators/auth/_providers/auth-hooks.js +0 -1
  153. package/dist/generators/auth/_providers/auth-hooks.js.map +1 -1
  154. package/dist/generators/auth/auth-errors/auth-errors.generator.d.ts +0 -1
  155. package/dist/generators/auth/auth-errors/auth-errors.generator.d.ts.map +1 -1
  156. package/dist/generators/auth/auth-identify/auth-identify.generator.d.ts +0 -1
  157. package/dist/generators/auth/auth-identify/auth-identify.generator.d.ts.map +1 -1
  158. package/dist/generators/core/react/react.generator.d.ts +1 -0
  159. package/dist/generators/core/react/react.generator.d.ts.map +1 -1
  160. package/dist/generators/core/react-error-boundary/generated/index.d.ts +224 -0
  161. package/dist/generators/core/react-error-boundary/generated/index.d.ts.map +1 -1
  162. package/dist/generators/core/react-error-boundary/generated/index.js +2 -0
  163. package/dist/generators/core/react-error-boundary/generated/index.js.map +1 -1
  164. package/dist/generators/core/react-error-boundary/generated/template-paths.d.ts +1 -0
  165. package/dist/generators/core/react-error-boundary/generated/template-paths.d.ts.map +1 -1
  166. package/dist/generators/core/react-error-boundary/generated/template-paths.js +1 -0
  167. package/dist/generators/core/react-error-boundary/generated/template-paths.js.map +1 -1
  168. package/dist/generators/core/react-error-boundary/generated/template-renderers.d.ts +3 -0
  169. package/dist/generators/core/react-error-boundary/generated/template-renderers.d.ts.map +1 -1
  170. package/dist/generators/core/react-error-boundary/generated/template-renderers.js +11 -0
  171. package/dist/generators/core/react-error-boundary/generated/template-renderers.js.map +1 -1
  172. package/dist/generators/core/react-error-boundary/generated/ts-import-providers.d.ts +18 -0
  173. package/dist/generators/core/react-error-boundary/generated/ts-import-providers.d.ts.map +1 -0
  174. package/dist/generators/core/react-error-boundary/generated/ts-import-providers.js +26 -0
  175. package/dist/generators/core/react-error-boundary/generated/ts-import-providers.js.map +1 -0
  176. package/dist/generators/core/react-error-boundary/generated/typed-templates.d.ts +215 -0
  177. package/dist/generators/core/react-error-boundary/generated/typed-templates.d.ts.map +1 -1
  178. package/dist/generators/core/react-error-boundary/generated/typed-templates.js +14 -1
  179. package/dist/generators/core/react-error-boundary/generated/typed-templates.js.map +1 -1
  180. package/dist/generators/core/react-error-boundary/index.d.ts +2 -0
  181. package/dist/generators/core/react-error-boundary/index.d.ts.map +1 -1
  182. package/dist/generators/core/react-error-boundary/index.js +1 -0
  183. package/dist/generators/core/react-error-boundary/index.js.map +1 -1
  184. package/dist/generators/core/react-error-boundary/react-error-boundary.generator.d.ts +26 -14
  185. package/dist/generators/core/react-error-boundary/react-error-boundary.generator.d.ts.map +1 -1
  186. package/dist/generators/core/react-error-boundary/react-error-boundary.generator.js +7 -17
  187. package/dist/generators/core/react-error-boundary/react-error-boundary.generator.js.map +1 -1
  188. package/dist/generators/core/react-error-boundary/templates/components/ui/async-boundary.tsx +48 -0
  189. package/dist/generators/core/react-error-boundary/templates/components/ui/error-boundary.tsx +2 -10
  190. package/dist/generators/core/react-router/react-router.generator.d.ts +1 -0
  191. package/dist/generators/core/react-router/react-router.generator.d.ts.map +1 -1
  192. package/dist/generators/core/react-typescript/react-typescript.generator.d.ts +5 -1
  193. package/dist/generators/core/react-typescript/react-typescript.generator.d.ts.map +1 -1
  194. package/dist/generators/core/react-typescript/react-typescript.generator.js +31 -24
  195. package/dist/generators/core/react-typescript/react-typescript.generator.js.map +1 -1
  196. package/dist/writers/graphql/gql-tada.d.ts +69 -0
  197. package/dist/writers/graphql/gql-tada.d.ts.map +1 -0
  198. package/dist/writers/graphql/gql-tada.js +118 -0
  199. package/dist/writers/graphql/gql-tada.js.map +1 -0
  200. package/dist/writers/graphql/graphql.d.ts +133 -0
  201. package/dist/writers/graphql/graphql.d.ts.map +1 -0
  202. package/dist/writers/graphql/graphql.js +188 -0
  203. package/dist/writers/graphql/graphql.js.map +1 -0
  204. package/dist/writers/graphql/index.d.ts +2 -65
  205. package/dist/writers/graphql/index.d.ts.map +1 -1
  206. package/dist/writers/graphql/index.js +2 -216
  207. package/dist/writers/graphql/index.js.map +1 -1
  208. package/package.json +7 -5
  209. package/dist/generators/admin/_providers/admin-crud-display-container.d.ts +0 -7
  210. package/dist/generators/admin/_providers/admin-crud-display-container.d.ts.map +0 -1
  211. package/dist/generators/admin/_providers/admin-crud-display-container.js +0 -3
  212. package/dist/generators/admin/_providers/admin-crud-display-container.js.map +0 -1
  213. package/dist/generators/admin/_providers/admin-loader.d.ts +0 -14
  214. package/dist/generators/admin/_providers/admin-loader.d.ts.map +0 -1
  215. package/dist/generators/admin/_providers/admin-loader.js +0 -26
  216. package/dist/generators/admin/_providers/admin-loader.js.map +0 -1
  217. package/dist/generators/admin/_utils/data-display.d.ts +0 -10
  218. package/dist/generators/admin/_utils/data-display.d.ts.map +0 -1
  219. package/dist/generators/admin/_utils/data-display.js +0 -2
  220. package/dist/generators/admin/_utils/data-display.js.map +0 -1
  221. package/dist/generators/admin/_utils/data-loaders.d.ts +0 -23
  222. package/dist/generators/admin/_utils/data-loaders.d.ts.map +0 -1
  223. package/dist/generators/admin/_utils/data-loaders.js +0 -44
  224. package/dist/generators/admin/_utils/data-loaders.js.map +0 -1
  225. package/dist/generators/admin/_utils/foreign-data-dependency.d.ts +0 -15
  226. package/dist/generators/admin/_utils/foreign-data-dependency.d.ts.map +0 -1
  227. package/dist/generators/admin/_utils/foreign-data-dependency.js +0 -56
  228. package/dist/generators/admin/_utils/foreign-data-dependency.js.map +0 -1
  229. package/dist/generators/admin/_utils/graphql.d.ts +0 -3
  230. package/dist/generators/admin/_utils/graphql.d.ts.map +0 -1
  231. package/dist/generators/admin/_utils/graphql.js +0 -16
  232. package/dist/generators/admin/_utils/graphql.js.map +0 -1
  233. package/dist/generators/admin/admin-crud-queries/admin-crud-queries.generator.d.ts +0 -34
  234. package/dist/generators/admin/admin-crud-queries/admin-crud-queries.generator.d.ts.map +0 -1
  235. package/dist/generators/admin/admin-crud-queries/admin-crud-queries.generator.js +0 -203
  236. package/dist/generators/admin/admin-crud-queries/admin-crud-queries.generator.js.map +0 -1
  237. package/dist/generators/admin/admin-crud-queries/index.d.ts +0 -2
  238. package/dist/generators/admin/admin-crud-queries/index.d.ts.map +0 -1
  239. package/dist/generators/admin/admin-crud-queries/index.js +0 -2
  240. package/dist/generators/admin/admin-crud-queries/index.js.map +0 -1
  241. package/dist/generators/apollo/react-apollo/providers/generated-graphql.d.ts +0 -9
  242. package/dist/generators/apollo/react-apollo/providers/generated-graphql.d.ts.map +0 -1
  243. package/dist/generators/apollo/react-apollo/providers/generated-graphql.js +0 -7
  244. package/dist/generators/apollo/react-apollo/providers/generated-graphql.js.map +0 -1
  245. package/dist/generators/apollo/react-apollo/templates/package/codegen.ts +0 -24
@@ -0,0 +1,69 @@
1
+ /**
2
+ * gql.tada rendering functions for generating TypeScript code with graphql() calls.
3
+ *
4
+ * This module provides functions to render GraphQL fragments and operations
5
+ * as TsCodeFragment objects that include the graphql() template literal call
6
+ * with proper imports and dependency arrays.
7
+ */
8
+ import type { TsCodeFragment } from '@baseplate-dev/core-generators';
9
+ import type { GraphQLFragment, GraphQLOperation } from './graphql.js';
10
+ interface RenderOptions {
11
+ /** Whether to export the fragment/operation (default: true) */
12
+ exported?: boolean;
13
+ /** The path of the file being rendered (to determine if fragments need imports) */
14
+ currentPath: string;
15
+ }
16
+ /**
17
+ * Renders a GraphQL fragment as a TsCodeFragment for gql.tada.
18
+ *
19
+ * This function:
20
+ * 1. Renders the GraphQL fragment string
21
+ * 2. Collects fragment dependencies from spread fields
22
+ * 3. Generates imports for fragments from different files
23
+ * 4. Builds the graphql() call with dependency array
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * const fragment = renderTadaFragment(userRowFragment, {
28
+ * currentPath: './user-table.tsx',
29
+ * exported: true,
30
+ * });
31
+ * // Output:
32
+ * // export const userRowFragment = graphql(`
33
+ * // fragment UserTable_items on User {
34
+ * // id
35
+ * // email
36
+ * // ...RoleManagerDialog_user
37
+ * // }
38
+ * // `, [roleManagerDialogUserFragment]);
39
+ * ```
40
+ */
41
+ export declare function renderTadaFragment(fragment: GraphQLFragment, options: RenderOptions): TsCodeFragment;
42
+ /**
43
+ * Renders a GraphQL operation (query/mutation/subscription) as a TsCodeFragment for gql.tada.
44
+ *
45
+ * This function:
46
+ * 1. Renders the GraphQL operation string
47
+ * 2. Collects fragment dependencies from spread fields
48
+ * 3. Generates imports for fragments from different files
49
+ * 4. Builds the graphql() call with dependency array
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * const query = renderTadaOperation(usersQuery, {
54
+ * currentPath: './queries.ts',
55
+ * exported: true,
56
+ * });
57
+ * // Output:
58
+ * // export const usersQuery = graphql(`
59
+ * // query Users {
60
+ * // users {
61
+ * // ...UserTable_items
62
+ * // }
63
+ * // }
64
+ * // `, [userRowFragment]);
65
+ * ```
66
+ */
67
+ export declare function renderTadaOperation(operation: GraphQLOperation, options: RenderOptions): TsCodeFragment;
68
+ export {};
69
+ //# sourceMappingURL=gql-tada.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gql-tada.d.ts","sourceRoot":"","sources":["../../../src/writers/graphql/gql-tada.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,gCAAgC,CAAC;AAIxC,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAYtE,UAAU,aAAa;IACrB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,aAAa,GACrB,cAAc,CAkChB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,aAAa,GACrB,cAAc,CAkChB"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * gql.tada rendering functions for generating TypeScript code with graphql() calls.
3
+ *
4
+ * This module provides functions to render GraphQL fragments and operations
5
+ * as TsCodeFragment objects that include the graphql() template literal call
6
+ * with proper imports and dependency arrays.
7
+ */
8
+ import { TsCodeUtils, tsImportBuilder } from '@baseplate-dev/core-generators';
9
+ import { collectFragmentDependencies, renderFragment, renderOperation, } from './graphql.js';
10
+ // ============================================================================
11
+ // Fragment Rendering
12
+ // ============================================================================
13
+ /**
14
+ * Renders a GraphQL fragment as a TsCodeFragment for gql.tada.
15
+ *
16
+ * This function:
17
+ * 1. Renders the GraphQL fragment string
18
+ * 2. Collects fragment dependencies from spread fields
19
+ * 3. Generates imports for fragments from different files
20
+ * 4. Builds the graphql() call with dependency array
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const fragment = renderTadaFragment(userRowFragment, {
25
+ * currentPath: './user-table.tsx',
26
+ * exported: true,
27
+ * });
28
+ * // Output:
29
+ * // export const userRowFragment = graphql(`
30
+ * // fragment UserTable_items on User {
31
+ * // id
32
+ * // email
33
+ * // ...RoleManagerDialog_user
34
+ * // }
35
+ * // `, [roleManagerDialogUserFragment]);
36
+ * ```
37
+ */
38
+ export function renderTadaFragment(fragment, options) {
39
+ const { exported = true, currentPath } = options;
40
+ // Collect all fragment dependencies from fields
41
+ const dependencies = collectFragmentDependencies(fragment.fields);
42
+ // Build the GraphQL string
43
+ const graphqlString = renderFragment(fragment);
44
+ // Build imports for fragments from different files
45
+ const imports = [
46
+ tsImportBuilder(['graphql']).from('@src/graphql'),
47
+ ];
48
+ const depVariableNames = [];
49
+ for (const dep of dependencies) {
50
+ depVariableNames.push(dep.variableName);
51
+ // Only import if from a different file
52
+ if (dep.path !== currentPath) {
53
+ imports.push(tsImportBuilder([dep.variableName]).from(dep.path));
54
+ }
55
+ }
56
+ // Build the graphql() call
57
+ const exportKeyword = exported ? 'export ' : '';
58
+ const depsArray = depVariableNames.length > 0 ? `, [${depVariableNames.join(', ')}]` : '';
59
+ const code = `${exportKeyword}const ${fragment.variableName} = graphql(\`
60
+ ${graphqlString}
61
+ \`${depsArray});`;
62
+ return TsCodeUtils.templateWithImports(imports) `${code}`;
63
+ }
64
+ // ============================================================================
65
+ // Operation Rendering
66
+ // ============================================================================
67
+ /**
68
+ * Renders a GraphQL operation (query/mutation/subscription) as a TsCodeFragment for gql.tada.
69
+ *
70
+ * This function:
71
+ * 1. Renders the GraphQL operation string
72
+ * 2. Collects fragment dependencies from spread fields
73
+ * 3. Generates imports for fragments from different files
74
+ * 4. Builds the graphql() call with dependency array
75
+ *
76
+ * @example
77
+ * ```typescript
78
+ * const query = renderTadaOperation(usersQuery, {
79
+ * currentPath: './queries.ts',
80
+ * exported: true,
81
+ * });
82
+ * // Output:
83
+ * // export const usersQuery = graphql(`
84
+ * // query Users {
85
+ * // users {
86
+ * // ...UserTable_items
87
+ * // }
88
+ * // }
89
+ * // `, [userRowFragment]);
90
+ * ```
91
+ */
92
+ export function renderTadaOperation(operation, options) {
93
+ const { exported, currentPath } = options;
94
+ // Collect all fragment dependencies from fields
95
+ const dependencies = collectFragmentDependencies(operation.fields);
96
+ // Build the GraphQL string
97
+ const graphqlString = renderOperation(operation);
98
+ // Build imports for fragments from different files
99
+ const imports = [
100
+ tsImportBuilder(['graphql']).from('@src/graphql'),
101
+ ];
102
+ const depVariableNames = [];
103
+ for (const dep of dependencies) {
104
+ depVariableNames.push(dep.variableName);
105
+ // Only import if from a different file
106
+ if (dep.path !== currentPath) {
107
+ imports.push(tsImportBuilder([dep.variableName]).from(dep.path));
108
+ }
109
+ }
110
+ // Build the graphql() call
111
+ const exportKeyword = exported ? 'export ' : '';
112
+ const depsArray = depVariableNames.length > 0 ? `, [${depVariableNames.join(', ')}]` : '';
113
+ const code = `${exportKeyword}const ${operation.variableName} = graphql(\`
114
+ ${graphqlString}
115
+ \`${depsArray});`;
116
+ return TsCodeUtils.templateWithImports(imports) `${code}`;
117
+ }
118
+ //# sourceMappingURL=gql-tada.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gql-tada.js","sourceRoot":"","sources":["../../../src/writers/graphql/gql-tada.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Core GraphQL types and rendering utilities.
3
+ * These types are library-agnostic and can be used with any GraphQL code generation approach.
4
+ */
5
+ interface GraphQLScalarValue {
6
+ type: 'scalar';
7
+ value: string | number | boolean;
8
+ }
9
+ interface GraphQLVariableValue {
10
+ type: 'variable';
11
+ variable: string;
12
+ }
13
+ type GraphQLArgumentValue = GraphQLScalarValue | GraphQLVariableValue;
14
+ interface GraphQLArgument {
15
+ name: string;
16
+ value: GraphQLArgumentValue;
17
+ }
18
+ interface GraphQLVariable {
19
+ name: string;
20
+ type: string;
21
+ }
22
+ /**
23
+ * Represents a GraphQL fragment definition.
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * const userRowFragment: GraphQLFragment = {
28
+ * variableName: 'userRowFragment',
29
+ * fragmentName: 'UserTable_items',
30
+ * onType: 'User',
31
+ * fields: [{ name: 'id' }, { name: 'email' }],
32
+ * path: './user-table.tsx',
33
+ * };
34
+ * ```
35
+ */
36
+ export interface GraphQLFragment {
37
+ /** Variable name in generated code (e.g., "userRowFragment") */
38
+ variableName: string;
39
+ /** Fragment name in GraphQL (e.g., "UserTable_items") */
40
+ fragmentName: string;
41
+ /** GraphQL type the fragment applies to (e.g., "User") */
42
+ onType: string;
43
+ /** Fields to include in the fragment */
44
+ fields: GraphQLField[];
45
+ /** Path where this fragment is defined (for imports) */
46
+ path: string;
47
+ }
48
+ /**
49
+ * A simple field with a name, optional arguments, and optional nested fields.
50
+ */
51
+ interface GraphQLSimpleField {
52
+ type?: 'simple' | undefined;
53
+ name: string;
54
+ args?: GraphQLArgument[];
55
+ fields?: GraphQLField[];
56
+ /** Used for sorting fields in output */
57
+ order?: number;
58
+ }
59
+ /**
60
+ * A fragment spread that references a GraphQLFragment.
61
+ * This enables automatic dependency tracking and import generation.
62
+ *
63
+ * @example
64
+ * ```typescript
65
+ * const field: GraphQLSpreadField = {
66
+ * type: 'spread',
67
+ * fragment: userRowFragment,
68
+ * };
69
+ * // Renders as: ...UserTable_items
70
+ * ```
71
+ */
72
+ interface GraphQLSpreadField {
73
+ type: 'spread';
74
+ fragment: GraphQLFragment;
75
+ }
76
+ export type GraphQLField = GraphQLSimpleField | GraphQLSpreadField;
77
+ /**
78
+ * Represents a GraphQL operation (query, mutation, or subscription).
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * const usersQuery: GraphQLOperation = {
83
+ * type: 'query',
84
+ * variableName: 'usersQuery',
85
+ * operationName: 'Users',
86
+ * fields: [{
87
+ * name: 'users',
88
+ * fields: [{ type: 'spread', fragment: userRowFragment }],
89
+ * }],
90
+ * };
91
+ * ```
92
+ */
93
+ export interface GraphQLOperation {
94
+ type: 'query' | 'mutation' | 'subscription';
95
+ /** Variable name in generated code (e.g., "usersQuery") */
96
+ variableName: string;
97
+ /** Operation name in GraphQL (e.g., "Users") */
98
+ operationName: string;
99
+ /** GraphQL variables for the operation */
100
+ variables?: GraphQLVariable[];
101
+ /** Fields to include in the operation */
102
+ fields: GraphQLField[];
103
+ }
104
+ export declare function isSimpleField(field: GraphQLField): field is GraphQLSimpleField;
105
+ export declare function isSpreadField(field: GraphQLField): field is GraphQLSpreadField;
106
+ /**
107
+ * Renders an array of GraphQL fields to a string.
108
+ * Fields are sorted by: simple fields first, then spread fields, then nested fields.
109
+ */
110
+ export declare function renderFields(fields: GraphQLField[]): string;
111
+ /**
112
+ * Renders a GraphQL fragment definition to a string.
113
+ */
114
+ export declare function renderFragment(fragment: GraphQLFragment): string;
115
+ /**
116
+ * Renders a GraphQL operation (query/mutation/subscription) to a string.
117
+ */
118
+ export declare function renderOperation(operation: GraphQLOperation): string;
119
+ /**
120
+ * Merges an array of GraphQL fields, combining fields with the same name.
121
+ */
122
+ export declare function mergeGraphqlFields(fields: GraphQLField[]): GraphQLField[];
123
+ /**
124
+ * Checks if two arrays of GraphQL fields are identical.
125
+ */
126
+ export declare function areFieldsIdentical(fieldsOne: GraphQLField[], fieldsTwo: GraphQLField[]): boolean;
127
+ /**
128
+ * Collects all GraphQLFragment dependencies from a list of fields.
129
+ * Walks the field tree recursively to find all spread fields.
130
+ */
131
+ export declare function collectFragmentDependencies(fields: GraphQLField[]): GraphQLFragment[];
132
+ export {};
133
+ //# sourceMappingURL=graphql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../../../src/writers/graphql/graphql.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,UAAU,kBAAkB;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAClC;AAED,UAAU,oBAAoB;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,KAAK,oBAAoB,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;AAEtE,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAMD,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAMD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;CACd;AAMD;;GAEG;AACH,UAAU,kBAAkB;IAC1B,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,eAAe,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;GAYG;AACH,UAAU,kBAAkB;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED,MAAM,MAAM,YAAY,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;AAMnE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;IAC5C,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,aAAa,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,eAAe,EAAE,CAAC;IAC9B,yCAAyC;IACzC,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAMD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,YAAY,GAClB,KAAK,IAAI,kBAAkB,CAE7B;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,YAAY,GAClB,KAAK,IAAI,kBAAkB,CAE7B;AAuED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAc3D;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAIhE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAcnE;AAgCD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAmBzE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,YAAY,EAAE,EACzB,SAAS,EAAE,YAAY,EAAE,GACxB,OAAO,CAET;AAMD;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,YAAY,EAAE,GACrB,eAAe,EAAE,CAmBnB"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Core GraphQL types and rendering utilities.
3
+ * These types are library-agnostic and can be used with any GraphQL code generation approach.
4
+ */
5
+ import { isEqual, sortBy } from 'es-toolkit';
6
+ // ============================================================================
7
+ // Type Guards
8
+ // ============================================================================
9
+ export function isSimpleField(field) {
10
+ return field.type === 'simple' || field.type === undefined;
11
+ }
12
+ export function isSpreadField(field) {
13
+ return field.type === 'spread';
14
+ }
15
+ // ============================================================================
16
+ // Rendering Utilities
17
+ // ============================================================================
18
+ function indent(text) {
19
+ return text
20
+ .split('\n')
21
+ .map((line) => line && ` ${line}`)
22
+ .join('\n');
23
+ }
24
+ function renderArgumentValue(value) {
25
+ switch (value.type) {
26
+ case 'scalar': {
27
+ switch (typeof value.value) {
28
+ case 'string': {
29
+ return `"${value.value}"`;
30
+ }
31
+ case 'number':
32
+ case 'boolean': {
33
+ return value.value.toString();
34
+ }
35
+ default: {
36
+ throw new Error(`Unsupported GraphQL scalar value type: ${typeof value.value}`);
37
+ }
38
+ }
39
+ }
40
+ case 'variable': {
41
+ return `$${value.variable}`;
42
+ }
43
+ default: {
44
+ throw new Error(`Unknown GraphQL value type: ${value.type}`);
45
+ }
46
+ }
47
+ }
48
+ function renderArgument({ name, value }) {
49
+ return `${name}: ${renderArgumentValue(value)}`;
50
+ }
51
+ function renderSimpleField({ name, args, fields }) {
52
+ let fieldDefinition = name;
53
+ if (args?.length) {
54
+ fieldDefinition += `(${args.map((arg) => renderArgument(arg)).join(', ')})`;
55
+ }
56
+ if (fields?.length) {
57
+ fieldDefinition += ` {\n${indent(renderFields(fields))}\n}`;
58
+ }
59
+ return fieldDefinition;
60
+ }
61
+ function renderSpreadField(field) {
62
+ return `...${field.fragment.fragmentName}`;
63
+ }
64
+ function renderField(field) {
65
+ if (isSpreadField(field)) {
66
+ return renderSpreadField(field);
67
+ }
68
+ return renderSimpleField(field);
69
+ }
70
+ /**
71
+ * Renders an array of GraphQL fields to a string.
72
+ * Fields are sorted by: simple fields first, then spread fields, then nested fields.
73
+ */
74
+ export function renderFields(fields) {
75
+ const sortedFields = sortBy(fields, [
76
+ // Sort by: simple fields, spread fields, then nested fields
77
+ (f) => {
78
+ if (isSpreadField(f))
79
+ return 1;
80
+ if (isSimpleField(f) && f.fields?.length)
81
+ return 2;
82
+ return 0;
83
+ },
84
+ // Sort by order if provided
85
+ (f) => (isSimpleField(f) ? (f.order ?? 0) : 0),
86
+ // Sort by name/fragment name
87
+ (f) => (isSpreadField(f) ? f.fragment.fragmentName : f.name),
88
+ ]);
89
+ return sortedFields.map((field) => renderField(field)).join('\n');
90
+ }
91
+ function renderVariable({ name, type }) {
92
+ return `$${name}: ${type}`;
93
+ }
94
+ /**
95
+ * Renders a GraphQL fragment definition to a string.
96
+ */
97
+ export function renderFragment(fragment) {
98
+ return `fragment ${fragment.fragmentName} on ${fragment.onType} {
99
+ ${indent(renderFields(fragment.fields))}
100
+ }`;
101
+ }
102
+ /**
103
+ * Renders a GraphQL operation (query/mutation/subscription) to a string.
104
+ */
105
+ export function renderOperation(operation) {
106
+ let opString = operation.type;
107
+ if (operation.operationName) {
108
+ opString += ` ${operation.operationName}`;
109
+ }
110
+ if (operation.variables?.length) {
111
+ opString += `(${operation.variables.map((v) => renderVariable(v)).join(', ')})`;
112
+ }
113
+ opString += ` {\n${indent(renderFields(operation.fields))}\n}`;
114
+ return opString;
115
+ }
116
+ // ============================================================================
117
+ // Field Merging Utilities
118
+ // ============================================================================
119
+ /**
120
+ * Checks if two fields are mergeable (same name/fragment with compatible args).
121
+ */
122
+ function areFieldsMergeable(fieldOne, fieldTwo) {
123
+ if (isSimpleField(fieldOne) && isSimpleField(fieldTwo)) {
124
+ if (fieldOne.name !== fieldTwo.name) {
125
+ return false;
126
+ }
127
+ if (!isEqual(fieldOne.args, fieldTwo.args)) {
128
+ throw new Error(`Unable to merge fields with different args: ${fieldOne.name}`);
129
+ }
130
+ return true;
131
+ }
132
+ if (isSpreadField(fieldOne) && isSpreadField(fieldTwo)) {
133
+ return fieldOne.fragment.fragmentName === fieldTwo.fragment.fragmentName;
134
+ }
135
+ return false;
136
+ }
137
+ /**
138
+ * Merges an array of GraphQL fields, combining fields with the same name.
139
+ */
140
+ export function mergeGraphqlFields(fields) {
141
+ const mergedFields = [];
142
+ for (const field of fields) {
143
+ const existingField = mergedFields.find((f) => areFieldsMergeable(f, field));
144
+ if (existingField && isSimpleField(existingField) && isSimpleField(field)) {
145
+ existingField.fields = mergeGraphqlFields([
146
+ ...(existingField.fields ?? []),
147
+ ...(field.fields ?? []),
148
+ ]);
149
+ }
150
+ else if (!existingField) {
151
+ mergedFields.push(field);
152
+ }
153
+ }
154
+ return mergedFields;
155
+ }
156
+ /**
157
+ * Checks if two arrays of GraphQL fields are identical.
158
+ */
159
+ export function areFieldsIdentical(fieldsOne, fieldsTwo) {
160
+ return isEqual(fieldsOne, fieldsTwo);
161
+ }
162
+ // ============================================================================
163
+ // Dependency Collection
164
+ // ============================================================================
165
+ /**
166
+ * Collects all GraphQLFragment dependencies from a list of fields.
167
+ * Walks the field tree recursively to find all spread fields.
168
+ */
169
+ export function collectFragmentDependencies(fields) {
170
+ const fragments = [];
171
+ const seen = new Set();
172
+ function walk(fieldList) {
173
+ for (const field of fieldList) {
174
+ if (isSpreadField(field)) {
175
+ if (!seen.has(field.fragment.variableName)) {
176
+ seen.add(field.fragment.variableName);
177
+ fragments.push(field.fragment);
178
+ }
179
+ }
180
+ else if (field.fields) {
181
+ walk(field.fields);
182
+ }
183
+ }
184
+ }
185
+ walk(fields);
186
+ return fragments;
187
+ }
188
+ //# sourceMappingURL=graphql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql.js","sourceRoot":"","sources":["../../../src/writers/graphql/graphql.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAmI7C,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,MAAM,UAAU,aAAa,CAC3B,KAAmB;IAEnB,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,KAAmB;IAEnB,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AACjC,CAAC;AAED,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,IAAI;SACR,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;SAClC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAA2B;IACtD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,QAAQ,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC3B,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,OAAO,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC;gBAC5B,CAAC;gBACD,KAAK,QAAQ,CAAC;gBACd,KAAK,SAAS,CAAC,CAAC,CAAC;oBACf,OAAO,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAChC,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC;oBACR,MAAM,IAAI,KAAK,CACb,0CAA0C,OAAO,KAAK,CAAC,KAAK,EAAE,CAC/D,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,IAAI,KAAK,CACb,+BAAgC,KAA0B,CAAC,IAAI,EAAE,CAClE,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,EAAmB;IACtD,OAAO,GAAG,IAAI,KAAK,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAsB;IACnE,IAAI,eAAe,GAAG,IAAI,CAAC;IAE3B,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;QACjB,eAAe,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9E,CAAC;IAED,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;QACnB,eAAe,IAAI,OAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;IAC9D,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAyB;IAClD,OAAO,MAAM,KAAK,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAC7C,CAAC;AAED,SAAS,WAAW,CAAC,KAAmB;IACtC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAsB;IACjD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE;QAClC,4DAA4D;QAC5D,CAAC,CAAC,EAAE,EAAE;YACJ,IAAI,aAAa,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;YAC/B,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM;gBAAE,OAAO,CAAC,CAAC;YACnD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,4BAA4B;QAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,6BAA6B;QAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;KAC7D,CAAC,CAAC;IACH,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAmB;IACrD,OAAO,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAyB;IACtD,OAAO,YAAY,QAAQ,CAAC,YAAY,OAAO,QAAQ,CAAC,MAAM;EAC9D,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;EACrC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,SAA2B;IACzD,IAAI,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC;IAE9B,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;QAC5B,QAAQ,IAAI,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;IAC5C,CAAC;IAED,IAAI,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QAChC,QAAQ,IAAI,IAAI,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAClF,CAAC;IAED,QAAQ,IAAI,OAAO,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;IAE/D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E;;GAEG;AACH,SAAS,kBAAkB,CACzB,QAAsB,EACtB,QAAsB;IAEtB,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CACb,+CAA+C,QAAQ,CAAC,IAAI,EAAE,CAC/D,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,OAAO,QAAQ,CAAC,QAAQ,CAAC,YAAY,KAAK,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC3E,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAsB;IACvD,MAAM,YAAY,GAAmB,EAAE,CAAC;IAExC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5C,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,CAC7B,CAAC;QAEF,IAAI,aAAa,IAAI,aAAa,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1E,aAAa,CAAC,MAAM,GAAG,kBAAkB,CAAC;gBACxC,GAAG,CAAC,aAAa,CAAC,MAAM,IAAI,EAAE,CAAC;gBAC/B,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;aACxB,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC1B,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAyB,EACzB,SAAyB;IAEzB,OAAO,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACvC,CAAC;AAED,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CACzC,MAAsB;IAEtB,MAAM,SAAS,GAAsB,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,SAAS,IAAI,CAAC,SAAyB;QACrC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC3C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;oBACtC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACxB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,CAAC;IACb,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -1,66 +1,3 @@
1
- interface GraphQLArgumentScalarValue {
2
- type: 'scalar';
3
- value: string | number | boolean;
4
- }
5
- interface GraphQLArgumentVariableValue {
6
- type: 'variable';
7
- variable: string;
8
- }
9
- type GraphQLArgumentValue = GraphQLArgumentScalarValue | GraphQLArgumentVariableValue;
10
- interface GraphQLArgument {
11
- name: string;
12
- value: GraphQLArgumentValue;
13
- }
14
- interface GraphQLSimpleField {
15
- type?: 'simple' | undefined;
16
- name: string;
17
- args?: GraphQLArgument[];
18
- fields?: GraphQLField[];
19
- order?: number;
20
- }
21
- interface GraphQLSpreadField {
22
- type: 'spread';
23
- on: string;
24
- }
25
- export type GraphQLField = GraphQLSimpleField | GraphQLSpreadField;
26
- interface GraphQLVariable {
27
- name: string;
28
- type: string;
29
- }
30
- export interface GraphQLRoot {
31
- type: 'query' | 'mutation' | 'subscription';
32
- name?: string;
33
- variables?: GraphQLVariable[];
34
- fields: GraphQLField[];
35
- }
36
- export interface GraphQLFragment {
37
- name: string;
38
- type: string;
39
- fields: GraphQLField[];
40
- }
41
- export declare function renderGraphQLFragment({ name, type, fields, }: GraphQLFragment): string;
42
- export declare function renderGraphQLRoot({ type, name, variables, fields, }: GraphQLRoot): string;
43
- /**
44
- * Merges an array of `GraphQLField` objects, combining any mergeable fields.
45
- *
46
- * This function iterates through the input fields, merging entries that are determined to be mergeable
47
- * based on `areFieldsMergeable`. Non-mergeable fields are added directly to the result.
48
- *
49
- * @param fields - An array of `GraphQLField` objects to merge.
50
- * @returns An array of merged `GraphQLField` objects.
51
- */
52
- export declare function mergeGraphQLFields(fields: GraphQLField[]): GraphQLField[];
53
- /**
54
- * Merges an array of `GraphQLFragment` objects, combining any mergeable fragments.
55
- *
56
- * This function iterates through the input fragments and merges entries that are determined to be
57
- * mergeable based on `areFragmentsMergeable`. If fragments are mergeable, their `fields` are merged
58
- * using `mergeGraphQLFields`. Non-mergeable fragments are added directly to the result.
59
- *
60
- * @param frags - An array of `GraphQLFragment` objects to merge.
61
- * @returns An array of merged `GraphQLFragment` objects.
62
- */
63
- export declare function mergeGraphQLFragments(frags: GraphQLFragment[]): GraphQLFragment[];
64
- export declare function areFieldsIdentical(fieldsOne: GraphQLField[], fieldsTwo: GraphQLField[]): boolean;
65
- export {};
1
+ export * from './gql-tada.js';
2
+ export * from './graphql.js';
66
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/writers/graphql/index.ts"],"names":[],"mappings":"AAEA,UAAU,0BAA0B;IAClC,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAClC;AAED,UAAU,4BAA4B;IACpC,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,KAAK,oBAAoB,GACrB,0BAA0B,GAC1B,4BAA4B,CAAC;AAEjC,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED,UAAU,kBAAkB;IAC1B,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,eAAe,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,kBAAkB;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,YAAY,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;AAEnE,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,eAAe,EAAE,CAAC;IAC9B,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAqGD,wBAAgB,qBAAqB,CAAC,EACpC,IAAI,EACJ,IAAI,EACJ,MAAM,GACP,EAAE,eAAe,GAAG,MAAM,CAI1B;AAMD,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,MAAM,GACP,EAAE,WAAW,GAAG,MAAM,CAatB;AA2CD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAsBzE;AA2BD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,eAAe,EAAE,GACvB,eAAe,EAAE,CAsBnB;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,YAAY,EAAE,EACzB,SAAS,EAAE,YAAY,EAAE,GACxB,OAAO,CAET"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/writers/graphql/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}