@metaobjectsdev/metadata 1.0.12 → 1.1.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 (233) hide show
  1. package/README.md +2 -0
  2. package/dist/attr-schema-validate.d.ts.map +1 -1
  3. package/dist/attr-schema-validate.js +9 -12
  4. package/dist/attr-schema-validate.js.map +1 -1
  5. package/dist/constants.d.ts +1 -0
  6. package/dist/constants.d.ts.map +1 -1
  7. package/dist/constants.js +1 -0
  8. package/dist/constants.js.map +1 -1
  9. package/dist/core/attr/meta-attr-filter.d.ts.map +1 -1
  10. package/dist/core/attr/meta-attr-filter.js +8 -2
  11. package/dist/core/attr/meta-attr-filter.js.map +1 -1
  12. package/dist/core/attr/meta-attr.d.ts +14 -0
  13. package/dist/core/attr/meta-attr.d.ts.map +1 -1
  14. package/dist/core/attr/meta-attr.js +23 -1
  15. package/dist/core/attr/meta-attr.js.map +1 -1
  16. package/dist/core/field/shared-enum.d.ts +21 -0
  17. package/dist/core/field/shared-enum.d.ts.map +1 -0
  18. package/dist/core/field/shared-enum.js +49 -0
  19. package/dist/core/field/shared-enum.js.map +1 -0
  20. package/dist/core/identity/meta-identity.d.ts +1 -1
  21. package/dist/core/identity/meta-identity.d.ts.map +1 -1
  22. package/dist/core/identity/meta-identity.js +8 -13
  23. package/dist/core/identity/meta-identity.js.map +1 -1
  24. package/dist/core/index.d.ts +2 -0
  25. package/dist/core/index.d.ts.map +1 -1
  26. package/dist/core/index.js +3 -0
  27. package/dist/core/index.js.map +1 -1
  28. package/dist/core/object/object-constants.d.ts +14 -1
  29. package/dist/core/object/object-constants.d.ts.map +1 -1
  30. package/dist/core/object/object-constants.js +18 -0
  31. package/dist/core/object/object-constants.js.map +1 -1
  32. package/dist/core/object/object-definition.embedded.d.ts.map +1 -1
  33. package/dist/core/object/object-definition.embedded.js +80 -0
  34. package/dist/core/object/object-definition.embedded.js.map +1 -1
  35. package/dist/core/relationship/derive-m2m-fields.d.ts +1 -1
  36. package/dist/core/relationship/derive-m2m-fields.d.ts.map +1 -1
  37. package/dist/core/relationship/derive-m2m-fields.js +15 -44
  38. package/dist/core/relationship/derive-m2m-fields.js.map +1 -1
  39. package/dist/core/relationship/find-reference.d.ts.map +1 -1
  40. package/dist/core/relationship/find-reference.js +4 -2
  41. package/dist/core/relationship/find-reference.js.map +1 -1
  42. package/dist/core/relationship/resolve-relationship-reference.d.ts +6 -5
  43. package/dist/core/relationship/resolve-relationship-reference.d.ts.map +1 -1
  44. package/dist/core/relationship/resolve-relationship-reference.js +9 -7
  45. package/dist/core/relationship/resolve-relationship-reference.js.map +1 -1
  46. package/dist/core/reporting/meta-dimension.d.ts +13 -0
  47. package/dist/core/reporting/meta-dimension.d.ts.map +1 -0
  48. package/dist/core/reporting/meta-dimension.js +30 -0
  49. package/dist/core/reporting/meta-dimension.js.map +1 -0
  50. package/dist/core/reporting/meta-measure.d.ts +24 -0
  51. package/dist/core/reporting/meta-measure.d.ts.map +1 -0
  52. package/dist/core/reporting/meta-measure.js +54 -0
  53. package/dist/core/reporting/meta-measure.js.map +1 -0
  54. package/dist/core/reporting/meta-segment.d.ts +6 -0
  55. package/dist/core/reporting/meta-segment.d.ts.map +1 -0
  56. package/dist/core/reporting/meta-segment.js +13 -0
  57. package/dist/core/reporting/meta-segment.js.map +1 -0
  58. package/dist/core/reporting/report-accessors.d.ts +27 -0
  59. package/dist/core/reporting/report-accessors.d.ts.map +1 -0
  60. package/dist/core/reporting/report-accessors.js +56 -0
  61. package/dist/core/reporting/report-accessors.js.map +1 -0
  62. package/dist/core/reporting/report-describe.d.ts +59 -0
  63. package/dist/core/reporting/report-describe.d.ts.map +1 -0
  64. package/dist/core/reporting/report-describe.js +182 -0
  65. package/dist/core/reporting/report-describe.js.map +1 -0
  66. package/dist/core/reporting/report-read-model.d.ts +34 -0
  67. package/dist/core/reporting/report-read-model.d.ts.map +1 -0
  68. package/dist/core/reporting/report-read-model.js +165 -0
  69. package/dist/core/reporting/report-read-model.js.map +1 -0
  70. package/dist/core/reporting/report-shape.d.ts +103 -0
  71. package/dist/core/reporting/report-shape.d.ts.map +1 -0
  72. package/dist/core/reporting/report-shape.js +398 -0
  73. package/dist/core/reporting/report-shape.js.map +1 -0
  74. package/dist/core/reporting/reporting-constants.d.ts +65 -0
  75. package/dist/core/reporting/reporting-constants.d.ts.map +1 -0
  76. package/dist/core/reporting/reporting-constants.js +84 -0
  77. package/dist/core/reporting/reporting-constants.js.map +1 -0
  78. package/dist/core/reporting/reporting-definition.embedded.d.ts +3 -0
  79. package/dist/core/reporting/reporting-definition.embedded.d.ts.map +1 -0
  80. package/dist/core/reporting/reporting-definition.embedded.js +185 -0
  81. package/dist/core/reporting/reporting-definition.embedded.js.map +1 -0
  82. package/dist/core/requirement/resolve-claim.d.ts +8 -0
  83. package/dist/core/requirement/resolve-claim.d.ts.map +1 -1
  84. package/dist/core/requirement/resolve-claim.js +21 -0
  85. package/dist/core/requirement/resolve-claim.js.map +1 -1
  86. package/dist/core/yaml-desugar.d.ts.map +1 -1
  87. package/dist/core/yaml-desugar.js +12 -82
  88. package/dist/core/yaml-desugar.js.map +1 -1
  89. package/dist/core-types.d.ts.map +1 -1
  90. package/dist/core-types.js +28 -1
  91. package/dist/core-types.js.map +1 -1
  92. package/dist/docs-ref.d.ts +19 -0
  93. package/dist/docs-ref.d.ts.map +1 -0
  94. package/dist/docs-ref.js +37 -0
  95. package/dist/docs-ref.js.map +1 -0
  96. package/dist/errors.d.ts +1 -1
  97. package/dist/errors.d.ts.map +1 -1
  98. package/dist/errors.js +24 -6
  99. package/dist/errors.js.map +1 -1
  100. package/dist/fmt.d.ts.map +1 -1
  101. package/dist/fmt.js +3 -1
  102. package/dist/fmt.js.map +1 -1
  103. package/dist/index.d.ts +15 -4
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.js +18 -4
  106. package/dist/index.js.map +1 -1
  107. package/dist/loader/declared-duplicate-fields.d.ts +19 -0
  108. package/dist/loader/declared-duplicate-fields.d.ts.map +1 -0
  109. package/dist/loader/declared-duplicate-fields.js +97 -0
  110. package/dist/loader/declared-duplicate-fields.js.map +1 -0
  111. package/dist/loader/meta-data-loader.d.ts.map +1 -1
  112. package/dist/loader/meta-data-loader.js +18 -1
  113. package/dist/loader/meta-data-loader.js.map +1 -1
  114. package/dist/loader/reporting-validation.d.ts +11 -0
  115. package/dist/loader/reporting-validation.d.ts.map +1 -0
  116. package/dist/loader/reporting-validation.js +883 -0
  117. package/dist/loader/reporting-validation.js.map +1 -0
  118. package/dist/loader/resolve-references.d.ts +8 -0
  119. package/dist/loader/resolve-references.d.ts.map +1 -0
  120. package/dist/loader/resolve-references.js +132 -0
  121. package/dist/loader/resolve-references.js.map +1 -0
  122. package/dist/loader/validation-passes.d.ts.map +1 -1
  123. package/dist/loader/validation-passes.js +14 -9
  124. package/dist/loader/validation-passes.js.map +1 -1
  125. package/dist/loader/validation-registry.d.ts.map +1 -1
  126. package/dist/loader/validation-registry.js +33 -10
  127. package/dist/loader/validation-registry.js.map +1 -1
  128. package/dist/metamodel-docs/index.js +3 -3
  129. package/dist/metamodel-docs/index.js.map +1 -1
  130. package/dist/metamodel-docs/render.js +4 -4
  131. package/dist/metamodel-docs/render.js.map +1 -1
  132. package/dist/naming-refs.d.ts +102 -50
  133. package/dist/naming-refs.d.ts.map +1 -1
  134. package/dist/naming-refs.js +223 -97
  135. package/dist/naming-refs.js.map +1 -1
  136. package/dist/naming.d.ts +65 -7
  137. package/dist/naming.d.ts.map +1 -1
  138. package/dist/naming.js +98 -5
  139. package/dist/naming.js.map +1 -1
  140. package/dist/object-serializer.d.ts.map +1 -1
  141. package/dist/object-serializer.js +6 -9
  142. package/dist/object-serializer.js.map +1 -1
  143. package/dist/parser-core.d.ts.map +1 -1
  144. package/dist/parser-core.js +18 -48
  145. package/dist/parser-core.js.map +1 -1
  146. package/dist/persistence/db/db-definition.embedded.js +2 -2
  147. package/dist/persistence/db/db-definition.embedded.js.map +1 -1
  148. package/dist/persistence/source/meta-source.d.ts +5 -2
  149. package/dist/persistence/source/meta-source.d.ts.map +1 -1
  150. package/dist/persistence/source/meta-source.js +10 -6
  151. package/dist/persistence/source/meta-source.js.map +1 -1
  152. package/dist/registry-manifest-exclusions.js +2 -2
  153. package/dist/registry-manifest-exclusions.js.map +1 -1
  154. package/dist/registry-manifest.d.ts +1 -1
  155. package/dist/registry-manifest.js +1 -1
  156. package/dist/release-docs.d.ts +11 -0
  157. package/dist/release-docs.d.ts.map +1 -0
  158. package/dist/release-docs.js +48 -0
  159. package/dist/release-docs.js.map +1 -0
  160. package/dist/serializer-json.d.ts +15 -1
  161. package/dist/serializer-json.d.ts.map +1 -1
  162. package/dist/serializer-json.js +55 -17
  163. package/dist/serializer-json.js.map +1 -1
  164. package/dist/shared/base-types.d.ts +7 -1
  165. package/dist/shared/base-types.d.ts.map +1 -1
  166. package/dist/shared/base-types.js +9 -0
  167. package/dist/shared/base-types.js.map +1 -1
  168. package/dist/shared/meta-data.d.ts +10 -0
  169. package/dist/shared/meta-data.d.ts.map +1 -1
  170. package/dist/shared/meta-data.js +22 -1
  171. package/dist/shared/meta-data.js.map +1 -1
  172. package/dist/shared/meta-root.d.ts +13 -1
  173. package/dist/shared/meta-root.d.ts.map +1 -1
  174. package/dist/shared/meta-root.js +19 -1
  175. package/dist/shared/meta-root.js.map +1 -1
  176. package/dist/super-resolve.d.ts +4 -1
  177. package/dist/super-resolve.d.ts.map +1 -1
  178. package/dist/super-resolve.js +44 -65
  179. package/dist/super-resolve.js.map +1 -1
  180. package/dist/vocabulary-catalog.js +2 -2
  181. package/dist/vocabulary-catalog.js.map +1 -1
  182. package/package.json +6 -1
  183. package/src/attr-schema-validate.ts +9 -13
  184. package/src/constants.ts +1 -0
  185. package/src/core/attr/meta-attr-filter.ts +8 -1
  186. package/src/core/attr/meta-attr.ts +24 -1
  187. package/src/core/field/shared-enum.ts +53 -0
  188. package/src/core/identity/meta-identity.ts +9 -12
  189. package/src/core/index.ts +5 -0
  190. package/src/core/object/object-constants.ts +19 -0
  191. package/src/core/object/object-definition.embedded.ts +80 -0
  192. package/src/core/relationship/derive-m2m-fields.ts +15 -48
  193. package/src/core/relationship/find-reference.ts +4 -2
  194. package/src/core/relationship/resolve-relationship-reference.ts +11 -9
  195. package/src/core/reporting/meta-dimension.ts +41 -0
  196. package/src/core/reporting/meta-measure.ts +75 -0
  197. package/src/core/reporting/meta-segment.ts +14 -0
  198. package/src/core/reporting/report-accessors.ts +73 -0
  199. package/src/core/reporting/report-describe.ts +206 -0
  200. package/src/core/reporting/report-read-model.ts +177 -0
  201. package/src/core/reporting/report-shape.ts +493 -0
  202. package/src/core/reporting/reporting-constants.ts +104 -0
  203. package/src/core/reporting/reporting-definition.embedded.ts +192 -0
  204. package/src/core/requirement/resolve-claim.ts +20 -0
  205. package/src/core/yaml-desugar.ts +9 -89
  206. package/src/core-types.ts +41 -0
  207. package/src/docs-ref.ts +41 -0
  208. package/src/errors.ts +24 -6
  209. package/src/fmt.ts +3 -1
  210. package/src/index.ts +73 -5
  211. package/src/loader/declared-duplicate-fields.ts +114 -0
  212. package/src/loader/meta-data-loader.ts +25 -1
  213. package/src/loader/reporting-validation.ts +1137 -0
  214. package/src/loader/resolve-references.ts +144 -0
  215. package/src/loader/validation-passes.ts +13 -9
  216. package/src/loader/validation-registry.ts +37 -9
  217. package/src/metamodel-docs/index.ts +3 -3
  218. package/src/metamodel-docs/render.ts +4 -4
  219. package/src/naming-refs.ts +237 -94
  220. package/src/naming.ts +131 -11
  221. package/src/object-serializer.ts +7 -9
  222. package/src/parser-core.ts +19 -56
  223. package/src/persistence/db/db-definition.embedded.ts +2 -2
  224. package/src/persistence/source/meta-source.ts +10 -6
  225. package/src/registry-manifest-exclusions.ts +2 -2
  226. package/src/registry-manifest.ts +1 -1
  227. package/src/release-docs.ts +48 -0
  228. package/src/serializer-json.ts +79 -12
  229. package/src/shared/base-types.ts +9 -0
  230. package/src/shared/meta-data.ts +22 -1
  231. package/src/shared/meta-root.ts +20 -1
  232. package/src/super-resolve.ts +49 -63
  233. package/src/vocabulary-catalog.ts +2 -2
@@ -72,6 +72,27 @@ export const OBJECT_DEFINITION = {
72
72
  "min": 0,
73
73
  "max": null
74
74
  },
75
+ {
76
+ "type": "dimension",
77
+ "subType": "*",
78
+ "name": "*",
79
+ "min": 0,
80
+ "max": null
81
+ },
82
+ {
83
+ "type": "measure",
84
+ "subType": "*",
85
+ "name": "*",
86
+ "min": 0,
87
+ "max": null
88
+ },
89
+ {
90
+ "type": "segment",
91
+ "subType": "*",
92
+ "name": "*",
93
+ "min": 0,
94
+ "max": null
95
+ },
75
96
  {
76
97
  "type": "attr",
77
98
  "subType": "string",
@@ -124,6 +145,65 @@ export const OBJECT_DEFINITION = {
124
145
  "description": "Optional row-scope predicate (a portable attr.filter object: eq/ne/gt/gte/lt/lte/like/in/isNull with and/or, desugared to { field: { op: value } } at parse time) selecting which rows the view returns — lowered to an outer SQL WHERE. Resolves against the projection's own declared fields; an aggregate-derived field is not addressable (fail-closed)."
125
146
  }
126
147
  ]
148
+ },
149
+ {
150
+ "type": "object",
151
+ "subType": "report",
152
+ "extendsBase": true,
153
+ "description": "A declared report (FR-044): a fixed combination of dimensions and measures of ONE entity (@from), compiled to a read-only view. One row per distinct dimension tuple; no dimensions means exactly one row. Fields are DERIVED, not declared: one per dimension (a time dimension's field is <dimension><Grain>, e.g. purchasedAtDay) and one per measure. Every measure must belong to @from (two fact tables are two reports). @filter and @segment scope rows before grouping and combine by AND. Read-only: no writes, no get-by-id.",
154
+ "whenToUse": "Dashboard totals, per-day series and per-group summaries that would otherwise be hand-written GROUP BY queries.",
155
+ "children": [
156
+ {
157
+ "type": "attr",
158
+ "subType": "string",
159
+ "name": "from",
160
+ "min": 1,
161
+ "max": 1,
162
+ "description": "The object.entity whose rows the report aggregates."
163
+ },
164
+ {
165
+ "type": "attr",
166
+ "subType": "string",
167
+ "name": "dimensions",
168
+ "isArray": true,
169
+ "min": 0,
170
+ "max": 1,
171
+ "description": "Dimension names of @from; a time dimension is written 'name:grain'. Absent means one global row."
172
+ },
173
+ {
174
+ "type": "attr",
175
+ "subType": "string",
176
+ "name": "measures",
177
+ "isArray": true,
178
+ "min": 1,
179
+ "max": 1,
180
+ "description": "Measure names of @from."
181
+ },
182
+ {
183
+ "type": "attr",
184
+ "subType": "string",
185
+ "name": "segment",
186
+ "min": 0,
187
+ "max": 1,
188
+ "description": "Optional segment of @from scoping the rows."
189
+ },
190
+ {
191
+ "type": "attr",
192
+ "subType": "filter",
193
+ "name": "filter",
194
+ "min": 0,
195
+ "max": 1,
196
+ "description": "Optional row scope over @from's fields; may use relative-date values."
197
+ },
198
+ {
199
+ "type": "attr",
200
+ "subType": "string",
201
+ "name": "spine",
202
+ "min": 0,
203
+ "max": 1,
204
+ "description": "Optional to-one path from @from to the entity whose rows supply the report's rows (e.g. 'Purchase.program'), written like a dimension's @via. With it the report has one row per distinct dimension tuple among THAT entity's rows, including the ones no row of @from refers to: a count there is 0 and any other measure is null unless it declares @default. Every listed dimension must be reached through this path. @segment and @filter still scope the rows of @from and never remove a row. A row of @from whose reference is null or matches nothing is in no row of the report."
205
+ }
206
+ ]
127
207
  }
128
208
  ]
129
209
  };
@@ -1 +1 @@
1
- {"version":3,"file":"object-definition.embedded.js","sourceRoot":"","sources":["../../../src/core/object/object-definition.embedded.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"object-definition.embedded.js","sourceRoot":"","sources":["../../../src/core/object/object-definition.embedded.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@ export interface M2MFields {
20
20
  * @param source the entity the caller is navigating from. Accepted alongside
21
21
  * `rel.parent` as a name for the relationship's subject, and used
22
22
  * as the declaring entity when `rel` has no entity parent.
23
- * @param root the loaded model root (to find the junction entity)
23
+ * @param root the loaded model root
24
24
  * @throws M2MDerivationError when the junction is missing/malformed or the
25
25
  * self-join is ambiguous.
26
26
  */
@@ -1 +1 @@
1
- {"version":3,"file":"derive-m2m-fields.d.ts","sourceRoot":"","sources":["../../../src/core/relationship/derive-m2m-fields.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAO/D,6EAA6E;AAC7E,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,8BAA8B;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,SAAS;IACxB,2DAA2D;IAC3D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAsCD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,gBAAgB,EACrB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,GACb,SAAS,CAkKX"}
1
+ {"version":3,"file":"derive-m2m-fields.d.ts","sourceRoot":"","sources":["../../../src/core/relationship/derive-m2m-fields.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAS/D,6EAA6E;AAC7E,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,8BAA8B;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,SAAS;IACxB,2DAA2D;IAC3D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAOD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,gBAAgB,EACrB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,GACb,SAAS,CA8JX"}
@@ -39,7 +39,9 @@
39
39
  // the subject read as a self-join and refused to derive. Scoped deliberately to
40
40
  // this one predicate — every other name comparison in this file is untouched.
41
41
  import { stripPackage } from "../../naming.js";
42
- import { resolveObjectRef } from "../../naming-refs.js";
42
+ import { refTarget } from "../../naming-refs.js";
43
+ import { IDENTITY_REFERENCE_ATTR_REFERENCES } from "../identity/identity-constants.js";
44
+ import { RELATIONSHIP_ATTR_OBJECT_REF, RELATIONSHIP_ATTR_THROUGH } from "./relationship-constants.js";
43
45
  import { TYPE_OBJECT } from "../../shared/base-types.js";
44
46
  import { PACKAGE_SEPARATOR } from "../../shared/structural.js";
45
47
  /** Thrown when a M:N relationship's junction FK fields cannot be derived. */
@@ -54,33 +56,6 @@ export class M2MDerivationError extends Error {
54
56
  function refFkField(ref) {
55
57
  return ref.fields[0];
56
58
  }
57
- /**
58
- * The root entity a reference name denotes, or undefined — resolved by the ONE
59
- * matcher the loader uses (`resolveObjectRef`, ADR-0041/0042): a fully-qualified
60
- * name binds exactly on its resolution key, a bare name binds in the REFERRER's
61
- * package.
62
- *
63
- * This exists so the SUBJECT comparison below can be made on object IDENTITY.
64
- * A bare-name compare cannot tell `a::NodeBase` from `b::NodeBase`, which made a
65
- * genuine cross-package hetero M:N read as a self-join the moment the subject
66
- * set held two names — and the first-match-wins bare arm this used to carry
67
- * (Java's deferred #174) bound a bare name to whichever same-short-named entity
68
- * happened to load first, which is load-ORDER dependence, not a naming rule.
69
- */
70
- function findEntity(root, name, referrerPkg) {
71
- if (name === undefined || name === "")
72
- return undefined;
73
- // ADR-0041/0042 through the single resolveObjectRef matcher — an FQN resolves
74
- // exactly on its resolution key, a BARE name resolves in the REFERRER's
75
- // package. The bare arm used to be `objects().find(o => o.name === bare)`,
76
- // which took whichever same-short-named entity loaded first: a bare
77
- // `@objectRef: "Tag"` on an abstract base in package `base` bound to
78
- // `acme::Tag` merely because the acme source was read first. Callers pass the
79
- // referrer that owns the name they are resolving — the DECLARING entity for
80
- // the relationship's own @objectRef, the JUNCTION for its references' —
81
- // because those are different packages whenever a base is inherited across one.
82
- return resolveObjectRef(root, name, referrerPkg).node;
83
- }
84
59
  /**
85
60
  * Derive the source/target junction FK fields for a M:N relationship.
86
61
  *
@@ -89,7 +64,7 @@ function findEntity(root, name, referrerPkg) {
89
64
  * @param source the entity the caller is navigating from. Accepted alongside
90
65
  * `rel.parent` as a name for the relationship's subject, and used
91
66
  * as the declaring entity when `rel` has no entity parent.
92
- * @param root the loaded model root (to find the junction entity)
67
+ * @param root the loaded model root
93
68
  * @throws M2MDerivationError when the junction is missing/malformed or the
94
69
  * self-join is ambiguous.
95
70
  */
@@ -107,9 +82,10 @@ export function deriveM2MFields(rel, source, root) {
107
82
  if (throughName === undefined) {
108
83
  throw new M2MDerivationError(`relationship "${declaringEntity.name}.${rel.name}" is missing @through (required for M:N derivation)`);
109
84
  }
110
- // ADR-0041/0042 — resolve @through through the SAME matcher the loader uses
111
- // (resolveObjectRef, via validation-passes' _findObject): an FQN resolves
112
- // exactly on its resolution key, a bare name resolves package-locally.
85
+ // ADR-0059 R7 — @through, @objectRef and the junction's @references are read
86
+ // as bound targets (refTarget), each resolved in the package of the node that
87
+ // declares it, so an inherited reference keeps the meaning it had where it was
88
+ // written.
113
89
  //
114
90
  // This used to be `root.findObject(fqn)` with a fall back to the bare suffix
115
91
  // after the last "::". findObject is keyed by BARE name, so the FQN lookup
@@ -120,12 +96,7 @@ export function deriveM2MFields(rel, source, root) {
120
96
  // nowhere near the navigating entity. The pairing then failed, so a valid
121
97
  // cross-package M:N emitted no traversal route in TS and C# and failed the
122
98
  // build in Java, Kotlin and Python.
123
- //
124
- // Note findEntity() below was ALREADY FQN-exact for the same reason (see its
125
- // doc comment). The two halves of one function disagreed about how a
126
- // package-qualified name resolves; only the junction half was wrong.
127
- const referrerPkg = declaringEntity.package ?? declaringEntity.fileDefaultPackage ?? "";
128
- const junction = resolveObjectRef(root, throughName, referrerPkg).node;
99
+ const junction = refTarget(rel, RELATIONSHIP_ATTR_THROUGH);
129
100
  if (junction === undefined) {
130
101
  throw new M2MDerivationError(`relationship "${declaringEntity.name}.${rel.name}" @through "${throughName}" does not resolve to an entity`);
131
102
  }
@@ -163,14 +134,14 @@ export function deriveM2MFields(rel, source, root) {
163
134
  const isSubject = (entity) => entity !== undefined && (entity === declaringEntity || entity === source);
164
135
  const isSubjectName = (name) => name !== undefined && subjectNames.includes(stripPackage(name));
165
136
  // The junction owns its references' @references names, so those resolve in the
166
- // JUNCTION's package; the relationship's own @objectRef resolves in the
167
- // DECLARING entity's. Under `extends` across packages these differ, and using
168
- // one for both is what bound a bare @objectRef to the wrong same-named entity.
169
- const junctionPkg = junction.package ?? junction.fileDefaultPackage ?? "";
170
- const refEntity = (r) => findEntity(root, r.targetEntity, junctionPkg);
137
+ // package of the node that declares them; the relationship's own @objectRef in
138
+ // the package of the node that declares it. Under `extends` across packages these
139
+ // differ, and using one for both is what bound a bare @objectRef to the wrong
140
+ // same-named entity.
141
+ const refEntity = (r) => refTarget(r, IDENTITY_REFERENCE_ATTR_REFERENCES);
171
142
  // Defensive bare fallback when @objectRef does not resolve — loader validation
172
143
  // normally guarantees it does. Same carve-out the Java reference makes.
173
- const targetEntityNode = findEntity(root, targetName, referrerPkg);
144
+ const targetEntityNode = refTarget(rel, RELATIONSHIP_ATTR_OBJECT_REF);
174
145
  const isSelfJoin = targetEntityNode !== undefined
175
146
  ? isSubject(targetEntityNode)
176
147
  : isSubjectName(targetName);
@@ -1 +1 @@
1
- {"version":3,"file":"derive-m2m-fields.js","sourceRoot":"","sources":["../../../src/core/relationship/derive-m2m-fields.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"derive-m2m-fields.js","sourceRoot":"","sources":["../../../src/core/relationship/derive-m2m-fields.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,kFAAkF;AAClF,EAAE;AACF,sEAAsE;AACtE,iFAAiF;AACjF,iFAAiF;AACjF,6EAA6E;AAC7E,+CAA+C;AAC/C,EAAE;AACF,uCAAuC;AACvC,+EAA+E;AAC/E,6EAA6E;AAC7E,wEAAwE;AACxE,2EAA2E;AAC3E,qEAAqE;AACrE,iFAAiF;AACjF,2EAA2E;AAC3E,mEAAmE;AACnE,gFAAgF;AAChF,EAAE;AACF,qFAAqF;AACrF,kFAAkF;AAClF,sFAAsF;AACtF,oFAAoF;AACpF,uFAAuF;AACvF,uFAAuF;AACvF,kFAAkF;AAClF,uFAAuF;AACvF,uFAAuF;AACvF,qFAAqF;AACrF,wFAAwF;AACxF,qFAAqF;AACrF,wDAAwD;AACxD,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,iFAAiF;AACjF,iFAAiF;AACjF,gFAAgF;AAChF,8EAA8E;AAM9E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,kCAAkC,EAAE,MAAM,mCAAmC,CAAC;AACvF,OAAO,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACtG,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,6EAA6E;AAC7E,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,IAAI,GAAG,0BAA0B,CAAC;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AASD,mFAAmF;AACnF,SAAS,UAAU,CAAC,GAA0B;IAC5C,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAC7B,GAAqB,EACrB,MAAkB,EAClB,IAAc;IAEd,4EAA4E;IAC5E,gFAAgF;IAChF,8DAA8D;IAC9D,+EAA+E;IAC/E,2DAA2D;IAC3D,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;IAC7B,MAAM,eAAe,GACnB,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW;QACvD,CAAC,CAAE,SAAwB;QAC3B,CAAC,CAAC,MAAM,CAAC;IAEb,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC;IAChC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,kBAAkB,CAC1B,iBAAiB,eAAe,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,qDAAqD,CACvG,CAAC;IACJ,CAAC;IACD,6EAA6E;IAC7E,8EAA8E;IAC9E,+EAA+E;IAC/E,WAAW;IACX,EAAE;IACF,6EAA6E;IAC7E,2EAA2E;IAC3E,8EAA8E;IAC9E,8EAA8E;IAC9E,4EAA4E;IAC5E,+EAA+E;IAC/E,0EAA0E;IAC1E,2EAA2E;IAC3E,oCAAoC;IACpC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,EAAE,yBAAyB,CAA2B,CAAC;IACrF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,kBAAkB,CAC1B,iBAAiB,eAAe,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,eAAe,WAAW,iCAAiC,CAC7G,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC;IACjC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,kBAAkB,CAC1B,iBAAiB,eAAe,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,0CAA0C,CAC5F,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,mBAAmB,EAAE,CAAC;IAC5C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,kBAAkB,CAC1B,aAAa,WAAW,uBAAuB,eAAe,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,6BAA6B;YAC1G,sCAAsC,IAAI,CAAC,MAAM,GAAG,CACvD,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,uEAAuE;IACvE,gFAAgF;IAChF,iFAAiF;IACjF,6CAA6C;IAC7C,2EAA2E;IAC3E,iFAAiF;IACjF,0CAA0C;IAC1C,8EAA8E;IAC9E,8EAA8E;IAC9E,0EAA0E;IAC1E,+EAA+E;IAC/E,gFAAgF;IAChF,kBAAkB;IAClB,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;QACvD,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC;QACxB,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpE,uEAAuE;IACvE,8EAA8E;IAC9E,4EAA4E;IAC5E,mCAAmC;IACnC,MAAM,SAAS,GAAG,CAAC,MAA8B,EAAW,EAAE,CAC5D,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,KAAK,eAAe,IAAI,MAAM,KAAK,MAAM,CAAC,CAAC;IAC5E,MAAM,aAAa,GAAG,CAAC,IAAwB,EAAW,EAAE,CAC1D,IAAI,KAAK,SAAS,IAAI,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAElE,+EAA+E;IAC/E,+EAA+E;IAC/E,kFAAkF;IAClF,8EAA8E;IAC9E,qBAAqB;IACrB,MAAM,SAAS,GAAG,CAAC,CAAwB,EAA0B,EAAE,CACrE,SAAS,CAAC,CAAC,EAAE,kCAAkC,CAA2B,CAAC;IAE7E,+EAA+E;IAC/E,wEAAwE;IACxE,MAAM,gBAAgB,GAAG,SAAS,CAAC,GAAG,EAAE,4BAA4B,CAA2B,CAAC;IAChG,MAAM,UAAU,GAAG,gBAAgB,KAAK,SAAS;QAC/C,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC;QAC7B,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAE9B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,oEAAoE;QACpE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,yEAAyE;QACzE,6EAA6E;QAC7E,wEAAwE;QACxE,+EAA+E;QAC/E,6EAA6E;QAC7E,2EAA2E;QAC3E,8EAA8E;QAC9E,6CAA6C;QAC7C,MAAM,SAAS,GAAG,gBAAgB,KAAK,SAAS;YAC9C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC;YACrD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;QAChH,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC3D,MAAM,IAAI,kBAAkB,CAC1B,aAAa,WAAW,uBAAuB,eAAe,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,qBAAqB;gBAClG,yBAAyB,YAAY,gBAAgB,YAAY,CAAC,UAAU,CAAC,GAAG,CACnF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;IACtC,CAAC;IAED,yDAAyD;IACzD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,gFAAgF;QAChF,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,IAAI,kBAAkB,CAC1B,uBAAuB,WAAW,UAAU,eAAe,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,mCAAmC,CAChH,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IAC5C,CAAC;IAED,MAAM,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC;IAC1C,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,kBAAkB,CAC1B,2BAA2B,eAAe,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,cAAc,WAAW,kBAAkB;YACpG,2DAA2D,CAC9D,CAAC;IACJ,CAAC;IAED,6FAA6F;IAC7F,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC;IACrE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,kBAAkB,CAC1B,oBAAoB,cAAc,SAAS,eAAe,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,uBAAuB;YAChG,4CAA4C,WAAW,GAAG,CAC7D,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,kBAAkB,CAC1B,aAAa,WAAW,UAAU,eAAe,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,yCAAyC,CAC5G,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;AACtD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"find-reference.d.ts","sourceRoot":"","sources":["../../../src/core/relationship/find-reference.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAG1E,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,+DAA+D;IAC/D,QAAQ,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;CACnD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,CAAC,EAAE,UAAU,EACb,CAAC,EAAE,UAAU,GACZ,eAAe,EAAE,CAUnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,CAAC,EAAE,UAAU,EACb,CAAC,EAAE,UAAU,GACZ,eAAe,GAAG,SAAS,CAE7B"}
1
+ {"version":3,"file":"find-reference.d.ts","sourceRoot":"","sources":["../../../src/core/relationship/find-reference.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAI1E,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,+DAA+D;IAC/D,QAAQ,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;CACnD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,CAAC,EAAE,UAAU,EACb,CAAC,EAAE,UAAU,GACZ,eAAe,EAAE,CAWnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,CAAC,EAAE,UAAU,EACb,CAAC,EAAE,UAAU,GACZ,eAAe,GAAG,SAAS,CAE7B"}
@@ -5,7 +5,8 @@
5
5
  // holds the reference. This is the single source of truth for FK direction
6
6
  // across projection codegen, Drizzle schema emit, relations() blocks, and
7
7
  // migration schema comparison.
8
- import { stripPackage } from "../../naming.js";
8
+ import { refTarget } from "../../naming-refs.js";
9
+ import { IDENTITY_REFERENCE_ATTR_REFERENCES } from "../identity/identity-constants.js";
9
10
  /**
10
11
  * Every identity.reference on `a` or `b` whose @references targets the other
11
12
  * side, `a` walked first. Comparison is package-insensitive: `@references` may
@@ -23,7 +24,8 @@ export function findReferencesBetween(a, b) {
23
24
  const found = [];
24
25
  for (const [holder, other] of [[a, b], [b, a]]) {
25
26
  for (const ref of holder.referenceIdentities()) {
26
- if (stripPackage(ref.targetEntity) === other.name) {
27
+ // ADR-0059 R7: compare the bound target, never a short name.
28
+ if (refTarget(ref, IDENTITY_REFERENCE_ATTR_REFERENCES) === other) {
27
29
  found.push({ holder, other, referenceIdentity: ref });
28
30
  }
29
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"find-reference.js","sourceRoot":"","sources":["../../../src/core/relationship/find-reference.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,4EAA4E;AAC5E,gFAAgF;AAChF,2EAA2E;AAC3E,0EAA0E;AAC1E,+BAA+B;AAI/B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAW/C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CACnC,CAAa,EACb,CAAa;IAEb,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAU,EAAE,CAAC;QACxD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAmB,EAAE,EAAE,CAAC;YAC/C,IAAI,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;gBAClD,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAClC,CAAa,EACb,CAAa;IAEb,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"find-reference.js","sourceRoot":"","sources":["../../../src/core/relationship/find-reference.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,4EAA4E;AAC5E,gFAAgF;AAChF,2EAA2E;AAC3E,0EAA0E;AAC1E,+BAA+B;AAI/B,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,kCAAkC,EAAE,MAAM,mCAAmC,CAAC;AAWvF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CACnC,CAAa,EACb,CAAa;IAEb,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAU,EAAE,CAAC;QACxD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAmB,EAAE,EAAE,CAAC;YAC/C,6DAA6D;YAC7D,IAAI,SAAS,CAAC,GAAG,EAAE,kCAAkC,CAAC,KAAK,KAAK,EAAE,CAAC;gBACjE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAClC,CAAa,EACb,CAAa;IAEb,OAAO,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC"}
@@ -1,16 +1,17 @@
1
1
  import type { MetaObject } from "../object/meta-object.js";
2
2
  import type { MetaReferenceIdentity } from "../identity/meta-identity.js";
3
+ import type { MetaData } from "../../shared/meta-data.js";
3
4
  /**
4
5
  * The set of lowercased names a candidate reference answers to: its own name
5
6
  * and its FK field, each with and without one stripped suffix.
6
7
  */
7
8
  export declare function referencePairingKeys(ref: MetaReferenceIdentity): Set<string>;
8
9
  /**
9
- * Every identity.reference on `holder` whose @references targets `targetEntity`.
10
- * Package-insensitive on both sides: @references and @objectRef may each be bare
11
- * or fully qualified.
10
+ * Every identity.reference on `holder` whose @references targets `targetEntity`: a
11
+ * reference matches when its @references is bound to that node (ADR-0059 R7: identity,
12
+ * never a short name). An unresolved target (undefined) matches nothing.
12
13
  */
13
- export declare function referenceCandidatesFor(holder: MetaObject, targetEntity: string): MetaReferenceIdentity[];
14
+ export declare function referenceCandidatesFor(holder: MetaObject, targetEntity: MetaData | undefined): MetaReferenceIdentity[];
14
15
  /**
15
16
  * Which identity.reference does this `@cardinality: one` relationship navigate
16
17
  * through? The ladder, in order:
@@ -23,5 +24,5 @@ export declare function referenceCandidatesFor(holder: MetaObject, targetEntity:
23
24
  * Returns undefined for "no candidate" and "cannot choose" alike; callers that
24
25
  * need to tell them apart use referenceCandidatesFor().
25
26
  */
26
- export declare function resolveRelationshipReference(holder: MetaObject, relationshipName: string, targetEntity: string, sourceRefField?: string): MetaReferenceIdentity | undefined;
27
+ export declare function resolveRelationshipReference(holder: MetaObject, relationshipName: string, targetEntity: MetaData | undefined, sourceRefField?: string): MetaReferenceIdentity | undefined;
27
28
  //# sourceMappingURL=resolve-relationship-reference.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-relationship-reference.d.ts","sourceRoot":"","sources":["../../../src/core/relationship/resolve-relationship-reference.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAwB1E;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,qBAAqB,GAAG,GAAG,CAAC,MAAM,CAAC,CAW5E;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,MAAM,GACnB,qBAAqB,EAAE,CAOzB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,UAAU,EAClB,gBAAgB,EAAE,MAAM,EACxB,YAAY,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,GACtB,qBAAqB,GAAG,SAAS,CAYnC"}
1
+ {"version":3,"file":"resolve-relationship-reference.d.ts","sourceRoot":"","sources":["../../../src/core/relationship/resolve-relationship-reference.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAyB1D;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,qBAAqB,GAAG,GAAG,CAAC,MAAM,CAAC,CAW5E;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,QAAQ,GAAG,SAAS,GACjC,qBAAqB,EAAE,CAOzB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,UAAU,EAClB,gBAAgB,EAAE,MAAM,EACxB,YAAY,EAAE,QAAQ,GAAG,SAAS,EAClC,cAAc,CAAC,EAAE,MAAM,GACtB,qBAAqB,GAAG,SAAS,CAYnC"}
@@ -7,7 +7,8 @@
7
7
  // Taking the first match emits a join on the wrong column that typechecks, has
8
8
  // correct DDL and passes verify — so the ladder below resolves it explicitly or
9
9
  // not at all. ADR-0029 §5: ambiguity is a load error naming the candidates.
10
- import { stripPackage } from "../../naming.js";
10
+ import { refTarget } from "../../naming-refs.js";
11
+ import { IDENTITY_REFERENCE_ATTR_REFERENCES } from "../identity/identity-constants.js";
11
12
  /**
12
13
  * Trailing suffixes stripped from a CANDIDATE's name/FK field when building its
13
14
  * pairing keys. Ordered — first match wins, so "reference" is tested before
@@ -44,17 +45,18 @@ export function referencePairingKeys(ref) {
44
45
  return keys;
45
46
  }
46
47
  /**
47
- * Every identity.reference on `holder` whose @references targets `targetEntity`.
48
- * Package-insensitive on both sides: @references and @objectRef may each be bare
49
- * or fully qualified.
48
+ * Every identity.reference on `holder` whose @references targets `targetEntity`: a
49
+ * reference matches when its @references is bound to that node (ADR-0059 R7: identity,
50
+ * never a short name). An unresolved target (undefined) matches nothing.
50
51
  */
51
52
  export function referenceCandidatesFor(holder, targetEntity) {
52
- const target = stripPackage(targetEntity);
53
+ if (targetEntity === undefined)
54
+ return [];
53
55
  // ADR-0039: resolving — referenceIdentities() honors references inherited via extends.
54
56
  return holder
55
57
  .referenceIdentities()
56
- .filter((ref) => stripPackage(ref.targetEntity ?? "") === target)
57
- .filter((ref) => refFkField(ref) !== undefined);
58
+ .filter((ref) => refFkField(ref) !== undefined)
59
+ .filter((ref) => refTarget(ref, IDENTITY_REFERENCE_ATTR_REFERENCES) === targetEntity);
58
60
  }
59
61
  /**
60
62
  * Which identity.reference does this `@cardinality: one` relationship navigate
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-relationship-reference.js","sourceRoot":"","sources":["../../../src/core/relationship/resolve-relationship-reference.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,EAAE;AACF,8EAA8E;AAC9E,mEAAmE;AACnE,sEAAsE;AACtE,8EAA8E;AAC9E,+EAA+E;AAC/E,gFAAgF;AAChF,4EAA4E;AAI5E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAU,CAAC;AAEpE,SAAS,cAAc,CAAC,KAAa;IACnC,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3D,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,uGAAuG;AACvG,SAAS,UAAU,CAAC,GAA0B;IAC5C,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAA0B;IAC7D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAG,CAAC,KAAyB,EAAQ,EAAE;QAC9C,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC;IACF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACd,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAkB,EAClB,YAAoB;IAEpB,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IAC1C,uFAAuF;IACvF,OAAO,MAAM;SACV,mBAAmB,EAAE;SACrB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;SAChE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,4BAA4B,CAC1C,MAAkB,EAClB,gBAAwB,EACxB,YAAoB,EACpB,cAAuB;IAEvB,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAChE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IAElD,IAAI,cAAc,KAAK,SAAS,IAAI,cAAc,KAAK,EAAE,EAAE,CAAC;QAC1D,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,cAAc,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACjF,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"resolve-relationship-reference.js","sourceRoot":"","sources":["../../../src/core/relationship/resolve-relationship-reference.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { MetaData } from "../../shared/meta-data.js";
2
+ import { type TimeGrain } from "./reporting-constants.js";
3
+ export declare class MetaDimension extends MetaData {
4
+ /** True for `dimension.time` (grain truncation); false for `dimension.attribute`. */
5
+ isTime(): boolean;
6
+ /** Dotted `Entity.field` reference naming the grouped column. */
7
+ of(): string | undefined;
8
+ /** Optional dotted to-one relationship path from the owning entity to the `@of` entity. */
9
+ via(): string | undefined;
10
+ /** The grains a `dimension.time` supports (empty for `dimension.attribute`). */
11
+ grains(): TimeGrain[];
12
+ }
13
+ //# sourceMappingURL=meta-dimension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-dimension.d.ts","sourceRoot":"","sources":["../../../src/core/reporting/meta-dimension.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAML,KAAK,SAAS,EACf,MAAM,0BAA0B,CAAC;AAElC,qBAAa,aAAc,SAAQ,QAAQ;IACzC,qFAAqF;IACrF,MAAM,IAAI,OAAO;IAIjB,iEAAiE;IACjE,EAAE,IAAI,MAAM,GAAG,SAAS;IAKxB,2FAA2F;IAC3F,GAAG,IAAI,MAAM,GAAG,SAAS;IAKzB,gFAAgF;IAChF,MAAM,IAAI,SAAS,EAAE;CAKtB"}
@@ -0,0 +1,30 @@
1
+ // MetaDimension — concrete node class for type=dimension nodes (FR-044).
2
+ //
3
+ // Extends MetaData directly. Accessors are RESOLVING (ADR-0039): a dimension
4
+ // declared on an abstract base entity is read through the same accessors as one
5
+ // declared on the concrete entity.
6
+ import { MetaData } from "../../shared/meta-data.js";
7
+ import { DIMENSION_SUBTYPE_TIME, REPORTING_ATTR_GRAINS, REPORTING_ATTR_OF, REPORTING_ATTR_VIA, TIME_GRAINS, } from "./reporting-constants.js";
8
+ export class MetaDimension extends MetaData {
9
+ /** True for `dimension.time` (grain truncation); false for `dimension.attribute`. */
10
+ isTime() {
11
+ return this.subType === DIMENSION_SUBTYPE_TIME;
12
+ }
13
+ /** Dotted `Entity.field` reference naming the grouped column. */
14
+ of() {
15
+ const v = this.attr(REPORTING_ATTR_OF);
16
+ return typeof v === "string" ? v : undefined;
17
+ }
18
+ /** Optional dotted to-one relationship path from the owning entity to the `@of` entity. */
19
+ via() {
20
+ const v = this.attr(REPORTING_ATTR_VIA);
21
+ return typeof v === "string" ? v : undefined;
22
+ }
23
+ /** The grains a `dimension.time` supports (empty for `dimension.attribute`). */
24
+ grains() {
25
+ const v = this.attr(REPORTING_ATTR_GRAINS);
26
+ const items = Array.isArray(v) ? v : typeof v === "string" ? [v] : [];
27
+ return items.filter((g) => TIME_GRAINS.includes(g));
28
+ }
29
+ }
30
+ //# sourceMappingURL=meta-dimension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-dimension.js","sourceRoot":"","sources":["../../../src/core/reporting/meta-dimension.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,6EAA6E;AAC7E,gFAAgF;AAChF,mCAAmC;AAEnC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,GAEZ,MAAM,0BAA0B,CAAC;AAElC,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACzC,qFAAqF;IACrF,MAAM;QACJ,OAAO,IAAI,CAAC,OAAO,KAAK,sBAAsB,CAAC;IACjD,CAAC;IAED,iEAAiE;IACjE,EAAE;QACA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/C,CAAC;IAED,2FAA2F;IAC3F,GAAG;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACxC,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/C,CAAC;IAED,gFAAgF;IAChF,MAAM;QACJ,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAkB,EAAE,CAAE,WAAkC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9F,CAAC;CACF"}
@@ -0,0 +1,24 @@
1
+ import { MetaData } from "../../shared/meta-data.js";
2
+ import { type MeasureAgg } from "./reporting-constants.js";
3
+ export declare class MetaMeasure extends MetaData {
4
+ /** True for `measure.ratio`; false for `measure.aggregate`. */
5
+ isRatio(): boolean;
6
+ /** The aggregate function (`measure.aggregate` only). */
7
+ agg(): MeasureAgg | undefined;
8
+ /** True when `@distinct` is set (legal only with `@agg: count`). */
9
+ distinct(): boolean;
10
+ /** The `Entity.field` references in `@of`: a bare string is one column, a list is the tuple form. */
11
+ ofColumns(): string[];
12
+ /** Name of a segment declared on the same entity; combines with `@filter` by AND. */
13
+ segmentName(): string | undefined;
14
+ /** The canonical row-scope filter, when one is declared. */
15
+ filter(): Record<string, unknown> | undefined;
16
+ /** `@default`: the integer this measure reads when it would otherwise be null (rule M7/M8
17
+ * decide where it is legal). ADR-0039: resolving, so an inherited measure keeps it. */
18
+ defaultValue(): number | undefined;
19
+ /** Name of the `measure.aggregate` sibling used as the numerator (`measure.ratio` only). */
20
+ numerator(): string | undefined;
21
+ /** Name of the `measure.aggregate` sibling used as the denominator (`measure.ratio` only). */
22
+ denominator(): string | undefined;
23
+ }
24
+ //# sourceMappingURL=meta-measure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-measure.d.ts","sourceRoot":"","sources":["../../../src/core/reporting/meta-measure.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAWL,KAAK,UAAU,EAChB,MAAM,0BAA0B,CAAC;AAMlC,qBAAa,WAAY,SAAQ,QAAQ;IACvC,+DAA+D;IAC/D,OAAO,IAAI,OAAO;IAIlB,yDAAyD;IACzD,GAAG,IAAI,UAAU,GAAG,SAAS;IAK7B,oEAAoE;IACpE,QAAQ,IAAI,OAAO;IAInB,qGAAqG;IACrG,SAAS,IAAI,MAAM,EAAE;IAMrB,qFAAqF;IACrF,WAAW,IAAI,MAAM,GAAG,SAAS;IAIjC,4DAA4D;IAC5D,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAK7C;4FACwF;IACxF,YAAY,IAAI,MAAM,GAAG,SAAS;IAKlC,4FAA4F;IAC5F,SAAS,IAAI,MAAM,GAAG,SAAS;IAI/B,8FAA8F;IAC9F,WAAW,IAAI,MAAM,GAAG,SAAS;CAGlC"}
@@ -0,0 +1,54 @@
1
+ // MetaMeasure — concrete node class for type=measure nodes (FR-044).
2
+ //
3
+ // Extends MetaData directly. Accessors are RESOLVING (ADR-0039).
4
+ import { MetaData } from "../../shared/meta-data.js";
5
+ import { MEASURE_AGGS, MEASURE_SUBTYPE_RATIO, REPORTING_ATTR_AGG, REPORTING_ATTR_DEFAULT, REPORTING_ATTR_DENOMINATOR, REPORTING_ATTR_DISTINCT, REPORTING_ATTR_FILTER, REPORTING_ATTR_NUMERATOR, REPORTING_ATTR_OF, REPORTING_ATTR_SEGMENT, } from "./reporting-constants.js";
6
+ function optionalString(v) {
7
+ return typeof v === "string" ? v : undefined;
8
+ }
9
+ export class MetaMeasure extends MetaData {
10
+ /** True for `measure.ratio`; false for `measure.aggregate`. */
11
+ isRatio() {
12
+ return this.subType === MEASURE_SUBTYPE_RATIO;
13
+ }
14
+ /** The aggregate function (`measure.aggregate` only). */
15
+ agg() {
16
+ const v = this.attr(REPORTING_ATTR_AGG);
17
+ return MEASURE_AGGS.includes(v) ? v : undefined;
18
+ }
19
+ /** True when `@distinct` is set (legal only with `@agg: count`). */
20
+ distinct() {
21
+ return this.attr(REPORTING_ATTR_DISTINCT) === true;
22
+ }
23
+ /** The `Entity.field` references in `@of`: a bare string is one column, a list is the tuple form. */
24
+ ofColumns() {
25
+ const v = this.attr(REPORTING_ATTR_OF);
26
+ if (Array.isArray(v))
27
+ return v.filter((x) => typeof x === "string");
28
+ return typeof v === "string" ? [v] : [];
29
+ }
30
+ /** Name of a segment declared on the same entity; combines with `@filter` by AND. */
31
+ segmentName() {
32
+ return optionalString(this.attr(REPORTING_ATTR_SEGMENT));
33
+ }
34
+ /** The canonical row-scope filter, when one is declared. */
35
+ filter() {
36
+ const v = this.attr(REPORTING_ATTR_FILTER);
37
+ return typeof v === "object" && v !== null && !Array.isArray(v) ? v : undefined;
38
+ }
39
+ /** `@default`: the integer this measure reads when it would otherwise be null (rule M7/M8
40
+ * decide where it is legal). ADR-0039: resolving, so an inherited measure keeps it. */
41
+ defaultValue() {
42
+ const v = this.attr(REPORTING_ATTR_DEFAULT);
43
+ return typeof v === "number" && Number.isInteger(v) ? v : undefined;
44
+ }
45
+ /** Name of the `measure.aggregate` sibling used as the numerator (`measure.ratio` only). */
46
+ numerator() {
47
+ return optionalString(this.attr(REPORTING_ATTR_NUMERATOR));
48
+ }
49
+ /** Name of the `measure.aggregate` sibling used as the denominator (`measure.ratio` only). */
50
+ denominator() {
51
+ return optionalString(this.attr(REPORTING_ATTR_DENOMINATOR));
52
+ }
53
+ }
54
+ //# sourceMappingURL=meta-measure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-measure.js","sourceRoot":"","sources":["../../../src/core/reporting/meta-measure.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,iEAAiE;AAEjE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,EACjB,sBAAsB,GAEvB,MAAM,0BAA0B,CAAC;AAElC,SAAS,cAAc,CAAC,CAAU;IAChC,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvC,+DAA+D;IAC/D,OAAO;QACL,OAAO,IAAI,CAAC,OAAO,KAAK,qBAAqB,CAAC;IAChD,CAAC;IAED,yDAAyD;IACzD,GAAG;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACxC,OAAQ,YAAmC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,CAAC;IAED,oEAAoE;IACpE,QAAQ;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,IAAI,CAAC;IACrD,CAAC;IAED,qGAAqG;IACrG,SAAS;QACP,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACvC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;QACjF,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1C,CAAC;IAED,qFAAqF;IACrF,WAAW;QACT,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,4DAA4D;IAC5D,MAAM;QACJ,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC3C,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAA6B,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/G,CAAC;IAED;4FACwF;IACxF,YAAY;QACV,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC5C,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtE,CAAC;IAED,4FAA4F;IAC5F,SAAS;QACP,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,8FAA8F;IAC9F,WAAW;QACT,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAC/D,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ import { MetaData } from "../../shared/meta-data.js";
2
+ export declare class MetaSegment extends MetaData {
3
+ /** The named row scope: a canonical attr.filter over the declaring entity's fields. */
4
+ filter(): Record<string, unknown> | undefined;
5
+ }
6
+ //# sourceMappingURL=meta-segment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-segment.d.ts","sourceRoot":"","sources":["../../../src/core/reporting/meta-segment.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAGrD,qBAAa,WAAY,SAAQ,QAAQ;IACvC,uFAAuF;IACvF,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;CAI9C"}
@@ -0,0 +1,13 @@
1
+ // MetaSegment — concrete node class for type=segment nodes (FR-044).
2
+ //
3
+ // Extends MetaData directly. Accessors are RESOLVING (ADR-0039).
4
+ import { MetaData } from "../../shared/meta-data.js";
5
+ import { REPORTING_ATTR_FILTER } from "./reporting-constants.js";
6
+ export class MetaSegment extends MetaData {
7
+ /** The named row scope: a canonical attr.filter over the declaring entity's fields. */
8
+ filter() {
9
+ const v = this.attr(REPORTING_ATTR_FILTER);
10
+ return typeof v === "object" && v !== null && !Array.isArray(v) ? v : undefined;
11
+ }
12
+ }
13
+ //# sourceMappingURL=meta-segment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-segment.js","sourceRoot":"","sources":["../../../src/core/reporting/meta-segment.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,iEAAiE;AAEjE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvC,uFAAuF;IACvF,MAAM;QACJ,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC3C,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAA6B,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/G,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ import type { MetaData } from "../../shared/meta-data.js";
2
+ export interface ReportDimensionItem {
3
+ readonly name: string;
4
+ readonly grain?: string;
5
+ }
6
+ /** The `@from` entity name of a report. */
7
+ export declare function reportFrom(obj: MetaData): string | undefined;
8
+ /** `@spine`: the to-one path to the entity whose rows supply the report's rows. */
9
+ export declare function reportSpine(obj: MetaData): string | undefined;
10
+ /** The `@dimensions` items, each `name` or `name:grain`. */
11
+ export declare function reportDimensionItems(obj: MetaData): ReportDimensionItem[];
12
+ /** The `@measures` items AS WRITTEN: each a bare measure `name`, or a dotted
13
+ * `Entity.name` (loader rule R3). Use {@link reportMeasureItemName} for the measure name. */
14
+ export declare function reportMeasureNames(obj: MetaData): string[];
15
+ /**
16
+ * The measure a `@measures` item names: the segment after its LAST `.`
17
+ * (`total`, `Sale.total` and `acme::shop::Sale.total` all name `total`). It is also
18
+ * the derived report field's name. The part before that `.`, when present, is an
19
+ * entity qualifier, which {@link reportMeasureItemOwner} returns.
20
+ */
21
+ export declare function reportMeasureItemName(item: string): string;
22
+ /** The entity qualifier of a dotted `@measures` item (`Sale` in `Sale.total`), or
23
+ * undefined for a bare item. Loader rule R3: it names `@from` or an entity `@from` extends. */
24
+ export declare function reportMeasureItemOwner(item: string): string | undefined;
25
+ /** The derived report field for a dimension item: `name` (attribute) or `name` + Capitalized(grain) (time). */
26
+ export declare function reportDerivedFieldName(item: ReportDimensionItem): string;
27
+ //# sourceMappingURL=report-accessors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-accessors.d.ts","sourceRoot":"","sources":["../../../src/core/reporting/report-accessors.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAU1D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAOD,2CAA2C;AAC3C,wBAAgB,UAAU,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAG5D;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAG7D;AAED,4DAA4D;AAC5D,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,QAAQ,GAAG,mBAAmB,EAAE,CAKzE;AAED;8FAC8F;AAC9F,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,EAAE,CAE1D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED;gGACgG;AAChG,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGvE;AAED,+GAA+G;AAC/G,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAGxE"}