@metaobjectsdev/codegen-ts 0.9.0 → 0.11.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/README.md +1 -1
  2. package/dist/column-mapper.d.ts +12 -6
  3. package/dist/column-mapper.d.ts.map +1 -1
  4. package/dist/column-mapper.js +68 -28
  5. package/dist/column-mapper.js.map +1 -1
  6. package/dist/constants.d.ts +8 -0
  7. package/dist/constants.d.ts.map +1 -1
  8. package/dist/constants.js +16 -0
  9. package/dist/constants.js.map +1 -1
  10. package/dist/docs-paths.d.ts +58 -0
  11. package/dist/docs-paths.d.ts.map +1 -0
  12. package/dist/docs-paths.js +89 -0
  13. package/dist/docs-paths.js.map +1 -0
  14. package/dist/enum-import.d.ts +14 -0
  15. package/dist/enum-import.d.ts.map +1 -0
  16. package/dist/enum-import.js +35 -0
  17. package/dist/enum-import.js.map +1 -0
  18. package/dist/enum-shared.d.ts +32 -0
  19. package/dist/enum-shared.d.ts.map +1 -0
  20. package/dist/enum-shared.js +83 -0
  21. package/dist/enum-shared.js.map +1 -0
  22. package/dist/generator-registry.d.ts +22 -0
  23. package/dist/generator-registry.d.ts.map +1 -0
  24. package/dist/generator-registry.js +161 -0
  25. package/dist/generator-registry.js.map +1 -0
  26. package/dist/generator.d.ts +6 -0
  27. package/dist/generator.d.ts.map +1 -1
  28. package/dist/generator.js.map +1 -1
  29. package/dist/generators/api-doc-render.d.ts +17 -0
  30. package/dist/generators/api-doc-render.d.ts.map +1 -0
  31. package/dist/generators/api-doc-render.js +431 -0
  32. package/dist/generators/api-doc-render.js.map +1 -0
  33. package/dist/generators/api-docs-file.d.ts +21 -0
  34. package/dist/generators/api-docs-file.d.ts.map +1 -0
  35. package/dist/generators/api-docs-file.js +112 -0
  36. package/dist/generators/api-docs-file.js.map +1 -0
  37. package/dist/generators/api-field-shape.d.ts +39 -0
  38. package/dist/generators/api-field-shape.d.ts.map +1 -0
  39. package/dist/generators/api-field-shape.js +92 -0
  40. package/dist/generators/api-field-shape.js.map +1 -0
  41. package/dist/generators/api-label.d.ts +3 -0
  42. package/dist/generators/api-label.d.ts.map +1 -0
  43. package/dist/generators/api-label.js +8 -0
  44. package/dist/generators/api-label.js.map +1 -0
  45. package/dist/generators/api-model.d.ts +122 -0
  46. package/dist/generators/api-model.d.ts.map +1 -0
  47. package/dist/generators/api-model.js +809 -0
  48. package/dist/generators/api-model.js.map +1 -0
  49. package/dist/generators/docs-data-builder.d.ts +26 -4
  50. package/dist/generators/docs-data-builder.d.ts.map +1 -1
  51. package/dist/generators/docs-data-builder.js +439 -167
  52. package/dist/generators/docs-data-builder.js.map +1 -1
  53. package/dist/generators/docs-data.d.ts +136 -27
  54. package/dist/generators/docs-data.d.ts.map +1 -1
  55. package/dist/generators/docs-data.js +1 -1
  56. package/dist/generators/docs-data.js.map +1 -1
  57. package/dist/generators/docs-file.d.ts +19 -0
  58. package/dist/generators/docs-file.d.ts.map +1 -1
  59. package/dist/generators/docs-file.js +154 -27
  60. package/dist/generators/docs-file.js.map +1 -1
  61. package/dist/generators/entity-file.d.ts.map +1 -1
  62. package/dist/generators/entity-file.js +29 -14
  63. package/dist/generators/entity-file.js.map +1 -1
  64. package/dist/generators/extractor-file.d.ts.map +1 -1
  65. package/dist/generators/extractor-file.js +2 -1
  66. package/dist/generators/extractor-file.js.map +1 -1
  67. package/dist/generators/field-anchor.d.ts +7 -0
  68. package/dist/generators/field-anchor.d.ts.map +1 -0
  69. package/dist/generators/field-anchor.js +23 -0
  70. package/dist/generators/field-anchor.js.map +1 -0
  71. package/dist/generators/index.d.ts +8 -1
  72. package/dist/generators/index.d.ts.map +1 -1
  73. package/dist/generators/index.js +6 -0
  74. package/dist/generators/index.js.map +1 -1
  75. package/dist/generators/mermaid-er.d.ts +14 -0
  76. package/dist/generators/mermaid-er.d.ts.map +1 -1
  77. package/dist/generators/mermaid-er.js +14 -0
  78. package/dist/generators/mermaid-er.js.map +1 -1
  79. package/dist/generators/output-parser-file.d.ts.map +1 -1
  80. package/dist/generators/output-parser-file.js +3 -4
  81. package/dist/generators/output-parser-file.js.map +1 -1
  82. package/dist/generators/output-prompt-file.d.ts.map +1 -1
  83. package/dist/generators/output-prompt-file.js +2 -2
  84. package/dist/generators/output-prompt-file.js.map +1 -1
  85. package/dist/generators/prompt-render-file.d.ts.map +1 -1
  86. package/dist/generators/prompt-render-file.js +3 -4
  87. package/dist/generators/prompt-render-file.js.map +1 -1
  88. package/dist/generators/queries-file.d.ts.map +1 -1
  89. package/dist/generators/queries-file.js +8 -3
  90. package/dist/generators/queries-file.js.map +1 -1
  91. package/dist/generators/render-helper-file.d.ts.map +1 -1
  92. package/dist/generators/render-helper-file.js +2 -2
  93. package/dist/generators/render-helper-file.js.map +1 -1
  94. package/dist/generators/routes-file-hono.d.ts.map +1 -1
  95. package/dist/generators/routes-file-hono.js +5 -1
  96. package/dist/generators/routes-file-hono.js.map +1 -1
  97. package/dist/generators/routes-file.d.ts +3 -0
  98. package/dist/generators/routes-file.d.ts.map +1 -1
  99. package/dist/generators/routes-file.js +6 -1
  100. package/dist/generators/routes-file.js.map +1 -1
  101. package/dist/generators/template-doc-builder.d.ts +19 -0
  102. package/dist/generators/template-doc-builder.d.ts.map +1 -0
  103. package/dist/generators/template-doc-builder.js +220 -0
  104. package/dist/generators/template-doc-builder.js.map +1 -0
  105. package/dist/generators/template-doc-data.d.ts +62 -0
  106. package/dist/generators/template-doc-data.d.ts.map +1 -0
  107. package/dist/generators/template-doc-data.js +16 -0
  108. package/dist/generators/template-doc-data.js.map +1 -0
  109. package/dist/generators/template-payload-tree.d.ts +15 -0
  110. package/dist/generators/template-payload-tree.d.ts.map +1 -0
  111. package/dist/generators/template-payload-tree.js +61 -0
  112. package/dist/generators/template-payload-tree.js.map +1 -0
  113. package/dist/generators/template-source-annotate.d.ts +74 -0
  114. package/dist/generators/template-source-annotate.d.ts.map +1 -0
  115. package/dist/generators/template-source-annotate.js +184 -0
  116. package/dist/generators/template-source-annotate.js.map +1 -0
  117. package/dist/generators/template-source-render.d.ts +24 -0
  118. package/dist/generators/template-source-render.d.ts.map +1 -0
  119. package/dist/generators/template-source-render.js +175 -0
  120. package/dist/generators/template-source-render.js.map +1 -0
  121. package/dist/generators/trace-helper-file.d.ts +9 -0
  122. package/dist/generators/trace-helper-file.d.ts.map +1 -0
  123. package/dist/generators/trace-helper-file.js +196 -0
  124. package/dist/generators/trace-helper-file.js.map +1 -0
  125. package/dist/import-path.d.ts +18 -0
  126. package/dist/import-path.d.ts.map +1 -1
  127. package/dist/import-path.js +21 -0
  128. package/dist/import-path.js.map +1 -1
  129. package/dist/index.d.ts +29 -4
  130. package/dist/index.d.ts.map +1 -1
  131. package/dist/index.js +28 -2
  132. package/dist/index.js.map +1 -1
  133. package/dist/metaobjects-config.d.ts +101 -2
  134. package/dist/metaobjects-config.d.ts.map +1 -1
  135. package/dist/metaobjects-config.js +46 -0
  136. package/dist/metaobjects-config.js.map +1 -1
  137. package/dist/naming.d.ts +39 -2
  138. package/dist/naming.d.ts.map +1 -1
  139. package/dist/naming.js +52 -3
  140. package/dist/naming.js.map +1 -1
  141. package/dist/payload-codegen.d.ts.map +1 -1
  142. package/dist/payload-codegen.js +14 -6
  143. package/dist/payload-codegen.js.map +1 -1
  144. package/dist/pk-resolver.d.ts.map +1 -1
  145. package/dist/pk-resolver.js +4 -2
  146. package/dist/pk-resolver.js.map +1 -1
  147. package/dist/projection/extract-view-spec.d.ts.map +1 -1
  148. package/dist/projection/extract-view-spec.js +52 -26
  149. package/dist/projection/extract-view-spec.js.map +1 -1
  150. package/dist/relation-resolver.d.ts +16 -0
  151. package/dist/relation-resolver.d.ts.map +1 -1
  152. package/dist/relation-resolver.js +82 -1
  153. package/dist/relation-resolver.js.map +1 -1
  154. package/dist/render-context.d.ts +25 -2
  155. package/dist/render-context.d.ts.map +1 -1
  156. package/dist/render-context.js +7 -0
  157. package/dist/render-context.js.map +1 -1
  158. package/dist/render-engine/embedded-templates.generated.d.ts +2 -0
  159. package/dist/render-engine/embedded-templates.generated.d.ts.map +1 -0
  160. package/dist/render-engine/embedded-templates.generated.js +15 -0
  161. package/dist/render-engine/embedded-templates.generated.js.map +1 -0
  162. package/dist/render-engine/framework-provider.d.ts.map +1 -1
  163. package/dist/render-engine/framework-provider.js +26 -13
  164. package/dist/render-engine/framework-provider.js.map +1 -1
  165. package/dist/runner.d.ts.map +1 -1
  166. package/dist/runner.js +20 -0
  167. package/dist/runner.js.map +1 -1
  168. package/dist/templates/docs-file.d.ts +2 -6
  169. package/dist/templates/docs-file.d.ts.map +1 -1
  170. package/dist/templates/docs-file.js +2 -5
  171. package/dist/templates/docs-file.js.map +1 -1
  172. package/dist/templates/drizzle-schema.d.ts.map +1 -1
  173. package/dist/templates/drizzle-schema.js +72 -23
  174. package/dist/templates/drizzle-schema.js.map +1 -1
  175. package/dist/templates/entity-constants.d.ts +7 -0
  176. package/dist/templates/entity-constants.d.ts.map +1 -1
  177. package/dist/templates/entity-constants.js +3 -3
  178. package/dist/templates/entity-constants.js.map +1 -1
  179. package/dist/templates/entity-file.d.ts.map +1 -1
  180. package/dist/templates/entity-file.js +16 -5
  181. package/dist/templates/entity-file.js.map +1 -1
  182. package/dist/templates/enums-file.d.ts +11 -0
  183. package/dist/templates/enums-file.d.ts.map +1 -0
  184. package/dist/templates/enums-file.js +44 -0
  185. package/dist/templates/enums-file.js.map +1 -0
  186. package/dist/templates/extract-delegate-emitter.d.ts.map +1 -1
  187. package/dist/templates/extract-delegate-emitter.js +6 -8
  188. package/dist/templates/extract-delegate-emitter.js.map +1 -1
  189. package/dist/templates/extractor.d.ts.map +1 -1
  190. package/dist/templates/extractor.js +58 -41
  191. package/dist/templates/extractor.js.map +1 -1
  192. package/dist/templates/field-meta.d.ts.map +1 -1
  193. package/dist/templates/field-meta.js +2 -6
  194. package/dist/templates/field-meta.js.map +1 -1
  195. package/dist/templates/filter-allowlist.d.ts +7 -2
  196. package/dist/templates/filter-allowlist.d.ts.map +1 -1
  197. package/dist/templates/filter-allowlist.js +18 -10
  198. package/dist/templates/filter-allowlist.js.map +1 -1
  199. package/dist/templates/filter-shared.js +2 -2
  200. package/dist/templates/filter-shared.js.map +1 -1
  201. package/dist/templates/filter-type.d.ts +7 -1
  202. package/dist/templates/filter-type.d.ts.map +1 -1
  203. package/dist/templates/filter-type.js +10 -6
  204. package/dist/templates/filter-type.js.map +1 -1
  205. package/dist/templates/find-templates.d.ts +4 -0
  206. package/dist/templates/find-templates.d.ts.map +1 -0
  207. package/dist/templates/find-templates.js +15 -0
  208. package/dist/templates/find-templates.js.map +1 -0
  209. package/dist/templates/fr010-field-mapping.d.ts +2 -0
  210. package/dist/templates/fr010-field-mapping.d.ts.map +1 -1
  211. package/dist/templates/fr010-field-mapping.js +15 -11
  212. package/dist/templates/fr010-field-mapping.js.map +1 -1
  213. package/dist/templates/inferred-types.d.ts +44 -7
  214. package/dist/templates/inferred-types.d.ts.map +1 -1
  215. package/dist/templates/inferred-types.js +121 -19
  216. package/dist/templates/inferred-types.js.map +1 -1
  217. package/dist/templates/mermaid-er.d.ts +35 -2
  218. package/dist/templates/mermaid-er.d.ts.map +1 -1
  219. package/dist/templates/mermaid-er.js +174 -7
  220. package/dist/templates/mermaid-er.js.map +1 -1
  221. package/dist/templates/output-format-spec-emitter.js +1 -1
  222. package/dist/templates/output-format-spec-emitter.js.map +1 -1
  223. package/dist/templates/output-parser.d.ts.map +1 -1
  224. package/dist/templates/output-parser.js +31 -80
  225. package/dist/templates/output-parser.js.map +1 -1
  226. package/dist/templates/output-prompt.d.ts.map +1 -1
  227. package/dist/templates/output-prompt.js +2 -2
  228. package/dist/templates/output-prompt.js.map +1 -1
  229. package/dist/templates/queries-file.d.ts.map +1 -1
  230. package/dist/templates/queries-file.js +113 -5
  231. package/dist/templates/queries-file.js.map +1 -1
  232. package/dist/templates/queries.d.ts +7 -2
  233. package/dist/templates/queries.d.ts.map +1 -1
  234. package/dist/templates/queries.js +15 -15
  235. package/dist/templates/queries.js.map +1 -1
  236. package/dist/templates/relations-block.d.ts.map +1 -1
  237. package/dist/templates/relations-block.js +12 -3
  238. package/dist/templates/relations-block.js.map +1 -1
  239. package/dist/templates/render-helper.d.ts.map +1 -1
  240. package/dist/templates/render-helper.js +5 -5
  241. package/dist/templates/render-helper.js.map +1 -1
  242. package/dist/templates/routes-file-hono.d.ts.map +1 -1
  243. package/dist/templates/routes-file-hono.js +1 -2
  244. package/dist/templates/routes-file-hono.js.map +1 -1
  245. package/dist/templates/routes-file.d.ts.map +1 -1
  246. package/dist/templates/routes-file.js +184 -7
  247. package/dist/templates/routes-file.js.map +1 -1
  248. package/dist/templates/tph-discriminator.d.ts +56 -0
  249. package/dist/templates/tph-discriminator.d.ts.map +1 -0
  250. package/dist/templates/tph-discriminator.js +180 -0
  251. package/dist/templates/tph-discriminator.js.map +1 -0
  252. package/dist/templates/value-object-file.d.ts +2 -1
  253. package/dist/templates/value-object-file.d.ts.map +1 -1
  254. package/dist/templates/value-object-file.js +33 -5
  255. package/dist/templates/value-object-file.js.map +1 -1
  256. package/dist/templates/zod-validators.d.ts +65 -2
  257. package/dist/templates/zod-validators.d.ts.map +1 -1
  258. package/dist/templates/zod-validators.js +202 -22
  259. package/dist/templates/zod-validators.js.map +1 -1
  260. package/package.json +103 -34
  261. package/src/column-mapper.ts +79 -32
  262. package/src/constants.ts +18 -0
  263. package/src/docs-paths.ts +128 -0
  264. package/src/enum-import.ts +43 -0
  265. package/src/enum-shared.ts +95 -0
  266. package/src/generator-registry.ts +204 -0
  267. package/src/generator.ts +6 -0
  268. package/src/generators/api-doc-render.ts +572 -0
  269. package/src/generators/api-docs-file.ts +146 -0
  270. package/src/generators/api-field-shape.ts +114 -0
  271. package/src/generators/api-label.ts +7 -0
  272. package/src/generators/api-model.ts +1067 -0
  273. package/src/generators/docs-data-builder.ts +483 -189
  274. package/src/generators/docs-data.ts +139 -28
  275. package/src/generators/docs-file.ts +205 -39
  276. package/src/generators/entity-file.ts +31 -15
  277. package/src/generators/extractor-file.ts +2 -1
  278. package/src/generators/field-anchor.ts +24 -0
  279. package/src/generators/index.ts +8 -1
  280. package/src/generators/mermaid-er.ts +14 -0
  281. package/src/generators/output-parser-file.ts +3 -4
  282. package/src/generators/output-prompt-file.ts +2 -1
  283. package/src/generators/prompt-render-file.ts +3 -4
  284. package/src/generators/queries-file.ts +9 -3
  285. package/src/generators/render-helper-file.ts +2 -1
  286. package/src/generators/routes-file-hono.ts +5 -1
  287. package/src/generators/routes-file.ts +7 -1
  288. package/src/generators/template-doc-builder.ts +306 -0
  289. package/src/generators/template-doc-data.ts +85 -0
  290. package/src/generators/template-payload-tree.ts +71 -0
  291. package/src/generators/template-source-annotate.ts +290 -0
  292. package/src/generators/template-source-render.ts +203 -0
  293. package/src/generators/trace-helper-file.ts +301 -0
  294. package/src/import-path.ts +28 -0
  295. package/src/index.ts +55 -4
  296. package/src/metaobjects-config.ts +146 -2
  297. package/src/naming.ts +73 -3
  298. package/src/payload-codegen.ts +16 -5
  299. package/src/pk-resolver.ts +4 -2
  300. package/src/projection/extract-view-spec.ts +50 -31
  301. package/src/relation-resolver.ts +103 -1
  302. package/src/render-context.ts +32 -2
  303. package/src/render-engine/embedded-templates.generated.ts +14 -0
  304. package/src/render-engine/framework-provider.ts +25 -11
  305. package/src/runner.ts +24 -0
  306. package/src/templates/docs-file.ts +2 -9
  307. package/src/templates/drizzle-schema.ts +80 -28
  308. package/src/templates/entity-constants.ts +3 -3
  309. package/src/templates/entity-file.ts +16 -5
  310. package/src/templates/enums-file.ts +50 -0
  311. package/src/templates/extract-delegate-emitter.ts +6 -7
  312. package/src/templates/extractor.ts +70 -40
  313. package/src/templates/field-meta.ts +1 -7
  314. package/src/templates/filter-allowlist.ts +18 -11
  315. package/src/templates/filter-shared.ts +2 -2
  316. package/src/templates/filter-type.ts +9 -7
  317. package/src/templates/find-templates.ts +15 -0
  318. package/src/templates/fr010-field-mapping.ts +15 -13
  319. package/src/templates/inferred-types.ts +122 -21
  320. package/src/templates/mermaid-er.ts +176 -8
  321. package/src/templates/output-format-spec-emitter.ts +1 -1
  322. package/src/templates/output-parser.ts +31 -80
  323. package/src/templates/output-prompt.ts +2 -1
  324. package/src/templates/queries-file.ts +133 -4
  325. package/src/templates/queries.ts +21 -15
  326. package/src/templates/relations-block.ts +19 -3
  327. package/src/templates/render-helper.ts +5 -4
  328. package/src/templates/routes-file-hono.ts +1 -2
  329. package/src/templates/routes-file.ts +234 -7
  330. package/src/templates/tph-discriminator.ts +232 -0
  331. package/src/templates/value-object-file.ts +39 -5
  332. package/src/templates/zod-validators.ts +225 -21
  333. package/templates/api/agent-api.md.mustache +30 -0
  334. package/templates/api/entity-api.md.mustache +69 -0
  335. package/templates/api/index.md.mustache +21 -0
  336. package/templates/docs/entity-page.md.mustache +33 -21
  337. package/templates/docs/template-page.md.mustache +56 -0
  338. package/dist/templates/extract-schema-emitter.d.ts +0 -8
  339. package/dist/templates/extract-schema-emitter.d.ts.map +0 -1
  340. package/dist/templates/extract-schema-emitter.js +0 -81
  341. package/dist/templates/extract-schema-emitter.js.map +0 -1
  342. package/src/templates/extract-schema-emitter.ts +0 -111
package/README.md CHANGED
@@ -198,7 +198,7 @@ if (!r.success) { /* handle r.error (a ZodError) */ } else { /* use r.data */ }
198
198
  | Field subtype | Emitted Zod |
199
199
  |---|---|
200
200
  | `field.string`, `field.class` | `z.string()` |
201
- | `field.int`, `field.long`, `field.short`, `field.byte` | `z.number().int()` |
201
+ | `field.int`, `field.long` | `z.number().int()` |
202
202
  | `field.double`, `field.float` | `z.number()` |
203
203
  | `field.boolean` | `z.boolean()` |
204
204
  | `field.object` (with `@objectRef`) | nested `z.object({ ... })` |
@@ -37,20 +37,26 @@ export interface ColumnSpec {
37
37
  checkConstraint?: string;
38
38
  /**
39
39
  * Optional `.$type<...>()` chain target. Renderer (drizzle-schema.ts) emits
40
- * `.$type<TS[]>()` ahead of the modifiers chain, using ts-poet `imp()` for
41
- * objectRef variants so the cross-module type import auto-hoists.
40
+ * it ahead of the modifiers chain, using ts-poet `imp()` for objectRef
41
+ * variants so the cross-module type import auto-hoists. `array` controls the
42
+ * `[]` suffix: a single value (`VO`) vs a collection (`VO[]`).
42
43
  * `kind: "scalar"` covers string[]/number[]/boolean[] — no import needed.
43
- * `kind: "objectRef"` covers SourceLens[]/Dissent[]/etc. — `module` is the
44
- * relative import path to that entity's emitted module.
44
+ * `kind: "objectRef"` covers SourceLens/Dissent/etc. — only the bare VO `name`
45
+ * is carried; the renderer resolves the import MODULE via the shared
46
+ * `valueObjectModuleSpecifier` (layout/package/extStyle-aware, identical to the
47
+ * field's TS type + Zod schema). A single Postgres jsonb object column
48
+ * (`array: false`) gets `.$type<VO>()`; an array of VOs held in one jsonb
49
+ * column gets `.$type<VO[]>()`.
45
50
  */
46
51
  dollarTypeRef?: {
47
52
  kind: "scalar";
48
53
  tsType: "string" | "number" | "boolean";
54
+ array: boolean;
49
55
  } | {
50
56
  kind: "objectRef";
51
57
  name: string;
52
- module: string;
58
+ array: boolean;
53
59
  };
54
60
  }
55
- export declare function mapColumnType(field: MetaField, dialect: Dialect, strategy?: ColumnNamingStrategy): ColumnSpec;
61
+ export declare function mapColumnType(field: MetaField, dialect: Dialect, strategy?: ColumnNamingStrategy, timestampMode?: "date" | "string"): ColumnSpec;
56
62
  //# sourceMappingURL=column-mapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"column-mapper.d.ts","sourceRoot":"","sources":["../src/column-mapper.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAmC1D,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE7E,YAAY,EAAE,OAAO,EAAE,CAAC;AAExB;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAgExC,MAAM,WAAW,UAAU;IACzB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,6FAA6F;IAC7F,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,iEAAiE;IACjE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,6FAA6F;IAC7F,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iFAAiF;IACjF,YAAY,EAAE,MAAM,CAAC;IACrB,2FAA2F;IAC3F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0FAA0F;IAC1F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;OAOG;IACH,aAAa,CAAC,EACV;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;KAAE,GAC3D;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACzD;AA2DD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,OAAO,EAChB,QAAQ,GAAE,oBAAqD,GAC9D,UAAU,CAqPZ"}
1
+ {"version":3,"file":"column-mapper.d.ts","sourceRoot":"","sources":["../src/column-mapper.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAoC1D,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE7E,YAAY,EAAE,OAAO,EAAE,CAAC;AAExB;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AA+DxC,MAAM,WAAW,UAAU;IACzB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,6FAA6F;IAC7F,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,iEAAiE;IACjE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,6FAA6F;IAC7F,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iFAAiF;IACjF,YAAY,EAAE,MAAM,CAAC;IACrB,2FAA2F;IAC3F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0FAA0F;IAC1F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,EACV;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,GAC3E;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;CACzD;AAsED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,OAAO,EAChB,QAAQ,GAAE,oBAAqD,EAC/D,aAAa,GAAE,MAAM,GAAG,QAAmB,GAC1C,UAAU,CAmRZ"}
@@ -1,9 +1,9 @@
1
1
  // Field-type → Drizzle column type mapping. Per design §6.
2
2
  // Uses the typed MetaField.validators() accessor (effective — includes inherited) for all validator checks.
3
- import { FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, FIELD_SUBTYPE_DECIMAL, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_DATE, FIELD_SUBTYPE_TIME, FIELD_SUBTYPE_TIMESTAMP, FIELD_SUBTYPE_OBJECT, FIELD_SUBTYPE_CLASS, FIELD_SUBTYPE_ENUM, FIELD_SUBTYPE_UUID, VALIDATOR_SUBTYPE_REQUIRED, VALIDATOR_SUBTYPE_LENGTH, FIELD_ATTR_MAX_LENGTH, FIELD_ATTR_PRECISION, FIELD_ATTR_SCALE, FIELD_ATTR_REQUIRED, FIELD_ATTR_UNIQUE, FIELD_ATTR_DEFAULT, FIELD_ATTR_OBJECT_REF, VALIDATOR_ATTR_MAX, FIELD_ATTR_DB_COLUMN_TYPE, DB_COLUMN_TYPE_UUID, DB_COLUMN_TYPE_JSONB, DB_COLUMN_TYPE_TIMESTAMP_WITH_TZ, } from "@metaobjectsdev/metadata";
3
+ import { FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, FIELD_SUBTYPE_DECIMAL, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_DATE, FIELD_SUBTYPE_TIME, FIELD_SUBTYPE_TIMESTAMP, FIELD_SUBTYPE_OBJECT, FIELD_SUBTYPE_ENUM, FIELD_SUBTYPE_UUID, VALIDATOR_SUBTYPE_REQUIRED, VALIDATOR_SUBTYPE_LENGTH, FIELD_ATTR_MAX_LENGTH, FIELD_ATTR_PRECISION, FIELD_ATTR_SCALE, FIELD_ATTR_REQUIRED, FIELD_ATTR_UNIQUE, FIELD_ATTR_DEFAULT, FIELD_ATTR_OBJECT_REF, FIELD_ATTR_STORAGE, STORAGE_JSONB, VALIDATOR_ATTR_MAX, FIELD_ATTR_DB_COLUMN_TYPE, DB_COLUMN_TYPE_UUID, DB_COLUMN_TYPE_JSONB, DB_COLUMN_TYPE_TIMESTAMP_WITH_TZ, } from "@metaobjectsdev/metadata";
4
4
  import { columnNameFromField } from "./naming.js";
5
5
  import { enumValues } from "./enum-meta.js";
6
- import { DEFAULT_COLUMN_NAMING_STRATEGY } from "@metaobjectsdev/metadata";
6
+ import { DEFAULT_COLUMN_NAMING_STRATEGY, stripPackage } from "@metaobjectsdev/metadata";
7
7
  /**
8
8
  * Patterns recognized as SQL expressions in a default value. Anything matching
9
9
  * these is treated as a SQL expression, not a string literal. Mirrors
@@ -33,7 +33,6 @@ function sqliteJsonArrayElementTsType(subType) {
33
33
  switch (subType) {
34
34
  case FIELD_SUBTYPE_STRING:
35
35
  case FIELD_SUBTYPE_ENUM:
36
- case FIELD_SUBTYPE_CLASS:
37
36
  case FIELD_SUBTYPE_UUID:
38
37
  case FIELD_SUBTYPE_DATE:
39
38
  case FIELD_SUBTYPE_TIME:
@@ -80,8 +79,8 @@ function canonicalizeSqlExpr(value) {
80
79
  * unrecognized value never reaches here; an unknown value returns undefined
81
80
  * (fall through to subtype default).
82
81
  */
83
- function pgColumnTypeOverride(field) {
84
- const dbColumnType = field.ownAttr(FIELD_ATTR_DB_COLUMN_TYPE);
82
+ function pgColumnTypeOverride(field, timestampMode = "string") {
83
+ const dbColumnType = field.attr(FIELD_ATTR_DB_COLUMN_TYPE);
85
84
  if (typeof dbColumnType !== "string")
86
85
  return undefined;
87
86
  switch (dbColumnType) {
@@ -91,9 +90,10 @@ function pgColumnTypeOverride(field) {
91
90
  return { fnName: "jsonb" };
92
91
  case DB_COLUMN_TYPE_TIMESTAMP_WITH_TZ:
93
92
  // Drizzle pg-core: timestamp(col, { withTimezone: true }) → timestamptz.
94
- // mode:"string" for the same reason as the plain-timestamp branch — the
95
- // schema + wire contract carry timestamps as strings.
96
- return { fnName: "timestamp", fnOptions: { mode: "string", withTimezone: true } };
93
+ // mode defaults to "string" (ISO-8601 wire contract, matching the generated
94
+ // Zod); a consumer can opt into "date" (drizzle's native mode) via
95
+ // codegen.timestampMode when its hand-written code works with JS Dates.
96
+ return { fnName: "timestamp", fnOptions: { mode: timestampMode, withTimezone: true } };
97
97
  default:
98
98
  return undefined;
99
99
  }
@@ -101,7 +101,7 @@ function pgColumnTypeOverride(field) {
101
101
  /** Resolve max length from validator.length child or @maxLength attr.
102
102
  * Uses field.validators() (effective) so inherited validators are seen. */
103
103
  function getMaxLength(field) {
104
- const lenAttr = field.ownAttr(FIELD_ATTR_MAX_LENGTH);
104
+ const lenAttr = field.attr(FIELD_ATTR_MAX_LENGTH);
105
105
  if (typeof lenAttr === "number")
106
106
  return lenAttr;
107
107
  for (const child of field.validators()) {
@@ -116,11 +116,20 @@ function getMaxLength(field) {
116
116
  /** Check for validator.required child OR @required attr.
117
117
  * Uses field.validators() (effective) so inherited validators are seen. */
118
118
  function isRequired(field) {
119
- if (field.ownAttr(FIELD_ATTR_REQUIRED) === true)
119
+ if (field.attr(FIELD_ATTR_REQUIRED) === true)
120
120
  return true;
121
121
  return field.validators().some((child) => child.subType === VALIDATOR_SUBTYPE_REQUIRED);
122
122
  }
123
- export function mapColumnType(field, dialect, strategy = DEFAULT_COLUMN_NAMING_STRATEGY) {
123
+ /** The bare (package-stripped) @objectRef name on a field.object, or undefined
124
+ * when unset. Used as the `.$type<VO>()` target + its sibling-module import.
125
+ * A fully-qualified ref (acme::ai::SourceLens) strips to the short name. */
126
+ function objectRefBaseName(field) {
127
+ const ref = field.attr(FIELD_ATTR_OBJECT_REF);
128
+ if (typeof ref === "string" && ref.length > 0)
129
+ return stripPackage(ref);
130
+ return undefined;
131
+ }
132
+ export function mapColumnType(field, dialect, strategy = DEFAULT_COLUMN_NAMING_STRATEGY, timestampMode = "string") {
124
133
  const dbName = field.column ?? columnNameFromField(field.name, strategy);
125
134
  const importModule = dialect === "sqlite" ? "drizzle-orm/sqlite-core" : "drizzle-orm/pg-core";
126
135
  const subType = field.subType;
@@ -156,13 +165,21 @@ export function mapColumnType(field, dialect, strategy = DEFAULT_COLUMN_NAMING_S
156
165
  // isn't a silent rounding hazard.
157
166
  leadingComment = "TODO: SQLite has no decimal type; stored as text. Convert at the application boundary or migrate to Postgres for native numeric.";
158
167
  break;
168
+ case FIELD_SUBTYPE_OBJECT:
169
+ // A nested object is stored as a single JSON column (the default
170
+ // single-jsonb-column storage). SQLite has no native jsonb, so the
171
+ // idiomatic Drizzle form is text(..., { mode: "json" }) — agreeing with
172
+ // migrate-ts/expected-schema, which maps field.object → { kind: "json" }
173
+ // (JSON on SQLite). @storage flattened expansion is a separate codegen
174
+ // gap; the column TYPE here is the single-column JSON representation.
175
+ fnName = "text";
176
+ fnOptions = { mode: "json" };
177
+ break;
159
178
  case FIELD_SUBTYPE_DATE:
160
179
  case FIELD_SUBTYPE_TIME:
161
180
  case FIELD_SUBTYPE_TIMESTAMP:
162
181
  case FIELD_SUBTYPE_STRING:
163
182
  case FIELD_SUBTYPE_ENUM:
164
- case FIELD_SUBTYPE_CLASS:
165
- case FIELD_SUBTYPE_OBJECT:
166
183
  case FIELD_SUBTYPE_UUID:
167
184
  // SQLite has no native uuid type; store as TEXT (string native binding).
168
185
  fnName = "text";
@@ -177,7 +194,7 @@ export function mapColumnType(field, dialect, strategy = DEFAULT_COLUMN_NAMING_S
177
194
  // A physical @dbColumnType override wins over the subtype default (Postgres
178
195
  // only; SQLite has no native analogue and falls through above). Resolved
179
196
  // first so the override-precedence matches migrate-ts's expected-schema.
180
- const override = pgColumnTypeOverride(field);
197
+ const override = pgColumnTypeOverride(field, timestampMode);
181
198
  if (override !== undefined) {
182
199
  // Override fully determines the physical type; skip the subtype switch.
183
200
  fnName = override.fnName;
@@ -217,7 +234,7 @@ export function mapColumnType(field, dialect, strategy = DEFAULT_COLUMN_NAMING_S
217
234
  // inconsistent with the string-typed schema + wire contract and
218
235
  // throws on a string write. See SP-B api-contract-generated lane.
219
236
  fnName = "timestamp";
220
- fnOptions = { mode: "string" };
237
+ fnOptions = { mode: timestampMode };
221
238
  break;
222
239
  case FIELD_SUBTYPE_UUID:
223
240
  // Postgres native uuid column; native TS binding stays `string`.
@@ -229,8 +246,8 @@ export function mapColumnType(field, dialect, strategy = DEFAULT_COLUMN_NAMING_S
229
246
  // declared @precision/@scale (mirroring migrate-ts/expected-schema so
230
247
  // codegen and the DDL agree), falling back to a sane default.
231
248
  fnName = "numeric";
232
- const precision = field.ownAttr(FIELD_ATTR_PRECISION);
233
- const scale = field.ownAttr(FIELD_ATTR_SCALE);
249
+ const precision = field.attr(FIELD_ATTR_PRECISION);
250
+ const scale = field.attr(FIELD_ATTR_SCALE);
234
251
  if (typeof precision === "number" && typeof scale === "number") {
235
252
  fnOptions = { precision, scale };
236
253
  }
@@ -253,9 +270,15 @@ export function mapColumnType(field, dialect, strategy = DEFAULT_COLUMN_NAMING_S
253
270
  }
254
271
  break;
255
272
  }
256
- case FIELD_SUBTYPE_ENUM:
257
- case FIELD_SUBTYPE_CLASS:
258
273
  case FIELD_SUBTYPE_OBJECT:
274
+ // A nested object is stored as a single jsonb column (the default
275
+ // single-jsonb-column storage), matching migrate-ts/expected-schema,
276
+ // which maps field.object → { kind: "json" } → JSONB on Postgres.
277
+ // @storage flattened expansion is a separate codegen gap; the column
278
+ // TYPE here is the single-column jsonb representation.
279
+ fnName = "jsonb";
280
+ break;
281
+ case FIELD_SUBTYPE_ENUM:
259
282
  default:
260
283
  fnName = "text";
261
284
  break;
@@ -275,7 +298,11 @@ export function mapColumnType(field, dialect, strategy = DEFAULT_COLUMN_NAMING_S
275
298
  }
276
299
  }
277
300
  const modifiers = [];
278
- if (dialect === "postgres" && isArray) {
301
+ // Postgres native arrays (text[]/integer[]/…) apply to SCALAR array fields
302
+ // only. An object-typed field is stored as a single jsonb column holding the
303
+ // JSON array (storage jsonb/subdocument), so it gets NO native .array() — the
304
+ // array-ness is carried by the .$type<VO[]>() annotation computed below.
305
+ if (dialect === "postgres" && isArray && subType !== FIELD_SUBTYPE_OBJECT) {
279
306
  modifiers.push(".array()");
280
307
  }
281
308
  // SQLite stores arrays as JSON in a text column; Drizzle's text(...,{mode:"json"})
@@ -291,11 +318,11 @@ export function mapColumnType(field, dialect, strategy = DEFAULT_COLUMN_NAMING_S
291
318
  if (isRequired(field)) {
292
319
  modifiers.push(".notNull()");
293
320
  }
294
- if (field.ownAttr(FIELD_ATTR_UNIQUE) === true) {
321
+ if (field.attr(FIELD_ATTR_UNIQUE) === true) {
295
322
  modifiers.push(".unique()");
296
323
  }
297
324
  let defaultExpr;
298
- const defaultAttr = field.ownAttr(FIELD_ATTR_DEFAULT);
325
+ const defaultAttr = field.attr(FIELD_ATTR_DEFAULT);
299
326
  if (defaultAttr !== undefined) {
300
327
  // SQL-expression detection runs on the raw string value — a string like
301
328
  // "CURRENT_TIMESTAMP" or "now" must be emitted as sql`...`, not a literal.
@@ -319,23 +346,36 @@ export function mapColumnType(field, dialect, strategy = DEFAULT_COLUMN_NAMING_S
319
346
  defaultExpr = { kind: "literal", value: typedValue };
320
347
  }
321
348
  }
322
- // SQLite isArray columns route through {mode:"json"} above; compute the
323
- // $type<E[]>() target so the renderer can hoist any cross-module imports.
349
+ // jsonb / JSON-in-text columns infer as `unknown` in Drizzle without a
350
+ // .$type<>() annotation. Carry the logical TS type so the column is typed:
351
+ // - SQLite isArray: arrays serialize as JSON-in-text → .$type<E[]>() (scalar
352
+ // element type, or the @objectRef VO for object arrays).
353
+ // - Postgres field.object: a single jsonb column → .$type<VO>(), or
354
+ // .$type<VO[]>() when isArray (the JSON array lives in the one column; no
355
+ // native .array() is emitted for object storage — see modifiers above).
356
+ // Scalar Postgres arrays use native .array() (already element-typed by
357
+ // Drizzle) so they need no $type.
324
358
  let dollarTypeRef;
325
359
  if (dialect === "sqlite" && isArray) {
326
360
  if (subType === FIELD_SUBTYPE_OBJECT) {
327
- const ref = field.ownAttr(FIELD_ATTR_OBJECT_REF);
328
- if (typeof ref === "string" && ref.length > 0) {
329
- dollarTypeRef = { kind: "objectRef", name: ref, module: `./${ref}.js` };
361
+ const base = objectRefBaseName(field);
362
+ if (base !== undefined) {
363
+ dollarTypeRef = { kind: "objectRef", name: base, array: true };
330
364
  }
331
365
  }
332
366
  else {
333
367
  const scalar = sqliteJsonArrayElementTsType(subType);
334
368
  if (scalar !== undefined) {
335
- dollarTypeRef = { kind: "scalar", tsType: scalar };
369
+ dollarTypeRef = { kind: "scalar", tsType: scalar, array: true };
336
370
  }
337
371
  }
338
372
  }
373
+ else if (dialect === "postgres" && subType === FIELD_SUBTYPE_OBJECT) {
374
+ const base = objectRefBaseName(field);
375
+ if (base !== undefined) {
376
+ dollarTypeRef = { kind: "objectRef", name: base, array: isArray };
377
+ }
378
+ }
339
379
  const result = {
340
380
  fnName,
341
381
  dbName,
@@ -1 +1 @@
1
- {"version":3,"file":"column-mapper.js","sourceRoot":"","sources":["../src/column-mapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"column-mapper.js","sourceRoot":"","sources":["../src/column-mapper.ts"],"names":[],"mappings":"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"}
@@ -4,4 +4,12 @@ export declare const GENERATED_HEADER = "@generated by @metaobjectsdev/codegen-t
4
4
  export declare const EXTRA_SUFFIX = ".extra";
5
5
  /** Default outDir used by tests + as a sane default for generate(). */
6
6
  export declare const DEFAULT_OUT_DIR = "./src/db/entities";
7
+ /** `@emitTanstack: false` — skip the TanStack hooks + grid generators for an entity. */
8
+ export declare const CODEGEN_ATTR_EMIT_TANSTACK = "emitTanstack";
9
+ /** `@emitGrid: true` — opt a TPH subtype IN to its own per-subtype grid (default: the polymorphic base grid is the single source). */
10
+ export declare const CODEGEN_ATTR_EMIT_GRID = "emitGrid";
11
+ /** `@emitForm: false` — skip the React form generator for an entity. */
12
+ export declare const CODEGEN_ATTR_EMIT_FORM = "emitForm";
13
+ /** `@emitRoutes: false` — skip the Fastify routes generator for an entity. */
14
+ export declare const CODEGEN_ATTR_EMIT_ROUTES = "emitRoutes";
7
15
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,6CAA6C,CAAC;AAE3E,6EAA6E;AAC7E,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,uEAAuE;AACvE,eAAO,MAAM,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,6CAA6C,CAAC;AAE3E,6EAA6E;AAC7E,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,uEAAuE;AACvE,eAAO,MAAM,eAAe,sBAAsB,CAAC;AAWnD,wFAAwF;AACxF,eAAO,MAAM,0BAA0B,iBAAiB,CAAC;AACzD,sIAAsI;AACtI,eAAO,MAAM,sBAAsB,aAAa,CAAC;AACjD,wEAAwE;AACxE,eAAO,MAAM,sBAAsB,aAAa,CAAC;AACjD,8EAA8E;AAC9E,eAAO,MAAM,wBAAwB,eAAe,CAAC"}
package/dist/constants.js CHANGED
@@ -5,4 +5,20 @@ export const GENERATED_HEADER = "@generated by @metaobjectsdev/codegen-ts";
5
5
  export const EXTRA_SUFFIX = ".extra";
6
6
  /** Default outDir used by tests + as a sane default for generate(). */
7
7
  export const DEFAULT_OUT_DIR = "./src/db/entities";
8
+ // ---------------------------------------------------------------------------
9
+ // Codegen-control attributes.
10
+ //
11
+ // These are per-entity opt-in/opt-out flags read by generators (NOT metamodel
12
+ // vocabulary — they tune codegen, not the model). Named here so the literals
13
+ // aren't scattered as magic strings across the generator packages (compile-time
14
+ // typo safety), matching the metadata package's constants discipline.
15
+ // ---------------------------------------------------------------------------
16
+ /** `@emitTanstack: false` — skip the TanStack hooks + grid generators for an entity. */
17
+ export const CODEGEN_ATTR_EMIT_TANSTACK = "emitTanstack";
18
+ /** `@emitGrid: true` — opt a TPH subtype IN to its own per-subtype grid (default: the polymorphic base grid is the single source). */
19
+ export const CODEGEN_ATTR_EMIT_GRID = "emitGrid";
20
+ /** `@emitForm: false` — skip the React form generator for an entity. */
21
+ export const CODEGEN_ATTR_EMIT_FORM = "emitForm";
22
+ /** `@emitRoutes: false` — skip the Fastify routes generator for an entity. */
23
+ export const CODEGEN_ATTR_EMIT_ROUTES = "emitRoutes";
8
24
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAElC,mFAAmF;AACnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,0CAA0C,CAAC;AAE3E,6EAA6E;AAC7E,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AAErC,uEAAuE;AACvE,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAElC,mFAAmF;AACnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,0CAA0C,CAAC;AAE3E,6EAA6E;AAC7E,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AAErC,uEAAuE;AACvE,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAEnD,8EAA8E;AAC9E,8BAA8B;AAC9B,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,gFAAgF;AAChF,sEAAsE;AACtE,8EAA8E;AAE9E,wFAAwF;AACxF,MAAM,CAAC,MAAM,0BAA0B,GAAG,cAAc,CAAC;AACzD,sIAAsI;AACtI,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;AACjD,wEAAwE;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;AACjD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,wBAAwB,GAAG,YAAY,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { type OutputLayout } from "./import-path.js";
2
+ /** The minimal shape needed to place a docs page / compute a link to it: a
3
+ * short name and its EFFECTIVE package. Build one from a metadata node via
4
+ * `docPageNode()`. */
5
+ export interface DocPageNode {
6
+ readonly name: string;
7
+ readonly package?: string | undefined;
8
+ }
9
+ /** A metadata node enough to derive page placement. `resolutionKey()` carries
10
+ * the EFFECTIVE package (own package OR the file-default captured at parse
11
+ * time) folded as `<pkg>::<name>` — `.package` alone is often undefined for
12
+ * objects (FR5d keeps object fqn() bare), so we read placement off the
13
+ * resolution key instead. */
14
+ interface PlaceableNode {
15
+ readonly name: string;
16
+ resolutionKey(): string;
17
+ }
18
+ /** Effective package of a placeable node: the prefix of `resolutionKey()`
19
+ * before the trailing `::<name>`, or undefined when the node is package-less. */
20
+ export declare function effectivePackage(node: PlaceableNode): string | undefined;
21
+ /** Build a placement node ({name, effective package}) from a metadata node. The
22
+ * single bridge from a loaded node to the path/href helpers — so file location
23
+ * and link href derive from the SAME effective package. */
24
+ export declare function docPageNode(node: PlaceableNode): DocPageNode;
25
+ /** Output path (relative to the docs out dir) for a node's `.md` page.
26
+ * Flat → `<name>.md` (today's value, byte-identical). Package → folded under
27
+ * the package path (`acme/sales/Order.md`); a package-less node stays at root. */
28
+ export declare function docPageOutputPath(layout: OutputLayout, node: DocPageNode): string;
29
+ /** Relative href FROM `fromNode`'s page TO `toNode`'s page. Derived from the
30
+ * same `docPageOutputPath()` placement, so a link always points at the file's
31
+ * real location in BOTH layouts. Flat → `./<to>.md`; package → a correct
32
+ * relative path (e.g. `../comms/OrderEmail.md`). */
33
+ export declare function docPageHref(layout: OutputLayout, fromNode: DocPageNode, toNode: DocPageNode): string;
34
+ /** Relative href between two doc pages whose output paths (relative to the shared
35
+ * docs outDir) may sit under different surface sub-roots — e.g. model `Order.md`
36
+ * and api `api/Order.md`. The shared relative-path rule, over raw paths;
37
+ * docPageHref delegates its package-layout branch here. */
38
+ export declare function surfaceCrossHref(fromOutputPath: string, toOutputPath: string): string;
39
+ /** Href FROM a page (at `fromOutputPath`, relative to the docs root) TO a page
40
+ * (`page`, relative to the surface's own root) in an api surface. Relative via
41
+ * `surfaceCrossHref` when the surface is in the same tree; absolute `baseUrl/page`
42
+ * when the surface declares a baseUrl (federated / separate repo). */
43
+ export declare function apiSurfaceHref(fromOutputPath: string, surface: {
44
+ subDir: string;
45
+ baseUrl?: string;
46
+ }, page: string): string;
47
+ /** A page about to be emitted, paired with the FQN of the node that produced it
48
+ * (for a precise collision diagnostic). */
49
+ export interface DocPagePlacement {
50
+ path: string;
51
+ fqn: string;
52
+ }
53
+ /** Hard backstop against silent overwrite (ALL layouts): if two placements
54
+ * resolve to the SAME output path, THROW naming both colliding node FQNs and
55
+ * the path. Guarantees a docs run never silently drops a page. */
56
+ export declare function assertNoDuplicateDocPaths(placements: DocPagePlacement[]): void;
57
+ export {};
58
+ //# sourceMappingURL=docs-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-paths.d.ts","sourceRoot":"","sources":["../src/docs-paths.ts"],"names":[],"mappings":"AAaA,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEpE;;uBAEuB;AACvB,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED;;;;8BAI8B;AAC9B,UAAU,aAAa;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,aAAa,IAAI,MAAM,CAAC;CACzB;AAED;kFACkF;AAClF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CASxE;AAED;;4DAE4D;AAC5D,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,WAAW,CAE5D;AAED;;mFAEmF;AACnF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAKjF;AAED;;;qDAGqD;AACrD,wBAAgB,WAAW,CACzB,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,WAAW,GAClB,MAAM,CAMR;AAED;;;4DAG4D;AAC5D,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAIrF;AAED;;;uEAGuE;AACvE,wBAAgB,cAAc,CAC5B,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAC7C,IAAI,EAAE,MAAM,GACX,MAAM,CAKR;AAED;4CAC4C;AAC5C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;mEAEmE;AACnE,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAa9E"}
@@ -0,0 +1,89 @@
1
+ // docs-paths.ts — the SINGLE source of truth for where a docs page is written
2
+ // AND how one page links to another. The file location and every inbound link
3
+ // href are derived from the SAME functions here, so they can never diverge.
4
+ //
5
+ // Why this matters: pages are placed by short name. In "flat" layout two nodes
6
+ // that share a short name across different packages (e.g. `acme::sales::Order`
7
+ // and `acme::billing::Order`) would both want `Order.md` and one would silently
8
+ // overwrite the other. `assertNoDuplicateDocPaths()` is the hard backstop that
9
+ // turns that data-loss into a clear error; "package" layout folds pages under
10
+ // package-path subdirs (`acme/sales/Order.md`) so multi-package models work.
11
+ import { PACKAGE_SEPARATOR } from "@metaobjectsdev/metadata";
12
+ import { relative as posixRelative } from "node:path/posix";
13
+ import { packageToPath } from "./import-path.js";
14
+ /** Effective package of a placeable node: the prefix of `resolutionKey()`
15
+ * before the trailing `::<name>`, or undefined when the node is package-less. */
16
+ export function effectivePackage(node) {
17
+ const key = node.resolutionKey();
18
+ const suffix = `${PACKAGE_SEPARATOR}${node.name}`;
19
+ if (key === node.name)
20
+ return undefined;
21
+ if (key.endsWith(suffix)) {
22
+ const pkg = key.slice(0, key.length - suffix.length);
23
+ return pkg === "" ? undefined : pkg;
24
+ }
25
+ return undefined;
26
+ }
27
+ /** Build a placement node ({name, effective package}) from a metadata node. The
28
+ * single bridge from a loaded node to the path/href helpers — so file location
29
+ * and link href derive from the SAME effective package. */
30
+ export function docPageNode(node) {
31
+ return { name: node.name, package: effectivePackage(node) };
32
+ }
33
+ /** Output path (relative to the docs out dir) for a node's `.md` page.
34
+ * Flat → `<name>.md` (today's value, byte-identical). Package → folded under
35
+ * the package path (`acme/sales/Order.md`); a package-less node stays at root. */
36
+ export function docPageOutputPath(layout, node) {
37
+ const filename = `${node.name}.md`;
38
+ if (layout === "flat")
39
+ return filename;
40
+ const dir = packageToPath(node.package);
41
+ return dir === "" ? filename : `${dir}/${filename}`;
42
+ }
43
+ /** Relative href FROM `fromNode`'s page TO `toNode`'s page. Derived from the
44
+ * same `docPageOutputPath()` placement, so a link always points at the file's
45
+ * real location in BOTH layouts. Flat → `./<to>.md`; package → a correct
46
+ * relative path (e.g. `../comms/OrderEmail.md`). */
47
+ export function docPageHref(layout, fromNode, toNode) {
48
+ const toPath = docPageOutputPath(layout, toNode);
49
+ if (layout === "flat")
50
+ return `./${toPath}`;
51
+ // Relative path from the FROM page's directory to the TO page — the same
52
+ // raw-path rule surfaceCrossHref uses, so the two can never diverge.
53
+ return surfaceCrossHref(docPageOutputPath(layout, fromNode), toPath);
54
+ }
55
+ /** Relative href between two doc pages whose output paths (relative to the shared
56
+ * docs outDir) may sit under different surface sub-roots — e.g. model `Order.md`
57
+ * and api `api/Order.md`. The shared relative-path rule, over raw paths;
58
+ * docPageHref delegates its package-layout branch here. */
59
+ export function surfaceCrossHref(fromOutputPath, toOutputPath) {
60
+ const fromDir = fromOutputPath.includes("/") ? fromOutputPath.slice(0, fromOutputPath.lastIndexOf("/")) : "";
61
+ const rel = posixRelative(fromDir, toOutputPath);
62
+ return rel.startsWith(".") ? rel : `./${rel}`;
63
+ }
64
+ /** Href FROM a page (at `fromOutputPath`, relative to the docs root) TO a page
65
+ * (`page`, relative to the surface's own root) in an api surface. Relative via
66
+ * `surfaceCrossHref` when the surface is in the same tree; absolute `baseUrl/page`
67
+ * when the surface declares a baseUrl (federated / separate repo). */
68
+ export function apiSurfaceHref(fromOutputPath, surface, page) {
69
+ if (surface.baseUrl !== undefined && surface.baseUrl !== "") {
70
+ return `${surface.baseUrl.replace(/\/$/, "")}/${page}`;
71
+ }
72
+ return surfaceCrossHref(fromOutputPath, `${surface.subDir}/${page}`);
73
+ }
74
+ /** Hard backstop against silent overwrite (ALL layouts): if two placements
75
+ * resolve to the SAME output path, THROW naming both colliding node FQNs and
76
+ * the path. Guarantees a docs run never silently drops a page. */
77
+ export function assertNoDuplicateDocPaths(placements) {
78
+ const seen = new Map();
79
+ for (const { path, fqn } of placements) {
80
+ const prior = seen.get(path);
81
+ if (prior !== undefined) {
82
+ throw new Error(`docs: duplicate output path "${path}" from nodes ${prior} and ${fqn} — ` +
83
+ `use package layout (outputLayout: "package" / meta docs --layout package) ` +
84
+ `to disambiguate.`);
85
+ }
86
+ seen.set(path, fqn);
87
+ }
88
+ }
89
+ //# sourceMappingURL=docs-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-paths.js","sourceRoot":"","sources":["../src/docs-paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { RenderContext } from "./render-context.js";
2
+ /**
3
+ * Specifier to import a MATERIALIZED shared enum into an entity file in
4
+ * `entityPkg`. The shared module sits at the entity-module target root; in
5
+ * package layout the entity may be nested, so the `./enums` base is adjusted by
6
+ * package depth.
7
+ */
8
+ export declare function sharedEnumImportSpecifier(ctx: RenderContext, entityPkg: string | undefined): string;
9
+ /**
10
+ * Specifier to import an externally-PROVIDED enum. Resolved from codegen config
11
+ * (`providedEnumModule`); throws a clear codegen-time error when unset.
12
+ */
13
+ export declare function providedEnumImportSpecifier(ctx: RenderContext, enumName: string): string;
14
+ //# sourceMappingURL=enum-import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum-import.d.ts","sourceRoot":"","sources":["../src/enum-import.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,MAAM,CAGR;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUxF"}
@@ -0,0 +1,35 @@
1
+ // FR-019 — import-specifier resolution for shared + provided enums.
2
+ //
3
+ // A consuming entity file references a shared enum `E` by importing it:
4
+ // • materialized (non-@provided) → from the generated shared enums module
5
+ // (`./enums`, at the entity-module target root, package-layout-aware).
6
+ // • @provided → from the per-port-configured module
7
+ // (`ctx.providedEnumModule`). Missing config ⇒ a codegen-time error naming
8
+ // the enum + the config key (ADR-0026: namespace is config, not metadata).
9
+ import { withExt } from "./render-context.js";
10
+ import { relativeModuleSpecifier } from "./import-path.js";
11
+ import { SHARED_ENUMS_BASENAME } from "./templates/enums-file.js";
12
+ /**
13
+ * Specifier to import a MATERIALIZED shared enum into an entity file in
14
+ * `entityPkg`. The shared module sits at the entity-module target root; in
15
+ * package layout the entity may be nested, so the `./enums` base is adjusted by
16
+ * package depth.
17
+ */
18
+ export function sharedEnumImportSpecifier(ctx, entityPkg) {
19
+ const base = withExt(`./${SHARED_ENUMS_BASENAME}`, ctx.extStyle);
20
+ return relativeModuleSpecifier(ctx.selfTarget.outputLayout, entityPkg, base);
21
+ }
22
+ /**
23
+ * Specifier to import an externally-PROVIDED enum. Resolved from codegen config
24
+ * (`providedEnumModule`); throws a clear codegen-time error when unset.
25
+ */
26
+ export function providedEnumImportSpecifier(ctx, enumName) {
27
+ const mod = ctx.providedEnumModule;
28
+ if (mod === undefined || mod === "") {
29
+ throw new Error(`provided enum "${enumName}" is marked @provided but no module is configured ` +
30
+ `to import it from. Set "providedEnumModule" in your codegen config (e.g. ` +
31
+ `providedEnumModule: "@your-app/enums") so the generated code can reference "${enumName}".`);
32
+ }
33
+ return mod;
34
+ }
35
+ //# sourceMappingURL=enum-import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum-import.js","sourceRoot":"","sources":["../src/enum-import.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,EAAE;AACF,wEAAwE;AACxE,4EAA4E;AAC5E,2EAA2E;AAC3E,yEAAyE;AACzE,+EAA+E;AAC/E,+EAA+E;AAE/E,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CACvC,GAAkB,EAClB,SAA6B;IAE7B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,qBAAqB,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjE,OAAO,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAC/E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAkB,EAAE,QAAgB;IAC9E,MAAM,GAAG,GAAG,GAAG,CAAC,kBAAkB,CAAC;IACnC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,kBAAkB,QAAQ,oDAAoD;YAC9E,2EAA2E;YAC3E,+EAA+E,QAAQ,IAAI,CAC5F,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { MetaField, MetaRoot } from "@metaobjectsdev/metadata";
2
+ /** A shared (root-level abstract) enum declaration the codegen must reason about. */
3
+ export interface SharedEnum {
4
+ /** The materialized type name — the abstract declaration's PascalCase name (cross-port identity). */
5
+ readonly name: string;
6
+ /** Member symbols (the @values SSOT). */
7
+ readonly values: string[];
8
+ /** True when the declaration carries `@provided: true` (reference, don't materialize). */
9
+ readonly provided: boolean;
10
+ }
11
+ /**
12
+ * The root-level abstract `field.enum` a concrete enum field resolves to via
13
+ * `extends`, or undefined when the field is an inline enum (no root-abstract
14
+ * super). A super qualifies only when it is (a) an abstract field, AND (b) a
15
+ * direct child of the metadata root (a package-level declaration) — NOT an
16
+ * abstract field nested inside another object.
17
+ */
18
+ export declare function resolveSharedEnumDecl(field: MetaField): MetaField | undefined;
19
+ /** The shared-enum descriptor a field resolves to, or undefined for inline enums. */
20
+ export declare function sharedEnumForField(field: MetaField): SharedEnum | undefined;
21
+ /**
22
+ * All shared (root-level abstract) enum declarations in the loaded root that are
23
+ * actually CONSUMED by at least one concrete entity field — keyed by the
24
+ * materialized type name. A declaration nobody extends is not materialized (no
25
+ * dangling type). Deterministic order: first-consumption order across entities.
26
+ */
27
+ export declare function collectSharedEnums(root: MetaRoot): Map<string, SharedEnum>;
28
+ /** The shared enums that metaobjects MATERIALIZES (non-@provided, consumed). */
29
+ export declare function materializedSharedEnums(root: MetaRoot): SharedEnum[];
30
+ /** Whether any shared enum (materialized or provided) is consumed in the model. */
31
+ export declare function hasSharedEnums(root: MetaRoot): boolean;
32
+ //# sourceMappingURL=enum-shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum-shared.d.ts","sourceRoot":"","sources":["../src/enum-shared.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AASpE,qFAAqF;AACrF,MAAM,WAAW,UAAU;IACzB,qGAAqG;IACrG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAC1B,0FAA0F;IAC1F,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAU7E;AAED,qFAAqF;AACrF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAU3E;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAU1E;AAED,gFAAgF;AAChF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,EAAE,CAEpE;AAED,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAEtD"}