@metaobjectsdev/metadata 0.6.0-rc.1 → 0.7.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +54 -3
  2. package/dist/attr-schema-validate.js +7 -7
  3. package/dist/attr-schema-validate.js.map +1 -1
  4. package/dist/core/export-json.d.ts +6 -7
  5. package/dist/core/export-json.d.ts.map +1 -1
  6. package/dist/core/export-json.js +15 -17
  7. package/dist/core/export-json.js.map +1 -1
  8. package/dist/core/index.d.ts +4 -2
  9. package/dist/core/index.d.ts.map +1 -1
  10. package/dist/core/index.js +6 -2
  11. package/dist/core/index.js.map +1 -1
  12. package/dist/core/parser-yaml.d.ts.map +1 -1
  13. package/dist/core/parser-yaml.js +13 -4
  14. package/dist/core/parser-yaml.js.map +1 -1
  15. package/dist/errors.d.ts +28 -8
  16. package/dist/errors.d.ts.map +1 -1
  17. package/dist/errors.js +31 -5
  18. package/dist/errors.js.map +1 -1
  19. package/dist/index.d.ts +6 -3
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +9 -2
  22. package/dist/index.js.map +1 -1
  23. package/dist/json-path.d.ts +8 -0
  24. package/dist/json-path.d.ts.map +1 -0
  25. package/dist/json-path.js +39 -0
  26. package/dist/json-path.js.map +1 -0
  27. package/dist/loader/meta-data-loader.d.ts +47 -6
  28. package/dist/loader/meta-data-loader.d.ts.map +1 -1
  29. package/dist/loader/meta-data-loader.js +106 -8
  30. package/dist/loader/meta-data-loader.js.map +1 -1
  31. package/dist/loader/meta-data-source.d.ts +6 -2
  32. package/dist/loader/meta-data-source.d.ts.map +1 -1
  33. package/dist/loader/meta-data-source.js +10 -6
  34. package/dist/loader/meta-data-source.js.map +1 -1
  35. package/dist/loader/shortcuts.d.ts +9 -0
  36. package/dist/loader/shortcuts.d.ts.map +1 -0
  37. package/dist/loader/shortcuts.js +19 -0
  38. package/dist/loader/shortcuts.js.map +1 -0
  39. package/dist/loader/sources/directory-source.d.ts +15 -0
  40. package/dist/loader/sources/directory-source.d.ts.map +1 -0
  41. package/dist/loader/sources/directory-source.js +80 -0
  42. package/dist/loader/sources/directory-source.js.map +1 -0
  43. package/dist/loader/sources/file-source.d.ts +12 -0
  44. package/dist/loader/sources/file-source.d.ts.map +1 -0
  45. package/dist/loader/sources/file-source.js +46 -0
  46. package/dist/loader/sources/file-source.js.map +1 -0
  47. package/dist/loader/sources/index.d.ts +5 -0
  48. package/dist/loader/sources/index.d.ts.map +1 -0
  49. package/dist/loader/sources/index.js +5 -0
  50. package/dist/loader/sources/index.js.map +1 -0
  51. package/dist/loader/sources/uri-source.d.ts +9 -0
  52. package/dist/loader/sources/uri-source.d.ts.map +1 -0
  53. package/dist/loader/sources/uri-source.js +42 -0
  54. package/dist/loader/sources/uri-source.js.map +1 -0
  55. package/dist/loader/validation-passes.d.ts.map +1 -1
  56. package/dist/loader/validation-passes.js +27 -27
  57. package/dist/loader/validation-passes.js.map +1 -1
  58. package/dist/naming.d.ts +15 -2
  59. package/dist/naming.d.ts.map +1 -1
  60. package/dist/naming.js +20 -6
  61. package/dist/naming.js.map +1 -1
  62. package/dist/parser-core.d.ts +2 -4
  63. package/dist/parser-core.d.ts.map +1 -1
  64. package/dist/parser-core.js +111 -42
  65. package/dist/parser-core.js.map +1 -1
  66. package/dist/parser-json.d.ts.map +1 -1
  67. package/dist/parser-json.js +10 -2
  68. package/dist/parser-json.js.map +1 -1
  69. package/dist/persistence/source/validate-source-roles.js +2 -2
  70. package/dist/persistence/source/validate-source-roles.js.map +1 -1
  71. package/dist/semantic-diff.d.ts +5 -0
  72. package/dist/semantic-diff.d.ts.map +1 -0
  73. package/dist/semantic-diff.js +49 -0
  74. package/dist/semantic-diff.js.map +1 -0
  75. package/dist/shared/meta-data.d.ts +10 -0
  76. package/dist/shared/meta-data.d.ts.map +1 -1
  77. package/dist/shared/meta-data.js +23 -0
  78. package/dist/shared/meta-data.js.map +1 -1
  79. package/dist/source.d.ts +68 -0
  80. package/dist/source.d.ts.map +1 -0
  81. package/dist/source.js +13 -0
  82. package/dist/source.js.map +1 -0
  83. package/dist/subtype-rules.js +1 -1
  84. package/dist/subtype-rules.js.map +1 -1
  85. package/dist/super-resolve.d.ts +2 -0
  86. package/dist/super-resolve.d.ts.map +1 -1
  87. package/dist/super-resolve.js +1 -1
  88. package/dist/super-resolve.js.map +1 -1
  89. package/package.json +1 -1
  90. package/src/attr-schema-validate.ts +7 -7
  91. package/src/core/export-json.ts +15 -18
  92. package/src/core/index.ts +8 -2
  93. package/src/core/parser-yaml.ts +15 -4
  94. package/src/errors.ts +42 -8
  95. package/src/index.ts +28 -3
  96. package/src/json-path.ts +46 -0
  97. package/src/loader/meta-data-loader.ts +148 -10
  98. package/src/loader/meta-data-source.ts +10 -6
  99. package/src/loader/shortcuts.ts +31 -0
  100. package/src/loader/sources/directory-source.ts +90 -0
  101. package/src/{core → loader/sources}/file-source.ts +3 -3
  102. package/src/loader/sources/index.ts +6 -0
  103. package/src/loader/sources/uri-source.ts +44 -0
  104. package/src/loader/validation-passes.ts +28 -24
  105. package/src/naming.ts +39 -7
  106. package/src/parser-core.ts +113 -43
  107. package/src/parser-json.ts +11 -2
  108. package/src/persistence/source/validate-source-roles.ts +2 -2
  109. package/src/semantic-diff.ts +48 -0
  110. package/src/shared/meta-data.ts +28 -0
  111. package/src/source.ts +61 -0
  112. package/src/subtype-rules.ts +1 -1
  113. package/src/super-resolve.ts +3 -1
  114. package/src/core/file-meta-data-loader.ts +0 -89
@@ -1,8 +1,13 @@
1
1
  import type { MetaData } from "../shared/meta-data.js";
2
2
  import { MetaRoot } from "../shared/meta-root.js";
3
3
  import { TypeRegistry } from "../registry.js";
4
- import type { MetaDataSource } from "./meta-data-source.js";
4
+ import type { LoaderWarning } from "../source.js";
5
+ import type { MetaDataFormat, MetaDataSource } from "./meta-data-source.js";
5
6
  import type { ParseOptions, ParseResult } from "../parser-core.js";
7
+ type DirectoryFactoryOptions = {
8
+ exclude?: string[];
9
+ recurse?: boolean;
10
+ };
6
11
  /** Loader lifecycle state. Mirrors Java's MetaDataLoader phase enum. */
7
12
  export type LoadingState = "uninitialized" | "loading" | "loaded" | "error";
8
13
  export interface LoadOptions {
@@ -15,7 +20,13 @@ export interface LoadOptions {
15
20
  }
16
21
  export interface LoadResult {
17
22
  root: MetaRoot;
18
- warnings: string[];
23
+ /** Cross-port-aligned warning envelopes per ADR-0009.
24
+ * FR5a creates the channel; FR5c (overlay-merge duplicate detection)
25
+ * will be the first feature to populate it. Legacy string warnings
26
+ * collected during parse/validation are wrapped at the loader boundary
27
+ * with `code: "WARN_LEGACY"` and `source: { format: "code" }` so the
28
+ * channel always presents the envelope shape to consumers. */
29
+ warnings: LoaderWarning[];
19
30
  errors: Error[];
20
31
  }
21
32
  export declare class MetaDataLoader {
@@ -26,6 +37,27 @@ export declare class MetaDataLoader {
26
37
  private _root;
27
38
  constructor(opts?: LoadOptions);
28
39
  private static _defaultRegistry;
40
+ /**
41
+ * Load every supported file (`.json` / `.yaml` / `.yml`) under `dir` in
42
+ * deterministic ordinal-basename order. Recurses by default.
43
+ *
44
+ * Convenience for the typical "load a directory of metadata" path. The
45
+ * `DirectorySource` impl is loaded lazily to keep the package root
46
+ * browser-safe (the underlying source uses node:fs).
47
+ *
48
+ * A missing/unreadable directory is surfaced as a collected entry in
49
+ * `result.errors`; the loader returns a synthetic empty root rather than
50
+ * throwing — preserves the `meta export` CLI exit-code contract.
51
+ */
52
+ static fromDirectory(dir: string, opts?: DirectoryFactoryOptions & LoadOptions): Promise<LoadResult>;
53
+ /**
54
+ * Load each URI as a {@link UriSource}. Supports `file://`, `http://`,
55
+ * `https://` schemes. The source impl is loaded lazily to keep the package
56
+ * root browser-safe.
57
+ */
58
+ static fromUris(uris: string[], opts?: LoadOptions): Promise<LoadResult>;
59
+ /** Load a single in-memory string of the given format. */
60
+ static fromString(content: string, format: MetaDataFormat, opts?: LoadOptions): Promise<LoadResult>;
29
61
  /** Current loading state. */
30
62
  get state(): LoadingState;
31
63
  /**
@@ -65,12 +97,20 @@ export declare class MetaDataLoader {
65
97
  */
66
98
  childrenOfType(type: string): MetaData[];
67
99
  /**
68
- * Parse one source's raw content into a ParseResult. The base loader handles
69
- * JSON only; a non-JSON format throws. Subclasses override this seam to add
70
- * formats e.g. FileMetaDataLoader (in @metaobjectsdev/metadata/core) adds YAML.
71
- * This keeps the browser-safe base loader free of the YAML parser.
100
+ * Parse one source's raw content into a ParseResult. Dispatches on the
101
+ * source's declared `format` `"json"` runs the canonical JSON parser,
102
+ * `"yaml"` desugars the authoring YAML into canonical JSON via parseYaml.
103
+ * Cross-language consistent: the same format vocabulary is honored by the
104
+ * Java / C# / Python MetaDataLoaders.
105
+ *
106
+ * The YAML parser is loaded lazily so the browser-safe root entry never
107
+ * statically pulls in the `yaml` dependency — see the module-header comment.
108
+ * `parseYaml` is preloaded inside `load()` if any source declares YAML
109
+ * format so the call here can stay synchronous.
72
110
  */
73
111
  protected parseSource(content: string, source: MetaDataSource, parseOpts: ParseOptions): ParseResult;
112
+ private static _yamlParser;
113
+ private static _ensureYamlParser;
74
114
  /**
75
115
  * Load metadata from one or more MetaDataSource instances. Sources are read
76
116
  * in order; each source's content is parsed and merged into the accumulating
@@ -84,4 +124,5 @@ export declare class MetaDataLoader {
84
124
  */
85
125
  load(sources: MetaDataSource[]): Promise<LoadResult>;
86
126
  }
127
+ export {};
87
128
  //# sourceMappingURL=meta-data-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"meta-data-loader.d.ts","sourceRoot":"","sources":["../../src/loader/meta-data-loader.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAU,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAWtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMnE,wEAAwE;AACxE,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5E,MAAM,WAAW,WAAW;IAC1B,0GAA0G;IAC1G,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qEAAqE;IACrE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAcD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAElC,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,KAAK,CAAuB;gBAExB,IAAI,CAAC,EAAE,WAAW;IAM9B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAQ/B,6BAA6B;IAC7B,IAAI,KAAK,IAAI,YAAY,CAExB;IAED;;;;;;;OAOG;IACH,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED;;;;OAIG;IACH,IAAI,IAAI,IAAI,QAAQ,CAGnB;IAED;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAK9C;;;OAGG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAKnE;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE;IASxC;;;;;OAKG;IACH,SAAS,CAAC,WAAW,CACnB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,YAAY,GACtB,WAAW;IAcd;;;;;;;;;;OAUG;IACG,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;CAgI3D"}
1
+ {"version":3,"file":"meta-data-loader.d.ts","sourceRoot":"","sources":["../../src/loader/meta-data-loader.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAU,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAKtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAQlD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5E,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOnE,KAAK,uBAAuB,GAAG;IAC7B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAYF,wEAAwE;AACxE,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5E,MAAM,WAAW,WAAW;IAC1B,0GAA0G;IAC1G,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qEAAqE;IACrE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf;;;;;mEAK+D;IAC/D,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAcD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAElC,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,KAAK,CAAuB;gBAExB,IAAI,CAAC,EAAE,WAAW;IAM9B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAQ/B;;;;;;;;;;;OAWG;WACU,aAAa,CACxB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,uBAAuB,GAAG,WAAW,GAC3C,OAAO,CAAC,UAAU,CAAC;IA0BtB;;;;OAIG;WACU,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAM9E,0DAA0D;WAC7C,UAAU,CACrB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,EACtB,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,UAAU,CAAC;IAQtB,6BAA6B;IAC7B,IAAI,KAAK,IAAI,YAAY,CAExB;IAED;;;;;;;OAOG;IACH,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED;;;;OAIG;IACH,IAAI,IAAI,IAAI,QAAQ,CAGnB;IAED;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAK9C;;;OAGG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAKnE;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE;IASxC;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,WAAW,CACnB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,YAAY,GACtB,WAAW;IAuBd,OAAO,CAAC,MAAM,CAAC,WAAW,CAEZ;mBAEO,iBAAiB;IAUtC;;;;;;;;;;OAUG;IACG,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;CAmJ3D"}
@@ -12,12 +12,14 @@ import { coreProviders } from "../core-types.js";
12
12
  import { composeRegistry } from "../provider.js";
13
13
  import { TYPE_METADATA, SUBTYPE_ROOT } from "../shared/base-types.js";
14
14
  import { ParseError } from "../errors.js";
15
+ import { codeSource } from "../source.js";
15
16
  import { parseJson } from "../parser-json.js";
16
17
  import { validateDataGridSortFields, validateFilterableHasIndex, validateOriginPaths, validateDataGridFilterValues, validateFieldObjectStorage, validateTemplatePayloadRefs } from "./validation-passes.js";
17
18
  import { validateSourceRoles } from "../persistence/source/validate-source-roles.js";
18
19
  import { resolveDeferredSupers } from "../super-resolve.js";
19
20
  import { validateSubtypeRules } from "../subtype-rules.js";
20
21
  import { validateAttrSchema } from "../attr-schema-validate.js";
22
+ import { InMemoryStringSource } from "./meta-data-source.js";
21
23
  // ---------------------------------------------------------------------------
22
24
  // Synthetic empty root (used when all sources fail to parse)
23
25
  // ---------------------------------------------------------------------------
@@ -42,6 +44,60 @@ export class MetaDataLoader {
42
44
  return composeRegistry(coreProviders);
43
45
  }
44
46
  // ---------------------------------------------------------------------------
47
+ // Static factories — the 99% case (cross-language consistent)
48
+ // ---------------------------------------------------------------------------
49
+ /**
50
+ * Load every supported file (`.json` / `.yaml` / `.yml`) under `dir` in
51
+ * deterministic ordinal-basename order. Recurses by default.
52
+ *
53
+ * Convenience for the typical "load a directory of metadata" path. The
54
+ * `DirectorySource` impl is loaded lazily to keep the package root
55
+ * browser-safe (the underlying source uses node:fs).
56
+ *
57
+ * A missing/unreadable directory is surfaced as a collected entry in
58
+ * `result.errors`; the loader returns a synthetic empty root rather than
59
+ * throwing — preserves the `meta export` CLI exit-code contract.
60
+ */
61
+ static async fromDirectory(dir, opts) {
62
+ const { exclude, recurse, ...loaderOpts } = opts ?? {};
63
+ // Conditional spreads honor exactOptionalPropertyTypes — only forward keys
64
+ // when the caller supplied a value, so DirectorySource's own defaults apply.
65
+ const dirOpts = {
66
+ ...(exclude !== undefined && { exclude }),
67
+ ...(recurse !== undefined && { recurse }),
68
+ };
69
+ const { DirectorySource } = await import("./sources/directory-source.js");
70
+ const loader = new MetaDataLoader(loaderOpts);
71
+ try {
72
+ const sources = await new DirectorySource(dir, dirOpts).expand();
73
+ return loader.load(sources);
74
+ }
75
+ catch (err) {
76
+ // Match the pre-unification contract: a missing/unreadable directory is
77
+ // surfaced as a collected error on the LoadResult, not a throw. The
78
+ // pipeline still completes with a synthetic empty root.
79
+ const emptyResult = await loader.load([]);
80
+ const expandErr = err instanceof Error
81
+ ? err
82
+ : new Error(`MetaDataLoader.fromDirectory: ${String(err)}`);
83
+ return { ...emptyResult, errors: [expandErr, ...emptyResult.errors] };
84
+ }
85
+ }
86
+ /**
87
+ * Load each URI as a {@link UriSource}. Supports `file://`, `http://`,
88
+ * `https://` schemes. The source impl is loaded lazily to keep the package
89
+ * root browser-safe.
90
+ */
91
+ static async fromUris(uris, opts) {
92
+ const { UriSource } = await import("./sources/uri-source.js");
93
+ const sources = uris.map((u) => new UriSource(u));
94
+ return new MetaDataLoader(opts).load(sources);
95
+ }
96
+ /** Load a single in-memory string of the given format. */
97
+ static async fromString(content, format, opts) {
98
+ return new MetaDataLoader(opts).load([new InMemoryStringSource(content, { format })]);
99
+ }
100
+ // ---------------------------------------------------------------------------
45
101
  // Lifecycle
46
102
  // ---------------------------------------------------------------------------
47
103
  /** Current loading state. */
@@ -110,17 +166,41 @@ export class MetaDataLoader {
110
166
  // parseSource — overridable format dispatch seam
111
167
  // ---------------------------------------------------------------------------
112
168
  /**
113
- * Parse one source's raw content into a ParseResult. The base loader handles
114
- * JSON only; a non-JSON format throws. Subclasses override this seam to add
115
- * formats e.g. FileMetaDataLoader (in @metaobjectsdev/metadata/core) adds YAML.
116
- * This keeps the browser-safe base loader free of the YAML parser.
169
+ * Parse one source's raw content into a ParseResult. Dispatches on the
170
+ * source's declared `format` `"json"` runs the canonical JSON parser,
171
+ * `"yaml"` desugars the authoring YAML into canonical JSON via parseYaml.
172
+ * Cross-language consistent: the same format vocabulary is honored by the
173
+ * Java / C# / Python MetaDataLoaders.
174
+ *
175
+ * The YAML parser is loaded lazily so the browser-safe root entry never
176
+ * statically pulls in the `yaml` dependency — see the module-header comment.
177
+ * `parseYaml` is preloaded inside `load()` if any source declares YAML
178
+ * format so the call here can stay synchronous.
117
179
  */
118
180
  parseSource(content, source, parseOpts) {
119
181
  if (source.format === "json") {
120
182
  return parseJson(content, parseOpts);
121
183
  }
122
- throw new Error(`MetaDataLoader parses JSON only; format "${source.format}" for source ` +
123
- `"${source.id}" requires FileMetaDataLoader (from @metaobjectsdev/metadata/core)`);
184
+ if (source.format === "yaml") {
185
+ const fn = MetaDataLoader._yamlParser;
186
+ if (fn === undefined) {
187
+ throw new Error(`MetaDataLoader: YAML parser was not preloaded — this is an internal bug. ` +
188
+ `Source "${source.id}" declares format "yaml".`);
189
+ }
190
+ return fn(content, parseOpts);
191
+ }
192
+ throw new Error(`MetaDataLoader: unsupported source format "${source.format}" ` +
193
+ `on source "${source.id}"`);
194
+ }
195
+ // Cached lazy YAML parser — populated by _ensureYamlParser() before
196
+ // parseSource is invoked on a YAML source. Module-level cache (one import
197
+ // per process) keeps the per-load cost negligible.
198
+ static _yamlParser;
199
+ static async _ensureYamlParser() {
200
+ if (MetaDataLoader._yamlParser !== undefined)
201
+ return;
202
+ const mod = await import("../core/parser-yaml.js");
203
+ MetaDataLoader._yamlParser = mod.parseYaml;
124
204
  }
125
205
  // ---------------------------------------------------------------------------
126
206
  // load — async pipeline over MetaDataSource[]
@@ -145,6 +225,13 @@ export class MetaDataLoader {
145
225
  this._state = "loading";
146
226
  const warnings = [];
147
227
  const errors = [];
228
+ // Pre-load the YAML parser via dynamic import if any source declares
229
+ // YAML format. This keeps `parseSource` synchronous and the package root
230
+ // (src/index.ts) browser-safe — yaml is never statically imported from a
231
+ // file reachable from the package entry. See `_ensureYamlParser`.
232
+ if (sources.some((s) => s.format === "yaml")) {
233
+ await MetaDataLoader._ensureYamlParser();
234
+ }
148
235
  let root;
149
236
  // Parse all sources with super resolution DEFERRED so cross-file super
150
237
  // refs work — one source may declare a super target that's defined in a
@@ -189,7 +276,7 @@ export class MetaDataLoader {
189
276
  if (root !== undefined) {
190
277
  const failures = resolveDeferredSupers(root);
191
278
  for (const failure of failures) {
192
- errors.push(new ParseError(`the SuperClass '${failure.ref}' does not exist (referenced by ${failure.nodeFqn})`, { code: "ERR_UNRESOLVED_SUPER" }));
279
+ errors.push(new ParseError(`the SuperClass '${failure.ref}' does not exist (referenced by ${failure.nodeFqn})`, { code: "ERR_UNRESOLVED_SUPER", source: failure.source }));
193
280
  }
194
281
  // Third pass: subtype rule validation (entity should have primary identity,
195
282
  // value must not have one).
@@ -237,7 +324,18 @@ export class MetaDataLoader {
237
324
  root.freeze();
238
325
  }
239
326
  this._root = root;
240
- return { root, warnings, errors };
327
+ // Wrap legacy string warnings collected from parser-core / validators in
328
+ // LoaderWarning envelopes at the loader boundary. The parser/validator
329
+ // surface keeps its `string[]` shape internally (parser-core is shared
330
+ // with parseJson() / parseYaml() callers who consume string warnings
331
+ // directly). FR5c will retire WARN_LEGACY by routing the duplicate-
332
+ // declaration site through a proper envelope-shaped emit helper.
333
+ const envelopeWarnings = warnings.map((msg) => ({
334
+ code: "WARN_LEGACY",
335
+ message: msg,
336
+ source: codeSource("MetaDataLoader"),
337
+ }));
338
+ return { root, warnings: envelopeWarnings, errors };
241
339
  }
242
340
  }
243
341
  //# sourceMappingURL=meta-data-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"meta-data-loader.js","sourceRoot":"","sources":["../../src/loader/meta-data-loader.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,0EAA0E;AAC1E,+EAA+E;AAC/E,8DAA8D;AAC9D,EAAE;AACF,kFAAkF;AAClF,mEAAmE;AAGnE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC5M,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AA0BhE,8EAA8E;AAC9E,6DAA6D;AAC7D,8EAA8E;AAE9E,SAAS,iBAAiB;IACxB,OAAO,IAAI,QAAQ,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,MAAM,OAAO,cAAc;IACR,SAAS,CAAe;IACxB,OAAO,CAAU;IACjB,OAAO,CAAU;IAE1B,MAAM,GAAiB,eAAe,CAAC;IACvC,KAAK,CAAuB;IAEpC,YAAY,IAAkB;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,QAAQ,IAAI,cAAc,CAAC,gBAAgB,EAAE,CAAC;QACrE,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,CAAC,eAAe;QACtD,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,CAAE,gBAAgB;IACzD,CAAC;IAEO,MAAM,CAAC,gBAAgB;QAC7B,OAAO,eAAe,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;IAED,8EAA8E;IAC9E,YAAY;IACZ,8EAA8E;IAE9E,6BAA6B;IAC7B,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,IAAI,IAAI;QACN,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,KAAM,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACK,kBAAkB;QACxB,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CACb,sEAAsE,IAAI,CAAC,MAAM,MAAM;gBACvF,oBAAoB,CACrB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,2EAA2E;IAC3E,8EAA8E;IAE9E;;;OAGG;IACH,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,KAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,IAAY,EAAE,IAAY;QAC1C,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,KAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,IAAY;QACzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,KAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,8EAA8E;IAC9E,iDAAiD;IACjD,8EAA8E;IAE9E;;;;;OAKG;IACO,WAAW,CACnB,OAAe,EACf,MAAsB,EACtB,SAAuB;QAEvB,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,IAAI,KAAK,CACb,4CAA4C,MAAM,CAAC,MAAM,eAAe;YACtE,IAAI,MAAM,CAAC,EAAE,oEAAoE,CACpF,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,8CAA8C;IAC9C,8EAA8E;IAE9E;;;;;;;;;;OAUG;IACH,KAAK,CAAC,IAAI,CAAC,OAAyB;QAClC,wEAAwE;QACxE,6DAA6D;QAC7D,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CACb,4GAA4G,CAC7G,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,IAAI,IAA0B,CAAC;QAE/B,uEAAuE;QACvE,wEAAwE;QACxE,sEAAsE;QACtE,4CAA4C;QAC5C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,OAAe,CAAC;YACpB,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAChC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CACT,GAAG,YAAY,KAAK;oBAClB,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CACtE,CAAC;gBACF,SAAS;YACX,CAAC;YAED,2EAA2E;YAC3E,2CAA2C;YAC3C,MAAM,SAAS,GAAoC;gBACjD,QAAQ,EAAE,IAAI,CAAC,SAAS;gBACxB,MAAM,EAAE,IAAI,CAAC,OAAO;gBACpB,oBAAoB,EAAE,IAAI;gBAC1B,UAAU,EAAE,MAAM,CAAC,EAAE;aACtB,CAAC;YACF,IAAI,IAAI,KAAK,SAAS;gBAAE,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;YAElD,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;gBACjE,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;gBACnC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;YAC1B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CACT,GAAG,YAAY,KAAK;oBAClB,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAC/D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,uEAAuE;QACvE,sEAAsE;QACtE,mEAAmE;QACnE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC7C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CACT,IAAI,UAAU,CACZ,mBAAmB,OAAO,CAAC,GAAG,mCAAmC,OAAO,CAAC,OAAO,GAAG,EACnF,EAAE,IAAI,EAAE,sBAAsB,EAAE,CACjC,CACF,CAAC;YACJ,CAAC;YAED,4EAA4E;YAC5E,4BAA4B;YAC5B,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;YAEtC,uEAAuE;YACvE,MAAM,CAAC,IAAI,CAAC,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC;YAEjD,uDAAuD;YACvD,QAAQ,CAAC,IAAI,CAAC,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC;YAEnD,oEAAoE;YACpE,gDAAgD;YAChD,MAAM,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;YAE1C,wFAAwF;YACxF,MAAM,CAAC,IAAI,CAAC,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC;YAEnD,kEAAkE;YAClE,6DAA6D;YAC7D,MAAM,CAAC,IAAI,CAAC,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;YAElD,oEAAoE;YACpE,uEAAuE;YACvE,mEAAmE;YACnE,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACxC,QAAQ,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAE5C,sEAAsE;YACtE,6DAA6D;YAC7D,MAAM,CAAC,IAAI,CAAC,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC;YAEjD,0EAA0E;YAC1E,iEAAiE;YACjE,gCAAgC;YAChC,MAAM,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,CAAC;QAED,sEAAsE;QACtE,2EAA2E;QAC3E,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,GAAG,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACzB,CAAC;QAED,wEAAwE;QACxE,kDAAkD;QAClD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACpC,CAAC;CACF"}
1
+ {"version":3,"file":"meta-data-loader.js","sourceRoot":"","sources":["../../src/loader/meta-data-loader.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,0EAA0E;AAC1E,+EAA+E;AAC/E,8DAA8D;AAC9D,EAAE;AACF,kFAAkF;AAClF,mEAAmE;AAGnE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC5M,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AA+C7D,8EAA8E;AAC9E,6DAA6D;AAC7D,8EAA8E;AAE9E,SAAS,iBAAiB;IACxB,OAAO,IAAI,QAAQ,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,MAAM,OAAO,cAAc;IACR,SAAS,CAAe;IACxB,OAAO,CAAU;IACjB,OAAO,CAAU;IAE1B,MAAM,GAAiB,eAAe,CAAC;IACvC,KAAK,CAAuB;IAEpC,YAAY,IAAkB;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,QAAQ,IAAI,cAAc,CAAC,gBAAgB,EAAE,CAAC;QACrE,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,CAAC,eAAe;QACtD,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,CAAE,gBAAgB;IACzD,CAAC;IAEO,MAAM,CAAC,gBAAgB;QAC7B,OAAO,eAAe,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;IAED,8EAA8E;IAC9E,8DAA8D;IAC9D,8EAA8E;IAE9E;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,KAAK,CAAC,aAAa,CACxB,GAAW,EACX,IAA4C;QAE5C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC;QACvD,2EAA2E;QAC3E,6EAA6E;QAC7E,MAAM,OAAO,GAA4B;YACvC,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC;YACzC,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC;SAC1C,CAAC;QACF,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;YACjE,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,wEAAwE;YACxE,oEAAoE;YACpE,wDAAwD;YACxD,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,SAAS,GACb,GAAG,YAAY,KAAK;gBAClB,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,IAAI,KAAK,CAAC,iCAAiC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChE,OAAO,EAAE,GAAG,WAAW,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACxE,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAc,EAAE,IAAkB;QACtD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,0DAA0D;IAC1D,MAAM,CAAC,KAAK,CAAC,UAAU,CACrB,OAAe,EACf,MAAsB,EACtB,IAAkB;QAElB,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,oBAAoB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,8EAA8E;IAC9E,YAAY;IACZ,8EAA8E;IAE9E,6BAA6B;IAC7B,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,IAAI,IAAI;QACN,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,KAAM,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACK,kBAAkB;QACxB,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CACb,sEAAsE,IAAI,CAAC,MAAM,MAAM;gBACvF,oBAAoB,CACrB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,2EAA2E;IAC3E,8EAA8E;IAE9E;;;OAGG;IACH,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,KAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,IAAY,EAAE,IAAY;QAC1C,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,KAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,IAAY;QACzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,KAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,8EAA8E;IAC9E,iDAAiD;IACjD,8EAA8E;IAE9E;;;;;;;;;;;OAWG;IACO,WAAW,CACnB,OAAe,EACf,MAAsB,EACtB,SAAuB;QAEvB,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC7B,MAAM,EAAE,GAAG,cAAc,CAAC,WAAW,CAAC;YACtC,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CACb,2EAA2E;oBACzE,WAAW,MAAM,CAAC,EAAE,2BAA2B,CAClD,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,IAAI,KAAK,CACb,8CAA8C,MAAM,CAAC,MAAM,IAAI;YAC7D,cAAc,MAAM,CAAC,EAAE,GAAG,CAC7B,CAAC;IACJ,CAAC;IAED,oEAAoE;IACpE,0EAA0E;IAC1E,mDAAmD;IAC3C,MAAM,CAAC,WAAW,CAEZ;IAEN,MAAM,CAAC,KAAK,CAAC,iBAAiB;QACpC,IAAI,cAAc,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO;QACrD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QACnD,cAAc,CAAC,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC;IAC7C,CAAC;IAED,8EAA8E;IAC9E,8CAA8C;IAC9C,8EAA8E;IAE9E;;;;;;;;;;OAUG;IACH,KAAK,CAAC,IAAI,CAAC,OAAyB;QAClC,wEAAwE;QACxE,6DAA6D;QAC7D,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CACb,4GAA4G,CAC7G,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,qEAAqE;QACrE,yEAAyE;QACzE,yEAAyE;QACzE,kEAAkE;QAClE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,CAAC;YAC7C,MAAM,cAAc,CAAC,iBAAiB,EAAE,CAAC;QAC3C,CAAC;QAED,IAAI,IAA0B,CAAC;QAE/B,uEAAuE;QACvE,wEAAwE;QACxE,sEAAsE;QACtE,4CAA4C;QAC5C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,OAAe,CAAC;YACpB,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAChC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CACT,GAAG,YAAY,KAAK;oBAClB,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CACtE,CAAC;gBACF,SAAS;YACX,CAAC;YAED,2EAA2E;YAC3E,2CAA2C;YAC3C,MAAM,SAAS,GAAoC;gBACjD,QAAQ,EAAE,IAAI,CAAC,SAAS;gBACxB,MAAM,EAAE,IAAI,CAAC,OAAO;gBACpB,oBAAoB,EAAE,IAAI;gBAC1B,UAAU,EAAE,MAAM,CAAC,EAAE;aACtB,CAAC;YACF,IAAI,IAAI,KAAK,SAAS;gBAAE,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;YAElD,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;gBACjE,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;gBACnC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;YAC1B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CACT,GAAG,YAAY,KAAK;oBAClB,CAAC,CAAC,GAAG;oBACL,CAAC,CAAC,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAC/D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,uEAAuE;QACvE,sEAAsE;QACtE,mEAAmE;QACnE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC7C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CACT,IAAI,UAAU,CACZ,mBAAmB,OAAO,CAAC,GAAG,mCAAmC,OAAO,CAAC,OAAO,GAAG,EACnF,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CACzD,CACF,CAAC;YACJ,CAAC;YAED,4EAA4E;YAC5E,4BAA4B;YAC5B,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;YAEtC,uEAAuE;YACvE,MAAM,CAAC,IAAI,CAAC,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC;YAEjD,uDAAuD;YACvD,QAAQ,CAAC,IAAI,CAAC,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC;YAEnD,oEAAoE;YACpE,gDAAgD;YAChD,MAAM,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;YAE1C,wFAAwF;YACxF,MAAM,CAAC,IAAI,CAAC,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC;YAEnD,kEAAkE;YAClE,6DAA6D;YAC7D,MAAM,CAAC,IAAI,CAAC,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;YAElD,oEAAoE;YACpE,uEAAuE;YACvE,mEAAmE;YACnE,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACxC,QAAQ,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAE5C,sEAAsE;YACtE,6DAA6D;YAC7D,MAAM,CAAC,IAAI,CAAC,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC;YAEjD,0EAA0E;YAC1E,iEAAiE;YACjE,gCAAgC;YAChC,MAAM,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,CAAC;QAED,sEAAsE;QACtE,2EAA2E;QAC3E,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,GAAG,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACzB,CAAC;QAED,wEAAwE;QACxE,kDAAkD;QAClD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,yEAAyE;QACzE,uEAAuE;QACvE,uEAAuE;QACvE,qEAAqE;QACrE,oEAAoE;QACpE,iEAAiE;QACjE,MAAM,gBAAgB,GAAoB,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC/D,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,GAAG;YACZ,MAAM,EAAE,UAAU,CAAC,gBAAgB,CAAC;SACrC,CAAC,CAAC,CAAC;QACJ,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IACtD,CAAC;CACF"}
@@ -9,8 +9,12 @@ export interface MetaDataSource {
9
9
  /** Resolve the raw content. May perform I/O. */
10
10
  read(): Promise<string>;
11
11
  }
12
- /** A metadata source backed by an in-memory string. */
13
- export declare class InMemorySource implements MetaDataSource {
12
+ /**
13
+ * A metadata source backed by an in-memory string. The default identity is
14
+ * `"<inline>"` — matches the cross-language convention shared by the Java /
15
+ * C# / Python ports.
16
+ */
17
+ export declare class InMemoryStringSource implements MetaDataSource {
14
18
  readonly id: string;
15
19
  readonly format: MetaDataFormat;
16
20
  private readonly _content;
@@ -1 +1 @@
1
- {"version":3,"file":"meta-data-source.d.ts","sourceRoot":"","sources":["../../src/loader/meta-data-source.ts"],"names":[],"mappings":"AAMA,wDAAwD;AACxD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,CAAC;AAE7C,sCAAsC;AACtC,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,gDAAgD;IAChD,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB;AAED,uDAAuD;AACvD,qBAAa,cAAe,YAAW,cAAc;IACnD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,cAAc,CAAA;KAAE;IAM5E,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;CAGxB"}
1
+ {"version":3,"file":"meta-data-source.d.ts","sourceRoot":"","sources":["../../src/loader/meta-data-source.ts"],"names":[],"mappings":"AAMA,wDAAwD;AACxD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,CAAC;AAE7C,sCAAsC;AACtC,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,gDAAgD;IAChD,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,YAAW,cAAc;IACzD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,cAAc,CAAA;KAAE;IAM5E,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;CAGxB"}
@@ -1,16 +1,20 @@
1
1
  // MetaDataSource — the raw-document unit consumed by the loader pipeline.
2
2
  //
3
- // A loader (FileMetaDataLoader, later UrlMetaDataLoader) discovers/acquires
4
- // sources; the MetaDataLoader pipeline calls read() on each. read() is async
5
- // so file/URL sources can do I/O; InMemorySource resolves immediately.
6
- /** A metadata source backed by an in-memory string. */
7
- export class InMemorySource {
3
+ // A loader (MetaDataLoader, fed by FileSource/DirectorySource/UriSource/
4
+ // InMemoryStringSource) parses each source's content. read() is async so file
5
+ // and URI sources can do I/O; InMemoryStringSource resolves immediately.
6
+ /**
7
+ * A metadata source backed by an in-memory string. The default identity is
8
+ * `"<inline>"` — matches the cross-language convention shared by the Java /
9
+ * C# / Python ports.
10
+ */
11
+ export class InMemoryStringSource {
8
12
  id;
9
13
  format;
10
14
  _content;
11
15
  constructor(content, opts) {
12
16
  this._content = content;
13
- this.id = opts?.id ?? "<in-memory>";
17
+ this.id = opts?.id ?? "<inline>";
14
18
  this.format = opts?.format ?? "json";
15
19
  }
16
20
  read() {
@@ -1 +1 @@
1
- {"version":3,"file":"meta-data-source.js","sourceRoot":"","sources":["../../src/loader/meta-data-source.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,EAAE;AACF,4EAA4E;AAC5E,6EAA6E;AAC7E,uEAAuE;AAevE,uDAAuD;AACvD,MAAM,OAAO,cAAc;IAChB,EAAE,CAAS;IACX,MAAM,CAAiB;IACf,QAAQ,CAAS;IAElC,YAAY,OAAe,EAAE,IAA+C;QAC1E,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,aAAa,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,MAAM,CAAC;IACvC,CAAC;IAED,IAAI;QACF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;CACF"}
1
+ {"version":3,"file":"meta-data-source.js","sourceRoot":"","sources":["../../src/loader/meta-data-source.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,EAAE;AACF,yEAAyE;AACzE,8EAA8E;AAC9E,yEAAyE;AAezE;;;;GAIG;AACH,MAAM,OAAO,oBAAoB;IACtB,EAAE,CAAS;IACX,MAAM,CAAiB;IACf,QAAQ,CAAS;IAElC,YAAY,OAAe,EAAE,IAA+C;QAC1E,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,UAAU,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,MAAM,CAAC;IACvC,CAAC;IAED,IAAI;QACF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import type { LoadOptions, LoadResult } from "./meta-data-loader.js";
2
+ import type { MetaDataFormat } from "./meta-data-source.js";
3
+ export declare function loadDirectory(dir: string, opts?: {
4
+ exclude?: string[];
5
+ recurse?: boolean;
6
+ } & LoadOptions): Promise<LoadResult>;
7
+ export declare function loadUris(uris: string[], opts?: LoadOptions): Promise<LoadResult>;
8
+ export declare function loadString(content: string, format: MetaDataFormat, opts?: LoadOptions): Promise<LoadResult>;
9
+ //# sourceMappingURL=shortcuts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shortcuts.d.ts","sourceRoot":"","sources":["../../src/loader/shortcuts.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,WAAW,GAC7D,OAAO,CAAC,UAAU,CAAC,CAErB;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAEhF;AAED,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,EACtB,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,UAAU,CAAC,CAErB"}
@@ -0,0 +1,19 @@
1
+ // Module-level loader shortcuts — one-liners that delegate to the
2
+ // MetaDataLoader.from* static factories. Per the cross-language convention:
3
+ // TS and Python expose both class statics AND module-level shortcuts; Java
4
+ // and C# stay class-only.
5
+ //
6
+ // These functions do not statically import any node:fs- or yaml-using file;
7
+ // MetaDataLoader.from* loads the underlying source impls via dynamic import,
8
+ // preserving the package root's browser-safety contract.
9
+ import { MetaDataLoader } from "./meta-data-loader.js";
10
+ export function loadDirectory(dir, opts) {
11
+ return MetaDataLoader.fromDirectory(dir, opts);
12
+ }
13
+ export function loadUris(uris, opts) {
14
+ return MetaDataLoader.fromUris(uris, opts);
15
+ }
16
+ export function loadString(content, format, opts) {
17
+ return MetaDataLoader.fromString(content, format, opts);
18
+ }
19
+ //# sourceMappingURL=shortcuts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shortcuts.js","sourceRoot":"","sources":["../../src/loader/shortcuts.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,4EAA4E;AAC5E,2EAA2E;AAC3E,0BAA0B;AAC1B,EAAE;AACF,4EAA4E;AAC5E,6EAA6E;AAC7E,yDAAyD;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAIvD,MAAM,UAAU,aAAa,CAC3B,GAAW,EACX,IAA8D;IAE9D,OAAO,cAAc,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAc,EAAE,IAAkB;IACzD,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,OAAe,EACf,MAAsB,EACtB,IAAkB;IAElB,OAAO,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { MetaDataSource } from "../meta-data-source.js";
2
+ export interface DirectoryOptions {
3
+ /** Filename patterns to exclude. Supports literal match and `*` / `**` globs. */
4
+ exclude?: string[];
5
+ /** Recurse into subdirectories. Default: true. */
6
+ recurse?: boolean;
7
+ }
8
+ export declare class DirectorySource {
9
+ readonly directory: string;
10
+ readonly opts: DirectoryOptions;
11
+ constructor(directory: string, opts?: DirectoryOptions);
12
+ expand(): Promise<MetaDataSource[]>;
13
+ private collect;
14
+ }
15
+ //# sourceMappingURL=directory-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directory-source.d.ts","sourceRoot":"","sources":["../../../src/loader/sources/directory-source.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,kDAAkD;IAClD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAcD,qBAAa,eAAe;aAER,SAAS,EAAE,MAAM;aACjB,IAAI,EAAE,gBAAgB;gBADtB,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,gBAAqB;IAGvC,MAAM,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAyB3B,OAAO;CA2BtB"}
@@ -0,0 +1,80 @@
1
+ // DirectorySource — expands a directory into a sorted list of FileSource.
2
+ //
3
+ // Discovers .json / .yaml / .yml files (case-insensitive on extension).
4
+ // Recurses by default — matches Java/Python/C# DirectorySource behavior.
5
+ // Sort order is ordinal-by-basename so the overlay merge is deterministic
6
+ // across environments and language ports.
7
+ import { readdir, stat } from "node:fs/promises";
8
+ import { basename, extname, join } from "node:path";
9
+ import { FileSource } from "./file-source.js";
10
+ const SUPPORTED_EXTS = new Set([".json", ".yaml", ".yml"]);
11
+ /** Minimal glob matcher supporting `*` (any chars except `/`) and `**` (any chars). */
12
+ function matchSimpleGlob(pattern, value) {
13
+ const regexStr = pattern
14
+ .replace(/[.+^${}()|[\]\\]/g, "\\$&")
15
+ .replace(/\*\*/g, "::DOUBLESTAR::")
16
+ .replace(/\*/g, "[^/]*")
17
+ .replace(/::DOUBLESTAR::/g, ".*");
18
+ return new RegExp(`^${regexStr}$`).test(value);
19
+ }
20
+ export class DirectorySource {
21
+ directory;
22
+ opts;
23
+ constructor(directory, opts = {}) {
24
+ this.directory = directory;
25
+ this.opts = opts;
26
+ }
27
+ async expand() {
28
+ const recurse = this.opts.recurse ?? true;
29
+ const exclude = this.opts.exclude ?? [];
30
+ const files = await this.collect(this.directory, recurse);
31
+ const filtered = [];
32
+ for (const p of files) {
33
+ if (!SUPPORTED_EXTS.has(extname(p).toLowerCase()))
34
+ continue;
35
+ const name = basename(p);
36
+ if (exclude.some((pat) => matchSimpleGlob(pat, name)))
37
+ continue;
38
+ filtered.push(p);
39
+ }
40
+ // Sort by basename (ordinal) for deterministic overlay order. The
41
+ // pre-unification FileMetaDataLoader sorted readdir entries (basenames)
42
+ // for the same reason — that contract carries forward here.
43
+ filtered.sort((a, b) => {
44
+ const an = basename(a);
45
+ const bn = basename(b);
46
+ return an < bn ? -1 : an > bn ? 1 : 0;
47
+ });
48
+ return filtered.map((p) => new FileSource(p));
49
+ }
50
+ async collect(dir, recurse) {
51
+ let entries;
52
+ try {
53
+ entries = await readdir(dir);
54
+ }
55
+ catch (err) {
56
+ throw new Error(`DirectorySource: cannot read ${dir}: ${err.message}`);
57
+ }
58
+ const out = [];
59
+ for (const entry of entries) {
60
+ const full = join(dir, entry);
61
+ let s;
62
+ try {
63
+ s = await stat(full);
64
+ }
65
+ catch {
66
+ // Entry vanished between readdir and stat (TOCTOU) or is not accessible.
67
+ continue;
68
+ }
69
+ if (s.isDirectory()) {
70
+ if (recurse)
71
+ out.push(...(await this.collect(full, recurse)));
72
+ }
73
+ else if (s.isFile()) {
74
+ out.push(full);
75
+ }
76
+ }
77
+ return out;
78
+ }
79
+ }
80
+ //# sourceMappingURL=directory-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directory-source.js","sourceRoot":"","sources":["../../../src/loader/sources/directory-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { MetaDataFormat, MetaDataSource } from "../meta-data-source.js";
2
+ /** A metadata source backed by a file on disk. */
3
+ export declare class FileSource implements MetaDataSource {
4
+ readonly id: string;
5
+ readonly format: MetaDataFormat;
6
+ private readonly _path;
7
+ constructor(path: string);
8
+ /** The absolute/relative path this source reads from. */
9
+ get path(): string;
10
+ read(): Promise<string>;
11
+ }
12
+ //# sourceMappingURL=file-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-source.d.ts","sourceRoot":"","sources":["../../../src/loader/sources/file-source.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAwB7E,kDAAkD;AAClD,qBAAa,UAAW,YAAW,cAAc;IAC/C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,IAAI,EAAE,MAAM;IAOxB,yDAAyD;IACzD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;CAI9B"}
@@ -0,0 +1,46 @@
1
+ // FileSource — a MetaDataSource backed by a file on disk. Server-side only
2
+ // (touches node:fs); lives under src/loader/sources/ alongside the other
3
+ // MetaDataSource implementations.
4
+ import { basename, extname } from "node:path";
5
+ /** Infer a source format from a file extension. `.yaml`/`.yml` → "yaml";
6
+ * everything else (including `.json`) → "json", the canonical default. */
7
+ function inferFormat(path) {
8
+ const ext = extname(path).toLowerCase();
9
+ return ext === ".yaml" || ext === ".yml" ? "yaml" : "json";
10
+ }
11
+ // File reader — Bun-first (Bun.file().text()) with a Node fallback
12
+ // (node:fs/promises.readFile). Matches CLAUDE.md's Bun-first / Node-compatible policy.
13
+ let _readText;
14
+ async function getReadText() {
15
+ if (_readText !== undefined)
16
+ return _readText;
17
+ if (typeof Bun !== "undefined") {
18
+ _readText = (p) => Bun.file(p).text();
19
+ }
20
+ else {
21
+ const { readFile } = await import("node:fs/promises");
22
+ _readText = (p) => readFile(p, "utf-8");
23
+ }
24
+ return _readText;
25
+ }
26
+ /** A metadata source backed by a file on disk. */
27
+ export class FileSource {
28
+ id;
29
+ format;
30
+ _path;
31
+ constructor(path) {
32
+ this._path = path;
33
+ // basename() for readable error messages; cross-platform (handles both / and \). Full path retained for read().
34
+ this.id = basename(path);
35
+ this.format = inferFormat(path);
36
+ }
37
+ /** The absolute/relative path this source reads from. */
38
+ get path() {
39
+ return this._path;
40
+ }
41
+ async read() {
42
+ const readText = await getReadText();
43
+ return readText(this._path);
44
+ }
45
+ }
46
+ //# sourceMappingURL=file-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-source.js","sourceRoot":"","sources":["../../../src/loader/sources/file-source.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,yEAAyE;AACzE,kCAAkC;AAElC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG9C;2EAC2E;AAC3E,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACxC,OAAO,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7D,CAAC;AAED,mEAAmE;AACnE,uFAAuF;AACvF,IAAI,SAA0D,CAAC;AAE/D,KAAK,UAAU,WAAW;IACxB,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE,CAAC;QAC/B,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACtD,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,kDAAkD;AAClD,MAAM,OAAO,UAAU;IACZ,EAAE,CAAS;IACX,MAAM,CAAiB;IACf,KAAK,CAAS;IAE/B,YAAY,IAAY;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,gHAAgH;QAChH,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,yDAAyD;IACzD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;QACrC,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export { FileSource } from "./file-source.js";
2
+ export { DirectorySource } from "./directory-source.js";
3
+ export type { DirectoryOptions } from "./directory-source.js";
4
+ export { UriSource } from "./uri-source.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/loader/sources/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,5 @@
1
+ // Barrel re-export for the MetaDataSource implementations.
2
+ export { FileSource } from "./file-source.js";
3
+ export { DirectorySource } from "./directory-source.js";
4
+ export { UriSource } from "./uri-source.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/loader/sources/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { MetaDataFormat, MetaDataSource } from "../meta-data-source.js";
2
+ export declare class UriSource implements MetaDataSource {
3
+ readonly uri: string;
4
+ readonly id: string;
5
+ readonly format: MetaDataFormat;
6
+ constructor(uri: string, format?: MetaDataFormat);
7
+ read(): Promise<string>;
8
+ }
9
+ //# sourceMappingURL=uri-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uri-source.d.ts","sourceRoot":"","sources":["../../../src/loader/sources/uri-source.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAe7E,qBAAa,SAAU,YAAW,cAAc;aAIlB,GAAG,EAAE,MAAM;IAHvC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;gBAEJ,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc;IAK1D,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;CAa9B"}