@eide/uniformgen 0.1.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 (299) hide show
  1. package/README.md +356 -0
  2. package/dist/auth/credentials.d.ts +58 -0
  3. package/dist/auth/credentials.d.ts.map +1 -0
  4. package/dist/auth/credentials.js +107 -0
  5. package/dist/cli.d.ts +3 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +563 -0
  8. package/dist/commands/init.d.ts +11 -0
  9. package/dist/commands/init.d.ts.map +1 -0
  10. package/dist/commands/init.js +113 -0
  11. package/dist/commands/login.d.ts +9 -0
  12. package/dist/commands/login.d.ts.map +1 -0
  13. package/dist/commands/login.js +158 -0
  14. package/dist/commands/logout.d.ts +5 -0
  15. package/dist/commands/logout.d.ts.map +1 -0
  16. package/dist/commands/logout.js +13 -0
  17. package/dist/commands/push.d.ts +13 -0
  18. package/dist/commands/push.d.ts.map +1 -0
  19. package/dist/commands/push.js +328 -0
  20. package/dist/commands/scaffold.d.ts +19 -0
  21. package/dist/commands/scaffold.d.ts.map +1 -0
  22. package/dist/commands/scaffold.js +366 -0
  23. package/dist/commands/seed.d.ts +20 -0
  24. package/dist/commands/seed.d.ts.map +1 -0
  25. package/dist/commands/seed.js +380 -0
  26. package/dist/commands/select-project.d.ts +10 -0
  27. package/dist/commands/select-project.d.ts.map +1 -0
  28. package/dist/commands/select-project.js +277 -0
  29. package/dist/commands/setup.d.ts +5 -0
  30. package/dist/commands/setup.d.ts.map +1 -0
  31. package/dist/commands/setup.js +51 -0
  32. package/dist/commands/sync.d.ts +13 -0
  33. package/dist/commands/sync.d.ts.map +1 -0
  34. package/dist/commands/sync.js +318 -0
  35. package/dist/commands/whoami.d.ts +5 -0
  36. package/dist/commands/whoami.d.ts.map +1 -0
  37. package/dist/commands/whoami.js +31 -0
  38. package/dist/config/load-config.d.ts +6 -0
  39. package/dist/config/load-config.d.ts.map +1 -0
  40. package/dist/config/load-config.js +103 -0
  41. package/dist/config/settings.d.ts +20 -0
  42. package/dist/config/settings.d.ts.map +1 -0
  43. package/dist/config/settings.js +64 -0
  44. package/dist/config/types.d.ts +152 -0
  45. package/dist/config/types.d.ts.map +1 -0
  46. package/dist/config/types.js +94 -0
  47. package/dist/fetcher/fetch-schemas.d.ts +140 -0
  48. package/dist/fetcher/fetch-schemas.d.ts.map +1 -0
  49. package/dist/fetcher/fetch-schemas.js +223 -0
  50. package/dist/fetcher/fetch-workflows.d.ts +53 -0
  51. package/dist/fetcher/fetch-workflows.d.ts.map +1 -0
  52. package/dist/fetcher/fetch-workflows.js +164 -0
  53. package/dist/generated/hooks/customer-detail.d.ts +74 -0
  54. package/dist/generated/hooks/customer-detail.d.ts.map +1 -0
  55. package/dist/generated/hooks/customer-detail.js +113 -0
  56. package/dist/generated/hooks/design-system.d.ts +74 -0
  57. package/dist/generated/hooks/design-system.d.ts.map +1 -0
  58. package/dist/generated/hooks/design-system.js +109 -0
  59. package/dist/generated/hooks/index.d.ts +16 -0
  60. package/dist/generated/hooks/index.d.ts.map +1 -0
  61. package/dist/generated/hooks/index.js +14 -0
  62. package/dist/generated/hooks/shopify-collection.d.ts +74 -0
  63. package/dist/generated/hooks/shopify-collection.d.ts.map +1 -0
  64. package/dist/generated/hooks/shopify-collection.js +113 -0
  65. package/dist/generated/hooks/shopify-market.d.ts +74 -0
  66. package/dist/generated/hooks/shopify-market.d.ts.map +1 -0
  67. package/dist/generated/hooks/shopify-market.js +109 -0
  68. package/dist/generated/hooks/shopify-product.d.ts +74 -0
  69. package/dist/generated/hooks/shopify-product.d.ts.map +1 -0
  70. package/dist/generated/hooks/shopify-product.js +113 -0
  71. package/dist/generated/hooks/shopify-variant.d.ts +74 -0
  72. package/dist/generated/hooks/shopify-variant.d.ts.map +1 -0
  73. package/dist/generated/hooks/shopify-variant.js +113 -0
  74. package/dist/generated/hooks/template.d.ts +74 -0
  75. package/dist/generated/hooks/template.d.ts.map +1 -0
  76. package/dist/generated/hooks/template.js +107 -0
  77. package/dist/generated/types/config.d.ts +88 -0
  78. package/dist/generated/types/config.d.ts.map +1 -0
  79. package/dist/generated/types/config.js +14 -0
  80. package/dist/generated/types/data-models/index.d.ts +7 -0
  81. package/dist/generated/types/data-models/index.d.ts.map +1 -0
  82. package/dist/generated/types/data-models/index.js +6 -0
  83. package/dist/generated/types/data-models/test.d.ts +29 -0
  84. package/dist/generated/types/data-models/test.d.ts.map +1 -0
  85. package/dist/generated/types/data-models/test.js +1 -0
  86. package/dist/generated/types/data-models/watch.d.ts +26 -0
  87. package/dist/generated/types/data-models/watch.d.ts.map +1 -0
  88. package/dist/generated/types/data-models/watch.js +1 -0
  89. package/dist/generated/types/field-types.d.ts +255 -0
  90. package/dist/generated/types/field-types.d.ts.map +1 -0
  91. package/dist/generated/types/field-types.js +35 -0
  92. package/dist/generated/types/hooks.d.ts +106 -0
  93. package/dist/generated/types/hooks.d.ts.map +1 -0
  94. package/dist/generated/types/hooks.js +9 -0
  95. package/dist/generated/types/index.d.ts +10 -0
  96. package/dist/generated/types/index.d.ts.map +1 -0
  97. package/dist/generated/types/index.js +9 -0
  98. package/dist/generated/types/models/button-variant.d.ts +16 -0
  99. package/dist/generated/types/models/button-variant.d.ts.map +1 -0
  100. package/dist/generated/types/models/button-variant.js +1 -0
  101. package/dist/generated/types/models/color-palette.d.ts +27 -0
  102. package/dist/generated/types/models/color-palette.d.ts.map +1 -0
  103. package/dist/generated/types/models/color-palette.js +1 -0
  104. package/dist/generated/types/models/color-with-scale.d.ts +15 -0
  105. package/dist/generated/types/models/color-with-scale.d.ts.map +1 -0
  106. package/dist/generated/types/models/color-with-scale.js +1 -0
  107. package/dist/generated/types/models/context.d.ts +53 -0
  108. package/dist/generated/types/models/context.d.ts.map +1 -0
  109. package/dist/generated/types/models/context.js +51 -0
  110. package/dist/generated/types/models/customer-detail.d.ts +32 -0
  111. package/dist/generated/types/models/customer-detail.d.ts.map +1 -0
  112. package/dist/generated/types/models/customer-detail.js +26 -0
  113. package/dist/generated/types/models/design-system-badges.d.ts +16 -0
  114. package/dist/generated/types/models/design-system-badges.d.ts.map +1 -0
  115. package/dist/generated/types/models/design-system-badges.js +1 -0
  116. package/dist/generated/types/models/design-system-buttons.d.ts +17 -0
  117. package/dist/generated/types/models/design-system-buttons.d.ts.map +1 -0
  118. package/dist/generated/types/models/design-system-buttons.js +1 -0
  119. package/dist/generated/types/models/design-system-cards.d.ts +16 -0
  120. package/dist/generated/types/models/design-system-cards.d.ts.map +1 -0
  121. package/dist/generated/types/models/design-system-cards.js +1 -0
  122. package/dist/generated/types/models/design-system-colors.d.ts +12 -0
  123. package/dist/generated/types/models/design-system-colors.d.ts.map +1 -0
  124. package/dist/generated/types/models/design-system-colors.js +1 -0
  125. package/dist/generated/types/models/design-system-dark-mode.d.ts +13 -0
  126. package/dist/generated/types/models/design-system-dark-mode.d.ts.map +1 -0
  127. package/dist/generated/types/models/design-system-dark-mode.js +1 -0
  128. package/dist/generated/types/models/design-system-focus-ring.d.ts +14 -0
  129. package/dist/generated/types/models/design-system-focus-ring.d.ts.map +1 -0
  130. package/dist/generated/types/models/design-system-focus-ring.js +1 -0
  131. package/dist/generated/types/models/design-system-grid.d.ts +18 -0
  132. package/dist/generated/types/models/design-system-grid.d.ts.map +1 -0
  133. package/dist/generated/types/models/design-system-grid.js +1 -0
  134. package/dist/generated/types/models/design-system-inputs.d.ts +26 -0
  135. package/dist/generated/types/models/design-system-inputs.d.ts.map +1 -0
  136. package/dist/generated/types/models/design-system-inputs.js +1 -0
  137. package/dist/generated/types/models/design-system-links.d.ts +16 -0
  138. package/dist/generated/types/models/design-system-links.d.ts.map +1 -0
  139. package/dist/generated/types/models/design-system-links.js +1 -0
  140. package/dist/generated/types/models/design-system-shadows.d.ts +20 -0
  141. package/dist/generated/types/models/design-system-shadows.d.ts.map +1 -0
  142. package/dist/generated/types/models/design-system-shadows.js +1 -0
  143. package/dist/generated/types/models/design-system-spacing.d.ts +13 -0
  144. package/dist/generated/types/models/design-system-spacing.d.ts.map +1 -0
  145. package/dist/generated/types/models/design-system-spacing.js +1 -0
  146. package/dist/generated/types/models/design-system-transitions.d.ts +15 -0
  147. package/dist/generated/types/models/design-system-transitions.d.ts.map +1 -0
  148. package/dist/generated/types/models/design-system-transitions.js +1 -0
  149. package/dist/generated/types/models/design-system-typography.d.ts +21 -0
  150. package/dist/generated/types/models/design-system-typography.d.ts.map +1 -0
  151. package/dist/generated/types/models/design-system-typography.js +1 -0
  152. package/dist/generated/types/models/design-system.d.ts +138 -0
  153. package/dist/generated/types/models/design-system.d.ts.map +1 -0
  154. package/dist/generated/types/models/design-system.js +64 -0
  155. package/dist/generated/types/models/experiment.d.ts +57 -0
  156. package/dist/generated/types/models/experiment.d.ts.map +1 -0
  157. package/dist/generated/types/models/experiment.js +55 -0
  158. package/dist/generated/types/models/font-file.d.ts +16 -0
  159. package/dist/generated/types/models/font-file.d.ts.map +1 -0
  160. package/dist/generated/types/models/font-file.js +1 -0
  161. package/dist/generated/types/models/index.d.ts +38 -0
  162. package/dist/generated/types/models/index.d.ts.map +1 -0
  163. package/dist/generated/types/models/index.js +12 -0
  164. package/dist/generated/types/models/integration.d.ts +32 -0
  165. package/dist/generated/types/models/integration.d.ts.map +1 -0
  166. package/dist/generated/types/models/integration.js +26 -0
  167. package/dist/generated/types/models/route-tree.d.ts +43 -0
  168. package/dist/generated/types/models/route-tree.d.ts.map +1 -0
  169. package/dist/generated/types/models/route-tree.js +39 -0
  170. package/dist/generated/types/models/segment.d.ts +57 -0
  171. package/dist/generated/types/models/segment.d.ts.map +1 -0
  172. package/dist/generated/types/models/segment.js +55 -0
  173. package/dist/generated/types/models/shopify-collection.d.ts +32 -0
  174. package/dist/generated/types/models/shopify-collection.d.ts.map +1 -0
  175. package/dist/generated/types/models/shopify-collection.js +26 -0
  176. package/dist/generated/types/models/shopify-market.d.ts +32 -0
  177. package/dist/generated/types/models/shopify-market.d.ts.map +1 -0
  178. package/dist/generated/types/models/shopify-market.js +26 -0
  179. package/dist/generated/types/models/shopify-product.d.ts +32 -0
  180. package/dist/generated/types/models/shopify-product.d.ts.map +1 -0
  181. package/dist/generated/types/models/shopify-product.js +26 -0
  182. package/dist/generated/types/models/shopify-variant.d.ts +32 -0
  183. package/dist/generated/types/models/shopify-variant.d.ts.map +1 -0
  184. package/dist/generated/types/models/shopify-variant.js +26 -0
  185. package/dist/generated/types/models/template.d.ts +53 -0
  186. package/dist/generated/types/models/template.d.ts.map +1 -0
  187. package/dist/generated/types/models/template.js +40 -0
  188. package/dist/generated/types/models/typography-variant.d.ts +15 -0
  189. package/dist/generated/types/models/typography-variant.d.ts.map +1 -0
  190. package/dist/generated/types/models/typography-variant.js +1 -0
  191. package/dist/generated/types/scalars.d.ts +56 -0
  192. package/dist/generated/types/scalars.d.ts.map +1 -0
  193. package/dist/generated/types/scalars.js +6 -0
  194. package/dist/generators/admin/index.d.ts +32 -0
  195. package/dist/generators/admin/index.d.ts.map +1 -0
  196. package/dist/generators/admin/index.js +219 -0
  197. package/dist/generators/admin/mutations.d.ts +23 -0
  198. package/dist/generators/admin/mutations.d.ts.map +1 -0
  199. package/dist/generators/admin/mutations.js +424 -0
  200. package/dist/generators/admin/queries.d.ts +20 -0
  201. package/dist/generators/admin/queries.d.ts.map +1 -0
  202. package/dist/generators/admin/queries.js +476 -0
  203. package/dist/generators/admin/types.d.ts +28 -0
  204. package/dist/generators/admin/types.d.ts.map +1 -0
  205. package/dist/generators/admin/types.js +254 -0
  206. package/dist/generators/cms/index.d.ts +29 -0
  207. package/dist/generators/cms/index.d.ts.map +1 -0
  208. package/dist/generators/cms/index.js +126 -0
  209. package/dist/generators/cms/route.d.ts +27 -0
  210. package/dist/generators/cms/route.d.ts.map +1 -0
  211. package/dist/generators/cms/route.js +409 -0
  212. package/dist/generators/cms/types.d.ts +15 -0
  213. package/dist/generators/cms/types.d.ts.map +1 -0
  214. package/dist/generators/cms/types.js +137 -0
  215. package/dist/generators/contexts/index.d.ts +25 -0
  216. package/dist/generators/contexts/index.d.ts.map +1 -0
  217. package/dist/generators/contexts/index.js +591 -0
  218. package/dist/generators/documents/data-models.d.ts +6 -0
  219. package/dist/generators/documents/data-models.d.ts.map +1 -0
  220. package/dist/generators/documents/data-models.js +61 -0
  221. package/dist/generators/documents/entity-models.d.ts +7 -0
  222. package/dist/generators/documents/entity-models.d.ts.map +1 -0
  223. package/dist/generators/documents/entity-models.js +87 -0
  224. package/dist/generators/documents/workflows.d.ts +11 -0
  225. package/dist/generators/documents/workflows.d.ts.map +1 -0
  226. package/dist/generators/documents/workflows.js +101 -0
  227. package/dist/generators/filters/index.d.ts +16 -0
  228. package/dist/generators/filters/index.d.ts.map +1 -0
  229. package/dist/generators/filters/index.js +384 -0
  230. package/dist/generators/hooks/agnostic.d.ts +16 -0
  231. package/dist/generators/hooks/agnostic.d.ts.map +1 -0
  232. package/dist/generators/hooks/agnostic.js +248 -0
  233. package/dist/generators/hooks/index.d.ts +9 -0
  234. package/dist/generators/hooks/index.d.ts.map +1 -0
  235. package/dist/generators/hooks/index.js +8 -0
  236. package/dist/generators/hooks/react.d.ts +16 -0
  237. package/dist/generators/hooks/react.d.ts.map +1 -0
  238. package/dist/generators/hooks/react.js +394 -0
  239. package/dist/generators/hooks/remix.d.ts +16 -0
  240. package/dist/generators/hooks/remix.d.ts.map +1 -0
  241. package/dist/generators/hooks/remix.js +349 -0
  242. package/dist/generators/hooks/workflows.d.ts +23 -0
  243. package/dist/generators/hooks/workflows.d.ts.map +1 -0
  244. package/dist/generators/hooks/workflows.js +312 -0
  245. package/dist/generators/resolve/index.d.ts +13 -0
  246. package/dist/generators/resolve/index.d.ts.map +1 -0
  247. package/dist/generators/resolve/index.js +13 -0
  248. package/dist/generators/resolve/platform.d.ts +29 -0
  249. package/dist/generators/resolve/platform.d.ts.map +1 -0
  250. package/dist/generators/resolve/platform.js +479 -0
  251. package/dist/generators/types/config.d.ts +7 -0
  252. package/dist/generators/types/config.d.ts.map +1 -0
  253. package/dist/generators/types/config.js +113 -0
  254. package/dist/generators/types/data-models.d.ts +10 -0
  255. package/dist/generators/types/data-models.d.ts.map +1 -0
  256. package/dist/generators/types/data-models.js +100 -0
  257. package/dist/generators/types/entity-models.d.ts +13 -0
  258. package/dist/generators/types/entity-models.d.ts.map +1 -0
  259. package/dist/generators/types/entity-models.js +241 -0
  260. package/dist/generators/types/field-types.d.ts +9 -0
  261. package/dist/generators/types/field-types.d.ts.map +1 -0
  262. package/dist/generators/types/field-types.js +651 -0
  263. package/dist/generators/types/hooks.d.ts +7 -0
  264. package/dist/generators/types/hooks.d.ts.map +1 -0
  265. package/dist/generators/types/hooks.js +132 -0
  266. package/dist/generators/types/scalars.d.ts +6 -0
  267. package/dist/generators/types/scalars.d.ts.map +1 -0
  268. package/dist/generators/types/scalars.js +68 -0
  269. package/dist/generators/types/user-details.d.ts +6 -0
  270. package/dist/generators/types/user-details.d.ts.map +1 -0
  271. package/dist/generators/types/user-details.js +60 -0
  272. package/dist/generators/types/workflows.d.ts +15 -0
  273. package/dist/generators/types/workflows.d.ts.map +1 -0
  274. package/dist/generators/types/workflows.js +163 -0
  275. package/dist/graphql/generated/gql.d.ts +47 -0
  276. package/dist/graphql/generated/gql.d.ts.map +1 -0
  277. package/dist/graphql/generated/gql.js +10 -0
  278. package/dist/graphql/generated/graphql.d.ts +8455 -0
  279. package/dist/graphql/generated/graphql.d.ts.map +1 -0
  280. package/dist/graphql/generated/graphql.js +573 -0
  281. package/dist/graphql/generated/index.d.ts +2 -0
  282. package/dist/graphql/generated/index.d.ts.map +1 -0
  283. package/dist/graphql/generated/index.js +1 -0
  284. package/dist/index.d.ts +13 -0
  285. package/dist/index.d.ts.map +1 -0
  286. package/dist/index.js +9 -0
  287. package/dist/schema/define-entity-model.d.ts +122 -0
  288. package/dist/schema/define-entity-model.d.ts.map +1 -0
  289. package/dist/schema/define-entity-model.js +59 -0
  290. package/dist/schema/schema-loader.d.ts +10 -0
  291. package/dist/schema/schema-loader.d.ts.map +1 -0
  292. package/dist/schema/schema-loader.js +91 -0
  293. package/dist/utils/field-mapping.d.ts +83 -0
  294. package/dist/utils/field-mapping.d.ts.map +1 -0
  295. package/dist/utils/field-mapping.js +334 -0
  296. package/dist/writer/write-files.d.ts +12 -0
  297. package/dist/writer/write-files.d.ts.map +1 -0
  298. package/dist/writer/write-files.js +35 -0
  299. package/package.json +70 -0
@@ -0,0 +1,87 @@
1
+ import { toPascalCase } from '../../utils/field-mapping.js';
2
+ /**
3
+ * Generate GraphQL documents for an entity model
4
+ * Uses generic entity/entities operations
5
+ */
6
+ export function generateEntityModelDocuments(model) {
7
+ const typeName = toPascalCase(model.key);
8
+ const pluralName = model.pluralName
9
+ ? toPascalCase(model.pluralName.replace(/\s+/g, ''))
10
+ : `${typeName}s`;
11
+ return `# Generated GraphQL operations for ${model.name}
12
+ # @generated by UniformGen - DO NOT EDIT MANUALLY
13
+
14
+ fragment ${typeName}Fields on EntityRecord {
15
+ id
16
+ modelKey
17
+ naturalKey
18
+ data
19
+ metadata
20
+ versionNumber
21
+ publishedVersionNumber
22
+ status
23
+ createdAt
24
+ updatedAt
25
+ }
26
+
27
+ query Get${typeName}($id: ID!, $preview: Boolean) {
28
+ entity(modelKey: "${model.key}", id: $id, preview: $preview) {
29
+ ...${typeName}Fields
30
+ }
31
+ }
32
+
33
+ query List${pluralName}(
34
+ $limit: Int
35
+ $offset: Int
36
+ $filters: [FilterInput!]
37
+ $sort: SortInput
38
+ $preview: Boolean
39
+ ) {
40
+ entities(
41
+ modelKey: "${model.key}"
42
+ limit: $limit
43
+ offset: $offset
44
+ filters: $filters
45
+ sort: $sort
46
+ preview: $preview
47
+ ) {
48
+ items {
49
+ ...${typeName}Fields
50
+ }
51
+ total
52
+ hasMore
53
+ }
54
+ }
55
+
56
+ mutation Create${typeName}($data: JSON!) {
57
+ createEntity(modelKey: "${model.key}", data: $data) {
58
+ ...${typeName}Fields
59
+ }
60
+ }
61
+
62
+ mutation Update${typeName}($id: ID!, $data: JSON!) {
63
+ updateEntity(modelKey: "${model.key}", id: $id, data: $data) {
64
+ ...${typeName}Fields
65
+ }
66
+ }
67
+
68
+ mutation Delete${typeName}($id: ID!) {
69
+ deleteEntity(modelKey: "${model.key}", id: $id) {
70
+ success
71
+ message
72
+ }
73
+ }
74
+
75
+ mutation Publish${typeName}($id: ID!, $versionId: ID) {
76
+ publishEntity(modelKey: "${model.key}", id: $id, versionId: $versionId) {
77
+ ...${typeName}Fields
78
+ }
79
+ }
80
+
81
+ mutation Unpublish${typeName}($id: ID!) {
82
+ unpublishEntity(modelKey: "${model.key}", id: $id) {
83
+ ...${typeName}Fields
84
+ }
85
+ }
86
+ `;
87
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Workflow Documents Generator
3
+ *
4
+ * Generates shared GraphQL documents for workflow operations.
5
+ * These are used by both React hooks and Remix server functions.
6
+ */
7
+ /**
8
+ * Generate the shared workflow GraphQL documents file
9
+ */
10
+ export declare function generateWorkflowDocuments(): string;
11
+ //# sourceMappingURL=workflows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../../src/generators/documents/workflows.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAiGlD"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Workflow Documents Generator
3
+ *
4
+ * Generates shared GraphQL documents for workflow operations.
5
+ * These are used by both React hooks and Remix server functions.
6
+ */
7
+ /**
8
+ * Generate the shared workflow GraphQL documents file
9
+ */
10
+ export function generateWorkflowDocuments() {
11
+ const lines = [];
12
+ lines.push('/**');
13
+ lines.push(' * Workflow GraphQL Documents');
14
+ lines.push(' * @generated by UniformGen - DO NOT EDIT MANUALLY');
15
+ lines.push(' */');
16
+ lines.push('');
17
+ lines.push("import { gql } from 'graphql-request';");
18
+ lines.push('');
19
+ // Execute workflow mutation
20
+ lines.push('/**');
21
+ lines.push(' * Execute a workflow via the public API');
22
+ lines.push(' */');
23
+ lines.push('export const PublicExecuteWorkflowDocument = gql`');
24
+ lines.push(' mutation PublicExecuteWorkflow($input: PublicExecuteWorkflowInput!) {');
25
+ lines.push(' publicExecuteWorkflow(input: $input) {');
26
+ lines.push(' success');
27
+ lines.push(' executionId');
28
+ lines.push(' queued');
29
+ lines.push(' result');
30
+ lines.push(' error {');
31
+ lines.push(' code');
32
+ lines.push(' message');
33
+ lines.push(' }');
34
+ lines.push(' }');
35
+ lines.push(' }');
36
+ lines.push('`;');
37
+ lines.push('');
38
+ // Get workflow execution query
39
+ lines.push('/**');
40
+ lines.push(' * Get workflow execution status');
41
+ lines.push(' */');
42
+ lines.push('export const PublicWorkflowExecutionDocument = gql`');
43
+ lines.push(' query PublicWorkflowExecution($id: ID!) {');
44
+ lines.push(' publicWorkflowExecution(id: $id) {');
45
+ lines.push(' id');
46
+ lines.push(' workflowKey');
47
+ lines.push(' status');
48
+ lines.push(' result');
49
+ lines.push(' error {');
50
+ lines.push(' code');
51
+ lines.push(' message');
52
+ lines.push(' }');
53
+ lines.push(' createdAt');
54
+ lines.push(' completedAt');
55
+ lines.push(' }');
56
+ lines.push(' }');
57
+ lines.push('`;');
58
+ lines.push('');
59
+ // List workflow executions query
60
+ lines.push('/**');
61
+ lines.push(' * List workflow executions');
62
+ lines.push(' */');
63
+ lines.push('export const PublicWorkflowExecutionsDocument = gql`');
64
+ lines.push(' query PublicWorkflowExecutions(');
65
+ lines.push(' $workflowKey: String');
66
+ lines.push(' $status: PublicWorkflowExecutionStatus');
67
+ lines.push(' $limit: Int');
68
+ lines.push(' $offset: Int');
69
+ lines.push(' ) {');
70
+ lines.push(' publicWorkflowExecutions(');
71
+ lines.push(' workflowKey: $workflowKey');
72
+ lines.push(' status: $status');
73
+ lines.push(' limit: $limit');
74
+ lines.push(' offset: $offset');
75
+ lines.push(' ) {');
76
+ lines.push(' items {');
77
+ lines.push(' id');
78
+ lines.push(' workflowKey');
79
+ lines.push(' status');
80
+ lines.push(' createdAt');
81
+ lines.push(' completedAt');
82
+ lines.push(' }');
83
+ lines.push(' total');
84
+ lines.push(' }');
85
+ lines.push(' }');
86
+ lines.push('`;');
87
+ lines.push('');
88
+ // Cancel workflow execution mutation
89
+ lines.push('/**');
90
+ lines.push(' * Cancel a workflow execution');
91
+ lines.push(' */');
92
+ lines.push('export const PublicCancelWorkflowExecutionDocument = gql`');
93
+ lines.push(' mutation PublicCancelWorkflowExecution($id: ID!) {');
94
+ lines.push(' publicCancelWorkflowExecution(id: $id) {');
95
+ lines.push(' id');
96
+ lines.push(' status');
97
+ lines.push(' }');
98
+ lines.push(' }');
99
+ lines.push('`;');
100
+ return lines.join('\n') + '\n';
101
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Filter Type Generator
3
+ *
4
+ * Generates typed filter interfaces and buildFilters helpers
5
+ * with support for nested object filtering and metadata fields.
6
+ */
7
+ import type { EntityModel } from '../../fetcher/fetch-schemas.js';
8
+ /**
9
+ * Generate the filter types file for a model
10
+ */
11
+ export declare function generateModelFilters(model: EntityModel, allModels: EntityModel[]): string;
12
+ /**
13
+ * Generate index file for filters
14
+ */
15
+ export declare function generateFiltersIndex(models: EntityModel[]): string;
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/filters/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAoC,MAAM,gCAAgC,CAAC;AAyPpG;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,WAAW,EAAE,GACvB,MAAM,CAgJR;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAmClE"}
@@ -0,0 +1,384 @@
1
+ /**
2
+ * Filter Type Generator
3
+ *
4
+ * Generates typed filter interfaces and buildFilters helpers
5
+ * with support for nested object filtering and metadata fields.
6
+ */
7
+ import { toPascalCase, sanitizeFieldName } from '../../utils/field-mapping.js';
8
+ import { PRIMITIVE_FIELD_TYPES } from '../../utils/field-mapping.js';
9
+ /**
10
+ * Map field type to filter type name
11
+ */
12
+ function getFilterTypeName(fieldType, field) {
13
+ switch (fieldType) {
14
+ case 'text':
15
+ case 'richtext':
16
+ case 'email':
17
+ case 'phone':
18
+ case 'url':
19
+ return 'TextFilter';
20
+ case 'number':
21
+ case 'currency':
22
+ return 'NumberFilter';
23
+ case 'boolean':
24
+ return 'BooleanFilter';
25
+ case 'date':
26
+ return 'DateFilter';
27
+ case 'select':
28
+ // Check if we have options to create a literal union
29
+ if (field.options?.options && Array.isArray(field.options.options)) {
30
+ const values = field.options.options
31
+ .map((o) => `'${o.value}'`)
32
+ .join(' | ');
33
+ return `SelectFilter<${values}>`;
34
+ }
35
+ return 'SelectFilter';
36
+ case 'multiselect':
37
+ if (field.options?.options && Array.isArray(field.options.options)) {
38
+ const values = field.options.options
39
+ .map((o) => `'${o.value}'`)
40
+ .join(' | ');
41
+ return `MultiselectFilter<${values}>`;
42
+ }
43
+ return 'MultiselectFilter';
44
+ case 'entity-reference':
45
+ return 'ReferenceFilter';
46
+ case 'image':
47
+ case 'video':
48
+ case 'file':
49
+ case 'link':
50
+ case 'json':
51
+ case 'design-system-style':
52
+ // These types typically aren't filtered directly
53
+ return null;
54
+ default:
55
+ // Non-primitive type - could be inline schema reference
56
+ return null;
57
+ }
58
+ }
59
+ /**
60
+ * Map metadata field type to filter type name
61
+ */
62
+ function getMetadataFilterTypeName(fieldType) {
63
+ switch (fieldType) {
64
+ case 'string':
65
+ return 'TextFilter';
66
+ case 'number':
67
+ return 'NumberFilter';
68
+ case 'boolean':
69
+ return 'BooleanFilter';
70
+ case 'date':
71
+ return 'DateFilter';
72
+ case 'array':
73
+ case 'object':
74
+ // Complex types - not directly filterable but could contain nested paths
75
+ return null;
76
+ default:
77
+ return null;
78
+ }
79
+ }
80
+ /**
81
+ * Check if a field type is filterable
82
+ */
83
+ function isFilterableField(fieldType) {
84
+ const filterableTypes = [
85
+ 'text',
86
+ 'richtext',
87
+ 'email',
88
+ 'phone',
89
+ 'url',
90
+ 'number',
91
+ 'currency',
92
+ 'boolean',
93
+ 'date',
94
+ 'select',
95
+ 'multiselect',
96
+ 'entity-reference',
97
+ ];
98
+ return filterableTypes.includes(fieldType);
99
+ }
100
+ /**
101
+ * Check if a field type is a primitive (built-in) type
102
+ */
103
+ function isPrimitiveFieldType(type) {
104
+ return PRIMITIVE_FIELD_TYPES.has(type);
105
+ }
106
+ /**
107
+ * Build a nested object structure from dot-notation paths
108
+ * e.g., 'synced.shopifyProductId' -> { synced: { shopifyProductId: 'TextFilter' } }
109
+ */
110
+ function buildNestedStructure(fields, depth = 0) {
111
+ // Group fields by their first path segment
112
+ const groups = new Map();
113
+ const directFields = [];
114
+ for (const field of fields) {
115
+ const parts = field.key.split('.');
116
+ if (parts.length === 1) {
117
+ directFields.push(field);
118
+ }
119
+ else {
120
+ const firstPart = parts[0]; // Guaranteed to exist when parts.length > 1
121
+ const remaining = {
122
+ ...field,
123
+ key: parts.slice(1).join('.'),
124
+ };
125
+ if (!groups.has(firstPart)) {
126
+ groups.set(firstPart, []);
127
+ }
128
+ groups.get(firstPart).push(remaining);
129
+ }
130
+ }
131
+ const indent = ' '.repeat(depth + 1);
132
+ const lines = [];
133
+ // Add direct fields
134
+ for (const field of directFields) {
135
+ const filterType = getMetadataFilterTypeName(field.type);
136
+ if (filterType) {
137
+ const fieldName = sanitizeFieldName(field.key);
138
+ lines.push(`${indent}${fieldName}?: ${filterType};`);
139
+ }
140
+ }
141
+ // Add nested groups
142
+ for (const [groupName, groupFields] of groups) {
143
+ const nestedStructure = buildNestedStructure(groupFields, depth + 1);
144
+ if (nestedStructure !== '{}') {
145
+ const fieldName = sanitizeFieldName(groupName);
146
+ lines.push(`${indent}${fieldName}?: ${nestedStructure}`);
147
+ }
148
+ }
149
+ if (lines.length === 0) {
150
+ return '{}';
151
+ }
152
+ const closeIndent = ' '.repeat(depth);
153
+ return `{\n${lines.join('\n')}\n${closeIndent}}`;
154
+ }
155
+ /**
156
+ * Generate filter interface for metadata fields
157
+ */
158
+ function generateMetadataFilterInterface(metadataFields, depth = 0) {
159
+ if (!metadataFields || metadataFields.length === 0) {
160
+ return '';
161
+ }
162
+ return buildNestedStructure(metadataFields, depth);
163
+ }
164
+ /**
165
+ * Generate filter interface for a model's fields, with nested support
166
+ */
167
+ function generateFilterInterface(model, allModels, depth = 0, visited = new Set()) {
168
+ // Prevent infinite recursion
169
+ if (visited.has(model.key)) {
170
+ return '{}';
171
+ }
172
+ visited.add(model.key);
173
+ const indent = ' '.repeat(depth + 1);
174
+ const lines = [];
175
+ for (const field of model.fields) {
176
+ const fieldName = sanitizeFieldName(field.key);
177
+ // Check if it's a primitive filterable type
178
+ if (isPrimitiveFieldType(field.type) && isFilterableField(field.type)) {
179
+ const filterType = getFilterTypeName(field.type, field);
180
+ if (filterType) {
181
+ lines.push(`${indent}${fieldName}?: ${filterType};`);
182
+ }
183
+ }
184
+ // Check if it's an inline schema reference
185
+ else if (!isPrimitiveFieldType(field.type)) {
186
+ const referencedModel = allModels.find((m) => m.key === field.type);
187
+ if (referencedModel && referencedModel.modes.inline) {
188
+ // Recursively generate nested filter structure
189
+ const nestedInterface = generateFilterInterface(referencedModel, allModels, depth + 1, new Set(visited));
190
+ if (nestedInterface !== '{}') {
191
+ lines.push(`${indent}${fieldName}?: ${nestedInterface}`);
192
+ }
193
+ }
194
+ }
195
+ // Handle list fields with inline item types
196
+ else if (field.type === 'list' && field.options?.itemType) {
197
+ const itemType = field.options.itemType;
198
+ if (!isPrimitiveFieldType(itemType)) {
199
+ const referencedModel = allModels.find((m) => m.key === itemType);
200
+ if (referencedModel && referencedModel.modes.inline) {
201
+ const nestedInterface = generateFilterInterface(referencedModel, allModels, depth + 1, new Set(visited));
202
+ if (nestedInterface !== '{}') {
203
+ lines.push(`${indent}${fieldName}?: ${nestedInterface}`);
204
+ }
205
+ }
206
+ }
207
+ }
208
+ }
209
+ if (lines.length === 0) {
210
+ return '{}';
211
+ }
212
+ const closeIndent = ' '.repeat(depth);
213
+ return `{\n${lines.join('\n')}\n${closeIndent}}`;
214
+ }
215
+ /**
216
+ * Generate the filter types file for a model
217
+ */
218
+ export function generateModelFilters(model, allModels) {
219
+ // Skip inline-only models - they don't have standalone queries
220
+ if (model.modes.inline && !model.modes.records) {
221
+ return '';
222
+ }
223
+ const typeName = toPascalCase(model.key);
224
+ const lines = [];
225
+ // File header
226
+ lines.push(`/**`);
227
+ lines.push(` * ${model.name} - Typed Filters`);
228
+ lines.push(` *`);
229
+ lines.push(` * @generated by UniformGen - DO NOT EDIT MANUALLY`);
230
+ lines.push(` */`);
231
+ lines.push('');
232
+ // Imports
233
+ lines.push(`import type {`);
234
+ lines.push(` TextFilter,`);
235
+ lines.push(` NumberFilter,`);
236
+ lines.push(` BooleanFilter,`);
237
+ lines.push(` DateFilter,`);
238
+ lines.push(` SelectFilter,`);
239
+ lines.push(` MultiselectFilter,`);
240
+ lines.push(` ReferenceFilter,`);
241
+ lines.push(` FilterInput,`);
242
+ lines.push(`} from '../types/field-types.js';`);
243
+ lines.push('');
244
+ // Generate the data filter interface
245
+ const dataFilterInterface = generateFilterInterface(model, allModels, 1);
246
+ // Generate the metadata filter interface if metadataSchema exists
247
+ const metadataFields = model.metadataSchema?.fields || [];
248
+ const metadataFilterInterface = generateMetadataFilterInterface(metadataFields, 1);
249
+ const hasMetadataFilters = metadataFilterInterface && metadataFilterInterface !== '{}';
250
+ // Build the full filter interface
251
+ lines.push(`/**`);
252
+ lines.push(` * Typed filter interface for ${model.name}`);
253
+ lines.push(` * Supports filtering on data fields, nested objects, and metadata`);
254
+ lines.push(` */`);
255
+ lines.push(`export interface ${typeName}Filters {`);
256
+ // Add data fields section
257
+ if (dataFilterInterface !== '{}') {
258
+ lines.push(` /** Filter on content/data fields */`);
259
+ lines.push(` data?: ${dataFilterInterface}`);
260
+ }
261
+ // Add metadata fields section if available
262
+ if (hasMetadataFilters) {
263
+ lines.push(` /** Filter on metadata fields (synced data, system fields) */`);
264
+ lines.push(` metadata?: ${metadataFilterInterface}`);
265
+ }
266
+ // Add common record fields
267
+ lines.push(` /** Filter on record-level fields */`);
268
+ lines.push(` id?: TextFilter;`);
269
+ lines.push(` naturalKey?: TextFilter;`);
270
+ lines.push(` status?: SelectFilter<'DRAFT' | 'PUBLISHED' | 'ARCHIVED'>;`);
271
+ lines.push(` createdAt?: DateFilter;`);
272
+ lines.push(` updatedAt?: DateFilter;`);
273
+ lines.push(`}`);
274
+ lines.push('');
275
+ // Generate the buildFilters helper
276
+ lines.push(`/**`);
277
+ lines.push(` * Convert typed filters to API FilterInput array`);
278
+ lines.push(` * Handles nested objects by creating dot-notation field paths`);
279
+ lines.push(` */`);
280
+ lines.push(`export function build${typeName}Filters(filters: ${typeName}Filters): FilterInput[] {`);
281
+ lines.push(` const result: FilterInput[] = [];`);
282
+ lines.push('');
283
+ lines.push(` function processFilters(obj: Record<string, any>, prefix: string) {`);
284
+ lines.push(` for (const [key, value] of Object.entries(obj)) {`);
285
+ lines.push(` if (value === undefined || value === null) continue;`);
286
+ lines.push('');
287
+ lines.push(` const fieldPath = prefix ? \`\${prefix}.\${key}\` : key;`);
288
+ lines.push('');
289
+ lines.push(` // Check if this is a filter operator object`);
290
+ lines.push(` if (isFilterOperator(value)) {`);
291
+ lines.push(` // Convert each operator to a FilterInput`);
292
+ lines.push(` for (const [op, opValue] of Object.entries(value)) {`);
293
+ lines.push(` if (opValue !== undefined) {`);
294
+ lines.push(` result.push({`);
295
+ lines.push(` field: fieldPath,`);
296
+ lines.push(` operator: op,`);
297
+ lines.push(` value: opValue,`);
298
+ lines.push(` });`);
299
+ lines.push(` }`);
300
+ lines.push(` }`);
301
+ lines.push(` } else if (typeof value === 'object' && !Array.isArray(value)) {`);
302
+ lines.push(` // Nested object - recurse`);
303
+ lines.push(` processFilters(value, fieldPath);`);
304
+ lines.push(` }`);
305
+ lines.push(` }`);
306
+ lines.push(` }`);
307
+ lines.push('');
308
+ lines.push(` // Process data filters`);
309
+ lines.push(` if (filters.data) {`);
310
+ lines.push(` processFilters(filters.data, 'data');`);
311
+ lines.push(` }`);
312
+ lines.push('');
313
+ lines.push(` // Process metadata filters`);
314
+ lines.push(` if (filters.metadata) {`);
315
+ lines.push(` processFilters(filters.metadata, 'metadata');`);
316
+ lines.push(` }`);
317
+ lines.push('');
318
+ lines.push(` // Process record-level filters`);
319
+ lines.push(` const recordFields = ['id', 'naturalKey', 'status', 'createdAt', 'updatedAt'];`);
320
+ lines.push(` for (const field of recordFields) {`);
321
+ lines.push(` const value = (filters as any)[field];`);
322
+ lines.push(` if (value && isFilterOperator(value)) {`);
323
+ lines.push(` for (const [op, opValue] of Object.entries(value)) {`);
324
+ lines.push(` if (opValue !== undefined) {`);
325
+ lines.push(` result.push({ field, operator: op, value: opValue });`);
326
+ lines.push(` }`);
327
+ lines.push(` }`);
328
+ lines.push(` }`);
329
+ lines.push(` }`);
330
+ lines.push('');
331
+ lines.push(` return result;`);
332
+ lines.push(`}`);
333
+ lines.push('');
334
+ // Helper function to check if an object is a filter operator
335
+ lines.push(`/** Check if an object is a filter operator (has operator keys) */`);
336
+ lines.push(`function isFilterOperator(obj: unknown): boolean {`);
337
+ lines.push(` if (typeof obj !== 'object' || obj === null || Array.isArray(obj)) {`);
338
+ lines.push(` return false;`);
339
+ lines.push(` }`);
340
+ lines.push(` const filterOps = [`);
341
+ lines.push(` 'eq', 'ne', 'gt', 'gte', 'lt', 'lte',`);
342
+ lines.push(` 'contains', 'startsWith', 'endsWith',`);
343
+ lines.push(` 'in', 'notIn', 'isNull',`);
344
+ lines.push(` 'containsAny', 'containsAll',`);
345
+ lines.push(` ];`);
346
+ lines.push(` return Object.keys(obj).some(key => filterOps.includes(key));`);
347
+ lines.push(`}`);
348
+ return lines.join('\n') + '\n';
349
+ }
350
+ /**
351
+ * Generate index file for filters
352
+ */
353
+ export function generateFiltersIndex(models) {
354
+ const recordModels = models.filter((m) => m.modes.records);
355
+ let indexCode = `/**
356
+ * Typed Entity Filters
357
+ *
358
+ * Type-safe filter interfaces and builders for all entity models.
359
+ *
360
+ * @generated by UniformGen - DO NOT EDIT MANUALLY
361
+ */\n\n`;
362
+ // Re-export filter types from field-types
363
+ indexCode += `// Re-export base filter types\n`;
364
+ indexCode += `export type {\n`;
365
+ indexCode += ` TextFilter,\n`;
366
+ indexCode += ` NumberFilter,\n`;
367
+ indexCode += ` BooleanFilter,\n`;
368
+ indexCode += ` DateFilter,\n`;
369
+ indexCode += ` SelectFilter,\n`;
370
+ indexCode += ` MultiselectFilter,\n`;
371
+ indexCode += ` ReferenceFilter,\n`;
372
+ indexCode += ` FilterInput,\n`;
373
+ indexCode += ` SortInput,\n`;
374
+ indexCode += `} from '../types/field-types.js';\n\n`;
375
+ // Export each model's filters
376
+ for (const model of recordModels) {
377
+ const typeName = toPascalCase(model.key);
378
+ indexCode += `export {\n`;
379
+ indexCode += ` type ${typeName}Filters,\n`;
380
+ indexCode += ` build${typeName}Filters,\n`;
381
+ indexCode += `} from './${model.key}.js';\n`;
382
+ }
383
+ return indexCode;
384
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Agnostic Hooks Generator
3
+ *
4
+ * Generates framework-agnostic typed helper functions that parse
5
+ * the generic entity API responses into strongly typed data.
6
+ */
7
+ import type { EntityModel } from '../../fetcher/fetch-schemas.js';
8
+ /**
9
+ * Generate agnostic typed helpers for an entity model
10
+ */
11
+ export declare function generateAgnosticHooks(model: EntityModel, _allModels: EntityModel[]): string;
12
+ /**
13
+ * Generate index file for agnostic hooks
14
+ */
15
+ export declare function generateAgnosticHooksIndex(models: EntityModel[]): string;
16
+ //# sourceMappingURL=agnostic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agnostic.d.ts","sourceRoot":"","sources":["../../../src/generators/hooks/agnostic.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,gCAAgC,CAAC;AAoGvF;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,WAAW,EAClB,UAAU,EAAE,WAAW,EAAE,GACxB,MAAM,CAmIR;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAiCxE"}