@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
@@ -0,0 +1,92 @@
1
+ // api-field-shape.ts — the field SHAPES (name + TS type + optionality) the
2
+ // api-docs renderers attach to a unit's model / create-payload / update-payload /
3
+ // extractor-payload symbols. ACCURATE BY CONSTRUCTION: every shape REUSES the
4
+ // real generators' own field walks so the documented fields can never drift from
5
+ // the emitted code (the api-docs accuracy gate enforces the field-set match):
6
+ //
7
+ // • model fields → entity-file's inferred type. The TS type comes from
8
+ // `fieldTsTypeString` (the SINGLE source of truth the value-object interface
9
+ // emitter uses) and the optional/nullable rule from `isFieldRequired` (the
10
+ // SAME rule the docs Storage/Constraints nullable column uses).
11
+ // • create-payload → `insertSchemaFields` (the EXACT field set + optionality
12
+ // the zod InsertSchema emitter walks: auto-gen PK omitted, @readOnly omitted,
13
+ // TPH discriminator pinned, @autoSet optional, else `fieldWillBeOptional`).
14
+ // • update-payload → `updateSchemaFields` (the UpdateSchema walk: TPH
15
+ // discriminator + @autoSet-onCreate omitted, everything else optional).
16
+ // • extractor-payload → the referenced @payloadRef value-object's field
17
+ // interface — the type `extract<Name>` returns — via the SAME
18
+ // `fieldTsTypeString` mapping the VO interface emitter uses.
19
+ import { fieldTsTypeString } from "../templates/inferred-types.js";
20
+ import { insertSchemaFields, updateSchemaFields, } from "../templates/zod-validators.js";
21
+ import { isFieldRequired } from "./docs-data-builder.js";
22
+ /**
23
+ * The entity MODEL field shape — every field, with the value-object interface's
24
+ * TS type and the docs nullable rule (optional iff not required and not the PK).
25
+ * Mirrors `InferSelectModel` field-presence; the PK is reported required.
26
+ */
27
+ export function modelFieldShapes(obj) {
28
+ const pkNames = new Set(obj.primaryIdentity()?.fields ?? []);
29
+ return obj.fields().map((field) => {
30
+ const isPk = pkNames.has(field.name);
31
+ const required = isPk || isFieldRequired(field);
32
+ return {
33
+ name: field.name,
34
+ type: fieldTsTypeString(obj.name, field),
35
+ optional: !required,
36
+ };
37
+ });
38
+ }
39
+ /** Resolve a schema-field walk (insert/update) into a documented shape by
40
+ * pairing each schema field with its TS type (same `fieldTsTypeString` map). A
41
+ * TPH-pinned discriminator field documents the literal as its type. */
42
+ function shapesFromSchemaFields(obj, walk) {
43
+ const fieldByName = new Map(obj.fields().map((f) => [f.name, f]));
44
+ return walk.map((sf) => {
45
+ const field = fieldByName.get(sf.name);
46
+ let type = field !== undefined ? fieldTsTypeString(obj.name, field) : "unknown";
47
+ let note;
48
+ if (sf.pinnedLiteral !== undefined) {
49
+ type = JSON.stringify(sf.pinnedLiteral);
50
+ note = `pinned ${type}`;
51
+ }
52
+ else if (sf.autoSet === true) {
53
+ note = "server-set";
54
+ }
55
+ const shape = { name: sf.name, type, optional: sf.optional };
56
+ if (note !== undefined)
57
+ shape.note = note;
58
+ return shape;
59
+ });
60
+ }
61
+ /** The create-payload (InsertSchema) field shape — what `create<Name>` / POST
62
+ * accepts. */
63
+ export function createFieldShapes(obj) {
64
+ return shapesFromSchemaFields(obj, insertSchemaFields(obj));
65
+ }
66
+ /** The update-payload (UpdateSchema) field shape — what `update<Name>` / PATCH
67
+ * accepts (typically all-optional partial). */
68
+ export function updateFieldShapes(obj) {
69
+ return shapesFromSchemaFields(obj, updateSchemaFields(obj));
70
+ }
71
+ /**
72
+ * The extractor PAYLOAD field shape — the field interface of the value object
73
+ * `extract<Name>` returns (the `@payloadRef` target). Same `fieldTsTypeString`
74
+ * mapping + `isFieldRequired` optionality the VO interface emitter uses, so it
75
+ * matches the emitted payload type. Returns undefined when the ref does not
76
+ * resolve to a loaded object.
77
+ */
78
+ export function payloadFieldShapes(root, payloadRef) {
79
+ const vo = root.findObject(payloadRef);
80
+ if (vo === undefined)
81
+ return undefined;
82
+ return modelFieldShapes(vo);
83
+ }
84
+ /** Format a list of field shapes as a compact inline TS object type, e.g.
85
+ * `{ name: string; status?: "active" | "archived" }`. Empty list → `{}`. */
86
+ export function inlineShape(fields) {
87
+ if (fields.length === 0)
88
+ return "{}";
89
+ const parts = fields.map((f) => `${f.name}${f.optional ? "?" : ""}: ${f.type}`);
90
+ return `{ ${parts.join("; ")} }`;
91
+ }
92
+ //# sourceMappingURL=api-field-shape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-field-shape.js","sourceRoot":"","sources":["../../src/generators/api-field-shape.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Human label for an api-surface language key. Unknown → capitalized verbatim. */
2
+ export declare function apiLabel(lang: string): string;
3
+ //# sourceMappingURL=api-label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-label.d.ts","sourceRoot":"","sources":["../../src/generators/api-label.ts"],"names":[],"mappings":"AAGA,mFAAmF;AACnF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C"}
@@ -0,0 +1,8 @@
1
+ const LABELS = {
2
+ ts: "TypeScript", java: "Java", kotlin: "Kotlin", csharp: "C#", python: "Python",
3
+ };
4
+ /** Human label for an api-surface language key. Unknown → capitalized verbatim. */
5
+ export function apiLabel(lang) {
6
+ return LABELS[lang] ?? (lang.length ? lang[0].toUpperCase() + lang.slice(1) : lang);
7
+ }
8
+ //# sourceMappingURL=api-label.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-label.js","sourceRoot":"","sources":["../../src/generators/api-label.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAA2B;IACrC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ;CACjF,CAAC;AACF,mFAAmF;AACnF,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACvF,CAAC"}
@@ -0,0 +1,122 @@
1
+ import { type MetaRoot } from "@metaobjectsdev/metadata";
2
+ import { type RelationMap } from "../relation-resolver.js";
3
+ import { type OutputLayout } from "../import-path.js";
4
+ import type { PkInfo } from "../pk-resolver.js";
5
+ import { type FieldShape } from "./api-field-shape.js";
6
+ export type ApiSymbolKind = "model" | "data-access" | "rest" | "validation" | "extractor" | "render" | "relation" | "callable" | "rest-hono" | "prompt";
7
+ export interface ApiSymbol {
8
+ /** The exact symbol the real generator emits (function/type/schema name, or
9
+ * a "METHOD /path" for a REST endpoint). Never invented. */
10
+ name: string;
11
+ kind: ApiSymbolKind;
12
+ /**
13
+ * The module specifier an adopter imports this symbol from — the generated
14
+ * file's path WITHOUT the `.ts` extension, exactly as the EMITTING generator
15
+ * writes it (so it can't drift): e.g. `Product.queries`, `Product`,
16
+ * `ProductSummary.extractor`, `ProductSummary.render`. Package layout folds
17
+ * entity-derived modules under the package path (`acme/shop/Product.queries`)
18
+ * iff the emitting generator does (it keys off the entity's OWN package).
19
+ *
20
+ * REST symbols are NOT importable functions — their importPath is the entity's
21
+ * routes MODULE; `registrar` carries the camelCase `<entity>Routes` handler an
22
+ * adopter mounts (`await <registrar>(fastify)`) to wire the endpoints.
23
+ */
24
+ importPath: string;
25
+ /** REST-only: the route-registrar function exported from `importPath` that an
26
+ * adopter mounts to wire the endpoints (`<entity>Routes`). Undefined for
27
+ * importable-symbol kinds (their `name` IS the import). */
28
+ registrar?: string;
29
+ /** A human-readable one-line signature (composed; the param/return SHAPE
30
+ * mirrors the generated code). For REST symbols this is "METHOD /path". */
31
+ signature: string;
32
+ /** Parameter descriptions, when meaningful. */
33
+ params?: string[];
34
+ /** Return-type description (e.g. "Product | null", "string", "EmailDocument"). */
35
+ returns?: string;
36
+ /** When/why the symbol throws, if it does. */
37
+ throws?: string;
38
+ /** One-line "what you use this for" prose. */
39
+ usage: string;
40
+ /** Optional usage example snippet. */
41
+ example?: string;
42
+ /**
43
+ * The field SHAPE this symbol's payload carries — name + TS type + optionality
44
+ * per field — so both renderers (human field table + agent inline shape) can
45
+ * show WHAT fields to pass, not just the type NAME. Accurate by construction:
46
+ * derived by REUSING the real generators' field walks (api-field-shape.ts), so
47
+ * the api-docs accuracy gate can assert the documented field set == the emitted
48
+ * one. Attached to:
49
+ * • model → the entity's inferred fields (model line / GET response);
50
+ * • create payload → the InsertSchema field set (create<Name> / POST body);
51
+ * • update payload → the UpdateSchema field set (update<Name> / PATCH body);
52
+ * • extractor payload → the @payloadRef VO interface (extract<Name>'s return).
53
+ * Undefined for symbols with no documented payload shape (e.g. deleteById, list).
54
+ */
55
+ fields?: FieldShape[];
56
+ }
57
+ export interface ApiUnitDoc {
58
+ /** The metadata node name (entity or template). */
59
+ node: string;
60
+ /** The node's EFFECTIVE package (own package OR the file-default captured at
61
+ * parse time), used to place the unit's doc page + compute collision-safe
62
+ * links to it in package layout. Undefined for a package-less node. */
63
+ package?: string | undefined;
64
+ nodeKind: "entity" | "template";
65
+ symbols: ApiSymbol[];
66
+ /**
67
+ * ONE worked, runnable example per unit — a concrete call site an agent (or a
68
+ * human) can copy. ACCURATE BY CONSTRUCTION: it is composed from the SAME
69
+ * symbol NAMES + importPaths this builder already documents (never invented)
70
+ * and the SAME field SHAPES (T2) attached to the unit's payload symbols, with
71
+ * example VALUES derived from each field's TS type (string→"…", number→1,
72
+ * enum→a real member, …) — not entity-hardcoded. The body lines (without
73
+ * imports) are what the agent form shows; the human page wraps the full block
74
+ * (imports + body) in a fenced ```ts.
75
+ *
76
+ * For an ENTITY: a create→find→update→delete flow over the entity's own
77
+ * CRUD helpers. For a TEMPLATE: an extract (parse LLM text) and/or render
78
+ * (produce the document) call. Undefined when a unit has no runnable surface
79
+ * (e.g. a bare value-object model with no queries/template).
80
+ */
81
+ example?: UnitExample;
82
+ }
83
+ /** A worked example for a unit: the imports it needs (one `import { … } from "…"`
84
+ * per module, in first-appearance order) + the body statements. Split so the
85
+ * human page can render a full fenced block and the agent form can show a tight
86
+ * body. */
87
+ export interface UnitExample {
88
+ /** `import { a, b } from "Mod"` lines, deduped by module, reusing the symbols'
89
+ * own importPaths (never re-derived). */
90
+ imports: string[];
91
+ /** The worked-flow statements (no imports), e.g.
92
+ * `const created = await createProduct(db, { name: "…" });`. */
93
+ body: string[];
94
+ }
95
+ export interface ApiModel {
96
+ units: ApiUnitDoc[];
97
+ }
98
+ /** Minimal context the builder needs. Accepts a full RenderContext OR just the
99
+ * loaded root (pkMap is derived when absent). Keeping it structural means the
100
+ * builder runs both inside a gen run and from a thin docs entrypoint. */
101
+ export interface ApiModelContext {
102
+ loadedRoot: MetaRoot;
103
+ pkMap?: Map<string, PkInfo>;
104
+ /** The relation map (relation-resolver) the entity file's relations() block is
105
+ * derived from. Derived from `loadedRoot` when absent — keeps the builder
106
+ * callable from a thin docs entrypoint. */
107
+ relationMap?: RelationMap;
108
+ /** The output layout the codegen run uses. The per-symbol `importPath` mirrors
109
+ * the emitting generator's own path computation under this layout (flat →
110
+ * `Product.queries`; package → folded under the entity's package path iff the
111
+ * generator folds). Defaults to "flat" (today's byte-identical placement). */
112
+ outputLayout?: OutputLayout;
113
+ /** Whether to ALSO document the OPT-IN Hono CRUD variant (routesFileHono).
114
+ * Hono is not in the default generator suite — it is an alternative wired by
115
+ * the adopter — so its symbols are documented ONLY when the adopter opts in
116
+ * (mirrors "match the generator's filters": don't over-document a surface the
117
+ * run didn't configure). The Fastify REST surface is always documented (it is
118
+ * the default-suite routes generator). Defaults to false. */
119
+ includeHonoRoutes?: boolean;
120
+ }
121
+ export declare function buildApiModel(root: MetaRoot, ctx: ApiModelContext): ApiModel;
122
+ //# sourceMappingURL=api-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-model.d.ts","sourceRoot":"","sources":["../../src/generators/api-model.ts"],"names":[],"mappings":"AAkFA,OAAO,EACL,KAAK,QAAQ,EAed,MAAM,0BAA0B,CAAC;AAkBlC,OAAO,EAAwC,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEjG,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAExE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,sBAAsB,CAAC;AAM9B,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,aAAa,GACb,MAAM,GACN,YAAY,GACZ,WAAW,GACX,QAAQ,GAER,UAAU,GACV,UAAU,GACV,WAAW,GACX,QAAQ,CAAC;AAEb,MAAM,WAAW,SAAS;IACxB;iEAC6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;IACpB;;;;;;;;;;;OAWG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;gEAE4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;gFAC4E;IAC5E,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb;;4EAEwE;IACxE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAAC;IAChC,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED;;;YAGY;AACZ,MAAM,WAAW,WAAW;IAC1B;8CAC0C;IAC1C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;qEACiE;IACjE,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED;;0EAE0E;AAC1E,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,QAAQ,CAAC;IACrB,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B;;gDAE4C;IAC5C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;mFAG+E;IAC/E,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;;;kEAK8D;IAC9D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAMD,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,GAAG,QAAQ,CAwB5E"}