@metaobjectsdev/metadata 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (426) hide show
  1. package/dist/attr-schema-validate.d.ts +1 -1
  2. package/dist/attr-schema-validate.d.ts.map +1 -1
  3. package/dist/attr-schema-validate.js +84 -7
  4. package/dist/attr-schema-validate.js.map +1 -1
  5. package/dist/constants.d.ts +208 -0
  6. package/dist/constants.d.ts.map +1 -0
  7. package/dist/constants.js +419 -0
  8. package/dist/constants.js.map +1 -0
  9. package/dist/constraint-merge.d.ts +18 -0
  10. package/dist/constraint-merge.d.ts.map +1 -0
  11. package/dist/constraint-merge.js +0 -0
  12. package/dist/constraint-merge.js.map +1 -0
  13. package/dist/constraint-validate.d.ts +6 -0
  14. package/dist/constraint-validate.d.ts.map +1 -0
  15. package/dist/constraint-validate.js +274 -0
  16. package/dist/constraint-validate.js.map +1 -0
  17. package/dist/core/attr/attr-constants.d.ts +13 -3
  18. package/dist/core/attr/attr-constants.d.ts.map +1 -1
  19. package/dist/core/attr/attr-constants.js +11 -2
  20. package/dist/core/attr/attr-constants.js.map +1 -1
  21. package/dist/core/attr/attr-definition.embedded.d.ts +3 -0
  22. package/dist/core/attr/attr-definition.embedded.d.ts.map +1 -0
  23. package/dist/core/attr/attr-definition.embedded.js +60 -0
  24. package/dist/core/attr/attr-definition.embedded.js.map +1 -0
  25. package/dist/core/documentation/doc-constants.d.ts +3 -2
  26. package/dist/core/documentation/doc-constants.d.ts.map +1 -1
  27. package/dist/core/documentation/doc-constants.js +3 -1
  28. package/dist/core/documentation/doc-constants.js.map +1 -1
  29. package/dist/core/documentation/doc-provider.d.ts.map +1 -1
  30. package/dist/core/documentation/doc-provider.js +6 -2
  31. package/dist/core/documentation/doc-provider.js.map +1 -1
  32. package/dist/core/documentation/doc-schema.d.ts +1 -1
  33. package/dist/core/documentation/doc-schema.d.ts.map +1 -1
  34. package/dist/core/documentation/doc-schema.js +13 -5
  35. package/dist/core/documentation/doc-schema.js.map +1 -1
  36. package/dist/core/documentation/documentation-definition.embedded.d.ts +3 -0
  37. package/dist/core/documentation/documentation-definition.embedded.d.ts.map +1 -0
  38. package/dist/core/documentation/documentation-definition.embedded.js +79 -0
  39. package/dist/core/documentation/documentation-definition.embedded.js.map +1 -0
  40. package/dist/core/field/field-constants.d.ts +7 -4
  41. package/dist/core/field/field-constants.d.ts.map +1 -1
  42. package/dist/core/field/field-constants.js +7 -7
  43. package/dist/core/field/field-constants.js.map +1 -1
  44. package/dist/core/field/field-definition.embedded.d.ts +3 -0
  45. package/dist/core/field/field-definition.embedded.d.ts.map +1 -0
  46. package/dist/core/field/field-definition.embedded.js +236 -0
  47. package/dist/core/field/field-definition.embedded.js.map +1 -0
  48. package/dist/core/field/field-schema.d.ts +0 -16
  49. package/dist/core/field/field-schema.d.ts.map +1 -1
  50. package/dist/core/field/field-schema.js +10 -158
  51. package/dist/core/field/field-schema.js.map +1 -1
  52. package/dist/core/field/meta-field.d.ts.map +1 -1
  53. package/dist/core/field/meta-field.js +7 -5
  54. package/dist/core/field/meta-field.js.map +1 -1
  55. package/dist/core/file-meta-data-loader.d.ts +18 -0
  56. package/dist/core/file-meta-data-loader.d.ts.map +1 -0
  57. package/dist/core/file-meta-data-loader.js +81 -0
  58. package/dist/core/file-meta-data-loader.js.map +1 -0
  59. package/dist/core/file-source.d.ts +12 -0
  60. package/dist/core/file-source.d.ts.map +1 -0
  61. package/dist/core/file-source.js +46 -0
  62. package/dist/core/file-source.js.map +1 -0
  63. package/dist/core/identity/identity-definition.embedded.d.ts +3 -0
  64. package/dist/core/identity/identity-definition.embedded.d.ts.map +1 -0
  65. package/dist/core/identity/identity-definition.embedded.js +91 -0
  66. package/dist/core/identity/identity-definition.embedded.js.map +1 -0
  67. package/dist/core/identity/identity-schema.d.ts.map +1 -1
  68. package/dist/core/identity/identity-schema.js +3 -2
  69. package/dist/core/identity/identity-schema.js.map +1 -1
  70. package/dist/core/identity/validate-identity-passthrough.d.ts +42 -0
  71. package/dist/core/identity/validate-identity-passthrough.d.ts.map +1 -0
  72. package/dist/core/identity/validate-identity-passthrough.js +158 -0
  73. package/dist/core/identity/validate-identity-passthrough.js.map +1 -0
  74. package/dist/core/object/object-constants.d.ts +2 -1
  75. package/dist/core/object/object-constants.d.ts.map +1 -1
  76. package/dist/core/object/object-constants.js +3 -0
  77. package/dist/core/object/object-constants.js.map +1 -1
  78. package/dist/core/object/object-definition.embedded.d.ts +3 -0
  79. package/dist/core/object/object-definition.embedded.d.ts.map +1 -0
  80. package/dist/core/object/object-definition.embedded.js +110 -0
  81. package/dist/core/object/object-definition.embedded.js.map +1 -0
  82. package/dist/core/object/validate-discriminator.d.ts.map +1 -1
  83. package/dist/core/object/validate-discriminator.js +1 -3
  84. package/dist/core/object/validate-discriminator.js.map +1 -1
  85. package/dist/core/query/query-constants.d.ts.map +1 -1
  86. package/dist/core/query/query-constants.js +5 -3
  87. package/dist/core/query/query-constants.js.map +1 -1
  88. package/dist/core/relationship/derive-m2m-fields.d.ts +26 -0
  89. package/dist/core/relationship/derive-m2m-fields.d.ts.map +1 -0
  90. package/dist/core/relationship/derive-m2m-fields.js +102 -0
  91. package/dist/core/relationship/derive-m2m-fields.js.map +1 -0
  92. package/dist/core/relationship/meta-relationship.d.ts +6 -4
  93. package/dist/core/relationship/meta-relationship.d.ts.map +1 -1
  94. package/dist/core/relationship/meta-relationship.js +12 -8
  95. package/dist/core/relationship/meta-relationship.js.map +1 -1
  96. package/dist/core/relationship/relationship-constants.d.ts +6 -2
  97. package/dist/core/relationship/relationship-constants.d.ts.map +1 -1
  98. package/dist/core/relationship/relationship-constants.js +6 -2
  99. package/dist/core/relationship/relationship-constants.js.map +1 -1
  100. package/dist/core/relationship/relationship-definition.embedded.d.ts +3 -0
  101. package/dist/core/relationship/relationship-definition.embedded.d.ts.map +1 -0
  102. package/dist/core/relationship/relationship-definition.embedded.js +310 -0
  103. package/dist/core/relationship/relationship-definition.embedded.js.map +1 -0
  104. package/dist/core/relationship/relationship-schema.d.ts.map +1 -1
  105. package/dist/core/relationship/relationship-schema.js +13 -7
  106. package/dist/core/relationship/relationship-schema.js.map +1 -1
  107. package/dist/core/validator/validator-definition.embedded.d.ts +3 -0
  108. package/dist/core/validator/validator-definition.embedded.d.ts.map +1 -0
  109. package/dist/core/validator/validator-definition.embedded.js +134 -0
  110. package/dist/core/validator/validator-definition.embedded.js.map +1 -0
  111. package/dist/core/yaml-desugar.d.ts.map +1 -1
  112. package/dist/core/yaml-desugar.js +88 -10
  113. package/dist/core/yaml-desugar.js.map +1 -1
  114. package/dist/core-attr-schemas.d.ts +22 -0
  115. package/dist/core-attr-schemas.d.ts.map +1 -0
  116. package/dist/core-attr-schemas.js +324 -0
  117. package/dist/core-attr-schemas.js.map +1 -0
  118. package/dist/core-types.d.ts +5 -2
  119. package/dist/core-types.d.ts.map +1 -1
  120. package/dist/core-types.js +261 -115
  121. package/dist/core-types.js.map +1 -1
  122. package/dist/db/db-attr-schemas.d.ts +8 -0
  123. package/dist/db/db-attr-schemas.d.ts.map +1 -0
  124. package/dist/db/db-attr-schemas.js +26 -0
  125. package/dist/db/db-attr-schemas.js.map +1 -0
  126. package/dist/db/db-provider.d.ts +3 -0
  127. package/dist/db/db-provider.d.ts.map +1 -0
  128. package/dist/db/db-provider.js +28 -0
  129. package/dist/db/db-provider.js.map +1 -0
  130. package/dist/errors.d.ts +1 -1
  131. package/dist/errors.d.ts.map +1 -1
  132. package/dist/errors.js +78 -0
  133. package/dist/errors.js.map +1 -1
  134. package/dist/index.d.ts +17 -2
  135. package/dist/index.d.ts.map +1 -1
  136. package/dist/index.js +26 -1
  137. package/dist/index.js.map +1 -1
  138. package/dist/library/embedded-library.generated.d.ts +2 -0
  139. package/dist/library/embedded-library.generated.d.ts.map +1 -0
  140. package/dist/library/embedded-library.generated.js +11 -0
  141. package/dist/library/embedded-library.generated.js.map +1 -0
  142. package/dist/library/library-sources.d.ts +12 -0
  143. package/dist/library/library-sources.d.ts.map +1 -0
  144. package/dist/library/library-sources.js +88 -0
  145. package/dist/library/library-sources.js.map +1 -0
  146. package/dist/loader/meta-data-loader.d.ts +10 -2
  147. package/dist/loader/meta-data-loader.d.ts.map +1 -1
  148. package/dist/loader/meta-data-loader.js +47 -6
  149. package/dist/loader/meta-data-loader.js.map +1 -1
  150. package/dist/loader/shortcuts.d.ts +2 -5
  151. package/dist/loader/shortcuts.d.ts.map +1 -1
  152. package/dist/loader/shortcuts.js.map +1 -1
  153. package/dist/loader/validation-passes.d.ts +3 -0
  154. package/dist/loader/validation-passes.d.ts.map +1 -1
  155. package/dist/loader/validation-passes.js +513 -33
  156. package/dist/loader/validation-passes.js.map +1 -1
  157. package/dist/meta/find-reference.d.ts +22 -0
  158. package/dist/meta/find-reference.d.ts.map +1 -0
  159. package/dist/meta/find-reference.js +29 -0
  160. package/dist/meta/find-reference.js.map +1 -0
  161. package/dist/meta/meta-attr.d.ts +8 -0
  162. package/dist/meta/meta-attr.d.ts.map +1 -0
  163. package/dist/meta/meta-attr.js +17 -0
  164. package/dist/meta/meta-attr.js.map +1 -0
  165. package/dist/meta/meta-data.d.ts +107 -0
  166. package/dist/meta/meta-data.d.ts.map +1 -0
  167. package/dist/meta/meta-data.js +302 -0
  168. package/dist/meta/meta-data.js.map +1 -0
  169. package/dist/meta/meta-field.d.ts +48 -0
  170. package/dist/meta/meta-field.d.ts.map +1 -0
  171. package/dist/meta/meta-field.js +94 -0
  172. package/dist/meta/meta-field.js.map +1 -0
  173. package/dist/meta/meta-identity.d.ts +71 -0
  174. package/dist/meta/meta-identity.d.ts.map +1 -0
  175. package/dist/meta/meta-identity.js +129 -0
  176. package/dist/meta/meta-identity.js.map +1 -0
  177. package/dist/meta/meta-layout.d.ts +23 -0
  178. package/dist/meta/meta-layout.d.ts.map +1 -0
  179. package/dist/meta/meta-layout.js +45 -0
  180. package/dist/meta/meta-layout.js.map +1 -0
  181. package/dist/meta/meta-object.d.ts +40 -0
  182. package/dist/meta/meta-object.d.ts.map +1 -0
  183. package/dist/meta/meta-object.js +81 -0
  184. package/dist/meta/meta-object.js.map +1 -0
  185. package/dist/meta/meta-origin.d.ts +32 -0
  186. package/dist/meta/meta-origin.d.ts.map +1 -0
  187. package/dist/meta/meta-origin.js +55 -0
  188. package/dist/meta/meta-origin.js.map +1 -0
  189. package/dist/meta/meta-relationship.d.ts +11 -0
  190. package/dist/meta/meta-relationship.d.ts.map +1 -0
  191. package/dist/meta/meta-relationship.js +27 -0
  192. package/dist/meta/meta-relationship.js.map +1 -0
  193. package/dist/meta/meta-root.d.ts +12 -0
  194. package/dist/meta/meta-root.d.ts.map +1 -0
  195. package/dist/meta/meta-root.js +24 -0
  196. package/dist/meta/meta-root.js.map +1 -0
  197. package/dist/meta/meta-source.d.ts +18 -0
  198. package/dist/meta/meta-source.d.ts.map +1 -0
  199. package/dist/meta/meta-source.js +31 -0
  200. package/dist/meta/meta-source.js.map +1 -0
  201. package/dist/meta/meta-validator.d.ts +29 -0
  202. package/dist/meta/meta-validator.d.ts.map +1 -0
  203. package/dist/meta/meta-validator.js +49 -0
  204. package/dist/meta/meta-validator.js.map +1 -0
  205. package/dist/meta/meta-view.d.ts +4 -0
  206. package/dist/meta/meta-view.d.ts.map +1 -0
  207. package/dist/meta/meta-view.js +8 -0
  208. package/dist/meta/meta-view.js.map +1 -0
  209. package/dist/metamodel-docs/index.d.ts +19 -0
  210. package/dist/metamodel-docs/index.d.ts.map +1 -0
  211. package/dist/metamodel-docs/index.js +37 -0
  212. package/dist/metamodel-docs/index.js.map +1 -0
  213. package/dist/metamodel-docs/provenance.d.ts +42 -0
  214. package/dist/metamodel-docs/provenance.d.ts.map +1 -0
  215. package/dist/metamodel-docs/provenance.js +148 -0
  216. package/dist/metamodel-docs/provenance.js.map +1 -0
  217. package/dist/metamodel-docs/provider-definitions.d.ts +8 -0
  218. package/dist/metamodel-docs/provider-definitions.d.ts.map +1 -0
  219. package/dist/metamodel-docs/provider-definitions.js +48 -0
  220. package/dist/metamodel-docs/provider-definitions.js.map +1 -0
  221. package/dist/metamodel-docs/render.d.ts +12 -0
  222. package/dist/metamodel-docs/render.d.ts.map +1 -0
  223. package/dist/metamodel-docs/render.js +252 -0
  224. package/dist/metamodel-docs/render.js.map +1 -0
  225. package/dist/naming-refs.d.ts +41 -0
  226. package/dist/naming-refs.d.ts.map +1 -0
  227. package/dist/naming-refs.js +144 -0
  228. package/dist/naming-refs.js.map +1 -0
  229. package/dist/naming.d.ts.map +1 -1
  230. package/dist/naming.js +10 -2
  231. package/dist/naming.js.map +1 -1
  232. package/dist/parser-core.d.ts.map +1 -1
  233. package/dist/parser-core.js +74 -8
  234. package/dist/parser-core.js.map +1 -1
  235. package/dist/persistence/db/db-attr-schemas.d.ts +8 -0
  236. package/dist/persistence/db/db-attr-schemas.d.ts.map +1 -0
  237. package/dist/persistence/db/db-attr-schemas.js +28 -0
  238. package/dist/persistence/db/db-attr-schemas.js.map +1 -0
  239. package/dist/persistence/db/db-definition.embedded.d.ts +3 -0
  240. package/dist/persistence/db/db-definition.embedded.d.ts.map +1 -0
  241. package/dist/persistence/db/db-definition.embedded.js +170 -0
  242. package/dist/persistence/db/db-definition.embedded.js.map +1 -0
  243. package/dist/persistence/db/db-provider.d.ts.map +1 -1
  244. package/dist/persistence/db/db-provider.js +13 -18
  245. package/dist/persistence/db/db-provider.js.map +1 -1
  246. package/dist/persistence/db/db-schema.d.ts +14 -0
  247. package/dist/persistence/db/db-schema.d.ts.map +1 -1
  248. package/dist/persistence/db/db-schema.js +27 -0
  249. package/dist/persistence/db/db-schema.js.map +1 -1
  250. package/dist/persistence/origin/origin-definition.embedded.d.ts +3 -0
  251. package/dist/persistence/origin/origin-definition.embedded.d.ts.map +1 -0
  252. package/dist/persistence/origin/origin-definition.embedded.js +88 -0
  253. package/dist/persistence/origin/origin-definition.embedded.js.map +1 -0
  254. package/dist/persistence/origin/origin-schema.d.ts.map +1 -1
  255. package/dist/persistence/origin/origin-schema.js +7 -3
  256. package/dist/persistence/origin/origin-schema.js.map +1 -1
  257. package/dist/persistence/source/source-definition.embedded.d.ts +3 -0
  258. package/dist/persistence/source/source-definition.embedded.d.ts.map +1 -0
  259. package/dist/persistence/source/source-definition.embedded.js +17 -0
  260. package/dist/persistence/source/source-definition.embedded.js.map +1 -0
  261. package/dist/persistence/source/validate-source-parameter-ref.d.ts.map +1 -1
  262. package/dist/persistence/source/validate-source-parameter-ref.js +7 -1
  263. package/dist/persistence/source/validate-source-parameter-ref.js.map +1 -1
  264. package/dist/persistence/source/validate-source-roles.d.ts.map +1 -1
  265. package/dist/persistence/source/validate-source-roles.js +16 -1
  266. package/dist/persistence/source/validate-source-roles.js.map +1 -1
  267. package/dist/presentation/layout/layout-definition.embedded.d.ts +3 -0
  268. package/dist/presentation/layout/layout-definition.embedded.d.ts.map +1 -0
  269. package/dist/presentation/layout/layout-definition.embedded.js +16 -0
  270. package/dist/presentation/layout/layout-definition.embedded.js.map +1 -0
  271. package/dist/presentation/layout/layout-schema.d.ts.map +1 -1
  272. package/dist/presentation/layout/layout-schema.js +3 -2
  273. package/dist/presentation/layout/layout-schema.js.map +1 -1
  274. package/dist/presentation/ui/ui-definition.embedded.d.ts +3 -0
  275. package/dist/presentation/ui/ui-definition.embedded.d.ts.map +1 -0
  276. package/dist/presentation/ui/ui-definition.embedded.js +114 -0
  277. package/dist/presentation/ui/ui-definition.embedded.js.map +1 -0
  278. package/dist/presentation/ui/ui-provider.d.ts +3 -0
  279. package/dist/presentation/ui/ui-provider.d.ts.map +1 -0
  280. package/dist/presentation/ui/ui-provider.js +21 -0
  281. package/dist/presentation/ui/ui-provider.js.map +1 -0
  282. package/dist/presentation/ui/ui-schema.d.ts +10 -0
  283. package/dist/presentation/ui/ui-schema.d.ts.map +1 -0
  284. package/dist/presentation/ui/ui-schema.js +41 -0
  285. package/dist/presentation/ui/ui-schema.js.map +1 -0
  286. package/dist/presentation/view/view-definition.embedded.d.ts +3 -0
  287. package/dist/presentation/view/view-definition.embedded.d.ts.map +1 -0
  288. package/dist/presentation/view/view-definition.embedded.js +76 -0
  289. package/dist/presentation/view/view-definition.embedded.js.map +1 -0
  290. package/dist/provider-data.d.ts +169 -0
  291. package/dist/provider-data.d.ts.map +1 -0
  292. package/dist/provider-data.js +269 -0
  293. package/dist/provider-data.js.map +1 -0
  294. package/dist/provider.d.ts +3 -1
  295. package/dist/provider.d.ts.map +1 -1
  296. package/dist/provider.js +15 -1
  297. package/dist/provider.js.map +1 -1
  298. package/dist/registry-coverage.d.ts +99 -0
  299. package/dist/registry-coverage.d.ts.map +1 -0
  300. package/dist/registry-coverage.js +294 -0
  301. package/dist/registry-coverage.js.map +1 -0
  302. package/dist/registry-manifest-exclusions.d.ts +62 -0
  303. package/dist/registry-manifest-exclusions.d.ts.map +1 -0
  304. package/dist/registry-manifest-exclusions.js +163 -0
  305. package/dist/registry-manifest-exclusions.js.map +1 -0
  306. package/dist/registry-manifest.d.ts +117 -0
  307. package/dist/registry-manifest.d.ts.map +1 -0
  308. package/dist/registry-manifest.js +242 -0
  309. package/dist/registry-manifest.js.map +1 -0
  310. package/dist/registry.d.ts +60 -2
  311. package/dist/registry.d.ts.map +1 -1
  312. package/dist/registry.js +37 -1
  313. package/dist/registry.js.map +1 -1
  314. package/dist/shared/structural.d.ts +7 -0
  315. package/dist/shared/structural.d.ts.map +1 -1
  316. package/dist/shared/structural.js +7 -0
  317. package/dist/shared/structural.js.map +1 -1
  318. package/dist/subtype-rules.d.ts.map +1 -1
  319. package/dist/subtype-rules.js +97 -13
  320. package/dist/subtype-rules.js.map +1 -1
  321. package/dist/super-resolve.d.ts +49 -2
  322. package/dist/super-resolve.d.ts.map +1 -1
  323. package/dist/super-resolve.js +128 -43
  324. package/dist/super-resolve.js.map +1 -1
  325. package/dist/template/meta-template.d.ts +3 -2
  326. package/dist/template/meta-template.d.ts.map +1 -1
  327. package/dist/template/meta-template.js +3 -2
  328. package/dist/template/meta-template.js.map +1 -1
  329. package/dist/template/prompt-definition.embedded.d.ts +3 -0
  330. package/dist/template/prompt-definition.embedded.d.ts.map +1 -0
  331. package/dist/template/prompt-definition.embedded.js +368 -0
  332. package/dist/template/prompt-definition.embedded.js.map +1 -0
  333. package/dist/template/prompt-provider.d.ts +3 -0
  334. package/dist/template/prompt-provider.d.ts.map +1 -0
  335. package/dist/template/prompt-provider.js +25 -0
  336. package/dist/template/prompt-provider.js.map +1 -0
  337. package/dist/template/prompt-schema.d.ts +20 -0
  338. package/dist/template/prompt-schema.d.ts.map +1 -0
  339. package/dist/template/prompt-schema.js +70 -0
  340. package/dist/template/prompt-schema.js.map +1 -0
  341. package/dist/template/template-constants.d.ts +2 -0
  342. package/dist/template/template-constants.d.ts.map +1 -1
  343. package/dist/template/template-constants.js +7 -0
  344. package/dist/template/template-constants.js.map +1 -1
  345. package/dist/template/template-definition.embedded.d.ts +3 -0
  346. package/dist/template/template-definition.embedded.d.ts.map +1 -0
  347. package/dist/template/template-definition.embedded.js +30 -0
  348. package/dist/template/template-definition.embedded.js.map +1 -0
  349. package/dist/template/template-schema.d.ts.map +1 -1
  350. package/dist/template/template-schema.js +12 -4
  351. package/dist/template/template-schema.js.map +1 -1
  352. package/package.json +33 -22
  353. package/src/attr-schema-validate.ts +96 -4
  354. package/src/constraint-merge.ts +0 -0
  355. package/src/constraint-validate.ts +363 -0
  356. package/src/core/attr/attr-constants.ts +15 -3
  357. package/src/core/attr/attr-definition.embedded.ts +67 -0
  358. package/src/core/documentation/doc-constants.ts +3 -1
  359. package/src/core/documentation/doc-provider.ts +6 -2
  360. package/src/core/documentation/documentation-definition.embedded.ts +86 -0
  361. package/src/core/field/field-constants.ts +8 -7
  362. package/src/core/field/field-definition.embedded.ts +243 -0
  363. package/src/core/field/meta-field.ts +6 -7
  364. package/src/core/identity/identity-definition.embedded.ts +98 -0
  365. package/src/core/identity/validate-identity-passthrough.ts +194 -0
  366. package/src/core/object/object-constants.ts +3 -0
  367. package/src/core/object/object-definition.embedded.ts +117 -0
  368. package/src/core/object/validate-discriminator.ts +0 -4
  369. package/src/core/query/query-constants.ts +5 -3
  370. package/src/core/relationship/derive-m2m-fields.ts +145 -0
  371. package/src/core/relationship/meta-relationship.ts +15 -9
  372. package/src/core/relationship/relationship-constants.ts +6 -2
  373. package/src/core/relationship/relationship-definition.embedded.ts +317 -0
  374. package/src/core/validator/validator-definition.embedded.ts +141 -0
  375. package/src/core/yaml-desugar.ts +96 -7
  376. package/src/core-types.ts +289 -150
  377. package/src/errors.ts +78 -0
  378. package/src/index.ts +47 -2
  379. package/src/library/embedded-library.generated.ts +10 -0
  380. package/src/library/library-sources.ts +97 -0
  381. package/src/loader/meta-data-loader.ts +66 -7
  382. package/src/loader/shortcuts.ts +2 -2
  383. package/src/loader/validation-passes.ts +679 -33
  384. package/src/metamodel-docs/index.ts +41 -0
  385. package/src/metamodel-docs/provenance.ts +187 -0
  386. package/src/metamodel-docs/provider-definitions.ts +50 -0
  387. package/src/metamodel-docs/render.ts +309 -0
  388. package/src/naming-refs.ts +162 -0
  389. package/src/naming.ts +10 -2
  390. package/src/parser-core.ts +86 -8
  391. package/src/persistence/db/db-definition.embedded.ts +177 -0
  392. package/src/persistence/db/db-provider.ts +13 -18
  393. package/src/persistence/origin/origin-definition.embedded.ts +95 -0
  394. package/src/persistence/source/source-definition.embedded.ts +24 -0
  395. package/src/persistence/source/validate-source-parameter-ref.ts +7 -1
  396. package/src/persistence/source/validate-source-roles.ts +22 -1
  397. package/src/presentation/layout/layout-definition.embedded.ts +23 -0
  398. package/src/presentation/ui/ui-definition.embedded.ts +121 -0
  399. package/src/presentation/ui/ui-provider.ts +25 -0
  400. package/src/presentation/view/view-definition.embedded.ts +83 -0
  401. package/src/provider-data.ts +446 -0
  402. package/src/provider.ts +18 -0
  403. package/src/registry-coverage.ts +430 -0
  404. package/src/registry-manifest-exclusions.ts +176 -0
  405. package/src/registry-manifest.ts +334 -0
  406. package/src/registry.ts +90 -3
  407. package/src/shared/structural.ts +8 -0
  408. package/src/subtype-rules.ts +135 -18
  409. package/src/super-resolve.ts +153 -43
  410. package/src/template/meta-template.ts +3 -2
  411. package/src/template/prompt-definition.embedded.ts +375 -0
  412. package/src/template/prompt-provider.ts +29 -0
  413. package/src/template/template-constants.ts +8 -0
  414. package/src/template/template-definition.embedded.ts +37 -0
  415. package/src/core/documentation/doc-schema.ts +0 -64
  416. package/src/core/field/field-schema.ts +0 -228
  417. package/src/core/identity/identity-schema.ts +0 -80
  418. package/src/core/object/object-schema.ts +0 -35
  419. package/src/core/relationship/relationship-schema.ts +0 -67
  420. package/src/core/validator/validator-schema.ts +0 -50
  421. package/src/persistence/db/db-schema.ts +0 -50
  422. package/src/persistence/origin/origin-schema.ts +0 -80
  423. package/src/persistence/source/source-schema.ts +0 -129
  424. package/src/presentation/layout/layout-schema.ts +0 -62
  425. package/src/presentation/view/view-schema.ts +0 -21
  426. package/src/template/template-schema.ts +0 -211
@@ -0,0 +1,117 @@
1
+ import type { TypeRegistry } from "./registry.js";
2
+ import { ExclusionReason } from "./registry-manifest-exclusions.js";
3
+ /** One attribute in the manifest — the logical, cross-port-identical facet. */
4
+ interface ManifestAttr {
5
+ name: string;
6
+ /** The attr's SCALAR value-type subtype, or null for a polymorphic/untyped attr (e.g. @default). */
7
+ valueType: string | null;
8
+ /** True for an array-valued attr (a list of the scalar `valueType`); the orthogonal array axis. */
9
+ isArray: boolean;
10
+ required: boolean;
11
+ /** FR-033 — human/AI-facing description of the attribute (required, non-empty). */
12
+ description: string;
13
+ /** FR-033 — prose documenting the complex rules enforced in code. Emitted only when present. */
14
+ rules?: string;
15
+ /** FR-033 — an example value. Emitted only when present. */
16
+ example?: string;
17
+ /** FR-033 — guidance on when to reach for this attribute. Emitted only when present. */
18
+ whenToUse?: string;
19
+ }
20
+ /** One structural child rule of a type (FR-033 constraint graph). */
21
+ interface ManifestChild {
22
+ /** The admitted child `type` (`"*"` = any). */
23
+ childType: string;
24
+ /** The admitted child subType — a single subtype, `"*"` (any), or a list of admitted subtypes. */
25
+ childSubType: string | readonly string[];
26
+ /** The admitted child name (`"*"` = any). */
27
+ childName: string;
28
+ /** Cardinality lower bound — emitted only when defined on the rule. */
29
+ min?: number;
30
+ /** Cardinality upper bound (`null` = unbounded) — emitted only when defined on the rule. */
31
+ max?: number | null;
32
+ /** Whether the child must carry an explicit name — emitted only when defined on the rule. */
33
+ named?: boolean;
34
+ }
35
+ /** One registered (type, subType) in the manifest, with its docs + attrs + constraint graph. */
36
+ interface ManifestType {
37
+ type: string;
38
+ subType: string;
39
+ /** FR-033 — human/AI-facing description of the type/subType (required, non-empty). */
40
+ description: string;
41
+ /** FR-033 — prose documenting the complex rules enforced in code. Emitted only when present. */
42
+ rules?: string;
43
+ /** FR-033 — an example. Emitted only when present. */
44
+ example?: string;
45
+ /** FR-033 — guidance on when to reach for this type/subType. Emitted only when present. */
46
+ whenToUse?: string;
47
+ attrs: ManifestAttr[];
48
+ /** FR-033 — the type's structural child rules (sorted), the constraint graph. */
49
+ children: ManifestChild[];
50
+ /** FR-033 — the child-side placement claim (sorted). Emitted only when present + non-empty. */
51
+ parents?: string[];
52
+ }
53
+ /** The full canonical manifest. All collections are sorted for byte-stability. */
54
+ interface RegistryManifest {
55
+ types: ManifestType[];
56
+ commonAttrs: ManifestAttr[];
57
+ defaultSubTypes: Record<string, string>;
58
+ }
59
+ /**
60
+ * The boundary classifier (Wave 3b). For every per-type attr the emitter
61
+ * encounters, the in/out decision is an EXPLICIT classification — never a silent
62
+ * default. Returns either an `ExclusionReason` (carved out, with a documented
63
+ * category) or `INCLUDED` (logical cross-port vocabulary). It is TOTAL: there is
64
+ * no "unclassified" third state, so a port can never silently let an unreasoned
65
+ * facet through — the self-documenting property the conformance test asserts.
66
+ *
67
+ * This replaces the prior tautology — a bare `EXCLUDED.has(name)` whose negative
68
+ * branch silently meant "logical". The decision is now centralized and reasoned;
69
+ * the cross-port byte-canonical + ADR-0023 (sealed agreed-vocabulary registry)
70
+ * together guarantee that an `INCLUDED` attr really is agreed vocabulary rather
71
+ * than an accidental registration, so inclusion-by-classification is sound.
72
+ *
73
+ * NOTE on liveness: a per-type attr exclusion (e.g. `extends`, `object`) is a
74
+ * CROSS-PORT carve-out that only the OO ports (Java/Kotlin) physically register;
75
+ * TS/C#/Python never register those names, so a single port's emitter cannot
76
+ * judge a carve-out "dead" — that is a cross-port property, asserted by the
77
+ * shared byte-canonical, not here.
78
+ */
79
+ declare const INCLUDED: "included";
80
+ export type AttrClassification = ExclusionReason | typeof INCLUDED;
81
+ export declare function classifyPerTypeAttr(name: string): AttrClassification;
82
+ /**
83
+ * Build the canonical registry manifest object from an assembled registry.
84
+ *
85
+ * The registry must already be composed (e.g. `composeRegistry(coreProviders)`)
86
+ * so all providers — core types, db-domain attrs, common doc attrs — have run.
87
+ */
88
+ export declare function buildRegistryManifest(registry: TypeRegistry): RegistryManifest;
89
+ /**
90
+ * Emit the canonical registry manifest as a byte-stable JSON string.
91
+ *
92
+ * Serialization contract — every port MUST match this exactly:
93
+ * - 2-space indentation (JSON.stringify(_, _, 2)).
94
+ * - Object keys in a fixed order (JSON.stringify preserves insertion order):
95
+ * the manifest is built with `types`, `commonAttrs`, `defaultSubTypes`.
96
+ * - Each attr: `name`, `valueType`, `isArray`, `required`, `description`,
97
+ * then optional `rules`, `example`, `whenToUse` (each omitted when absent).
98
+ * - Each type: `type`, `subType`, `description`, then optional `rules`,
99
+ * `example`, `whenToUse` (omitted when absent), then `attrs`, `children`,
100
+ * then optional `parents` (omitted when absent/empty).
101
+ * - Each child (FR-033 constraint graph): `childType`, `childSubType`,
102
+ * `childName`, then optional `min`, `max`, `named` (each emitted ONLY when
103
+ * defined on the rule — legacy wildcard rules omit all three; `max: null`
104
+ * is emitted when the rule sets it null, omitted when undefined).
105
+ * - All arrays sorted: `types` by "type.subType"; each `attrs` by name;
106
+ * each type's `children` by the tuple (childType, childSubTypeKey, childName)
107
+ * where childSubTypeKey is the string or the comma-joined list; `parents`
108
+ * ascending; `commonAttrs` by name; `defaultSubTypes` keys sorted.
109
+ * - `valueType: null` literal for polymorphic/untyped attrs.
110
+ * - `childSubType` is a string OR a string[] (a list of admitted subtypes).
111
+ * - `description` is required + non-empty on every type and attr (gated by the
112
+ * coverage assertion in registry-conformance.test.ts — mirrors ADR-0023).
113
+ * - A single trailing newline (matches the repo's committed-canonical style).
114
+ */
115
+ export declare function emitRegistryManifest(registry: TypeRegistry): string;
116
+ export {};
117
+ //# sourceMappingURL=registry-manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-manifest.d.ts","sourceRoot":"","sources":["../src/registry-manifest.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAyC,YAAY,EAAE,MAAM,eAAe,CAAC;AAEzF,OAAO,EAEL,eAAe,EAGhB,MAAM,mCAAmC,CAAC;AAE3C,+EAA+E;AAC/E,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,oGAAoG;IACpG,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mGAAmG;IACnG,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;IACpB,gGAAgG;IAChG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qEAAqE;AACrE,UAAU,aAAa;IACrB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,kGAAkG;IAClG,YAAY,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACzC,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4FAA4F;IAC5F,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,6FAA6F;IAC7F,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,gGAAgG;AAChG,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,sFAAsF;IACtF,WAAW,EAAE,MAAM,CAAC;IACpB,gGAAgG;IAChG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,iFAAiF;IACjF,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,+FAA+F;IAC/F,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,kFAAkF;AAClF,UAAU,gBAAgB;IACxB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,WAAW,EAAE,YAAY,EAAE,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAgHD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,QAAA,MAAM,QAAQ,EAAG,UAAmB,CAAC;AACrC,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG,OAAO,QAAQ,CAAC;AAEnE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAEpE;AA6BD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,YAAY,GAAG,gBAAgB,CAqC9E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAGnE"}
@@ -0,0 +1,242 @@
1
+ // SP-G Registry Conformance — the TS reference emitter.
2
+ //
3
+ // Walks an assembled core TypeRegistry and serializes the LOGICAL metamodel
4
+ // vocabulary as a canonical, fully-sorted, byte-stable JSON manifest. This is
5
+ // the single-source contract the other four ports (C#, Java, Kotlin, Python)
6
+ // must byte-match — a structural gate against the SP-C class of silent
7
+ // vocabulary drift (a port's registry diverging — wrong attr names, missing
8
+ // subtypes, different required-ness — with every behavioral corpus still green).
9
+ //
10
+ // The IN/OUT boundary is documented in fixtures/registry-conformance/README.md.
11
+ // In short, the manifest emits: type.subType + per-type/per-attr `description`
12
+ // (FR-033) + attrs[{name, valueType, isArray, required, description, rules?,
13
+ // example?, whenToUse?}] + the structural constraint graph (children / parents /
14
+ // cardinality, FR-033) + commonAttrs + defaultSubTypes. EXCLUDED (per-port-
15
+ // physical or not-universally-tracked-on-the-registry): factories/native
16
+ // bindings; AttrSchema.default and allowedValues (Java's attr model —
17
+ // ChildRequirement — carries neither).
18
+ //
19
+ // FR-033 Task 5 GREW the manifest: it now also emits the documentation surface
20
+ // (every type/attr carries a required, non-empty `description`; optional `rules`/
21
+ // `example`/`whenToUse`) AND the full structural constraint graph (each type's
22
+ // `children` from childRules — childType/childSubType/childName + optional
23
+ // cardinality min/max/named — and optional `parents`). Growing the canonical
24
+ // RED-flags the other four ports' registry-conformance until they reconcile
25
+ // (the intended intermediate state, same as the FR-032 sweep).
26
+ import { ATTR_SUBTYPE_STRING, ATTR_SUBTYPE_STRINGARRAY } from "./core/attr/attr-constants.js";
27
+ import { EXCLUDED_PER_TYPE_ATTRS, ExclusionReason, isExcludedTypeSubType, manifestRequiredOverride, } from "./registry-manifest-exclusions.js";
28
+ /** ASCII-string compare so the sort is locale-independent and byte-stable across ports. */
29
+ function compareStrings(a, b) {
30
+ return a < b ? -1 : a > b ? 1 : 0;
31
+ }
32
+ /**
33
+ * Normalize one AttrSchema to the manifest's logical attr shape — decomposing
34
+ * array-ness into a scalar `valueType` + an orthogonal `isArray` flag.
35
+ *
36
+ * An attr is array-valued when its schema sets `isArray: true` (the cross-port
37
+ * model). For resilience, a legacy `valueType: "stringarray"` token is also
38
+ * decomposed to `{ valueType: "string", isArray: true }` — so no `stringarray`
39
+ * token ever reaches the manifest. A polymorphic attr (no valueType) is `null` +
40
+ * non-array.
41
+ */
42
+ function toManifestAttr(attr) {
43
+ const isLegacyStringArray = attr.valueType === ATTR_SUBTYPE_STRINGARRAY;
44
+ const isArray = attr.isArray === true || isLegacyStringArray;
45
+ // The scalar value-type: a legacy stringarray token collapses to "string";
46
+ // otherwise the declared valueType (omitted → null for polymorphic attrs).
47
+ const valueType = isLegacyStringArray
48
+ ? ATTR_SUBTYPE_STRING
49
+ : (attr.valueType ?? null);
50
+ // FR-033: the documentation surface (`description` required + non-empty;
51
+ // `rules`/`example`/`whenToUse` emitted ONLY when present) follows the
52
+ // existing facets, preserving key order for byte-stability.
53
+ const out = {
54
+ name: attr.name,
55
+ valueType,
56
+ isArray,
57
+ required: attr.required,
58
+ description: attr.description,
59
+ };
60
+ if (attr.rules !== undefined)
61
+ out.rules = attr.rules;
62
+ if (attr.example !== undefined)
63
+ out.example = attr.example;
64
+ if (attr.whenToUse !== undefined)
65
+ out.whenToUse = attr.whenToUse;
66
+ return out;
67
+ }
68
+ /** The canonical sort key for a child rule: childType, then the childSubType
69
+ * string (or comma-joined list), then childName — ASCII codepoint compare. */
70
+ function childSubTypeKey(childSubType) {
71
+ return Array.isArray(childSubType) ? childSubType.join(",") : childSubType;
72
+ }
73
+ /**
74
+ * Normalize one structural ChildRule to the manifest's child shape (FR-033).
75
+ * Cardinality (`min`/`max`/`named`) is emitted ONLY when defined on the rule —
76
+ * legacy wildcard rules leave them undefined and must NOT fabricate cardinality.
77
+ * `max` may legitimately be `null` (unbounded); `null` is emitted, `undefined`
78
+ * is omitted.
79
+ */
80
+ function toManifestChild(rule) {
81
+ const out = {
82
+ childType: rule.childType,
83
+ childSubType: rule.childSubType,
84
+ childName: rule.childName,
85
+ };
86
+ if (rule.min !== undefined)
87
+ out.min = rule.min;
88
+ if (rule.max !== undefined)
89
+ out.max = rule.max;
90
+ if (rule.named !== undefined)
91
+ out.named = rule.named;
92
+ return out;
93
+ }
94
+ /** Sort the constraint graph by (childType, childSubTypeKey, childName) — ASCII. */
95
+ function sortedChildren(rules) {
96
+ return rules
97
+ .map(toManifestChild)
98
+ .sort((a, b) => compareStrings(a.childType, b.childType) ||
99
+ compareStrings(childSubTypeKey(a.childSubType), childSubTypeKey(b.childSubType)) ||
100
+ compareStrings(a.childName, b.childName));
101
+ }
102
+ /** Sort attrs by name (ascending, ASCII). */
103
+ function sortedAttrs(attrs) {
104
+ return attrs
105
+ .map(toManifestAttr)
106
+ .sort((a, b) => compareStrings(a.name, b.name));
107
+ }
108
+ /**
109
+ * Sort PER-TYPE attrs, keeping only those the explicit classification marks
110
+ * INCLUDED (logical cross-port vocabulary). A per-type attr classified with any
111
+ * `ExclusionReason` (structural keyword, native binding, per-type `description`
112
+ * commonAttr dup) is carved out — for a documented reason, never a silent
113
+ * name-match. The filter is a no-op for TS (which never registers the carved-out
114
+ * names as per-type attrs); it is applied uniformly so the cross-port contract
115
+ * is explicit. NOTE: `description` is filtered ONLY here — it remains in the
116
+ * `commonAttrs` block (built via `sortedAttrs`, unfiltered).
117
+ */
118
+ function sortedPerTypeAttrs(attrs, type, subType) {
119
+ return sortedAttrs(attrs.filter((a) => classifyPerTypeAttr(a.name) === INCLUDED)).map((attr) => {
120
+ // FR-024-pending requiredness override (the attr-level analogue of the
121
+ // Fr024Pending row carve-out): the TS registry already registers the
122
+ // FR-024 requiredness, but the manifest keeps emitting the pre-FR-024
123
+ // agreed value until the Phase-E atomic all-ports flip.
124
+ const required = manifestRequiredOverride(type, subType, attr.name);
125
+ return required === undefined ? attr : { ...attr, required };
126
+ });
127
+ }
128
+ /**
129
+ * The boundary classifier (Wave 3b). For every per-type attr the emitter
130
+ * encounters, the in/out decision is an EXPLICIT classification — never a silent
131
+ * default. Returns either an `ExclusionReason` (carved out, with a documented
132
+ * category) or `INCLUDED` (logical cross-port vocabulary). It is TOTAL: there is
133
+ * no "unclassified" third state, so a port can never silently let an unreasoned
134
+ * facet through — the self-documenting property the conformance test asserts.
135
+ *
136
+ * This replaces the prior tautology — a bare `EXCLUDED.has(name)` whose negative
137
+ * branch silently meant "logical". The decision is now centralized and reasoned;
138
+ * the cross-port byte-canonical + ADR-0023 (sealed agreed-vocabulary registry)
139
+ * together guarantee that an `INCLUDED` attr really is agreed vocabulary rather
140
+ * than an accidental registration, so inclusion-by-classification is sound.
141
+ *
142
+ * NOTE on liveness: a per-type attr exclusion (e.g. `extends`, `object`) is a
143
+ * CROSS-PORT carve-out that only the OO ports (Java/Kotlin) physically register;
144
+ * TS/C#/Python never register those names, so a single port's emitter cannot
145
+ * judge a carve-out "dead" — that is a cross-port property, asserted by the
146
+ * shared byte-canonical, not here.
147
+ */
148
+ const INCLUDED = "included";
149
+ export function classifyPerTypeAttr(name) {
150
+ return EXCLUDED_PER_TYPE_ATTRS.get(name) ?? INCLUDED;
151
+ }
152
+ /**
153
+ * Build one manifest type entry from its full TypeDefinition (FR-033). Key order
154
+ * is fixed for byte-stability: `type`, `subType`, `description`, then optional
155
+ * `rules`/`example`/`whenToUse` (emitted only when present), then `attrs`,
156
+ * `children` (the sorted constraint graph), and optional `parents` (emitted only
157
+ * when present + non-empty, sorted ASCII).
158
+ */
159
+ function toManifestType(def) {
160
+ // Build in fixed key order. Optional docs facets (rules/example/whenToUse) sit
161
+ // between `description` and `attrs`, so they are spread into the literal (when
162
+ // present) to preserve insertion order — `attrs`/`children`/`parents` follow.
163
+ const out = {
164
+ type: def.typeId.type,
165
+ subType: def.typeId.subType,
166
+ description: def.description,
167
+ ...(def.rules !== undefined ? { rules: def.rules } : {}),
168
+ ...(def.example !== undefined ? { example: def.example } : {}),
169
+ ...(def.whenToUse !== undefined ? { whenToUse: def.whenToUse } : {}),
170
+ attrs: sortedPerTypeAttrs(def.attributes, def.typeId.type, def.typeId.subType),
171
+ children: sortedChildren(def.childRules),
172
+ };
173
+ if (def.parents !== undefined && def.parents.length > 0) {
174
+ out.parents = [...def.parents].sort(compareStrings);
175
+ }
176
+ return out;
177
+ }
178
+ /**
179
+ * Build the canonical registry manifest object from an assembled registry.
180
+ *
181
+ * The registry must already be composed (e.g. `composeRegistry(coreProviders)`)
182
+ * so all providers — core types, db-domain attrs, common doc attrs — have run.
183
+ */
184
+ export function buildRegistryManifest(registry) {
185
+ // Walk every registered (type, subType). `allTypes()` returns the TypeIds;
186
+ // `find` gives each one's full TypeDefinition (description / attributes /
187
+ // childRules / parents / rules / example / whenToUse) in a single lookup.
188
+ const types = registry
189
+ .allTypes()
190
+ // Skip excluded (type, subType) rows: the `metadata.base` inheritance
191
+ // anchor (C-5) + the generic TS-presentation `view.*` controls (B-2).
192
+ .filter((typeId) => !isExcludedTypeSubType(typeId.type, typeId.subType))
193
+ .map((typeId) => toManifestType(
194
+ // The type IS registered (it came from allTypes()), so find() is defined.
195
+ registry.find(typeId.type, typeId.subType)))
196
+ // Sort by the full "type.subType" key for a stable, port-independent order.
197
+ .sort((a, b) => compareStrings(`${a.type}.${a.subType}`, `${b.type}.${b.subType}`));
198
+ const commonAttrs = sortedAttrs(registry.getCommonAttrs());
199
+ // defaultSubTypes: rebuild with sorted keys so JSON.stringify emits a stable
200
+ // key order. There is no public "all default subTypes" accessor, so derive
201
+ // the candidate type names from the registered types and probe each.
202
+ const typeNames = Array.from(new Set(types.map((t) => t.type))).sort(compareStrings);
203
+ const defaultSubTypes = {};
204
+ for (const typeName of typeNames) {
205
+ const defaultSub = registry.defaultSubTypeOf(typeName);
206
+ if (defaultSub !== undefined) {
207
+ defaultSubTypes[typeName] = defaultSub;
208
+ }
209
+ }
210
+ return { types, commonAttrs, defaultSubTypes };
211
+ }
212
+ /**
213
+ * Emit the canonical registry manifest as a byte-stable JSON string.
214
+ *
215
+ * Serialization contract — every port MUST match this exactly:
216
+ * - 2-space indentation (JSON.stringify(_, _, 2)).
217
+ * - Object keys in a fixed order (JSON.stringify preserves insertion order):
218
+ * the manifest is built with `types`, `commonAttrs`, `defaultSubTypes`.
219
+ * - Each attr: `name`, `valueType`, `isArray`, `required`, `description`,
220
+ * then optional `rules`, `example`, `whenToUse` (each omitted when absent).
221
+ * - Each type: `type`, `subType`, `description`, then optional `rules`,
222
+ * `example`, `whenToUse` (omitted when absent), then `attrs`, `children`,
223
+ * then optional `parents` (omitted when absent/empty).
224
+ * - Each child (FR-033 constraint graph): `childType`, `childSubType`,
225
+ * `childName`, then optional `min`, `max`, `named` (each emitted ONLY when
226
+ * defined on the rule — legacy wildcard rules omit all three; `max: null`
227
+ * is emitted when the rule sets it null, omitted when undefined).
228
+ * - All arrays sorted: `types` by "type.subType"; each `attrs` by name;
229
+ * each type's `children` by the tuple (childType, childSubTypeKey, childName)
230
+ * where childSubTypeKey is the string or the comma-joined list; `parents`
231
+ * ascending; `commonAttrs` by name; `defaultSubTypes` keys sorted.
232
+ * - `valueType: null` literal for polymorphic/untyped attrs.
233
+ * - `childSubType` is a string OR a string[] (a list of admitted subtypes).
234
+ * - `description` is required + non-empty on every type and attr (gated by the
235
+ * coverage assertion in registry-conformance.test.ts — mirrors ADR-0023).
236
+ * - A single trailing newline (matches the repo's committed-canonical style).
237
+ */
238
+ export function emitRegistryManifest(registry) {
239
+ const manifest = buildRegistryManifest(registry);
240
+ return `${JSON.stringify(manifest, null, 2)}\n`;
241
+ }
242
+ //# sourceMappingURL=registry-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-manifest.js","sourceRoot":"","sources":["../src/registry-manifest.ts"],"names":[],"mappings":"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"}
@@ -11,10 +11,25 @@ export declare class TypeId {
11
11
  export interface ChildRule {
12
12
  /** `"*"` matches any type. */
13
13
  childType: string;
14
- /** `"*"` matches any subtype. */
15
- childSubType: string;
14
+ /**
15
+ * `"*"` matches any subtype. A list (FR-033) admits any one of several
16
+ * subtypes (e.g. a `source` child may be `["rdb", "view"]`).
17
+ */
18
+ childSubType: string | readonly string[];
16
19
  /** `"*"` matches any name. */
17
20
  childName: string;
21
+ /**
22
+ * FR-033 — cardinality lower bound. A required child has `min >= 1`. Optional
23
+ * on the interface for back-compat with rules authored before FR-033.
24
+ */
25
+ min?: number;
26
+ /**
27
+ * FR-033 — cardinality upper bound; `null` means unbounded (0..∞). Optional
28
+ * for back-compat.
29
+ */
30
+ max?: number | null;
31
+ /** FR-033 — whether the child must carry an explicit name. */
32
+ named?: boolean;
18
33
  }
19
34
  export interface AttrSchema {
20
35
  /** Attribute name WITHOUT the "@" prefix (e.g. "dbColumn", "currency"). */
@@ -32,6 +47,16 @@ export interface AttrSchema {
32
47
  * attrs. Attempting to register an AttrSchema with `valueType: "base"` throws.
33
48
  */
34
49
  valueType?: AttrSubType;
50
+ /**
51
+ * Whether this attribute is array-valued (a list of the scalar `valueType`).
52
+ *
53
+ * Array-ness is a single orthogonal axis — a `string` attr with `isArray: true`
54
+ * is what was formerly the `stringarray` subtype. The loader coerces an
55
+ * array-flagged attr through the array string-attr coercion (bare-string →
56
+ * one-element array). Mirrors Java's `StringAttribute + @isArray` model.
57
+ * Absent/false = scalar.
58
+ */
59
+ isArray?: boolean;
35
60
  /** Whether this attribute must be present on the node. */
36
61
  required: boolean;
37
62
  /** Default value applied when the attribute is absent. Optional. */
@@ -40,6 +65,12 @@ export interface AttrSchema {
40
65
  allowedValues?: readonly AttrValue[];
41
66
  /** Human/AI-facing description of what the attribute means. */
42
67
  description: string;
68
+ /** FR-033 — prose documenting the complex rules enforced in code. Optional. */
69
+ rules?: string;
70
+ /** FR-033 — an example value, shown only in the provider detail page. Optional. */
71
+ example?: string;
72
+ /** FR-033 — guidance on when to reach for this attribute. Optional. */
73
+ whenToUse?: string;
43
74
  }
44
75
  export interface TypeDefinition {
45
76
  typeId: TypeId;
@@ -50,6 +81,18 @@ export interface TypeDefinition {
50
81
  /** The coarse value-type classification, for (type, subType)s whose nodes
51
82
  * carry a typed value (field, attr). Absent for non-value-bearing types. */
52
83
  dataType?: DataType;
84
+ /**
85
+ * FR-033 — the child-side placement claim: the `type.subType`s under which a
86
+ * node of this type is allowed. Additive (an extension provider names a parent
87
+ * without editing the parent's definition). Optional.
88
+ */
89
+ parents?: readonly string[];
90
+ /** FR-033 — prose documenting the complex rules enforced in code. Optional. */
91
+ rules?: string;
92
+ /** FR-033 — an example, shown only in the provider detail page. Optional. */
93
+ example?: string;
94
+ /** FR-033 — guidance on when to reach for this type/subType. Optional. */
95
+ whenToUse?: string;
53
96
  }
54
97
  export declare class TypeRegistry {
55
98
  /** Keyed by `"type.subType"`. */
@@ -60,6 +103,21 @@ export declare class TypeRegistry {
60
103
  private readonly _defaultSubTypes;
61
104
  /** Attrs accepted on every metatype (declared by providers). */
62
105
  private readonly _commonAttrs;
106
+ /**
107
+ * ADR-0023 Decision 2 — sealed state. Once sealed, every mutating registration
108
+ * method (`register`/`setDefaultSubType`/`registerCommonAttrs`/`extend`) throws
109
+ * `ERR_REGISTRY_SEALED`. The library seals its composed registry after the agreed
110
+ * metamodel providers bootstrap, so nothing can register made-up metamodel
111
+ * attributes post-bootstrap. A downstream app composes its own (unsealed) registry.
112
+ */
113
+ private _sealed;
114
+ /** Seal the registry: every subsequent mutating registration throws
115
+ * `ERR_REGISTRY_SEALED`. Idempotent. Reads are unaffected. */
116
+ seal(): void;
117
+ /** Whether this registry has been sealed (ADR-0023). */
118
+ isSealed(): boolean;
119
+ /** Guard at the top of every mutating registration method. */
120
+ private checkNotSealed;
63
121
  register(def: TypeDefinition): void;
64
122
  find(type: string, subType: string): TypeDefinition | undefined;
65
123
  has(type: string, subType: string): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
package/dist/registry.js CHANGED
@@ -25,7 +25,34 @@ export class TypeRegistry {
25
25
  _defaultSubTypes = new Map();
26
26
  /** Attrs accepted on every metatype (declared by providers). */
27
27
  _commonAttrs = [];
28
+ /**
29
+ * ADR-0023 Decision 2 — sealed state. Once sealed, every mutating registration
30
+ * method (`register`/`setDefaultSubType`/`registerCommonAttrs`/`extend`) throws
31
+ * `ERR_REGISTRY_SEALED`. The library seals its composed registry after the agreed
32
+ * metamodel providers bootstrap, so nothing can register made-up metamodel
33
+ * attributes post-bootstrap. A downstream app composes its own (unsealed) registry.
34
+ */
35
+ _sealed = false;
36
+ /** Seal the registry: every subsequent mutating registration throws
37
+ * `ERR_REGISTRY_SEALED`. Idempotent. Reads are unaffected. */
38
+ seal() {
39
+ this._sealed = true;
40
+ }
41
+ /** Whether this registry has been sealed (ADR-0023). */
42
+ isSealed() {
43
+ return this._sealed;
44
+ }
45
+ /** Guard at the top of every mutating registration method. */
46
+ checkNotSealed(operation) {
47
+ if (this._sealed) {
48
+ throw new MetaModelError(`TypeRegistry is sealed (ADR-0023): ${operation} is not permitted after metamodel ` +
49
+ `bootstrap. Made-up metamodel attributes/types are structurally disallowed — a new ` +
50
+ `metamodel attribute requires a registered provider + human agreement. Downstream apps ` +
51
+ `that need extra vocabulary must compose their own (unsealed) registry.`, { code: "ERR_REGISTRY_SEALED" });
52
+ }
53
+ }
28
54
  register(def) {
55
+ this.checkNotSealed(`register("${def.typeId.toString()}")`);
29
56
  const key = def.typeId.toString();
30
57
  if (this._defs.has(key)) {
31
58
  throw new Error(`TypeRegistry: duplicate registration for "${key}" (type="${def.typeId.type}", subType="${def.typeId.subType}")`);
@@ -64,6 +91,7 @@ export class TypeRegistry {
64
91
  }
65
92
  /** Designate the default subType for a bare `type` key (used by YAML authoring sugar). */
66
93
  setDefaultSubType(type, subType) {
94
+ this.checkNotSealed(`setDefaultSubType("${type}")`);
67
95
  this._defaultSubTypes.set(type, subType);
68
96
  }
69
97
  /** The designated default subType for a type, or undefined if none was designated. */
@@ -82,6 +110,7 @@ export class TypeRegistry {
82
110
  * per-type attrs are resolved at validation time (Task 1.3).
83
111
  */
84
112
  registerCommonAttrs(attrs) {
113
+ this.checkNotSealed("registerCommonAttrs");
85
114
  for (const attr of attrs) {
86
115
  if (attr.valueType === SUBTYPE_BASE) {
87
116
  throw new Error(`TypeRegistry.registerCommonAttrs: attr "${attr.name}" declares valueType "${SUBTYPE_BASE}", ` +
@@ -106,6 +135,7 @@ export class TypeRegistry {
106
135
  * providers to extend types another provider defined.
107
136
  */
108
137
  extend(type, subType, ext) {
138
+ this.checkNotSealed(`extend("${type}.${subType}")`);
109
139
  const def = this.find(type, subType);
110
140
  if (def === undefined) {
111
141
  throw new Error(`TypeRegistry.extend: no registered type "${type}.${subType}" to extend`);
@@ -126,8 +156,14 @@ export class TypeRegistry {
126
156
  }
127
157
  }
128
158
  export function childRuleMatches(rule, child) {
159
+ // FR-033 — childSubType may be a wildcard, a single subtype, or a list of
160
+ // admitted subtypes.
161
+ const subTypeMatches = rule.childSubType === CHILD_RULE_WILDCARD ||
162
+ (Array.isArray(rule.childSubType)
163
+ ? rule.childSubType.includes(child.subType)
164
+ : rule.childSubType === child.subType);
129
165
  return ((rule.childType === CHILD_RULE_WILDCARD || rule.childType === child.type) &&
130
- (rule.childSubType === CHILD_RULE_WILDCARD || rule.childSubType === child.subType) &&
166
+ subTypeMatches &&
131
167
  (rule.childName === CHILD_RULE_WILDCARD || rule.childName === child.name));
132
168
  }
133
169
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAoB,MAAM,+BAA+B,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,OAAO,MAAM;IAEC;IACA;IAFlB,YACkB,IAAY,EACZ,OAAe;QADf,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAQ;IAC9B,CAAC;IAEJ,QAAQ;QACN,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC;IACpE,CAAC;CACF;AAgDD,MAAM,OAAO,YAAY;IACvB,iCAAiC;IAChB,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAE3D,gDAAgD;IAC/B,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEzD,yEAAyE;IACxD,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE9D,gEAAgE;IAC/C,YAAY,GAAiB,EAAE,CAAC;IAEjD,QAAQ,CAAC,GAAmB;QAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,6CAA6C,GAAG,YAAY,GAAG,CAAC,MAAM,CAAC,IAAI,eAAe,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,CACjH,CAAC;QACJ,CAAC;QAED,yEAAyE;QACzE,4EAA4E;QAC5E,+EAA+E;QAC/E,6EAA6E;QAC7E,2EAA2E;QAC3E,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACb,gCAAgC,IAAI,CAAC,IAAI,SAAS,GAAG,yBAAyB,YAAY,KAAK;oBAC/F,iGAAiG,CAClG,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEzB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAY,EAAE,OAAe;QAChC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,OAAe;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,SAAS,CAAC;IAChD,CAAC;IAED,QAAQ;QACN,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClE,CAAC;IAED,aAAa,CAAC,IAAY;QACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,0FAA0F;IAC1F,iBAAiB,CAAC,IAAY,EAAE,OAAe;QAC7C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,sFAAsF;IACtF,gBAAgB,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED;0DACsD;IACtD,OAAO,CAAC,IAAY,EAAE,OAAe;QACnC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;OAKG;IACH,mBAAmB,CAAC,KAAmB;QACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACb,2CAA2C,IAAI,CAAC,IAAI,yBAAyB,YAAY,KAAK;oBAC9F,iGAAiG,CAClG,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtE,SAAS,CAAC,8FAA8F;YAC1G,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED;;yEAEqE;IACrE,cAAc;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CACJ,IAAY,EACZ,OAAe,EACf,GAA4D;QAE5D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,4CAA4C,IAAI,IAAI,OAAO,aAAa,CACzE,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACb,8BAA8B,IAAI,CAAC,IAAI,qBAAqB,IAAI,IAAI,OAAO,yBAAyB,YAAY,KAAK;oBACrH,iGAAiG,CAClG,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrD,MAAM,IAAI,cAAc,CACtB,mCAAmC,IAAI,CAAC,IAAI,6BAA6B,IAAI,IAAI,OAAO,GAAG,EAC3F,EAAE,IAAI,EAAE,4BAA4B,EAAE,CACvC,CAAC;YACJ,CAAC;YACD,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;YACxC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,gBAAgB,CAC9B,IAAe,EACf,KAAsD;IAEtD,OAAO,CACL,CAAC,IAAI,CAAC,SAAS,KAAK,mBAAmB,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,IAAI,CAAC;QACzE,CAAC,IAAI,CAAC,YAAY,KAAK,mBAAmB,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC,OAAO,CAAC;QAClF,CAAC,IAAI,CAAC,SAAS,KAAK,mBAAmB,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,IAAI,CAAC,CAC1E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,13 @@ export declare const ATTR_PREFIX = "@";
14
14
  export declare const TYPE_SUBTYPE_SEPARATOR = ".";
15
15
  /** Separator between package segments and between package and name. */
16
16
  export declare const PACKAGE_SEPARATOR = "::";
17
+ /**
18
+ * FR-024 (ADR-0029): separator between an owner object and a nested child in a
19
+ * dotted `extends` reference (`Customer.id`, `acme::sales::Customer.id`).
20
+ * Names cannot contain `.`, so a `.` in the final `::`-segment of a ref
21
+ * unambiguously marks a child-targeting reference.
22
+ */
23
+ export declare const CHILD_REF_SEPARATOR = ".";
17
24
  /** Relative-reference "go up one level" marker. */
18
25
  export declare const PACKAGE_PARENT = "..";
19
26
  export declare const CHILD_RULE_WILDCARD = "*";
@@ -1 +1 @@
1
- {"version":3,"file":"structural.d.ts","sourceRoot":"","sources":["../../src/shared/structural.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAChD,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAC/C,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAEhD,yDAAyD;AACzD,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,eAAO,MAAM,aAAa,aASxB,CAAC;AAMH,eAAO,MAAM,eAAe,YAAY,CAAC;AAMzC,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAM1C,uEAAuE;AACvE,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC,mDAAmD;AACnD,eAAO,MAAM,cAAc,OAAO,CAAC;AAMnC,eAAO,MAAM,mBAAmB,MAAM,CAAC"}
1
+ {"version":3,"file":"structural.d.ts","sourceRoot":"","sources":["../../src/shared/structural.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAChD,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAC/C,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAEhD,yDAAyD;AACzD,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,eAAO,MAAM,aAAa,aASxB,CAAC;AAMH,eAAO,MAAM,eAAe,YAAY,CAAC;AAMzC,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAM1C,uEAAuE;AACvE,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,mDAAmD;AACnD,eAAO,MAAM,cAAc,OAAO,CAAC;AAMnC,eAAO,MAAM,mBAAmB,MAAM,CAAC"}
@@ -40,6 +40,13 @@ export const TYPE_SUBTYPE_SEPARATOR = ".";
40
40
  // ---------------------------------------------------------------------------
41
41
  /** Separator between package segments and between package and name. */
42
42
  export const PACKAGE_SEPARATOR = "::";
43
+ /**
44
+ * FR-024 (ADR-0029): separator between an owner object and a nested child in a
45
+ * dotted `extends` reference (`Customer.id`, `acme::sales::Customer.id`).
46
+ * Names cannot contain `.`, so a `.` in the final `::`-segment of a ref
47
+ * unambiguously marks a child-targeting reference.
48
+ */
49
+ export const CHILD_REF_SEPARATOR = ".";
43
50
  /** Relative-reference "go up one level" marker. */
44
51
  export const PACKAGE_PARENT = "..";
45
52
  // ---------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"structural.js","sourceRoot":"","sources":["../../src/shared/structural.ts"],"names":[],"mappings":"AAAA,uGAAuG;AAEvG,8EAA8E;AAC9E,gFAAgF;AAChF,EAAE;AACF,0EAA0E;AAC1E,0EAA0E;AAC1E,6CAA6C;AAC7C,8EAA8E;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC,CAAG,0BAA0B;AAC3E,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC,CAAC,8BAA8B;AAC/E,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC,CAAG,8CAA8C;AAC/F,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,CAAC,CAAE,8BAA8B;AAC/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAEhD,yDAAyD;AACzD,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAE1C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAS;IAC3C,iBAAiB;IACjB,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;IACrB,kBAAkB;CACnB,CAAC,CAAC;AAEH,8EAA8E;AAC9E,+EAA+E;AAC/E,8EAA8E;AAE9E,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AAEzC,8EAA8E;AAC9E,6DAA6D;AAC7D,8EAA8E;AAE9E,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC;AAE/B,mFAAmF;AACnF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,uEAAuE;AACvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAEtC,mDAAmD;AACnD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AAEnC,8EAA8E;AAC9E,mCAAmC;AACnC,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC"}
1
+ {"version":3,"file":"structural.js","sourceRoot":"","sources":["../../src/shared/structural.ts"],"names":[],"mappings":"AAAA,uGAAuG;AAEvG,8EAA8E;AAC9E,gFAAgF;AAChF,EAAE;AACF,0EAA0E;AAC1E,0EAA0E;AAC1E,6CAA6C;AAC7C,8EAA8E;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC,CAAG,0BAA0B;AAC3E,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC,CAAC,8BAA8B;AAC/E,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC,CAAG,8CAA8C;AAC/F,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,CAAC,CAAE,8BAA8B;AAC/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAEhD,yDAAyD;AACzD,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAE1C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAS;IAC3C,iBAAiB;IACjB,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;IACrB,kBAAkB;CACnB,CAAC,CAAC;AAEH,8EAA8E;AAC9E,+EAA+E;AAC/E,8EAA8E;AAE9E,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AAEzC,8EAA8E;AAC9E,6DAA6D;AAC7D,8EAA8E;AAE9E,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC;AAE/B,mFAAmF;AACnF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,uEAAuE;AACvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEvC,mDAAmD;AACnD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AAEnC,8EAA8E;AAC9E,mCAAmC;AACnC,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"subtype-rules.d.ts","sourceRoot":"","sources":["../src/subtype-rules.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQzC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,iBAAiB,CAKtE"}
1
+ {"version":3,"file":"subtype-rules.d.ts","sourceRoot":"","sources":["../src/subtype-rules.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAezC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,iBAAiB,CAKtE"}