@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.
- package/dist/core-types.d.ts.map +1 -1
- package/dist/core-types.js +14 -1
- package/dist/core-types.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +5 -6
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/loader/meta-data-loader.d.ts.map +1 -1
- package/dist/loader/meta-data-loader.js +1 -2
- package/dist/loader/meta-data-loader.js.map +1 -1
- package/dist/loader/validation-passes.d.ts +0 -14
- package/dist/loader/validation-passes.d.ts.map +1 -1
- package/dist/loader/validation-passes.js +50 -71
- package/dist/loader/validation-passes.js.map +1 -1
- package/dist/loader/validation-registry.d.ts.map +1 -1
- package/dist/loader/validation-registry.js +25 -20
- package/dist/loader/validation-registry.js.map +1 -1
- package/dist/naming-refs.d.ts +42 -26
- package/dist/naming-refs.d.ts.map +1 -1
- package/dist/naming-refs.js +67 -39
- package/dist/naming-refs.js.map +1 -1
- package/dist/persistence/origin/origin-constants.d.ts.map +1 -1
- package/dist/persistence/origin/origin-constants.js +4 -3
- package/dist/persistence/origin/origin-constants.js.map +1 -1
- package/dist/persistence/origin/origin-definition.embedded.js +1 -1
- package/dist/persistence/origin/origin-definition.embedded.js.map +1 -1
- package/dist/persistence/source/validate-source-parameter-ref.d.ts.map +1 -1
- package/dist/persistence/source/validate-source-parameter-ref.js +7 -18
- package/dist/persistence/source/validate-source-parameter-ref.js.map +1 -1
- package/dist/validation-types.d.ts +4 -2
- package/dist/validation-types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/core-types.ts +14 -1
- package/src/errors.ts +5 -6
- package/src/index.ts +1 -1
- package/src/loader/meta-data-loader.ts +1 -2
- package/src/loader/validation-passes.ts +54 -72
- package/src/loader/validation-registry.ts +25 -17
- package/src/naming-refs.ts +66 -40
- package/src/persistence/origin/origin-constants.ts +4 -3
- package/src/persistence/origin/origin-definition.embedded.ts +1 -1
- package/src/persistence/source/validate-source-parameter-ref.ts +7 -19
- package/src/validation-types.ts +4 -2
package/dist/naming-refs.d.ts
CHANGED
|
@@ -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. `@
|
|
11
|
-
*
|
|
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
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* `
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
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
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
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
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
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
|
|
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"}
|
package/dist/naming-refs.js
CHANGED
|
@@ -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. `@
|
|
46
|
-
*
|
|
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
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
* `
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
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
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
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
|
-
|
|
150
|
-
|
|
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
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
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
|
|
177
|
+
return { node: objects.find((c) => c.resolutionKey() === ref) };
|
|
170
178
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
const
|
|
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 {
|
|
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
|
package/dist/naming-refs.js.map
CHANGED
|
@@ -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;
|
|
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;
|
|
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
|
|
36
|
-
// related rows the aggregate spans
|
|
37
|
-
//
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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 {
|
|
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 =
|
|
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":"AAAA,wEAAwE;AACxE,EAAE;AACF,SAAS;AACT,sFAAsF;AACtF,oFAAoF;AACpF,oEAAoE;AACpE,2CAA2C;AAC3C,mFAAmF;AACnF,iFAAiF;AACjF,sFAAsF;AACtF,8DAA8D;AAC9D,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,wEAAwE;AAGxE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,WAAW,EACX,WAAW,GACZ,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,
|
|
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
|
|
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
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
|
|
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
|