@metaobjectsdev/metadata 0.15.19 → 0.15.20

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 (47) hide show
  1. package/dist/core-types.d.ts.map +1 -1
  2. package/dist/core-types.js +14 -1
  3. package/dist/core-types.js.map +1 -1
  4. package/dist/errors.d.ts +1 -1
  5. package/dist/errors.d.ts.map +1 -1
  6. package/dist/errors.js +5 -6
  7. package/dist/errors.js.map +1 -1
  8. package/dist/index.d.ts +1 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +1 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/loader/meta-data-loader.d.ts.map +1 -1
  13. package/dist/loader/meta-data-loader.js +1 -2
  14. package/dist/loader/meta-data-loader.js.map +1 -1
  15. package/dist/loader/validation-passes.d.ts +0 -14
  16. package/dist/loader/validation-passes.d.ts.map +1 -1
  17. package/dist/loader/validation-passes.js +50 -71
  18. package/dist/loader/validation-passes.js.map +1 -1
  19. package/dist/loader/validation-registry.d.ts.map +1 -1
  20. package/dist/loader/validation-registry.js +25 -20
  21. package/dist/loader/validation-registry.js.map +1 -1
  22. package/dist/naming-refs.d.ts +42 -26
  23. package/dist/naming-refs.d.ts.map +1 -1
  24. package/dist/naming-refs.js +67 -39
  25. package/dist/naming-refs.js.map +1 -1
  26. package/dist/persistence/origin/origin-constants.d.ts.map +1 -1
  27. package/dist/persistence/origin/origin-constants.js +4 -3
  28. package/dist/persistence/origin/origin-constants.js.map +1 -1
  29. package/dist/persistence/origin/origin-definition.embedded.js +1 -1
  30. package/dist/persistence/origin/origin-definition.embedded.js.map +1 -1
  31. package/dist/persistence/source/validate-source-parameter-ref.d.ts.map +1 -1
  32. package/dist/persistence/source/validate-source-parameter-ref.js +7 -18
  33. package/dist/persistence/source/validate-source-parameter-ref.js.map +1 -1
  34. package/dist/validation-types.d.ts +4 -2
  35. package/dist/validation-types.d.ts.map +1 -1
  36. package/package.json +1 -1
  37. package/src/core-types.ts +14 -1
  38. package/src/errors.ts +5 -6
  39. package/src/index.ts +1 -1
  40. package/src/loader/meta-data-loader.ts +1 -2
  41. package/src/loader/validation-passes.ts +54 -72
  42. package/src/loader/validation-registry.ts +25 -17
  43. package/src/naming-refs.ts +66 -40
  44. package/src/persistence/origin/origin-constants.ts +4 -3
  45. package/src/persistence/origin/origin-definition.embedded.ts +1 -1
  46. package/src/persistence/source/validate-source-parameter-ref.ts +7 -19
  47. package/src/validation-types.ts +4 -2
@@ -7,8 +7,10 @@ import type { MetaData } from "./shared/meta-data.js";
7
7
  * a dotted relationship/field tail — expandRef preserves the tail);
8
8
  * `@parameterRef`/`@payloadRef`/`@responseRef` reference value-objects. These are
9
9
  * expanded by the YAML desugar and rejected (when still relative) by the
10
- * canonical-JSON guard. `@sourceRefField` (a FK FIELD name, not an object ref)
11
- * and `@through` are intentionally NOT in this set (out of scope for FR-032 T-slice).
10
+ * canonical-JSON guard. `@through` (the M:N junction ref) is in the set per
11
+ * ADR-0042 §4 it desugars to FQN and resolves package-local like every other
12
+ * object ref. `@sourceRefField` (a FK FIELD name, not an object ref) is NOT in
13
+ * the set.
12
14
  */
13
15
  export declare const REF_BEARING_ATTR_NAMES: ReadonlySet<string>;
14
16
  /**
@@ -25,35 +27,49 @@ export declare function isRelativeRef(raw: string): boolean;
25
27
  */
26
28
  export declare function expandRef(raw: string, packageContext: string): string;
27
29
  /**
28
- * FR-032 — does a root-level object `node` satisfy an (already-expanded)
29
- * object reference `ref`? After the YAML desugar + corpus sweep every ref is
30
- * fully qualified, so resolution is a pure FQN match. Objects keep a BARE
31
- * `fqn()` per the FR5d cross-port contract, so the canonical FQN accessor is
32
- * `resolutionKey()` (`<package | fileDefaultPackage>::<name>`) this mirrors
33
- * `super-resolve`'s `findInTree`. The bare `name`/`fqn()` arms cover legacy
34
- * same-tree refs and root-level (empty-package) objects.
30
+ * ADR-0042 — does root-level object `node` satisfy object reference `ref`,
31
+ * declared by a node whose effective package is `referrerPkg`? A single
32
+ * package-local matcher:
33
+ * - **FQN** `ref` (contains `::`) EXACT match on `resolutionKey()`. No
34
+ * bare-tail fallback, so an FQN pointing at one package never binds a
35
+ * same-named object in another.
36
+ * - **bare** `ref` (no `::`) → the referrer's OWN package
37
+ * (`<referrerPkg>::<ref>`), else a **root-level** (empty-package) object
38
+ * whose resolution key IS `ref`. No cross-package bare resolution, no
39
+ * globally-unique scan.
35
40
  *
36
- * This is the single matcher the non-super resolvers (origin `@from`/`@of`/
37
- * `@via` heads, template `@payloadRef`/`@responseRef`, source `@parameterRef`)
38
- * share, so FQN matching behaves identically everywhere a ref resolves.
41
+ * Objects keep a BARE `fqn()` per the FR5d cross-port contract, so the canonical
42
+ * FQN accessor is `resolutionKey()` (`<package | fileDefaultPackage>::<name>`)
43
+ * this mirrors `super-resolve`'s `findInTree`. This is the single matcher the
44
+ * non-super resolvers (origin `@from`/`@of`/`@via` heads, template
45
+ * `@payloadRef`/`@responseRef`, source `@parameterRef`, relationship `@through`)
46
+ * share, so resolution behaves identically everywhere a ref resolves.
47
+ *
48
+ * `referrerPkg` defaults to `""` — the fail-closed FQN-exact-plus-root-level
49
+ * behavior. The LOADER always passes the real referrer package (bare refs there
50
+ * must resolve package-locally); downstream CODEGEN resolvers, which run on
51
+ * already-validated metadata whose refs are FQN, may omit it. An empty
52
+ * `referrerPkg` never binds a bare ref across a package boundary (fail-closed),
53
+ * so omission can only fail to resolve — never mis-resolve.
39
54
  */
40
- export declare function refMatchesObject(node: MetaData, ref: string): boolean;
55
+ export declare function refMatchesObject(node: MetaData, ref: string, referrerPkg?: string): boolean;
41
56
  /**
42
- * Resolve a metadata OBJECT reference under the cross-package contract:
43
- * - **FQN** (`ref` contains `::`) EXACT match on `resolutionKey()`/`fqn()`.
44
- * Never a bare-tail fallback, so an FQN pointing at one package never binds a
45
- * same-named object in another (the cross-port bug this closes).
46
- * - **bare** (no `::`) prefer an object of that name in the REFERRER's own
47
- * package; else a UNIQUE object of that name across all packages; else
48
- * (>1 across OTHER packages, none in the referrer's) → `ambiguous`.
49
- *
50
- * `referrerPkg` is the effective package of the node carrying the ref. Returns
51
- * `{ node }` on a unique resolution, `{ ambiguous: true }` when a bare ref is
52
- * cross-package-ambiguous, or `{}` (node undefined) when nothing matches. The
53
- * SINGLE resolver every object-ref site shares so the contract is uniform.
57
+ * Resolve a metadata OBJECT reference under the ADR-0042 package-local contract
58
+ * (see `refMatchesObject` for the matcher). `referrerPkg` is the effective
59
+ * package of the node carrying the ref. Returns `{ node }` on resolution, or
60
+ * `{}` (node undefined) when nothing matches there is NO ambiguous outcome
61
+ * (bare = package-local, so ambiguity is unreachable). The SINGLE resolver every
62
+ * object-ref site shares so the contract is uniform.
54
63
  */
55
64
  export declare function resolveObjectRef(root: MetaData, ref: string, referrerPkg: string): {
56
65
  node?: MetaData | undefined;
57
- ambiguous?: boolean;
58
66
  };
67
+ /**
68
+ * ADR-0042 §5 — a did-you-mean suffix for an UNRESOLVED object reference: the
69
+ * FQNs of same-short-name objects that DO exist (typically in other packages),
70
+ * so the author can qualify a bare ref they meant to point across a package
71
+ * boundary. Returns "" when no same-short-name object exists (nothing to
72
+ * suggest). Appended to the per-attr unresolved-ref error message.
73
+ */
74
+ export declare function didYouMeanHint(root: MetaData, ref: string): string;
59
75
  //# sourceMappingURL=naming-refs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"naming-refs.d.ts","sourceRoot":"","sources":["../src/naming-refs.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAkBtD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,MAAM,CAYrD,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAElD;AA0DD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAGrE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAErE;AAUD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,GAClB;IAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,CAUtD"}
1
+ {"version":3,"file":"naming-refs.d.ts","sourceRoot":"","sources":["../src/naming-refs.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAkBtD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,MAAM,CAarD,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAElD;AA0DD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAGrE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,SAAK,GAAG,OAAO,CAKvF;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,GAClB;IAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAE,CAYjC;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAUlE"}
@@ -27,7 +27,7 @@
27
27
  // `package` attribute is NEVER expanded — it is the node's identity.
28
28
  import { PACKAGE_SEPARATOR, PACKAGE_PARENT, CHILD_REF_SEPARATOR } from "./shared/structural.js";
29
29
  import { TYPE_OBJECT } from "./shared/base-types.js";
30
- import { RELATIONSHIP_ATTR_OBJECT_REF } from "./core/relationship/relationship-constants.js";
30
+ import { RELATIONSHIP_ATTR_OBJECT_REF, RELATIONSHIP_ATTR_THROUGH } from "./core/relationship/relationship-constants.js";
31
31
  import { FIELD_ATTR_OBJECT_REF } from "./core/field/field-constants.js";
32
32
  import { IDENTITY_REFERENCE_ATTR_REFERENCES } from "./core/identity/identity-constants.js";
33
33
  import { ORIGIN_PASSTHROUGH_ATTR_FROM, ORIGIN_PASSTHROUGH_ATTR_VIA, ORIGIN_AGGREGATE_ATTR_OF, ORIGIN_AGGREGATE_ATTR_VIA, ORIGIN_COLLECTION_ATTR_VIA, } from "./persistence/origin/origin-constants.js";
@@ -42,12 +42,15 @@ const PARENT_PREFIX = PACKAGE_PARENT + PACKAGE_SEPARATOR; // "..::"
42
42
  * a dotted relationship/field tail — expandRef preserves the tail);
43
43
  * `@parameterRef`/`@payloadRef`/`@responseRef` reference value-objects. These are
44
44
  * expanded by the YAML desugar and rejected (when still relative) by the
45
- * canonical-JSON guard. `@sourceRefField` (a FK FIELD name, not an object ref)
46
- * and `@through` are intentionally NOT in this set (out of scope for FR-032 T-slice).
45
+ * canonical-JSON guard. `@through` (the M:N junction ref) is in the set per
46
+ * ADR-0042 §4 it desugars to FQN and resolves package-local like every other
47
+ * object ref. `@sourceRefField` (a FK FIELD name, not an object ref) is NOT in
48
+ * the set.
47
49
  */
48
50
  export const REF_BEARING_ATTR_NAMES = new Set([
49
51
  RELATIONSHIP_ATTR_OBJECT_REF, // = FIELD_ATTR_OBJECT_REF (same spelling "objectRef")
50
52
  FIELD_ATTR_OBJECT_REF,
53
+ RELATIONSHIP_ATTR_THROUGH, // ADR-0042: the M:N junction ref joins the desugar+resolution set.
51
54
  IDENTITY_REFERENCE_ATTR_REFERENCES,
52
55
  ORIGIN_PASSTHROUGH_ATTR_FROM,
53
56
  ORIGIN_PASSTHROUGH_ATTR_VIA, // = ORIGIN_AGGREGATE_ATTR_VIA = ORIGIN_COLLECTION_ATTR_VIA ("via")
@@ -127,53 +130,78 @@ export function expandRef(raw, packageContext) {
127
130
  return expandOwner(owner, packageContext) + tail;
128
131
  }
129
132
  /**
130
- * FR-032 — does a root-level object `node` satisfy an (already-expanded)
131
- * object reference `ref`? After the YAML desugar + corpus sweep every ref is
132
- * fully qualified, so resolution is a pure FQN match. Objects keep a BARE
133
- * `fqn()` per the FR5d cross-port contract, so the canonical FQN accessor is
134
- * `resolutionKey()` (`<package | fileDefaultPackage>::<name>`) this mirrors
135
- * `super-resolve`'s `findInTree`. The bare `name`/`fqn()` arms cover legacy
136
- * same-tree refs and root-level (empty-package) objects.
133
+ * ADR-0042 — does root-level object `node` satisfy object reference `ref`,
134
+ * declared by a node whose effective package is `referrerPkg`? A single
135
+ * package-local matcher:
136
+ * - **FQN** `ref` (contains `::`) EXACT match on `resolutionKey()`. No
137
+ * bare-tail fallback, so an FQN pointing at one package never binds a
138
+ * same-named object in another.
139
+ * - **bare** `ref` (no `::`) → the referrer's OWN package
140
+ * (`<referrerPkg>::<ref>`), else a **root-level** (empty-package) object
141
+ * whose resolution key IS `ref`. No cross-package bare resolution, no
142
+ * globally-unique scan.
137
143
  *
138
- * This is the single matcher the non-super resolvers (origin `@from`/`@of`/
139
- * `@via` heads, template `@payloadRef`/`@responseRef`, source `@parameterRef`)
140
- * share, so FQN matching behaves identically everywhere a ref resolves.
144
+ * Objects keep a BARE `fqn()` per the FR5d cross-port contract, so the canonical
145
+ * FQN accessor is `resolutionKey()` (`<package | fileDefaultPackage>::<name>`)
146
+ * this mirrors `super-resolve`'s `findInTree`. This is the single matcher the
147
+ * non-super resolvers (origin `@from`/`@of`/`@via` heads, template
148
+ * `@payloadRef`/`@responseRef`, source `@parameterRef`, relationship `@through`)
149
+ * share, so resolution behaves identically everywhere a ref resolves.
150
+ *
151
+ * `referrerPkg` defaults to `""` — the fail-closed FQN-exact-plus-root-level
152
+ * behavior. The LOADER always passes the real referrer package (bare refs there
153
+ * must resolve package-locally); downstream CODEGEN resolvers, which run on
154
+ * already-validated metadata whose refs are FQN, may omit it. An empty
155
+ * `referrerPkg` never binds a bare ref across a package boundary (fail-closed),
156
+ * so omission can only fail to resolve — never mis-resolve.
141
157
  */
142
- export function refMatchesObject(node, ref) {
143
- return node.resolutionKey() === ref || node.fqn() === ref || node.name === ref;
144
- }
145
- /** The effective package of a root-level object (its `resolutionKey()` minus the
146
- * trailing `::<name>`; "" for a root-level/empty-package object). */
147
- function objectPackage(node) {
158
+ export function refMatchesObject(node, ref, referrerPkg = "") {
148
159
  const key = node.resolutionKey();
149
- const i = key.lastIndexOf(PACKAGE_SEPARATOR);
150
- return i === -1 ? "" : key.slice(0, i);
160
+ if (ref.includes(PACKAGE_SEPARATOR))
161
+ return key === ref;
162
+ if (referrerPkg !== "" && key === `${referrerPkg}${PACKAGE_SEPARATOR}${ref}`)
163
+ return true;
164
+ return key === ref; // root-level (empty-package) object whose key is the bare name
151
165
  }
152
166
  /**
153
- * Resolve a metadata OBJECT reference under the cross-package contract:
154
- * - **FQN** (`ref` contains `::`) EXACT match on `resolutionKey()`/`fqn()`.
155
- * Never a bare-tail fallback, so an FQN pointing at one package never binds a
156
- * same-named object in another (the cross-port bug this closes).
157
- * - **bare** (no `::`) prefer an object of that name in the REFERRER's own
158
- * package; else a UNIQUE object of that name across all packages; else
159
- * (>1 across OTHER packages, none in the referrer's) → `ambiguous`.
160
- *
161
- * `referrerPkg` is the effective package of the node carrying the ref. Returns
162
- * `{ node }` on a unique resolution, `{ ambiguous: true }` when a bare ref is
163
- * cross-package-ambiguous, or `{}` (node undefined) when nothing matches. The
164
- * SINGLE resolver every object-ref site shares so the contract is uniform.
167
+ * Resolve a metadata OBJECT reference under the ADR-0042 package-local contract
168
+ * (see `refMatchesObject` for the matcher). `referrerPkg` is the effective
169
+ * package of the node carrying the ref. Returns `{ node }` on resolution, or
170
+ * `{}` (node undefined) when nothing matches there is NO ambiguous outcome
171
+ * (bare = package-local, so ambiguity is unreachable). The SINGLE resolver every
172
+ * object-ref site shares so the contract is uniform.
165
173
  */
166
174
  export function resolveObjectRef(root, ref, referrerPkg) {
167
175
  const objects = root.children().filter((c) => c.type === TYPE_OBJECT);
168
176
  if (ref.includes(PACKAGE_SEPARATOR)) {
169
- return { node: objects.find((c) => c.resolutionKey() === ref || c.fqn() === ref) };
177
+ return { node: objects.find((c) => c.resolutionKey() === ref) };
170
178
  }
171
- const matches = objects.filter((c) => c.name === ref);
172
- if (matches.length <= 1)
173
- return { node: matches[0] };
174
- const own = matches.find((c) => objectPackage(c) === referrerPkg);
179
+ // Bare: PREFER the referrer's own package, THEN a root-level (empty-package)
180
+ // object — mirroring the loader symbol table's `byKey.get(localKey) ?? get(ref)`
181
+ // so both resolvers agree when a root-level object shares the bare name.
182
+ const localKey = referrerPkg !== "" ? `${referrerPkg}${PACKAGE_SEPARATOR}${ref}` : ref;
183
+ const own = objects.find((c) => c.resolutionKey() === localKey);
175
184
  if (own !== undefined)
176
185
  return { node: own };
177
- return { ambiguous: true };
186
+ return { node: localKey !== ref ? objects.find((c) => c.resolutionKey() === ref) : undefined };
187
+ }
188
+ /**
189
+ * ADR-0042 §5 — a did-you-mean suffix for an UNRESOLVED object reference: the
190
+ * FQNs of same-short-name objects that DO exist (typically in other packages),
191
+ * so the author can qualify a bare ref they meant to point across a package
192
+ * boundary. Returns "" when no same-short-name object exists (nothing to
193
+ * suggest). Appended to the per-attr unresolved-ref error message.
194
+ */
195
+ export function didYouMeanHint(root, ref) {
196
+ const { owner } = splitChildTail(ref);
197
+ const sep = owner.lastIndexOf(PACKAGE_SEPARATOR);
198
+ const shortName = sep === -1 ? owner : owner.slice(sep + PACKAGE_SEPARATOR.length);
199
+ const candidates = root
200
+ .children()
201
+ .filter((c) => c.type === TYPE_OBJECT && c.name === shortName)
202
+ .map((c) => c.resolutionKey());
203
+ if (candidates.length === 0)
204
+ return "";
205
+ return ` An object named "${shortName}" exists in: ${candidates.join(", ")}. Qualify it with its package (FQN).`;
178
206
  }
179
207
  //# sourceMappingURL=naming-refs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"naming-refs.js","sourceRoot":"","sources":["../src/naming-refs.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,gEAAgE;AAChE,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,6EAA6E;AAC7E,wBAAwB;AACxB,yEAAyE;AACzE,6EAA6E;AAC7E,0EAA0E;AAC1E,4EAA4E;AAC5E,8EAA8E;AAC9E,2EAA2E;AAC3E,iFAAiF;AACjF,8EAA8E;AAC9E,iFAAiF;AACjF,EAAE;AACF,8EAA8E;AAC9E,8EAA8E;AAC9E,2EAA2E;AAC3E,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,qEAAqE;AAGrE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,kCAAkC,EAAE,MAAM,uCAAuC,CAAC;AAC3F,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAEzG,MAAM,aAAa,GAAG,cAAc,GAAG,iBAAiB,CAAC,CAAC,SAAS;AAEnE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAwB,IAAI,GAAG,CAAS;IACzE,4BAA4B,EAAE,sDAAsD;IACpF,qBAAqB;IACrB,kCAAkC;IAClC,4BAA4B;IAC5B,2BAA2B,EAAE,mEAAmE;IAChG,wBAAwB;IACxB,yBAAyB;IACzB,0BAA0B;IAC1B,yBAAyB;IACzB,yBAAyB;IACzB,0BAA0B;CAC3B,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC;IACzE,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IAC5D,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACrD,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,KAAa,EAAE,cAAsB;IACxD,4EAA4E;IAC5E,IAAI,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,+CAA+C;IAC/C,IAAI,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACpC,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACtC,MAAM,EAAE,CAAC;YACT,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM,QAAQ,GAAG,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,uBAAuB,KAAK,iBAAiB,MAAM,mBAAmB;gBACpE,4BAA4B,cAAc,cAAc,QAAQ,CAAC,MAAM,aAAa,CACvF,CAAC;QACJ,CAAC;QACD,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACvF,4EAA4E;QAC5E,4EAA4E;QAC5E,yDAAyD;QACzD,OAAO,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,iBAAiB,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/E,CAAC;IAED,gEAAgE;IAChE,IAAI,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6EAA6E;IAC7E,OAAO,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,cAAc,GAAG,iBAAiB,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACzF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,cAAsB;IAC3D,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAC5C,OAAO,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,IAAI,CAAC;AACnD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAc,EAAE,GAAW;IAC1D,OAAO,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC;AACjF,CAAC;AAED;sEACsE;AACtE,SAAS,aAAa,CAAC,IAAc;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;IACjC,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAc,EACd,GAAW,EACX,WAAmB;IAEnB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IACtE,IAAI,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;IACrF,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;IACtD,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC;IAClE,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC5C,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"naming-refs.js","sourceRoot":"","sources":["../src/naming-refs.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"origin-constants.d.ts","sourceRoot":"","sources":["../../../src/persistence/origin/origin-constants.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,0BAA0B,gBAAgB,CAAC;AACxD,eAAO,MAAM,wBAAwB,cAAgB,CAAC;AACtD,eAAO,MAAM,yBAAyB,eAAgB,CAAC;AAEvD,eAAO,MAAM,eAAe,6DAKlB,CAAC;AACX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAG7D,eAAO,MAAM,4BAA4B,SAAS,CAAC;AACnD,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAIlD,eAAO,MAAM,+BAA+B,YAAY,CAAC;AAKzD,eAAO,MAAM,0BAA0B,QAAQ,CAAC;AAGhD,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAC/C,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAC9C,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAI/C,eAAO,MAAM,4BAA4B,WAAW,CAAC;AAGrD,eAAO,MAAM,mBAAmB,gDAAiD,CAAC;AAClF,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"origin-constants.d.ts","sourceRoot":"","sources":["../../../src/persistence/origin/origin-constants.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,0BAA0B,gBAAgB,CAAC;AACxD,eAAO,MAAM,wBAAwB,cAAgB,CAAC;AACtD,eAAO,MAAM,yBAAyB,eAAgB,CAAC;AAEvD,eAAO,MAAM,eAAe,6DAKlB,CAAC;AACX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAG7D,eAAO,MAAM,4BAA4B,SAAS,CAAC;AACnD,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAIlD,eAAO,MAAM,+BAA+B,YAAY,CAAC;AAKzD,eAAO,MAAM,0BAA0B,QAAQ,CAAC;AAGhD,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAC/C,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAC9C,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAK/C,eAAO,MAAM,4BAA4B,WAAW,CAAC;AAGrD,eAAO,MAAM,mBAAmB,gDAAiD,CAAC;AAClF,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC"}
@@ -32,9 +32,10 @@ export const ORIGIN_COLLECTION_ATTR_VIA = "via";
32
32
  export const ORIGIN_AGGREGATE_ATTR_AGG = "agg";
33
33
  export const ORIGIN_AGGREGATE_ATTR_OF = "of";
34
34
  export const ORIGIN_AGGREGATE_ATTR_VIA = "via";
35
- // @filter (attr.filter object): optional scoping predicate restricting which
36
- // related rows the aggregate spans rendered as SQL FILTER (WHERE …). Same
37
- // structured shape as a preset filter; consumed by the projection view emitter.
35
+ // @filter (attr.filter object): an optional PORTABLE structured predicate scoping
36
+ // which related rows the aggregate spans (same shape as a preset filter). Codegen
37
+ // renders it per target the projection view emitter turns it into SQL
38
+ // FILTER (WHERE …) / SQLite CASE WHEN.
38
39
  export const ORIGIN_AGGREGATE_ATTR_FILTER = "filter";
39
40
  // aggregate function vocabulary
40
41
  export const AGGREGATE_FUNCTIONS = ["count", "sum", "avg", "min", "max"];
@@ -1 +1 @@
1
- {"version":3,"file":"origin-constants.js","sourceRoot":"","sources":["../../../src/persistence/origin/origin-constants.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAElF,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,8EAA8E;AAC9E,oDAAoD;AACpD,EAAE;AACF,4EAA4E;AAC5E,6DAA6D;AAC7D,+DAA+D;AAC/D,EAAE;AACF,8EAA8E;AAE9E,MAAM,CAAC,MAAM,0BAA0B,GAAG,aAAa,CAAC;AACxD,MAAM,CAAC,MAAM,wBAAwB,GAAK,WAAW,CAAC;AACtD,MAAM,CAAC,MAAM,yBAAyB,GAAI,YAAY,CAAC;AAEvD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,YAAY;IACZ,0BAA0B;IAC1B,wBAAwB;IACxB,yBAAyB;CACjB,CAAC;AAGX,oBAAoB;AACpB,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC;AACnD,MAAM,CAAC,MAAM,2BAA2B,GAAI,KAAK,CAAC;AAClD,gFAAgF;AAChF,8EAA8E;AAC9E,2FAA2F;AAC3F,MAAM,CAAC,MAAM,+BAA+B,GAAG,SAAS,CAAC;AAEzD,yEAAyE;AACzE,0EAA0E;AAC1E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAEhD,kBAAkB;AAClB,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAC/C,MAAM,CAAC,MAAM,wBAAwB,GAAI,IAAI,CAAC;AAC9C,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAC/C,6EAA6E;AAC7E,4EAA4E;AAC5E,gFAAgF;AAChF,MAAM,CAAC,MAAM,4BAA4B,GAAG,QAAQ,CAAC;AAErD,gCAAgC;AAChC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC"}
1
+ {"version":3,"file":"origin-constants.js","sourceRoot":"","sources":["../../../src/persistence/origin/origin-constants.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAElF,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,8EAA8E;AAC9E,oDAAoD;AACpD,EAAE;AACF,4EAA4E;AAC5E,6DAA6D;AAC7D,+DAA+D;AAC/D,EAAE;AACF,8EAA8E;AAE9E,MAAM,CAAC,MAAM,0BAA0B,GAAG,aAAa,CAAC;AACxD,MAAM,CAAC,MAAM,wBAAwB,GAAK,WAAW,CAAC;AACtD,MAAM,CAAC,MAAM,yBAAyB,GAAI,YAAY,CAAC;AAEvD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,YAAY;IACZ,0BAA0B;IAC1B,wBAAwB;IACxB,yBAAyB;CACjB,CAAC;AAGX,oBAAoB;AACpB,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC;AACnD,MAAM,CAAC,MAAM,2BAA2B,GAAI,KAAK,CAAC;AAClD,gFAAgF;AAChF,8EAA8E;AAC9E,2FAA2F;AAC3F,MAAM,CAAC,MAAM,+BAA+B,GAAG,SAAS,CAAC;AAEzD,yEAAyE;AACzE,0EAA0E;AAC1E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAEhD,kBAAkB;AAClB,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAC/C,MAAM,CAAC,MAAM,wBAAwB,GAAI,IAAI,CAAC;AAC9C,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAC/C,kFAAkF;AAClF,kFAAkF;AAClF,wEAAwE;AACxE,uCAAuC;AACvC,MAAM,CAAC,MAAM,4BAA4B,GAAG,QAAQ,CAAC;AAErD,gCAAgC;AAChC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC"}
@@ -82,7 +82,7 @@ export const ORIGIN_DEFINITION = {
82
82
  "name": "filter",
83
83
  "min": 0,
84
84
  "max": 1,
85
- "description": "Optional scoping filter restricting which related rows the aggregate spans, rendered as a SQL FILTER (WHERE ...) clause. Structured filter object desugared to canonical { field: { op: value } } form at parse time."
85
+ "description": "Optional structured predicate scoping which related rows the aggregate spans. A portable attr.filter object (eq/ne/in/isNull with and/or), desugared to canonical { field: { op: value } } at parse time; codegen renders it per target (e.g. SQL FILTER (WHERE ...) or SQLite CASE WHEN for a relational view)."
86
86
  }
87
87
  ]
88
88
  },
@@ -1 +1 @@
1
- {"version":3,"file":"origin-definition.embedded.js","sourceRoot":"","sources":["../../../src/persistence/origin/origin-definition.embedded.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,iBAAiB,GAAuB;IACnD,UAAU,EAAE,wBAAwB;IACpC,OAAO,EAAE;QACP;YACE,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,MAAM;YACjB,aAAa,EAAE,wOAAwO;SACxP;QACD;YACE,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,aAAa;YACxB,aAAa,EAAE,mKAAmK;YAClL,WAAW,EAAE,yJAAyJ;YACtK,UAAU,EAAE;gBACV;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,yHAAyH;iBACzI;gBACD;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,KAAK;oBACb,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,2FAA2F;iBAC3G;gBACD;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,SAAS;oBACpB,MAAM,EAAE,SAAS;oBACjB,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,geAAge;iBAChf;aACF;SACF;QACD;YACE,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,WAAW;YACtB,aAAa,EAAE,4HAA4H;YAC3I,WAAW,EAAE,qKAAqK;YAClL,OAAO,EAAE,mNAAmN;YAC5N,UAAU,EAAE;gBACV;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,KAAK;oBACb,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,eAAe,EAAE;wBACf,OAAO;wBACP,KAAK;wBACL,KAAK;wBACL,KAAK;wBACL,KAAK;qBACN;oBACD,aAAa,EAAE,sFAAsF;iBACtG;gBACD;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,IAAI;oBACZ,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,sGAAsG;iBACtH;gBACD;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,KAAK;oBACb,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,wPAAwP;iBACxQ;gBACD;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,uNAAuN;iBACvO;aACF;SACF;QACD;YACE,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,YAAY;YACvB,aAAa,EAAE,4KAA4K;YAC3L,WAAW,EAAE,iKAAiK;YAC9K,UAAU,EAAE;gBACV;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,KAAK;oBACb,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,2LAA2L;iBAC3M;aACF;SACF;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"origin-definition.embedded.js","sourceRoot":"","sources":["../../../src/persistence/origin/origin-definition.embedded.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,iBAAiB,GAAuB;IACnD,UAAU,EAAE,wBAAwB;IACpC,OAAO,EAAE;QACP;YACE,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,MAAM;YACjB,aAAa,EAAE,wOAAwO;SACxP;QACD;YACE,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,aAAa;YACxB,aAAa,EAAE,mKAAmK;YAClL,WAAW,EAAE,yJAAyJ;YACtK,UAAU,EAAE;gBACV;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,yHAAyH;iBACzI;gBACD;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,KAAK;oBACb,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,2FAA2F;iBAC3G;gBACD;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,SAAS;oBACpB,MAAM,EAAE,SAAS;oBACjB,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,geAAge;iBAChf;aACF;SACF;QACD;YACE,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,WAAW;YACtB,aAAa,EAAE,4HAA4H;YAC3I,WAAW,EAAE,qKAAqK;YAClL,OAAO,EAAE,mNAAmN;YAC5N,UAAU,EAAE;gBACV;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,KAAK;oBACb,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,eAAe,EAAE;wBACf,OAAO;wBACP,KAAK;wBACL,KAAK;wBACL,KAAK;wBACL,KAAK;qBACN;oBACD,aAAa,EAAE,sFAAsF;iBACtG;gBACD;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,IAAI;oBACZ,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,sGAAsG;iBACtH;gBACD;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,KAAK;oBACb,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,wPAAwP;iBACxQ;gBACD;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,kTAAkT;iBAClU;aACF;SACF;QACD;YACE,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,YAAY;YACvB,aAAa,EAAE,4KAA4K;YAC3L,WAAW,EAAE,iKAAiK;YAC9K,UAAU,EAAE;gBACV;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,KAAK;oBACb,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,2LAA2L;iBAC3M;aACF;SACF;KACF;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate-source-parameter-ref.d.ts","sourceRoot":"","sources":["../../../src/persistence/source/validate-source-parameter-ref.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAuB7C,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,EAAE,CAiFvE"}
1
+ {"version":3,"file":"validate-source-parameter-ref.d.ts","sourceRoot":"","sources":["../../../src/persistence/source/validate-source-parameter-ref.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAuB7C,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,EAAE,CAqEvE"}
@@ -16,7 +16,7 @@
16
16
  import { ParseError } from "../../errors.js";
17
17
  import { TYPE_OBJECT, TYPE_SOURCE, } from "../../shared/base-types.js";
18
18
  import { OBJECT_SUBTYPE_VALUE, OBJECT_SUBTYPE_ENTITY, } from "../../core/object/object-constants.js";
19
- import { PACKAGE_SEPARATOR } from "../../shared/structural.js";
19
+ import { resolveObjectRef } from "../../naming-refs.js";
20
20
  import { MetaSource } from "./meta-source.js";
21
21
  import { SOURCE_ATTR_PARAMETER_REF, SOURCE_SUBTYPE_RDB, SOURCE_KIND_STORED_PROC, SOURCE_KIND_TABLE_FUNCTION, } from "./source-constants.js";
22
22
  const CALLABLE_KINDS = new Set([
@@ -25,24 +25,13 @@ const CALLABLE_KINDS = new Set([
25
25
  ]);
26
26
  export function validateSourceParameterRef(root) {
27
27
  const errors = [];
28
- // Pre-index every object by name, fqn AND effective FQN resolution key so
29
- // resolution costs O(1) per source. FR-032 — @parameterRef is FQN-qualified
30
- // after the desugar/sweep, but objects keep a BARE fqn() per the FR5d
31
- // contract, so the FQN form `<package | fileDefaultPackage>::<name>` only
32
- // matches via resolutionKey() (these fixtures declare package at metadata.root
33
- // only, so obj.package is undefined and the file-default must be folded in).
34
- const objectIndex = new Map();
35
- // ADR-0039: root has no super; children()==ownChildren() but resolving is the default.
36
- for (const obj of root.children().filter((c) => c.type === TYPE_OBJECT)) {
37
- objectIndex.set(obj.name, obj);
38
- const fqn = obj.package !== undefined && obj.package !== ""
39
- ? `${obj.package}${PACKAGE_SEPARATOR}${obj.name}`
40
- : obj.name;
41
- objectIndex.set(fqn, obj);
42
- objectIndex.set(obj.resolutionKey(), obj);
43
- }
44
28
  // ADR-0039: root has no super; children()==ownChildren() but resolving is the default.
45
29
  for (const obj of root.children().filter((c) => c.type === TYPE_OBJECT)) {
30
+ // ADR-0042: a bare @parameterRef resolves package-local (this object's
31
+ // package, else root-level); an FQN resolves exactly. Shares the single
32
+ // resolveObjectRef matcher — NO bare-name-anywhere fallback (which would
33
+ // silently bind a same-named value-object in another package).
34
+ const referrerPkg = obj.package ?? obj.fileDefaultPackage ?? "";
46
35
  // ADR-0039: own — declaration-layer source iteration (mirrors validateSourceRoles).
47
36
  for (const source of obj.ownChildren().filter((c) => c.type === TYPE_SOURCE && c.subType === SOURCE_SUBTYPE_RDB && c instanceof MetaSource)) {
48
37
  // ADR-0039: resolving — a source may inherit @parameterRef via extends.
@@ -56,7 +45,7 @@ export function validateSourceParameterRef(root) {
56
45
  `only "storedProc" or "tableFunction" accept parameters`, { code: "ERR_PARAMETER_REF_ON_NON_CALLABLE_KIND", source: source.source }));
57
46
  continue;
58
47
  }
59
- const target = objectIndex.get(ref);
48
+ const target = resolveObjectRef(root, ref, referrerPkg).node;
60
49
  if (target === undefined) {
61
50
  errors.push(new ParseError(`source.rdb on object "${obj.name}" @parameterRef = "${ref}" does not resolve to any known object`, { code: "ERR_PARAMETER_REF_UNRESOLVED", source: source.source }));
62
51
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"validate-source-parameter-ref.js","sourceRoot":"","sources":["../../../src/persistence/source/validate-source-parameter-ref.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate-source-parameter-ref.js","sourceRoot":"","sources":["../../../src/persistence/source/validate-source-parameter-ref.ts"],"names":[],"mappings":"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"}
@@ -21,9 +21,11 @@ export interface ReferenceDescriptor {
21
21
  /** Code emitted on unresolved / kind-mismatch (may be a downstream code). */
22
22
  readonly errorCode: LoaderCode;
23
23
  }
24
- /** Resolve a ref string to its object node. */
24
+ /** Resolve a ref string to its object node under the ADR-0042 package-local
25
+ * contract. `referrerPkg` is the effective package of the node that declares
26
+ * the ref (a bare ref resolves in that package, else root-level). */
25
27
  export interface SymbolTable {
26
- resolveObject(ref: string): MetaData | undefined;
28
+ resolveObject(ref: string, referrerPkg: string): MetaData | undefined;
27
29
  }
28
30
  /** Handed to every validator: the symbol table + an error sink. */
29
31
  export interface ValidationContext {
@@ -1 +1 @@
1
- {"version":3,"file":"validation-types.d.ts","sourceRoot":"","sources":["../src/validation-types.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;8EAC8E;AAC9E,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEnD;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,+EAA+E;IAC/E,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC;+CAC2C;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;CAChC;AAED,+CAA+C;AAC/C,MAAM,WAAW,WAAW;IAC1B,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;CAClD;AAED,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAChE;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,iBAAiB,KAAK,IAAI,CAAC"}
1
+ {"version":3,"file":"validation-types.d.ts","sourceRoot":"","sources":["../src/validation-types.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;8EAC8E;AAC9E,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEnD;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,+EAA+E;IAC/E,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC;+CAC2C;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;CAChC;AAED;;sEAEsE;AACtE,MAAM,WAAW,WAAW;IAC1B,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;CACvE;AAED,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAChE;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,iBAAiB,KAAK,IAAI,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metaobjectsdev/metadata",
3
- "version": "0.15.19",
3
+ "version": "0.15.20",
4
4
  "description": "Metamodel loader, types, and constants for the MetaObjects standard.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
package/src/core-types.ts CHANGED
@@ -72,7 +72,7 @@ import {
72
72
  } from "./shared/base-types.js";
73
73
  import { CHILD_RULE_WILDCARD } from "./shared/structural.js";
74
74
  import { OBJECT_SUBTYPES, OBJECT_SUBTYPE_ENTITY } from "./core/object/object-constants.js";
75
- import { FIELD_SUBTYPES } from "./core/field/field-constants.js";
75
+ import { FIELD_SUBTYPES, FIELD_SUBTYPE_OBJECT, FIELD_SUBTYPE_MAP, FIELD_ATTR_OBJECT_REF } from "./core/field/field-constants.js";
76
76
  import { ATTR_SUBTYPES } from "./core/attr/attr-constants.js";
77
77
  import {
78
78
  VALIDATOR_SUBTYPES,
@@ -504,6 +504,19 @@ function registerCoreTypeDefs(registry: TypeRegistry): void {
504
504
  },
505
505
  ];
506
506
  }
507
+ // ADR-0042 — a field.object / field.map @objectRef must resolve (a dangling
508
+ // target fails the load, closing the gap that surfaced downstream as a
509
+ // misleading ERR_VAR_NOT_ON_PAYLOAD; #191). The required-attr pass owns
510
+ // absence (ERR_OBJECT_FIELD_WITHOUT_OBJECT_REF); this descriptor fires only
511
+ // when @objectRef is present but resolves to nothing → ERR_UNRESOLVED_OBJECT_REF.
512
+ for (const subType of [FIELD_SUBTYPE_OBJECT, FIELD_SUBTYPE_MAP]) {
513
+ const def = registry.find(TYPE_FIELD, subType);
514
+ if (def) {
515
+ def.references = [
516
+ { attr: FIELD_ATTR_OBJECT_REF, targetType: TYPE_OBJECT, errorCode: "ERR_UNRESOLVED_OBJECT_REF" },
517
+ ];
518
+ }
519
+ }
507
520
 
508
521
  // Default subTypes for YAML authoring sugar: a bare `metadata:` / `object:`
509
522
  // key resolves to these. `metadata` has exactly one subtype (root) so the
package/src/errors.ts CHANGED
@@ -71,12 +71,6 @@ export const ERROR_CODES = [
71
71
  // projection's base entity cannot be derived because its fields extend
72
72
  // multiple entities and no extended identity anchors the base.
73
73
  "ERR_AMBIGUOUS_PATH",
74
- // Cross-package reference contract — a BARE reference (no `::`) to an object
75
- // name that exists in MORE THAN ONE package, with no match in the referrer's
76
- // OWN package, is ambiguous: the author must qualify it with the package
77
- // (FQN). Applies to every object-ref-bearing attr (@objectRef, @references,
78
- // @from/@of/@via heads, extends, @payloadRef/@responseRef, @through).
79
- "ERR_AMBIGUOUS_REF",
80
74
  // FR-024 (ADR-0029 decision 6) — origin cardinality contract broken: a
81
75
  // passthrough @via path crosses a to-many hop (row-multiplying — you meant
82
76
  // aggregate), or an aggregate @via path is to-one at every hop (you meant
@@ -125,6 +119,11 @@ export const ERROR_CODES = [
125
119
  // ADR-0013 — a field.object REQUIRES @objectRef (open/untyped JSON uses
126
120
  // the physical @dbColumnType: jsonb escape hatch on field.string instead).
127
121
  "ERR_OBJECT_FIELD_WITHOUT_OBJECT_REF",
122
+ // ADR-0042 — a field.object / field.map @objectRef does not resolve to any
123
+ // object in the loaded tree (a dangling target). Bare refs resolve
124
+ // package-locally (referrer's package, else root-level); FQN refs resolve
125
+ // exactly — a bare cross-package ref no longer binds elsewhere.
126
+ "ERR_UNRESOLVED_OBJECT_REF",
128
127
  // Source v2 (ADR-0007) error codes — enforcement added during the source-v2 rollout.
129
128
  "ERR_RESERVED_ATTR",
130
129
  "ERR_SOURCE_NO_PRIMARY",
package/src/index.ts CHANGED
@@ -205,7 +205,7 @@ export type { SerializeOptions } from "./serializer-json.js";
205
205
  export { resolveSuperRef } from "./super-resolve.js";
206
206
 
207
207
  // FR-032 (ADR-0032) — canonical reference expansion + FQN object matching.
208
- export { expandRef, isRelativeRef, refMatchesObject, resolveObjectRef, REF_BEARING_ATTR_NAMES } from "./naming-refs.js";
208
+ export { expandRef, isRelativeRef, refMatchesObject, resolveObjectRef, didYouMeanHint, REF_BEARING_ATTR_NAMES } from "./naming-refs.js";
209
209
 
210
210
  // Loader hierarchy
211
211
  export { MetaDataLoader } from "./loader/meta-data-loader.js";
@@ -18,7 +18,7 @@ import { ParseError } from "../errors.js";
18
18
  import type { LoaderWarning } from "../source.js";
19
19
  import { codeSource, resolvedSource } from "../source.js";
20
20
  import { parseJson } from "../parser-json.js";
21
- import { validateDataGridSortFields, validateFilterableHasIndex, validateFilterableHasSupportedOps, validateOriginPaths, validateDerivedFieldProvidability, validateDataGridFilterValues, validateFieldObjectStorage, validateFieldMap, validateTemplatePayloadRefs, validateFieldDefaults, validateRelationships, validateIndexLookupFields, validateCrossPackageRefs } from "./validation-passes.js";
21
+ import { validateDataGridSortFields, validateFilterableHasIndex, validateFilterableHasSupportedOps, validateOriginPaths, validateDerivedFieldProvidability, validateDataGridFilterValues, validateFieldObjectStorage, validateFieldMap, validateTemplatePayloadRefs, validateFieldDefaults, validateRelationships, validateIndexLookupFields } from "./validation-passes.js";
22
22
  import { runRegisteredValidation } from "./validation-registry.js";
23
23
  import { validateSourceRoles } from "../persistence/source/validate-source-roles.js";
24
24
  import { validateSourcePhysicalNames } from "../persistence/source/validate-source-physical-names.js";
@@ -579,7 +579,6 @@ export class MetaDataLoader {
579
579
  // Sixth pass: origin path validation — validates passthrough.@from,
580
580
  // aggregate.@of, and .@via relationship chains.
581
581
  errors.push(...validateOriginPaths(root));
582
- errors.push(...validateCrossPackageRefs(root));
583
582
 
584
583
  // FR-024 B6 — derived-field providability: an entity field carrying an
585
584
  // origin.* is derived (read-only) and must be providable by at least one