@constructive-io/graphql-codegen 2.19.0 → 2.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/README.md +1818 -113
  2. package/__tests__/codegen/input-types-generator.test.d.ts +1 -0
  3. package/__tests__/codegen/input-types-generator.test.js +635 -0
  4. package/cli/codegen/barrel.d.ts +27 -0
  5. package/cli/codegen/barrel.js +163 -0
  6. package/cli/codegen/client.d.ts +4 -0
  7. package/cli/codegen/client.js +170 -0
  8. package/cli/codegen/custom-mutations.d.ts +38 -0
  9. package/cli/codegen/custom-mutations.js +149 -0
  10. package/cli/codegen/custom-queries.d.ts +38 -0
  11. package/cli/codegen/custom-queries.js +358 -0
  12. package/cli/codegen/filters.d.ts +27 -0
  13. package/cli/codegen/filters.js +357 -0
  14. package/cli/codegen/gql-ast.d.ts +41 -0
  15. package/cli/codegen/gql-ast.js +329 -0
  16. package/cli/codegen/index.d.ts +71 -0
  17. package/cli/codegen/index.js +147 -0
  18. package/cli/codegen/mutations.d.ts +30 -0
  19. package/cli/codegen/mutations.js +410 -0
  20. package/cli/codegen/orm/barrel.d.ts +18 -0
  21. package/cli/codegen/orm/barrel.js +48 -0
  22. package/cli/codegen/orm/client-generator.d.ts +45 -0
  23. package/cli/codegen/orm/client-generator.js +646 -0
  24. package/cli/codegen/orm/custom-ops-generator.d.ts +30 -0
  25. package/cli/codegen/orm/custom-ops-generator.js +350 -0
  26. package/cli/codegen/orm/index.d.ts +38 -0
  27. package/cli/codegen/orm/index.js +88 -0
  28. package/cli/codegen/orm/input-types-generator.d.ts +21 -0
  29. package/cli/codegen/orm/input-types-generator.js +705 -0
  30. package/cli/codegen/orm/input-types-generator.test.d.ts +1 -0
  31. package/cli/codegen/orm/input-types-generator.test.js +75 -0
  32. package/cli/codegen/orm/model-generator.d.ts +32 -0
  33. package/cli/codegen/orm/model-generator.js +264 -0
  34. package/cli/codegen/orm/query-builder.d.ts +161 -0
  35. package/cli/codegen/orm/query-builder.js +366 -0
  36. package/cli/codegen/orm/select-types.d.ts +169 -0
  37. package/cli/codegen/orm/select-types.js +16 -0
  38. package/cli/codegen/orm/select-types.test.d.ts +11 -0
  39. package/cli/codegen/orm/select-types.test.js +22 -0
  40. package/cli/codegen/queries.d.ts +25 -0
  41. package/cli/codegen/queries.js +438 -0
  42. package/cli/codegen/scalars.d.ts +12 -0
  43. package/cli/codegen/scalars.js +71 -0
  44. package/cli/codegen/schema-gql-ast.d.ts +51 -0
  45. package/cli/codegen/schema-gql-ast.js +385 -0
  46. package/cli/codegen/ts-ast.d.ts +122 -0
  47. package/cli/codegen/ts-ast.js +280 -0
  48. package/cli/codegen/type-resolver.d.ts +96 -0
  49. package/cli/codegen/type-resolver.js +246 -0
  50. package/cli/codegen/types.d.ts +12 -0
  51. package/cli/codegen/types.js +69 -0
  52. package/cli/codegen/utils.d.ts +163 -0
  53. package/cli/codegen/utils.js +326 -0
  54. package/cli/commands/generate-orm.d.ts +37 -0
  55. package/cli/commands/generate-orm.js +195 -0
  56. package/cli/commands/generate.d.ts +39 -0
  57. package/cli/commands/generate.js +299 -0
  58. package/cli/commands/index.d.ts +7 -0
  59. package/cli/commands/index.js +12 -0
  60. package/cli/commands/init.d.ts +35 -0
  61. package/cli/commands/init.js +176 -0
  62. package/cli/index.d.ts +4 -0
  63. package/cli/index.js +291 -0
  64. package/cli/introspect/fetch-meta.d.ts +31 -0
  65. package/cli/introspect/fetch-meta.js +108 -0
  66. package/cli/introspect/fetch-schema.d.ts +21 -0
  67. package/cli/introspect/fetch-schema.js +86 -0
  68. package/cli/introspect/index.d.ts +8 -0
  69. package/cli/introspect/index.js +16 -0
  70. package/cli/introspect/meta-query.d.ts +111 -0
  71. package/cli/introspect/meta-query.js +191 -0
  72. package/cli/introspect/schema-query.d.ts +20 -0
  73. package/cli/introspect/schema-query.js +123 -0
  74. package/cli/introspect/transform-schema.d.ts +74 -0
  75. package/cli/introspect/transform-schema.js +269 -0
  76. package/cli/introspect/transform-schema.test.d.ts +1 -0
  77. package/cli/introspect/transform-schema.test.js +67 -0
  78. package/cli/introspect/transform.d.ts +21 -0
  79. package/cli/introspect/transform.js +216 -0
  80. package/cli/watch/cache.d.ts +45 -0
  81. package/cli/watch/cache.js +111 -0
  82. package/cli/watch/debounce.d.ts +19 -0
  83. package/cli/watch/debounce.js +89 -0
  84. package/cli/watch/hash.d.ts +17 -0
  85. package/cli/watch/hash.js +48 -0
  86. package/cli/watch/index.d.ts +10 -0
  87. package/cli/watch/index.js +22 -0
  88. package/cli/watch/orchestrator.d.ts +63 -0
  89. package/cli/watch/orchestrator.js +228 -0
  90. package/cli/watch/poller.d.ts +65 -0
  91. package/cli/watch/poller.js +203 -0
  92. package/cli/watch/types.d.ts +67 -0
  93. package/cli/watch/types.js +5 -0
  94. package/client/error.d.ts +95 -0
  95. package/client/error.js +255 -0
  96. package/client/execute.d.ts +57 -0
  97. package/client/execute.js +124 -0
  98. package/client/index.d.ts +6 -0
  99. package/client/index.js +18 -0
  100. package/client/typed-document.d.ts +31 -0
  101. package/client/typed-document.js +44 -0
  102. package/core/ast.d.ts +10 -0
  103. package/core/ast.js +593 -0
  104. package/core/custom-ast.d.ts +35 -0
  105. package/core/custom-ast.js +204 -0
  106. package/core/index.d.ts +8 -0
  107. package/core/index.js +33 -0
  108. package/core/meta-object/convert.d.ts +65 -0
  109. package/core/meta-object/convert.js +63 -0
  110. package/core/meta-object/format.json +93 -0
  111. package/core/meta-object/index.d.ts +2 -0
  112. package/core/meta-object/index.js +18 -0
  113. package/core/meta-object/validate.d.ts +9 -0
  114. package/core/meta-object/validate.js +34 -0
  115. package/core/query-builder.d.ts +46 -0
  116. package/core/query-builder.js +412 -0
  117. package/core/types.d.ts +139 -0
  118. package/core/types.js +28 -0
  119. package/esm/__tests__/codegen/input-types-generator.test.d.ts +1 -0
  120. package/esm/__tests__/codegen/input-types-generator.test.js +633 -0
  121. package/esm/cli/codegen/barrel.d.ts +27 -0
  122. package/esm/cli/codegen/barrel.js +156 -0
  123. package/esm/cli/codegen/client.d.ts +4 -0
  124. package/esm/cli/codegen/client.js +167 -0
  125. package/esm/cli/codegen/custom-mutations.d.ts +38 -0
  126. package/esm/cli/codegen/custom-mutations.js +145 -0
  127. package/esm/cli/codegen/custom-queries.d.ts +38 -0
  128. package/esm/cli/codegen/custom-queries.js +354 -0
  129. package/esm/cli/codegen/filters.d.ts +27 -0
  130. package/esm/cli/codegen/filters.js +351 -0
  131. package/esm/cli/codegen/gql-ast.d.ts +41 -0
  132. package/esm/cli/codegen/gql-ast.js +288 -0
  133. package/esm/cli/codegen/index.d.ts +71 -0
  134. package/esm/cli/codegen/index.js +124 -0
  135. package/esm/cli/codegen/mutations.d.ts +30 -0
  136. package/esm/cli/codegen/mutations.js +404 -0
  137. package/esm/cli/codegen/orm/barrel.d.ts +18 -0
  138. package/esm/cli/codegen/orm/barrel.js +44 -0
  139. package/esm/cli/codegen/orm/client-generator.d.ts +45 -0
  140. package/esm/cli/codegen/orm/client-generator.js +640 -0
  141. package/esm/cli/codegen/orm/custom-ops-generator.d.ts +30 -0
  142. package/esm/cli/codegen/orm/custom-ops-generator.js +346 -0
  143. package/esm/cli/codegen/orm/index.d.ts +38 -0
  144. package/esm/cli/codegen/orm/index.js +75 -0
  145. package/esm/cli/codegen/orm/input-types-generator.d.ts +21 -0
  146. package/esm/cli/codegen/orm/input-types-generator.js +700 -0
  147. package/esm/cli/codegen/orm/input-types-generator.test.d.ts +1 -0
  148. package/esm/cli/codegen/orm/input-types-generator.test.js +73 -0
  149. package/esm/cli/codegen/orm/model-generator.d.ts +32 -0
  150. package/esm/cli/codegen/orm/model-generator.js +260 -0
  151. package/esm/cli/codegen/orm/query-builder.d.ts +161 -0
  152. package/esm/cli/codegen/orm/query-builder.js +353 -0
  153. package/esm/cli/codegen/orm/select-types.d.ts +169 -0
  154. package/esm/cli/codegen/orm/select-types.js +15 -0
  155. package/esm/cli/codegen/orm/select-types.test.d.ts +11 -0
  156. package/esm/cli/codegen/orm/select-types.test.js +21 -0
  157. package/esm/cli/codegen/queries.d.ts +25 -0
  158. package/esm/cli/codegen/queries.js +433 -0
  159. package/esm/cli/codegen/scalars.d.ts +12 -0
  160. package/esm/cli/codegen/scalars.js +66 -0
  161. package/esm/cli/codegen/schema-gql-ast.d.ts +51 -0
  162. package/esm/cli/codegen/schema-gql-ast.js +343 -0
  163. package/esm/cli/codegen/ts-ast.d.ts +122 -0
  164. package/esm/cli/codegen/ts-ast.js +260 -0
  165. package/esm/cli/codegen/type-resolver.d.ts +96 -0
  166. package/esm/cli/codegen/type-resolver.js +224 -0
  167. package/esm/cli/codegen/types.d.ts +12 -0
  168. package/esm/cli/codegen/types.js +65 -0
  169. package/esm/cli/codegen/utils.d.ts +163 -0
  170. package/esm/cli/codegen/utils.js +288 -0
  171. package/esm/cli/commands/generate-orm.d.ts +37 -0
  172. package/esm/cli/commands/generate-orm.js +192 -0
  173. package/esm/cli/commands/generate.d.ts +39 -0
  174. package/esm/cli/commands/generate.js +262 -0
  175. package/esm/cli/commands/index.d.ts +7 -0
  176. package/esm/cli/commands/index.js +5 -0
  177. package/esm/cli/commands/init.d.ts +35 -0
  178. package/esm/cli/commands/init.js +138 -0
  179. package/esm/cli/index.d.ts +4 -0
  180. package/esm/cli/index.js +256 -0
  181. package/esm/cli/introspect/fetch-meta.d.ts +31 -0
  182. package/esm/cli/introspect/fetch-meta.js +104 -0
  183. package/esm/cli/introspect/fetch-schema.d.ts +21 -0
  184. package/esm/cli/introspect/fetch-schema.js +83 -0
  185. package/esm/cli/introspect/index.d.ts +8 -0
  186. package/esm/cli/introspect/index.js +6 -0
  187. package/esm/cli/introspect/meta-query.d.ts +111 -0
  188. package/esm/cli/introspect/meta-query.js +188 -0
  189. package/esm/cli/introspect/schema-query.d.ts +20 -0
  190. package/esm/cli/introspect/schema-query.js +120 -0
  191. package/esm/cli/introspect/transform-schema.d.ts +74 -0
  192. package/esm/cli/introspect/transform-schema.js +259 -0
  193. package/esm/cli/introspect/transform-schema.test.d.ts +1 -0
  194. package/esm/cli/introspect/transform-schema.test.js +65 -0
  195. package/esm/cli/introspect/transform.d.ts +21 -0
  196. package/esm/cli/introspect/transform.js +210 -0
  197. package/esm/cli/watch/cache.d.ts +45 -0
  198. package/esm/cli/watch/cache.js +73 -0
  199. package/esm/cli/watch/debounce.d.ts +19 -0
  200. package/esm/cli/watch/debounce.js +85 -0
  201. package/esm/cli/watch/hash.d.ts +17 -0
  202. package/esm/cli/watch/hash.js +43 -0
  203. package/esm/cli/watch/index.d.ts +10 -0
  204. package/esm/cli/watch/index.js +8 -0
  205. package/esm/cli/watch/orchestrator.d.ts +63 -0
  206. package/esm/cli/watch/orchestrator.js +223 -0
  207. package/esm/cli/watch/poller.d.ts +65 -0
  208. package/esm/cli/watch/poller.js +198 -0
  209. package/esm/cli/watch/types.d.ts +67 -0
  210. package/esm/cli/watch/types.js +4 -0
  211. package/esm/client/error.d.ts +95 -0
  212. package/esm/client/error.js +249 -0
  213. package/esm/client/execute.d.ts +57 -0
  214. package/esm/client/execute.js +120 -0
  215. package/esm/client/index.d.ts +6 -0
  216. package/esm/client/index.js +6 -0
  217. package/esm/client/typed-document.d.ts +31 -0
  218. package/esm/client/typed-document.js +40 -0
  219. package/esm/core/ast.d.ts +10 -0
  220. package/esm/core/ast.js +549 -0
  221. package/esm/core/custom-ast.d.ts +35 -0
  222. package/esm/core/custom-ast.js +161 -0
  223. package/esm/core/index.d.ts +8 -0
  224. package/esm/core/index.js +12 -0
  225. package/esm/core/meta-object/convert.d.ts +65 -0
  226. package/esm/core/meta-object/convert.js +60 -0
  227. package/esm/core/meta-object/format.json +93 -0
  228. package/esm/core/meta-object/index.d.ts +2 -0
  229. package/esm/core/meta-object/index.js +2 -0
  230. package/esm/core/meta-object/validate.d.ts +9 -0
  231. package/esm/core/meta-object/validate.js +28 -0
  232. package/esm/core/query-builder.d.ts +46 -0
  233. package/esm/core/query-builder.js +375 -0
  234. package/esm/core/types.d.ts +139 -0
  235. package/esm/core/types.js +24 -0
  236. package/esm/generators/field-selector.d.ts +30 -0
  237. package/esm/generators/field-selector.js +355 -0
  238. package/esm/generators/index.d.ts +6 -0
  239. package/esm/generators/index.js +9 -0
  240. package/esm/generators/mutations.d.ts +31 -0
  241. package/esm/generators/mutations.js +197 -0
  242. package/esm/generators/select.d.ts +50 -0
  243. package/esm/generators/select.js +636 -0
  244. package/esm/index.d.ts +12 -0
  245. package/esm/index.js +17 -3
  246. package/esm/react/index.d.ts +5 -0
  247. package/esm/react/index.js +6 -0
  248. package/esm/types/config.d.ts +199 -0
  249. package/esm/types/config.js +106 -0
  250. package/esm/types/index.d.ts +9 -0
  251. package/esm/types/index.js +4 -0
  252. package/esm/types/introspection.d.ts +121 -0
  253. package/esm/types/introspection.js +54 -0
  254. package/esm/types/mutation.d.ts +45 -0
  255. package/esm/types/mutation.js +4 -0
  256. package/esm/types/query.d.ts +82 -0
  257. package/esm/types/query.js +4 -0
  258. package/esm/types/schema.d.ts +253 -0
  259. package/esm/types/schema.js +5 -0
  260. package/esm/types/selection.d.ts +43 -0
  261. package/esm/types/selection.js +4 -0
  262. package/esm/utils/index.d.ts +4 -0
  263. package/esm/utils/index.js +4 -0
  264. package/generators/field-selector.d.ts +30 -0
  265. package/generators/field-selector.js +361 -0
  266. package/generators/index.d.ts +6 -0
  267. package/generators/index.js +27 -0
  268. package/generators/mutations.d.ts +31 -0
  269. package/generators/mutations.js +235 -0
  270. package/generators/select.d.ts +50 -0
  271. package/generators/select.js +679 -0
  272. package/index.d.ts +12 -3
  273. package/index.js +19 -3
  274. package/package.json +59 -38
  275. package/react/index.d.ts +5 -0
  276. package/react/index.js +9 -0
  277. package/types/config.d.ts +199 -0
  278. package/types/config.js +111 -0
  279. package/types/index.d.ts +9 -0
  280. package/types/index.js +10 -0
  281. package/types/introspection.d.ts +121 -0
  282. package/types/introspection.js +62 -0
  283. package/types/mutation.d.ts +45 -0
  284. package/types/mutation.js +5 -0
  285. package/types/query.d.ts +82 -0
  286. package/types/query.js +5 -0
  287. package/types/schema.d.ts +253 -0
  288. package/types/schema.js +6 -0
  289. package/types/selection.d.ts +43 -0
  290. package/types/selection.js +5 -0
  291. package/utils/index.d.ts +4 -0
  292. package/utils/index.js +7 -0
  293. package/codegen.d.ts +0 -13
  294. package/codegen.js +0 -293
  295. package/esm/codegen.js +0 -253
  296. package/esm/gql.js +0 -939
  297. package/esm/options.js +0 -27
  298. package/gql.d.ts +0 -188
  299. package/gql.js +0 -992
  300. package/options.d.ts +0 -45
  301. package/options.js +0 -31
@@ -0,0 +1,188 @@
1
+ /**
2
+ * The _meta GraphQL query for introspecting PostGraphile schema
3
+ * This query fetches all table metadata including fields, constraints, and relations
4
+ */
5
+ export const META_QUERY = `
6
+ query Meta {
7
+ _meta {
8
+ tables {
9
+ name
10
+ query {
11
+ all
12
+ create
13
+ delete
14
+ one
15
+ update
16
+ }
17
+ fields {
18
+ name
19
+ type {
20
+ gqlType
21
+ isArray
22
+ modifier
23
+ pgAlias
24
+ pgType
25
+ subtype
26
+ typmod
27
+ }
28
+ }
29
+ inflection {
30
+ allRows
31
+ allRowsSimple
32
+ conditionType
33
+ connection
34
+ createField
35
+ createInputType
36
+ createPayloadType
37
+ deleteByPrimaryKey
38
+ deletePayloadType
39
+ edge
40
+ edgeField
41
+ enumType
42
+ filterType
43
+ inputType
44
+ orderByType
45
+ patchField
46
+ patchType
47
+ tableFieldName
48
+ tableType
49
+ typeName
50
+ updateByPrimaryKey
51
+ updatePayloadType
52
+ }
53
+ primaryKeyConstraints {
54
+ name
55
+ fields {
56
+ name
57
+ type {
58
+ gqlType
59
+ isArray
60
+ modifier
61
+ pgAlias
62
+ pgType
63
+ subtype
64
+ typmod
65
+ }
66
+ }
67
+ }
68
+ uniqueConstraints {
69
+ name
70
+ fields {
71
+ name
72
+ type {
73
+ gqlType
74
+ isArray
75
+ modifier
76
+ pgAlias
77
+ pgType
78
+ subtype
79
+ typmod
80
+ }
81
+ }
82
+ }
83
+ foreignKeyConstraints {
84
+ name
85
+ fields {
86
+ name
87
+ type {
88
+ gqlType
89
+ isArray
90
+ modifier
91
+ pgAlias
92
+ pgType
93
+ subtype
94
+ typmod
95
+ }
96
+ }
97
+ refFields {
98
+ name
99
+ type {
100
+ gqlType
101
+ isArray
102
+ modifier
103
+ pgAlias
104
+ pgType
105
+ subtype
106
+ typmod
107
+ }
108
+ }
109
+ refTable {
110
+ name
111
+ }
112
+ }
113
+ relations {
114
+ belongsTo {
115
+ fieldName
116
+ isUnique
117
+ keys {
118
+ name
119
+ type {
120
+ gqlType
121
+ isArray
122
+ modifier
123
+ pgAlias
124
+ pgType
125
+ subtype
126
+ typmod
127
+ }
128
+ }
129
+ references {
130
+ name
131
+ }
132
+ type
133
+ }
134
+ hasOne {
135
+ fieldName
136
+ isUnique
137
+ keys {
138
+ name
139
+ type {
140
+ gqlType
141
+ isArray
142
+ modifier
143
+ pgAlias
144
+ pgType
145
+ subtype
146
+ typmod
147
+ }
148
+ }
149
+ referencedBy {
150
+ name
151
+ }
152
+ type
153
+ }
154
+ hasMany {
155
+ fieldName
156
+ isUnique
157
+ keys {
158
+ name
159
+ type {
160
+ gqlType
161
+ isArray
162
+ modifier
163
+ pgAlias
164
+ pgType
165
+ subtype
166
+ typmod
167
+ }
168
+ }
169
+ referencedBy {
170
+ name
171
+ }
172
+ type
173
+ }
174
+ manyToMany {
175
+ fieldName
176
+ junctionTable {
177
+ name
178
+ }
179
+ rightTable {
180
+ name
181
+ }
182
+ type
183
+ }
184
+ }
185
+ }
186
+ }
187
+ }
188
+ `;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * GraphQL Schema Introspection Query
3
+ *
4
+ * Full introspection query that captures all queries, mutations, and types
5
+ * from a GraphQL endpoint via the standard __schema query.
6
+ */
7
+ import type { IntrospectionQueryResponse } from '../../types/introspection';
8
+ /**
9
+ * Full schema introspection query
10
+ *
11
+ * Captures:
12
+ * - All Query fields with args and return types
13
+ * - All Mutation fields with args and return types
14
+ * - All types (OBJECT, INPUT_OBJECT, ENUM, SCALAR) for resolution
15
+ *
16
+ * Uses a recursive TypeRef fragment to handle deeply nested type wrappers
17
+ * (e.g., [String!]! = NON_NULL(LIST(NON_NULL(SCALAR))))
18
+ */
19
+ export declare const SCHEMA_INTROSPECTION_QUERY = "\nquery IntrospectSchema {\n __schema {\n queryType {\n name\n }\n mutationType {\n name\n }\n subscriptionType {\n name\n }\n types {\n kind\n name\n description\n fields(includeDeprecated: true) {\n name\n description\n args {\n name\n description\n type {\n ...TypeRef\n }\n defaultValue\n }\n type {\n ...TypeRef\n }\n isDeprecated\n deprecationReason\n }\n inputFields {\n name\n description\n type {\n ...TypeRef\n }\n defaultValue\n }\n interfaces {\n name\n }\n enumValues(includeDeprecated: true) {\n name\n description\n isDeprecated\n deprecationReason\n }\n possibleTypes {\n name\n }\n }\n directives {\n name\n description\n locations\n args {\n name\n description\n type {\n ...TypeRef\n }\n defaultValue\n }\n }\n }\n}\n\nfragment TypeRef on __Type {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }\n}\n";
20
+ export type { IntrospectionQueryResponse };
@@ -0,0 +1,120 @@
1
+ /**
2
+ * GraphQL Schema Introspection Query
3
+ *
4
+ * Full introspection query that captures all queries, mutations, and types
5
+ * from a GraphQL endpoint via the standard __schema query.
6
+ */
7
+ /**
8
+ * Full schema introspection query
9
+ *
10
+ * Captures:
11
+ * - All Query fields with args and return types
12
+ * - All Mutation fields with args and return types
13
+ * - All types (OBJECT, INPUT_OBJECT, ENUM, SCALAR) for resolution
14
+ *
15
+ * Uses a recursive TypeRef fragment to handle deeply nested type wrappers
16
+ * (e.g., [String!]! = NON_NULL(LIST(NON_NULL(SCALAR))))
17
+ */
18
+ export const SCHEMA_INTROSPECTION_QUERY = `
19
+ query IntrospectSchema {
20
+ __schema {
21
+ queryType {
22
+ name
23
+ }
24
+ mutationType {
25
+ name
26
+ }
27
+ subscriptionType {
28
+ name
29
+ }
30
+ types {
31
+ kind
32
+ name
33
+ description
34
+ fields(includeDeprecated: true) {
35
+ name
36
+ description
37
+ args {
38
+ name
39
+ description
40
+ type {
41
+ ...TypeRef
42
+ }
43
+ defaultValue
44
+ }
45
+ type {
46
+ ...TypeRef
47
+ }
48
+ isDeprecated
49
+ deprecationReason
50
+ }
51
+ inputFields {
52
+ name
53
+ description
54
+ type {
55
+ ...TypeRef
56
+ }
57
+ defaultValue
58
+ }
59
+ interfaces {
60
+ name
61
+ }
62
+ enumValues(includeDeprecated: true) {
63
+ name
64
+ description
65
+ isDeprecated
66
+ deprecationReason
67
+ }
68
+ possibleTypes {
69
+ name
70
+ }
71
+ }
72
+ directives {
73
+ name
74
+ description
75
+ locations
76
+ args {
77
+ name
78
+ description
79
+ type {
80
+ ...TypeRef
81
+ }
82
+ defaultValue
83
+ }
84
+ }
85
+ }
86
+ }
87
+
88
+ fragment TypeRef on __Type {
89
+ kind
90
+ name
91
+ ofType {
92
+ kind
93
+ name
94
+ ofType {
95
+ kind
96
+ name
97
+ ofType {
98
+ kind
99
+ name
100
+ ofType {
101
+ kind
102
+ name
103
+ ofType {
104
+ kind
105
+ name
106
+ ofType {
107
+ kind
108
+ name
109
+ ofType {
110
+ kind
111
+ name
112
+ }
113
+ }
114
+ }
115
+ }
116
+ }
117
+ }
118
+ }
119
+ }
120
+ `;
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Transform GraphQL introspection data to clean operation types
3
+ *
4
+ * This module converts raw introspection responses into the CleanOperation
5
+ * format used by code generators.
6
+ */
7
+ import type { IntrospectionQueryResponse, IntrospectionType } from '../../types/introspection';
8
+ import { unwrapType, getBaseTypeName, isNonNull } from '../../types/introspection';
9
+ import type { CleanOperation, TypeRegistry } from '../../types/schema';
10
+ /**
11
+ * Build a type registry from introspection types
12
+ * Maps type names to their full resolved definitions
13
+ *
14
+ * This is a two-pass process to handle circular references:
15
+ * 1. First pass: Create all type entries with basic info
16
+ * 2. Second pass: Resolve fields with references to other types
17
+ */
18
+ export declare function buildTypeRegistry(types: IntrospectionType[]): TypeRegistry;
19
+ export interface TransformSchemaResult {
20
+ queries: CleanOperation[];
21
+ mutations: CleanOperation[];
22
+ typeRegistry: TypeRegistry;
23
+ }
24
+ /**
25
+ * Transform introspection response to clean operations
26
+ */
27
+ export declare function transformSchemaToOperations(response: IntrospectionQueryResponse): TransformSchemaResult;
28
+ /**
29
+ * Filter operations by include/exclude patterns
30
+ * Uses glob-like patterns (supports * wildcard)
31
+ */
32
+ export declare function filterOperations(operations: CleanOperation[], include?: string[], exclude?: string[]): CleanOperation[];
33
+ /**
34
+ * Get the set of table-related operation names from tables
35
+ * Used to identify which operations are already covered by table generators
36
+ *
37
+ * This includes:
38
+ * - Basic CRUD: all, one, create, update, delete
39
+ * - PostGraphile alternate mutations: updateXByY, deleteXByY (for unique constraints)
40
+ */
41
+ export declare function getTableOperationNames(tables: Array<{
42
+ name: string;
43
+ query?: {
44
+ all: string;
45
+ one: string;
46
+ create: string;
47
+ update: string | null;
48
+ delete: string | null;
49
+ };
50
+ inflection?: {
51
+ tableType: string;
52
+ };
53
+ }>): {
54
+ queries: Set<string>;
55
+ mutations: Set<string>;
56
+ tableTypePatterns: RegExp[];
57
+ };
58
+ /**
59
+ * Check if an operation is a table operation (already handled by table generators)
60
+ */
61
+ export declare function isTableOperation(operation: CleanOperation, tableOperationNames: {
62
+ queries: Set<string>;
63
+ mutations: Set<string>;
64
+ tableTypePatterns: RegExp[];
65
+ }): boolean;
66
+ /**
67
+ * Get only custom operations (not covered by table generators)
68
+ */
69
+ export declare function getCustomOperations(operations: CleanOperation[], tableOperationNames: {
70
+ queries: Set<string>;
71
+ mutations: Set<string>;
72
+ tableTypePatterns: RegExp[];
73
+ }): CleanOperation[];
74
+ export { unwrapType, getBaseTypeName, isNonNull };
@@ -0,0 +1,259 @@
1
+ import { unwrapType, getBaseTypeName, isNonNull, } from '../../types/introspection';
2
+ // ============================================================================
3
+ // Type Registry Builder
4
+ // ============================================================================
5
+ /**
6
+ * Build a type registry from introspection types
7
+ * Maps type names to their full resolved definitions
8
+ *
9
+ * This is a two-pass process to handle circular references:
10
+ * 1. First pass: Create all type entries with basic info
11
+ * 2. Second pass: Resolve fields with references to other types
12
+ */
13
+ export function buildTypeRegistry(types) {
14
+ const registry = new Map();
15
+ // First pass: Create all type entries
16
+ for (const type of types) {
17
+ // Skip built-in types that start with __
18
+ if (type.name.startsWith('__'))
19
+ continue;
20
+ const resolvedType = {
21
+ kind: type.kind,
22
+ name: type.name,
23
+ description: type.description ?? undefined,
24
+ };
25
+ // Resolve enum values for ENUM types (no circular refs possible)
26
+ if (type.kind === 'ENUM' && type.enumValues) {
27
+ resolvedType.enumValues = type.enumValues.map((ev) => ev.name);
28
+ }
29
+ registry.set(type.name, resolvedType);
30
+ }
31
+ // Second pass: Resolve fields (now that all types exist in registry)
32
+ for (const type of types) {
33
+ if (type.name.startsWith('__'))
34
+ continue;
35
+ const resolvedType = registry.get(type.name);
36
+ if (!resolvedType)
37
+ continue;
38
+ // Resolve fields for OBJECT types
39
+ if (type.kind === 'OBJECT' && type.fields) {
40
+ resolvedType.fields = type.fields.map((field) => transformFieldToCleanObjectFieldShallow(field));
41
+ }
42
+ // Resolve input fields for INPUT_OBJECT types
43
+ if (type.kind === 'INPUT_OBJECT' && type.inputFields) {
44
+ resolvedType.inputFields = type.inputFields.map((field) => transformInputValueToCleanArgumentShallow(field));
45
+ }
46
+ }
47
+ return registry;
48
+ }
49
+ /**
50
+ * Transform field to CleanObjectField without resolving nested types
51
+ * (shallow transformation to avoid circular refs)
52
+ */
53
+ function transformFieldToCleanObjectFieldShallow(field) {
54
+ return {
55
+ name: field.name,
56
+ type: transformTypeRefShallow(field.type),
57
+ description: field.description ?? undefined,
58
+ };
59
+ }
60
+ /**
61
+ * Transform input value to CleanArgument without resolving nested types
62
+ */
63
+ function transformInputValueToCleanArgumentShallow(inputValue) {
64
+ return {
65
+ name: inputValue.name,
66
+ type: transformTypeRefShallow(inputValue.type),
67
+ defaultValue: inputValue.defaultValue ?? undefined,
68
+ description: inputValue.description ?? undefined,
69
+ };
70
+ }
71
+ /**
72
+ * Transform TypeRef without resolving nested types
73
+ * Only handles wrappers (LIST, NON_NULL) and stores the type name
74
+ */
75
+ function transformTypeRefShallow(typeRef) {
76
+ const cleanRef = {
77
+ kind: typeRef.kind,
78
+ name: typeRef.name,
79
+ };
80
+ if (typeRef.ofType) {
81
+ cleanRef.ofType = transformTypeRefShallow(typeRef.ofType);
82
+ }
83
+ return cleanRef;
84
+ }
85
+ /**
86
+ * Transform introspection response to clean operations
87
+ */
88
+ export function transformSchemaToOperations(response) {
89
+ const { __schema: schema } = response;
90
+ const { types, queryType, mutationType } = schema;
91
+ // Build type registry first
92
+ const typeRegistry = buildTypeRegistry(types);
93
+ // Find Query and Mutation types
94
+ const queryTypeDef = types.find((t) => t.name === queryType.name);
95
+ const mutationTypeDef = mutationType
96
+ ? types.find((t) => t.name === mutationType.name)
97
+ : null;
98
+ // Transform queries
99
+ const queries = queryTypeDef?.fields
100
+ ? queryTypeDef.fields.map((field) => transformFieldToCleanOperation(field, 'query', types))
101
+ : [];
102
+ // Transform mutations
103
+ const mutations = mutationTypeDef?.fields
104
+ ? mutationTypeDef.fields.map((field) => transformFieldToCleanOperation(field, 'mutation', types))
105
+ : [];
106
+ return { queries, mutations, typeRegistry };
107
+ }
108
+ // ============================================================================
109
+ // Field to Operation Transformation
110
+ // ============================================================================
111
+ /**
112
+ * Transform an introspection field to a CleanOperation
113
+ */
114
+ function transformFieldToCleanOperation(field, kind, types) {
115
+ return {
116
+ name: field.name,
117
+ kind,
118
+ args: field.args.map((arg) => transformInputValueToCleanArgument(arg, types)),
119
+ returnType: transformTypeRefToCleanTypeRef(field.type, types),
120
+ description: field.description ?? undefined,
121
+ isDeprecated: field.isDeprecated,
122
+ deprecationReason: field.deprecationReason ?? undefined,
123
+ };
124
+ }
125
+ /**
126
+ * Transform an input value to CleanArgument
127
+ */
128
+ function transformInputValueToCleanArgument(inputValue, types) {
129
+ return {
130
+ name: inputValue.name,
131
+ type: transformTypeRefToCleanTypeRef(inputValue.type, types),
132
+ defaultValue: inputValue.defaultValue ?? undefined,
133
+ description: inputValue.description ?? undefined,
134
+ };
135
+ }
136
+ // ============================================================================
137
+ // Type Reference Transformation
138
+ // ============================================================================
139
+ /**
140
+ * Transform an introspection TypeRef to CleanTypeRef
141
+ * Recursively handles wrapper types (LIST, NON_NULL)
142
+ *
143
+ * NOTE: We intentionally do NOT resolve nested fields here to avoid
144
+ * infinite recursion from circular type references. Fields are resolved
145
+ * lazily via the TypeRegistry when needed for code generation.
146
+ */
147
+ function transformTypeRefToCleanTypeRef(typeRef, types) {
148
+ const cleanRef = {
149
+ kind: typeRef.kind,
150
+ name: typeRef.name,
151
+ };
152
+ // Recursively transform ofType for wrappers (LIST, NON_NULL)
153
+ if (typeRef.ofType) {
154
+ cleanRef.ofType = transformTypeRefToCleanTypeRef(typeRef.ofType, types);
155
+ }
156
+ // For named types, only resolve enum values (they don't have circular refs)
157
+ // Fields are NOT resolved here - they're resolved via TypeRegistry during codegen
158
+ if (typeRef.name && !typeRef.ofType) {
159
+ const typeDef = types.find((t) => t.name === typeRef.name);
160
+ if (typeDef) {
161
+ // Add enum values for ENUM types (safe, no recursion)
162
+ if (typeDef.kind === 'ENUM' && typeDef.enumValues) {
163
+ cleanRef.enumValues = typeDef.enumValues.map((ev) => ev.name);
164
+ }
165
+ // NOTE: OBJECT and INPUT_OBJECT fields are resolved via TypeRegistry
166
+ // to avoid circular reference issues
167
+ }
168
+ }
169
+ return cleanRef;
170
+ }
171
+ // ============================================================================
172
+ // Operation Filtering
173
+ // ============================================================================
174
+ /**
175
+ * Filter operations by include/exclude patterns
176
+ * Uses glob-like patterns (supports * wildcard)
177
+ */
178
+ export function filterOperations(operations, include, exclude) {
179
+ let result = operations;
180
+ if (include && include.length > 0) {
181
+ result = result.filter((op) => matchesPatterns(op.name, include));
182
+ }
183
+ if (exclude && exclude.length > 0) {
184
+ result = result.filter((op) => !matchesPatterns(op.name, exclude));
185
+ }
186
+ return result;
187
+ }
188
+ /**
189
+ * Check if a name matches any of the patterns
190
+ * Supports simple glob patterns with * wildcard
191
+ */
192
+ function matchesPatterns(name, patterns) {
193
+ return patterns.some((pattern) => {
194
+ if (pattern === '*')
195
+ return true;
196
+ if (pattern.includes('*')) {
197
+ const regex = new RegExp('^' + pattern.replace(/\*/g, '.*').replace(/\?/g, '.') + '$');
198
+ return regex.test(name);
199
+ }
200
+ return name === pattern;
201
+ });
202
+ }
203
+ // ============================================================================
204
+ // Utility Functions
205
+ // ============================================================================
206
+ /**
207
+ * Get the set of table-related operation names from tables
208
+ * Used to identify which operations are already covered by table generators
209
+ *
210
+ * This includes:
211
+ * - Basic CRUD: all, one, create, update, delete
212
+ * - PostGraphile alternate mutations: updateXByY, deleteXByY (for unique constraints)
213
+ */
214
+ export function getTableOperationNames(tables) {
215
+ const queries = new Set();
216
+ const mutations = new Set();
217
+ const tableTypePatterns = [];
218
+ for (const table of tables) {
219
+ if (table.query) {
220
+ queries.add(table.query.all);
221
+ queries.add(table.query.one);
222
+ mutations.add(table.query.create);
223
+ if (table.query.update)
224
+ mutations.add(table.query.update);
225
+ if (table.query.delete)
226
+ mutations.add(table.query.delete);
227
+ }
228
+ // Create patterns to match alternate CRUD mutations (updateXByY, deleteXByY)
229
+ if (table.inflection?.tableType) {
230
+ const typeName = table.inflection.tableType;
231
+ // Match: update{TypeName}By*, delete{TypeName}By*
232
+ tableTypePatterns.push(new RegExp(`^update${typeName}By`, 'i'));
233
+ tableTypePatterns.push(new RegExp(`^delete${typeName}By`, 'i'));
234
+ }
235
+ }
236
+ return { queries, mutations, tableTypePatterns };
237
+ }
238
+ /**
239
+ * Check if an operation is a table operation (already handled by table generators)
240
+ */
241
+ export function isTableOperation(operation, tableOperationNames) {
242
+ if (operation.kind === 'query') {
243
+ return tableOperationNames.queries.has(operation.name);
244
+ }
245
+ // Check exact match first
246
+ if (tableOperationNames.mutations.has(operation.name)) {
247
+ return true;
248
+ }
249
+ // Check pattern match for alternate CRUD mutations (updateXByY, deleteXByY)
250
+ return tableOperationNames.tableTypePatterns.some((pattern) => pattern.test(operation.name));
251
+ }
252
+ /**
253
+ * Get only custom operations (not covered by table generators)
254
+ */
255
+ export function getCustomOperations(operations, tableOperationNames) {
256
+ return operations.filter((op) => !isTableOperation(op, tableOperationNames));
257
+ }
258
+ // Re-export utility functions from introspection types
259
+ export { unwrapType, getBaseTypeName, isNonNull };
@@ -0,0 +1 @@
1
+ export {};