@metaobjectsdev/metadata 1.0.2 → 1.0.3

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 (50) hide show
  1. package/dist/core/parser-yaml.d.ts.map +1 -1
  2. package/dist/core/parser-yaml.js +4 -0
  3. package/dist/core/parser-yaml.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 +21 -0
  7. package/dist/errors.js.map +1 -1
  8. package/dist/index.d.ts +6 -4
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +7 -3
  11. package/dist/index.js.map +1 -1
  12. package/dist/json-path.d.ts +14 -0
  13. package/dist/json-path.d.ts.map +1 -1
  14. package/dist/json-path.js +13 -0
  15. package/dist/json-path.js.map +1 -1
  16. package/dist/loader/meta-data-loader.d.ts +44 -21
  17. package/dist/loader/meta-data-loader.d.ts.map +1 -1
  18. package/dist/loader/meta-data-loader.js +112 -87
  19. package/dist/loader/meta-data-loader.js.map +1 -1
  20. package/dist/loader/sources/file-source.d.ts +7 -1
  21. package/dist/loader/sources/file-source.d.ts.map +1 -1
  22. package/dist/loader/sources/file-source.js +3 -2
  23. package/dist/loader/sources/file-source.js.map +1 -1
  24. package/dist/naming.d.ts +7 -0
  25. package/dist/naming.d.ts.map +1 -1
  26. package/dist/naming.js +10 -0
  27. package/dist/naming.js.map +1 -1
  28. package/dist/parser-core.d.ts +103 -0
  29. package/dist/parser-core.d.ts.map +1 -1
  30. package/dist/parser-core.js +189 -16
  31. package/dist/parser-core.js.map +1 -1
  32. package/dist/scope.d.ts +16 -0
  33. package/dist/scope.d.ts.map +1 -0
  34. package/dist/scope.js +78 -0
  35. package/dist/scope.js.map +1 -0
  36. package/dist/serializer-json.d.ts +1 -0
  37. package/dist/serializer-json.d.ts.map +1 -1
  38. package/dist/serializer-json.js +43 -1
  39. package/dist/serializer-json.js.map +1 -1
  40. package/package.json +1 -1
  41. package/src/core/parser-yaml.ts +4 -0
  42. package/src/errors.ts +21 -0
  43. package/src/index.ts +12 -4
  44. package/src/json-path.ts +16 -1
  45. package/src/loader/meta-data-loader.ts +147 -101
  46. package/src/loader/sources/file-source.ts +10 -2
  47. package/src/naming.ts +11 -0
  48. package/src/parser-core.ts +304 -20
  49. package/src/scope.ts +97 -0
  50. package/src/serializer-json.ts +46 -1
@@ -1 +1 @@
1
- {"version":3,"file":"serializer-json.js","sourceRoot":"","sources":["../src/serializer-json.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serializer-json.js","sourceRoot":"","sources":["../src/serializer-json.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metaobjectsdev/metadata",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "Metamodel loader, types, and constants for the MetaObjects standard.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -85,5 +85,9 @@ export function parseYaml(content: string, opts: ParseOptions): ParseResult {
85
85
  warnings: result.warnings,
86
86
  errors: [...desugarParseErrors, ...result.errors],
87
87
  envelopeWarnings: result.envelopeWarnings,
88
+ // ADR-0055 — pass the deferred-overlay queue through untouched. This door
89
+ // rebuilds the result to prepend desugar errors, so it has to forward every
90
+ // member; dropping it left the loader spreading `undefined`.
91
+ pendingOverlays: result.pendingOverlays,
88
92
  };
89
93
  }
package/src/errors.ts CHANGED
@@ -260,6 +260,27 @@ export const ERROR_CODES = [
260
260
  // Phase-1 metadata-source-resolution — no metadata collection was discovered:
261
261
  // no config declaring sources, and no default metaobjects/ directory.
262
262
  "ERR_COLLECTION_NOT_FOUND",
263
+ // FR-023 — a declared dependency's transport could not locate a directory holding
264
+ // metaobjects.pkg.json.
265
+ "ERR_DEPENDENCY_UNRESOLVED",
266
+ // FR-023 — a dependency's metaobjects.pkg.json fails its schema, names a different
267
+ // dependency, points at a missing/hash-mismatched artifact, or the artifact does not
268
+ // load standalone / does not declare exactly the listed packages and nodes.
269
+ "ERR_DEPENDENCY_MANIFEST_INVALID",
270
+ // FR-023 — the committed snapshot does not match .metaobjects/deps.lock.json (lock
271
+ // missing, entry missing or extra, artifact missing, or hash mismatch).
272
+ "ERR_DEPENDENCY_SNAPSHOT_STALE",
273
+ // FR-023 — two dependencies export the same fully-qualified node.
274
+ "ERR_DEPENDENCY_NODE_COLLISION",
275
+ // FR-023 — a local top-level node is declared into a package owned by a dependency
276
+ // (§11.5 — imported-ness is package-keyed; a genuinely new object in a dependency's
277
+ // package would otherwise silently never generate).
278
+ "ERR_DEPENDENCY_PACKAGE_NOT_OWNED",
279
+ // FR-023 — a dependency's metamodelVersion major differs from this toolchain's.
280
+ "ERR_DEPENDENCY_METAMODEL_INCOMPATIBLE",
281
+ // FR-023 — `meta deps check` / `verify --deps` found the installed dependency differs
282
+ // from the committed snapshot.
283
+ "ERR_DEPENDENCY_UPSTREAM_DRIFT",
263
284
  "ERR_UNKNOWN",
264
285
  ] as const;
265
286
 
package/src/index.ts CHANGED
@@ -235,7 +235,7 @@ export type { ParseOptions, ParseResult } from "./parser-core.js";
235
235
  export { parseJson } from "./parser-json.js";
236
236
 
237
237
  // Serializer
238
- export { serializeJson, canonicalSerialize, inferAttrSubType } from "./serializer-json.js";
238
+ export { serializeJson, canonicalSerialize, serializeSharedDocument, inferAttrSubType } from "./serializer-json.js";
239
239
  export type { SerializeOptions } from "./serializer-json.js";
240
240
 
241
241
  // Super resolution helper (most resolution moved into parser; this is the lookup utility)
@@ -245,8 +245,10 @@ export { resolveSuperRef } from "./super-resolve.js";
245
245
  export { expandRef, isRelativeRef, refMatchesObject, resolveObjectRef, didYouMeanHint, REF_BEARING_ATTR_NAMES } from "./naming-refs.js";
246
246
 
247
247
  // Loader hierarchy
248
- export { MetaDataLoader } from "./loader/meta-data-loader.js";
249
- export type { LoadOptions, LoadResult, LoadingState, DirectoryFactoryOptions } from "./loader/meta-data-loader.js";
248
+ export { MetaDataLoader, declaredTopLevelKeys } from "./loader/meta-data-loader.js";
249
+ export type {
250
+ LoadOptions, LoadResult, LoadingState, DirectoryFactoryOptions, DeclaredTopLevelKey,
251
+ } from "./loader/meta-data-loader.js";
250
252
  export { InMemoryStringSource } from "./loader/meta-data-source.js";
251
253
  export type { MetaDataSource, MetaDataFormat } from "./loader/meta-data-source.js";
252
254
 
@@ -278,6 +280,12 @@ export type {
278
280
  } from "./source.js";
279
281
  export { codeSource } from "./source.js";
280
282
 
283
+ // FR-023 §4.3 — scope-pattern grammar (moved from sdk; sdk re-exports these
284
+ // for compatibility, and codegen-ts's publisher generator depends on this
285
+ // package directly rather than on sdk).
286
+ export { compileScope, matchesScope } from "./scope.js";
287
+ export type { Scope, CompiledScope } from "./scope.js";
288
+
281
289
  // Attribute-schema validation pass (Phase A3)
282
290
  export { validateAttrSchema } from "./attr-schema-validate.js";
283
291
  export type { AttrSchemaValidationResult } from "./attr-schema-validate.js";
@@ -290,7 +298,7 @@ export {
290
298
  resolveTableName, resolveColumnName, resolveTableSchema, resolveIndexName,
291
299
  primaryRdbSource, sourceAddressKey,
292
300
  buildNameMap,
293
- stripPackage,
301
+ stripPackage, packageOfResolutionKey,
294
302
  } from "./naming.js";
295
303
  export type { EntityNameMap, ColumnNamingStrategy } from "./naming.js";
296
304
 
package/src/json-path.ts CHANGED
@@ -11,7 +11,7 @@
11
11
 
12
12
  const IDENT_RE = /^[A-Za-z_][A-Za-z0-9_]*$/;
13
13
 
14
- type Segment =
14
+ export type Segment =
15
15
  | { kind: "key"; value: string }
16
16
  | { kind: "index"; value: number };
17
17
 
@@ -30,6 +30,21 @@ export class JsonPathBuilder {
30
30
  this.segments.pop();
31
31
  }
32
32
 
33
+ /** ADR-0055 — the current stack, captured so a declaration deferred out of
34
+ * the walk can be re-seeded when it is applied. By then the walk that built
35
+ * this path has unwound, so an error raised at application time would
36
+ * otherwise carry the wrong jsonPath (or none). */
37
+ snapshot(): readonly Segment[] {
38
+ return [...this.segments];
39
+ }
40
+
41
+ /** ADR-0055 — rebuild a builder from a {@link snapshot}. */
42
+ static fromSegments(segments: readonly Segment[]): JsonPathBuilder {
43
+ const b = new JsonPathBuilder();
44
+ b.segments.push(...segments);
45
+ return b;
46
+ }
47
+
33
48
  toString(): string {
34
49
  let out = "$";
35
50
  for (const seg of this.segments) {
@@ -13,7 +13,14 @@ import { TypeId, TypeRegistry } from "../registry.js";
13
13
  import { coreProviders } from "../core-types.js";
14
14
  import { composeRegistry } from "../provider.js";
15
15
  import { TYPE_METADATA, SUBTYPE_ROOT } from "../shared/base-types.js";
16
- import { RESERVED_KEY_CHILDREN, RESERVED_KEY_OVERLAY } from "../shared/structural.js";
16
+ import {
17
+ PACKAGE_SEPARATOR,
18
+ RESERVED_KEY_CHILDREN,
19
+ RESERVED_KEY_NAME,
20
+ RESERVED_KEY_OVERLAY,
21
+ RESERVED_KEY_PACKAGE,
22
+ TYPE_SUBTYPE_SEPARATOR,
23
+ } from "../shared/structural.js";
17
24
  import { ParseError } from "../errors.js";
18
25
  import type { LoaderWarning } from "../source.js";
19
26
  import { codeSource, resolvedSource } from "../source.js";
@@ -34,7 +41,8 @@ import { validateIdentityPassthrough } from "../core/identity/validate-identity-
34
41
  import { validateAttrSchema } from "../attr-schema-validate.js";
35
42
  import type { MetaDataFormat, MetaDataSource } from "./meta-data-source.js";
36
43
  import { InMemoryStringSource } from "./meta-data-source.js";
37
- import type { ParseOptions, ParseResult } from "../parser-core.js";
44
+ import type { ParseOptions, ParseResult, PendingOverlay } from "../parser-core.js";
45
+ import { expandPackageForPath, applyPendingOverlays } from "../parser-core.js";
38
46
 
39
47
  // Local mirror of DirectorySource's options shape. Deliberately inlined here
40
48
  // (instead of `import type`'d from ./sources/directory-source.js) so the
@@ -97,6 +105,113 @@ function makeSyntheticRoot(): MetaRoot {
97
105
  return new MetaRoot(new TypeId(TYPE_METADATA, SUBTYPE_ROOT), "");
98
106
  }
99
107
 
108
+ // ---------------------------------------------------------------------------
109
+ // declaredTopLevelKeys — structural pre-parse walk (#160, generalized)
110
+ // ---------------------------------------------------------------------------
111
+
112
+ /** One root-level declaration as `declaredTopLevelKeys` structurally scans it —
113
+ * before registry-driven parsing, super resolution, or merge. */
114
+ export interface DeclaredTopLevelKey {
115
+ /** The wrapper key's TYPE segment (e.g. "object" for "object.entity"). A bare
116
+ * wrapper key with no "." is its own type — this walk never consults the
117
+ * registry for a default subType, because it never needs the subType. */
118
+ type: string;
119
+ /** The resolution key the declaration would carry once parsed: the child's
120
+ * own `package` if set (expanded against the root's `package` via
121
+ * `expandPackageForPath` when it's a relative, `::`-prefixed path — e.g.
122
+ * root `acme` + own `::garage` → `acme::garage`), else the root's
123
+ * `package` verbatim, then `::`, then its `name`. Exactly
124
+ * `rootChildResolutionKey` (parser-core.ts) — including the relative-path
125
+ * expansion, reusing `expandPackageForPath` rather than reimplementing it,
126
+ * because a second copy is exactly how this walk and the real parser
127
+ * silently disagreed on a relative package (task 17 fix-round-1: this
128
+ * function used to return `::garage::Garage` for a fixture the real
129
+ * loader resolves to `acme::garage::Garage`). */
130
+ key: string;
131
+ /** Whether the declaration's body carries `overlay: true`. */
132
+ overlay: boolean;
133
+ }
134
+
135
+ /**
136
+ * Structurally scan a source's raw content (JSON via `JSON.parse`; sigil-free
137
+ * authoring YAML via the raw YAML walker — `overlay: true` is a bare key
138
+ * before desugar) and report every top-level declaration under
139
+ * `metadata.root.children`: its type, the resolution key it would carry once
140
+ * parsed, and whether it carries `overlay: true`.
141
+ *
142
+ * A declaration with no (string, non-empty) `name` is skipped — a resolution
143
+ * key can't be computed for it, and the real parser will report it as a
144
+ * loader error rather than silently reusing or creating a node. Malformed
145
+ * root shapes (root missing, not an object, `children` absent or not an
146
+ * array) return `[]` rather than throwing — the real parse loop is where a
147
+ * genuine structural error surfaces; this walk must never crash a caller
148
+ * that is only trying to answer "what does this file declare".
149
+ *
150
+ * Written for the #160 overlay-only source partition, which ADR-0055 retired —
151
+ * overlays are now applied in a post-parse pass, so no ordering decision needs
152
+ * this walk. Its remaining caller is the `meta verify` overlay authoring lint,
153
+ * which needs per-file declaration provenance precisely because the MERGED tree
154
+ * has already lost which file contributed which declaration.
155
+ */
156
+ export async function declaredTopLevelKeys(
157
+ content: string,
158
+ format: MetaDataFormat,
159
+ ): Promise<ReadonlyArray<DeclaredTopLevelKey>> {
160
+ // Strip UTF-8 BOM if present (mirrors parseJson / parseYaml).
161
+ const normalized = content.charCodeAt(0) === 0xfeff ? content.slice(1) : content;
162
+ let parsed: unknown;
163
+ if (format === "json") {
164
+ parsed = JSON.parse(normalized);
165
+ } else if (format === "yaml") {
166
+ const { parseYamlWithPositions } = await import("../core/yaml-positions-walker.js");
167
+ parsed = parseYamlWithPositions(normalized).value;
168
+ } else {
169
+ return [];
170
+ }
171
+ return declaredTopLevelKeysFromParsedRoot(parsed);
172
+ }
173
+
174
+ /** The structural walk `declaredTopLevelKeys` performs once content is
175
+ * structurally parsed — split out so it takes no format/BOM concerns. */
176
+ function declaredTopLevelKeysFromParsedRoot(parsed: unknown): ReadonlyArray<DeclaredTopLevelKey> {
177
+ if (typeof parsed !== "object" || parsed === null) return [];
178
+ const parsedRecord = parsed as Record<string, unknown>;
179
+ // Canonical JSON always fuses the subType onto the root wrapper key
180
+ // ("metadata.root"); sigil-free YAML authoring writes the bare type
181
+ // ("metadata") and leaves the default subType to the registry — this
182
+ // structural walk runs BEFORE desugar/registry resolution, so it must
183
+ // accept both spellings rather than only ever matching JSON's.
184
+ const explicitRootKey = `${TYPE_METADATA}${TYPE_SUBTYPE_SEPARATOR}${SUBTYPE_ROOT}`; // "metadata.root"
185
+ const rootBody = parsedRecord[explicitRootKey] ?? parsedRecord[TYPE_METADATA];
186
+ if (typeof rootBody !== "object" || rootBody === null) return [];
187
+ const rawRootPkg = (rootBody as Record<string, unknown>)[RESERVED_KEY_PACKAGE];
188
+ const rootPkg = typeof rawRootPkg === "string" ? rawRootPkg : "";
189
+ const children = (rootBody as Record<string, unknown>)[RESERVED_KEY_CHILDREN];
190
+ if (!Array.isArray(children)) return [];
191
+
192
+ const declared: DeclaredTopLevelKey[] = [];
193
+ for (const child of children) {
194
+ if (typeof child !== "object" || child === null) continue;
195
+ // Each child is a single-key wrapper: { "object.entity": { ... } }.
196
+ for (const [wrapperKey, body] of Object.entries(child as Record<string, unknown>)) {
197
+ if (typeof body !== "object" || body === null) continue;
198
+ const bodyRecord = body as Record<string, unknown>;
199
+ const name = bodyRecord[RESERVED_KEY_NAME];
200
+ if (typeof name !== "string" || name === "") continue;
201
+ const dotIdx = wrapperKey.indexOf(TYPE_SUBTYPE_SEPARATOR);
202
+ const type = dotIdx < 0 ? wrapperKey : wrapperKey.slice(0, dotIdx);
203
+ const rawOwnPkg = bodyRecord[RESERVED_KEY_PACKAGE];
204
+ const pkg =
205
+ typeof rawOwnPkg === "string" && rawOwnPkg !== ""
206
+ ? expandPackageForPath(rootPkg, rawOwnPkg)
207
+ : rootPkg;
208
+ const key = pkg !== "" ? `${pkg}${PACKAGE_SEPARATOR}${name}` : name;
209
+ declared.push({ type, key, overlay: bodyRecord[RESERVED_KEY_OVERLAY] === true });
210
+ }
211
+ }
212
+ return declared;
213
+ }
214
+
100
215
  // ---------------------------------------------------------------------------
101
216
  // MetaDataLoader class
102
217
  // ---------------------------------------------------------------------------
@@ -330,92 +445,6 @@ export class MetaDataLoader {
330
445
  MetaDataLoader._yamlParser = mod.parseYaml;
331
446
  }
332
447
 
333
- // ---------------------------------------------------------------------------
334
- // #160 — overlay-only source partition (stable, overlay-only sources last)
335
- // ---------------------------------------------------------------------------
336
-
337
- /**
338
- * Stable-partition `sources` so that "overlay-only" sources — every top-level
339
- * object declaration carries `overlay: true`, i.e. the source declares no base
340
- * objects of its own and only re-opens objects declared elsewhere — are parsed
341
- * LAST. Preserves original order within each group.
342
- *
343
- * A source whose content can't be read or structurally scanned stays in the
344
- * base group (never overlay-only) — this partition must never crash the loader;
345
- * any genuine read/parse failure surfaces later, in the real parse loop.
346
- */
347
- private static async _partitionOverlayLast(
348
- sources: MetaDataSource[],
349
- ): Promise<MetaDataSource[]> {
350
- const base: MetaDataSource[] = [];
351
- const overlayOnly: MetaDataSource[] = [];
352
- for (const source of sources) {
353
- let isOverlayOnly = false;
354
- try {
355
- const content = await source.read();
356
- isOverlayOnly = await MetaDataLoader._isOverlayOnlySource(
357
- content,
358
- source.format,
359
- );
360
- } catch {
361
- isOverlayOnly = false;
362
- }
363
- (isOverlayOnly ? overlayOnly : base).push(source);
364
- }
365
- return [...base, ...overlayOnly];
366
- }
367
-
368
- /**
369
- * Structurally scan a source's raw content (JSON via JSON.parse; sigil-free
370
- * authoring YAML via the raw YAML walker — `overlay: true` is a bare key
371
- * before desugar) and report whether every top-level object declaration under
372
- * `metadata.root.children` carries `overlay: true` (and there is at least one).
373
- */
374
- private static async _isOverlayOnlySource(
375
- content: string,
376
- format: MetaDataFormat,
377
- ): Promise<boolean> {
378
- // Strip UTF-8 BOM if present (mirrors parseJson / parseYaml).
379
- const normalized = content.charCodeAt(0) === 0xfeff ? content.slice(1) : content;
380
- let parsed: unknown;
381
- if (format === "json") {
382
- parsed = JSON.parse(normalized);
383
- } else if (format === "yaml") {
384
- const { parseYamlWithPositions } = await import(
385
- "../core/yaml-positions-walker.js"
386
- );
387
- parsed = parseYamlWithPositions(normalized).value;
388
- } else {
389
- return false;
390
- }
391
- return MetaDataLoader._rootIsOverlayOnly(parsed);
392
- }
393
-
394
- /** True when the structurally-parsed root has ≥1 child and every top-level
395
- * child node carries `overlay: true` (declares no base objects). */
396
- private static _rootIsOverlayOnly(parsed: unknown): boolean {
397
- if (typeof parsed !== "object" || parsed === null) return false;
398
- const rootKey = `${TYPE_METADATA}.${SUBTYPE_ROOT}`; // "metadata.root"
399
- const rootBody = (parsed as Record<string, unknown>)[rootKey];
400
- if (typeof rootBody !== "object" || rootBody === null) return false;
401
- const children = (rootBody as Record<string, unknown>)[RESERVED_KEY_CHILDREN];
402
- if (!Array.isArray(children) || children.length === 0) return false;
403
- return children.every((child) => {
404
- if (typeof child !== "object" || child === null) return false;
405
- // Each child is a single-key wrapper: { "object.projection": { ... } }.
406
- const bodies = Object.values(child as Record<string, unknown>);
407
- return (
408
- bodies.length > 0 &&
409
- bodies.every(
410
- (body) =>
411
- typeof body === "object" &&
412
- body !== null &&
413
- (body as Record<string, unknown>)[RESERVED_KEY_OVERLAY] === true,
414
- )
415
- );
416
- });
417
- }
418
-
419
448
  // ---------------------------------------------------------------------------
420
449
  // load — async pipeline over MetaDataSource[]
421
450
  // ---------------------------------------------------------------------------
@@ -457,20 +486,17 @@ export class MetaDataLoader {
457
486
  await MetaDataLoader._ensureYamlParser();
458
487
  }
459
488
 
460
- // #160this loader merges DURING parse (each source is streamed into the
461
- // accumulating `root` via parseOpts.intoRoot). A source that ONLY re-opens
462
- // objects declared elsewhere (every top-level object carries `overlay: true`)
463
- // must therefore be parsed AFTER the sources that declare those base objects,
464
- // or the overlaid node lands ahead of its base entities — leaving a projection
465
- // before its base so order-dependent super-resolution can't resolve its
466
- // `extends`/`@via`, and the streaming merge errors ERR_OVERLAY_NO_TARGET.
467
- // Directory discovery order is not guaranteed to present base files first
468
- // (basename sort can put an overlay-only file first), so stable-partition
469
- // overlay-only sources to the END here, making the merge order-independent.
470
- // Stable within each group preserves last-writer-wins overlay semantics.
471
- sources = await MetaDataLoader._partitionOverlayLast(sources);
472
-
489
+ // ADR-0055sources are parsed in the order given. Overlays are not applied
490
+ // during the walk: each parse QUEUES its `overlay: true` declarations and the
491
+ // loader applies them below, once every base exists. That retired the #160
492
+ // overlay-only source partition, whose file-level predicate could not rescue a
493
+ // MIXED file (plain + overlay declarations together) and therefore left the
494
+ // load order-dependent and divergent across ports, since every port's
495
+ // directory walk orders files differently.
473
496
  let root: MetaRoot | undefined;
497
+ // ADR-0055 — every source's queue, concatenated in parse order, which is
498
+ // already "source order, then declaration order within a source" (G2).
499
+ const pendingOverlays: PendingOverlay[] = [];
474
500
 
475
501
  // Parse all sources with super resolution DEFERRED so cross-file super
476
502
  // refs work — one source may declare a super target that's defined in a
@@ -495,6 +521,10 @@ export class MetaDataLoader {
495
521
  registry: this._registry,
496
522
  strict: this._strict,
497
523
  deferSuperResolution: true,
524
+ // ADR-0055 — queue overlays; this loader drains them after every source
525
+ // is parsed. Without it each document would drain its own queue and an
526
+ // overlay could still not reach a base declared in a later source.
527
+ deferOverlays: true,
498
528
  sourceName: source.id,
499
529
  };
500
530
  if (root !== undefined) parseOpts.intoRoot = root;
@@ -507,6 +537,7 @@ export class MetaDataLoader {
507
537
  // source). The legacy `warnings` channel still flows into the
508
538
  // WARN_LEGACY-wrapping path below for unchanged behavior.
509
539
  envelopeWarnings.push(...parseResult.envelopeWarnings);
540
+ pendingOverlays.push(...parseResult.pendingOverlays);
510
541
  root = parseResult.root;
511
542
  } catch (err) {
512
543
  errors.push(
@@ -517,6 +548,21 @@ export class MetaDataLoader {
517
548
  }
518
549
  }
519
550
 
551
+ // ADR-0055 — apply every queued overlay now: all plain declarations from all
552
+ // sources are in the tree (G1), so a base/overlay relation no longer depends
553
+ // on file order (G4). This runs BEFORE super resolution so a node an overlay
554
+ // contributes is visible to every `extends` (G5) — the ordering #160's
555
+ // partition was reaching for, now guaranteed rather than approximated.
556
+ if (root !== undefined && pendingOverlays.length > 0) {
557
+ const applied = applyPendingOverlays(pendingOverlays, {
558
+ registry: this._registry,
559
+ strict: this._strict,
560
+ });
561
+ warnings.push(...applied.warnings);
562
+ errors.push(...applied.errors);
563
+ envelopeWarnings.push(...applied.envelopeWarnings);
564
+ }
565
+
520
566
  // Second pass: resolve every deferred super ref against the full tree.
521
567
  // Unresolved refs are always errors (matches the original eager-throw
522
568
  // behavior — broken metadata is broken regardless of strict mode).
@@ -27,16 +27,24 @@ async function getReadText(): Promise<(path: string) => Promise<string>> {
27
27
  return _readText;
28
28
  }
29
29
 
30
+ /** Options for {@link FileSource}. */
31
+ export interface FileSourceOptions {
32
+ /** Explicit source id (e.g. `dep:<name>/<artifact>` for a dependency snapshot).
33
+ * Defaults to `basename(path)` when omitted. */
34
+ id?: string;
35
+ }
36
+
30
37
  /** A metadata source backed by a file on disk. */
31
38
  export class FileSource implements MetaDataSource {
32
39
  readonly id: string;
33
40
  readonly format: MetaDataFormat;
34
41
  private readonly _path: string;
35
42
 
36
- constructor(path: string) {
43
+ constructor(path: string, opts?: FileSourceOptions) {
37
44
  this._path = path;
38
45
  // basename() for readable error messages; cross-platform (handles both / and \). Full path retained for read().
39
- this.id = basename(path);
46
+ // An explicit id (FR-023: dependency snapshots load with `dep:<name>/<artifact>`) overrides the default.
47
+ this.id = opts?.id ?? basename(path);
40
48
  this.format = inferFormat(path);
41
49
  }
42
50
 
package/src/naming.ts CHANGED
@@ -30,6 +30,17 @@ export function stripPackage(name: string | undefined): string {
30
30
  return idx === -1 ? name : name.slice(idx + PACKAGE_SEPARATOR.length);
31
31
  }
32
32
 
33
+ /**
34
+ * The package half of a resolution key — the complement of `stripPackage`
35
+ * (`"a::b::C"` → `"a::b"`; a root-level `"C"` → `""`). A resolution key is
36
+ * `package::name` for a packaged node and the bare name otherwise, so the text
37
+ * before the LAST separator is exactly the node's package.
38
+ */
39
+ export function packageOfResolutionKey(fqn: string): string {
40
+ const idx = fqn.lastIndexOf(PACKAGE_SEPARATOR);
41
+ return idx === -1 ? "" : fqn.slice(0, idx);
42
+ }
43
+
33
44
  export function toSnakeCase(s: string): string {
34
45
  return s
35
46
  .replace(/([A-Z]+)([A-Z][a-z])/g, "$1_$2")