@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,100 @@
1
+ import { getFieldType, getRequiredImports, sanitizeFieldName, toPascalCase, } from '../../utils/field-mapping.js';
2
+ /**
3
+ * Generate TypeScript types for a data model
4
+ */
5
+ export function generateDataModelTypes(model, _useUnknownForJSON) {
6
+ const typeName = toPascalCase(model.handle);
7
+ const fields = model.fields || [];
8
+ // Get required imports
9
+ const imports = getRequiredImports(fields);
10
+ const importStatements = imports.size > 0
11
+ ? `import type { ${Array.from(imports)
12
+ .map((i) => {
13
+ if (i === 'scalars') {
14
+ return Array.from(new Set(fields.map((f) => getFieldType(f, 'output'))))
15
+ .filter((t) => ![
16
+ 'string',
17
+ 'number',
18
+ 'boolean',
19
+ 'Date',
20
+ 'unknown',
21
+ ].includes(t) && !t.includes('[]'))
22
+ .join(', ');
23
+ }
24
+ return '';
25
+ })
26
+ .filter(Boolean)
27
+ .join(', ')} } from '../scalars.js';\n\n`
28
+ : '';
29
+ // Generate main interface
30
+ let interfaceCode = `/**
31
+ * ${model.name}${model.description ? `\n * ${model.description}` : ''}
32
+ *
33
+ * @generated from data model schema '${model.handle}'
34
+ */
35
+ export interface ${typeName} {
36
+ id: string;\n`;
37
+ // Add fields
38
+ for (const field of fields) {
39
+ const fieldName = sanitizeFieldName(field.key);
40
+ const fieldType = getFieldType(field, 'output');
41
+ const optional = field.required ? '' : '?';
42
+ const comment = field.helpText ? ` /** ${field.helpText} */\n` : '';
43
+ interfaceCode += comment;
44
+ interfaceCode += ` ${fieldName}${optional}: ${fieldType};\n`;
45
+ }
46
+ // Add system fields
47
+ interfaceCode += `
48
+ // System fields
49
+ createdAt: Date;
50
+ updatedAt: Date;
51
+ }\n\n`;
52
+ // Generate input type
53
+ interfaceCode += `/**
54
+ * Input type for creating/updating ${model.name}
55
+ */
56
+ export interface ${typeName}Input {\n`;
57
+ for (const field of fields) {
58
+ const fieldName = sanitizeFieldName(field.key);
59
+ const fieldType = getFieldType(field, 'input');
60
+ const optional = field.required ? '' : '?';
61
+ interfaceCode += ` ${fieldName}${optional}: ${fieldType};\n`;
62
+ }
63
+ interfaceCode += '}\n\n';
64
+ // Generate translations type if any fields are translatable
65
+ const translatableFields = fields.filter((f) => f.isTranslatable);
66
+ if (translatableFields.length > 0) {
67
+ interfaceCode += `/**
68
+ * Translatable fields for ${model.name}
69
+ */
70
+ export interface ${typeName}Translations {\n`;
71
+ for (const field of translatableFields) {
72
+ const fieldName = sanitizeFieldName(field.key);
73
+ const fieldType = getFieldType(field, 'output');
74
+ interfaceCode += ` ${fieldName}?: Record<string, ${fieldType}>; // locale -> content\n`;
75
+ }
76
+ interfaceCode += '}\n';
77
+ }
78
+ return importStatements + interfaceCode;
79
+ }
80
+ /**
81
+ * Generate index file for data models
82
+ */
83
+ export function generateDataModelsIndex(models) {
84
+ let indexCode = `/**
85
+ * Data Models - Generated types
86
+ *
87
+ * @generated by UniformGen - DO NOT EDIT MANUALLY
88
+ */\n\n`;
89
+ for (const model of models) {
90
+ const typeName = toPascalCase(model.handle);
91
+ indexCode += `export type { ${typeName}, ${typeName}Input`;
92
+ // Add translations export if any fields are translatable
93
+ const hasTranslations = model.fields?.some((f) => f.isTranslatable);
94
+ if (hasTranslations) {
95
+ indexCode += `, ${typeName}Translations`;
96
+ }
97
+ indexCode += ` } from './${model.handle}.js';\n`;
98
+ }
99
+ return indexCode;
100
+ }
@@ -0,0 +1,13 @@
1
+ import type { EntityModel } from '../../fetcher/fetch-schemas.js';
2
+ /**
3
+ * Generate TypeScript code for an entity model
4
+ *
5
+ * For models with records mode: generates config object + data interface
6
+ * For inline-only models: generates only data interface (no config)
7
+ */
8
+ export declare function generateEntityModelTypes(model: EntityModel, allModels: EntityModel[]): string;
9
+ /**
10
+ * Generate index file for entity models
11
+ */
12
+ export declare function generateEntityModelsIndex(models: EntityModel[]): string;
13
+ //# sourceMappingURL=entity-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-models.d.ts","sourceRoot":"","sources":["../../../src/generators/types/entity-models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,gCAAgC,CAAC;AA+B/E;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,WAAW,EAAE,GACvB,MAAM,CAiCR;AA6ND;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAsBvE"}
@@ -0,0 +1,241 @@
1
+ import { getFieldType, getInlineSchemaReferences, generateFieldDef, sanitizeFieldName, toPascalCase, toCamelCase, FIELD_TYPE_MAPPING, } from '../../utils/field-mapping.js';
2
+ /**
3
+ * Check if model is inline-only (no records mode)
4
+ */
5
+ function isInlineOnlyModel(model) {
6
+ return model.modes.inline && !model.modes.records;
7
+ }
8
+ /**
9
+ * Get the mode string for config
10
+ */
11
+ function getModelMode(model) {
12
+ if (model.modes.inline && model.modes.records) {
13
+ return 'both';
14
+ }
15
+ if (model.modes.inline) {
16
+ return 'inline';
17
+ }
18
+ return 'records';
19
+ }
20
+ /**
21
+ * Generate TypeScript code for an entity model
22
+ *
23
+ * For models with records mode: generates config object + data interface
24
+ * For inline-only models: generates only data interface (no config)
25
+ */
26
+ export function generateEntityModelTypes(model, allModels) {
27
+ const typeName = toPascalCase(model.key);
28
+ const configName = toCamelCase(model.key) + 'Config';
29
+ const fields = model.fields || [];
30
+ // Get field type imports
31
+ const fieldTypeImports = getFieldTypeImportsForFields(fields);
32
+ // Get inline schema references
33
+ const inlineSchemaRefs = getInlineSchemaReferences(fields);
34
+ // Build imports
35
+ const importStatements = buildImportStatements(model, fieldTypeImports, inlineSchemaRefs, allModels);
36
+ let code = importStatements;
37
+ // For inline-only models, only generate the data interface
38
+ if (isInlineOnlyModel(model)) {
39
+ code += generateDataInterface(model, fields, typeName, allModels);
40
+ return code;
41
+ }
42
+ // For models with records mode, generate both config and data interface
43
+ code += generateConfigObject(model, fields, configName);
44
+ code += '\n';
45
+ code += generateDataInterface(model, fields, typeName + 'Data', allModels);
46
+ return code;
47
+ }
48
+ /**
49
+ * Build import statements for the generated file
50
+ */
51
+ function buildImportStatements(model, fieldTypeImports, inlineSchemaRefs, allModels) {
52
+ const imports = [];
53
+ // Config import (only for non-inline-only models)
54
+ if (!isInlineOnlyModel(model)) {
55
+ imports.push("import type { EntityModelConfig } from '../config.js';");
56
+ }
57
+ // Field type value imports
58
+ if (fieldTypeImports.size > 0) {
59
+ const types = Array.from(fieldTypeImports).sort().join(', ');
60
+ imports.push(`import type { ${types} } from '../field-types.js';`);
61
+ }
62
+ // Inline schema imports
63
+ for (const refKey of inlineSchemaRefs) {
64
+ const refModel = allModels.find((m) => m.key === refKey);
65
+ if (refModel) {
66
+ const refTypeName = isInlineOnlyModel(refModel)
67
+ ? toPascalCase(refKey)
68
+ : toPascalCase(refKey) + 'Data';
69
+ imports.push(`import type { ${refTypeName} } from './${refKey}.js';`);
70
+ }
71
+ }
72
+ if (imports.length > 0) {
73
+ return imports.join('\n') + '\n\n';
74
+ }
75
+ return '';
76
+ }
77
+ /**
78
+ * Generate the config object for an entity model
79
+ */
80
+ function generateConfigObject(model, fields, configName) {
81
+ const lines = [];
82
+ // JSDoc comment
83
+ lines.push('/**');
84
+ lines.push(` * ${model.name} Configuration`);
85
+ if (model.description) {
86
+ lines.push(` * ${model.description}`);
87
+ }
88
+ lines.push(` *`);
89
+ lines.push(` * @generated from entity model '${model.key}'`);
90
+ lines.push(' */');
91
+ // Config object
92
+ lines.push(`export const ${configName} = {`);
93
+ lines.push(` key: '${model.key}',`);
94
+ lines.push(` name: '${model.name.replace(/'/g, "\\'")}',`);
95
+ if (model.description) {
96
+ lines.push(` description: '${model.description.replace(/'/g, "\\'")}',`);
97
+ }
98
+ // Feature flags derived from tier
99
+ lines.push('');
100
+ lines.push(' // Feature flags');
101
+ lines.push(` versions: ${model.tier >= 2},`);
102
+ lines.push(` variants: ${model.tier >= 3},`);
103
+ lines.push(` customFields: ${!(model.isInfrastructure ?? false)},`);
104
+ // Usage mode
105
+ lines.push('');
106
+ lines.push(' // Usage mode');
107
+ lines.push(` mode: '${getModelMode(model)}',`);
108
+ lines.push(` publicApi: ${model.modes.publicApi ?? false},`);
109
+ lines.push(` editorMode: '${model.editorMode ?? 'flat'}',`);
110
+ // Pages configuration (routing, default template, sitemap)
111
+ if (model.pages) {
112
+ lines.push('');
113
+ lines.push(' // Pages configuration');
114
+ const pagesParts = [];
115
+ pagesParts.push(`enabled: ${model.pages.enabled}`);
116
+ if (model.pages.defaultTemplate) {
117
+ pagesParts.push(`defaultTemplate: '${model.pages.defaultTemplate.naturalKey}'`);
118
+ }
119
+ if (model.pages.sitemap) {
120
+ const sitemapParts = [];
121
+ if (model.pages.sitemap.changefreq) {
122
+ sitemapParts.push(`changefreq: '${model.pages.sitemap.changefreq}'`);
123
+ }
124
+ if (model.pages.sitemap.priority !== undefined) {
125
+ sitemapParts.push(`priority: ${model.pages.sitemap.priority}`);
126
+ }
127
+ if (sitemapParts.length > 0) {
128
+ pagesParts.push(`sitemap: { ${sitemapParts.join(', ')} }`);
129
+ }
130
+ }
131
+ lines.push(` pages: { ${pagesParts.join(', ')} },`);
132
+ }
133
+ // Hooks
134
+ if (model.hooks && Object.keys(model.hooks).length > 0) {
135
+ lines.push('');
136
+ lines.push(' // Lifecycle hooks');
137
+ lines.push(` hooks: ${JSON.stringify(model.hooks, null, 4).replace(/\n/g, '\n ')},`);
138
+ }
139
+ else {
140
+ lines.push('');
141
+ lines.push(' // Lifecycle hooks');
142
+ lines.push(' hooks: {},');
143
+ }
144
+ // Field definitions
145
+ lines.push('');
146
+ lines.push(' // Field definitions');
147
+ if (fields.length === 0) {
148
+ lines.push(' fieldDefs: [],');
149
+ }
150
+ else {
151
+ lines.push(' fieldDefs: [');
152
+ for (const field of fields) {
153
+ lines.push(` ${generateFieldDef(field)},`);
154
+ }
155
+ lines.push(' ],');
156
+ }
157
+ lines.push('} as const satisfies EntityModelConfig;');
158
+ return lines.join('\n') + '\n';
159
+ }
160
+ /**
161
+ * Generate the data interface for field values
162
+ */
163
+ function generateDataInterface(model, fields, interfaceName, allModels) {
164
+ const lines = [];
165
+ // JSDoc comment
166
+ lines.push('/**');
167
+ lines.push(` * ${model.name} Data`);
168
+ lines.push(` * Field values only - no system fields`);
169
+ lines.push(` *`);
170
+ lines.push(` * @generated from entity model '${model.key}'`);
171
+ lines.push(' */');
172
+ lines.push(`export interface ${interfaceName} {`);
173
+ for (const field of fields) {
174
+ const fieldName = sanitizeFieldName(field.key);
175
+ let fieldType = getFieldType(field, 'output');
176
+ // Adjust type name for inline schema references to models with records mode
177
+ const refModel = allModels.find((m) => m.key === field.type);
178
+ if (refModel && !isInlineOnlyModel(refModel)) {
179
+ // Model has records mode, so use PascalCaseData instead of just PascalCase
180
+ fieldType = toPascalCase(field.type) + 'Data';
181
+ }
182
+ // Also handle list/tree itemType
183
+ if ((field.type === 'list' || field.type === 'tree') &&
184
+ field.options?.itemType) {
185
+ const itemRefModel = allModels.find((m) => m.key === field.options.itemType);
186
+ if (itemRefModel && !isInlineOnlyModel(itemRefModel)) {
187
+ fieldType = toPascalCase(field.options.itemType) + 'Data[]';
188
+ }
189
+ }
190
+ const optional = field.required ? '' : '?';
191
+ const comment = field.helpText ? ` /** ${field.helpText} */\n` : '';
192
+ lines.push(comment + ` ${fieldName}${optional}: ${fieldType};`);
193
+ }
194
+ lines.push('}');
195
+ return lines.join('\n') + '\n';
196
+ }
197
+ /**
198
+ * Get field type value imports needed for a set of fields
199
+ */
200
+ function getFieldTypeImportsForFields(fields) {
201
+ const imports = new Set();
202
+ for (const field of fields) {
203
+ const mapping = FIELD_TYPE_MAPPING[field.type];
204
+ if (mapping?.needsImport === 'field-types') {
205
+ imports.add(mapping.outputType);
206
+ }
207
+ // Check list/tree itemType
208
+ if ((field.type === 'list' || field.type === 'tree') &&
209
+ field.options?.itemType) {
210
+ const itemMapping = FIELD_TYPE_MAPPING[field.options.itemType];
211
+ if (itemMapping?.needsImport === 'field-types') {
212
+ imports.add(itemMapping.outputType);
213
+ }
214
+ }
215
+ }
216
+ return imports;
217
+ }
218
+ /**
219
+ * Generate index file for entity models
220
+ */
221
+ export function generateEntityModelsIndex(models) {
222
+ let indexCode = `/**
223
+ * Entity Models - Generated types and configs
224
+ *
225
+ * @generated by UniformGen - DO NOT EDIT MANUALLY
226
+ */\n\n`;
227
+ for (const model of models) {
228
+ const typeName = toPascalCase(model.key);
229
+ const configName = toCamelCase(model.key) + 'Config';
230
+ if (isInlineOnlyModel(model)) {
231
+ // Inline-only: export only the data type
232
+ indexCode += `export type { ${typeName} } from './${model.key}.js';\n`;
233
+ }
234
+ else {
235
+ // Records mode: export config and data type
236
+ indexCode += `export { ${configName} } from './${model.key}.js';\n`;
237
+ indexCode += `export type { ${typeName}Data } from './${model.key}.js';\n`;
238
+ }
239
+ }
240
+ return indexCode;
241
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Generates the field-types.ts file with:
3
+ * - Value types for each field type (what the data looks like)
4
+ * - Field definition types (how to define fields in config)
5
+ *
6
+ * @generated by UniformGen
7
+ */
8
+ export declare function generateFieldTypesFile(): string;
9
+ //# sourceMappingURL=field-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-types.d.ts","sourceRoot":"","sources":["../../../src/generators/types/field-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wBAAgB,sBAAsB,IAAI,MAAM,CAmoB/C"}