@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
package/src/core-types.ts CHANGED
@@ -3,6 +3,8 @@ import { TypeId, type AttrSchema, type ChildRule, type TypeDefinition, TypeRegis
3
3
  import type { MetaDataTypeProvider } from "./provider.js";
4
4
  import { dbProvider } from "./persistence/db/db-provider.js";
5
5
  import { docProvider } from "./core/documentation/doc-provider.js";
6
+ import { promptProvider } from "./template/prompt-provider.js";
7
+ import { uiProvider } from "./presentation/ui/ui-provider.js";
6
8
  import { type DataType } from "./data-type.js";
7
9
  import type { MetaData } from "./shared/meta-data.js";
8
10
  import { MetaRoot } from "./shared/meta-root.js";
@@ -35,16 +37,19 @@ import { MetaRelationship } from "./core/relationship/meta-relationship.js";
35
37
  import { MetaLayout } from "./presentation/layout/meta-layout.js";
36
38
  import { MetaSource } from "./persistence/source/meta-source.js";
37
39
  import { MetaOrigin, MetaPassthroughOrigin, MetaAggregateOrigin, MetaCollectionOrigin } from "./persistence/origin/meta-origin.js";
38
- import { commonFieldAttrs, currencyFieldAttr, enumFieldAttr, enumAliasAttr, enumDocAttr, coerceDefaultAttr, normalizeAttr } from "./core/field/field-schema.js";
39
- import { objectAttrs } from "./core/object/object-schema.js";
40
- import { relationshipAttrs } from "./core/relationship/relationship-schema.js";
41
- import { identityFieldsAttr, IDENTITY_ATTRS_MAP } from "./core/identity/identity-schema.js";
42
- import { VALIDATOR_ATTRS_MAP } from "./core/validator/validator-schema.js";
43
- import { currencyViewAttrs } from "./presentation/view/view-schema.js";
44
- import { dataGridLayoutAttrs } from "./presentation/layout/layout-schema.js";
45
- import { ORIGIN_ATTRS_MAP } from "./persistence/origin/origin-schema.js";
40
+ import { defineProviderFromData, type FactoryMap } from "./provider-data.js";
41
+ import { FIELD_DEFINITION } from "./core/field/field-definition.embedded.js";
42
+ import { OBJECT_DEFINITION } from "./core/object/object-definition.embedded.js";
43
+ import { ATTR_DEFINITION } from "./core/attr/attr-definition.embedded.js";
44
+ import { VALIDATOR_DEFINITION } from "./core/validator/validator-definition.embedded.js";
45
+ import { IDENTITY_DEFINITION } from "./core/identity/identity-definition.embedded.js";
46
+ import { RELATIONSHIP_DEFINITION } from "./core/relationship/relationship-definition.embedded.js";
47
+ import { ORIGIN_DEFINITION } from "./persistence/origin/origin-definition.embedded.js";
48
+ import { SOURCE_DEFINITION } from "./persistence/source/source-definition.embedded.js";
49
+ import { VIEW_DEFINITION } from "./presentation/view/view-definition.embedded.js";
50
+ import { LAYOUT_DEFINITION } from "./presentation/layout/layout-definition.embedded.js";
46
51
  import { MetaTemplate } from "./template/meta-template.js";
47
- import { TEMPLATE_ATTRS_MAP } from "./template/template-schema.js";
52
+ import { TEMPLATE_DEFINITION } from "./template/template-definition.embedded.js";
48
53
  import { TEMPLATE_SUBTYPES } from "./template/template-constants.js";
49
54
  import {
50
55
  TYPE_METADATA,
@@ -62,8 +67,8 @@ import {
62
67
  SUBTYPE_ROOT,
63
68
  } from "./shared/base-types.js";
64
69
  import { CHILD_RULE_WILDCARD } from "./shared/structural.js";
65
- import { OBJECT_SUBTYPES, OBJECT_SUBTYPE_ENTITY, OBJECT_SUBTYPE_VALUE } from "./core/object/object-constants.js";
66
- import { FIELD_SUBTYPES, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_ENUM } from "./core/field/field-constants.js";
70
+ import { OBJECT_SUBTYPES, OBJECT_SUBTYPE_ENTITY } from "./core/object/object-constants.js";
71
+ import { FIELD_SUBTYPES } from "./core/field/field-constants.js";
67
72
  import { ATTR_SUBTYPES } from "./core/attr/attr-constants.js";
68
73
  import {
69
74
  VALIDATOR_SUBTYPES,
@@ -73,10 +78,7 @@ import {
73
78
  VALIDATOR_SUBTYPE_NUMERIC,
74
79
  VALIDATOR_SUBTYPE_ARRAY,
75
80
  } from "./core/validator/validator-constants.js";
76
- import {
77
- VIEW_SUBTYPES,
78
- VIEW_SUBTYPE_CURRENCY,
79
- } from "./presentation/view/view-constants.js";
81
+ import { VIEW_SUBTYPES } from "./presentation/view/view-constants.js";
80
82
  import {
81
83
  IDENTITY_SUBTYPES,
82
84
  IDENTITY_SUBTYPE_PRIMARY,
@@ -84,7 +86,7 @@ import {
84
86
  IDENTITY_SUBTYPE_REFERENCE,
85
87
  } from "./core/identity/identity-constants.js";
86
88
  import { RELATIONSHIP_SUBTYPES } from "./core/relationship/relationship-constants.js";
87
- import { LAYOUT_SUBTYPES, LAYOUT_SUBTYPE_DATA_GRID } from "./presentation/layout/layout-constants.js";
89
+ import { LAYOUT_SUBTYPES } from "./presentation/layout/layout-constants.js";
88
90
  import { SOURCE_SUBTYPES } from "./persistence/source/source-constants.js";
89
91
  import {
90
92
  ORIGIN_SUBTYPES,
@@ -95,7 +97,8 @@ import {
95
97
 
96
98
  // ---------------------------------------------------------------------------
97
99
  // The per-(type, subType) attribute schemas live in per-concern *-schema.ts
98
- // modules (e.g. core/field/field-schema.ts, persistence/origin/origin-schema.ts).
100
+ // modules (e.g. presentation/view/view-schema.ts) or, increasingly under
101
+ // FR-033, in the externalized spec/metamodel/*.json provider definitions.
99
102
  // This file keeps only the registration logic: the def() helper, the
100
103
  // subtype→class dispatch maps, and registerCoreTypes() itself.
101
104
  // ---------------------------------------------------------------------------
@@ -161,175 +164,302 @@ const ORIGIN_CLASS_MAP = new Map<string, NodeConstructor>([
161
164
  // re-exported from the package index for the same public surface.
162
165
 
163
166
  function registerCoreTypeDefs(registry: TypeRegistry): void {
164
- // metadata — 1 subtype (the document root: metadata.root)
167
+ // metadata — 1 subtype (the document root: metadata.root). FR-033 S1-simple:
168
+ // the any-attr wildcard child rule is DROPPED (strict/fail-closed — a document
169
+ // root holds structural nodes, never bare attrs); the genuinely-open structural
170
+ // wildcards (object/field/validator/template) are KEPT — a root legitimately
171
+ // holds arbitrary nodes of those types.
165
172
  registry.register(
166
173
  def(TYPE_METADATA, SUBTYPE_ROOT, "Root metadata document", [
167
174
  wildcard(TYPE_OBJECT),
168
175
  wildcard(TYPE_FIELD),
169
- wildcard(TYPE_ATTR),
170
176
  wildcard(TYPE_VALIDATOR),
171
177
  wildcard(TYPE_TEMPLATE),
172
178
  ], MetaRoot),
173
179
  );
174
180
 
175
- // object — 4 subtypes
176
- const objectRules = [
177
- wildcard(TYPE_FIELD),
178
- wildcard(TYPE_IDENTITY),
179
- wildcard(TYPE_RELATIONSHIP),
180
- wildcard(TYPE_VALIDATOR),
181
- wildcard(TYPE_LAYOUT),
182
- wildcard(TYPE_SOURCE),
183
- wildcard(TYPE_ATTR),
184
- ];
185
- for (const subType of OBJECT_SUBTYPES) {
186
- // FR-011: object.value additionally carries @normalize the object-level
187
- // default normalization mode for its enum fields' tolerant extract.
188
- const subTypeObjectAttrs =
189
- subType === OBJECT_SUBTYPE_VALUE
190
- ? [...objectAttrs, { ...normalizeAttr }]
191
- : [...objectAttrs];
192
- registry.register(
193
- def(TYPE_OBJECT, subType, `Object/entity (${subType})`, objectRules, MetaObject, subTypeObjectAttrs),
194
- );
181
+ // object — 4 subtypes. FR-033 S1-object: the object provider's declarative
182
+ // definition (vocabulary + per-subtype attr constraints + the structural child
183
+ // rules + real descriptions + the ADR-0028 taxonomy rule prose) is externalized
184
+ // to spec/metamodel/object.json, embedded at build into OBJECT_DEFINITION. The
185
+ // strict per-subtype model lives entirely in the JSON now: object.base carries
186
+ // the INTERSECTION of every subtype's structural children (field/identity/
187
+ // validator/layout/source); each concrete subtype sets extendsBase:true
188
+ // (composeWithBase folds the base childRules in at registration) and adds ONLY
189
+ // its subtype-specific children — value adds relationship; entity adds
190
+ // relationship + template (templates may be co-located) + the FR-014 TPH attrs
191
+ // @discriminator/@discriminatorValue (an entity-inheritance concept a value
192
+ // object / derived projection carries no discriminator); projection inherits the
193
+ // base intersection ONLY (NO relationship derivation is via @via, not a
194
+ // relationship child — and NO template). The "any attr" wildcard child rule is
195
+ // DROPPED (strict/fail-closed) and childRules are NO LONGER post-assigned in
196
+ // code. defineProviderFromData lowers it to TypeDefinitions; the factory
197
+ // (behavior) stays code via OBJECT_FACTORIES, mapping every subType → MetaObject.
198
+ const OBJECT_FACTORIES: FactoryMap = Object.fromEntries(
199
+ OBJECT_SUBTYPES.map((subType) => [
200
+ `${TYPE_OBJECT}.${subType}`,
201
+ (typeId: TypeId, name: string) => new MetaObject(typeId, name),
202
+ ]),
203
+ );
204
+ for (const objectDef of defineProviderFromData(OBJECT_DEFINITION, OBJECT_FACTORIES)) {
205
+ registry.register(objectDef);
195
206
  }
196
207
 
197
- // field — 13 subtypes
198
- const fieldRules = [
199
- wildcard(TYPE_VALIDATOR),
200
- wildcard(TYPE_VIEW),
201
- wildcard(TYPE_ATTR),
202
- wildcard(TYPE_ORIGIN),
203
- ];
204
- for (const subType of FIELD_SUBTYPES) {
205
- // field.currency additionally carries @currency; field.enum additionally
206
- // carries @values; all other field subtypes share the common attrs only.
207
- const fieldAttrs =
208
- subType === FIELD_SUBTYPE_CURRENCY
209
- ? [...commonFieldAttrs, { ...currencyFieldAttr }]
210
- : subType === FIELD_SUBTYPE_ENUM
211
- ? [
212
- ...commonFieldAttrs,
213
- { ...enumFieldAttr },
214
- { ...enumAliasAttr },
215
- { ...enumDocAttr },
216
- { ...coerceDefaultAttr },
217
- { ...normalizeAttr },
218
- ]
219
- : [...commonFieldAttrs];
220
- registry.register(
221
- def(TYPE_FIELD, subType, `Field of type ${subType}`, fieldRules, MetaField, fieldAttrs,
222
- new MetaField(new TypeId(TYPE_FIELD, subType), "").dataType),
223
- );
208
+ // field — 15 subtypes. FR-033 S1-field-B: the field provider's declarative
209
+ // definition (vocabulary + per-subtype attr constraints + the structural child
210
+ // rules + descriptions + rule prose) is externalized to spec/metamodel/field.json,
211
+ // embedded at build into FIELD_DEFINITION. The strict per-subtype model lives
212
+ // entirely in the JSON now: field.base carries the universal core attrs
213
+ // (@required/@readOnly/@default/@unique) + the open validator/view/origin child
214
+ // rules; each concrete subtype sets extendsBase:true (composeWithBase folds the
215
+ // base attrs+childRules in at registration) and adds ONLY its subtype-specific
216
+ // attrs (@maxLength→string, @precision/@scale→decimal, @currency→currency,
217
+ // @objectRef→object, @values/@provided→enum). The "any attr" wildcard child rule
218
+ // is DROPPED (strict/fail-closed) and childRules are NO LONGER post-assigned in
219
+ // code. defineProviderFromData lowers it to TypeDefinitions; the factory
220
+ // (behavior) stays code via FIELD_FACTORIES.
221
+ //
222
+ // (id, name) → MetaField for every field subtype. MetaField computes its own
223
+ // dataType from subType (FIELD_DATA_TYPE getter), so no setDataType is needed;
224
+ // FIELD_DEFINITION.dataType carries the same per-subtype value onto the def.
225
+ const FIELD_FACTORIES: FactoryMap = Object.fromEntries(
226
+ FIELD_SUBTYPES.map((subType) => [
227
+ `${TYPE_FIELD}.${subType}`,
228
+ (typeId: TypeId, name: string) => new MetaField(typeId, name),
229
+ ]),
230
+ );
231
+ for (const fieldDef of defineProviderFromData(FIELD_DEFINITION, FIELD_FACTORIES)) {
232
+ registry.register(fieldDef);
224
233
  }
225
234
 
226
- // attr — 9 subtypes, no children allowed. Each subtype's class owns its
227
- // dataType (resolved by this.subType); we read it off a probe instance so the
228
- // TypeDefinition.dataType contract (registry.find(...).dataType) still holds.
229
- for (const subType of ATTR_SUBTYPES) {
230
- const AttrClass = attrClassFor(subType);
231
- const probeDataType = new AttrClass(new TypeId(TYPE_ATTR, subType), "").dataType;
232
- registry.register(
233
- def(TYPE_ATTR, subType, `Attribute of type ${subType}`, [], AttrClass, [], probeDataType),
234
- );
235
+ // attr — 9 subtypes, no children allowed, no per-type attrs. FR-033: the attr
236
+ // provider's declarative definition (vocabulary + descriptions + per-subtype
237
+ // dataType) is externalized to spec/metamodel/attr.json, embedded at build into
238
+ // ATTR_DEFINITION. defineProviderFromData lowers it to TypeDefinitions; the
239
+ // factory (behavior) stays code via ATTR_FACTORIES. attrs are leaf value-type
240
+ // vocabulary: no childRules and no attributes, so (unlike field) NO post-assign
241
+ // is needed. Each subtype's class owns its dataType internally (resolved by
242
+ // this.subType); ATTR_DEFINITION.dataType carries the same per-subtype value.
243
+ const ATTR_FACTORIES: FactoryMap = Object.fromEntries(
244
+ ATTR_SUBTYPES.map((subType) => [
245
+ `${TYPE_ATTR}.${subType}`,
246
+ (typeId: TypeId, name: string) => new (attrClassFor(subType))(typeId, name),
247
+ ]),
248
+ );
249
+ for (const attrDef of defineProviderFromData(ATTR_DEFINITION, ATTR_FACTORIES)) {
250
+ registry.register(attrDef);
235
251
  }
236
252
 
237
253
  // validator — 6 subtypes (base + 5 named); dispatch to subtype-specific class.
238
- // Subtype→class dispatch for TYPE_VALIDATOR (formerly handled by metaOf()):
254
+ // FR-033: the validator provider's declarative definition (vocabulary +
255
+ // per-subtype attr constraints + descriptions + rule prose) is externalized to
256
+ // spec/metamodel/validator.json, embedded at build into VALIDATOR_DEFINITION.
257
+ // defineProviderFromData lowers it to TypeDefinitions; the factory (behavior)
258
+ // stays code via VALIDATOR_FACTORIES, dispatching subType→class:
239
259
  // required → MetaRequiredValidator, length → MetaLengthValidator,
240
260
  // regex → MetaRegexValidator, numeric → MetaNumericValidator,
241
261
  // array → MetaArrayValidator, default (base) → MetaValidator.
242
- // Attr schemas: MetaValidator (base) + length/numeric/array read @min/@max via
243
- // this.ownAttr(VALIDATOR_ATTR_MIN/MAX); regex also reads @pattern via this.ownAttr().
244
- // required has no extra attrs.
245
- const validatorRules = [wildcard(TYPE_ATTR)];
246
- for (const subType of VALIDATOR_SUBTYPES) {
247
- const NodeClass = VALIDATOR_CLASS_MAP.get(subType) ?? MetaValidator;
248
- const validatorAttrs = VALIDATOR_ATTRS_MAP.get(subType) ?? [];
249
- registry.register(
250
- def(TYPE_VALIDATOR, subType, `Validator (${subType})`, validatorRules, NodeClass, validatorAttrs),
251
- );
262
+ // FR-033 S1-simple: validator is an ATTR-ONLY type its only children are its
263
+ // declared named attrs (no structural children, ever). The "any attr" wildcard
264
+ // child rule is DROPPED (strict/fail-closed); defineProviderFromData leaves
265
+ // childRules EMPTY. The named attrs still enforce strictly via attr-schema-
266
+ // validate (ERR_UNKNOWN_ATTR); a misplaced STRUCTURAL child is now
267
+ // ERR_CHILD_NOT_ALLOWED. Attr schemas: base + length/numeric/array read @min/@max
268
+ // via this.ownAttr(VALIDATOR_ATTR_MIN/MAX); regex also reads @pattern; required
269
+ // has no extra attrs.
270
+ const VALIDATOR_FACTORIES: FactoryMap = Object.fromEntries(
271
+ VALIDATOR_SUBTYPES.map((subType) => [
272
+ `${TYPE_VALIDATOR}.${subType}`,
273
+ (typeId: TypeId, name: string) =>
274
+ new (VALIDATOR_CLASS_MAP.get(subType) ?? MetaValidator)(typeId, name),
275
+ ]),
276
+ );
277
+ for (const validatorDef of defineProviderFromData(VALIDATOR_DEFINITION, VALIDATOR_FACTORIES)) {
278
+ registry.register(validatorDef);
252
279
  }
253
280
 
254
- // view — N subtypes. Each view permits only attr children (Java parity:
255
- // MetaView only attaches to fields, never aggregates child views).
256
- // Only view.currency carries a documented attr (@locale); others have none.
257
- for (const subType of VIEW_SUBTYPES) {
258
- const viewAttrs = subType === VIEW_SUBTYPE_CURRENCY ? [...currencyViewAttrs] : [];
259
- registry.register(
260
- def(TYPE_VIEW, subType, `View (${subType})`, [wildcard(TYPE_ATTR)], MetaView, viewAttrs),
261
- );
281
+ // view — 13 subtypes (base + 12 field-level UI/render hints). Each view permits
282
+ // only attr children (Java parity: MetaView only attaches to fields, never
283
+ // aggregates child views).
284
+ // FR-033: the view provider's declarative definition (vocabulary + real
285
+ // per-subtype descriptions + the single @locale attr on view.currency) is
286
+ // externalized to spec/metamodel/view.json, embedded at build into
287
+ // VIEW_DEFINITION. defineProviderFromData lowers it to TypeDefinitions; the
288
+ // factory (behavior) stays code via VIEW_FACTORIES — every subtype maps to the
289
+ // single MetaView class (views carry no per-subtype behavior). Only
290
+ // view.currency carries a documented attr (@locale, default "en-US"); the
291
+ // other 12 subtypes have none. FR-033 S1-simple: view is an ATTR-ONLY type —
292
+ // the "any attr" wildcard child rule is DROPPED (strict/fail-closed) and
293
+ // childRules are left EMPTY; the declared named attrs still enforce strictly,
294
+ // a misplaced STRUCTURAL child is now ERR_CHILD_NOT_ALLOWED.
295
+ const VIEW_FACTORIES: FactoryMap = Object.fromEntries(
296
+ VIEW_SUBTYPES.map((subType) => [
297
+ `${TYPE_VIEW}.${subType}`,
298
+ (typeId: TypeId, name: string) => new MetaView(typeId, name),
299
+ ]),
300
+ );
301
+ for (const viewDef of defineProviderFromData(VIEW_DEFINITION, VIEW_FACTORIES)) {
302
+ registry.register(viewDef);
262
303
  }
263
304
 
264
305
  // layout — object-level UI surfaces (data grids, forms, tabs, cards).
265
- // Each subtype permits only attr children like views, layouts are config carriers.
266
- for (const subType of LAYOUT_SUBTYPES) {
267
- const layoutAttrs = subType === LAYOUT_SUBTYPE_DATA_GRID ? [...dataGridLayoutAttrs] : [];
268
- registry.register(
269
- def(TYPE_LAYOUT, subType, `Layout (${subType})`, [wildcard(TYPE_ATTR)], MetaLayout, layoutAttrs),
270
- );
306
+ // FR-033: the layout provider's declarative definition (2 subtypes base +
307
+ // dataGrid vocabulary + the 6 dataGrid attr constraints + descriptions) is
308
+ // externalized to spec/metamodel/layout.json, embedded at build into
309
+ // LAYOUT_DEFINITION. defineProviderFromData lowers it to TypeDefinitions; the
310
+ // factory (behavior) stays code via LAYOUT_FACTORIES — every subtype maps to
311
+ // the single MetaLayout class (layouts are config carriers, no per-subtype
312
+ // behavior). FR-033 S1-simple: layout is an ATTR-ONLY type — like views,
313
+ // layouts are config carriers — the "any attr" wildcard child rule is DROPPED
314
+ // (strict/fail-closed) and childRules are left EMPTY; the declared named attrs
315
+ // still enforce strictly, a misplaced STRUCTURAL child is now
316
+ // ERR_CHILD_NOT_ALLOWED.
317
+ const LAYOUT_FACTORIES: FactoryMap = Object.fromEntries(
318
+ LAYOUT_SUBTYPES.map((subType) => [
319
+ `${TYPE_LAYOUT}.${subType}`,
320
+ (typeId: TypeId, name: string) => new MetaLayout(typeId, name),
321
+ ]),
322
+ );
323
+ for (const layoutDef of defineProviderFromData(LAYOUT_DEFINITION, LAYOUT_FACTORIES)) {
324
+ registry.register(layoutDef);
271
325
  }
272
326
 
273
- // source — declares where an object's data lives (rdb, ... per ADR-0007).
274
- // Only attr children; sources carry only configuration, never nested structure.
275
- // Per-subtype attrs (@table/@kind/@role/@schema for rdb) are added by
276
- // dbProvider via TypeRegistry.extend.
277
- for (const subType of SOURCE_SUBTYPES) {
278
- registry.register(
279
- def(TYPE_SOURCE, subType, `Source (${subType})`, [wildcard(TYPE_ATTR)], MetaSource, []),
280
- );
327
+ // source — declares where an object's data lives (2 subtypes: base/rdb, per
328
+ // ADR-0007). Only attr children; sources carry only configuration, never
329
+ // nested structure.
330
+ // FR-033: the CORE source registration (the bare source shells + real
331
+ // descriptions + ADR-0007 rules prose) is externalized to
332
+ // spec/metamodel/source.json, embedded at build into SOURCE_DEFINITION.
333
+ // defineProviderFromData lowers it to TypeDefinitions; the factory (behavior)
334
+ // stays code via SOURCE_FACTORIES — a single MetaSource class backs all
335
+ // subtypes. The CORE registration carries NO own attrs (children == []); the
336
+ // per-subtype @table/@kind/@role/@schema/@parameterRef attrs on source.rdb are
337
+ // contributed by a SEPARATE provider (dbProvider, persistence/db) via
338
+ // registry.extend(TYPE_SOURCE, "rdb", ...) — untouched by this conversion.
339
+ // FR-033 S1-simple: source is an ATTR-ONLY type (configuration carrier, never
340
+ // nested structure) — the "any attr" wildcard child rule is DROPPED (strict/
341
+ // fail-closed) and childRules are left EMPTY; the per-subtype @table/@kind/
342
+ // @role/@schema attrs (from dbProvider) still enforce strictly, a misplaced
343
+ // STRUCTURAL child is now ERR_CHILD_NOT_ALLOWED.
344
+ const SOURCE_FACTORIES: FactoryMap = Object.fromEntries(
345
+ SOURCE_SUBTYPES.map((subType) => [
346
+ `${TYPE_SOURCE}.${subType}`,
347
+ (typeId: TypeId, name: string) => new MetaSource(typeId, name),
348
+ ]),
349
+ );
350
+ for (const sourceDef of defineProviderFromData(SOURCE_DEFINITION, SOURCE_FACTORIES)) {
351
+ registry.register(sourceDef);
281
352
  }
282
353
 
283
- // origin — field-level provenance. Only attr children.
284
- // Subtype→class dispatch (mirrors validator / identity patterns):
354
+ // origin — field-level provenance (4 subtypes: base/passthrough/aggregate/
355
+ // collection; only attr children).
356
+ // FR-033: the origin provider's declarative definition (vocabulary +
357
+ // per-subtype attr constraints + real descriptions) is externalized to
358
+ // spec/metamodel/origin.json, embedded at build into ORIGIN_DEFINITION.
359
+ // defineProviderFromData lowers it to TypeDefinitions; the factory (behavior)
360
+ // stays code via ORIGIN_FACTORIES, dispatching subType→class:
285
361
  // passthrough → MetaPassthroughOrigin, aggregate → MetaAggregateOrigin,
286
- // base (and any unmapped subtype) → MetaOrigin.
287
- for (const subType of ORIGIN_SUBTYPES) {
288
- const NodeClass = ORIGIN_CLASS_MAP.get(subType) ?? MetaOrigin;
289
- const originAttrs = ORIGIN_ATTRS_MAP.get(subType) ?? [];
290
- registry.register(
291
- def(TYPE_ORIGIN, subType, `Origin (${subType})`, [wildcard(TYPE_ATTR)], NodeClass, originAttrs),
292
- );
362
+ // collection → MetaCollectionOrigin, base (and any unmapped subtype) →
363
+ // MetaOrigin (fallback).
364
+ // FR-033 S1-simple: origin is an ATTR-ONLY type — the "any attr" wildcard child
365
+ // rule is DROPPED (strict/fail-closed) and childRules are left EMPTY; the named
366
+ // attrs still enforce strictly, a misplaced STRUCTURAL child is now
367
+ // ERR_CHILD_NOT_ALLOWED. Attr schemas: base has none; passthrough adds @from
368
+ // (required) + @via; aggregate adds @agg (required) + @of (required) + @via;
369
+ // collection adds @via (required).
370
+ const ORIGIN_FACTORIES: FactoryMap = Object.fromEntries(
371
+ ORIGIN_SUBTYPES.map((subType) => [
372
+ `${TYPE_ORIGIN}.${subType}`,
373
+ (typeId: TypeId, name: string) =>
374
+ new (ORIGIN_CLASS_MAP.get(subType) ?? MetaOrigin)(typeId, name),
375
+ ]),
376
+ );
377
+ for (const originDef of defineProviderFromData(ORIGIN_DEFINITION, ORIGIN_FACTORIES)) {
378
+ registry.register(originDef);
293
379
  }
294
380
 
295
381
  // template — renderable text artifacts (FR-004) + tool-call envelopes
296
- // (ADR-0011). Three subtypes: prompt + output + toolcall; attr-only children.
297
- // A single MetaTemplate class backs all three subtypes (mirrors source);
382
+ // (ADR-0011). Four subtypes: base + prompt + output + toolcall; attr-only
383
+ // children. A single MetaTemplate class backs every subtype (mirrors source);
298
384
  // per-subtype attr schemas drive validation (prompt + output require
299
385
  // @payloadRef + @textRef + @format closed enum; prompt adds the LLM overlay;
300
- // toolcall has its own set — @toolName + @payloadRef + @description, no
301
- // @textRef requirement since toolcalls have no renderable body).
302
- for (const subType of TEMPLATE_SUBTYPES) {
303
- const templateAttrs = TEMPLATE_ATTRS_MAP.get(subType) ?? [];
304
- registry.register(
305
- def(TYPE_TEMPLATE, subType, `Template (${subType})`, [wildcard(TYPE_ATTR)], MetaTemplate, templateAttrs),
306
- );
386
+ // output adds @promptStyle + @kind/email part-refs; toolcall has its own set —
387
+ // @toolName + @payloadRef, no @textRef requirement since toolcalls have no
388
+ // renderable body).
389
+ // FR-033: the template provider's declarative definition (the 4-subtype
390
+ // vocabulary + the full per-subtype attr constraints — incl. @format/@promptStyle/
391
+ // @kind closed-enum allowedValues + defaults + required @payloadRef/@toolName —
392
+ // + real descriptions + the FR-004/ADR-0011 rules prose) is externalized to
393
+ // spec/metamodel/template.json, embedded at build into TEMPLATE_DEFINITION.
394
+ // defineProviderFromData lowers it to TypeDefinitions; the factory (behavior)
395
+ // stays code via TEMPLATE_FACTORIES, mapping every subType → MetaTemplate.
396
+ // FR-033 S2: template's CORE registration carries NO own attrs (children == []);
397
+ // the per-subtype type attrs (@payloadRef/@textRef/@format/@kind/…) on prompt/
398
+ // output/toolcall are contributed by a SEPARATE provider (promptProvider,
399
+ // template/prompt-provider) via registry.extend(TYPE_TEMPLATE, sub, ...). With
400
+ // those attrs re-homed, template is now an ATTR-ONLY type and the "any attr"
401
+ // wildcard child rule is DROPPED (strict completion — like view/layout/source);
402
+ // childRules are left EMPTY, so a misplaced STRUCTURAL child is now
403
+ // ERR_CHILD_NOT_ALLOWED and a non-declared attr is ERR_UNKNOWN_ATTR. Vendor
404
+ // toolcall attrs stay extensible via consumer registry.extend (ADR-0011).
405
+ const TEMPLATE_FACTORIES: FactoryMap = Object.fromEntries(
406
+ TEMPLATE_SUBTYPES.map((subType) => [
407
+ `${TYPE_TEMPLATE}.${subType}`,
408
+ (typeId: TypeId, name: string) => new MetaTemplate(typeId, name),
409
+ ]),
410
+ );
411
+ for (const templateDef of defineProviderFromData(TEMPLATE_DEFINITION, TEMPLATE_FACTORIES)) {
412
+ registry.register(templateDef);
307
413
  }
308
414
 
309
- // identity — 2 subtypes (no base; Java doesn't register one).
310
- // Subtype→class dispatch for TYPE_IDENTITY (formerly handled by metaOf()):
415
+ // identity — 3 subtypes (primary/secondary/reference; no base Java doesn't
416
+ // register one).
417
+ // FR-033: the identity provider's declarative definition (vocabulary +
418
+ // per-subtype attr constraints + descriptions) is externalized to
419
+ // spec/metamodel/identity.json, embedded at build into IDENTITY_DEFINITION.
420
+ // defineProviderFromData lowers it to TypeDefinitions; the factory (behavior)
421
+ // stays code via IDENTITY_FACTORIES, dispatching subType→class:
311
422
  // primary → MetaPrimaryIdentity, secondary → MetaSecondaryIdentity,
312
- // default → MetaIdentity (fallback, not currently registered).
313
- for (const subType of IDENTITY_SUBTYPES) {
314
- const NodeClass = IDENTITY_CLASS_MAP.get(subType) ?? MetaIdentity;
315
- const idAttrs = IDENTITY_ATTRS_MAP.get(subType) ?? [{ ...identityFieldsAttr }];
316
- registry.register(
317
- def(TYPE_IDENTITY, subType, `Identity (${subType})`, [wildcard(TYPE_ATTR)], NodeClass, idAttrs),
318
- );
423
+ // reference → MetaReferenceIdentity, default → MetaIdentity (fallback).
424
+ // FR-033 S1-simple: identity is an ATTR-ONLY type — the "any attr" wildcard
425
+ // child rule is DROPPED (strict/fail-closed) and childRules are left EMPTY; the
426
+ // named attrs still enforce strictly, a misplaced STRUCTURAL child is now
427
+ // ERR_CHILD_NOT_ALLOWED. Attr schemas: all three carry the required @fields;
428
+ // primary adds @generation, secondary @unique, reference @references (required)
429
+ // + @enforce.
430
+ const IDENTITY_FACTORIES: FactoryMap = Object.fromEntries(
431
+ IDENTITY_SUBTYPES.map((subType) => [
432
+ `${TYPE_IDENTITY}.${subType}`,
433
+ (typeId: TypeId, name: string) =>
434
+ new (IDENTITY_CLASS_MAP.get(subType) ?? MetaIdentity)(typeId, name),
435
+ ]),
436
+ );
437
+ for (const identityDef of defineProviderFromData(IDENTITY_DEFINITION, IDENTITY_FACTORIES)) {
438
+ registry.register(identityDef);
319
439
  }
320
440
 
321
- // relationship — 4 subtypes
322
- for (const subType of RELATIONSHIP_SUBTYPES) {
323
- registry.register(
324
- def(
325
- TYPE_RELATIONSHIP,
326
- subType,
327
- `Relationship (${subType})`,
328
- [wildcard(TYPE_ATTR)],
329
- MetaRelationship,
330
- [...relationshipAttrs],
331
- ),
332
- );
441
+ // relationship — 4 subtypes (base/association/aggregation/composition), all
442
+ // backed by the single MetaRelationship node class (no subType→class dispatch).
443
+ // FR-033: the relationship provider's declarative definition (vocabulary +
444
+ // the 7 shared attr constraints + real descriptions + the complex M:N rules
445
+ // prose) is externalized to spec/metamodel/relationship.json, embedded at build
446
+ // into RELATIONSHIP_DEFINITION. defineProviderFromData lowers it to
447
+ // TypeDefinitions; the factory (behavior) stays code via RELATIONSHIP_FACTORIES,
448
+ // mapping every subType → MetaRelationship. FR-033 S1-simple: relationship is an
449
+ // ATTR-ONLY type — the "any attr" wildcard child rule is DROPPED (strict/fail-
450
+ // closed) and childRules are left EMPTY; the named attrs still enforce strictly,
451
+ // a misplaced STRUCTURAL child is now ERR_CHILD_NOT_ALLOWED.
452
+ const RELATIONSHIP_FACTORIES: FactoryMap = Object.fromEntries(
453
+ RELATIONSHIP_SUBTYPES.map((subType) => [
454
+ `${TYPE_RELATIONSHIP}.${subType}`,
455
+ (typeId: TypeId, name: string) => new MetaRelationship(typeId, name),
456
+ ]),
457
+ );
458
+ for (const relationshipDef of defineProviderFromData(
459
+ RELATIONSHIP_DEFINITION,
460
+ RELATIONSHIP_FACTORIES,
461
+ )) {
462
+ registry.register(relationshipDef);
333
463
  }
334
464
 
335
465
  // Default subTypes for YAML authoring sugar: a bare `metadata:` / `object:`
@@ -354,9 +484,18 @@ export const coreTypesProvider: MetaDataTypeProvider = {
354
484
  },
355
485
  };
356
486
 
357
- /** The default provider bundle — core metamodel types plus DB-domain attrs.
358
- * Spread it to add more: `[...coreProviders, mine]`. */
359
- export const coreProviders: readonly MetaDataTypeProvider[] = [coreTypesProvider, dbProvider, docProvider];
487
+ /** The default provider bundle — core metamodel types plus the four concern
488
+ * providers (DB-domain attrs, documentation common-attrs, prompt/AI + the
489
+ * UI/query-surface markers). FR-033 S1-field-A re-homed the field's
490
+ * filter/sort/teaching/extract/storage attrs out of core into db/ui/prompt;
491
+ * the composed set is unchanged. Spread it to add more: `[...coreProviders, mine]`. */
492
+ export const coreProviders: readonly MetaDataTypeProvider[] = [
493
+ coreTypesProvider,
494
+ dbProvider,
495
+ docProvider,
496
+ promptProvider,
497
+ uiProvider,
498
+ ];
360
499
 
361
500
  /**
362
501
  * Register the core metamodel into an existing registry. Thin convenience