@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,409 @@
1
+ /**
2
+ * CMS Route Resolution Generator
3
+ *
4
+ * Generates the resolveRoute hook/function for CMS frontends.
5
+ * Only generated when there are models with cms.enabled = true.
6
+ *
7
+ * @generated by UniformGen
8
+ */
9
+ /**
10
+ * Check if a model has CMS enabled (cms.enabled in extensions)
11
+ * Note: The `pages` property on EntityModel is extracted from extensions.cms
12
+ */
13
+ export function hasRoutingEnabled(model) {
14
+ return model.pages?.enabled === true;
15
+ }
16
+ /**
17
+ * Get all routable models (models with cms.enabled = true)
18
+ */
19
+ export function getRoutableModels(models) {
20
+ return models.filter(hasRoutingEnabled);
21
+ }
22
+ /**
23
+ * Generate React resolveRoute hook
24
+ */
25
+ export function generateResolveRouteReact(routableModels) {
26
+ const modelKeys = routableModels.map(m => m.key);
27
+ return `/**
28
+ * CMS Route Resolution Hook
29
+ *
30
+ * Resolves any routable entity by URL path with template, zones, and layouts.
31
+ * Use with @eide/foir-renderer's EntityRenderer component.
32
+ *
33
+ * Handles models: ${modelKeys.join(', ')}
34
+ *
35
+ * @generated by UniformGen - DO NOT EDIT MANUALLY
36
+ */
37
+
38
+ import { useQuery, type QueryHookOptions } from '@apollo/client';
39
+ import { gql } from '@apollo/client';
40
+ import type {
41
+ ResolvedRoute,
42
+ VariantContext,
43
+ ReferenceResolutionOptions,
44
+ } from './types.js';
45
+
46
+ // Re-export types for convenience
47
+ export type {
48
+ ResolvedRoute,
49
+ ResolvedRecord,
50
+ ResolvedVariant,
51
+ ResolvedContent,
52
+ ResolvedField,
53
+ ResolvedTemplateRef,
54
+ ResolutionContext,
55
+ FieldLayout,
56
+ LayoutPosition,
57
+ FieldSource,
58
+ GridConfig,
59
+ Breadcrumb,
60
+ BreadcrumbType,
61
+ VariantContext,
62
+ ReferenceResolutionOptions,
63
+ } from './types.js';
64
+
65
+ /**
66
+ * GraphQL query for route resolution
67
+ *
68
+ * Fetches full template/zone data for CMS rendering
69
+ */
70
+ const RESOLVE_ROUTE_QUERY = gql\`
71
+ query ResolveRoute(
72
+ $path: String!
73
+ $locale: String
74
+ $contexts: JSON
75
+ $referenceOptions: ReferenceResolutionOptionsInput
76
+ ) {
77
+ resolveRoute(
78
+ path: $path
79
+ locale: $locale
80
+ contexts: $contexts
81
+ referenceOptions: $referenceOptions
82
+ ) {
83
+ record {
84
+ id
85
+ modelKey
86
+ naturalKey
87
+ metadata
88
+ }
89
+ variant {
90
+ id
91
+ variantKey
92
+ }
93
+ content {
94
+ template {
95
+ id
96
+ modelKey
97
+ naturalKey
98
+ content
99
+ }
100
+ layoutMode
101
+ fields {
102
+ key
103
+ type
104
+ label
105
+ required
106
+ value
107
+ layout {
108
+ lg { x y w h minW maxW minH maxH }
109
+ md { x y w h minW maxW minH maxH }
110
+ sm { x y w h minW maxW minH maxH }
111
+ xs { x y w h minW maxW minH maxH }
112
+ }
113
+ order
114
+ source
115
+ }
116
+ extraContent {
117
+ key
118
+ type
119
+ label
120
+ required
121
+ value
122
+ layout {
123
+ lg { x y w h minW maxW minH maxH }
124
+ md { x y w h minW maxW minH maxH }
125
+ sm { x y w h minW maxW minH maxH }
126
+ xs { x y w h minW maxW minH maxH }
127
+ }
128
+ order
129
+ source
130
+ }
131
+ }
132
+ breadcrumbs {
133
+ label
134
+ url
135
+ type
136
+ isCurrent
137
+ }
138
+ gridConfig {
139
+ breakpoints
140
+ cols
141
+ rowHeight
142
+ containerPadding
143
+ margin
144
+ }
145
+ resolvedWith {
146
+ locale
147
+ contexts
148
+ }
149
+ }
150
+ }
151
+ \`;
152
+
153
+ /**
154
+ * Resolve entity content by URL path with full CMS features
155
+ *
156
+ * Returns template, zones, layouts, and breadcrumbs for rendering
157
+ * with @eide/foir-renderer's EntityRenderer component.
158
+ *
159
+ * @param path - URL path (e.g., '/uk/products/winter-jacket')
160
+ * @param context - Variant context (locale, market, device, etc.)
161
+ * @param options - Additional options (reference resolution, query options)
162
+ *
163
+ * @example
164
+ * const { data, loading } = useResolveRoute('/de/automated-collection', {
165
+ * locale: 'de-DE',
166
+ * contexts: { market: 'eu', device: 'mobile' },
167
+ * });
168
+ *
169
+ * // Use with EntityRenderer
170
+ * if (data) {
171
+ * return <EntityRenderer data={data} registry={registry} />;
172
+ * }
173
+ */
174
+ export function useResolveRoute(
175
+ path: string,
176
+ context?: VariantContext,
177
+ options?: {
178
+ referenceOptions?: ReferenceResolutionOptions;
179
+ queryOptions?: Omit<QueryHookOptions, 'variables'>;
180
+ }
181
+ ) {
182
+ const { queryOptions, referenceOptions } = options ?? {};
183
+
184
+ const result = useQuery(RESOLVE_ROUTE_QUERY, {
185
+ ...queryOptions,
186
+ variables: {
187
+ path,
188
+ locale: context?.locale,
189
+ contexts: context?.contexts,
190
+ referenceOptions,
191
+ },
192
+ skip: !path,
193
+ });
194
+
195
+ return {
196
+ ...result,
197
+ data: result.data?.resolveRoute as ResolvedRoute | undefined,
198
+ };
199
+ }
200
+
201
+ /**
202
+ * List of model keys that support route resolution
203
+ */
204
+ export const ROUTABLE_MODELS = [${modelKeys.map(k => `'${k}'`).join(', ')}] as const;
205
+
206
+ /**
207
+ * Type for routable model keys
208
+ */
209
+ export type RoutableModelKey = typeof ROUTABLE_MODELS[number];
210
+ `;
211
+ }
212
+ /**
213
+ * Generate Remix/Hydrogen resolveRoute function
214
+ */
215
+ export function generateResolveRouteRemix(routableModels) {
216
+ const modelKeys = routableModels.map(m => m.key);
217
+ return `/**
218
+ * CMS Route Resolution Function
219
+ *
220
+ * Server-side function for resolving any routable entity by URL path.
221
+ * Use in Remix loaders or Hydrogen server functions.
222
+ *
223
+ * Handles models: ${modelKeys.join(', ')}
224
+ *
225
+ * @generated by UniformGen - DO NOT EDIT MANUALLY
226
+ */
227
+
228
+ import type {
229
+ ResolvedRoute,
230
+ VariantContext,
231
+ ReferenceResolutionOptions,
232
+ } from './types.js';
233
+
234
+ // Re-export types for convenience
235
+ export type {
236
+ ResolvedRoute,
237
+ ResolvedRecord,
238
+ ResolvedVariant,
239
+ ResolvedContent,
240
+ ResolvedField,
241
+ ResolvedTemplateRef,
242
+ ResolutionContext,
243
+ FieldLayout,
244
+ LayoutPosition,
245
+ FieldSource,
246
+ GridConfig,
247
+ Breadcrumb,
248
+ BreadcrumbType,
249
+ VariantContext,
250
+ ReferenceResolutionOptions,
251
+ } from './types.js';
252
+
253
+ /** GraphQL client interface */
254
+ export interface GraphQLClient {
255
+ request<T>(query: string, variables?: Record<string, unknown>): Promise<T>;
256
+ }
257
+
258
+ /**
259
+ * GraphQL query for route resolution
260
+ */
261
+ const RESOLVE_ROUTE_QUERY = \`
262
+ query ResolveRoute(
263
+ $path: String!
264
+ $locale: String
265
+ $contexts: JSON
266
+ $referenceOptions: ReferenceResolutionOptionsInput
267
+ ) {
268
+ resolveRoute(
269
+ path: $path
270
+ locale: $locale
271
+ contexts: $contexts
272
+ referenceOptions: $referenceOptions
273
+ ) {
274
+ record {
275
+ id
276
+ modelKey
277
+ naturalKey
278
+ metadata
279
+ }
280
+ variant {
281
+ id
282
+ variantKey
283
+ }
284
+ content {
285
+ template {
286
+ id
287
+ modelKey
288
+ naturalKey
289
+ content
290
+ }
291
+ layoutMode
292
+ fields {
293
+ key
294
+ type
295
+ label
296
+ required
297
+ value
298
+ layout {
299
+ lg { x y w h minW maxW minH maxH }
300
+ md { x y w h minW maxW minH maxH }
301
+ sm { x y w h minW maxW minH maxH }
302
+ xs { x y w h minW maxW minH maxH }
303
+ }
304
+ order
305
+ source
306
+ }
307
+ extraContent {
308
+ key
309
+ type
310
+ label
311
+ required
312
+ value
313
+ layout {
314
+ lg { x y w h minW maxW minH maxH }
315
+ md { x y w h minW maxW minH maxH }
316
+ sm { x y w h minW maxW minH maxH }
317
+ xs { x y w h minW maxW minH maxH }
318
+ }
319
+ order
320
+ source
321
+ }
322
+ }
323
+ breadcrumbs {
324
+ label
325
+ url
326
+ type
327
+ isCurrent
328
+ }
329
+ gridConfig {
330
+ breakpoints
331
+ cols
332
+ rowHeight
333
+ containerPadding
334
+ margin
335
+ }
336
+ resolvedWith {
337
+ locale
338
+ contexts
339
+ }
340
+ }
341
+ }
342
+ \`;
343
+
344
+ /**
345
+ * Resolve entity content by URL path with full CMS features
346
+ *
347
+ * Use in Remix loaders or Hydrogen server functions.
348
+ * Returns template, zones, layouts, and breadcrumbs for rendering.
349
+ *
350
+ * @param client - GraphQL client for making requests
351
+ * @param path - URL path (e.g., '/uk/products/winter-jacket')
352
+ * @param context - Variant context (locale, market, device, etc.)
353
+ * @param options - Additional options (reference resolution)
354
+ *
355
+ * @example
356
+ * // In a Remix loader
357
+ * export async function loader({ request, context }: LoaderFunctionArgs) {
358
+ * const url = new URL(request.url);
359
+ * const route = await resolveRoute(context.graphql, url.pathname, {
360
+ * locale: 'de-DE',
361
+ * contexts: { market: 'eu' },
362
+ * });
363
+ *
364
+ * if (!route) {
365
+ * throw new Response('Not Found', { status: 404 });
366
+ * }
367
+ *
368
+ * return json({ route });
369
+ * }
370
+ *
371
+ * // In Hydrogen
372
+ * export async function loader({ context }: LoaderFunctionArgs) {
373
+ * const route = await resolveRoute(context.storefront.graphql, '/products/jacket', {
374
+ * locale: context.storefront.i18n.language,
375
+ * });
376
+ * return json({ route });
377
+ * }
378
+ */
379
+ export async function resolveRoute(
380
+ client: GraphQLClient,
381
+ path: string,
382
+ context?: VariantContext,
383
+ options?: {
384
+ referenceOptions?: ReferenceResolutionOptions;
385
+ }
386
+ ): Promise<ResolvedRoute | null> {
387
+ const result = await client.request<{ resolveRoute: ResolvedRoute | null }>(
388
+ RESOLVE_ROUTE_QUERY,
389
+ {
390
+ path,
391
+ locale: context?.locale,
392
+ contexts: context?.contexts,
393
+ referenceOptions: options?.referenceOptions,
394
+ }
395
+ );
396
+ return result.resolveRoute;
397
+ }
398
+
399
+ /**
400
+ * List of model keys that support route resolution
401
+ */
402
+ export const ROUTABLE_MODELS = [${modelKeys.map(k => `'${k}'`).join(', ')}] as const;
403
+
404
+ /**
405
+ * Type for routable model keys
406
+ */
407
+ export type RoutableModelKey = typeof ROUTABLE_MODELS[number];
408
+ `;
409
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * CMS Types Generator
3
+ *
4
+ * Generates TypeScript types for CMS route resolution layer:
5
+ * - ResolvedRoute type with template/zone/layout data
6
+ * - ResolvedField and zone types
7
+ * - Grid configuration types
8
+ *
9
+ * @generated by UniformGen
10
+ */
11
+ /**
12
+ * Generate CMS types file
13
+ */
14
+ export declare function generateCmsTypes(): string;
15
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/generators/cms/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CA2HzC"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * CMS Types Generator
3
+ *
4
+ * Generates TypeScript types for CMS route resolution layer:
5
+ * - ResolvedRoute type with template/zone/layout data
6
+ * - ResolvedField and zone types
7
+ * - Grid configuration types
8
+ *
9
+ * @generated by UniformGen
10
+ */
11
+ /**
12
+ * Generate CMS types file
13
+ */
14
+ export function generateCmsTypes() {
15
+ return `/**
16
+ * CMS Resolution Types
17
+ *
18
+ * Types for CMS-level route resolution with templates, zones, and layouts.
19
+ *
20
+ * @generated by UniformGen - DO NOT EDIT MANUALLY
21
+ */
22
+
23
+ // Re-export common resolution types
24
+ export type {
25
+ VariantContext,
26
+ ReferenceResolutionOptions,
27
+ Breadcrumb,
28
+ BreadcrumbType,
29
+ } from '../types/field-types.js';
30
+
31
+ /** Resolved record info */
32
+ export interface ResolvedRecord {
33
+ id: string;
34
+ modelKey: string;
35
+ naturalKey: string | null;
36
+ metadata?: Record<string, unknown>;
37
+ }
38
+
39
+ /** Resolved variant info */
40
+ export interface ResolvedVariant {
41
+ id: string;
42
+ variantKey: string;
43
+ }
44
+
45
+ /** Resolution context (what was used to resolve) */
46
+ export interface ResolutionContext {
47
+ locale: string;
48
+ contexts: Record<string, string>;
49
+ }
50
+
51
+ /** Layout position for a breakpoint */
52
+ export interface LayoutPosition {
53
+ x: number;
54
+ y: number;
55
+ w: number;
56
+ h: number;
57
+ minW?: number;
58
+ maxW?: number;
59
+ minH?: number;
60
+ maxH?: number;
61
+ }
62
+
63
+ /** Responsive layout for a field */
64
+ export interface FieldLayout {
65
+ lg?: LayoutPosition;
66
+ md?: LayoutPosition;
67
+ sm?: LayoutPosition;
68
+ xs?: LayoutPosition;
69
+ }
70
+
71
+ /** Source of a resolved field value */
72
+ export type FieldSource = 'schema' | 'template' | 'zone' | 'override';
73
+
74
+ /** Resolved field with value and layout */
75
+ export interface ResolvedField {
76
+ key: string;
77
+ type: string;
78
+ label?: string;
79
+ required?: boolean;
80
+ value: unknown;
81
+ layout?: FieldLayout;
82
+ order?: number;
83
+ source?: FieldSource;
84
+ }
85
+
86
+ /** Template reference */
87
+ export interface ResolvedTemplateRef {
88
+ id: string;
89
+ modelKey: string;
90
+ naturalKey: string;
91
+ content?: unknown;
92
+ }
93
+
94
+ /** Resolved content with template and zones */
95
+ export interface ResolvedContent {
96
+ template: ResolvedTemplateRef | null;
97
+ layoutMode: 'grid' | 'list';
98
+ fields: ResolvedField[];
99
+ extraContent?: ResolvedField[];
100
+ }
101
+
102
+ /** Grid configuration for layout rendering */
103
+ export interface GridConfig {
104
+ breakpoints: Record<string, number>;
105
+ cols: Record<string, number>;
106
+ rowHeight: number;
107
+ containerPadding: [number, number];
108
+ margin: [number, number];
109
+ }
110
+
111
+ /** Breadcrumb item */
112
+ export interface Breadcrumb {
113
+ label: string;
114
+ url: string;
115
+ type: BreadcrumbType;
116
+ isCurrent: boolean;
117
+ }
118
+
119
+ /** Breadcrumb type */
120
+ export type BreadcrumbType = 'root' | 'category' | 'collection' | 'product' | 'page' | 'current';
121
+
122
+ /**
123
+ * Resolved route response
124
+ *
125
+ * The primary response type for CMS route resolution.
126
+ * Use with @eide/foir-renderer's EntityRenderer component.
127
+ */
128
+ export interface ResolvedRoute {
129
+ record: ResolvedRecord;
130
+ variant: ResolvedVariant;
131
+ content: ResolvedContent;
132
+ breadcrumbs: Breadcrumb[];
133
+ gridConfig: GridConfig;
134
+ resolvedWith: ResolutionContext;
135
+ }
136
+ `;
137
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Context Types Generator
3
+ *
4
+ * Generates typed context helpers for variant resolution.
5
+ * Contexts define the available dimensions for personalizing content.
6
+ *
7
+ * Unlike other generators, contexts are queried at RUNTIME since their
8
+ * values can change dynamically in the database.
9
+ */
10
+ import type { ContextDefinition } from '../../fetcher/fetch-schemas.js';
11
+ /**
12
+ * Context definition used at generate time (values not included - fetched at runtime)
13
+ */
14
+ export interface ContextForGeneration {
15
+ definition: ContextDefinition;
16
+ }
17
+ /**
18
+ * Generate the typed contexts file with runtime query support
19
+ */
20
+ export declare function generateContextsFile(contexts: ContextForGeneration[]): string;
21
+ /**
22
+ * Generate empty contexts file when no contexts are defined
23
+ */
24
+ export declare function generateEmptyContextsFile(): string;
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/contexts/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,iBAAiB,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAgV7E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAoQlD"}