@mxpicture/build-api 0.3.3 → 0.3.5

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.
@@ -1,4 +1,4 @@
1
- import type { ExportNodeTyped, ExportsCommonExcludes, ExportsRequested, PackageAPI } from "../types/types.exports.js";
1
+ import type { ExportNodeTyped, ExportsCommonExcludes, ExportsRequestedItem, PackageAPI } from "../types/types.exports.js";
2
2
  import { ExportsFinderBag } from "./ExportsFinderBag.js";
3
3
  /**
4
4
  * Lookup index for typed export nodes across multiple packages.
@@ -9,7 +9,7 @@ import { ExportsFinderBag } from "./ExportsFinderBag.js";
9
9
  */
10
10
  export declare class ExportsFinder {
11
11
  readonly bag: ExportsFinderBag;
12
- protected _predictedBag: ExportsFinderBag | null;
12
+ readonly predictedBag: ExportsFinderBag;
13
13
  protected _requesteds: string[];
14
14
  /**
15
15
  * Build a finder from an array of {@link PackageAPI} objects.
@@ -23,19 +23,19 @@ export declare class ExportsFinder {
23
23
  * @param nodes - Map of export names to typed nodes.
24
24
  */
25
25
  static createByNodes(nodes: Map<string, ExportNodeTyped> | ExportsFinderBag, predicted?: Map<string, ExportNodeTyped> | ExportsFinderBag | null): ExportsFinder;
26
- protected constructor(bag: ExportsFinderBag);
26
+ protected constructor(bag: ExportsFinderBag, predictedBag?: ExportsFinderBag);
27
27
  /**
28
28
  * Mark an export as requested.
29
29
  *
30
30
  * @param name - Export name to flag.
31
31
  */
32
32
  request(name: string): void;
33
- protected validateRequested(req: ExportsRequested): ExportsRequested;
34
- activatePrediction(bag?: ExportsFinderBag): void;
33
+ protected validateRequesteds(...reqs: ExportsRequestedItem[]): ExportsRequestedItem[];
35
34
  addPrediction(node: ExportNodeTyped): void;
36
- validate(): void;
37
- get requesteds(): ExportsRequested[];
38
- requested(name: string, isValid?: boolean): ExportsRequested | null;
35
+ validate(requesteds?: ExportsRequestedItem[]): void;
36
+ get requesteds(): ExportsRequestedItem[];
37
+ get requestedNodes(): ExportNodeTyped[];
38
+ requested(name: string, isValid?: boolean): ExportsRequestedItem | null;
39
39
  /**
40
40
  * Create a deep copy of this finder.
41
41
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ExportsFinder.d.ts","sourceRoot":"","sources":["../../src/exp/ExportsFinder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,UAAU,EACX,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,SAAgB,GAAG,EAAE,gBAAgB,CAAC;IACtC,SAAS,CAAC,aAAa,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IACxD,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,CAAM;IAErC;;;;OAIG;WACW,YAAY,CACxB,IAAI,EAAE,UAAU,EAAE,EAClB,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,aAAa;IAMhB;;;;OAIG;WACW,aAAa,CACzB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,gBAAgB,EACtD,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,gBAAgB,GAAG,IAAI,GACjE,aAAa;IAgBhB,SAAS,aAAa,GAAG,EAAE,gBAAgB;IAI3C;;;;OAIG;IACI,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,GAAG,gBAAgB;IAI7D,kBAAkB,CAAC,GAAG,CAAC,EAAE,gBAAgB;IAIzC,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAK1C,QAAQ,IAAI,IAAI;IAkBvB,IAAW,UAAU,IAAI,gBAAgB,EAAE,CAE1C;IAEM,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI;IAQ1E;;;;OAIG;IACI,IAAI,IAAI,aAAa;CAG7B"}
1
+ {"version":3,"file":"ExportsFinder.d.ts","sourceRoot":"","sources":["../../src/exp/ExportsFinder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,UAAU,EACX,MAAM,2BAA2B,CAAC;AAMnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,SAAgB,GAAG,EAAE,gBAAgB,CAAC;IACtC,SAAgB,YAAY,EAAE,gBAAgB,CAAC;IAC/C,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,CAAM;IAErC;;;;OAIG;WACW,YAAY,CACxB,IAAI,EAAE,UAAU,EAAE,EAClB,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,aAAa;IAMhB;;;;OAIG;WACW,aAAa,CACzB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,gBAAgB,EACtD,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,gBAAgB,GAAG,IAAI,GACjE,aAAa;IAahB,SAAS,aACP,GAAG,EAAE,gBAAgB,EACrB,YAAY,CAAC,EAAE,gBAAgB;IAMjC;;;;OAIG;IACI,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC,SAAS,CAAC,kBAAkB,CAC1B,GAAG,IAAI,EAAE,oBAAoB,EAAE,GAC9B,oBAAoB,EAAE;IAIlB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAI1C,QAAQ,CAAC,UAAU,CAAC,EAAE,oBAAoB,EAAE,GAAG,IAAI;IAoB1D,IAAW,UAAU,IAAI,oBAAoB,EAAE,CAE9C;IAED,IAAW,cAAc,IAAI,eAAe,EAAE,CAE7C;IAEM,SAAS,CACd,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,OAAO,GAChB,oBAAoB,GAAG,IAAI;IAQ9B;;;;OAIG;IACI,IAAI,IAAI,aAAa;CAG7B"}
@@ -1,5 +1,5 @@
1
+ import { mapRequestedsToNodes, validateRequesteds, } from "./exports.requested.js";
1
2
  import { mapPackagesToTyped } from "./exports.package.js";
2
- import { validateRequested } from "./exports.requested.js";
3
3
  import { ExportsFinderBag } from "./ExportsFinderBag.js";
4
4
  /**
5
5
  * Lookup index for typed export nodes across multiple packages.
@@ -10,7 +10,7 @@ import { ExportsFinderBag } from "./ExportsFinderBag.js";
10
10
  */
11
11
  export class ExportsFinder {
12
12
  bag;
13
- _predictedBag = null;
13
+ predictedBag;
14
14
  _requesteds = [];
15
15
  /**
16
16
  * Build a finder from an array of {@link PackageAPI} objects.
@@ -28,15 +28,14 @@ export class ExportsFinder {
28
28
  static createByNodes(nodes, predicted) {
29
29
  const finder = new ExportsFinder(nodes instanceof ExportsFinderBag
30
30
  ? nodes
31
- : new ExportsFinderBag(structuredClone(nodes)));
32
- if (predicted)
33
- finder.activatePrediction(predicted instanceof ExportsFinderBag
34
- ? predicted
35
- : new ExportsFinderBag(structuredClone(predicted)));
31
+ : new ExportsFinderBag(structuredClone(nodes)), predicted instanceof ExportsFinderBag
32
+ ? predicted
33
+ : new ExportsFinderBag(structuredClone(predicted)));
36
34
  return finder;
37
35
  }
38
- constructor(bag) {
36
+ constructor(bag, predictedBag) {
39
37
  this.bag = bag;
38
+ this.predictedBag = predictedBag ?? new ExportsFinderBag();
40
39
  }
41
40
  /**
42
41
  * Mark an export as requested.
@@ -46,20 +45,15 @@ export class ExportsFinder {
46
45
  request(name) {
47
46
  this._requesteds.push(name);
48
47
  }
49
- validateRequested(req) {
50
- return validateRequested(req, this.bag, this._predictedBag);
51
- }
52
- activatePrediction(bag) {
53
- this._predictedBag ??= bag ?? new ExportsFinderBag();
48
+ validateRequesteds(...reqs) {
49
+ return validateRequesteds(reqs, this.bag, this.predictedBag);
54
50
  }
55
51
  addPrediction(node) {
56
- if (!this._predictedBag)
57
- this._predictedBag = new ExportsFinderBag();
58
- if (!this._predictedBag.has(node.name))
59
- this._predictedBag.add(node);
52
+ if (!this.predictedBag.has(node.name))
53
+ this.predictedBag.add(node);
60
54
  }
61
- validate() {
62
- const invalids = this.requesteds.filter((req) => !req.valid);
55
+ validate(requesteds) {
56
+ const invalids = (requesteds ?? this.requesteds).filter((req) => !req.valid);
63
57
  if (invalids.length === 0)
64
58
  return;
65
59
  // throw error, not all predicted names were provided
@@ -74,7 +68,10 @@ export class ExportsFinder {
74
68
  throw new Error(`Predicted names missing: ${firsts.join(", ")}${others.length > 0 ? ", ..." : ""}`);
75
69
  }
76
70
  get requesteds() {
77
- return this._requesteds.map((name) => this.validateRequested({ name }));
71
+ return validateRequesteds(this._requesteds, this.bag, this.predictedBag);
72
+ }
73
+ get requestedNodes() {
74
+ return mapRequestedsToNodes(this._requesteds, this.bag, this.predictedBag);
78
75
  }
79
76
  requested(name, isValid) {
80
77
  return (this.requesteds.find((req) => req.name === name && (!isValid || req.valid === true)) ?? null);
@@ -85,7 +82,7 @@ export class ExportsFinder {
85
82
  * prediction bag is not cloned --> needed for collecting
86
83
  */
87
84
  link() {
88
- return ExportsFinder.createByNodes(this.bag, this._predictedBag);
85
+ return ExportsFinder.createByNodes(this.bag, this.predictedBag);
89
86
  }
90
87
  }
91
88
  //# sourceMappingURL=ExportsFinder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExportsFinder.js","sourceRoot":"","sources":["../../src/exp/ExportsFinder.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ExportNodeTyped,\n ExportsCommonExcludes,\n ExportsRequested,\n PackageAPI,\n} from \"../types/types.exports.js\";\nimport { mapPackagesToTyped } from \"./exports.package.js\";\nimport { validateRequested } from \"./exports.requested.js\";\nimport { ExportsFinderBag } from \"./ExportsFinderBag.js\";\n\n/**\n * Lookup index for typed export nodes across multiple packages.\n *\n * @remarks\n * Provides O(1) access to export metadata by name and supports marking\n * specific exports as \"requested\" for downstream code-generation steps.\n */\nexport class ExportsFinder {\n public readonly bag: ExportsFinderBag;\n protected _predictedBag: ExportsFinderBag | null = null;\n protected _requesteds: string[] = [];\n\n /**\n * Build a finder from an array of {@link PackageAPI} objects.\n *\n * @param pkgs - Packages whose exports are indexed.\n */\n public static createByPkgs(\n pkgs: PackageAPI[],\n excludes?: ExportsCommonExcludes,\n ): ExportsFinder {\n return new ExportsFinder(\n new ExportsFinderBag(mapPackagesToTyped(new Map(), pkgs, excludes)),\n );\n }\n\n /**\n * Build a finder from a pre-built node map (deep-cloned).\n *\n * @param nodes - Map of export names to typed nodes.\n */\n public static createByNodes(\n nodes: Map<string, ExportNodeTyped> | ExportsFinderBag,\n predicted?: Map<string, ExportNodeTyped> | ExportsFinderBag | null,\n ): ExportsFinder {\n const finder = new ExportsFinder(\n nodes instanceof ExportsFinderBag\n ? nodes\n : new ExportsFinderBag(structuredClone(nodes)),\n );\n\n if (predicted)\n finder.activatePrediction(\n predicted instanceof ExportsFinderBag\n ? predicted\n : new ExportsFinderBag(structuredClone(predicted)),\n );\n return finder;\n }\n\n protected constructor(bag: ExportsFinderBag) {\n this.bag = bag;\n }\n\n /**\n * Mark an export as requested.\n *\n * @param name - Export name to flag.\n */\n public request(name: string): void {\n this._requesteds.push(name);\n }\n\n protected validateRequested(req: ExportsRequested): ExportsRequested {\n return validateRequested(req, this.bag, this._predictedBag);\n }\n\n public activatePrediction(bag?: ExportsFinderBag) {\n this._predictedBag ??= bag ?? new ExportsFinderBag();\n }\n\n public addPrediction(node: ExportNodeTyped): void {\n if (!this._predictedBag) this._predictedBag = new ExportsFinderBag();\n if (!this._predictedBag.has(node.name)) this._predictedBag.add(node);\n }\n\n public validate(): void {\n const invalids = this.requesteds.filter((req) => !req.valid);\n if (invalids.length === 0) return;\n\n // throw error, not all predicted names were provided\n const firsts: string[] = [];\n const others: string[] = [];\n\n for (const { name } of invalids) {\n if (firsts.length < 3) firsts.push(name);\n else others.push(name);\n }\n\n throw new Error(\n `Predicted names missing: ${firsts.join(\", \")}${others.length > 0 ? \", ...\" : \"\"}`,\n );\n }\n\n public get requesteds(): ExportsRequested[] {\n return this._requesteds.map((name) => this.validateRequested({ name }));\n }\n\n public requested(name: string, isValid?: boolean): ExportsRequested | null {\n return (\n this.requesteds.find(\n (req) => req.name === name && (!isValid || req.valid === true),\n ) ?? null\n );\n }\n\n /**\n * Create a deep copy of this finder.\n *\n * prediction bag is not cloned --> needed for collecting\n */\n public link(): ExportsFinder {\n return ExportsFinder.createByNodes(this.bag, this._predictedBag);\n }\n}\n"]}
1
+ {"version":3,"file":"ExportsFinder.js","sourceRoot":"","sources":["../../src/exp/ExportsFinder.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ExportNodeTyped,\n ExportsCommonExcludes,\n ExportsRequestedItem,\n PackageAPI,\n} from \"../types/types.exports.js\";\nimport {\n mapRequestedsToNodes,\n validateRequesteds,\n} from \"./exports.requested.js\";\nimport { mapPackagesToTyped } from \"./exports.package.js\";\nimport { ExportsFinderBag } from \"./ExportsFinderBag.js\";\n\n/**\n * Lookup index for typed export nodes across multiple packages.\n *\n * @remarks\n * Provides O(1) access to export metadata by name and supports marking\n * specific exports as \"requested\" for downstream code-generation steps.\n */\nexport class ExportsFinder {\n public readonly bag: ExportsFinderBag;\n public readonly predictedBag: ExportsFinderBag;\n protected _requesteds: string[] = [];\n\n /**\n * Build a finder from an array of {@link PackageAPI} objects.\n *\n * @param pkgs - Packages whose exports are indexed.\n */\n public static createByPkgs(\n pkgs: PackageAPI[],\n excludes?: ExportsCommonExcludes,\n ): ExportsFinder {\n return new ExportsFinder(\n new ExportsFinderBag(mapPackagesToTyped(new Map(), pkgs, excludes)),\n );\n }\n\n /**\n * Build a finder from a pre-built node map (deep-cloned).\n *\n * @param nodes - Map of export names to typed nodes.\n */\n public static createByNodes(\n nodes: Map<string, ExportNodeTyped> | ExportsFinderBag,\n predicted?: Map<string, ExportNodeTyped> | ExportsFinderBag | null,\n ): ExportsFinder {\n const finder = new ExportsFinder(\n nodes instanceof ExportsFinderBag\n ? nodes\n : new ExportsFinderBag(structuredClone(nodes)),\n predicted instanceof ExportsFinderBag\n ? predicted\n : new ExportsFinderBag(structuredClone(predicted)),\n );\n\n return finder;\n }\n\n protected constructor(\n bag: ExportsFinderBag,\n predictedBag?: ExportsFinderBag,\n ) {\n this.bag = bag;\n this.predictedBag = predictedBag ?? new ExportsFinderBag();\n }\n\n /**\n * Mark an export as requested.\n *\n * @param name - Export name to flag.\n */\n public request(name: string): void {\n this._requesteds.push(name);\n }\n\n protected validateRequesteds(\n ...reqs: ExportsRequestedItem[]\n ): ExportsRequestedItem[] {\n return validateRequesteds(reqs, this.bag, this.predictedBag);\n }\n\n public addPrediction(node: ExportNodeTyped): void {\n if (!this.predictedBag.has(node.name)) this.predictedBag.add(node);\n }\n\n public validate(requesteds?: ExportsRequestedItem[]): void {\n const invalids = (requesteds ?? this.requesteds).filter(\n (req) => !req.valid,\n );\n if (invalids.length === 0) return;\n\n // throw error, not all predicted names were provided\n const firsts: string[] = [];\n const others: string[] = [];\n\n for (const { name } of invalids) {\n if (firsts.length < 3) firsts.push(name);\n else others.push(name);\n }\n\n throw new Error(\n `Predicted names missing: ${firsts.join(\", \")}${others.length > 0 ? \", ...\" : \"\"}`,\n );\n }\n\n public get requesteds(): ExportsRequestedItem[] {\n return validateRequesteds(this._requesteds, this.bag, this.predictedBag);\n }\n\n public get requestedNodes(): ExportNodeTyped[] {\n return mapRequestedsToNodes(this._requesteds, this.bag, this.predictedBag);\n }\n\n public requested(\n name: string,\n isValid?: boolean,\n ): ExportsRequestedItem | null {\n return (\n this.requesteds.find(\n (req) => req.name === name && (!isValid || req.valid === true),\n ) ?? null\n );\n }\n\n /**\n * Create a deep copy of this finder.\n *\n * prediction bag is not cloned --> needed for collecting\n */\n public link(): ExportsFinder {\n return ExportsFinder.createByNodes(this.bag, this.predictedBag);\n }\n}\n"]}
@@ -18,7 +18,7 @@ export declare class ExportsFinderBag {
18
18
  * @throws Error if no export matches `name`.
19
19
  */
20
20
  get(name: string): ExportNodeTyped;
21
+ gets(...filterNames: string[]): ExportNodeTyped[];
21
22
  has(name: string): boolean;
22
- get all(): ExportNodeTyped[];
23
23
  }
24
24
  //# sourceMappingURL=ExportsFinderBag.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExportsFinderBag.d.ts","sourceRoot":"","sources":["../../src/exp/ExportsFinderBag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B,SAAgB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;gBAEjC,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,IAAI;IAIvD,GAAG,CAAC,IAAI,EAAE,eAAe;IAMhC;;;;;;OAMG;IACI,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAMlC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,IAAW,GAAG,IAAI,eAAe,EAAE,CAElC;CACF"}
1
+ {"version":3,"file":"ExportsFinderBag.d.ts","sourceRoot":"","sources":["../../src/exp/ExportsFinderBag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B,SAAgB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;gBAEjC,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,IAAI;IAIvD,GAAG,CAAC,IAAI,EAAE,eAAe;IAMhC;;;;;;OAMG;IACI,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAMlC,IAAI,CAAC,GAAG,WAAW,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE;IAOjD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAGlC"}
@@ -28,11 +28,14 @@ export class ExportsFinderBag {
28
28
  throw new Error(`No export found for ${name}`);
29
29
  return found;
30
30
  }
31
+ gets(...filterNames) {
32
+ return this.nodes
33
+ .values()
34
+ .toArray()
35
+ .filter((node) => filterNames.includes(node.name));
36
+ }
31
37
  has(name) {
32
38
  return this.nodes.has(name);
33
39
  }
34
- get all() {
35
- return this.nodes.values().toArray();
36
- }
37
40
  }
38
41
  //# sourceMappingURL=ExportsFinderBag.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExportsFinderBag.js","sourceRoot":"","sources":["../../src/exp/ExportsFinderBag.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,OAAO,gBAAgB;IACX,KAAK,CAA+B;IAEpD,YAAmB,KAA2C;QAC5D,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,GAAG,EAAE,CAAC;IAClC,CAAC;IAEM,GAAG,CAAC,IAAqB;QAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,IAAI,iBAAiB,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;OAMG;IACI,GAAG,CAAC,IAAY;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,GAAG,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,IAAW,GAAG;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,CAAC;CACF","sourcesContent":["import type { ExportNodeTyped } from \"../types/types.exports.js\";\n\n/**\n * Lookup index for typed export nodes across multiple packages.\n *\n * @remarks\n * Provides O(1) access to export metadata by name and supports marking\n * specific exports as \"requested\" for downstream code-generation steps.\n */\nexport class ExportsFinderBag {\n public readonly nodes: Map<string, ExportNodeTyped>;\n\n public constructor(nodes?: Map<string, ExportNodeTyped> | null) {\n this.nodes = nodes ?? new Map();\n }\n\n public add(node: ExportNodeTyped) {\n if (this.has(node.name))\n throw new Error(`Export ${node.name} already exists`);\n this.nodes.set(node.name, node);\n }\n\n /**\n * Look up a typed export node by name.\n *\n * @param name - Export name.\n * @returns The matching {@link ExportNodeTyped}.\n * @throws Error if no export matches `name`.\n */\n public get(name: string): ExportNodeTyped {\n const found = this.nodes.get(name);\n if (!found) throw new Error(`No export found for ${name}`);\n return found;\n }\n\n public has(name: string): boolean {\n return this.nodes.has(name);\n }\n\n public get all(): ExportNodeTyped[] {\n return this.nodes.values().toArray();\n }\n}\n"]}
1
+ {"version":3,"file":"ExportsFinderBag.js","sourceRoot":"","sources":["../../src/exp/ExportsFinderBag.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,OAAO,gBAAgB;IACX,KAAK,CAA+B;IAEpD,YAAmB,KAA2C;QAC5D,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,GAAG,EAAE,CAAC;IAClC,CAAC;IAEM,GAAG,CAAC,IAAqB;QAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,IAAI,iBAAiB,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;OAMG;IACI,GAAG,CAAC,IAAY;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,IAAI,CAAC,GAAG,WAAqB;QAClC,OAAO,IAAI,CAAC,KAAK;aACd,MAAM,EAAE;aACR,OAAO,EAAE;aACT,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;IAEM,GAAG,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;CACF","sourcesContent":["import type { ExportNodeTyped } from \"../types/types.exports.js\";\n\n/**\n * Lookup index for typed export nodes across multiple packages.\n *\n * @remarks\n * Provides O(1) access to export metadata by name and supports marking\n * specific exports as \"requested\" for downstream code-generation steps.\n */\nexport class ExportsFinderBag {\n public readonly nodes: Map<string, ExportNodeTyped>;\n\n public constructor(nodes?: Map<string, ExportNodeTyped> | null) {\n this.nodes = nodes ?? new Map();\n }\n\n public add(node: ExportNodeTyped) {\n if (this.has(node.name))\n throw new Error(`Export ${node.name} already exists`);\n this.nodes.set(node.name, node);\n }\n\n /**\n * Look up a typed export node by name.\n *\n * @param name - Export name.\n * @returns The matching {@link ExportNodeTyped}.\n * @throws Error if no export matches `name`.\n */\n public get(name: string): ExportNodeTyped {\n const found = this.nodes.get(name);\n if (!found) throw new Error(`No export found for ${name}`);\n return found;\n }\n\n public gets(...filterNames: string[]): ExportNodeTyped[] {\n return this.nodes\n .values()\n .toArray()\n .filter((node) => filterNames.includes(node.name));\n }\n\n public has(name: string): boolean {\n return this.nodes.has(name);\n }\n}\n"]}
@@ -1,6 +1,7 @@
1
- import type { ExportsRequested } from "../types/types.exports.js";
1
+ import type { ExportNodeTyped, ExportsRequestedItem } from "../types/types.exports.js";
2
2
  import type { ExportsFinderBag } from "./ExportsFinderBag.js";
3
3
  export declare const isRequestedValid: (name: string, ...bags: (ExportsFinderBag | null | undefined)[]) => boolean;
4
- export declare const validateRequested: (req: ExportsRequested, ...bags: (ExportsFinderBag | null | undefined)[]) => ExportsRequested;
5
- export declare const validateRequesteds: (reqs: ExportsRequested[], ...bags: (ExportsFinderBag | null | undefined)[]) => ExportsRequested[];
4
+ export declare const validateRequested: (req: ExportsRequestedItem | string, ...bags: (ExportsFinderBag | null | undefined)[]) => ExportsRequestedItem;
5
+ export declare const validateRequesteds: (reqs: ExportsRequestedItem[] | string[], ...bags: (ExportsFinderBag | null | undefined)[]) => ExportsRequestedItem[];
6
+ export declare const mapRequestedsToNodes: (reqs: ExportsRequestedItem[] | string[], ...bags: (ExportsFinderBag | null | undefined)[]) => ExportNodeTyped[];
6
7
  //# sourceMappingURL=exports.requested.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exports.requested.d.ts","sourceRoot":"","sources":["../../src/exp/exports.requested.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,EACZ,GAAG,MAAM,CAAC,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,KAC/C,OAA+C,CAAC;AAEnD,eAAO,MAAM,iBAAiB,GAC5B,KAAK,gBAAgB,EACrB,GAAG,MAAM,CAAC,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,KAC/C,gBAGF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,MAAM,gBAAgB,EAAE,EACxB,GAAG,MAAM,CAAC,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,KAC/C,gBAAgB,EAGlB,CAAC"}
1
+ {"version":3,"file":"exports.requested.d.ts","sourceRoot":"","sources":["../../src/exp/exports.requested.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,EACZ,GAAG,MAAM,CAAC,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,KAC/C,OAA+C,CAAC;AAEnD,eAAO,MAAM,iBAAiB,GAC5B,KAAK,oBAAoB,GAAG,MAAM,EAClC,GAAG,MAAM,CAAC,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,KAC/C,oBAMF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,MAAM,oBAAoB,EAAE,GAAG,MAAM,EAAE,EACvC,GAAG,MAAM,CAAC,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,KAC/C,oBAAoB,EAYtB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,MAAM,oBAAoB,EAAE,GAAG,MAAM,EAAE,EACvC,GAAG,MAAM,CAAC,gBAAgB,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,KAC/C,eAAe,EAKjB,CAAC"}
@@ -1,11 +1,22 @@
1
1
  export const isRequestedValid = (name, ...bags) => !!bags.find((bag) => bag?.has(name));
2
2
  export const validateRequested = (req, ...bags) => {
3
- req.valid = !!bags.find((bag) => bag?.has(req.name));
4
- return req;
3
+ const result = typeof req === "string" ? { name: req } : req;
4
+ result.valid = !!bags.find((bag) => bag?.has(result.name));
5
+ return result;
5
6
  };
6
7
  export const validateRequesteds = (reqs, ...bags) => {
7
- for (const req of reqs)
8
- validateRequested(req, ...bags);
9
- return reqs;
8
+ if (reqs.length === 0)
9
+ return [];
10
+ const results = typeof reqs[0] === "string" ? [] : reqs;
11
+ for (const req of reqs) {
12
+ const res = validateRequested(req, ...bags);
13
+ if (typeof req === "string")
14
+ results.push(res);
15
+ }
16
+ return results;
17
+ };
18
+ export const mapRequestedsToNodes = (reqs, ...bags) => {
19
+ const requestedNames = reqs.map((req) => typeof req === "string" ? req : req.name);
20
+ return bags.flatMap((bag) => bag?.gets(...requestedNames) ?? []);
10
21
  };
11
22
  //# sourceMappingURL=exports.requested.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"exports.requested.js","sourceRoot":"","sources":["../../src/exp/exports.requested.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,IAAY,EACZ,GAAG,IAA6C,EACvC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAEnD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,GAAqB,EACrB,GAAG,IAA6C,EAC9B,EAAE;IACpB,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,IAAwB,EACxB,GAAG,IAA6C,EAC5B,EAAE;IACtB,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC","sourcesContent":["import type { ExportsRequested } from \"../types/types.exports.js\";\nimport type { ExportsFinderBag } from \"./ExportsFinderBag.js\";\n\nexport const isRequestedValid = (\n name: string,\n ...bags: (ExportsFinderBag | null | undefined)[]\n): boolean => !!bags.find((bag) => bag?.has(name));\n\nexport const validateRequested = (\n req: ExportsRequested,\n ...bags: (ExportsFinderBag | null | undefined)[]\n): ExportsRequested => {\n req.valid = !!bags.find((bag) => bag?.has(req.name));\n return req;\n};\n\nexport const validateRequesteds = (\n reqs: ExportsRequested[],\n ...bags: (ExportsFinderBag | null | undefined)[]\n): ExportsRequested[] => {\n for (const req of reqs) validateRequested(req, ...bags);\n return reqs;\n};\n"]}
1
+ {"version":3,"file":"exports.requested.js","sourceRoot":"","sources":["../../src/exp/exports.requested.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,IAAY,EACZ,GAAG,IAA6C,EACvC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAEnD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,GAAkC,EAClC,GAAG,IAA6C,EAC1B,EAAE;IACxB,MAAM,MAAM,GACV,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAEhD,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,IAAuC,EACvC,GAAG,IAA6C,EACxB,EAAE;IAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,OAAO,GACX,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,IAA+B,CAAC;IAEtE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC5C,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,IAAuC,EACvC,GAAG,IAA6C,EAC7B,EAAE;IACrB,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACtC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CACzC,CAAC;IACF,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;AACnE,CAAC,CAAC","sourcesContent":["import type {\n ExportNodeTyped,\n ExportsRequestedItem,\n} from \"../types/types.exports.js\";\nimport type { ExportsFinderBag } from \"./ExportsFinderBag.js\";\n\nexport const isRequestedValid = (\n name: string,\n ...bags: (ExportsFinderBag | null | undefined)[]\n): boolean => !!bags.find((bag) => bag?.has(name));\n\nexport const validateRequested = (\n req: ExportsRequestedItem | string,\n ...bags: (ExportsFinderBag | null | undefined)[]\n): ExportsRequestedItem => {\n const result: ExportsRequestedItem =\n typeof req === \"string\" ? { name: req } : req;\n\n result.valid = !!bags.find((bag) => bag?.has(result.name));\n return result;\n};\n\nexport const validateRequesteds = (\n reqs: ExportsRequestedItem[] | string[],\n ...bags: (ExportsFinderBag | null | undefined)[]\n): ExportsRequestedItem[] => {\n if (reqs.length === 0) return [];\n\n const results: ExportsRequestedItem[] =\n typeof reqs[0] === \"string\" ? [] : (reqs as ExportsRequestedItem[]);\n\n for (const req of reqs) {\n const res = validateRequested(req, ...bags);\n if (typeof req === \"string\") results.push(res);\n }\n\n return results;\n};\n\nexport const mapRequestedsToNodes = (\n reqs: ExportsRequestedItem[] | string[],\n ...bags: (ExportsFinderBag | null | undefined)[]\n): ExportNodeTyped[] => {\n const requestedNames = reqs.map((req) =>\n typeof req === \"string\" ? req : req.name,\n );\n return bags.flatMap((bag) => bag?.gets(...requestedNames) ?? []);\n};\n"]}
@@ -59,7 +59,7 @@ export interface ExportsCommonExcludes {
59
59
  excludePackageJson?: boolean;
60
60
  excludeKnownDuplicates?: boolean;
61
61
  }
62
- export interface ExportsRequested {
62
+ export interface ExportsRequestedItem {
63
63
  name: string;
64
64
  valid?: boolean;
65
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.exports.d.ts","sourceRoot":"","sources":["../../src/types/types.exports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qEAAqE;AACrE,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,mDAAmD;IACnD,EAAE,EAAE,MAAM,CAAC;IACX,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,oDAAoD;IACpD,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,kDAAkD;IAClD,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,sBACf,SAAQ,iBAAiB,EAAE,qBAAqB;IAChD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,sEAAsE;AACtE,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB"}
1
+ {"version":3,"file":"types.exports.d.ts","sourceRoot":"","sources":["../../src/types/types.exports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qEAAqE;AACrE,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,mDAAmD;IACnD,EAAE,EAAE,MAAM,CAAC;IACX,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,oDAAoD;IACpD,cAAc,EAAE,UAAU,EAAE,CAAC;IAC7B,kDAAkD;IAClD,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,sBACf,SAAQ,iBAAiB,EAAE,qBAAqB;IAChD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,sEAAsE;AACtE,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.exports.js","sourceRoot":"","sources":["../../src/types/types.exports.ts"],"names":[],"mappings":"","sourcesContent":["import type { ExportNodeType } from \"../enum/enum.exports.js\";\nimport type { RunRepoRootParams } from \"./types.run.js\";\n\n/**\n * Represents a discovered export in a package.\n */\nexport interface ExportNode {\n /** Export name */\n name: string;\n /** Type of export (function, object, class, etc.) */\n kind: string;\n /** Source entrypoint */\n source: string;\n}\n\n/** An {@link ExportNode} enriched with package and type metadata. */\nexport interface ExportNodeTyped extends ExportNode {\n packageName: string;\n type: ExportNodeType;\n}\n\n/**\n * Represents a resolved package entrypoint.\n */\nexport interface EntryPoint {\n /** Import specifier used to load the entrypoint */\n id: string;\n /** Absolute path to resolved file */\n file?: string;\n}\n\n/**\n * Final API analysis result.\n */\nexport interface PackageAPI {\n /** Name of root package */\n packageName: string;\n /** All discovered entrypoints */\n entrypoints: EntryPoint[];\n /** Runtime exports discovered via module loading */\n runtimeExports: ExportNode[];\n /** Type exports discovered via `.d.ts` parsing */\n typeExports: ExportNode[];\n}\n\n/**\n * Parameters for bulk-updating packages that match a pattern.\n */\nexport interface ExportsExtractorParams\n extends RunRepoRootParams, ExportsCommonExcludes {\n filePaths?: string[];\n filterPackages?: string[];\n}\n\n/** Parameters for loading workspace packages into an exports file. */\nexport interface ExportsPackagesParams extends RunRepoRootParams {\n filePath?: string;\n filterPackages?: string[];\n}\n\nexport interface ExportsPattern {\n name?: string; // e.g. *some\n kind?: string; // e.g. some*kind\n source?: string; // e.g. */package.json\n}\n\nexport interface ExportsCommonExcludes {\n excludePackageJson?: boolean;\n excludeKnownDuplicates?: boolean;\n}\n\nexport interface ExportsRequested {\n name: string;\n valid?: boolean;\n}\n"]}
1
+ {"version":3,"file":"types.exports.js","sourceRoot":"","sources":["../../src/types/types.exports.ts"],"names":[],"mappings":"","sourcesContent":["import type { ExportNodeType } from \"../enum/enum.exports.js\";\nimport type { RunRepoRootParams } from \"./types.run.js\";\n\n/**\n * Represents a discovered export in a package.\n */\nexport interface ExportNode {\n /** Export name */\n name: string;\n /** Type of export (function, object, class, etc.) */\n kind: string;\n /** Source entrypoint */\n source: string;\n}\n\n/** An {@link ExportNode} enriched with package and type metadata. */\nexport interface ExportNodeTyped extends ExportNode {\n packageName: string;\n type: ExportNodeType;\n}\n\n/**\n * Represents a resolved package entrypoint.\n */\nexport interface EntryPoint {\n /** Import specifier used to load the entrypoint */\n id: string;\n /** Absolute path to resolved file */\n file?: string;\n}\n\n/**\n * Final API analysis result.\n */\nexport interface PackageAPI {\n /** Name of root package */\n packageName: string;\n /** All discovered entrypoints */\n entrypoints: EntryPoint[];\n /** Runtime exports discovered via module loading */\n runtimeExports: ExportNode[];\n /** Type exports discovered via `.d.ts` parsing */\n typeExports: ExportNode[];\n}\n\n/**\n * Parameters for bulk-updating packages that match a pattern.\n */\nexport interface ExportsExtractorParams\n extends RunRepoRootParams, ExportsCommonExcludes {\n filePaths?: string[];\n filterPackages?: string[];\n}\n\n/** Parameters for loading workspace packages into an exports file. */\nexport interface ExportsPackagesParams extends RunRepoRootParams {\n filePath?: string;\n filterPackages?: string[];\n}\n\nexport interface ExportsPattern {\n name?: string; // e.g. *some\n kind?: string; // e.g. some*kind\n source?: string; // e.g. */package.json\n}\n\nexport interface ExportsCommonExcludes {\n excludePackageJson?: boolean;\n excludeKnownDuplicates?: boolean;\n}\n\nexport interface ExportsRequestedItem {\n name: string;\n valid?: boolean;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mxpicture/build-api",
3
- "version": "0.3.3",
3
+ "version": "0.3.5",
4
4
  "description": "Build utilities API",
5
5
  "type": "module",
6
6
  "author": "MXPicture",
@@ -57,9 +57,7 @@
57
57
  "simple-git": "^3.32.3",
58
58
  "typescript": "^5.9.3",
59
59
  "yaml": "^2.8.2",
60
- "zod": "^4.3.6"
61
- },
62
- "devDependencies": {
60
+ "zod": "^4.3.6",
63
61
  "@types/node": "^25.3.2"
64
62
  }
65
63
  }