@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,254 @@
1
+ /**
2
+ * Admin Types Generator
3
+ *
4
+ * Generates TypeScript types for administration layer:
5
+ * - Record types with variants
6
+ * - Version types for history
7
+ * - Filter and input types
8
+ *
9
+ * @generated by UniformGen
10
+ */
11
+ import { toPascalCase, sanitizeFieldName } from '../../utils/field-mapping.js';
12
+ /**
13
+ * Map metadata field type to TypeScript type
14
+ */
15
+ function getMetadataValueType(fieldType) {
16
+ switch (fieldType) {
17
+ case 'string':
18
+ return 'string';
19
+ case 'number':
20
+ return 'number';
21
+ case 'boolean':
22
+ return 'boolean';
23
+ case 'date':
24
+ return 'string'; // ISO date string
25
+ case 'array':
26
+ return 'unknown[]';
27
+ case 'object':
28
+ return 'Record<string, unknown>';
29
+ default:
30
+ return 'unknown';
31
+ }
32
+ }
33
+ /**
34
+ * Build a nested TypeScript interface from dot-notation paths
35
+ */
36
+ function buildNestedMetadataType(fields, depth = 0) {
37
+ const groups = new Map();
38
+ const directFields = [];
39
+ for (const field of fields) {
40
+ const parts = field.key.split('.');
41
+ if (parts.length === 1) {
42
+ directFields.push(field);
43
+ }
44
+ else {
45
+ const firstPart = parts[0];
46
+ const remaining = { ...field, key: parts.slice(1).join('.') };
47
+ if (!groups.has(firstPart)) {
48
+ groups.set(firstPart, []);
49
+ }
50
+ groups.get(firstPart).push(remaining);
51
+ }
52
+ }
53
+ const indent = ' '.repeat(depth + 1);
54
+ const lines = [];
55
+ for (const field of directFields) {
56
+ const valueType = getMetadataValueType(field.type);
57
+ const fieldName = sanitizeFieldName(field.key);
58
+ const optional = field.required ? '' : '?';
59
+ lines.push(`${indent}${fieldName}${optional}: ${valueType};`);
60
+ }
61
+ for (const [groupName, groupFields] of groups) {
62
+ const nestedType = buildNestedMetadataType(groupFields, depth + 1);
63
+ if (nestedType !== '{}') {
64
+ const fieldName = sanitizeFieldName(groupName);
65
+ lines.push(`${indent}${fieldName}?: ${nestedType}`);
66
+ }
67
+ }
68
+ if (lines.length === 0) {
69
+ return '{}';
70
+ }
71
+ const closeIndent = ' '.repeat(depth);
72
+ return `{\n${lines.join('\n')}\n${closeIndent}}`;
73
+ }
74
+ /**
75
+ * Generate metadata type for a model
76
+ */
77
+ export function generateMetadataType(model) {
78
+ const metadataFields = model.metadataSchema?.fields;
79
+ if (!metadataFields || metadataFields.length === 0) {
80
+ return null;
81
+ }
82
+ return buildNestedMetadataType(metadataFields, 0);
83
+ }
84
+ /**
85
+ * Check if model is inline-only (no records mode)
86
+ */
87
+ export function isInlineOnlyModel(model) {
88
+ return model.modes.inline && !model.modes.records;
89
+ }
90
+ /**
91
+ * Generate admin types for a model
92
+ */
93
+ export function generateAdminTypes(model, _allModels) {
94
+ // Skip inline-only models - they don't have standalone records
95
+ if (isInlineOnlyModel(model)) {
96
+ return '';
97
+ }
98
+ const typeName = toPascalCase(model.key);
99
+ const dataTypeName = `${typeName}Data`;
100
+ const metadataType = generateMetadataType(model);
101
+ const metadataTypeName = `${typeName}Metadata`;
102
+ const lines = [];
103
+ // File header
104
+ lines.push(`/**`);
105
+ lines.push(` * ${model.name} - Admin Types`);
106
+ lines.push(` *`);
107
+ lines.push(` * Types for administration layer (CRUD operations, versioning).`);
108
+ lines.push(` *`);
109
+ lines.push(` * @generated by UniformGen - DO NOT EDIT MANUALLY`);
110
+ lines.push(` */`);
111
+ lines.push('');
112
+ // Imports
113
+ lines.push(`import type { ${dataTypeName} } from '../../types/models/${model.key}.js';`);
114
+ lines.push('');
115
+ // Generate metadata type if model has metadataSchema
116
+ if (metadataType) {
117
+ lines.push(`/** Typed metadata for ${model.name} */`);
118
+ lines.push(`export interface ${metadataTypeName} ${metadataType}`);
119
+ lines.push('');
120
+ }
121
+ // Version type
122
+ lines.push(`/** ${model.name} version (point-in-time snapshot) */`);
123
+ lines.push(`export interface ${typeName}Version {`);
124
+ lines.push(` id: string;`);
125
+ lines.push(` variantId: string;`);
126
+ lines.push(` versionNumber: number;`);
127
+ lines.push(` content: ${dataTypeName};`);
128
+ lines.push(` isPublished: boolean;`);
129
+ lines.push(` createdAt: string;`);
130
+ lines.push(` createdBy?: string;`);
131
+ lines.push(`}`);
132
+ lines.push('');
133
+ // Variant type
134
+ lines.push(`/** ${model.name} variant (market/device/locale specific) */`);
135
+ lines.push(`export interface ${typeName}Variant {`);
136
+ lines.push(` id: string;`);
137
+ lines.push(` variantKey: string;`);
138
+ lines.push(` catalogKey: string | null;`);
139
+ lines.push(` currentVersion?: ${typeName}Version;`);
140
+ lines.push(` publishedVersion?: ${typeName}Version;`);
141
+ lines.push(` versionCount: number;`);
142
+ lines.push(`}`);
143
+ lines.push('');
144
+ // Record type (for list views)
145
+ lines.push(`/** ${model.name} record (list view) */`);
146
+ lines.push(`export interface ${typeName}Record {`);
147
+ lines.push(` id: string;`);
148
+ lines.push(` modelKey: '${model.key}';`);
149
+ lines.push(` naturalKey?: string;`);
150
+ lines.push(` data: ${dataTypeName};`);
151
+ if (metadataType) {
152
+ lines.push(` metadata?: ${metadataTypeName};`);
153
+ }
154
+ else {
155
+ lines.push(` metadata?: Record<string, unknown>;`);
156
+ }
157
+ lines.push(` versionNumber: number;`);
158
+ lines.push(` publishedVersionNumber?: number;`);
159
+ lines.push(` status: 'DRAFT' | 'PUBLISHED' | 'ARCHIVED';`);
160
+ lines.push(` createdAt: string;`);
161
+ lines.push(` updatedAt: string;`);
162
+ lines.push(`}`);
163
+ lines.push('');
164
+ // Record with variants type (for detail views)
165
+ lines.push(`/** ${model.name} record with variants (detail view) */`);
166
+ lines.push(`export interface ${typeName}RecordWithVariants extends ${typeName}Record {`);
167
+ lines.push(` variants: ${typeName}Variant[];`);
168
+ lines.push(`}`);
169
+ lines.push('');
170
+ // Filter input type
171
+ lines.push(`/** Filter input for ${model.name} queries */`);
172
+ lines.push(`export interface ${typeName}FilterInput {`);
173
+ lines.push(` search?: string;`);
174
+ lines.push(` status?: 'DRAFT' | 'PUBLISHED' | 'ARCHIVED';`);
175
+ lines.push(` naturalKey?: string;`);
176
+ lines.push(` createdAfter?: string;`);
177
+ lines.push(` createdBefore?: string;`);
178
+ lines.push(` updatedAfter?: string;`);
179
+ lines.push(` updatedBefore?: string;`);
180
+ lines.push(`}`);
181
+ lines.push('');
182
+ // Create input type
183
+ lines.push(`/** Input for creating a ${model.name} record */`);
184
+ lines.push(`export interface Create${typeName}Input {`);
185
+ lines.push(` naturalKey?: string;`);
186
+ lines.push(` data: ${dataTypeName};`);
187
+ if (metadataType) {
188
+ lines.push(` metadata?: ${metadataTypeName};`);
189
+ }
190
+ else {
191
+ lines.push(` metadata?: Record<string, unknown>;`);
192
+ }
193
+ lines.push(`}`);
194
+ lines.push('');
195
+ // Update input type
196
+ lines.push(`/** Input for updating a ${model.name} record */`);
197
+ lines.push(`export interface Update${typeName}Input {`);
198
+ lines.push(` naturalKey?: string;`);
199
+ if (metadataType) {
200
+ lines.push(` metadata?: Partial<${metadataTypeName}>;`);
201
+ }
202
+ else {
203
+ lines.push(` metadata?: Record<string, unknown>;`);
204
+ }
205
+ lines.push(`}`);
206
+ lines.push('');
207
+ // Save content input type
208
+ lines.push(`/** Input for saving ${model.name} content (creates new version) */`);
209
+ lines.push(`export interface Save${typeName}ContentInput {`);
210
+ lines.push(` variantId: string;`);
211
+ lines.push(` content: ${dataTypeName};`);
212
+ lines.push(`}`);
213
+ lines.push('');
214
+ // Save content result type
215
+ lines.push(`/** Result of saving ${model.name} content */`);
216
+ lines.push(`export interface Save${typeName}ContentResult {`);
217
+ lines.push(` variantId: string;`);
218
+ lines.push(` versionId: string;`);
219
+ lines.push(` versionNumber: number;`);
220
+ lines.push(`}`);
221
+ return lines.join('\n') + '\n';
222
+ }
223
+ /**
224
+ * Generate index file for admin types
225
+ */
226
+ export function generateAdminTypesIndex(models) {
227
+ const recordModels = models.filter((m) => m.modes.records);
228
+ let indexCode = `/**
229
+ * Admin Types
230
+ *
231
+ * Types for administration layer (CRUD operations, versioning).
232
+ *
233
+ * @generated by UniformGen - DO NOT EDIT MANUALLY
234
+ */\n\n`;
235
+ for (const model of recordModels) {
236
+ const typeName = toPascalCase(model.key);
237
+ const hasMetadata = model.metadataSchema?.fields && model.metadataSchema.fields.length > 0;
238
+ indexCode += `export type {\n`;
239
+ indexCode += ` ${typeName}Record,\n`;
240
+ indexCode += ` ${typeName}RecordWithVariants,\n`;
241
+ indexCode += ` ${typeName}Variant,\n`;
242
+ indexCode += ` ${typeName}Version,\n`;
243
+ indexCode += ` ${typeName}FilterInput,\n`;
244
+ indexCode += ` Create${typeName}Input,\n`;
245
+ indexCode += ` Update${typeName}Input,\n`;
246
+ indexCode += ` Save${typeName}ContentInput,\n`;
247
+ indexCode += ` Save${typeName}ContentResult,\n`;
248
+ if (hasMetadata) {
249
+ indexCode += ` ${typeName}Metadata,\n`;
250
+ }
251
+ indexCode += `} from './${model.key}.js';\n`;
252
+ }
253
+ return indexCode;
254
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * CMS Generator
3
+ *
4
+ * Generates typed hooks/functions for CMS route resolution layer:
5
+ * - resolveRoute for URL-based entity resolution
6
+ * - Template, zone, and layout resolution
7
+ * - Breadcrumbs and grid configuration
8
+ *
9
+ * Only generates when there are models with cms.enabled = true.
10
+ *
11
+ * @generated by UniformGen
12
+ */
13
+ import type { EntityModel } from '../../fetcher/fetch-schemas.js';
14
+ export { generateCmsTypes } from './types.js';
15
+ export { hasRoutingEnabled, getRoutableModels, generateResolveRouteReact, generateResolveRouteRemix, } from './route.js';
16
+ /**
17
+ * Check if CMS generation is needed
18
+ * Returns true if any model has cms.enabled = true
19
+ */
20
+ export declare function shouldGenerateCms(models: EntityModel[]): boolean;
21
+ /**
22
+ * Generate CMS index file for React
23
+ */
24
+ export declare function generateCmsIndexReact(models: EntityModel[]): string;
25
+ /**
26
+ * Generate CMS index file for Remix/Hydrogen
27
+ */
28
+ export declare function generateCmsIndexRemix(models: EntityModel[]): string;
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/cms/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAElE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAEhE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAkDnE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAmDnE"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * CMS Generator
3
+ *
4
+ * Generates typed hooks/functions for CMS route resolution layer:
5
+ * - resolveRoute for URL-based entity resolution
6
+ * - Template, zone, and layout resolution
7
+ * - Breadcrumbs and grid configuration
8
+ *
9
+ * Only generates when there are models with cms.enabled = true.
10
+ *
11
+ * @generated by UniformGen
12
+ */
13
+ export { generateCmsTypes } from './types.js';
14
+ export { hasRoutingEnabled, getRoutableModels, generateResolveRouteReact, generateResolveRouteRemix, } from './route.js';
15
+ /**
16
+ * Check if CMS generation is needed
17
+ * Returns true if any model has cms.enabled = true
18
+ */
19
+ export function shouldGenerateCms(models) {
20
+ return models.some(m => m.pages?.enabled === true);
21
+ }
22
+ /**
23
+ * Generate CMS index file for React
24
+ */
25
+ export function generateCmsIndexReact(models) {
26
+ const routableModels = models.filter(m => m.pages?.enabled === true);
27
+ if (routableModels.length === 0) {
28
+ return `/**
29
+ * CMS Resolution
30
+ *
31
+ * No routable models found. CMS resolution is not available.
32
+ *
33
+ * @generated by UniformGen - DO NOT EDIT MANUALLY
34
+ */
35
+
36
+ export {};
37
+ `;
38
+ }
39
+ return `/**
40
+ * CMS Resolution
41
+ *
42
+ * React hooks for CMS route resolution with templates, zones, and layouts.
43
+ *
44
+ * @generated by UniformGen - DO NOT EDIT MANUALLY
45
+ */
46
+
47
+ // Route resolution hook
48
+ export {
49
+ useResolveRoute,
50
+ ROUTABLE_MODELS,
51
+ type RoutableModelKey,
52
+ } from './route.js';
53
+
54
+ // Types
55
+ export type {
56
+ ResolvedRoute,
57
+ ResolvedRecord,
58
+ ResolvedVariant,
59
+ ResolvedContent,
60
+ ResolvedField,
61
+ ResolvedTemplateRef,
62
+ ResolutionContext,
63
+ FieldLayout,
64
+ LayoutPosition,
65
+ FieldSource,
66
+ GridConfig,
67
+ Breadcrumb,
68
+ BreadcrumbType,
69
+ VariantContext,
70
+ ReferenceResolutionOptions,
71
+ } from './types.js';
72
+ `;
73
+ }
74
+ /**
75
+ * Generate CMS index file for Remix/Hydrogen
76
+ */
77
+ export function generateCmsIndexRemix(models) {
78
+ const routableModels = models.filter(m => m.pages?.enabled === true);
79
+ if (routableModels.length === 0) {
80
+ return `/**
81
+ * CMS Resolution
82
+ *
83
+ * No routable models found. CMS resolution is not available.
84
+ *
85
+ * @generated by UniformGen - DO NOT EDIT MANUALLY
86
+ */
87
+
88
+ export {};
89
+ `;
90
+ }
91
+ return `/**
92
+ * CMS Resolution
93
+ *
94
+ * Server-side functions for CMS route resolution with templates, zones, and layouts.
95
+ *
96
+ * @generated by UniformGen - DO NOT EDIT MANUALLY
97
+ */
98
+
99
+ // Route resolution function
100
+ export {
101
+ resolveRoute,
102
+ ROUTABLE_MODELS,
103
+ type RoutableModelKey,
104
+ type GraphQLClient,
105
+ } from './route.js';
106
+
107
+ // Types
108
+ export type {
109
+ ResolvedRoute,
110
+ ResolvedRecord,
111
+ ResolvedVariant,
112
+ ResolvedContent,
113
+ ResolvedField,
114
+ ResolvedTemplateRef,
115
+ ResolutionContext,
116
+ FieldLayout,
117
+ LayoutPosition,
118
+ FieldSource,
119
+ GridConfig,
120
+ Breadcrumb,
121
+ BreadcrumbType,
122
+ VariantContext,
123
+ ReferenceResolutionOptions,
124
+ } from './types.js';
125
+ `;
126
+ }
@@ -0,0 +1,27 @@
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
+ import type { EntityModel } from '../../fetcher/fetch-schemas.js';
10
+ /**
11
+ * Check if a model has CMS enabled (cms.enabled in extensions)
12
+ * Note: The `pages` property on EntityModel is extracted from extensions.cms
13
+ */
14
+ export declare function hasRoutingEnabled(model: EntityModel): boolean;
15
+ /**
16
+ * Get all routable models (models with cms.enabled = true)
17
+ */
18
+ export declare function getRoutableModels(models: EntityModel[]): EntityModel[];
19
+ /**
20
+ * Generate React resolveRoute hook
21
+ */
22
+ export declare function generateResolveRouteReact(routableModels: EntityModel[]): string;
23
+ /**
24
+ * Generate Remix/Hydrogen resolveRoute function
25
+ */
26
+ export declare function generateResolveRouteRemix(routableModels: EntityModel[]): string;
27
+ //# sourceMappingURL=route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/generators/cms/route.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAElE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAE7D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAEtE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,WAAW,EAAE,GAAG,MAAM,CA2L/E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,WAAW,EAAE,GAAG,MAAM,CAmM/E"}