@metaobjectsdev/metadata 0.9.0 → 0.10.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 (426) hide show
  1. package/dist/attr-schema-validate.d.ts +1 -1
  2. package/dist/attr-schema-validate.d.ts.map +1 -1
  3. package/dist/attr-schema-validate.js +84 -7
  4. package/dist/attr-schema-validate.js.map +1 -1
  5. package/dist/constants.d.ts +208 -0
  6. package/dist/constants.d.ts.map +1 -0
  7. package/dist/constants.js +419 -0
  8. package/dist/constants.js.map +1 -0
  9. package/dist/constraint-merge.d.ts +18 -0
  10. package/dist/constraint-merge.d.ts.map +1 -0
  11. package/dist/constraint-merge.js +0 -0
  12. package/dist/constraint-merge.js.map +1 -0
  13. package/dist/constraint-validate.d.ts +6 -0
  14. package/dist/constraint-validate.d.ts.map +1 -0
  15. package/dist/constraint-validate.js +274 -0
  16. package/dist/constraint-validate.js.map +1 -0
  17. package/dist/core/attr/attr-constants.d.ts +13 -3
  18. package/dist/core/attr/attr-constants.d.ts.map +1 -1
  19. package/dist/core/attr/attr-constants.js +11 -2
  20. package/dist/core/attr/attr-constants.js.map +1 -1
  21. package/dist/core/attr/attr-definition.embedded.d.ts +3 -0
  22. package/dist/core/attr/attr-definition.embedded.d.ts.map +1 -0
  23. package/dist/core/attr/attr-definition.embedded.js +60 -0
  24. package/dist/core/attr/attr-definition.embedded.js.map +1 -0
  25. package/dist/core/documentation/doc-constants.d.ts +3 -2
  26. package/dist/core/documentation/doc-constants.d.ts.map +1 -1
  27. package/dist/core/documentation/doc-constants.js +3 -1
  28. package/dist/core/documentation/doc-constants.js.map +1 -1
  29. package/dist/core/documentation/doc-provider.d.ts.map +1 -1
  30. package/dist/core/documentation/doc-provider.js +6 -2
  31. package/dist/core/documentation/doc-provider.js.map +1 -1
  32. package/dist/core/documentation/doc-schema.d.ts +1 -1
  33. package/dist/core/documentation/doc-schema.d.ts.map +1 -1
  34. package/dist/core/documentation/doc-schema.js +13 -5
  35. package/dist/core/documentation/doc-schema.js.map +1 -1
  36. package/dist/core/documentation/documentation-definition.embedded.d.ts +3 -0
  37. package/dist/core/documentation/documentation-definition.embedded.d.ts.map +1 -0
  38. package/dist/core/documentation/documentation-definition.embedded.js +79 -0
  39. package/dist/core/documentation/documentation-definition.embedded.js.map +1 -0
  40. package/dist/core/field/field-constants.d.ts +7 -4
  41. package/dist/core/field/field-constants.d.ts.map +1 -1
  42. package/dist/core/field/field-constants.js +7 -7
  43. package/dist/core/field/field-constants.js.map +1 -1
  44. package/dist/core/field/field-definition.embedded.d.ts +3 -0
  45. package/dist/core/field/field-definition.embedded.d.ts.map +1 -0
  46. package/dist/core/field/field-definition.embedded.js +236 -0
  47. package/dist/core/field/field-definition.embedded.js.map +1 -0
  48. package/dist/core/field/field-schema.d.ts +0 -16
  49. package/dist/core/field/field-schema.d.ts.map +1 -1
  50. package/dist/core/field/field-schema.js +10 -158
  51. package/dist/core/field/field-schema.js.map +1 -1
  52. package/dist/core/field/meta-field.d.ts.map +1 -1
  53. package/dist/core/field/meta-field.js +7 -5
  54. package/dist/core/field/meta-field.js.map +1 -1
  55. package/dist/core/file-meta-data-loader.d.ts +18 -0
  56. package/dist/core/file-meta-data-loader.d.ts.map +1 -0
  57. package/dist/core/file-meta-data-loader.js +81 -0
  58. package/dist/core/file-meta-data-loader.js.map +1 -0
  59. package/dist/core/file-source.d.ts +12 -0
  60. package/dist/core/file-source.d.ts.map +1 -0
  61. package/dist/core/file-source.js +46 -0
  62. package/dist/core/file-source.js.map +1 -0
  63. package/dist/core/identity/identity-definition.embedded.d.ts +3 -0
  64. package/dist/core/identity/identity-definition.embedded.d.ts.map +1 -0
  65. package/dist/core/identity/identity-definition.embedded.js +91 -0
  66. package/dist/core/identity/identity-definition.embedded.js.map +1 -0
  67. package/dist/core/identity/identity-schema.d.ts.map +1 -1
  68. package/dist/core/identity/identity-schema.js +3 -2
  69. package/dist/core/identity/identity-schema.js.map +1 -1
  70. package/dist/core/identity/validate-identity-passthrough.d.ts +42 -0
  71. package/dist/core/identity/validate-identity-passthrough.d.ts.map +1 -0
  72. package/dist/core/identity/validate-identity-passthrough.js +158 -0
  73. package/dist/core/identity/validate-identity-passthrough.js.map +1 -0
  74. package/dist/core/object/object-constants.d.ts +2 -1
  75. package/dist/core/object/object-constants.d.ts.map +1 -1
  76. package/dist/core/object/object-constants.js +3 -0
  77. package/dist/core/object/object-constants.js.map +1 -1
  78. package/dist/core/object/object-definition.embedded.d.ts +3 -0
  79. package/dist/core/object/object-definition.embedded.d.ts.map +1 -0
  80. package/dist/core/object/object-definition.embedded.js +110 -0
  81. package/dist/core/object/object-definition.embedded.js.map +1 -0
  82. package/dist/core/object/validate-discriminator.d.ts.map +1 -1
  83. package/dist/core/object/validate-discriminator.js +1 -3
  84. package/dist/core/object/validate-discriminator.js.map +1 -1
  85. package/dist/core/query/query-constants.d.ts.map +1 -1
  86. package/dist/core/query/query-constants.js +5 -3
  87. package/dist/core/query/query-constants.js.map +1 -1
  88. package/dist/core/relationship/derive-m2m-fields.d.ts +26 -0
  89. package/dist/core/relationship/derive-m2m-fields.d.ts.map +1 -0
  90. package/dist/core/relationship/derive-m2m-fields.js +102 -0
  91. package/dist/core/relationship/derive-m2m-fields.js.map +1 -0
  92. package/dist/core/relationship/meta-relationship.d.ts +6 -4
  93. package/dist/core/relationship/meta-relationship.d.ts.map +1 -1
  94. package/dist/core/relationship/meta-relationship.js +12 -8
  95. package/dist/core/relationship/meta-relationship.js.map +1 -1
  96. package/dist/core/relationship/relationship-constants.d.ts +6 -2
  97. package/dist/core/relationship/relationship-constants.d.ts.map +1 -1
  98. package/dist/core/relationship/relationship-constants.js +6 -2
  99. package/dist/core/relationship/relationship-constants.js.map +1 -1
  100. package/dist/core/relationship/relationship-definition.embedded.d.ts +3 -0
  101. package/dist/core/relationship/relationship-definition.embedded.d.ts.map +1 -0
  102. package/dist/core/relationship/relationship-definition.embedded.js +310 -0
  103. package/dist/core/relationship/relationship-definition.embedded.js.map +1 -0
  104. package/dist/core/relationship/relationship-schema.d.ts.map +1 -1
  105. package/dist/core/relationship/relationship-schema.js +13 -7
  106. package/dist/core/relationship/relationship-schema.js.map +1 -1
  107. package/dist/core/validator/validator-definition.embedded.d.ts +3 -0
  108. package/dist/core/validator/validator-definition.embedded.d.ts.map +1 -0
  109. package/dist/core/validator/validator-definition.embedded.js +134 -0
  110. package/dist/core/validator/validator-definition.embedded.js.map +1 -0
  111. package/dist/core/yaml-desugar.d.ts.map +1 -1
  112. package/dist/core/yaml-desugar.js +88 -10
  113. package/dist/core/yaml-desugar.js.map +1 -1
  114. package/dist/core-attr-schemas.d.ts +22 -0
  115. package/dist/core-attr-schemas.d.ts.map +1 -0
  116. package/dist/core-attr-schemas.js +324 -0
  117. package/dist/core-attr-schemas.js.map +1 -0
  118. package/dist/core-types.d.ts +5 -2
  119. package/dist/core-types.d.ts.map +1 -1
  120. package/dist/core-types.js +261 -115
  121. package/dist/core-types.js.map +1 -1
  122. package/dist/db/db-attr-schemas.d.ts +8 -0
  123. package/dist/db/db-attr-schemas.d.ts.map +1 -0
  124. package/dist/db/db-attr-schemas.js +26 -0
  125. package/dist/db/db-attr-schemas.js.map +1 -0
  126. package/dist/db/db-provider.d.ts +3 -0
  127. package/dist/db/db-provider.d.ts.map +1 -0
  128. package/dist/db/db-provider.js +28 -0
  129. package/dist/db/db-provider.js.map +1 -0
  130. package/dist/errors.d.ts +1 -1
  131. package/dist/errors.d.ts.map +1 -1
  132. package/dist/errors.js +78 -0
  133. package/dist/errors.js.map +1 -1
  134. package/dist/index.d.ts +17 -2
  135. package/dist/index.d.ts.map +1 -1
  136. package/dist/index.js +26 -1
  137. package/dist/index.js.map +1 -1
  138. package/dist/library/embedded-library.generated.d.ts +2 -0
  139. package/dist/library/embedded-library.generated.d.ts.map +1 -0
  140. package/dist/library/embedded-library.generated.js +11 -0
  141. package/dist/library/embedded-library.generated.js.map +1 -0
  142. package/dist/library/library-sources.d.ts +12 -0
  143. package/dist/library/library-sources.d.ts.map +1 -0
  144. package/dist/library/library-sources.js +88 -0
  145. package/dist/library/library-sources.js.map +1 -0
  146. package/dist/loader/meta-data-loader.d.ts +10 -2
  147. package/dist/loader/meta-data-loader.d.ts.map +1 -1
  148. package/dist/loader/meta-data-loader.js +47 -6
  149. package/dist/loader/meta-data-loader.js.map +1 -1
  150. package/dist/loader/shortcuts.d.ts +2 -5
  151. package/dist/loader/shortcuts.d.ts.map +1 -1
  152. package/dist/loader/shortcuts.js.map +1 -1
  153. package/dist/loader/validation-passes.d.ts +3 -0
  154. package/dist/loader/validation-passes.d.ts.map +1 -1
  155. package/dist/loader/validation-passes.js +513 -33
  156. package/dist/loader/validation-passes.js.map +1 -1
  157. package/dist/meta/find-reference.d.ts +22 -0
  158. package/dist/meta/find-reference.d.ts.map +1 -0
  159. package/dist/meta/find-reference.js +29 -0
  160. package/dist/meta/find-reference.js.map +1 -0
  161. package/dist/meta/meta-attr.d.ts +8 -0
  162. package/dist/meta/meta-attr.d.ts.map +1 -0
  163. package/dist/meta/meta-attr.js +17 -0
  164. package/dist/meta/meta-attr.js.map +1 -0
  165. package/dist/meta/meta-data.d.ts +107 -0
  166. package/dist/meta/meta-data.d.ts.map +1 -0
  167. package/dist/meta/meta-data.js +302 -0
  168. package/dist/meta/meta-data.js.map +1 -0
  169. package/dist/meta/meta-field.d.ts +48 -0
  170. package/dist/meta/meta-field.d.ts.map +1 -0
  171. package/dist/meta/meta-field.js +94 -0
  172. package/dist/meta/meta-field.js.map +1 -0
  173. package/dist/meta/meta-identity.d.ts +71 -0
  174. package/dist/meta/meta-identity.d.ts.map +1 -0
  175. package/dist/meta/meta-identity.js +129 -0
  176. package/dist/meta/meta-identity.js.map +1 -0
  177. package/dist/meta/meta-layout.d.ts +23 -0
  178. package/dist/meta/meta-layout.d.ts.map +1 -0
  179. package/dist/meta/meta-layout.js +45 -0
  180. package/dist/meta/meta-layout.js.map +1 -0
  181. package/dist/meta/meta-object.d.ts +40 -0
  182. package/dist/meta/meta-object.d.ts.map +1 -0
  183. package/dist/meta/meta-object.js +81 -0
  184. package/dist/meta/meta-object.js.map +1 -0
  185. package/dist/meta/meta-origin.d.ts +32 -0
  186. package/dist/meta/meta-origin.d.ts.map +1 -0
  187. package/dist/meta/meta-origin.js +55 -0
  188. package/dist/meta/meta-origin.js.map +1 -0
  189. package/dist/meta/meta-relationship.d.ts +11 -0
  190. package/dist/meta/meta-relationship.d.ts.map +1 -0
  191. package/dist/meta/meta-relationship.js +27 -0
  192. package/dist/meta/meta-relationship.js.map +1 -0
  193. package/dist/meta/meta-root.d.ts +12 -0
  194. package/dist/meta/meta-root.d.ts.map +1 -0
  195. package/dist/meta/meta-root.js +24 -0
  196. package/dist/meta/meta-root.js.map +1 -0
  197. package/dist/meta/meta-source.d.ts +18 -0
  198. package/dist/meta/meta-source.d.ts.map +1 -0
  199. package/dist/meta/meta-source.js +31 -0
  200. package/dist/meta/meta-source.js.map +1 -0
  201. package/dist/meta/meta-validator.d.ts +29 -0
  202. package/dist/meta/meta-validator.d.ts.map +1 -0
  203. package/dist/meta/meta-validator.js +49 -0
  204. package/dist/meta/meta-validator.js.map +1 -0
  205. package/dist/meta/meta-view.d.ts +4 -0
  206. package/dist/meta/meta-view.d.ts.map +1 -0
  207. package/dist/meta/meta-view.js +8 -0
  208. package/dist/meta/meta-view.js.map +1 -0
  209. package/dist/metamodel-docs/index.d.ts +19 -0
  210. package/dist/metamodel-docs/index.d.ts.map +1 -0
  211. package/dist/metamodel-docs/index.js +37 -0
  212. package/dist/metamodel-docs/index.js.map +1 -0
  213. package/dist/metamodel-docs/provenance.d.ts +42 -0
  214. package/dist/metamodel-docs/provenance.d.ts.map +1 -0
  215. package/dist/metamodel-docs/provenance.js +148 -0
  216. package/dist/metamodel-docs/provenance.js.map +1 -0
  217. package/dist/metamodel-docs/provider-definitions.d.ts +8 -0
  218. package/dist/metamodel-docs/provider-definitions.d.ts.map +1 -0
  219. package/dist/metamodel-docs/provider-definitions.js +48 -0
  220. package/dist/metamodel-docs/provider-definitions.js.map +1 -0
  221. package/dist/metamodel-docs/render.d.ts +12 -0
  222. package/dist/metamodel-docs/render.d.ts.map +1 -0
  223. package/dist/metamodel-docs/render.js +252 -0
  224. package/dist/metamodel-docs/render.js.map +1 -0
  225. package/dist/naming-refs.d.ts +41 -0
  226. package/dist/naming-refs.d.ts.map +1 -0
  227. package/dist/naming-refs.js +144 -0
  228. package/dist/naming-refs.js.map +1 -0
  229. package/dist/naming.d.ts.map +1 -1
  230. package/dist/naming.js +10 -2
  231. package/dist/naming.js.map +1 -1
  232. package/dist/parser-core.d.ts.map +1 -1
  233. package/dist/parser-core.js +74 -8
  234. package/dist/parser-core.js.map +1 -1
  235. package/dist/persistence/db/db-attr-schemas.d.ts +8 -0
  236. package/dist/persistence/db/db-attr-schemas.d.ts.map +1 -0
  237. package/dist/persistence/db/db-attr-schemas.js +28 -0
  238. package/dist/persistence/db/db-attr-schemas.js.map +1 -0
  239. package/dist/persistence/db/db-definition.embedded.d.ts +3 -0
  240. package/dist/persistence/db/db-definition.embedded.d.ts.map +1 -0
  241. package/dist/persistence/db/db-definition.embedded.js +170 -0
  242. package/dist/persistence/db/db-definition.embedded.js.map +1 -0
  243. package/dist/persistence/db/db-provider.d.ts.map +1 -1
  244. package/dist/persistence/db/db-provider.js +13 -18
  245. package/dist/persistence/db/db-provider.js.map +1 -1
  246. package/dist/persistence/db/db-schema.d.ts +14 -0
  247. package/dist/persistence/db/db-schema.d.ts.map +1 -1
  248. package/dist/persistence/db/db-schema.js +27 -0
  249. package/dist/persistence/db/db-schema.js.map +1 -1
  250. package/dist/persistence/origin/origin-definition.embedded.d.ts +3 -0
  251. package/dist/persistence/origin/origin-definition.embedded.d.ts.map +1 -0
  252. package/dist/persistence/origin/origin-definition.embedded.js +88 -0
  253. package/dist/persistence/origin/origin-definition.embedded.js.map +1 -0
  254. package/dist/persistence/origin/origin-schema.d.ts.map +1 -1
  255. package/dist/persistence/origin/origin-schema.js +7 -3
  256. package/dist/persistence/origin/origin-schema.js.map +1 -1
  257. package/dist/persistence/source/source-definition.embedded.d.ts +3 -0
  258. package/dist/persistence/source/source-definition.embedded.d.ts.map +1 -0
  259. package/dist/persistence/source/source-definition.embedded.js +17 -0
  260. package/dist/persistence/source/source-definition.embedded.js.map +1 -0
  261. package/dist/persistence/source/validate-source-parameter-ref.d.ts.map +1 -1
  262. package/dist/persistence/source/validate-source-parameter-ref.js +7 -1
  263. package/dist/persistence/source/validate-source-parameter-ref.js.map +1 -1
  264. package/dist/persistence/source/validate-source-roles.d.ts.map +1 -1
  265. package/dist/persistence/source/validate-source-roles.js +16 -1
  266. package/dist/persistence/source/validate-source-roles.js.map +1 -1
  267. package/dist/presentation/layout/layout-definition.embedded.d.ts +3 -0
  268. package/dist/presentation/layout/layout-definition.embedded.d.ts.map +1 -0
  269. package/dist/presentation/layout/layout-definition.embedded.js +16 -0
  270. package/dist/presentation/layout/layout-definition.embedded.js.map +1 -0
  271. package/dist/presentation/layout/layout-schema.d.ts.map +1 -1
  272. package/dist/presentation/layout/layout-schema.js +3 -2
  273. package/dist/presentation/layout/layout-schema.js.map +1 -1
  274. package/dist/presentation/ui/ui-definition.embedded.d.ts +3 -0
  275. package/dist/presentation/ui/ui-definition.embedded.d.ts.map +1 -0
  276. package/dist/presentation/ui/ui-definition.embedded.js +114 -0
  277. package/dist/presentation/ui/ui-definition.embedded.js.map +1 -0
  278. package/dist/presentation/ui/ui-provider.d.ts +3 -0
  279. package/dist/presentation/ui/ui-provider.d.ts.map +1 -0
  280. package/dist/presentation/ui/ui-provider.js +21 -0
  281. package/dist/presentation/ui/ui-provider.js.map +1 -0
  282. package/dist/presentation/ui/ui-schema.d.ts +10 -0
  283. package/dist/presentation/ui/ui-schema.d.ts.map +1 -0
  284. package/dist/presentation/ui/ui-schema.js +41 -0
  285. package/dist/presentation/ui/ui-schema.js.map +1 -0
  286. package/dist/presentation/view/view-definition.embedded.d.ts +3 -0
  287. package/dist/presentation/view/view-definition.embedded.d.ts.map +1 -0
  288. package/dist/presentation/view/view-definition.embedded.js +76 -0
  289. package/dist/presentation/view/view-definition.embedded.js.map +1 -0
  290. package/dist/provider-data.d.ts +169 -0
  291. package/dist/provider-data.d.ts.map +1 -0
  292. package/dist/provider-data.js +269 -0
  293. package/dist/provider-data.js.map +1 -0
  294. package/dist/provider.d.ts +3 -1
  295. package/dist/provider.d.ts.map +1 -1
  296. package/dist/provider.js +15 -1
  297. package/dist/provider.js.map +1 -1
  298. package/dist/registry-coverage.d.ts +99 -0
  299. package/dist/registry-coverage.d.ts.map +1 -0
  300. package/dist/registry-coverage.js +294 -0
  301. package/dist/registry-coverage.js.map +1 -0
  302. package/dist/registry-manifest-exclusions.d.ts +62 -0
  303. package/dist/registry-manifest-exclusions.d.ts.map +1 -0
  304. package/dist/registry-manifest-exclusions.js +163 -0
  305. package/dist/registry-manifest-exclusions.js.map +1 -0
  306. package/dist/registry-manifest.d.ts +117 -0
  307. package/dist/registry-manifest.d.ts.map +1 -0
  308. package/dist/registry-manifest.js +242 -0
  309. package/dist/registry-manifest.js.map +1 -0
  310. package/dist/registry.d.ts +60 -2
  311. package/dist/registry.d.ts.map +1 -1
  312. package/dist/registry.js +37 -1
  313. package/dist/registry.js.map +1 -1
  314. package/dist/shared/structural.d.ts +7 -0
  315. package/dist/shared/structural.d.ts.map +1 -1
  316. package/dist/shared/structural.js +7 -0
  317. package/dist/shared/structural.js.map +1 -1
  318. package/dist/subtype-rules.d.ts.map +1 -1
  319. package/dist/subtype-rules.js +97 -13
  320. package/dist/subtype-rules.js.map +1 -1
  321. package/dist/super-resolve.d.ts +49 -2
  322. package/dist/super-resolve.d.ts.map +1 -1
  323. package/dist/super-resolve.js +128 -43
  324. package/dist/super-resolve.js.map +1 -1
  325. package/dist/template/meta-template.d.ts +3 -2
  326. package/dist/template/meta-template.d.ts.map +1 -1
  327. package/dist/template/meta-template.js +3 -2
  328. package/dist/template/meta-template.js.map +1 -1
  329. package/dist/template/prompt-definition.embedded.d.ts +3 -0
  330. package/dist/template/prompt-definition.embedded.d.ts.map +1 -0
  331. package/dist/template/prompt-definition.embedded.js +368 -0
  332. package/dist/template/prompt-definition.embedded.js.map +1 -0
  333. package/dist/template/prompt-provider.d.ts +3 -0
  334. package/dist/template/prompt-provider.d.ts.map +1 -0
  335. package/dist/template/prompt-provider.js +25 -0
  336. package/dist/template/prompt-provider.js.map +1 -0
  337. package/dist/template/prompt-schema.d.ts +20 -0
  338. package/dist/template/prompt-schema.d.ts.map +1 -0
  339. package/dist/template/prompt-schema.js +70 -0
  340. package/dist/template/prompt-schema.js.map +1 -0
  341. package/dist/template/template-constants.d.ts +2 -0
  342. package/dist/template/template-constants.d.ts.map +1 -1
  343. package/dist/template/template-constants.js +7 -0
  344. package/dist/template/template-constants.js.map +1 -1
  345. package/dist/template/template-definition.embedded.d.ts +3 -0
  346. package/dist/template/template-definition.embedded.d.ts.map +1 -0
  347. package/dist/template/template-definition.embedded.js +30 -0
  348. package/dist/template/template-definition.embedded.js.map +1 -0
  349. package/dist/template/template-schema.d.ts.map +1 -1
  350. package/dist/template/template-schema.js +12 -4
  351. package/dist/template/template-schema.js.map +1 -1
  352. package/package.json +33 -22
  353. package/src/attr-schema-validate.ts +96 -4
  354. package/src/constraint-merge.ts +0 -0
  355. package/src/constraint-validate.ts +363 -0
  356. package/src/core/attr/attr-constants.ts +15 -3
  357. package/src/core/attr/attr-definition.embedded.ts +67 -0
  358. package/src/core/documentation/doc-constants.ts +3 -1
  359. package/src/core/documentation/doc-provider.ts +6 -2
  360. package/src/core/documentation/documentation-definition.embedded.ts +86 -0
  361. package/src/core/field/field-constants.ts +8 -7
  362. package/src/core/field/field-definition.embedded.ts +243 -0
  363. package/src/core/field/meta-field.ts +6 -7
  364. package/src/core/identity/identity-definition.embedded.ts +98 -0
  365. package/src/core/identity/validate-identity-passthrough.ts +194 -0
  366. package/src/core/object/object-constants.ts +3 -0
  367. package/src/core/object/object-definition.embedded.ts +117 -0
  368. package/src/core/object/validate-discriminator.ts +0 -4
  369. package/src/core/query/query-constants.ts +5 -3
  370. package/src/core/relationship/derive-m2m-fields.ts +145 -0
  371. package/src/core/relationship/meta-relationship.ts +15 -9
  372. package/src/core/relationship/relationship-constants.ts +6 -2
  373. package/src/core/relationship/relationship-definition.embedded.ts +317 -0
  374. package/src/core/validator/validator-definition.embedded.ts +141 -0
  375. package/src/core/yaml-desugar.ts +96 -7
  376. package/src/core-types.ts +289 -150
  377. package/src/errors.ts +78 -0
  378. package/src/index.ts +47 -2
  379. package/src/library/embedded-library.generated.ts +10 -0
  380. package/src/library/library-sources.ts +97 -0
  381. package/src/loader/meta-data-loader.ts +66 -7
  382. package/src/loader/shortcuts.ts +2 -2
  383. package/src/loader/validation-passes.ts +679 -33
  384. package/src/metamodel-docs/index.ts +41 -0
  385. package/src/metamodel-docs/provenance.ts +187 -0
  386. package/src/metamodel-docs/provider-definitions.ts +50 -0
  387. package/src/metamodel-docs/render.ts +309 -0
  388. package/src/naming-refs.ts +162 -0
  389. package/src/naming.ts +10 -2
  390. package/src/parser-core.ts +86 -8
  391. package/src/persistence/db/db-definition.embedded.ts +177 -0
  392. package/src/persistence/db/db-provider.ts +13 -18
  393. package/src/persistence/origin/origin-definition.embedded.ts +95 -0
  394. package/src/persistence/source/source-definition.embedded.ts +24 -0
  395. package/src/persistence/source/validate-source-parameter-ref.ts +7 -1
  396. package/src/persistence/source/validate-source-roles.ts +22 -1
  397. package/src/presentation/layout/layout-definition.embedded.ts +23 -0
  398. package/src/presentation/ui/ui-definition.embedded.ts +121 -0
  399. package/src/presentation/ui/ui-provider.ts +25 -0
  400. package/src/presentation/view/view-definition.embedded.ts +83 -0
  401. package/src/provider-data.ts +446 -0
  402. package/src/provider.ts +18 -0
  403. package/src/registry-coverage.ts +430 -0
  404. package/src/registry-manifest-exclusions.ts +176 -0
  405. package/src/registry-manifest.ts +334 -0
  406. package/src/registry.ts +90 -3
  407. package/src/shared/structural.ts +8 -0
  408. package/src/subtype-rules.ts +135 -18
  409. package/src/super-resolve.ts +153 -43
  410. package/src/template/meta-template.ts +3 -2
  411. package/src/template/prompt-definition.embedded.ts +375 -0
  412. package/src/template/prompt-provider.ts +29 -0
  413. package/src/template/template-constants.ts +8 -0
  414. package/src/template/template-definition.embedded.ts +37 -0
  415. package/src/core/documentation/doc-schema.ts +0 -64
  416. package/src/core/field/field-schema.ts +0 -228
  417. package/src/core/identity/identity-schema.ts +0 -80
  418. package/src/core/object/object-schema.ts +0 -35
  419. package/src/core/relationship/relationship-schema.ts +0 -67
  420. package/src/core/validator/validator-schema.ts +0 -50
  421. package/src/persistence/db/db-schema.ts +0 -50
  422. package/src/persistence/origin/origin-schema.ts +0 -80
  423. package/src/persistence/source/source-schema.ts +0 -129
  424. package/src/presentation/layout/layout-schema.ts +0 -62
  425. package/src/presentation/view/view-schema.ts +0 -21
  426. package/src/template/template-schema.ts +0 -211
@@ -0,0 +1,162 @@
1
+ // FR-032 (ADR-0032) — canonical reference expansion.
2
+ //
3
+ // `expandRef(raw, packageContext)` is the SINGLE ref-expansion primitive. It
4
+ // lowers an authored metadata reference to its fully-qualified canonical form
5
+ // per ADR-0032 §2.1 — deterministically, with NO root fallback:
6
+ //
7
+ // bare `Name` (no `::`, no leading `.`) → `<P>::Name` (current package only;
8
+ // stays bare when P is empty/root).
9
+ // qualified `pkg::Name` (contains `::`, → unchanged (absolute from root).
10
+ // NOT leading `::`)
11
+ // `::Rest` (leading `::`) → strip the leading `::`; the
12
+ // remainder is absolute from root
13
+ // (so `::a::b::C` ≡ `a::b::C`,
14
+ // `::Apple` = root-level Apple).
15
+ // `..::Rest` (one or more leading `..::`) → drop one package segment from P
16
+ // per `..::`, then resolve Rest
17
+ // (itself bare/qualified) against the
18
+ // reduced package. Over-drop (more
19
+ // `..::` than P has segments) throws.
20
+ //
21
+ // The trailing FR-024 DOTTED CHILD suffix (`.child` / `.child.grandchild`) is
22
+ // PRESERVED verbatim: only the OWNER part (everything before the first `.` in
23
+ // the final `::`-segment) is expanded; the `.child...` tail is reattached.
24
+ //
25
+ // The desugar runs this on every ref-bearing attr so canonical JSON is FQN-only
26
+ // (ADR-0032 §2.2/§2.3); the resolution layer then does pure FQN matching. The
27
+ // `package` attribute is NEVER expanded — it is the node's identity.
28
+
29
+ import type { MetaData } from "./shared/meta-data.js";
30
+ import { PACKAGE_SEPARATOR, PACKAGE_PARENT, CHILD_REF_SEPARATOR } from "./shared/structural.js";
31
+ import { RELATIONSHIP_ATTR_OBJECT_REF } from "./core/relationship/relationship-constants.js";
32
+ import { FIELD_ATTR_OBJECT_REF } from "./core/field/field-constants.js";
33
+ import { IDENTITY_REFERENCE_ATTR_REFERENCES } from "./core/identity/identity-constants.js";
34
+ import {
35
+ ORIGIN_PASSTHROUGH_ATTR_FROM,
36
+ ORIGIN_PASSTHROUGH_ATTR_VIA,
37
+ ORIGIN_AGGREGATE_ATTR_OF,
38
+ ORIGIN_AGGREGATE_ATTR_VIA,
39
+ ORIGIN_COLLECTION_ATTR_VIA,
40
+ } from "./persistence/origin/origin-constants.js";
41
+ import { SOURCE_ATTR_PARAMETER_REF } from "./persistence/source/source-constants.js";
42
+ import { TEMPLATE_ATTR_PAYLOAD_REF, TEMPLATE_ATTR_RESPONSE_REF } from "./template/template-constants.js";
43
+
44
+ const PARENT_PREFIX = PACKAGE_PARENT + PACKAGE_SEPARATOR; // "..::"
45
+
46
+ /**
47
+ * The inline (`@`-prefixed) attribute names whose VALUE is a metadata reference
48
+ * subject to FR-032 expansion/guarding (ADR-0032 §3). The structural `extends`
49
+ * key is handled separately (it is not `@`-prefixed). `@objectRef`/`@references`
50
+ * are pure object refs; `@from`/`@of`/`@via` carry an entity HEAD (possibly with
51
+ * a dotted relationship/field tail — expandRef preserves the tail);
52
+ * `@parameterRef`/`@payloadRef`/`@responseRef` reference value-objects. These are
53
+ * expanded by the YAML desugar and rejected (when still relative) by the
54
+ * canonical-JSON guard. `@sourceRefField` (a FK FIELD name, not an object ref)
55
+ * and `@through` are intentionally NOT in this set (out of scope for FR-032 T-slice).
56
+ */
57
+ export const REF_BEARING_ATTR_NAMES: ReadonlySet<string> = new Set<string>([
58
+ RELATIONSHIP_ATTR_OBJECT_REF, // = FIELD_ATTR_OBJECT_REF (same spelling "objectRef")
59
+ FIELD_ATTR_OBJECT_REF,
60
+ IDENTITY_REFERENCE_ATTR_REFERENCES,
61
+ ORIGIN_PASSTHROUGH_ATTR_FROM,
62
+ ORIGIN_PASSTHROUGH_ATTR_VIA, // = ORIGIN_AGGREGATE_ATTR_VIA = ORIGIN_COLLECTION_ATTR_VIA ("via")
63
+ ORIGIN_AGGREGATE_ATTR_OF,
64
+ ORIGIN_AGGREGATE_ATTR_VIA,
65
+ ORIGIN_COLLECTION_ATTR_VIA,
66
+ SOURCE_ATTR_PARAMETER_REF,
67
+ TEMPLATE_ATTR_PAYLOAD_REF,
68
+ TEMPLATE_ATTR_RESPONSE_REF,
69
+ ]);
70
+
71
+ /**
72
+ * True when `raw` is a relative reference form (`::Rest` or `..::Rest`) that the
73
+ * YAML desugar must expand before canonical JSON. Canonical JSON must be FQN; a
74
+ * relative ref surviving into it is `ERR_RELATIVE_REF_IN_CANONICAL`.
75
+ */
76
+ export function isRelativeRef(raw: string): boolean {
77
+ return raw.startsWith(PACKAGE_SEPARATOR) || raw.startsWith(PARENT_PREFIX);
78
+ }
79
+
80
+ /**
81
+ * Split a ref into its owner part (the object reference) and any FR-024 dotted
82
+ * child tail. The `.` that marks a child can only appear in the FINAL
83
+ * `::`-segment (package separators never follow a child dot), so the owner ends
84
+ * at the first `.` AFTER the last `::`. Returns `{ owner, tail }` where `tail`
85
+ * includes the leading `.` (or is "" when there is no child suffix).
86
+ */
87
+ function splitChildTail(raw: string): { owner: string; tail: string } {
88
+ const lastSep = raw.lastIndexOf(PACKAGE_SEPARATOR);
89
+ const segStart = lastSep === -1 ? 0 : lastSep + PACKAGE_SEPARATOR.length;
90
+ const dotInSeg = raw.indexOf(CHILD_REF_SEPARATOR, segStart);
91
+ if (dotInSeg === -1) return { owner: raw, tail: "" };
92
+ return { owner: raw.slice(0, dotInSeg), tail: raw.slice(dotInSeg) };
93
+ }
94
+
95
+ /**
96
+ * Expand an authored reference's OWNER part (no child tail) to its FQN per
97
+ * ADR-0032 §2.1. Throws on parent-relative over-drop.
98
+ */
99
+ function expandOwner(owner: string, packageContext: string): string {
100
+ // root-absolute: leading "::" → strip; the remainder is absolute from root.
101
+ if (owner.startsWith(PACKAGE_SEPARATOR)) {
102
+ return owner.slice(PACKAGE_SEPARATOR.length);
103
+ }
104
+
105
+ // parent-relative: one or more leading "..::".
106
+ if (owner.startsWith(PARENT_PREFIX)) {
107
+ let rest = owner;
108
+ let levels = 0;
109
+ while (rest.startsWith(PARENT_PREFIX)) {
110
+ levels++;
111
+ rest = rest.slice(PARENT_PREFIX.length);
112
+ }
113
+ const pkgParts = packageContext !== "" ? packageContext.split(PACKAGE_SEPARATOR) : [];
114
+ if (levels > pkgParts.length) {
115
+ throw new Error(
116
+ `Relative reference '${owner}' over-drops: ${levels} parent level(s) ` +
117
+ `but the package context '${packageContext}' has only ${pkgParts.length} segment(s)`,
118
+ );
119
+ }
120
+ const reducedPkg = pkgParts.slice(0, pkgParts.length - levels).join(PACKAGE_SEPARATOR);
121
+ // `rest` is itself bare/qualified — resolve it against the reduced package.
122
+ // (A qualified remainder still resolves bare-in-the-reduced-package per the
123
+ // §2.1 example `..::veg::Carrot` → `acme::veg::Carrot`.)
124
+ return reducedPkg !== "" ? `${reducedPkg}${PACKAGE_SEPARATOR}${rest}` : rest;
125
+ }
126
+
127
+ // qualified: contains "::" (not leading) → absolute, unchanged.
128
+ if (owner.includes(PACKAGE_SEPARATOR)) {
129
+ return owner;
130
+ }
131
+
132
+ // bare name → current package (only). Stays bare when context is empty/root.
133
+ return packageContext !== "" ? `${packageContext}${PACKAGE_SEPARATOR}${owner}` : owner;
134
+ }
135
+
136
+ /**
137
+ * Expand an authored reference to its fully-qualified canonical form per
138
+ * ADR-0032 §2.1, preserving any FR-024 dotted child suffix. The package context
139
+ * `P` is the declaring node's effective package (its own `package` or the
140
+ * file-default). Throws on parent-relative over-drop — the caller emits an error.
141
+ */
142
+ export function expandRef(raw: string, packageContext: string): string {
143
+ const { owner, tail } = splitChildTail(raw);
144
+ return expandOwner(owner, packageContext) + tail;
145
+ }
146
+
147
+ /**
148
+ * FR-032 — does a root-level object `node` satisfy an (already-expanded)
149
+ * object reference `ref`? After the YAML desugar + corpus sweep every ref is
150
+ * fully qualified, so resolution is a pure FQN match. Objects keep a BARE
151
+ * `fqn()` per the FR5d cross-port contract, so the canonical FQN accessor is
152
+ * `resolutionKey()` (`<package | fileDefaultPackage>::<name>`) — this mirrors
153
+ * `super-resolve`'s `findInTree`. The bare `name`/`fqn()` arms cover legacy
154
+ * same-tree refs and root-level (empty-package) objects.
155
+ *
156
+ * This is the single matcher the non-super resolvers (origin `@from`/`@of`/
157
+ * `@via` heads, template `@payloadRef`/`@responseRef`, source `@parameterRef`)
158
+ * share, so FQN matching behaves identically everywhere a ref resolves.
159
+ */
160
+ export function refMatchesObject(node: MetaData, ref: string): boolean {
161
+ return node.resolutionKey() === ref || node.fqn() === ref || node.name === ref;
162
+ }
package/src/naming.ts CHANGED
@@ -65,7 +65,13 @@ export function resolveTableName(entity: MetaData): string {
65
65
  // so this helper now just delegates. Writability (table vs view/storedProc/
66
66
  // tableFunction) only affects write-routing — for SELECT-side name resolution,
67
67
  // a read-only primary source is the right answer.
68
- const source = entity.ownChildren().find(
68
+ //
69
+ // Effective children (own + inherited via the super chain) so a TPH SUBTYPE
70
+ // — which declares no source of its own and inherits the discriminator base's
71
+ // single table (FR-017) — resolves to that base table rather than the
72
+ // entity-name fallback. For an entity declaring its own source, own shadows
73
+ // inherited, so the result is unchanged.
74
+ const source = entity.children().find(
69
75
  (c): c is MetaSource => c instanceof MetaSource && c.role === SOURCE_ROLE_PRIMARY,
70
76
  );
71
77
  if (source !== undefined) return source.physicalName;
@@ -111,7 +117,9 @@ export function buildNameMap(
111
117
  ): EntityNameMap {
112
118
  const jsToDb = new Map<string, string>();
113
119
  const dbToJs = new Map<string, string>();
114
- for (const child of entity.ownChildren()) {
120
+ // Effective children so a TPH subtype's name map covers inherited base
121
+ // fields + its own (FR-017); own shadows inherited on a name conflict.
122
+ for (const child of entity.children()) {
115
123
  if (child.type !== TYPE_FIELD) continue;
116
124
  const dbCol = resolveColumnName(child, strategy);
117
125
  jsToDb.set(child.name, dbCol);
@@ -31,7 +31,7 @@ import { canonicalSerialize, inferAttrSubType } from "./serializer-json.js";
31
31
  import { ParseError, type ErrorCode } from "./errors.js";
32
32
  import { resolvedSource, type ErrorSource, type LoaderWarning, type Contributor } from "./source.js";
33
33
  import { semanticDiff } from "./semantic-diff.js";
34
- import { resolveSuperRef } from "./super-resolve.js";
34
+ import { resolveSuperRef, isChildTargetingRef } from "./super-resolve.js";
35
35
  import { JsonPathBuilder } from "./json-path.js";
36
36
  import { getYamlPosition, type YamlPosition } from "./core/yaml-positions.js";
37
37
  import {
@@ -56,8 +56,10 @@ import {
56
56
  TYPE_SUBTYPE_SEPARATOR,
57
57
  PACKAGE_SEPARATOR,
58
58
  } from "./shared/structural.js";
59
- import { ATTR_SUBTYPE_PROPERTIES } from "./core/attr/attr-constants.js";
59
+ import { ATTR_SUBTYPE_PROPERTIES, ATTR_SUBTYPE_STRINGARRAY } from "./core/attr/attr-constants.js";
60
+ import { attrClassFor } from "./attr-class-map.js";
60
61
  import type { AttrValue } from "./shared/meta-data.js";
62
+ import { isRelativeRef, REF_BEARING_ATTR_NAMES } from "./naming-refs.js";
61
63
 
62
64
  // ---------------------------------------------------------------------------
63
65
  // Public API
@@ -158,6 +160,44 @@ function reportProblem(
158
160
  warnings.push(msg);
159
161
  }
160
162
 
163
+ // ---------------------------------------------------------------------------
164
+ // FR-032 (ADR-0032) — canonical-JSON ref guard.
165
+ //
166
+ // Canonical JSON is the self-contained interchange form: every ref-bearing attr
167
+ // MUST be fully-qualified. A relative authoring form (leading `::` or `..::`)
168
+ // surviving into canonical JSON is `ERR_RELATIVE_REF_IN_CANONICAL`. The guard
169
+ // fires ONLY for JSON-format input — YAML-format input has already been
170
+ // desugar-expanded via expandRef (so any `::`/`..::` there is correct authoring
171
+ // that was lowered to FQN before buildTree sees it). Like ERR_RESERVED_ATTR,
172
+ // this is a hard error routed through the loader's error sink even in lax mode.
173
+ // ---------------------------------------------------------------------------
174
+
175
+ function guardRelativeRefInCanonical(
176
+ refLabel: string,
177
+ rawValue: unknown,
178
+ strict: boolean,
179
+ warnings: string[],
180
+ path: string,
181
+ ): void {
182
+ if (_currentFormat !== "json") return;
183
+ if (typeof rawValue !== "string") return;
184
+ if (!isRelativeRef(rawValue)) return;
185
+ const msg =
186
+ `Relative reference '${rawValue}' on ${refLabel} at ${path} is not allowed in ` +
187
+ `canonical JSON — canonical JSON must be fully-qualified. Relative forms ` +
188
+ `(leading '::' or '..::') are YAML-authoring sugar that the desugar expands.`;
189
+ if (strict) {
190
+ throw new ParseError(msg, { code: "ERR_RELATIVE_REF_IN_CANONICAL", source: errSource() });
191
+ }
192
+ if (_currentErrors !== undefined) {
193
+ _currentErrors.push(
194
+ new ParseError(msg, { code: "ERR_RELATIVE_REF_IN_CANONICAL", source: errSource() }),
195
+ );
196
+ } else {
197
+ warnings.push(msg);
198
+ }
199
+ }
200
+
161
201
  // ---------------------------------------------------------------------------
162
202
  // Internal helper — split a fused wrapper key into (type, subType).
163
203
  //
@@ -530,8 +570,25 @@ function parseNodeFresh(
530
570
  // (Skipped when deferSuperResolution is true — the loader resolves after
531
571
  // all input files have been parsed, so cross-file super refs work.)
532
572
  if (model.superRef !== undefined && accumRoot !== undefined && !_deferSuperResolution) {
533
- const superModel = resolveSuperRef(model.superRef, effectivePkg, accumRoot);
573
+ // FR-024: thread the referrer's type so dotted `Entity.child` refs resolve
574
+ // type-scoped — kept consistent with the deferred path (super-resolve.ts).
575
+ const superModel = resolveSuperRef(model.superRef, effectivePkg, accumRoot, { type: model.type });
534
576
  if (superModel !== undefined) {
577
+ // FR-024 — a dotted child-targeting ref must resolve to a node of the
578
+ // SAME type and subtype as the extending node. Dotted-only check; the
579
+ // shipped top-level extends behavior is unchanged.
580
+ if (
581
+ isChildTargetingRef(model.superRef) &&
582
+ (superModel.type !== model.type || superModel.subType !== model.subType)
583
+ ) {
584
+ throw new ParseError(
585
+ `the extends target '${model.superRef}' is ${superModel.type}.${superModel.subType} but the extending node '${model.fqn()}' is ${model.type}.${model.subType} — a dotted extends must target a node of the same type and subtype`,
586
+ {
587
+ code: "ERR_EXTENDS_TARGET_MISMATCH",
588
+ source: resolvedSource(errSource(), model.fqn(), model.superRef),
589
+ },
590
+ );
591
+ }
535
592
  model.setSuperResolved(superModel);
536
593
  } else {
537
594
  // FR5d — emit format=resolved with referrer + target. referrer is the
@@ -887,6 +944,9 @@ function applyReservedKeys(
887
944
  if (typeof rawExtends !== "string") {
888
945
  reportProblem(`"${RESERVED_KEY_EXTENDS}" must be a string at ${path}`, strict, warnings, "ERR_UNRESOLVED_SUPER");
889
946
  } else {
947
+ // FR-032: canonical JSON `extends` must be FQN; reject a surviving
948
+ // relative form (no-op for YAML-format input, which was desugar-expanded).
949
+ guardRelativeRefInCanonical(`"${RESERVED_KEY_EXTENDS}"`, rawExtends, strict, warnings, path);
890
950
  model.setSuper(rawExtends);
891
951
  }
892
952
  }
@@ -974,6 +1034,13 @@ function applyInlineAttrsAndUnknownKeys(
974
1034
 
975
1035
  const rawVal = nodeData[key];
976
1036
 
1037
+ // FR-032: a ref-bearing inline attr (@objectRef/@references/@from/@of/@via/
1038
+ // @parameterRef/@payloadRef/@responseRef) in canonical JSON must be FQN —
1039
+ // reject a surviving relative form. No-op for YAML-format input.
1040
+ if (REF_BEARING_ATTR_NAMES.has(attrName)) {
1041
+ guardRelativeRefInCanonical(`${ATTR_PREFIX}${attrName}`, rawVal, strict, warnings, path);
1042
+ }
1043
+
977
1044
  try {
978
1045
  const attr = materializeAttr(model, attrName, rawVal, registry);
979
1046
  model.setMetaAttr(attr);
@@ -1004,16 +1071,27 @@ function materializeAttr(
1004
1071
  const perTypeSpec = registry.attrsOf(owner.type, owner.subType).find((s) => s.name === attrName);
1005
1072
  const attrSpec = perTypeSpec ?? registry.getCommonAttrs().find((s) => s.name === attrName);
1006
1073
  let subType: string;
1007
- if (attrSpec !== undefined && attrSpec.valueType !== undefined) {
1074
+ if (attrSpec !== undefined && attrSpec.isArray === true) {
1075
+ // An array-flagged attr (`string` + `isArray`): array-ness is the orthogonal
1076
+ // axis the `stringarray` subtype was retired in favor of. Coerce through the
1077
+ // array string-attr class (bare-string → one-element array) keyed off the
1078
+ // retired-as-a-subtype-but-kept-as-a-coercion `stringarray` class-map entry.
1079
+ subType = ATTR_SUBTYPE_STRINGARRAY;
1080
+ } else if (attrSpec !== undefined && attrSpec.valueType !== undefined) {
1008
1081
  subType = attrSpec.valueType;
1009
1082
  } else {
1010
1083
  // Undeclared or declared-but-untyped (@default): preserve the author's shape.
1011
1084
  subType = inferUndeclaredAttrSubType(rawVal);
1012
1085
  }
1013
- const def = registry.find(TYPE_ATTR, subType);
1014
- const node = (def !== undefined
1015
- ? def.factory(def.typeId, attrName)
1016
- : new MetaAttr(new TypeId(TYPE_ATTR, subType), attrName)) as MetaAttr;
1086
+ // The array-coercion class is no longer a registered (attr, subType); resolve
1087
+ // it through the dependency-free attr-class-map (which still carries it).
1088
+ const def = subType === ATTR_SUBTYPE_STRINGARRAY ? undefined : registry.find(TYPE_ATTR, subType);
1089
+ const Ctor = subType === ATTR_SUBTYPE_STRINGARRAY ? attrClassFor(subType) : undefined;
1090
+ const node = (Ctor !== undefined
1091
+ ? new Ctor(new TypeId(TYPE_ATTR, subType), attrName)
1092
+ : def !== undefined
1093
+ ? def.factory(def.typeId, attrName)
1094
+ : new MetaAttr(new TypeId(TYPE_ATTR, subType), attrName)) as MetaAttr;
1017
1095
  const coerced = node.coerce(rawVal);
1018
1096
  const desugared = node.desugar(coerced);
1019
1097
  node.setAttr(RESERVED_KEY_VALUE, desugared);
@@ -0,0 +1,177 @@
1
+ // AUTO-GENERATED by scripts/generate-embedded-metamodel.ts — DO NOT EDIT.
2
+ // Canonical source: repo-root spec/metamodel/db.json
3
+ // Regenerate: bun run scripts/generate-embedded-metamodel.ts
4
+ //
5
+ // Embeds the canonical FR-033 ProviderDefinition so the provider can register
6
+ // itself wherever the on-disk spec/ tree is unavailable (bundled builds).
7
+ import type { ProviderDefinition } from "../../provider-data.js";
8
+
9
+ export const DB_DEFINITION: ProviderDefinition = {
10
+ "provider": "metaobjects-db",
11
+ "extends": [
12
+ {
13
+ "type": "field",
14
+ "subType": "*",
15
+ "children": [
16
+ {
17
+ "type": "attr",
18
+ "subType": "string",
19
+ "name": "column",
20
+ "min": 0,
21
+ "max": 1,
22
+ "description": "Physical column name for this field on an rdb source. Defaults to the field name via columnNamingStrategy."
23
+ },
24
+ {
25
+ "type": "attr",
26
+ "subType": "boolean",
27
+ "name": "db.indexed",
28
+ "min": 0,
29
+ "max": 1,
30
+ "description": "When true, suppress the @filterable-without-index Loader warning (the field is indexed by other means)."
31
+ },
32
+ {
33
+ "type": "attr",
34
+ "subType": "string",
35
+ "name": "dbColumnType",
36
+ "min": 0,
37
+ "max": 1,
38
+ "description": "Physical DB column-type override (ADR-0013 escape hatch). Legal values are uuid | jsonb | timestamp_with_tz, each legal only on a specific logical field subtype (uuid/jsonb on field.string, timestamp_with_tz on field.timestamp). The logical field type and its native binding are unchanged."
39
+ }
40
+ ]
41
+ },
42
+ {
43
+ "type": "field",
44
+ "subType": "object",
45
+ "children": [
46
+ {
47
+ "type": "attr",
48
+ "subType": "string",
49
+ "name": "storage",
50
+ "min": 0,
51
+ "max": 1,
52
+ "allowedValues": [
53
+ "flattened",
54
+ "jsonb",
55
+ "subdocument"
56
+ ],
57
+ "description": "Storage strategy for an object-typed field (set with @objectRef). \"flattened\" expands the nested value into prefixed columns on the parent table. \"jsonb\" stores the structured value in a single jsonb column (supports isArray=true for arrays of values). \"subdocument\" is a hint for document-store codegen targets and emits no Postgres column."
58
+ }
59
+ ]
60
+ },
61
+ {
62
+ "type": "field",
63
+ "subType": [
64
+ "date",
65
+ "time",
66
+ "timestamp"
67
+ ],
68
+ "children": [
69
+ {
70
+ "type": "attr",
71
+ "subType": "string",
72
+ "name": "autoSet",
73
+ "min": 0,
74
+ "max": 1,
75
+ "allowedValues": [
76
+ "onCreate",
77
+ "onUpdate"
78
+ ],
79
+ "description": "Auto-set semantics for timestamp-like fields: 'onCreate' stamps on insert, 'onUpdate' stamps on every write."
80
+ }
81
+ ]
82
+ },
83
+ {
84
+ "type": "source",
85
+ "subType": "rdb",
86
+ "children": [
87
+ {
88
+ "type": "attr",
89
+ "subType": "string",
90
+ "name": "table",
91
+ "min": 0,
92
+ "max": 1,
93
+ "description": "Physical SQL table name for source.rdb @kind: \"table\" (default). FR-016: Defaults from the source's bare structural `name` via the project's columnNamingStrategy when omitted, then from the owning entity's name. Pre-1.0 legacy spelling for view/materializedView/storedProc/tableFunction kinds during the transition; canonical-serializer rewrites to the kind-matching alias."
94
+ },
95
+ {
96
+ "type": "attr",
97
+ "subType": "string",
98
+ "name": "view",
99
+ "min": 0,
100
+ "max": 1,
101
+ "description": "Physical SQL view name for source.rdb @kind: \"view\". Same internal slot as @table."
102
+ },
103
+ {
104
+ "type": "attr",
105
+ "subType": "string",
106
+ "name": "materializedView",
107
+ "min": 0,
108
+ "max": 1,
109
+ "description": "Physical SQL materialized-view name for source.rdb @kind: \"materializedView\". Same internal slot as @table."
110
+ },
111
+ {
112
+ "type": "attr",
113
+ "subType": "string",
114
+ "name": "proc",
115
+ "min": 0,
116
+ "max": 1,
117
+ "description": "Physical SQL stored-procedure name for source.rdb @kind: \"storedProc\". Same internal slot as @table."
118
+ },
119
+ {
120
+ "type": "attr",
121
+ "subType": "string",
122
+ "name": "function",
123
+ "min": 0,
124
+ "max": 1,
125
+ "description": "Physical SQL table-function name for source.rdb @kind: \"tableFunction\". Same internal slot as @table."
126
+ },
127
+ {
128
+ "type": "attr",
129
+ "subType": "string",
130
+ "name": "kind",
131
+ "min": 0,
132
+ "max": 1,
133
+ "allowedValues": [
134
+ "table",
135
+ "view",
136
+ "materializedView",
137
+ "storedProc",
138
+ "tableFunction"
139
+ ],
140
+ "description": "The kind of database object this source represents: table (default, writable), view, materializedView, storedProc, or tableFunction. Non-table kinds are read-only."
141
+ },
142
+ {
143
+ "type": "attr",
144
+ "subType": "string",
145
+ "name": "role",
146
+ "min": 0,
147
+ "max": 1,
148
+ "allowedValues": [
149
+ "primary",
150
+ "replica",
151
+ "index",
152
+ "cache",
153
+ "publish",
154
+ "mirror"
155
+ ],
156
+ "description": "Role this source plays when an object has multiple sources: primary (default, system of record), replica, index, cache, publish, or mirror."
157
+ },
158
+ {
159
+ "type": "attr",
160
+ "subType": "string",
161
+ "name": "schema",
162
+ "min": 0,
163
+ "max": 1,
164
+ "description": "Optional database schema name (e.g. 'catalog', 'public'). Postgres defaults to 'public'; SQLite rejects any non-default value."
165
+ },
166
+ {
167
+ "type": "attr",
168
+ "subType": "string",
169
+ "name": "parameterRef",
170
+ "min": 0,
171
+ "max": 1,
172
+ "description": "FR-015: name or FQN of an object.value describing the input shape of this source's callable interface. Permitted on @kind: \"storedProc\" / \"tableFunction\"; rejected on non-callable kinds (table / view / materializedView). Field children of the referenced object.value become the call-site parameter list in declaration order. Symmetric with template.@payloadRef in FR-004 — the typed-input pattern reuses object.value rather than minting a new parameter.* node type."
173
+ }
174
+ ]
175
+ }
176
+ ]
177
+ };
@@ -1,30 +1,25 @@
1
1
  // dbProvider — the DB-domain MetaDataTypeProvider. Registers the DB-domain
2
- // attributes (@column / @db.indexed on fields; @table/@kind/@role/@schema on
3
- // source.rdb) by extending the core-registered types. Mirrors Java's
4
- // CoreDBMetaDataProvider (com.metaobjects.database).
2
+ // attributes (@column / @db.indexed / @dbColumnType + @storage on field.object,
3
+ // @autoSet on temporal fields; @table/@kind/@role/@schema/... on source.rdb) by
4
+ // EXTENDING the core-registered types. Mirrors Java's CoreDBMetaDataProvider
5
+ // (com.metaobjects.database).
6
+ //
7
+ // FR-033 S1.5-A: the attrs + their descriptions are now DATA — read from
8
+ // spec/metamodel/db.json (embedded as DB_DEFINITION) via the unified
9
+ // applyProviderDefinition apply path's `extends` handling. The provider declares
10
+ // no new types, so the factory map is empty.
5
11
 
6
12
  import type { MetaDataTypeProvider } from "../../provider.js";
7
13
  import type { TypeRegistry } from "../../registry.js";
8
- import { TYPE_FIELD, TYPE_SOURCE } from "../../shared/base-types.js";
9
- import { FIELD_SUBTYPES } from "../../core/field/field-constants.js";
10
- import { SOURCE_SUBTYPE_RDB } from "../source/source-constants.js";
11
- import { columnSchema, dbIndexedSchema, dbColumnTypeSchema } from "./db-schema.js";
12
- import { sourceRdbAttrs } from "../source/source-schema.js";
14
+ import { applyProviderDefinition } from "../../provider-data.js";
15
+ import { DB_DEFINITION } from "./db-definition.embedded.js";
13
16
 
14
17
  export const dbProvider: MetaDataTypeProvider = {
15
18
  id: "metaobjects-db",
16
19
  dependencies: ["metaobjects-core-types"],
17
20
  description:
18
- "DB-domain attributes — @column / @db.indexed / @dbColumnType on fields, @table/@kind/@role/@schema on source.rdb.",
21
+ "DB-domain attributes — @column / @db.indexed / @dbColumnType on every field, @storage on field.object, @autoSet on temporal fields, @table/@kind/@role/@schema on source.rdb.",
19
22
  registerTypes(registry: TypeRegistry): void {
20
- for (const subType of FIELD_SUBTYPES) {
21
- registry.extend(TYPE_FIELD, subType, {
22
- attributes: [columnSchema, dbIndexedSchema, dbColumnTypeSchema],
23
- });
24
- }
25
- // source.rdb — @table/@kind/@role/@schema attrs.
26
- registry.extend(TYPE_SOURCE, SOURCE_SUBTYPE_RDB, {
27
- attributes: [...sourceRdbAttrs],
28
- });
23
+ applyProviderDefinition(registry, DB_DEFINITION, {});
29
24
  },
30
25
  };
@@ -0,0 +1,95 @@
1
+ // AUTO-GENERATED by scripts/generate-embedded-metamodel.ts — DO NOT EDIT.
2
+ // Canonical source: repo-root spec/metamodel/origin.json
3
+ // Regenerate: bun run scripts/generate-embedded-metamodel.ts
4
+ //
5
+ // Embeds the canonical FR-033 ProviderDefinition so the provider can register
6
+ // itself wherever the on-disk spec/ tree is unavailable (bundled builds).
7
+ import type { ProviderDefinition } from "../../provider-data.js";
8
+
9
+ export const ORIGIN_DEFINITION: ProviderDefinition = {
10
+ "provider": "metaobjects-core-types",
11
+ "types": [
12
+ {
13
+ "type": "origin",
14
+ "subType": "base",
15
+ "description": "Abstract base origin — the shared root subtype for field-level provenance. A field carrying any origin.* is derived ⇒ read-only wherever it lives. The base carries no attrs of its own; concrete subtypes add their provenance attrs."
16
+ },
17
+ {
18
+ "type": "origin",
19
+ "subType": "passthrough",
20
+ "description": "A cross-entity field reference: this projection field passes a source entity's value straight through (@from), optionally reached via a relationship path (@via).",
21
+ "children": [
22
+ {
23
+ "type": "attr",
24
+ "subType": "string",
25
+ "name": "from",
26
+ "min": 1,
27
+ "max": 1,
28
+ "description": "Dotted Entity.field reference identifying the source value this projection field passes through (e.g. 'Program.title')."
29
+ },
30
+ {
31
+ "type": "attr",
32
+ "subType": "string",
33
+ "name": "via",
34
+ "min": 0,
35
+ "max": 1,
36
+ "description": "Optional dotted relationship path used to reach the source entity (e.g. 'Program.weeks')."
37
+ }
38
+ ]
39
+ },
40
+ {
41
+ "type": "origin",
42
+ "subType": "aggregate",
43
+ "description": "A count/sum/avg/min/max (@agg) computed over a column (@of) reached along a relationship path (@via) from the base entity.",
44
+ "rules": "@via may be omitted only when exactly one single-hop relationship leads from the base entity to the @of entity (single-hop-unique inference; FR-024, ADR-0029). Multi-hop paths must always be stated explicitly.",
45
+ "children": [
46
+ {
47
+ "type": "attr",
48
+ "subType": "string",
49
+ "name": "agg",
50
+ "min": 1,
51
+ "max": 1,
52
+ "allowedValues": [
53
+ "count",
54
+ "sum",
55
+ "avg",
56
+ "min",
57
+ "max"
58
+ ],
59
+ "description": "Aggregate function applied over the relationship path: count, sum, avg, min, or max."
60
+ },
61
+ {
62
+ "type": "attr",
63
+ "subType": "string",
64
+ "name": "of",
65
+ "min": 1,
66
+ "max": 1,
67
+ "description": "Dotted Entity.field reference identifying the column being aggregated (e.g. 'Week.durationMinutes')."
68
+ },
69
+ {
70
+ "type": "attr",
71
+ "subType": "string",
72
+ "name": "via",
73
+ "min": 0,
74
+ "max": 1,
75
+ "description": "Dotted relationship path from the base entity to the aggregated rows (e.g. 'Program.weeks' or 'Program.weeks.workouts'). May be omitted only when exactly one single-hop relationship leads from the base entity to the @of entity (FR-024, ADR-0029)."
76
+ }
77
+ ]
78
+ },
79
+ {
80
+ "type": "origin",
81
+ "subType": "collection",
82
+ "description": "A relationship-derived array of nested view-objects: walks @via to produce the collection (e.g. 'Author.posts'), or a wildcard selector for a package-spanning collection.",
83
+ "children": [
84
+ {
85
+ "type": "attr",
86
+ "subType": "string",
87
+ "name": "via",
88
+ "min": 1,
89
+ "max": 1,
90
+ "description": "Dotted relationship path the collection walks to produce an array of nested view-objects (e.g. 'Author.posts'), or a wildcard selector for a package-spanning collection (e.g. '*.User')."
91
+ }
92
+ ]
93
+ }
94
+ ]
95
+ };