@metaobjectsdev/metadata 0.9.0-rc.1 → 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 @@
1
+ {"version":3,"file":"ui-schema.js","sourceRoot":"","sources":["../../../src/presentation/ui/ui-schema.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,mEAAmE;AACnE,6EAA6E;AAC7E,gFAAgF;AAChF,8EAA8E;AAC9E,yEAAyE;AACzE,kBAAkB;AAGlB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,iCAAiC,GAClC,MAAM,qCAAqC,CAAC;AAE7C,0FAA0F;AAC1F,MAAM,cAAc,GAAG,KAAK,CAAC;AAC7B,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B,2FAA2F;AAC3F,MAAM,CAAC,MAAM,gBAAgB,GAAe;IAC1C,IAAI,EAAE,qBAAqB;IAC3B,SAAS,EAAE,oBAAoB;IAC/B,QAAQ,EAAE,KAAK;IACf,WAAW,EACT,+FAA+F;CAClG,CAAC;AAEF,uFAAuF;AACvF,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC,IAAI,EAAE,mBAAmB;IACzB,SAAS,EAAE,oBAAoB;IAC/B,QAAQ,EAAE,KAAK;IACf,WAAW,EACT,gIAAgI;CACnI,CAAC;AAEF,gFAAgF;AAChF,MAAM,CAAC,MAAM,0BAA0B,GAAe;IACpD,IAAI,EAAE,iCAAiC;IACvC,SAAS,EAAE,mBAAmB;IAC9B,QAAQ,EAAE,KAAK;IACf,aAAa,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;IAChD,WAAW,EACT,2EAA2E;CAC9E,CAAC;AAEF,sEAAsE;AACtE,MAAM,CAAC,MAAM,YAAY,GAA0B;IACjD,gBAAgB;IAChB,cAAc;IACd,0BAA0B;CAC3B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ProviderDefinition } from "../../provider-data.js";
2
+ export declare const VIEW_DEFINITION: ProviderDefinition;
3
+ //# sourceMappingURL=view-definition.embedded.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-definition.embedded.d.ts","sourceRoot":"","sources":["../../../src/presentation/view/view-definition.embedded.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,eAAO,MAAM,eAAe,EAAE,kBA0E7B,CAAC"}
@@ -0,0 +1,76 @@
1
+ export const VIEW_DEFINITION = {
2
+ "provider": "metaobjects-core-types",
3
+ "types": [
4
+ {
5
+ "type": "view",
6
+ "subType": "base",
7
+ "description": "Abstract view base — the shared root subtype for field-level UI/render hints. A view declares how a field's value is rendered or edited; the base carries no attrs of its own."
8
+ },
9
+ {
10
+ "type": "view",
11
+ "subType": "text",
12
+ "description": "Single-line text input/display."
13
+ },
14
+ {
15
+ "type": "view",
16
+ "subType": "textarea",
17
+ "description": "Multi-line text area."
18
+ },
19
+ {
20
+ "type": "view",
21
+ "subType": "date",
22
+ "description": "Date picker / date display."
23
+ },
24
+ {
25
+ "type": "view",
26
+ "subType": "month",
27
+ "description": "Month picker / month display."
28
+ },
29
+ {
30
+ "type": "view",
31
+ "subType": "hotlink",
32
+ "description": "Renders the value as a clickable link."
33
+ },
34
+ {
35
+ "type": "view",
36
+ "subType": "dropdown",
37
+ "description": "Single-select dropdown control."
38
+ },
39
+ {
40
+ "type": "view",
41
+ "subType": "radio",
42
+ "description": "Radio-button selection control."
43
+ },
44
+ {
45
+ "type": "view",
46
+ "subType": "checkbox",
47
+ "description": "Checkbox selection control."
48
+ },
49
+ {
50
+ "type": "view",
51
+ "subType": "number",
52
+ "description": "Numeric input control."
53
+ },
54
+ {
55
+ "type": "view",
56
+ "subType": "password",
57
+ "description": "Masked input for sensitive values."
58
+ },
59
+ {
60
+ "type": "view",
61
+ "subType": "hidden",
62
+ "description": "Not rendered; carried but not shown."
63
+ },
64
+ {
65
+ "type": "view",
66
+ "subType": "web",
67
+ "description": "Abstract base for web-rendered views."
68
+ },
69
+ {
70
+ "type": "view",
71
+ "subType": "currency",
72
+ "description": "Currency display formatting (locale-aware via @locale)."
73
+ }
74
+ ]
75
+ };
76
+ //# sourceMappingURL=view-definition.embedded.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-definition.embedded.js","sourceRoot":"","sources":["../../../src/presentation/view/view-definition.embedded.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,eAAe,GAAuB;IACjD,UAAU,EAAE,wBAAwB;IACpC,OAAO,EAAE;QACP;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,MAAM;YACjB,aAAa,EAAE,gLAAgL;SAChM;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,MAAM;YACjB,aAAa,EAAE,iCAAiC;SACjD;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,UAAU;YACrB,aAAa,EAAE,uBAAuB;SACvC;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,MAAM;YACjB,aAAa,EAAE,6BAA6B;SAC7C;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,OAAO;YAClB,aAAa,EAAE,+BAA+B;SAC/C;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,SAAS;YACpB,aAAa,EAAE,wCAAwC;SACxD;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,UAAU;YACrB,aAAa,EAAE,iCAAiC;SACjD;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,OAAO;YAClB,aAAa,EAAE,iCAAiC;SACjD;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,UAAU;YACrB,aAAa,EAAE,6BAA6B;SAC7C;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,QAAQ;YACnB,aAAa,EAAE,wBAAwB;SACxC;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,UAAU;YACrB,aAAa,EAAE,oCAAoC;SACpD;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,QAAQ;YACnB,aAAa,EAAE,sCAAsC;SACtD;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,KAAK;YAChB,aAAa,EAAE,uCAAuC;SACvD;QACD;YACE,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,UAAU;YACrB,aAAa,EAAE,yDAAyD;SACzE;KACF;CACF,CAAC"}
@@ -0,0 +1,169 @@
1
+ import type { AttrSchema, TypeDefinition, TypeRegistry } from "./registry.js";
2
+ import { TypeId } from "./registry.js";
3
+ import type { MetaData } from "./shared/meta-data.js";
4
+ /**
5
+ * A UNIFIED child requirement (spec §3.1). Every constraint on a type — both its
6
+ * structural children AND its attributes — is one of these entries in a single
7
+ * `children` list, distinguished by `type`:
8
+ *
9
+ * - an **attribute** is a `{ type: "attr", … }` entry. Its `subType` is the
10
+ * attr's value-type (a single subtype — never a list), `max` is always 1
11
+ * (single-valued; a list-valued attr sets `isArray: true`), and it carries the
12
+ * attr-only facets `default` / `allowedValues` / `isArray`.
13
+ * - a **structural child** (`field`/`identity`/`source`/`validator`/…) carries
14
+ * full cardinality (`min`/`max`, `max: null` = unbounded) and may admit any of
15
+ * several subtypes via a `subType` list.
16
+ *
17
+ * `type` / `subType` / `name` accept the `"*"` wildcard.
18
+ */
19
+ export interface ChildDef {
20
+ /** Child type, or `"*"` for any. For attrs this is the literal `"attr"`. */
21
+ type: string;
22
+ /**
23
+ * Child subtype: a single subtype, a list of admitted subtypes, or `"*"`.
24
+ * For an `attr` entry this is the attr's value-type and MUST be a single
25
+ * subtype (a list is invalid for attrs). Optional on an `attr` entry: an
26
+ * omitted `subType` declares a polymorphic/untyped attr (e.g. `@default`,
27
+ * whose value-type follows the owning field's subtype). A structural child
28
+ * always supplies a `subType` (or `"*"`).
29
+ */
30
+ subType?: string | readonly string[];
31
+ /** Child name, or `"*"` for any. */
32
+ name: string;
33
+ /** Cardinality lower bound. An attr is required iff `min >= 1`. */
34
+ min: number;
35
+ /** Cardinality upper bound; `null` = unbounded. For an attr this is 1. */
36
+ max: number | null;
37
+ /** Whether the child must carry an explicit name. */
38
+ named?: boolean;
39
+ description?: string;
40
+ /** Prose documenting the complex rules enforced in code. */
41
+ rules?: string;
42
+ /** An example value/usage, shown only in the provider detail page. */
43
+ example?: string;
44
+ /** Guidance on when to reach for this child/attr. */
45
+ whenToUse?: string;
46
+ /** Default value applied when the attr is absent. */
47
+ default?: unknown;
48
+ /** Closed enum of allowed values. */
49
+ allowedValues?: readonly unknown[];
50
+ /** Whether the attr is array-valued (the only way an attr's `max` may be > 1). */
51
+ isArray?: boolean;
52
+ }
53
+ /**
54
+ * A declarative type/subtype definition (spec §3). The `factory` is NOT here — it
55
+ * is code, supplied via the `FactoryMap`. An attribute is a `type: "attr"` entry
56
+ * inside `children`; structural children are the non-`"attr"` entries.
57
+ */
58
+ export interface TypeDef {
59
+ type: string;
60
+ subType: string;
61
+ description: string;
62
+ dataType?: string;
63
+ rules?: string;
64
+ example?: string;
65
+ whenToUse?: string;
66
+ /** Unified children list: attrs (`type: "attr"`) + structural children. */
67
+ children?: ChildDef[];
68
+ /** Child-side placement: the `type.subType`s under which this type is allowed. */
69
+ parents?: readonly string[];
70
+ /**
71
+ * FR-033 base-composition opt-in. When `true` (and this is a non-base subtype),
72
+ * the subtype additively inherits its `<type>.base`'s attrs (dedup by name) and
73
+ * childRules (dedup structurally) — letting the JSON declare per-type-universal
74
+ * rules once on `base`. Default/absent = OFF, so a subtype that deliberately
75
+ * declares FEWER attrs than base (e.g. `validator.required`, which wants no
76
+ * `min`/`max`) is never silently widened. Opted in per-subtype in S1; inert (no
77
+ * registered output change) under S0.
78
+ */
79
+ extendsBase?: boolean;
80
+ }
81
+ /**
82
+ * FR-033 S1.5 — a declarative `registry.extend` directive. A **concern** provider
83
+ * (db / ui / prompt) does NOT register new `type.subType`s; it ADDS attrs to types
84
+ * an upstream provider (core) already registered. This entry is the data form of a
85
+ * `registry.extend(type, sub, { attributes })` call: `subType` selects the target
86
+ * subtype(s) and `children` are the `type: "attr"` entries (→ `AttrSchema`) to add.
87
+ */
88
+ export interface ExtendDef {
89
+ /** Target type whose subtype(s) are extended (e.g. `"field"`, `"source"`). */
90
+ type: string;
91
+ /**
92
+ * Target subtype(s): a single subtype name, a LIST of subtype names, or the
93
+ * `"*"` wildcard (= every currently-registered subtype of `type`). Resolved at
94
+ * apply time against the registry.
95
+ */
96
+ subType: string | readonly string[];
97
+ /**
98
+ * Attrs to add to each resolved target. Concern providers add attrs only — these
99
+ * must all be `type: "attr"` entries (lowered via `toAttrSchema`). A structural
100
+ * child here is rejected (concern providers do not contribute child rules).
101
+ */
102
+ children: ChildDef[];
103
+ }
104
+ export interface ProviderDefinition {
105
+ /** Owning provider id (groups doc pages). */
106
+ provider: string;
107
+ /**
108
+ * The provider's type definitions. ONE entry may be the **universal** `*.*`
109
+ * entry (`type: "*", subType: "*"`): it is NOT a registered type — its named
110
+ * `attr` children are COMMON attributes (accepted on every node, registered via
111
+ * `registry.registerCommonAttrs`). Every other entry is a real `type.subType`.
112
+ * Optional — a concern (extends-only) provider declares no new types and may
113
+ * omit this entirely (it carries only `extends`).
114
+ */
115
+ types?: TypeDef[];
116
+ /**
117
+ * FR-033 S1.5 — DATA-DRIVEN `registry.extend` directives. A **concern** provider
118
+ * (db / ui / prompt) declares no new types; it reads its attrs from data and ADDS
119
+ * them to already-registered types via these entries. Applied AFTER `types` in
120
+ * `applyProviderDefinition`. Optional — a provider with only `types` is unaffected.
121
+ */
122
+ extends?: ExtendDef[];
123
+ }
124
+ /**
125
+ * The code half of the data/code boundary: a `"<type>.<subType>"` → factory map.
126
+ * The factory constructs the node instance; it stays code (behavior).
127
+ */
128
+ export type FactoryMap = Record<string, (typeId: TypeId, name: string) => MetaData>;
129
+ /**
130
+ * Turn a declarative `ProviderDefinition` + a code-supplied factory map into the
131
+ * `TypeDefinition`s a provider passes to `registry.register()`.
132
+ *
133
+ * For each real `TypeDef` (every entry EXCEPT the universal `*.*` entry, which
134
+ * carries common attrs and is handled by `applyProviderDefinition`): look up its
135
+ * factory (throws if missing); fan its `children` out so `type: "attr"` entries
136
+ * become `AttrSchema`s and structural entries become `ChildRule`s; carry `parents`
137
+ * and the optional `rules`/`example`/`whenToUse` doc fields through onto the
138
+ * returned `TypeDefinition`.
139
+ *
140
+ * BASE-COMPOSITION (FR-033): a non-base subtype that opts in via
141
+ * `extendsBase: true` additively inherits its `<type>.base`'s `attributes` (dedup
142
+ * by name) and `childRules` (dedup structurally) — letting a JSON declare
143
+ * universal-per-type rules once on `base`. Purely additive (a subtype's own
144
+ * declarations win on a name/shape collision). OFF by default so a subtype that
145
+ * deliberately declares fewer attrs than base is never widened — inert under S0
146
+ * (no provider opts in yet), the rail S1 will use.
147
+ *
148
+ * Builder-local validation (cheap, structural): an attr entry must be
149
+ * single-valued (`max === 1`) unless `isArray`; an attr entry's `subType` must be
150
+ * a single subtype (not a list); every child must have `min >= 0` and
151
+ * (`max === null || max >= min`).
152
+ */
153
+ export declare function defineProviderFromData(data: ProviderDefinition, factories: FactoryMap): TypeDefinition[];
154
+ /**
155
+ * Apply a `ProviderDefinition` to a registry via the ONE uniform path: register
156
+ * every real `type.subType` (with base-composition) AND register the universal
157
+ * `*.*` entry's named `attr` children as COMMON attrs. This replaces the bespoke
158
+ * `commonAttrs` helper — documentation rides the same mechanism as every other
159
+ * provider.
160
+ */
161
+ export declare function applyProviderDefinition(registry: TypeRegistry, data: ProviderDefinition, factories: FactoryMap): void;
162
+ /**
163
+ * Lower the universal `*.*` entry's named `attr` children into `AttrSchema[]` for
164
+ * `registry.registerCommonAttrs(...)`. Returns `[]` when no `*.*` entry is present.
165
+ * Same field mapping as `toAttrSchema`. Exported for callers that register common
166
+ * attrs themselves; `applyProviderDefinition` is the usual door.
167
+ */
168
+ export declare function universalCommonAttrs(data: ProviderDefinition): AttrSchema[];
169
+ //# sourceMappingURL=provider-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-data.d.ts","sourceRoot":"","sources":["../src/provider-data.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAa,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,KAAK,EAAa,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAKjE;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,QAAQ;IACvB,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACrC,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,GAAG,EAAE,MAAM,CAAC;IACZ,0EAA0E;IAC1E,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,qDAAqD;IACrD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qCAAqC;IACrC,aAAa,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IACnC,kFAAkF;IAClF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,kFAAkF;IAClF,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,SAAS;IACxB,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACpC;;;;OAIG;IACH,QAAQ,EAAE,QAAQ,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC;AAmBpF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,kBAAkB,EACxB,SAAS,EAAE,UAAU,GACpB,cAAc,EAAE,CAgDlB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,kBAAkB,EACxB,SAAS,EAAE,UAAU,GACpB,IAAI,CASN;AAyCD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,UAAU,EAAE,CAgB3E"}
@@ -0,0 +1,269 @@
1
+ // FR-033 — provider definitions as declarative data.
2
+ //
3
+ // A provider's *declarative* metamodel definition (vocabulary + attr constraints
4
+ // + child cardinality + descriptions + rule prose) lives as data; the factory
5
+ // (behavior) is supplied separately. `defineProviderFromData` turns that data +
6
+ // a code-supplied factory map into the `TypeDefinition`s a provider passes to
7
+ // `registry.register()`. This is the data/code boundary: declarative facts and
8
+ // rule *prose* are data; factories, imperative validation, and codegen stay code.
9
+ //
10
+ // See spec/superpowers/specs/2026-06-13-metamodel-self-description-design.md §3 +
11
+ // §3.1 (the constraint model). This module implements Plan Task 1, Task 2, and
12
+ // the format half of Task 7.
13
+ import { TypeId } from "./registry.js";
14
+ import { CHILD_RULE_WILDCARD } from "./shared/structural.js";
15
+ import { SUBTYPE_BASE } from "./shared/base-types.js";
16
+ const ATTR_CHILD_TYPE = "attr";
17
+ /** Whether a `ChildDef` declares an attribute (vs a structural child). */
18
+ function isAttrChild(child) {
19
+ return child.type === ATTR_CHILD_TYPE;
20
+ }
21
+ /**
22
+ * Whether a `TypeDef` is the UNIVERSAL `*.*` entry — the carrier for COMMON
23
+ * attributes (attrs accepted on EVERY node). It is NOT a real registered type;
24
+ * its named `attr` children are routed to `registry.registerCommonAttrs(...)` by
25
+ * the unified apply path. Documentation uses this; ordinary providers do not.
26
+ */
27
+ function isUniversalEntry(t) {
28
+ return t.type === CHILD_RULE_WILDCARD && t.subType === CHILD_RULE_WILDCARD;
29
+ }
30
+ /**
31
+ * Turn a declarative `ProviderDefinition` + a code-supplied factory map into the
32
+ * `TypeDefinition`s a provider passes to `registry.register()`.
33
+ *
34
+ * For each real `TypeDef` (every entry EXCEPT the universal `*.*` entry, which
35
+ * carries common attrs and is handled by `applyProviderDefinition`): look up its
36
+ * factory (throws if missing); fan its `children` out so `type: "attr"` entries
37
+ * become `AttrSchema`s and structural entries become `ChildRule`s; carry `parents`
38
+ * and the optional `rules`/`example`/`whenToUse` doc fields through onto the
39
+ * returned `TypeDefinition`.
40
+ *
41
+ * BASE-COMPOSITION (FR-033): a non-base subtype that opts in via
42
+ * `extendsBase: true` additively inherits its `<type>.base`'s `attributes` (dedup
43
+ * by name) and `childRules` (dedup structurally) — letting a JSON declare
44
+ * universal-per-type rules once on `base`. Purely additive (a subtype's own
45
+ * declarations win on a name/shape collision). OFF by default so a subtype that
46
+ * deliberately declares fewer attrs than base is never widened — inert under S0
47
+ * (no provider opts in yet), the rail S1 will use.
48
+ *
49
+ * Builder-local validation (cheap, structural): an attr entry must be
50
+ * single-valued (`max === 1`) unless `isArray`; an attr entry's `subType` must be
51
+ * a single subtype (not a list); every child must have `min >= 0` and
52
+ * (`max === null || max >= min`).
53
+ */
54
+ export function defineProviderFromData(data, factories) {
55
+ // Pre-compute each type's OWN lowered attrs + childRules, keyed by "type.subType",
56
+ // so base-composition can fold a base's contributions into its subtypes. A
57
+ // concern (extends-only) provider may omit `types` entirely.
58
+ const realTypes = (data.types ?? []).filter((t) => !isUniversalEntry(t));
59
+ const lowered = new Map();
60
+ for (const t of realTypes) {
61
+ const key = `${t.type}.${t.subType}`;
62
+ const attributes = [];
63
+ const childRules = [];
64
+ for (const child of t.children ?? []) {
65
+ validateCardinality(data.provider, key, child);
66
+ if (isAttrChild(child)) {
67
+ attributes.push(toAttrSchema(data.provider, key, child));
68
+ }
69
+ else {
70
+ childRules.push(toChildRule(child));
71
+ }
72
+ }
73
+ lowered.set(key, { attributes, childRules });
74
+ }
75
+ return realTypes.map((t) => {
76
+ const key = `${t.type}.${t.subType}`;
77
+ const factory = factories[key];
78
+ if (factory === undefined) {
79
+ throw new Error(`defineProviderFromData(${data.provider}): no factory for "${key}"`);
80
+ }
81
+ const self = lowered.get(key);
82
+ const { attributes, childRules } = composeWithBase(t, self, lowered);
83
+ return {
84
+ typeId: new TypeId(t.type, t.subType),
85
+ description: t.description,
86
+ factory,
87
+ childRules,
88
+ attributes,
89
+ ...(t.dataType !== undefined ? { dataType: t.dataType } : {}),
90
+ ...(t.parents !== undefined ? { parents: t.parents } : {}),
91
+ ...(t.rules !== undefined ? { rules: t.rules } : {}),
92
+ ...(t.example !== undefined ? { example: t.example } : {}),
93
+ ...(t.whenToUse !== undefined ? { whenToUse: t.whenToUse } : {}),
94
+ };
95
+ });
96
+ }
97
+ /**
98
+ * Apply a `ProviderDefinition` to a registry via the ONE uniform path: register
99
+ * every real `type.subType` (with base-composition) AND register the universal
100
+ * `*.*` entry's named `attr` children as COMMON attrs. This replaces the bespoke
101
+ * `commonAttrs` helper — documentation rides the same mechanism as every other
102
+ * provider.
103
+ */
104
+ export function applyProviderDefinition(registry, data, factories) {
105
+ for (const def of defineProviderFromData(data, factories)) {
106
+ registry.register(def);
107
+ }
108
+ const commonAttrs = universalCommonAttrs(data);
109
+ if (commonAttrs.length > 0) {
110
+ registry.registerCommonAttrs(commonAttrs);
111
+ }
112
+ applyExtends(registry, data);
113
+ }
114
+ /**
115
+ * Apply a definition's `extends` directives (FR-033 S1.5) via `registry.extend`.
116
+ * For each directive: resolve the target subtypes (`"*"` → every registered subtype
117
+ * of the type; a list → each named subtype; a string → that one), lower its `attr`
118
+ * children to `AttrSchema[]`, and `registry.extend(type, sub, { attributes })`.
119
+ * Concern providers contribute attrs only — a non-`attr` child is rejected.
120
+ */
121
+ function applyExtends(registry, data) {
122
+ for (const ext of data.extends ?? []) {
123
+ const attributes = [];
124
+ for (const child of ext.children) {
125
+ if (!isAttrChild(child)) {
126
+ throw new Error(`applyProviderDefinition(${data.provider}): extends "${ext.type}" may only carry attr ` +
127
+ `children; found a structural child "${child.type}".`);
128
+ }
129
+ validateCardinality(data.provider, ext.type, child);
130
+ attributes.push(toAttrSchema(data.provider, ext.type, child));
131
+ }
132
+ for (const subType of resolveExtendSubTypes(registry, ext)) {
133
+ registry.extend(ext.type, subType, { attributes });
134
+ }
135
+ }
136
+ }
137
+ /**
138
+ * Resolve an `ExtendDef`'s `subType` selector to concrete subtype names:
139
+ * - `"*"` → every currently-registered subtype of `ext.type`;
140
+ * - a list → each named subtype, in declared order;
141
+ * - a single string → that one subtype.
142
+ */
143
+ function resolveExtendSubTypes(registry, ext) {
144
+ if (ext.subType === CHILD_RULE_WILDCARD) {
145
+ return registry.allSubTypesOf(ext.type);
146
+ }
147
+ return Array.isArray(ext.subType) ? ext.subType : [ext.subType];
148
+ }
149
+ /**
150
+ * Lower the universal `*.*` entry's named `attr` children into `AttrSchema[]` for
151
+ * `registry.registerCommonAttrs(...)`. Returns `[]` when no `*.*` entry is present.
152
+ * Same field mapping as `toAttrSchema`. Exported for callers that register common
153
+ * attrs themselves; `applyProviderDefinition` is the usual door.
154
+ */
155
+ export function universalCommonAttrs(data) {
156
+ const universal = (data.types ?? []).find(isUniversalEntry);
157
+ if (universal === undefined)
158
+ return [];
159
+ const key = `${universal.type}.${universal.subType}`;
160
+ const out = [];
161
+ for (const child of universal.children ?? []) {
162
+ if (!isAttrChild(child)) {
163
+ throw new Error(`applyProviderDefinition(${data.provider}): the universal "${key}" entry may only ` +
164
+ `carry attr children (common attrs); found a structural child "${child.type}".`);
165
+ }
166
+ validateCardinality(data.provider, key, child);
167
+ out.push(toAttrSchema(data.provider, key, child));
168
+ }
169
+ return out;
170
+ }
171
+ /**
172
+ * Fold a real `TypeDef`'s OWN lowered attrs/childRules with its `<type>.base`'s
173
+ * (when the definition declares one and this subtype is not itself `base`).
174
+ * Additive: own entries win on a name (attr) / structural-shape (rule) collision;
175
+ * base entries the subtype lacks are appended. A NO-OP when there is no base in
176
+ * THIS definition, or when the subtype already declares the full base set.
177
+ */
178
+ function composeWithBase(t, self, lowered) {
179
+ // OFF by default (S0): a subtype inherits its base only when it opts in via
180
+ // `extendsBase: true`. Keeps the current canonical byte-identical — no provider
181
+ // sets it yet — while the rail is in place for S1.
182
+ if (t.extendsBase !== true)
183
+ return self;
184
+ if (t.subType === SUBTYPE_BASE)
185
+ return self;
186
+ const base = lowered.get(`${t.type}.${SUBTYPE_BASE}`);
187
+ if (base === undefined)
188
+ return self;
189
+ const attributes = [...self.attributes];
190
+ const haveAttr = new Set(attributes.map((a) => a.name));
191
+ for (const baseAttr of base.attributes) {
192
+ if (!haveAttr.has(baseAttr.name)) {
193
+ attributes.push(baseAttr);
194
+ haveAttr.add(baseAttr.name);
195
+ }
196
+ }
197
+ const childRules = [...self.childRules];
198
+ const haveRule = new Set(childRules.map(childRuleId));
199
+ for (const baseRule of base.childRules) {
200
+ const id = childRuleId(baseRule);
201
+ if (!haveRule.has(id)) {
202
+ childRules.push(baseRule);
203
+ haveRule.add(id);
204
+ }
205
+ }
206
+ return { attributes, childRules };
207
+ }
208
+ /** A stable structural identity for a ChildRule (base-composition dedup). */
209
+ function childRuleId(rule) {
210
+ const sub = typeof rule.childSubType === "string"
211
+ ? rule.childSubType
212
+ : [...rule.childSubType].sort().join("|");
213
+ return [
214
+ rule.childType,
215
+ sub,
216
+ rule.childName,
217
+ rule.min ?? "",
218
+ rule.max === null ? "null" : (rule.max ?? ""),
219
+ rule.named ?? "",
220
+ ].join(" ");
221
+ }
222
+ /** Validate the min/max axis (and attr single-valuedness) for one child entry. */
223
+ function validateCardinality(provider, typeKey, child) {
224
+ if (child.min < 0) {
225
+ throw new Error(`defineProviderFromData(${provider}): child "${child.name}" on "${typeKey}" has min ${child.min} < 0.`);
226
+ }
227
+ if (child.max !== null && child.max < child.min) {
228
+ throw new Error(`defineProviderFromData(${provider}): child "${child.name}" on "${typeKey}" has max ${child.max} < min ${child.min}.`);
229
+ }
230
+ if (isAttrChild(child) && child.max !== 1 && child.isArray !== true) {
231
+ throw new Error(`defineProviderFromData(${provider}): attr "${child.name}" on "${typeKey}" is single-valued ` +
232
+ `(max must be 1; a list-valued attr sets isArray: true).`);
233
+ }
234
+ }
235
+ /** An `type: "attr"` child entry IS an `AttrSchema`. */
236
+ function toAttrSchema(provider, typeKey, child) {
237
+ if (Array.isArray(child.subType)) {
238
+ throw new Error(`defineProviderFromData(${provider}): attr "${child.name}" on "${typeKey}" declares a list subType ` +
239
+ `— an attr's value-type is a single subtype.`);
240
+ }
241
+ return {
242
+ name: child.name,
243
+ ...(child.subType !== undefined ? { valueType: child.subType } : {}),
244
+ ...(child.isArray !== undefined ? { isArray: child.isArray } : {}),
245
+ required: child.min >= 1,
246
+ ...(child.default !== undefined ? { default: child.default } : {}),
247
+ ...(child.allowedValues !== undefined
248
+ ? { allowedValues: child.allowedValues }
249
+ : {}),
250
+ description: child.description ?? "",
251
+ ...(child.rules !== undefined ? { rules: child.rules } : {}),
252
+ ...(child.example !== undefined ? { example: child.example } : {}),
253
+ ...(child.whenToUse !== undefined ? { whenToUse: child.whenToUse } : {}),
254
+ };
255
+ }
256
+ /** A structural (`type !== "attr"`) child entry IS a `ChildRule`. */
257
+ function toChildRule(child) {
258
+ return {
259
+ childType: child.type,
260
+ // A structural child always supplies a subType; default to the `"*"`
261
+ // wildcard if (unusually) omitted, so the rule stays well-formed.
262
+ childSubType: child.subType ?? CHILD_RULE_WILDCARD,
263
+ childName: child.name,
264
+ min: child.min,
265
+ max: child.max,
266
+ ...(child.named !== undefined ? { named: child.named } : {}),
267
+ };
268
+ }
269
+ //# sourceMappingURL=provider-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-data.js","sourceRoot":"","sources":["../src/provider-data.ts"],"names":[],"mappings":"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"}
@@ -16,5 +16,7 @@ export interface MetaDataTypeProvider {
16
16
  * ordering constraint between them keep input order. Throws on a duplicate
17
17
  * provider id, a missing dependency, or a dependency cycle.
18
18
  */
19
- export declare function composeRegistry(providers: readonly MetaDataTypeProvider[]): TypeRegistry;
19
+ export declare function composeRegistry(providers: readonly MetaDataTypeProvider[], opts?: {
20
+ validate?: boolean;
21
+ }): TypeRegistry;
20
22
  //# sourceMappingURL=provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,kEAAkE;AAClE,MAAM,WAAW,oBAAoB;IACnC,iEAAiE;IACjE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,qEAAqE;IACrE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,sDAAsD;IACtD,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;CAC7C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,oBAAoB,EAAE,GACzC,YAAY,CAOd"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAK7C,kEAAkE;AAClE,MAAM,WAAW,oBAAoB;IACnC,iEAAiE;IACjE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,qEAAqE;IACrE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,sDAAsD;IACtD,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;CAC7C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,oBAAoB,EAAE,EAC1C,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5B,YAAY,CAsBd"}
package/dist/provider.js CHANGED
@@ -6,18 +6,32 @@
6
6
  // composeRegistry. See docs/superpowers/specs/2026-05-17-type-provider-model-design.md.
7
7
  import { TypeRegistry } from "./registry.js";
8
8
  import { MetaModelError } from "./errors.js";
9
+ import { mergeConstraints } from "./constraint-merge.js";
10
+ import { validateConstraints } from "./constraint-validate.js";
9
11
  /**
10
12
  * Build a TypeRegistry by composing providers. Providers are topologically
11
13
  * sorted by their `dependencies`; the sort is stable — providers with no
12
14
  * ordering constraint between them keep input order. Throws on a duplicate
13
15
  * provider id, a missing dependency, or a dependency cycle.
14
16
  */
15
- export function composeRegistry(providers) {
17
+ export function composeRegistry(providers, opts) {
16
18
  const ordered = topoSortProviders(providers);
17
19
  const registry = new TypeRegistry();
18
20
  for (const provider of ordered) {
19
21
  provider.registerTypes(registry);
20
22
  }
23
+ // FR-033 — opt-in metamodel contradiction gate. The library bootstrap (the
24
+ // loader's default registry) sets validate:true so a contradictory provider set
25
+ // fails fast at bootstrap (mirrors ADR-0023 strictness). Off by default so
26
+ // synthetic/partial registries (tests, incremental composition) are unaffected.
27
+ if (opts?.validate === true) {
28
+ const contradictions = validateConstraints(mergeConstraints(registry), registry);
29
+ if (contradictions.length > 0) {
30
+ throw new MetaModelError(`composeRegistry: the provider set has ${contradictions.length} metamodel ` +
31
+ `constraint contradiction(s) (FR-033):\n` +
32
+ contradictions.map((e) => ` - ${e.message}`).join("\n"), { code: "ERR_INVALID_METAMODEL_CONSTRAINT" });
33
+ }
34
+ }
21
35
  return registry;
22
36
  }
23
37
  function topoSortProviders(providers) {
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,oEAAoE;AACpE,wFAAwF;AAExF,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAc7C;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,SAA0C;IAE1C,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC/B,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CACxB,SAA0C;IAE1C,sBAAsB;IACtB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAClB,MAAM,IAAI,cAAc,CAAC,2CAA2C,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC,CAAC;QACtH,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IACD,4BAA4B;IAC5B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClB,MAAM,IAAI,cAAc,CACtB,8BAA8B,CAAC,CAAC,EAAE,iBAAiB,GAAG,qCAAqC,EAC3F,EAAE,IAAI,EAAE,iCAAiC,EAAE,CAC5C,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IACD,4EAA4E;IAC5E,uEAAuE;IACvE,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,OAAO,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CACzB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACtD,CAAC;QACF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,SAAS;iBACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,IAAI,cAAc,CACtB,sDAAsD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EACzE,EAAE,IAAI,EAAE,+BAA+B,EAAE,CAC1C,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}