@metaobjectsdev/metadata 0.9.0 → 0.11.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (392) 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 +96 -11
  4. package/dist/attr-schema-validate.js.map +1 -1
  5. package/dist/constraint-merge.d.ts +18 -0
  6. package/dist/constraint-merge.d.ts.map +1 -0
  7. package/dist/constraint-merge.js +0 -0
  8. package/dist/constraint-merge.js.map +1 -0
  9. package/dist/constraint-validate.d.ts +6 -0
  10. package/dist/constraint-validate.d.ts.map +1 -0
  11. package/dist/constraint-validate.js +274 -0
  12. package/dist/constraint-validate.js.map +1 -0
  13. package/dist/core/attr/attr-constants.d.ts +13 -3
  14. package/dist/core/attr/attr-constants.d.ts.map +1 -1
  15. package/dist/core/attr/attr-constants.js +11 -2
  16. package/dist/core/attr/attr-constants.js.map +1 -1
  17. package/dist/core/attr/attr-definition.embedded.d.ts +3 -0
  18. package/dist/core/attr/attr-definition.embedded.d.ts.map +1 -0
  19. package/dist/core/attr/attr-definition.embedded.js +60 -0
  20. package/dist/core/attr/attr-definition.embedded.js.map +1 -0
  21. package/dist/core/documentation/doc-constants.d.ts +3 -2
  22. package/dist/core/documentation/doc-constants.d.ts.map +1 -1
  23. package/dist/core/documentation/doc-constants.js +3 -1
  24. package/dist/core/documentation/doc-constants.js.map +1 -1
  25. package/dist/core/documentation/doc-provider.d.ts.map +1 -1
  26. package/dist/core/documentation/doc-provider.js +6 -2
  27. package/dist/core/documentation/doc-provider.js.map +1 -1
  28. package/dist/core/documentation/documentation-definition.embedded.d.ts +3 -0
  29. package/dist/core/documentation/documentation-definition.embedded.d.ts.map +1 -0
  30. package/dist/core/documentation/documentation-definition.embedded.js +79 -0
  31. package/dist/core/documentation/documentation-definition.embedded.js.map +1 -0
  32. package/dist/core/field/field-constants.d.ts +7 -4
  33. package/dist/core/field/field-constants.d.ts.map +1 -1
  34. package/dist/core/field/field-constants.js +7 -7
  35. package/dist/core/field/field-constants.js.map +1 -1
  36. package/dist/core/field/field-definition.embedded.d.ts +3 -0
  37. package/dist/core/field/field-definition.embedded.d.ts.map +1 -0
  38. package/dist/core/field/field-definition.embedded.js +236 -0
  39. package/dist/core/field/field-definition.embedded.js.map +1 -0
  40. package/dist/core/field/meta-field.d.ts.map +1 -1
  41. package/dist/core/field/meta-field.js +7 -5
  42. package/dist/core/field/meta-field.js.map +1 -1
  43. package/dist/core/identity/identity-constants.d.ts.map +1 -1
  44. package/dist/core/identity/identity-constants.js +3 -0
  45. package/dist/core/identity/identity-constants.js.map +1 -1
  46. package/dist/core/identity/identity-definition.embedded.d.ts +3 -0
  47. package/dist/core/identity/identity-definition.embedded.d.ts.map +1 -0
  48. package/dist/core/identity/identity-definition.embedded.js +93 -0
  49. package/dist/core/identity/identity-definition.embedded.js.map +1 -0
  50. package/dist/core/identity/meta-identity.d.ts.map +1 -1
  51. package/dist/core/identity/meta-identity.js +8 -1
  52. package/dist/core/identity/meta-identity.js.map +1 -1
  53. package/dist/core/identity/validate-identity-passthrough.d.ts +42 -0
  54. package/dist/core/identity/validate-identity-passthrough.d.ts.map +1 -0
  55. package/dist/core/identity/validate-identity-passthrough.js +158 -0
  56. package/dist/core/identity/validate-identity-passthrough.js.map +1 -0
  57. package/dist/core/object/object-constants.d.ts +2 -1
  58. package/dist/core/object/object-constants.d.ts.map +1 -1
  59. package/dist/core/object/object-constants.js +3 -0
  60. package/dist/core/object/object-constants.js.map +1 -1
  61. package/dist/core/object/object-definition.embedded.d.ts +3 -0
  62. package/dist/core/object/object-definition.embedded.d.ts.map +1 -0
  63. package/dist/core/object/object-definition.embedded.js +110 -0
  64. package/dist/core/object/object-definition.embedded.js.map +1 -0
  65. package/dist/core/object/validate-discriminator.d.ts.map +1 -1
  66. package/dist/core/object/validate-discriminator.js +1 -3
  67. package/dist/core/object/validate-discriminator.js.map +1 -1
  68. package/dist/core/query/query-constants.d.ts.map +1 -1
  69. package/dist/core/query/query-constants.js +5 -3
  70. package/dist/core/query/query-constants.js.map +1 -1
  71. package/dist/core/relationship/derive-m2m-fields.d.ts +26 -0
  72. package/dist/core/relationship/derive-m2m-fields.d.ts.map +1 -0
  73. package/dist/core/relationship/derive-m2m-fields.js +102 -0
  74. package/dist/core/relationship/derive-m2m-fields.js.map +1 -0
  75. package/dist/core/relationship/meta-relationship.d.ts +6 -4
  76. package/dist/core/relationship/meta-relationship.d.ts.map +1 -1
  77. package/dist/core/relationship/meta-relationship.js +12 -8
  78. package/dist/core/relationship/meta-relationship.js.map +1 -1
  79. package/dist/core/relationship/relationship-constants.d.ts +6 -2
  80. package/dist/core/relationship/relationship-constants.d.ts.map +1 -1
  81. package/dist/core/relationship/relationship-constants.js +6 -2
  82. package/dist/core/relationship/relationship-constants.js.map +1 -1
  83. package/dist/core/relationship/relationship-definition.embedded.d.ts +3 -0
  84. package/dist/core/relationship/relationship-definition.embedded.d.ts.map +1 -0
  85. package/dist/core/relationship/relationship-definition.embedded.js +310 -0
  86. package/dist/core/relationship/relationship-definition.embedded.js.map +1 -0
  87. package/dist/core/validator/validator-constants.d.ts +14 -1
  88. package/dist/core/validator/validator-constants.d.ts.map +1 -1
  89. package/dist/core/validator/validator-constants.js +20 -1
  90. package/dist/core/validator/validator-constants.js.map +1 -1
  91. package/dist/core/validator/validator-definition.embedded.d.ts +3 -0
  92. package/dist/core/validator/validator-definition.embedded.d.ts.map +1 -0
  93. package/dist/core/validator/validator-definition.embedded.js +255 -0
  94. package/dist/core/validator/validator-definition.embedded.js.map +1 -0
  95. package/dist/core/yaml-desugar.d.ts.map +1 -1
  96. package/dist/core/yaml-desugar.js +88 -10
  97. package/dist/core/yaml-desugar.js.map +1 -1
  98. package/dist/core-types.d.ts +5 -2
  99. package/dist/core-types.d.ts.map +1 -1
  100. package/dist/core-types.js +285 -116
  101. package/dist/core-types.js.map +1 -1
  102. package/dist/errors.d.ts +3 -3
  103. package/dist/errors.d.ts.map +1 -1
  104. package/dist/errors.js +87 -0
  105. package/dist/errors.js.map +1 -1
  106. package/dist/index.d.ts +17 -2
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +26 -1
  109. package/dist/index.js.map +1 -1
  110. package/dist/library/embedded-library.generated.d.ts +2 -0
  111. package/dist/library/embedded-library.generated.d.ts.map +1 -0
  112. package/dist/library/embedded-library.generated.js +11 -0
  113. package/dist/library/embedded-library.generated.js.map +1 -0
  114. package/dist/library/library-sources.d.ts +12 -0
  115. package/dist/library/library-sources.d.ts.map +1 -0
  116. package/dist/library/library-sources.js +88 -0
  117. package/dist/library/library-sources.js.map +1 -0
  118. package/dist/loader/meta-data-loader.d.ts +10 -2
  119. package/dist/loader/meta-data-loader.d.ts.map +1 -1
  120. package/dist/loader/meta-data-loader.js +57 -6
  121. package/dist/loader/meta-data-loader.js.map +1 -1
  122. package/dist/loader/shortcuts.d.ts +2 -5
  123. package/dist/loader/shortcuts.d.ts.map +1 -1
  124. package/dist/loader/shortcuts.js.map +1 -1
  125. package/dist/loader/validation-passes.d.ts +3 -0
  126. package/dist/loader/validation-passes.d.ts.map +1 -1
  127. package/dist/loader/validation-passes.js +519 -34
  128. package/dist/loader/validation-passes.js.map +1 -1
  129. package/dist/loader/validation-registry.d.ts +10 -0
  130. package/dist/loader/validation-registry.d.ts.map +1 -0
  131. package/dist/loader/validation-registry.js +84 -0
  132. package/dist/loader/validation-registry.js.map +1 -0
  133. package/dist/metamodel-docs/index.d.ts +19 -0
  134. package/dist/metamodel-docs/index.d.ts.map +1 -0
  135. package/dist/metamodel-docs/index.js +37 -0
  136. package/dist/metamodel-docs/index.js.map +1 -0
  137. package/dist/metamodel-docs/provenance.d.ts +42 -0
  138. package/dist/metamodel-docs/provenance.d.ts.map +1 -0
  139. package/dist/metamodel-docs/provenance.js +148 -0
  140. package/dist/metamodel-docs/provenance.js.map +1 -0
  141. package/dist/metamodel-docs/provider-definitions.d.ts +8 -0
  142. package/dist/metamodel-docs/provider-definitions.d.ts.map +1 -0
  143. package/dist/metamodel-docs/provider-definitions.js +48 -0
  144. package/dist/metamodel-docs/provider-definitions.js.map +1 -0
  145. package/dist/metamodel-docs/render.d.ts +12 -0
  146. package/dist/metamodel-docs/render.d.ts.map +1 -0
  147. package/dist/metamodel-docs/render.js +252 -0
  148. package/dist/metamodel-docs/render.js.map +1 -0
  149. package/dist/naming-refs.d.ts +41 -0
  150. package/dist/naming-refs.d.ts.map +1 -0
  151. package/dist/naming-refs.js +144 -0
  152. package/dist/naming-refs.js.map +1 -0
  153. package/dist/naming.d.ts.map +1 -1
  154. package/dist/naming.js +10 -2
  155. package/dist/naming.js.map +1 -1
  156. package/dist/parser-core.d.ts.map +1 -1
  157. package/dist/parser-core.js +84 -9
  158. package/dist/parser-core.js.map +1 -1
  159. package/dist/persistence/db/db-constants.d.ts +10 -0
  160. package/dist/persistence/db/db-constants.d.ts.map +1 -1
  161. package/dist/persistence/db/db-constants.js +14 -0
  162. package/dist/persistence/db/db-constants.js.map +1 -1
  163. package/dist/persistence/db/db-definition.embedded.d.ts +3 -0
  164. package/dist/persistence/db/db-definition.embedded.d.ts.map +1 -0
  165. package/dist/persistence/db/db-definition.embedded.js +227 -0
  166. package/dist/persistence/db/db-definition.embedded.js.map +1 -0
  167. package/dist/persistence/db/db-provider.d.ts.map +1 -1
  168. package/dist/persistence/db/db-provider.js +13 -18
  169. package/dist/persistence/db/db-provider.js.map +1 -1
  170. package/dist/persistence/origin/origin-definition.embedded.d.ts +3 -0
  171. package/dist/persistence/origin/origin-definition.embedded.d.ts.map +1 -0
  172. package/dist/persistence/origin/origin-definition.embedded.js +88 -0
  173. package/dist/persistence/origin/origin-definition.embedded.js.map +1 -0
  174. package/dist/persistence/source/source-definition.embedded.d.ts +3 -0
  175. package/dist/persistence/source/source-definition.embedded.d.ts.map +1 -0
  176. package/dist/persistence/source/source-definition.embedded.js +17 -0
  177. package/dist/persistence/source/source-definition.embedded.js.map +1 -0
  178. package/dist/persistence/source/validate-source-parameter-ref.d.ts.map +1 -1
  179. package/dist/persistence/source/validate-source-parameter-ref.js +7 -1
  180. package/dist/persistence/source/validate-source-parameter-ref.js.map +1 -1
  181. package/dist/persistence/source/validate-source-roles.d.ts.map +1 -1
  182. package/dist/persistence/source/validate-source-roles.js +16 -1
  183. package/dist/persistence/source/validate-source-roles.js.map +1 -1
  184. package/dist/presentation/layout/layout-definition.embedded.d.ts +3 -0
  185. package/dist/presentation/layout/layout-definition.embedded.d.ts.map +1 -0
  186. package/dist/presentation/layout/layout-definition.embedded.js +16 -0
  187. package/dist/presentation/layout/layout-definition.embedded.js.map +1 -0
  188. package/dist/presentation/ui/ui-definition.embedded.d.ts +3 -0
  189. package/dist/presentation/ui/ui-definition.embedded.d.ts.map +1 -0
  190. package/dist/presentation/ui/ui-definition.embedded.js +114 -0
  191. package/dist/presentation/ui/ui-definition.embedded.js.map +1 -0
  192. package/dist/presentation/ui/ui-provider.d.ts +3 -0
  193. package/dist/presentation/ui/ui-provider.d.ts.map +1 -0
  194. package/dist/presentation/ui/ui-provider.js +21 -0
  195. package/dist/presentation/ui/ui-provider.js.map +1 -0
  196. package/dist/presentation/view/view-definition.embedded.d.ts +3 -0
  197. package/dist/presentation/view/view-definition.embedded.d.ts.map +1 -0
  198. package/dist/presentation/view/view-definition.embedded.js +76 -0
  199. package/dist/presentation/view/view-definition.embedded.js.map +1 -0
  200. package/dist/provider-data.d.ts +184 -0
  201. package/dist/provider-data.d.ts.map +1 -0
  202. package/dist/provider-data.js +271 -0
  203. package/dist/provider-data.js.map +1 -0
  204. package/dist/provider.d.ts +3 -1
  205. package/dist/provider.d.ts.map +1 -1
  206. package/dist/provider.js +15 -1
  207. package/dist/provider.js.map +1 -1
  208. package/dist/registry-coverage.d.ts +99 -0
  209. package/dist/registry-coverage.d.ts.map +1 -0
  210. package/dist/registry-coverage.js +294 -0
  211. package/dist/registry-coverage.js.map +1 -0
  212. package/dist/registry-manifest-exclusions.d.ts +62 -0
  213. package/dist/registry-manifest-exclusions.d.ts.map +1 -0
  214. package/dist/registry-manifest-exclusions.js +163 -0
  215. package/dist/registry-manifest-exclusions.js.map +1 -0
  216. package/dist/registry-manifest.d.ts +117 -0
  217. package/dist/registry-manifest.d.ts.map +1 -0
  218. package/dist/registry-manifest.js +242 -0
  219. package/dist/registry-manifest.js.map +1 -0
  220. package/dist/registry.d.ts +76 -2
  221. package/dist/registry.d.ts.map +1 -1
  222. package/dist/registry.js +37 -1
  223. package/dist/registry.js.map +1 -1
  224. package/dist/shared/structural.d.ts +7 -0
  225. package/dist/shared/structural.d.ts.map +1 -1
  226. package/dist/shared/structural.js +7 -0
  227. package/dist/shared/structural.js.map +1 -1
  228. package/dist/subtype-rules.d.ts.map +1 -1
  229. package/dist/subtype-rules.js +97 -13
  230. package/dist/subtype-rules.js.map +1 -1
  231. package/dist/super-resolve.d.ts +49 -2
  232. package/dist/super-resolve.d.ts.map +1 -1
  233. package/dist/super-resolve.js +128 -43
  234. package/dist/super-resolve.js.map +1 -1
  235. package/dist/template/meta-template.d.ts +3 -2
  236. package/dist/template/meta-template.d.ts.map +1 -1
  237. package/dist/template/meta-template.js +3 -2
  238. package/dist/template/meta-template.js.map +1 -1
  239. package/dist/template/prompt-definition.embedded.d.ts +3 -0
  240. package/dist/template/prompt-definition.embedded.d.ts.map +1 -0
  241. package/dist/template/prompt-definition.embedded.js +368 -0
  242. package/dist/template/prompt-definition.embedded.js.map +1 -0
  243. package/dist/template/prompt-provider.d.ts +3 -0
  244. package/dist/template/prompt-provider.d.ts.map +1 -0
  245. package/dist/template/prompt-provider.js +25 -0
  246. package/dist/template/prompt-provider.js.map +1 -0
  247. package/dist/template/template-constants.d.ts +2 -0
  248. package/dist/template/template-constants.d.ts.map +1 -1
  249. package/dist/template/template-constants.js +7 -0
  250. package/dist/template/template-constants.js.map +1 -1
  251. package/dist/template/template-definition.embedded.d.ts +3 -0
  252. package/dist/template/template-definition.embedded.d.ts.map +1 -0
  253. package/dist/template/template-definition.embedded.js +30 -0
  254. package/dist/template/template-definition.embedded.js.map +1 -0
  255. package/dist/validate-max-occurs.d.ts +5 -0
  256. package/dist/validate-max-occurs.d.ts.map +1 -0
  257. package/dist/validate-max-occurs.js +28 -0
  258. package/dist/validate-max-occurs.js.map +1 -0
  259. package/dist/validation-types.d.ts +36 -0
  260. package/dist/validation-types.d.ts.map +1 -0
  261. package/dist/validation-types.js +7 -0
  262. package/dist/validation-types.js.map +1 -0
  263. package/package.json +33 -22
  264. package/src/attr-schema-validate.ts +108 -8
  265. package/src/constraint-merge.ts +0 -0
  266. package/src/constraint-validate.ts +363 -0
  267. package/src/core/attr/attr-constants.ts +15 -3
  268. package/src/core/attr/attr-definition.embedded.ts +67 -0
  269. package/src/core/documentation/doc-constants.ts +3 -1
  270. package/src/core/documentation/doc-provider.ts +6 -2
  271. package/src/core/documentation/documentation-definition.embedded.ts +86 -0
  272. package/src/core/field/field-constants.ts +8 -7
  273. package/src/core/field/field-definition.embedded.ts +243 -0
  274. package/src/core/field/meta-field.ts +6 -7
  275. package/src/core/identity/identity-constants.ts +4 -0
  276. package/src/core/identity/identity-definition.embedded.ts +100 -0
  277. package/src/core/identity/meta-identity.ts +8 -1
  278. package/src/core/identity/validate-identity-passthrough.ts +194 -0
  279. package/src/core/object/object-constants.ts +3 -0
  280. package/src/core/object/object-definition.embedded.ts +117 -0
  281. package/src/core/object/validate-discriminator.ts +0 -4
  282. package/src/core/query/query-constants.ts +5 -3
  283. package/src/core/relationship/derive-m2m-fields.ts +145 -0
  284. package/src/core/relationship/meta-relationship.ts +15 -9
  285. package/src/core/relationship/relationship-constants.ts +6 -2
  286. package/src/core/relationship/relationship-definition.embedded.ts +317 -0
  287. package/src/core/validator/validator-constants.ts +22 -1
  288. package/src/core/validator/validator-definition.embedded.ts +262 -0
  289. package/src/core/yaml-desugar.ts +96 -7
  290. package/src/core-types.ts +314 -150
  291. package/src/errors.ts +89 -2
  292. package/src/index.ts +47 -2
  293. package/src/library/embedded-library.generated.ts +10 -0
  294. package/src/library/library-sources.ts +97 -0
  295. package/src/loader/meta-data-loader.ts +78 -7
  296. package/src/loader/shortcuts.ts +2 -2
  297. package/src/loader/validation-passes.ts +690 -34
  298. package/src/loader/validation-registry.ts +93 -0
  299. package/src/metamodel-docs/index.ts +41 -0
  300. package/src/metamodel-docs/provenance.ts +187 -0
  301. package/src/metamodel-docs/provider-definitions.ts +50 -0
  302. package/src/metamodel-docs/render.ts +309 -0
  303. package/src/naming-refs.ts +162 -0
  304. package/src/naming.ts +10 -2
  305. package/src/parser-core.ts +96 -9
  306. package/src/persistence/db/db-constants.ts +16 -0
  307. package/src/persistence/db/db-definition.embedded.ts +234 -0
  308. package/src/persistence/db/db-provider.ts +13 -18
  309. package/src/persistence/origin/origin-definition.embedded.ts +95 -0
  310. package/src/persistence/source/source-definition.embedded.ts +24 -0
  311. package/src/persistence/source/validate-source-parameter-ref.ts +7 -1
  312. package/src/persistence/source/validate-source-roles.ts +22 -1
  313. package/src/presentation/layout/layout-definition.embedded.ts +23 -0
  314. package/src/presentation/ui/ui-definition.embedded.ts +121 -0
  315. package/src/presentation/ui/ui-provider.ts +25 -0
  316. package/src/presentation/view/view-definition.embedded.ts +83 -0
  317. package/src/provider-data.ts +463 -0
  318. package/src/provider.ts +18 -0
  319. package/src/registry-coverage.ts +430 -0
  320. package/src/registry-manifest-exclusions.ts +176 -0
  321. package/src/registry-manifest.ts +334 -0
  322. package/src/registry.ts +106 -3
  323. package/src/shared/structural.ts +8 -0
  324. package/src/subtype-rules.ts +135 -18
  325. package/src/super-resolve.ts +153 -43
  326. package/src/template/meta-template.ts +3 -2
  327. package/src/template/prompt-definition.embedded.ts +375 -0
  328. package/src/template/prompt-provider.ts +29 -0
  329. package/src/template/template-constants.ts +8 -0
  330. package/src/template/template-definition.embedded.ts +37 -0
  331. package/src/validate-max-occurs.ts +39 -0
  332. package/src/validation-types.ts +57 -0
  333. package/dist/core/documentation/doc-schema.d.ts +0 -8
  334. package/dist/core/documentation/doc-schema.d.ts.map +0 -1
  335. package/dist/core/documentation/doc-schema.js +0 -53
  336. package/dist/core/documentation/doc-schema.js.map +0 -1
  337. package/dist/core/field/field-schema.d.ts +0 -22
  338. package/dist/core/field/field-schema.d.ts.map +0 -1
  339. package/dist/core/field/field-schema.js +0 -171
  340. package/dist/core/field/field-schema.js.map +0 -1
  341. package/dist/core/identity/identity-schema.d.ts +0 -6
  342. package/dist/core/identity/identity-schema.d.ts.map +0 -1
  343. package/dist/core/identity/identity-schema.js +0 -55
  344. package/dist/core/identity/identity-schema.js.map +0 -1
  345. package/dist/core/object/object-schema.d.ts +0 -4
  346. package/dist/core/object/object-schema.d.ts.map +0 -1
  347. package/dist/core/object/object-schema.js +0 -28
  348. package/dist/core/object/object-schema.js.map +0 -1
  349. package/dist/core/relationship/relationship-schema.d.ts +0 -4
  350. package/dist/core/relationship/relationship-schema.d.ts.map +0 -1
  351. package/dist/core/relationship/relationship-schema.js +0 -51
  352. package/dist/core/relationship/relationship-schema.js.map +0 -1
  353. package/dist/core/validator/validator-schema.d.ts +0 -4
  354. package/dist/core/validator/validator-schema.d.ts.map +0 -1
  355. package/dist/core/validator/validator-schema.js +0 -38
  356. package/dist/core/validator/validator-schema.js.map +0 -1
  357. package/dist/persistence/db/db-schema.d.ts +0 -14
  358. package/dist/persistence/db/db-schema.d.ts.map +0 -1
  359. package/dist/persistence/db/db-schema.js +0 -35
  360. package/dist/persistence/db/db-schema.js.map +0 -1
  361. package/dist/persistence/origin/origin-schema.d.ts +0 -4
  362. package/dist/persistence/origin/origin-schema.d.ts.map +0 -1
  363. package/dist/persistence/origin/origin-schema.js +0 -59
  364. package/dist/persistence/origin/origin-schema.js.map +0 -1
  365. package/dist/persistence/source/source-schema.d.ts +0 -4
  366. package/dist/persistence/source/source-schema.d.ts.map +0 -1
  367. package/dist/persistence/source/source-schema.js +0 -98
  368. package/dist/persistence/source/source-schema.js.map +0 -1
  369. package/dist/presentation/layout/layout-schema.d.ts +0 -4
  370. package/dist/presentation/layout/layout-schema.d.ts.map +0 -1
  371. package/dist/presentation/layout/layout-schema.js +0 -46
  372. package/dist/presentation/layout/layout-schema.js.map +0 -1
  373. package/dist/presentation/view/view-schema.d.ts +0 -4
  374. package/dist/presentation/view/view-schema.d.ts.map +0 -1
  375. package/dist/presentation/view/view-schema.js +0 -15
  376. package/dist/presentation/view/view-schema.js.map +0 -1
  377. package/dist/template/template-schema.d.ts +0 -3
  378. package/dist/template/template-schema.d.ts.map +0 -1
  379. package/dist/template/template-schema.js +0 -173
  380. package/dist/template/template-schema.js.map +0 -1
  381. package/src/core/documentation/doc-schema.ts +0 -64
  382. package/src/core/field/field-schema.ts +0 -228
  383. package/src/core/identity/identity-schema.ts +0 -80
  384. package/src/core/object/object-schema.ts +0 -35
  385. package/src/core/relationship/relationship-schema.ts +0 -67
  386. package/src/core/validator/validator-schema.ts +0 -50
  387. package/src/persistence/db/db-schema.ts +0 -50
  388. package/src/persistence/origin/origin-schema.ts +0 -80
  389. package/src/persistence/source/source-schema.ts +0 -129
  390. package/src/presentation/layout/layout-schema.ts +0 -62
  391. package/src/presentation/view/view-schema.ts +0 -21
  392. package/src/template/template-schema.ts +0 -211
@@ -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"}
@@ -1,12 +1,27 @@
1
1
  // Cross-language subtype rules for object subtypes.
2
2
  //
3
- // - value objects MUST NOT have a primary identity (error)
3
+ // - value objects MUST NOT have ANY identity (primary, secondary,
4
+ // reference) — values are pure data shapes (error, FR-024/ADR-0028)
5
+ // - value objects MUST NOT have a source.* child — values are not
6
+ // persisted shapes (error, FR-024/ADR-0028)
4
7
  // - entity objects SHOULD have a primary identity, unless @isAbstract (warning)
8
+ // - projection objects may only extend other projections (error,
9
+ // FR-024/ADR-0028); identity on a projection is OPTIONAL (no warning)
10
+ // - projection sources must have a read-only @kind — view,
11
+ // materializedView, storedProc, tableFunction (ERR_PROJECTION_SOURCE_WRITABLE)
5
12
  // - base objects have no rule (template, may or may not have identity)
13
+ // - every identity.* node MUST have a name (FR-024 D2: identities are named,
14
+ // author-chosen, so the dotted by-name extends form can address them)
15
+ //
16
+ // The entity-primary-source-readonly hard cutover (an entity whose PRIMARY
17
+ // source is a read-only kind must become a projection) is deferred to
18
+ // FR-024 Phase E (B4b) — view-primary entities still load today.
6
19
  import { ParseError } from "./errors.js";
7
- import { TYPE_OBJECT, TYPE_IDENTITY } from "./shared/base-types.js";
20
+ import { TYPE_OBJECT, TYPE_IDENTITY, TYPE_SOURCE, } from "./shared/base-types.js";
8
21
  import { IDENTITY_SUBTYPE_PRIMARY } from "./core/identity/identity-constants.js";
9
- import { OBJECT_SUBTYPE_ENTITY, OBJECT_SUBTYPE_VALUE, } from "./core/object/object-constants.js";
22
+ import { OBJECT_SUBTYPE_ENTITY, OBJECT_SUBTYPE_VALUE, OBJECT_SUBTYPE_PROJECTION, } from "./core/object/object-constants.js";
23
+ import { MetaSource } from "./persistence/source/meta-source.js";
24
+ import { SOURCE_READ_ONLY_KINDS } from "./persistence/source/source-constants.js";
10
25
  export function validateSubtypeRules(root) {
11
26
  const errors = [];
12
27
  const warnings = [];
@@ -14,21 +29,90 @@ export function validateSubtypeRules(root) {
14
29
  return { errors, warnings };
15
30
  }
16
31
  function walk(model, errors, warnings) {
32
+ // FR-024 D2 — identity nodes require an author-chosen name (any nesting:
33
+ // object children AND field-nested identities). A nameless node parses
34
+ // with name === "".
35
+ if (model.type === TYPE_IDENTITY && model.name === "") {
36
+ const owner = model.parent?.fqn();
37
+ errors.push(new ParseError(`identity.${model.subType}${owner !== undefined && owner !== "" ? ` under '${owner}'` : ""} has no name — ` +
38
+ `identity nodes require an author-chosen name (e.g. "id") so dotted ` +
39
+ `extends refs can address them (FR-024)`, { code: "ERR_IDENTITY_NAME_REQUIRED", source: model.source }));
40
+ }
17
41
  if (model.type === TYPE_OBJECT) {
18
- const hasPrimary = model.children().some((c) => c.type === TYPE_IDENTITY && c.subType === IDENTITY_SUBTYPE_PRIMARY);
19
- if (model.subType === OBJECT_SUBTYPE_VALUE && hasPrimary) {
20
- errors.push(new ParseError(`value object '${model.fqn()}' must not have a primary identity ` +
21
- `(use subType: "entity" for records with identity)`, { code: "ERR_SUBTYPE_RULE_VIOLATION", source: model.source }));
22
- }
23
- else if (model.subType === OBJECT_SUBTYPE_ENTITY &&
24
- !hasPrimary &&
25
- !model.isAbstract) {
26
- warnings.push(`entity object '${model.fqn()}' has no primary identity ` +
27
- `(add an identity child or mark @isAbstract: true)`);
42
+ switch (model.subType) {
43
+ case OBJECT_SUBTYPE_VALUE:
44
+ validateValuePurity(model, errors);
45
+ break;
46
+ case OBJECT_SUBTYPE_ENTITY:
47
+ validateEntityIdentity(model, warnings);
48
+ break;
49
+ case OBJECT_SUBTYPE_PROJECTION:
50
+ validateProjectionLicensing(model, errors);
51
+ break;
52
+ default:
53
+ // object.base is a template — no rule.
54
+ break;
28
55
  }
29
56
  }
30
57
  for (const child of model.ownChildren()) {
31
58
  walk(child, errors, warnings);
32
59
  }
33
60
  }
61
+ // FR-024 value purity (ADR-0028): a value object is a pure data shape — it
62
+ // carries NO identity of any subtype and NO source.
63
+ function validateValuePurity(model, errors) {
64
+ for (const child of model.children()) {
65
+ if (child.type === TYPE_IDENTITY) {
66
+ errors.push(new ParseError(`value object '${model.fqn()}' must not have an identity ` +
67
+ `(${TYPE_IDENTITY}.${child.subType} '${child.name}') — value objects are ` +
68
+ `pure data shapes; use subType: "entity" for records with identity ` +
69
+ `(FR-024, ADR-0028)`, { code: "ERR_SUBTYPE_RULE_VIOLATION", source: child.source }));
70
+ }
71
+ else if (child.type === TYPE_SOURCE) {
72
+ errors.push(new ParseError(`value object '${model.fqn()}' must not have a source ` +
73
+ `(${TYPE_SOURCE}.${child.subType}) — value objects are not persisted ` +
74
+ `shapes; use subType: "entity" or "projection" for stored objects ` +
75
+ `(FR-024, ADR-0028)`, { code: "ERR_SUBTYPE_RULE_VIOLATION", source: child.source }));
76
+ }
77
+ }
78
+ }
79
+ // Entities SHOULD have a primary identity unless abstract (warning).
80
+ function validateEntityIdentity(model, warnings) {
81
+ const hasPrimary = model
82
+ .children()
83
+ .some((c) => c.type === TYPE_IDENTITY && c.subType === IDENTITY_SUBTYPE_PRIMARY);
84
+ if (!hasPrimary && !model.isAbstract) {
85
+ warnings.push(`entity object '${model.fqn()}' has no primary identity ` +
86
+ `(add an identity child or mark @isAbstract: true)`);
87
+ }
88
+ }
89
+ // FR-024 projection licensing (ADR-0028):
90
+ // - a projection's object-level extends may only target another
91
+ // object.projection (ERR_SUBTYPE_RULE_VIOLATION);
92
+ // - every source.* on a projection must have a read-only @kind
93
+ // (ERR_PROJECTION_SOURCE_WRITABLE);
94
+ // - identity is OPTIONAL on a projection — no warning when absent.
95
+ function validateProjectionLicensing(model, errors) {
96
+ const sup = model.superResolved;
97
+ if (sup !== undefined &&
98
+ (sup.type !== TYPE_OBJECT || sup.subType !== OBJECT_SUBTYPE_PROJECTION)) {
99
+ errors.push(new ParseError(`projection '${model.fqn()}' extends '${sup.fqn()}' which is ` +
100
+ `${sup.type}.${sup.subType} — a projection may only extend another ` +
101
+ `projection (FR-024, ADR-0028)`, { code: "ERR_SUBTYPE_RULE_VIOLATION", source: model.source }));
102
+ }
103
+ // OWN sources only: an inherited source is validated on the (projection)
104
+ // object that declares it; an inherited source from a non-projection super
105
+ // is unreachable without first tripping the extends rule above.
106
+ for (const child of model.ownChildren()) {
107
+ if (child.type !== TYPE_SOURCE)
108
+ continue;
109
+ const kind = child instanceof MetaSource ? child.effectiveKind : child.subType;
110
+ if (!SOURCE_READ_ONLY_KINDS.has(kind)) {
111
+ errors.push(new ParseError(`projection '${model.fqn()}' has a writable source (@kind "${kind}") — ` +
112
+ `a projection is a derived read-only representation; its sources must ` +
113
+ `be read-only kinds (view, materializedView, storedProc, ` +
114
+ `tableFunction) (FR-024, ADR-0028)`, { code: "ERR_PROJECTION_SOURCE_WRITABLE", source: child.source }));
115
+ }
116
+ }
117
+ }
34
118
  //# sourceMappingURL=subtype-rules.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subtype-rules.js","sourceRoot":"","sources":["../src/subtype-rules.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,6DAA6D;AAC7D,kFAAkF;AAClF,yEAAyE;AAGzE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,mCAAmC,CAAC;AAO3C,MAAM,UAAU,oBAAoB,CAAC,IAAc;IACjD,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,IAAI,CAAC,KAAe,EAAE,MAAoB,EAAE,QAAkB;IACrE,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,OAAO,KAAK,wBAAwB,CAC1E,CAAC;QACF,IAAI,KAAK,CAAC,OAAO,KAAK,oBAAoB,IAAI,UAAU,EAAE,CAAC;YACzD,MAAM,CAAC,IAAI,CACT,IAAI,UAAU,CACZ,iBAAiB,KAAK,CAAC,GAAG,EAAE,qCAAqC;gBAC/D,mDAAmD,EACrD,EAAE,IAAI,EAAE,4BAA4B,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAC7D,CACF,CAAC;QACJ,CAAC;aAAM,IACL,KAAK,CAAC,OAAO,KAAK,qBAAqB;YACvC,CAAC,UAAU;YACX,CAAC,KAAK,CAAC,UAAU,EACjB,CAAC;YACD,QAAQ,CAAC,IAAI,CACX,kBAAkB,KAAK,CAAC,GAAG,EAAE,4BAA4B;gBACvD,mDAAmD,CACtD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"subtype-rules.js","sourceRoot":"","sources":["../src/subtype-rules.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,23 @@
1
1
  import type { MetaData } from "./shared/meta-data.js";
2
+ /**
3
+ * FR-024 (ADR-0029): the type-scope of the node whose `extends` is being
4
+ * resolved. A dotted `Entity.child` ref selects among the owner's children of
5
+ * the SAME type as the referrer — a field ref resolves fields, an identity
6
+ * ref resolves identities. Required for the dotted branch; ignored for
7
+ * dot-free refs (legacy behavior unchanged).
8
+ */
9
+ export interface ReferrerScope {
10
+ readonly type: string;
11
+ }
12
+ /**
13
+ * FR-024: true when a ref's final `::`-segment contains a `.` — i.e. the ref
14
+ * targets a child nested inside an object (`Customer.id`,
15
+ * `acme::sales::Customer.id`). Names cannot contain `.`, so this is
16
+ * unambiguous. Call sites use this to apply the dotted-only
17
+ * type/subtype-mismatch check (ERR_EXTENDS_TARGET_MISMATCH) without altering
18
+ * shipped top-level extends behavior.
19
+ */
20
+ export declare function isChildTargetingRef(ref: string): boolean;
2
21
  /**
3
22
  * Resolve a single super reference string against a tree.
4
23
  *
@@ -6,12 +25,21 @@ import type { MetaData } from "./shared/meta-data.js";
6
25
  * against the loader's accumulating root (intoRoot). Java semantics: if the
7
26
  * ref cannot be resolved, the parser throws ParseError.
8
27
  *
9
- * @param ref - The raw super reference (e.g., "Fruit", "::pkg::Name", "..::common::id")
28
+ * FR-024 (ADR-0029): a ref whose final segment is dotted (`Customer.id`)
29
+ * targets a child nested inside an object. The owner part resolves with the
30
+ * existing strategies (absolute / relative / bare / same-package); the child
31
+ * is then selected among the owner's EFFECTIVE children (so inherited
32
+ * children resolve) by name AND the referrer's type (type-scoped). A dotted
33
+ * ref that does not resolve returns undefined WITHOUT falling through to the
34
+ * bare lookup; a dotted ref with no `referrerScope` is unresolvable.
35
+ *
36
+ * @param ref - The raw super reference (e.g., "Fruit", "::pkg::Name", "..::common::id", "Customer.id")
10
37
  * @param contextPackage - The package of the model whose super is being resolved
11
38
  * @param root - The root MetaData of the accumulating tree to search within
39
+ * @param referrerScope - FR-024: the extending node's type — required to resolve dotted refs
12
40
  * @returns The resolved MetaData, or undefined if the reference cannot be resolved
13
41
  */
14
- export declare function resolveSuperRef(ref: string, contextPackage: string, root: MetaData): MetaData | undefined;
42
+ export declare function resolveSuperRef(ref: string, contextPackage: string, root: MetaData, referrerScope?: ReferrerScope): MetaData | undefined;
15
43
  export interface DeferredSuperFailure {
16
44
  /** FQN of the node whose super ref could not be resolved. */
17
45
  nodeFqn: string;
@@ -19,6 +47,25 @@ export interface DeferredSuperFailure {
19
47
  ref: string;
20
48
  /** ADR-0009 provenance envelope of the referencing node (FR5a). */
21
49
  source: import("./source.js").ErrorSource;
50
+ /**
51
+ * FR-024: why resolution failed.
52
+ * - "unresolved" — no target found (loader emits ERR_UNRESOLVED_SUPER).
53
+ * - "target-mismatch" — a dotted child-targeting ref resolved, but the
54
+ * target's type/subtype differs from the extending node's (loader emits
55
+ * ERR_EXTENDS_TARGET_MISMATCH). Applies ONLY to dotted refs — top-level
56
+ * extends behavior is unchanged.
57
+ */
58
+ kind: "unresolved" | "target-mismatch";
59
+ /** target-mismatch only: the resolved target's identity, for the message. */
60
+ target?: {
61
+ type: string;
62
+ subType: string;
63
+ };
64
+ /** target-mismatch only: the extending node's type/subtype, for the message. */
65
+ referrer?: {
66
+ type: string;
67
+ subType: string;
68
+ };
22
69
  }
23
70
  /**
24
71
  * Walk the tree and resolve every node's superRef against the full root.
@@ -1 +1 @@
1
- {"version":3,"file":"super-resolve.d.ts","sourceRoot":"","sources":["../src/super-resolve.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAyCtD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,QAAQ,GACb,QAAQ,GAAG,SAAS,CAsCtB;AAMD,MAAM,WAAW,oBAAoB;IACnC,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,mEAAmE;IACnE,MAAM,EAAE,OAAO,aAAa,EAAE,WAAW,CAAC;CAC3C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,oBAAoB,EAAE,CAkB5E"}
1
+ {"version":3,"file":"super-resolve.d.ts","sourceRoot":"","sources":["../src/super-resolve.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAyCtD;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAIxD;AAsBD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,QAAQ,EACd,aAAa,CAAC,EAAE,aAAa,GAC5B,QAAQ,GAAG,SAAS,CAiDtB;AAMD,MAAM,WAAW,oBAAoB;IACnC,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,mEAAmE;IACnE,MAAM,EAAE,OAAO,aAAa,EAAE,WAAW,CAAC;IAC1C;;;;;;;OAOG;IACH,IAAI,EAAE,YAAY,GAAG,iBAAiB,CAAC;IACvC,6EAA6E;IAC7E,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,gFAAgF;IAChF,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,oBAAoB,EAAE,CAyC5E"}
@@ -1,16 +1,24 @@
1
- // super reference resolution — package navigation helpers
1
+ // super reference resolution — pure FQN match (FR-032 / ADR-0032)
2
2
  //
3
- // Reference syntax (Java metaobjects-core conventions):
4
- // Bare name "Fruit" → resolve in contextPackage, then root fallback
5
- // Absolute "::fishstore::Fish" strip leading ::, walk from root
6
- // Relative parent "..::common::id" → up one package level, then resolve "common::id"
7
- // Multi-level "..::..::shared::User" → up two levels, then resolve "shared::User"
8
- // Same-package "common::id" try contextPackage prepend first, then root-rooted
3
+ // FR-032 made canonical refs fully-qualified: the YAML desugar expands every
4
+ // authored relative/bare-current ref to its FQN (`expandRef`, naming-refs.ts),
5
+ // and the canonical-JSON guard rejects any surviving `::`/`..::` form. So the
6
+ // refs that reach this resolver are already FQN, and resolution is a pure tree
7
+ // match:
8
+ // Qualified "pkg::Name" findInTree(fqn)
9
+ // Bare "Name" (rare in-tree) → current package only (`<ctx>::Name`),
10
+ // then literal (root-level). NO root
11
+ // fallback for a packaged bare ref.
12
+ // The old `::`-strip (absolute), `..::`-reduce (relative) and
13
+ // bare-current-then-root-fallback branches were DELETED — that fallback was the
14
+ // silent-shadowing footgun ADR-0032 removes.
9
15
  //
10
- // Super resolution is now IMMEDIATE during parse (Java behavior).
11
- // This module provides only the lookup helper; the parser calls it inline.
12
- // The old resolveSupers() multi-pass walker has been deleted.
13
- import { PACKAGE_SEPARATOR, PACKAGE_PARENT } from "./shared/structural.js";
16
+ // FR-024: a ref whose final `::`-segment is dotted (`pkg::Customer.id`) targets
17
+ // a child nested in the owner object resolved type-scoped to the referrer.
18
+ //
19
+ // Super resolution is IMMEDIATE during parse (Java behavior). This module
20
+ // provides only the lookup helper; the parser calls it inline.
21
+ import { PACKAGE_SEPARATOR, CHILD_REF_SEPARATOR } from "./shared/structural.js";
14
22
  // ---------------------------------------------------------------------------
15
23
  // Tree search helper
16
24
  // ---------------------------------------------------------------------------
@@ -45,9 +53,37 @@ function findInTree(root, fqn) {
45
53
  }
46
54
  return undefined;
47
55
  }
48
- // ---------------------------------------------------------------------------
49
- // Reference parsing & resolution
50
- // ---------------------------------------------------------------------------
56
+ /**
57
+ * FR-024: true when a ref's final `::`-segment contains a `.` — i.e. the ref
58
+ * targets a child nested inside an object (`Customer.id`,
59
+ * `acme::sales::Customer.id`). Names cannot contain `.`, so this is
60
+ * unambiguous. Call sites use this to apply the dotted-only
61
+ * type/subtype-mismatch check (ERR_EXTENDS_TARGET_MISMATCH) without altering
62
+ * shipped top-level extends behavior.
63
+ */
64
+ export function isChildTargetingRef(ref) {
65
+ const lastSep = ref.lastIndexOf(PACKAGE_SEPARATOR);
66
+ const lastSegment = lastSep === -1 ? ref : ref.slice(lastSep + PACKAGE_SEPARATOR.length);
67
+ return lastSegment.includes(CHILD_REF_SEPARATOR);
68
+ }
69
+ /**
70
+ * FR-024: split a child-targeting ref into the owner-object ref and the child
71
+ * traversal path. A multi-dot ref (`X.y.z`) traverses child names to any depth
72
+ * (object → field → view); returns undefined only for degenerate empty parts
73
+ * (`.id`, `Customer.`, `Customer..x`).
74
+ */
75
+ function parseChildTargetingRef(ref) {
76
+ const lastSep = ref.lastIndexOf(PACKAGE_SEPARATOR);
77
+ const segStart = lastSep === -1 ? 0 : lastSep + PACKAGE_SEPARATOR.length;
78
+ const lastSegment = ref.slice(segStart);
79
+ const parts = lastSegment.split(CHILD_REF_SEPARATOR);
80
+ if (parts.length < 2 || parts.some((p) => p === ""))
81
+ return undefined;
82
+ return {
83
+ ownerRef: ref.slice(0, segStart) + parts[0],
84
+ path: parts.slice(1),
85
+ };
86
+ }
51
87
  /**
52
88
  * Resolve a single super reference string against a tree.
53
89
  *
@@ -55,44 +91,72 @@ function findInTree(root, fqn) {
55
91
  * against the loader's accumulating root (intoRoot). Java semantics: if the
56
92
  * ref cannot be resolved, the parser throws ParseError.
57
93
  *
58
- * @param ref - The raw super reference (e.g., "Fruit", "::pkg::Name", "..::common::id")
94
+ * FR-024 (ADR-0029): a ref whose final segment is dotted (`Customer.id`)
95
+ * targets a child nested inside an object. The owner part resolves with the
96
+ * existing strategies (absolute / relative / bare / same-package); the child
97
+ * is then selected among the owner's EFFECTIVE children (so inherited
98
+ * children resolve) by name AND the referrer's type (type-scoped). A dotted
99
+ * ref that does not resolve returns undefined WITHOUT falling through to the
100
+ * bare lookup; a dotted ref with no `referrerScope` is unresolvable.
101
+ *
102
+ * @param ref - The raw super reference (e.g., "Fruit", "::pkg::Name", "..::common::id", "Customer.id")
59
103
  * @param contextPackage - The package of the model whose super is being resolved
60
104
  * @param root - The root MetaData of the accumulating tree to search within
105
+ * @param referrerScope - FR-024: the extending node's type — required to resolve dotted refs
61
106
  * @returns The resolved MetaData, or undefined if the reference cannot be resolved
62
107
  */
63
- export function resolveSuperRef(ref, contextPackage, root) {
64
- // -------------------------------------------------------------------------
65
- // 1. Absolute reference: leading "::"
108
+ export function resolveSuperRef(ref, contextPackage, root, referrerScope) {
66
109
  // -------------------------------------------------------------------------
67
- if (ref.startsWith(PACKAGE_SEPARATOR)) {
68
- const absolutePath = ref.slice(PACKAGE_SEPARATOR.length);
69
- return findInTree(root, absolutePath);
70
- }
110
+ // 0. FR-024 dotted child-targeting ref: `<rootRef>.<child>...<child>`
111
+ //
112
+ // Addressing model (ADR-0029): the package qualifies the ROOT-level node
113
+ // only; each subsequent segment traverses CHILD NAMES, to any depth
114
+ // (object → field → view: `Customer.priceCents.display`). INTERMEDIATE
115
+ // segments select by unique name among the current node's effective
116
+ // children (a cross-type name collision, e.g. a field AND an identity both
117
+ // named "id", is ambiguous → unresolved); the FINAL segment is type-scoped
118
+ // to the referrer (a field ref resolves fields, a view ref views), which is
119
+ // also what disambiguates the common 2-segment `Customer.id` case.
71
120
  // -------------------------------------------------------------------------
72
- // 2. Relative reference: one or more leading "..::"
73
- // -------------------------------------------------------------------------
74
- if (ref.startsWith(PACKAGE_PARENT + PACKAGE_SEPARATOR)) {
75
- const parts = ref.split(PACKAGE_SEPARATOR);
76
- let levels = 0;
77
- while (levels < parts.length && parts[levels] === PACKAGE_PARENT) {
78
- levels++;
79
- }
80
- const pkgParts = contextPackage !== "" ? contextPackage.split(PACKAGE_SEPARATOR) : [];
81
- const remainder = parts.slice(levels);
82
- if (pkgParts.length < levels || remainder.length === 0) {
121
+ if (isChildTargetingRef(ref)) {
122
+ if (referrerScope === undefined)
83
123
  return undefined;
124
+ const parsed = parseChildTargetingRef(ref);
125
+ if (parsed === undefined)
126
+ return undefined; // degenerate (empty segment)
127
+ let current = resolveSuperRef(parsed.ownerRef, contextPackage, root);
128
+ if (current === undefined)
129
+ return undefined;
130
+ for (let i = 0; i < parsed.path.length - 1; i++) {
131
+ const seg = parsed.path[i];
132
+ const matches = current.children().filter((c) => c.name === seg);
133
+ if (matches.length !== 1)
134
+ return undefined; // missing or ambiguous intermediate
135
+ current = matches[0];
84
136
  }
85
- const allParts = [...pkgParts.slice(0, pkgParts.length - levels), ...remainder];
86
- return findInTree(root, allParts.join(PACKAGE_SEPARATOR));
137
+ const last = parsed.path[parsed.path.length - 1];
138
+ return current
139
+ .children()
140
+ .find((c) => c.name === last && c.type === referrerScope.type);
87
141
  }
88
142
  // -------------------------------------------------------------------------
89
- // 3. Bare name OR same-package shorthand (contains "::" but no leading
90
- // "::" or "..::"): try contextPackage prepend first, then root-rooted.
143
+ // 1. FR-032 (ADR-0032): refs in the loaded tree are already fully-qualified.
144
+ // The YAML desugar expanded every relative/bare-current ref to FQN
145
+ // (`expandRef`), and the canonical-JSON guard rejects any surviving
146
+ // `::`/`..::` form (ERR_RELATIVE_REF_IN_CANONICAL). So resolution is a
147
+ // pure FQN match — the old `::`-strip (absolute), `..::`-reduce (relative)
148
+ // and bare-current-then-ROOT-FALLBACK branches are deleted (the footgun).
149
+ //
150
+ // A qualified ref (`pkg::Name`) matches its node directly. A bare ref
151
+ // (no `::`) is the rare in-tree case: a root-level/empty-package type, or
152
+ // a bare ref constructed during dotted-owner recursion — resolve it in the
153
+ // current package ONLY (try `<ctx>::ref`), then bare (root-level) as the
154
+ // literal name. NO root fallback for a packaged bare ref.
91
155
  // -------------------------------------------------------------------------
92
- if (contextPackage !== "") {
93
- const found = findInTree(root, `${contextPackage}${PACKAGE_SEPARATOR}${ref}`);
94
- if (found !== undefined)
95
- return found;
156
+ if (!ref.includes(PACKAGE_SEPARATOR) && contextPackage !== "") {
157
+ const inPackage = findInTree(root, `${contextPackage}${PACKAGE_SEPARATOR}${ref}`);
158
+ if (inPackage !== undefined)
159
+ return inPackage;
96
160
  }
97
161
  return findInTree(root, ref);
98
162
  }
@@ -117,8 +181,24 @@ export function resolveDeferredSupers(root) {
117
181
  if (node.superResolved !== undefined)
118
182
  return;
119
183
  const effectivePkg = node.package ?? node.fileDefaultPackage ?? "";
120
- const target = resolveSuperRef(node.superRef, effectivePkg, root);
184
+ // FR-024: thread the referrer's type so dotted `Entity.child` refs resolve
185
+ // type-scoped (a field ref selects fields; an identity ref identities).
186
+ const target = resolveSuperRef(node.superRef, effectivePkg, root, { type: node.type });
121
187
  if (target !== undefined) {
188
+ // FR-024: a dotted ref must target a node of the SAME type and subtype
189
+ // as the extending node. Dotted-only — top-level extends is unchanged.
190
+ if (isChildTargetingRef(node.superRef) &&
191
+ (target.type !== node.type || target.subType !== node.subType)) {
192
+ failures.push({
193
+ nodeFqn: node.fqn(),
194
+ ref: node.superRef,
195
+ source: node.source,
196
+ kind: "target-mismatch",
197
+ target: { type: target.type, subType: target.subType },
198
+ referrer: { type: node.type, subType: node.subType },
199
+ });
200
+ return;
201
+ }
122
202
  try {
123
203
  node.setSuperResolved(target);
124
204
  }
@@ -127,7 +207,12 @@ export function resolveDeferredSupers(root) {
127
207
  }
128
208
  }
129
209
  else {
130
- failures.push({ nodeFqn: node.fqn(), ref: node.superRef, source: node.source });
210
+ failures.push({
211
+ nodeFqn: node.fqn(),
212
+ ref: node.superRef,
213
+ source: node.source,
214
+ kind: "unresolved",
215
+ });
131
216
  }
132
217
  });
133
218
  return failures;
@@ -1 +1 @@
1
- {"version":3,"file":"super-resolve.js","sourceRoot":"","sources":["../src/super-resolve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"super-resolve.js","sourceRoot":"","sources":["../src/super-resolve.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,10 @@ import { MetaData } from "../shared/meta-data.js";
2
2
  /**
3
3
  * `template.*` node — the fourth-pillar metatype (FR-004, R1).
4
4
  *
5
- * A single class backs both subtypes (`template.prompt`, `template.output`),
5
+ * A single class backs every subtype (`template.base/prompt/output/toolcall`),
6
6
  * mirroring `MetaSource`: the loader dispatches by subtype and per-subtype
7
- * attribute schemas (see `template-schema.ts`) drive validation. Typed accessors
7
+ * attribute schemas (FR-033: externalized to spec/metamodel/template.json,
8
+ * embedded at build into TEMPLATE_DEFINITION) drive validation. Typed accessors
8
9
  * are deferred to the render-engine / verify work — attr values read generically
9
10
  * via `ownAttr(...)` until then, so no untested forward-looking surface ships.
10
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"meta-template.d.ts","sourceRoot":"","sources":["../../src/template/meta-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD;;;;;;;;GAQG;AACH,qBAAa,YAAa,SAAQ,QAAQ;CAAG"}
1
+ {"version":3,"file":"meta-template.d.ts","sourceRoot":"","sources":["../../src/template/meta-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD;;;;;;;;;GASG;AACH,qBAAa,YAAa,SAAQ,QAAQ;CAAG"}
@@ -2,9 +2,10 @@ import { MetaData } from "../shared/meta-data.js";
2
2
  /**
3
3
  * `template.*` node — the fourth-pillar metatype (FR-004, R1).
4
4
  *
5
- * A single class backs both subtypes (`template.prompt`, `template.output`),
5
+ * A single class backs every subtype (`template.base/prompt/output/toolcall`),
6
6
  * mirroring `MetaSource`: the loader dispatches by subtype and per-subtype
7
- * attribute schemas (see `template-schema.ts`) drive validation. Typed accessors
7
+ * attribute schemas (FR-033: externalized to spec/metamodel/template.json,
8
+ * embedded at build into TEMPLATE_DEFINITION) drive validation. Typed accessors
8
9
  * are deferred to the render-engine / verify work — attr values read generically
9
10
  * via `ownAttr(...)` until then, so no untested forward-looking surface ships.
10
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"meta-template.js","sourceRoot":"","sources":["../../src/template/meta-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD;;;;;;;;GAQG;AACH,MAAM,OAAO,YAAa,SAAQ,QAAQ;CAAG"}
1
+ {"version":3,"file":"meta-template.js","sourceRoot":"","sources":["../../src/template/meta-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD;;;;;;;;;GASG;AACH,MAAM,OAAO,YAAa,SAAQ,QAAQ;CAAG"}
@@ -0,0 +1,3 @@
1
+ import type { ProviderDefinition } from "../provider-data.js";
2
+ export declare const PROMPT_DEFINITION: ProviderDefinition;
3
+ //# sourceMappingURL=prompt-definition.embedded.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-definition.embedded.d.ts","sourceRoot":"","sources":["../../src/template/prompt-definition.embedded.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,eAAO,MAAM,iBAAiB,EAAE,kBA8W/B,CAAC"}