@ms-cloudpack/package-utilities 3.1.5 → 4.0.0

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 (55) hide show
  1. package/lib/PackageDefinitions.d.ts +21 -5
  2. package/lib/PackageDefinitions.d.ts.map +1 -1
  3. package/lib/PackageDefinitions.js +29 -17
  4. package/lib/PackageDefinitions.js.map +1 -1
  5. package/lib/addExportsMapEntry.d.ts +3 -5
  6. package/lib/addExportsMapEntry.d.ts.map +1 -1
  7. package/lib/addExportsMapEntry.js +3 -3
  8. package/lib/addExportsMapEntry.js.map +1 -1
  9. package/lib/createExportsMap.d.ts +4 -2
  10. package/lib/createExportsMap.d.ts.map +1 -1
  11. package/lib/createExportsMap.js +14 -12
  12. package/lib/createExportsMap.js.map +1 -1
  13. package/lib/createImportMap.d.ts +6 -3
  14. package/lib/createImportMap.d.ts.map +1 -1
  15. package/lib/createImportMap.js +7 -8
  16. package/lib/createImportMap.js.map +1 -1
  17. package/lib/createResolveMap/addLinkedEntryDependencies.d.ts +4 -3
  18. package/lib/createResolveMap/addLinkedEntryDependencies.d.ts.map +1 -1
  19. package/lib/createResolveMap/addLinkedEntryDependencies.js +6 -6
  20. package/lib/createResolveMap/addLinkedEntryDependencies.js.map +1 -1
  21. package/lib/createResolveMap/createResolveMap.d.ts +3 -2
  22. package/lib/createResolveMap/createResolveMap.d.ts.map +1 -1
  23. package/lib/createResolveMap/createResolveMap.js +4 -6
  24. package/lib/createResolveMap/createResolveMap.js.map +1 -1
  25. package/lib/createResolveMap/diffResolveMaps.js +1 -2
  26. package/lib/createResolveMap/diffResolveMaps.js.map +1 -1
  27. package/lib/createResolveMap/findPackagesFromPath.d.ts +6 -5
  28. package/lib/createResolveMap/findPackagesFromPath.d.ts.map +1 -1
  29. package/lib/createResolveMap/findPackagesFromPath.js +7 -7
  30. package/lib/createResolveMap/findPackagesFromPath.js.map +1 -1
  31. package/lib/createResolveMap/linkPath.d.ts +3 -2
  32. package/lib/createResolveMap/linkPath.d.ts.map +1 -1
  33. package/lib/createResolveMap/linkPath.js +11 -10
  34. package/lib/createResolveMap/linkPath.js.map +1 -1
  35. package/lib/findFileInPackage.d.ts +4 -1
  36. package/lib/findFileInPackage.d.ts.map +1 -1
  37. package/lib/findFileInPackage.js +3 -3
  38. package/lib/findFileInPackage.js.map +1 -1
  39. package/lib/findPackagePath.d.ts +3 -0
  40. package/lib/findPackagePath.d.ts.map +1 -1
  41. package/lib/findPackagePath.js +3 -3
  42. package/lib/findPackagePath.js.map +1 -1
  43. package/lib/flattenExportsMap.d.ts.map +1 -1
  44. package/lib/flattenExportsMap.js +3 -3
  45. package/lib/flattenExportsMap.js.map +1 -1
  46. package/lib/getExportsMap.d.ts +5 -3
  47. package/lib/getExportsMap.d.ts.map +1 -1
  48. package/lib/getExportsMap.js +5 -13
  49. package/lib/getExportsMap.js.map +1 -1
  50. package/lib/getVersion.d.ts +3 -1
  51. package/lib/getVersion.d.ts.map +1 -1
  52. package/lib/getVersion.js +4 -2
  53. package/lib/getVersion.js.map +1 -1
  54. package/lib/tsdoc-metadata.json +1 -1
  55. package/package.json +6 -6
@@ -1,14 +1,30 @@
1
1
  import type { PackageJson, PackageDefinitionTransform, PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';
2
2
  export declare class PackageDefinitions implements PackageDefinitionsCache {
3
- static getInstance(): PackageDefinitions;
4
3
  private _cache;
4
+ private _config;
5
5
  private _transforms;
6
- constructor(definitionMap?: Record<string, PackageJson>);
6
+ private _transformFactories;
7
+ /**
8
+ * Constructor for PackageDefinitions.
9
+ * @param definitionMap - The map of package paths to package definitions, used mainly for testing.
10
+ * @param config - The optional config object to pass to transforms. When `reset` is called with a new value, the
11
+ * transforms will be re-created using the new config.
12
+ */
13
+ constructor(definitionMap?: Record<string, PackageJson>, config?: unknown);
7
14
  get(packagePath: string, options?: {
8
15
  refresh: boolean;
9
16
  }): Promise<PackageJson | undefined>;
10
- registerTransform(callback: PackageDefinitionTransform): void;
11
- clear(): void;
12
- clearTransforms(): void;
17
+ /**
18
+ * Registers a transform factory function, which will be called on initialization, and when reset, to re-generate
19
+ * the transform function. Transform functions are called only when the package definition hasn't been loaded before,
20
+ * and the result will be cached. Calling `reset` will reset the cache.
21
+ */
22
+ registerTransform(factory: (config?: unknown) => PackageDefinitionTransform): void;
23
+ /**
24
+ * Resets the cache of package definitions. This is useful when testing, to ensure that the cache is empty.
25
+ */
26
+ reset(options?: {
27
+ newConfig?: unknown;
28
+ }): void;
13
29
  }
14
30
  //# sourceMappingURL=PackageDefinitions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PackageDefinitions.d.ts","sourceRoot":"","sources":["../src/PackageDefinitions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAIpH,qBAAa,kBAAmB,YAAW,uBAAuB;IAChE,MAAM,CAAC,WAAW;IAOlB,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,WAAW,CAAkD;gBAEzD,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAM;IAIrD,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAuBhG,iBAAiB,CAAC,QAAQ,EAAE,0BAA0B;IAKtD,KAAK;IAIL,eAAe;CAGhB"}
1
+ {"version":3,"file":"PackageDefinitions.d.ts","sourceRoot":"","sources":["../src/PackageDefinitions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEpH,qBAAa,kBAAmB,YAAW,uBAAuB;IAChE,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,mBAAmB,CAAuD;IAElF;;;;;OAKG;gBACS,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAM,EAAE,MAAM,CAAC,EAAE,OAAO;IAOvE,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAuBhG;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,0BAA0B;IAO3E;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE;CAUxC"}
@@ -1,18 +1,19 @@
1
1
  import path from 'path';
2
2
  import { applyOverrides } from '@ms-cloudpack/package-overrides';
3
3
  import { readJson } from '@ms-cloudpack/json-utilities';
4
- let _singleton;
5
4
  export class PackageDefinitions {
6
- static getInstance() {
7
- if (!_singleton) {
8
- _singleton = new PackageDefinitions();
9
- }
10
- return _singleton;
11
- }
12
- constructor(definitionMap = {}) {
13
- this._cache = {};
14
- this._transforms = [applyOverrides];
5
+ /**
6
+ * Constructor for PackageDefinitions.
7
+ * @param definitionMap - The map of package paths to package definitions, used mainly for testing.
8
+ * @param config - The optional config object to pass to transforms. When `reset` is called with a new value, the
9
+ * transforms will be re-created using the new config.
10
+ */
11
+ constructor(definitionMap = {}, config) {
12
+ this._transforms = [];
15
13
  this._cache = definitionMap;
14
+ this._config = config;
15
+ this._transforms = [applyOverrides];
16
+ this._transformFactories = [];
16
17
  }
17
18
  async get(packagePath, options) {
18
19
  let existingDefinition = this._cache[packagePath];
@@ -31,15 +32,26 @@ export class PackageDefinitions {
31
32
  }
32
33
  return existingDefinition;
33
34
  }
34
- registerTransform(callback) {
35
- this._transforms.push(callback);
36
- this.clear();
35
+ /**
36
+ * Registers a transform factory function, which will be called on initialization, and when reset, to re-generate
37
+ * the transform function. Transform functions are called only when the package definition hasn't been loaded before,
38
+ * and the result will be cached. Calling `reset` will reset the cache.
39
+ */
40
+ registerTransform(factory) {
41
+ this._transformFactories.push(factory);
42
+ this._transforms.push(factory(this._config));
43
+ this.reset();
37
44
  }
38
- clear() {
45
+ /**
46
+ * Resets the cache of package definitions. This is useful when testing, to ensure that the cache is empty.
47
+ */
48
+ reset(options) {
39
49
  this._cache = {};
40
- }
41
- clearTransforms() {
42
- this._transforms = [applyOverrides];
50
+ const { newConfig } = options || {};
51
+ if (newConfig) {
52
+ this._config = newConfig;
53
+ this._transforms = [applyOverrides, ...this._transformFactories.map((factory) => factory(newConfig))];
54
+ }
43
55
  }
44
56
  }
45
57
  //# sourceMappingURL=PackageDefinitions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PackageDefinitions.js","sourceRoot":"","sources":["../src/PackageDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAGxD,IAAI,UAA0C,CAAC;AAE/C,MAAM,OAAO,kBAAkB;IAC7B,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,UAAU,EAAE;YACf,UAAU,GAAG,IAAI,kBAAkB,EAAE,CAAC;SACvC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAKD,YAAY,gBAA6C,EAAE;QAHnD,WAAM,GAAgC,EAAE,CAAC;QACzC,gBAAW,GAAiC,CAAC,cAAc,CAAC,CAAC;QAGnE,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,WAAmB,EAAE,OAA8B;QAC3D,IAAI,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAElD,IAAI,CAAC,kBAAkB,IAAI,OAAO,EAAE,OAAO,EAAE;YAC3C,IAAI;gBACF,yCAAyC;gBACzC,MAAM,UAAU,GAA4B,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;gBAEnG,gFAAgF;gBAChF,IAAI,UAAU,EAAE;oBACd,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CACrE,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,EACzC,UAAU,CACX,CAAC;iBACH;aACF;YAAC,OAAO,CAAC,EAAE;gBACV,WAAW;aACZ;SACF;QAED,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,iBAAiB,CAAC,QAAoC;QACpD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,eAAe;QACb,IAAI,CAAC,WAAW,GAAG,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC;CACF","sourcesContent":["import path from 'path';\nimport { applyOverrides } from '@ms-cloudpack/package-overrides';\nimport { readJson } from '@ms-cloudpack/json-utilities';\nimport type { PackageJson, PackageDefinitionTransform, PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\n\nlet _singleton: PackageDefinitions | undefined;\n\nexport class PackageDefinitions implements PackageDefinitionsCache {\n static getInstance() {\n if (!_singleton) {\n _singleton = new PackageDefinitions();\n }\n return _singleton;\n }\n\n private _cache: Record<string, PackageJson> = {};\n private _transforms: PackageDefinitionTransform[] = [applyOverrides];\n\n constructor(definitionMap: Record<string, PackageJson> = {}) {\n this._cache = definitionMap;\n }\n\n async get(packagePath: string, options?: { refresh: boolean }): Promise<PackageJson | undefined> {\n let existingDefinition = this._cache[packagePath];\n\n if (!existingDefinition || options?.refresh) {\n try {\n // Load the package and apply transforms.\n const definition: PackageJson | undefined = await readJson(path.join(packagePath, 'package.json'));\n\n // If we have loaded a definition, apply transforms and cache/return the result.\n if (definition) {\n existingDefinition = this._cache[packagePath] = this._transforms.reduce(\n (def, transform) => transform(def) || def,\n definition,\n );\n }\n } catch (e) {\n /* no-op */\n }\n }\n\n return existingDefinition;\n }\n\n registerTransform(callback: PackageDefinitionTransform) {\n this._transforms.push(callback);\n this.clear();\n }\n\n clear() {\n this._cache = {};\n }\n\n clearTransforms() {\n this._transforms = [applyOverrides];\n }\n}\n"]}
1
+ {"version":3,"file":"PackageDefinitions.js","sourceRoot":"","sources":["../src/PackageDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAGxD,MAAM,OAAO,kBAAkB;IAM7B;;;;;OAKG;IACH,YAAY,gBAA6C,EAAE,EAAE,MAAgB;QATrE,gBAAW,GAAiC,EAAE,CAAC;QAUrD,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,CAAC,cAAc,CAAC,CAAC;QACpC,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,WAAmB,EAAE,OAA8B;QAC3D,IAAI,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAElD,IAAI,CAAC,kBAAkB,IAAI,OAAO,EAAE,OAAO,EAAE;YAC3C,IAAI;gBACF,yCAAyC;gBACzC,MAAM,UAAU,GAA4B,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;gBAEnG,gFAAgF;gBAChF,IAAI,UAAU,EAAE;oBACd,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CACrE,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,EACzC,UAAU,CACX,CAAC;iBACH;aACF;YAAC,OAAO,CAAC,EAAE;gBACV,WAAW;aACZ;SACF;QAED,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,OAAyD;QACzE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAE7C,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAiC;QACrC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QAEjB,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;QAEpC,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SACvG;IACH,CAAC;CACF","sourcesContent":["import path from 'path';\nimport { applyOverrides } from '@ms-cloudpack/package-overrides';\nimport { readJson } from '@ms-cloudpack/json-utilities';\nimport type { PackageJson, PackageDefinitionTransform, PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\n\nexport class PackageDefinitions implements PackageDefinitionsCache {\n private _cache: Record<string, PackageJson>;\n private _config: unknown;\n private _transforms: PackageDefinitionTransform[] = [];\n private _transformFactories: ((config?: unknown) => PackageDefinitionTransform)[];\n\n /**\n * Constructor for PackageDefinitions.\n * @param definitionMap - The map of package paths to package definitions, used mainly for testing.\n * @param config - The optional config object to pass to transforms. When `reset` is called with a new value, the\n * transforms will be re-created using the new config.\n */\n constructor(definitionMap: Record<string, PackageJson> = {}, config?: unknown) {\n this._cache = definitionMap;\n this._config = config;\n this._transforms = [applyOverrides];\n this._transformFactories = [];\n }\n\n async get(packagePath: string, options?: { refresh: boolean }): Promise<PackageJson | undefined> {\n let existingDefinition = this._cache[packagePath];\n\n if (!existingDefinition || options?.refresh) {\n try {\n // Load the package and apply transforms.\n const definition: PackageJson | undefined = await readJson(path.join(packagePath, 'package.json'));\n\n // If we have loaded a definition, apply transforms and cache/return the result.\n if (definition) {\n existingDefinition = this._cache[packagePath] = this._transforms.reduce(\n (def, transform) => transform(def) || def,\n definition,\n );\n }\n } catch (e) {\n /* no-op */\n }\n }\n\n return existingDefinition;\n }\n\n /**\n * Registers a transform factory function, which will be called on initialization, and when reset, to re-generate\n * the transform function. Transform functions are called only when the package definition hasn't been loaded before,\n * and the result will be cached. Calling `reset` will reset the cache.\n */\n registerTransform(factory: (config?: unknown) => PackageDefinitionTransform) {\n this._transformFactories.push(factory);\n this._transforms.push(factory(this._config));\n\n this.reset();\n }\n\n /**\n * Resets the cache of package definitions. This is useful when testing, to ensure that the cache is empty.\n */\n reset(options?: { newConfig?: unknown }) {\n this._cache = {};\n\n const { newConfig } = options || {};\n\n if (newConfig) {\n this._config = newConfig;\n this._transforms = [applyOverrides, ...this._transformFactories.map((factory) => factory(newConfig))];\n }\n }\n}\n"]}
@@ -31,13 +31,11 @@ export interface AddExportsMapEntryOptions {
31
31
  * The condition to add the entry for. (Example: "import", "require", "browser", "types") Defaults to "default"
32
32
  */
33
33
  condition?: string;
34
- /**
35
- * The package definitions cache to use to resolve the file path.
36
- */
37
- packages?: PackageDefinitionsCache;
38
34
  }
39
35
  /**
40
36
  * Given an exports map and details about an import path, adds the entry.
41
37
  */
42
- export declare function addExportsMapEntry(options: AddExportsMapEntryOptions): Promise<boolean>;
38
+ export declare function addExportsMapEntry(options: AddExportsMapEntryOptions, context: {
39
+ packages: PackageDefinitionsCache;
40
+ }): Promise<boolean>;
43
41
  //# sourceMappingURL=addExportsMapEntry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"addExportsMapEntry.d.ts","sourceRoot":"","sources":["../src/addExportsMapEntry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAG/F;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,OAAO,EAAE,kBAAkB,CAAC;IAE5B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,uBAAuB,CAAC;CACpC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC,CAsC7F"}
1
+ {"version":3,"file":"addExportsMapEntry.d.ts","sourceRoot":"","sources":["../src/addExportsMapEntry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAG/F;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,OAAO,EAAE,kBAAkB,CAAC;IAE5B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,EAClC,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAA;CAAE,GAC7C,OAAO,CAAC,OAAO,CAAC,CAyClB"}
@@ -3,19 +3,19 @@ import { safeRelativePath } from '@ms-cloudpack/path-string-parsing';
3
3
  /**
4
4
  * Given an exports map and details about an import path, adds the entry.
5
5
  */
6
- export async function addExportsMapEntry(options) {
6
+ export async function addExportsMapEntry(options, context) {
7
7
  const { exports, packagePath, condition = 'default' } = options;
8
8
  const importPath = makeSafeImportKey(options.importPath || '.');
9
9
  const { filePath, sourcePath, typesPath = options.typesPath ? safeRelativePath(options.typesPath) : undefined, } = await findFileInPackage({
10
10
  packagePath,
11
11
  filePath: options.filePath || options.importPath || '',
12
- });
12
+ }, context);
13
13
  // Create a local for casting.
14
14
  // TODO: this is potentially clobbering or not correctly handling certain existing structures
15
15
  const localExports = exports;
16
16
  // Only do work if a file path was provided.
17
17
  if (filePath) {
18
- let exportsEntry = (localExports[importPath] || (localExports[importPath] = {}));
18
+ let exportsEntry = (localExports[importPath] ??= {});
19
19
  // Promote string-based exports into objects with default conditions.
20
20
  if (typeof exportsEntry === 'string') {
21
21
  exportsEntry = exports[importPath] = { default: exportsEntry };
@@ -1 +1 @@
1
- {"version":3,"file":"addExportsMapEntry.js","sourceRoot":"","sources":["../src/addExportsMapEntry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AA8CrE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAkC;IACzE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC;IAChE,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;IAChE,MAAM,EACJ,QAAQ,EACR,UAAU,EACV,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,GAChF,GAAG,MAAM,iBAAiB,CAAC;QAC1B,WAAW;QACX,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,UAAU,IAAI,EAAE;KACvD,CAAC,CAAC;IAEH,8BAA8B;IAC9B,6FAA6F;IAC7F,MAAM,YAAY,GAAG,OAAiD,CAAC;IAEvE,4CAA4C;IAC5C,IAAI,QAAQ,EAAE;QACZ,IAAI,YAAY,GAAG,CAAC,YAAY,CAAC,UAAU,MAAvB,YAAY,CAAC,UAAU,IAAM,EAAE,EAAC,CAAC;QAErD,qEAAqE;QACrE,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;YACpC,YAAY,GAAI,OAAkD,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;SAC5G;QAED,IAAI,SAAS,EAAE;YACb,YAAY,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;SACnC;QAED,IAAI,UAAU,EAAE;YACd,YAAY,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;SACrC;QAED,mCAAmC;QACnC,YAAY,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;KACpC;IAED,OAAO,CAAC,CAAC,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,GAAG,EAAE;QACrC,OAAO,GAAG,CAAC;KACZ;IAED,4CAA4C;IAC5C,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;QACvB,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;KACjB;IAED,6CAA6C;IAC7C,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACzB,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;KAClB;IAED,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import { findFileInPackage } from './findFileInPackage.js';\nimport type { PackageDefinitionsCache, PackageJsonExports } from '@ms-cloudpack/bundler-types';\nimport { safeRelativePath } from '@ms-cloudpack/path-string-parsing';\n\n/**\n * Options fo addExportsMapEntry.\n */\nexport interface AddExportsMapEntryOptions {\n /**\n * The exports map to add the entry to.\n */\n exports: PackageJsonExports;\n\n /**\n * The package path to add the entry for. This is used to resolve relative paths.\n */\n packagePath: string;\n\n /**\n * The import path to add the entry for. This is used as the key in the exports map. Defaults\n * to \".\" being the package import.\n */\n importPath?: string;\n\n /**\n * The relative path to the physical file location, representing the \"key\" in the exports map. Can be a partial\n * location, in which case we will attempt to search for the file and associated source/d.ts files. Defaults to\n * assuming `index.js`.\n */\n filePath?: string;\n\n /**\n * Optional types path. If not provided, types will be discovered for internal packages that have source files.\n * This is useful mainly when converting the default import from a package.json that has explicit typings listed.\n */\n typesPath?: string;\n\n /**\n * The condition to add the entry for. (Example: \"import\", \"require\", \"browser\", \"types\") Defaults to \"default\"\n */\n condition?: string;\n\n /**\n * The package definitions cache to use to resolve the file path.\n */\n packages?: PackageDefinitionsCache;\n}\n\n/**\n * Given an exports map and details about an import path, adds the entry.\n */\nexport async function addExportsMapEntry(options: AddExportsMapEntryOptions): Promise<boolean> {\n const { exports, packagePath, condition = 'default' } = options;\n const importPath = makeSafeImportKey(options.importPath || '.');\n const {\n filePath,\n sourcePath,\n typesPath = options.typesPath ? safeRelativePath(options.typesPath) : undefined,\n } = await findFileInPackage({\n packagePath,\n filePath: options.filePath || options.importPath || '',\n });\n\n // Create a local for casting.\n // TODO: this is potentially clobbering or not correctly handling certain existing structures\n const localExports = exports as Record<string, Record<string, string>>;\n\n // Only do work if a file path was provided.\n if (filePath) {\n let exportsEntry = (localExports[importPath] ||= {});\n\n // Promote string-based exports into objects with default conditions.\n if (typeof exportsEntry === 'string') {\n exportsEntry = (exports as Record<string, Record<string, string>>)[importPath] = { default: exportsEntry };\n }\n\n if (typesPath) {\n exportsEntry['types'] = typesPath;\n }\n\n if (sourcePath) {\n exportsEntry['source'] = sourcePath;\n }\n\n // Add the entry for the condition.\n exportsEntry[condition] = filePath;\n }\n\n return !!filePath;\n}\n\nfunction makeSafeImportKey(key: string) {\n if (!key || key === '' || key === '.') {\n return '.';\n }\n\n // if the key starts with a slash, add a dot\n if (key.startsWith('/')) {\n key = '.' + key;\n }\n\n // if the key doesn't start with \"./\", add it\n if (!key.startsWith('./')) {\n key = './' + key;\n }\n\n return key;\n}\n"]}
1
+ {"version":3,"file":"addExportsMapEntry.js","sourceRoot":"","sources":["../src/addExportsMapEntry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAyCrE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAkC,EAClC,OAA8C;IAE9C,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC;IAChE,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;IAChE,MAAM,EACJ,QAAQ,EACR,UAAU,EACV,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,GAChF,GAAG,MAAM,iBAAiB,CACzB;QACE,WAAW;QACX,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,UAAU,IAAI,EAAE;KACvD,EACD,OAAO,CACR,CAAC;IAEF,8BAA8B;IAC9B,6FAA6F;IAC7F,MAAM,YAAY,GAAG,OAAiD,CAAC;IAEvE,4CAA4C;IAC5C,IAAI,QAAQ,EAAE;QACZ,IAAI,YAAY,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;QAErD,qEAAqE;QACrE,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;YACpC,YAAY,GAAI,OAAkD,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;SAC5G;QAED,IAAI,SAAS,EAAE;YACb,YAAY,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;SACnC;QAED,IAAI,UAAU,EAAE;YACd,YAAY,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;SACrC;QAED,mCAAmC;QACnC,YAAY,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;KACpC;IAED,OAAO,CAAC,CAAC,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,GAAG,EAAE;QACrC,OAAO,GAAG,CAAC;KACZ;IAED,4CAA4C;IAC5C,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;QACvB,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;KACjB;IAED,6CAA6C;IAC7C,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACzB,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;KAClB;IAED,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import { findFileInPackage } from './findFileInPackage.js';\nimport type { PackageDefinitionsCache, PackageJsonExports } from '@ms-cloudpack/bundler-types';\nimport { safeRelativePath } from '@ms-cloudpack/path-string-parsing';\n\n/**\n * Options fo addExportsMapEntry.\n */\nexport interface AddExportsMapEntryOptions {\n /**\n * The exports map to add the entry to.\n */\n exports: PackageJsonExports;\n\n /**\n * The package path to add the entry for. This is used to resolve relative paths.\n */\n packagePath: string;\n\n /**\n * The import path to add the entry for. This is used as the key in the exports map. Defaults\n * to \".\" being the package import.\n */\n importPath?: string;\n\n /**\n * The relative path to the physical file location, representing the \"key\" in the exports map. Can be a partial\n * location, in which case we will attempt to search for the file and associated source/d.ts files. Defaults to\n * assuming `index.js`.\n */\n filePath?: string;\n\n /**\n * Optional types path. If not provided, types will be discovered for internal packages that have source files.\n * This is useful mainly when converting the default import from a package.json that has explicit typings listed.\n */\n typesPath?: string;\n\n /**\n * The condition to add the entry for. (Example: \"import\", \"require\", \"browser\", \"types\") Defaults to \"default\"\n */\n condition?: string;\n}\n\n/**\n * Given an exports map and details about an import path, adds the entry.\n */\nexport async function addExportsMapEntry(\n options: AddExportsMapEntryOptions,\n context: { packages: PackageDefinitionsCache },\n): Promise<boolean> {\n const { exports, packagePath, condition = 'default' } = options;\n const importPath = makeSafeImportKey(options.importPath || '.');\n const {\n filePath,\n sourcePath,\n typesPath = options.typesPath ? safeRelativePath(options.typesPath) : undefined,\n } = await findFileInPackage(\n {\n packagePath,\n filePath: options.filePath || options.importPath || '',\n },\n context,\n );\n\n // Create a local for casting.\n // TODO: this is potentially clobbering or not correctly handling certain existing structures\n const localExports = exports as Record<string, Record<string, string>>;\n\n // Only do work if a file path was provided.\n if (filePath) {\n let exportsEntry = (localExports[importPath] ??= {});\n\n // Promote string-based exports into objects with default conditions.\n if (typeof exportsEntry === 'string') {\n exportsEntry = (exports as Record<string, Record<string, string>>)[importPath] = { default: exportsEntry };\n }\n\n if (typesPath) {\n exportsEntry['types'] = typesPath;\n }\n\n if (sourcePath) {\n exportsEntry['source'] = sourcePath;\n }\n\n // Add the entry for the condition.\n exportsEntry[condition] = filePath;\n }\n\n return !!filePath;\n}\n\nfunction makeSafeImportKey(key: string) {\n if (!key || key === '' || key === '.') {\n return '.';\n }\n\n // if the key starts with a slash, add a dot\n if (key.startsWith('/')) {\n key = '.' + key;\n }\n\n // if the key doesn't start with \"./\", add it\n if (!key.startsWith('./')) {\n key = './' + key;\n }\n\n return key;\n}\n"]}
@@ -2,7 +2,9 @@ import type { PackageJsonExports, PackageDefinitionsCache } from '@ms-cloudpack/
2
2
  /**
3
3
  * Given a package path, generates an export map for the package.
4
4
  */
5
- export declare function createExportsMap(packagePath: string, options?: {
6
- packages?: PackageDefinitionsCache;
5
+ export declare function createExportsMap(options: {
6
+ packagePath: string;
7
+ }, context: {
8
+ packages: PackageDefinitionsCache;
7
9
  }): Promise<PackageJsonExports>;
8
10
  //# sourceMappingURL=createExportsMap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createExportsMap.d.ts","sourceRoot":"","sources":["../src/createExportsMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAK/F;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,uBAAuB,CAAA;CAAO,GACnD,OAAO,CAAC,kBAAkB,CAAC,CAwE7B"}
1
+ {"version":3,"file":"createExportsMap.d.ts","sourceRoot":"","sources":["../src/createExportsMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAI/F;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE;IACP,WAAW,EAAE,MAAM,CAAC;CACrB,EACD,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAA;CAAE,GAC7C,OAAO,CAAC,kBAAkB,CAAC,CAoF7B"}
@@ -1,11 +1,11 @@
1
- import { PackageDefinitions } from './PackageDefinitions.js';
2
1
  import { addExportsMapEntry } from './addExportsMapEntry.js';
3
2
  import { safeRelativePath } from '@ms-cloudpack/path-string-parsing';
4
3
  /**
5
4
  * Given a package path, generates an export map for the package.
6
5
  */
7
- export async function createExportsMap(packagePath, options = {}) {
8
- const { packages = PackageDefinitions.getInstance() } = options;
6
+ export async function createExportsMap(options, context) {
7
+ const { packagePath } = options;
8
+ const { packages } = context;
9
9
  const definition = await packages.get(packagePath);
10
10
  if (!definition) {
11
11
  throw new Error(`Package definition not found for ${packagePath}`);
@@ -23,7 +23,7 @@ export async function createExportsMap(packagePath, options = {}) {
23
23
  filePath: 'index.js',
24
24
  typesPath,
25
25
  condition: type === 'module' ? 'import' : 'default',
26
- });
26
+ }, context);
27
27
  main &&
28
28
  (await addExportsMapEntry({
29
29
  exports,
@@ -31,15 +31,17 @@ export async function createExportsMap(packagePath, options = {}) {
31
31
  filePath: main,
32
32
  typesPath,
33
33
  condition: type === 'module' ? 'import' : 'default',
34
- }));
35
- module && (await addExportsMapEntry({ exports, packagePath, filePath: module, typesPath, condition: 'import' }));
34
+ }, context),
35
+ context);
36
+ module &&
37
+ (await addExportsMapEntry({ exports, packagePath, filePath: module, typesPath, condition: 'import' }, context));
36
38
  if (browser) {
37
39
  if (typeof definition.browser === 'string') {
38
- await addExportsMapEntry({ exports, packagePath, filePath: definition.browser, condition: 'browser' });
40
+ await addExportsMapEntry({ exports, packagePath, filePath: definition.browser, condition: 'browser' }, context);
39
41
  }
40
42
  else if (typeof definition.browser === 'object') {
41
43
  for (const [key, value] of Object.entries(definition.browser)) {
42
- if (value) {
44
+ if (value && typeof value === 'string') {
43
45
  const isDefaultImport = safeRelativePath(module || main) === safeRelativePath(key);
44
46
  const importPaths = isDefaultImport ? ['.'] : [key];
45
47
  if (!isDefaultImport && key.endsWith('.js')) {
@@ -52,7 +54,7 @@ export async function createExportsMap(packagePath, options = {}) {
52
54
  importPath,
53
55
  filePath: value,
54
56
  condition: 'browser',
55
- });
57
+ }, context);
56
58
  }
57
59
  }
58
60
  }
@@ -62,9 +64,9 @@ export async function createExportsMap(packagePath, options = {}) {
62
64
  // formulate based off inferred file structure.
63
65
  // Note: CRA defaults to src/index.js, Vite defaults to src/main.js
64
66
  if (Object.keys(exports).length === 0) {
65
- (await addExportsMapEntry({ exports, packagePath, filePath: './lib/index.js' })) ||
66
- (await addExportsMapEntry({ exports, packagePath, filePath: './lib/main.js' })) ||
67
- (await addExportsMapEntry({ exports, packagePath, filePath: './index.js' }));
67
+ (await addExportsMapEntry({ exports, packagePath, filePath: './lib/index.js' }, context)) ||
68
+ (await addExportsMapEntry({ exports, packagePath, filePath: './lib/main.js' }, context)) ||
69
+ (await addExportsMapEntry({ exports, packagePath, filePath: './index.js' }, context));
68
70
  }
69
71
  return exports;
70
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"createExportsMap.js","sourceRoot":"","sources":["../src/createExportsMap.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageJsonExports, PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport { PackageDefinitions } from './PackageDefinitions.js';\nimport { addExportsMapEntry } from './addExportsMapEntry.js';\nimport { safeRelativePath } from '@ms-cloudpack/path-string-parsing';\n\n/**\n * Given a package path, generates an export map for the package.\n */\nexport async function createExportsMap(\n packagePath: string,\n options: { packages?: PackageDefinitionsCache } = {},\n): Promise<PackageJsonExports> {\n const { packages = PackageDefinitions.getInstance() } = options;\n const definition = await packages.get(packagePath);\n\n if (!definition) {\n throw new Error(`Package definition not found for ${packagePath}`);\n }\n\n // Don't create an exports map for a definition that already has one.\n if (definition.exports) {\n return definition.exports;\n }\n\n const { browser, main, module, types, typings, type } = definition;\n const exports = {};\n const typesPath = types || typings;\n\n await addExportsMapEntry({\n exports,\n packagePath,\n filePath: 'index.js',\n typesPath,\n condition: type === 'module' ? 'import' : 'default',\n });\n main &&\n (await addExportsMapEntry({\n exports,\n packagePath,\n filePath: main,\n typesPath,\n condition: type === 'module' ? 'import' : 'default',\n }));\n module && (await addExportsMapEntry({ exports, packagePath, filePath: module, typesPath, condition: 'import' }));\n\n if (browser) {\n if (typeof definition.browser === 'string') {\n await addExportsMapEntry({ exports, packagePath, filePath: definition.browser, condition: 'browser' });\n } else if (typeof definition.browser === 'object') {\n for (const [key, value] of Object.entries(definition.browser)) {\n if (value) {\n const isDefaultImport = safeRelativePath(module || main) === safeRelativePath(key);\n\n const importPaths = isDefaultImport ? ['.'] : [key];\n\n if (!isDefaultImport && key.endsWith('.js')) {\n importPaths.push(key.replace(/\\.js$/, ''));\n }\n\n for (const importPath of importPaths) {\n await addExportsMapEntry({\n exports,\n packagePath,\n importPath,\n filePath: value,\n condition: 'browser',\n });\n }\n }\n }\n }\n }\n\n // If we couldn't infer the exports map shape from existing metadata,\n // formulate based off inferred file structure.\n // Note: CRA defaults to src/index.js, Vite defaults to src/main.js\n if (Object.keys(exports).length === 0) {\n (await addExportsMapEntry({ exports, packagePath, filePath: './lib/index.js' })) ||\n (await addExportsMapEntry({ exports, packagePath, filePath: './lib/main.js' })) ||\n (await addExportsMapEntry({ exports, packagePath, filePath: './index.js' }));\n }\n\n return exports;\n}\n"]}
1
+ {"version":3,"file":"createExportsMap.js","sourceRoot":"","sources":["../src/createExportsMap.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageJsonExports, PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport { addExportsMapEntry } from './addExportsMapEntry.js';\nimport { safeRelativePath } from '@ms-cloudpack/path-string-parsing';\n\n/**\n * Given a package path, generates an export map for the package.\n */\nexport async function createExportsMap(\n options: {\n packagePath: string;\n },\n context: { packages: PackageDefinitionsCache },\n): Promise<PackageJsonExports> {\n const { packagePath } = options;\n const { packages } = context;\n const definition = await packages.get(packagePath);\n\n if (!definition) {\n throw new Error(`Package definition not found for ${packagePath}`);\n }\n\n // Don't create an exports map for a definition that already has one.\n if (definition.exports) {\n return definition.exports;\n }\n\n const { browser, main, module, types, typings, type } = definition;\n const exports = {};\n const typesPath = types || typings;\n\n await addExportsMapEntry(\n {\n exports,\n packagePath,\n filePath: 'index.js',\n typesPath,\n condition: type === 'module' ? 'import' : 'default',\n },\n context,\n );\n main &&\n (await addExportsMapEntry(\n {\n exports,\n packagePath,\n filePath: main,\n typesPath,\n condition: type === 'module' ? 'import' : 'default',\n },\n context,\n ),\n context);\n module &&\n (await addExportsMapEntry({ exports, packagePath, filePath: module, typesPath, condition: 'import' }, context));\n\n if (browser) {\n if (typeof definition.browser === 'string') {\n await addExportsMapEntry({ exports, packagePath, filePath: definition.browser, condition: 'browser' }, context);\n } else if (typeof definition.browser === 'object') {\n for (const [key, value] of Object.entries(definition.browser)) {\n if (value && typeof value === 'string') {\n const isDefaultImport = safeRelativePath(module || main) === safeRelativePath(key);\n\n const importPaths = isDefaultImport ? ['.'] : [key];\n\n if (!isDefaultImport && key.endsWith('.js')) {\n importPaths.push(key.replace(/\\.js$/, ''));\n }\n\n for (const importPath of importPaths) {\n await addExportsMapEntry(\n {\n exports,\n packagePath,\n importPath,\n filePath: value,\n condition: 'browser',\n },\n context,\n );\n }\n }\n }\n }\n }\n\n // If we couldn't infer the exports map shape from existing metadata,\n // formulate based off inferred file structure.\n // Note: CRA defaults to src/index.js, Vite defaults to src/main.js\n if (Object.keys(exports).length === 0) {\n (await addExportsMapEntry({ exports, packagePath, filePath: './lib/index.js' }, context)) ||\n (await addExportsMapEntry({ exports, packagePath, filePath: './lib/main.js' }, context)) ||\n (await addExportsMapEntry({ exports, packagePath, filePath: './index.js' }, context));\n }\n\n return exports;\n}\n"]}
@@ -5,11 +5,14 @@ export interface ImportMap {
5
5
  scopes?: Record<string, Record<string, string>>;
6
6
  }
7
7
  /**
8
- * Given a resolve ma and a bundleServerUrl, returns an import map to be used in the browser.
8
+ * Given a resolve map and a bundleServerUrl, returns an import map to be used in the browser.
9
9
  */
10
- export declare function createImportMap(resolveMap: ResolveMap, bundleServerUrl: string, options?: {
10
+ export declare function createImportMap(options: {
11
+ resolveMap: ResolveMap;
12
+ bundleServerUrl: string;
11
13
  sessionVersion?: number;
12
- packages?: PackageDefinitionsCache;
13
14
  targetVersions?: Record<string, number>;
15
+ }, context: {
16
+ packages: PackageDefinitionsCache;
14
17
  }): Promise<ImportMap>;
15
18
  //# sourceMappingURL=createImportMap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createImportMap.d.ts","sourceRoot":"","sources":["../src/createImportMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AASnE,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE;IACP,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,uBAAuB,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,GACL,OAAO,CAAC,SAAS,CAAC,CAkCpB"}
1
+ {"version":3,"file":"createImportMap.d.ts","sourceRoot":"","sources":["../src/createImportMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAQnE,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE;IACP,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC,EACD,OAAO,EAAE;IACP,QAAQ,EAAE,uBAAuB,CAAC;CACnC,GACA,OAAO,CAAC,SAAS,CAAC,CAmCpB"}
@@ -1,15 +1,14 @@
1
- import { PackageDefinitions } from './PackageDefinitions.js';
2
1
  import { merge } from 'merge';
3
2
  import { flattenExportsMap } from './flattenExportsMap.js';
4
3
  import path from 'path';
5
4
  import { getExportsMap } from './getExportsMap.js';
6
5
  import { isExternalPackage } from './isExternalPackage.js';
7
6
  /**
8
- * Given a resolve ma and a bundleServerUrl, returns an import map to be used in the browser.
7
+ * Given a resolve map and a bundleServerUrl, returns an import map to be used in the browser.
9
8
  */
10
- export async function createImportMap(resolveMap, bundleServerUrl, options = {}) {
11
- var _a, _b;
12
- const { packages = PackageDefinitions.getInstance(), sessionVersion = 0, targetVersions } = options;
9
+ export async function createImportMap(options, context) {
10
+ const { resolveMap, bundleServerUrl, sessionVersion = 0, targetVersions } = options;
11
+ const { packages } = context;
13
12
  const importMap = {
14
13
  imports: {},
15
14
  };
@@ -17,11 +16,11 @@ export async function createImportMap(resolveMap, bundleServerUrl, options = {})
17
16
  merge(importMap.imports, await getImportMapFromEntry(resolveEntry, bundleServerUrl, packages, sessionVersion, targetVersions));
18
17
  if (resolveEntry.scopedVersions) {
19
18
  // Initialize scopes
20
- importMap.scopes ?? (importMap.scopes = {});
19
+ importMap.scopes ??= {};
21
20
  for (const scopedEntry of Object.values(resolveEntry.scopedVersions)) {
22
21
  const importMapForEntry = await getImportMapFromEntry(scopedEntry, bundleServerUrl, packages, sessionVersion, targetVersions);
23
22
  for (const requiredById of Object.keys(scopedEntry.requiredBy)) {
24
- const scopes = ((_a = importMap.scopes)[_b = `${bundleServerUrl}/${requiredById}/`] ?? (_a[_b] = {}));
23
+ const scopes = (importMap.scopes[`${bundleServerUrl}/${requiredById}/`] ??= {});
25
24
  merge(scopes, importMapForEntry);
26
25
  }
27
26
  }
@@ -32,7 +31,7 @@ export async function createImportMap(resolveMap, bundleServerUrl, options = {})
32
31
  async function getImportMapFromEntry(entry, bundleServerUrl, packages, sessionVersion, targetVersions) {
33
32
  const importMap = {};
34
33
  const definition = await packages.get(entry.path);
35
- const exportsMap = await getExportsMap(entry.path, { packages });
34
+ const exportsMap = await getExportsMap({ packagePath: entry.path }, { packages });
36
35
  if (!definition ||
37
36
  !definition.name ||
38
37
  !definition.version ||
@@ -1 +1 @@
1
- {"version":3,"file":"createImportMap.js","sourceRoot":"","sources":["../src/createImportMap.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport type { ResolveMap } from './createResolveMap/ResolveMap.js';\nimport type { ResolveMapEntry } from './createResolveMap/ResolveMapEntry.js';\nimport { PackageDefinitions } from './PackageDefinitions.js';\nimport { merge } from 'merge';\nimport { flattenExportsMap } from './flattenExportsMap.js';\nimport path from 'path';\nimport { getExportsMap } from './getExportsMap.js';\nimport { isExternalPackage } from './isExternalPackage.js';\n\nexport interface ImportMap {\n imports: Record<string, string>;\n scopes?: Record<string, Record<string, string>>;\n}\n\n/**\n * Given a resolve ma and a bundleServerUrl, returns an import map to be used in the browser.\n */\nexport async function createImportMap(\n resolveMap: ResolveMap,\n bundleServerUrl: string,\n options: {\n sessionVersion?: number;\n packages?: PackageDefinitionsCache;\n targetVersions?: Record<string, number>;\n } = {},\n): Promise<ImportMap> {\n const { packages = PackageDefinitions.getInstance(), sessionVersion = 0, targetVersions } = options;\n const importMap: ImportMap = {\n imports: {},\n };\n\n for (const resolveEntry of Object.values(resolveMap)) {\n merge(\n importMap.imports,\n await getImportMapFromEntry(resolveEntry, bundleServerUrl, packages, sessionVersion, targetVersions),\n );\n\n if (resolveEntry.scopedVersions) {\n // Initialize scopes\n importMap.scopes ??= {};\n\n for (const scopedEntry of Object.values(resolveEntry.scopedVersions)) {\n const importMapForEntry = await getImportMapFromEntry(\n scopedEntry,\n bundleServerUrl,\n packages,\n sessionVersion,\n targetVersions,\n );\n\n for (const requiredById of Object.keys(scopedEntry.requiredBy)) {\n const scopes = (importMap.scopes[`${bundleServerUrl}/${requiredById}/`] ??= {});\n merge(scopes, importMapForEntry);\n }\n }\n }\n }\n\n return importMap;\n}\n\nasync function getImportMapFromEntry(\n entry: ResolveMapEntry,\n bundleServerUrl: string,\n packages: PackageDefinitionsCache,\n sessionVersion: number,\n targetVersions?: Record<string, number>,\n): Promise<Record<string, string>> {\n const importMap: Record<string, string> = {};\n const definition = await packages.get(entry.path);\n const exportsMap = await getExportsMap(entry.path, { packages });\n\n if (\n !definition ||\n !definition.name ||\n !definition.version ||\n !exportsMap ||\n Object.keys(exportsMap).length === 0 ||\n definition.name.startsWith('@types/')\n ) {\n return importMap;\n }\n\n // Get both the unbundled entries from the exports map\n const unbundledExportsMap = flattenExportsMap(exportsMap, {\n conditions: ['browser-esm'],\n requiredConditions: ['browser-esm'],\n });\n const bundledExportsMap = flattenExportsMap(exportsMap);\n const packagePrefix = `${entry.name}@${entry.version}/`;\n const baseUrl = `${bundleServerUrl}/${packagePrefix}`;\n\n // Add the bundled entries to the import map, but prefer unbundled if the entry exists.\n for (const [importPath, bundledFilePath] of Object.entries(bundledExportsMap)) {\n const isExternal = isExternalPackage(entry.path);\n const unbundledFilePath = isExternal ? unbundledExportsMap[importPath] : undefined;\n let resolvedFilePath = unbundledFilePath ? `unbundled/${unbundledFilePath}` : `bundled/${bundledFilePath}`;\n const targetVersion = targetVersions?.[entry.path];\n const cacheBuster = `v${sessionVersion ?? 0}${targetVersion ? `.${targetVersion}` : ''}/`;\n\n resolvedFilePath = `${cacheBuster}${resolvedFilePath}`;\n const ext = path.extname(resolvedFilePath);\n\n // For bundled files:\n if (!unbundledFilePath) {\n // Ignore .d.ts entries\n if (resolvedFilePath.endsWith('.d.ts')) {\n continue;\n }\n\n // We always expect responses to come back as javascript (.js extensions.)\n if (ext !== '.js') {\n resolvedFilePath = path.join(\n path.dirname(resolvedFilePath),\n path.basename(resolvedFilePath, ext) + (ext === '.mjs' ? '.js' : ext + '.js'),\n );\n }\n\n // Plus signs should be replaced with underscores.\n resolvedFilePath = resolvedFilePath.replace(/\\+/g, '_');\n }\n\n importMap[importPath.replace('.', `${definition.name}`)] = new URL(resolvedFilePath, baseUrl).href;\n }\n\n // Finally add a fallback for all other unexpected bundle entries. (Note, this should point to a script\n // which logs this as an error to the user and offers a way to add the entry to exports overrides.)\n // importMap[definition.name + '/'] = baseUrl + 'missing/';\n\n return importMap;\n}\n"]}
1
+ {"version":3,"file":"createImportMap.js","sourceRoot":"","sources":["../src/createImportMap.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport type { ResolveMap } from './createResolveMap/ResolveMap.js';\nimport type { ResolveMapEntry } from './createResolveMap/ResolveMapEntry.js';\nimport { merge } from 'merge';\nimport { flattenExportsMap } from './flattenExportsMap.js';\nimport path from 'path';\nimport { getExportsMap } from './getExportsMap.js';\nimport { isExternalPackage } from './isExternalPackage.js';\n\nexport interface ImportMap {\n imports: Record<string, string>;\n scopes?: Record<string, Record<string, string>>;\n}\n\n/**\n * Given a resolve map and a bundleServerUrl, returns an import map to be used in the browser.\n */\nexport async function createImportMap(\n options: {\n resolveMap: ResolveMap;\n bundleServerUrl: string;\n sessionVersion?: number;\n targetVersions?: Record<string, number>;\n },\n context: {\n packages: PackageDefinitionsCache;\n },\n): Promise<ImportMap> {\n const { resolveMap, bundleServerUrl, sessionVersion = 0, targetVersions } = options;\n const { packages } = context;\n const importMap: ImportMap = {\n imports: {},\n };\n\n for (const resolveEntry of Object.values(resolveMap)) {\n merge(\n importMap.imports,\n await getImportMapFromEntry(resolveEntry, bundleServerUrl, packages, sessionVersion, targetVersions),\n );\n\n if (resolveEntry.scopedVersions) {\n // Initialize scopes\n importMap.scopes ??= {};\n\n for (const scopedEntry of Object.values(resolveEntry.scopedVersions)) {\n const importMapForEntry = await getImportMapFromEntry(\n scopedEntry,\n bundleServerUrl,\n packages,\n sessionVersion,\n targetVersions,\n );\n\n for (const requiredById of Object.keys(scopedEntry.requiredBy)) {\n const scopes = (importMap.scopes[`${bundleServerUrl}/${requiredById}/`] ??= {});\n merge(scopes, importMapForEntry);\n }\n }\n }\n }\n\n return importMap;\n}\n\nasync function getImportMapFromEntry(\n entry: ResolveMapEntry,\n bundleServerUrl: string,\n packages: PackageDefinitionsCache,\n sessionVersion: number,\n targetVersions?: Record<string, number>,\n): Promise<Record<string, string>> {\n const importMap: Record<string, string> = {};\n const definition = await packages.get(entry.path);\n const exportsMap = await getExportsMap({ packagePath: entry.path }, { packages });\n\n if (\n !definition ||\n !definition.name ||\n !definition.version ||\n !exportsMap ||\n Object.keys(exportsMap).length === 0 ||\n definition.name.startsWith('@types/')\n ) {\n return importMap;\n }\n\n // Get both the unbundled entries from the exports map\n const unbundledExportsMap = flattenExportsMap(exportsMap, {\n conditions: ['browser-esm'],\n requiredConditions: ['browser-esm'],\n });\n const bundledExportsMap = flattenExportsMap(exportsMap);\n const packagePrefix = `${entry.name}@${entry.version}/`;\n const baseUrl = `${bundleServerUrl}/${packagePrefix}`;\n\n // Add the bundled entries to the import map, but prefer unbundled if the entry exists.\n for (const [importPath, bundledFilePath] of Object.entries(bundledExportsMap)) {\n const isExternal = isExternalPackage(entry.path);\n const unbundledFilePath = isExternal ? unbundledExportsMap[importPath] : undefined;\n let resolvedFilePath = unbundledFilePath ? `unbundled/${unbundledFilePath}` : `bundled/${bundledFilePath}`;\n const targetVersion = targetVersions?.[entry.path];\n const cacheBuster = `v${sessionVersion ?? 0}${targetVersion ? `.${targetVersion}` : ''}/`;\n\n resolvedFilePath = `${cacheBuster}${resolvedFilePath}`;\n const ext = path.extname(resolvedFilePath);\n\n // For bundled files:\n if (!unbundledFilePath) {\n // Ignore .d.ts entries\n if (resolvedFilePath.endsWith('.d.ts')) {\n continue;\n }\n\n // We always expect responses to come back as javascript (.js extensions.)\n if (ext !== '.js') {\n resolvedFilePath = path.join(\n path.dirname(resolvedFilePath),\n path.basename(resolvedFilePath, ext) + (ext === '.mjs' ? '.js' : ext + '.js'),\n );\n }\n\n // Plus signs should be replaced with underscores.\n resolvedFilePath = resolvedFilePath.replace(/\\+/g, '_');\n }\n\n importMap[importPath.replace('.', `${definition.name}`)] = new URL(resolvedFilePath, baseUrl).href;\n }\n\n // Finally add a fallback for all other unexpected bundle entries. (Note, this should point to a script\n // which logs this as an error to the user and offers a way to add the entry to exports overrides.)\n // importMap[definition.name + '/'] = baseUrl + 'missing/';\n\n return importMap;\n}\n"]}
@@ -1,6 +1,6 @@
1
- import { PackageDefinitions } from '../PackageDefinitions.js';
2
- import type { ResolveMapEntry } from './ResolveMapEntry.js';
1
+ import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';
3
2
  import type { PackageMap } from './PackageMap.js';
3
+ import type { ResolveMapEntry } from './ResolveMapEntry.js';
4
4
  /**
5
5
  * Given a linkedEntry, iterates through dependencies to ensure they are added to the packageMap,
6
6
  * preferring packageMap dependencies over linkedMap dependencies.
@@ -10,6 +10,7 @@ export declare function addLinkedEntryDependencies(options: {
10
10
  appMap: PackageMap;
11
11
  linkMap: PackageMap;
12
12
  linkedEntry: ResolveMapEntry;
13
- packages?: PackageDefinitions;
13
+ }, context: {
14
+ packages: PackageDefinitionsCache;
14
15
  }): Promise<void>;
15
16
  //# sourceMappingURL=addLinkedEntryDependencies.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"addLinkedEntryDependencies.d.ts","sourceRoot":"","sources":["../../src/createResolveMap/addLinkedEntryDependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD;;;;GAIG;AAEH,wBAAsB,0BAA0B,CAAC,OAAO,EAAE;IACxD,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,UAAU,CAAC;IACpB,WAAW,EAAE,eAAe,CAAC;IAC7B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B,iBA6DA"}
1
+ {"version":3,"file":"addLinkedEntryDependencies.d.ts","sourceRoot":"","sources":["../../src/createResolveMap/addLinkedEntryDependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAE3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;;;GAIG;AAEH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE;IACP,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,UAAU,CAAC;IACpB,WAAW,EAAE,eAAe,CAAC;CAC9B,EACD,OAAO,EAAE;IACP,QAAQ,EAAE,uBAAuB,CAAC;CACnC,iBA+DF"}
@@ -1,12 +1,12 @@
1
- import { PackageDefinitions } from '../PackageDefinitions.js';
2
1
  import { satisfies } from 'semver';
3
2
  /**
4
3
  * Given a linkedEntry, iterates through dependencies to ensure they are added to the packageMap,
5
4
  * preferring packageMap dependencies over linkedMap dependencies.
6
5
  * @param options
7
6
  */
8
- export async function addLinkedEntryDependencies(options) {
9
- const { appMap, linkMap, linkedEntry, packages = PackageDefinitions.getInstance() } = options;
7
+ export async function addLinkedEntryDependencies(options, context) {
8
+ const { appMap, linkMap, linkedEntry } = options;
9
+ const { packages } = context;
10
10
  const { name, version, dependencies } = linkedEntry;
11
11
  const linkDefinition = await packages.get(linkedEntry.path);
12
12
  const versionRequirements = {
@@ -25,7 +25,7 @@ export async function addLinkedEntryDependencies(options) {
25
25
  appMap[dependencyName] = { [linkedDependencyVersion]: dependencyEntry };
26
26
  dependencyEntry.requiredBy = { [`${name}@${version}`]: versionRequirement };
27
27
  // Recursive through the dependency's dependencies.
28
- await addLinkedEntryDependencies({ appMap, linkMap, linkedEntry: dependencyEntry, packages });
28
+ await addLinkedEntryDependencies({ appMap, linkMap, linkedEntry: dependencyEntry }, context);
29
29
  isSatisfied = true;
30
30
  }
31
31
  else {
@@ -41,7 +41,7 @@ export async function addLinkedEntryDependencies(options) {
41
41
  if (appDependencyEntry.isLinked || satisfies(appDependencyEntry.version, versionRequirement)) {
42
42
  linkedEntry.dependencies[dependencyName] = appDependencyEntry.version;
43
43
  appDependencyEntry.requiredBy[`${name}@${version}`] = versionRequirement;
44
- await addLinkedEntryDependencies({ appMap, linkMap, linkedEntry: appDependencyEntry, packages });
44
+ await addLinkedEntryDependencies({ appMap, linkMap, linkedEntry: appDependencyEntry }, context);
45
45
  isSatisfied = true;
46
46
  break;
47
47
  }
@@ -55,7 +55,7 @@ export async function addLinkedEntryDependencies(options) {
55
55
  linkedEntry.dependencies[dependencyName] = linkedDependencyVersion;
56
56
  dependencyEntry.requiredBy = { [`${name}@${version}`]: versionRequirement };
57
57
  // Recursive through the dependency's dependencies.
58
- await addLinkedEntryDependencies({ appMap, linkMap, linkedEntry: dependencyEntry, packages });
58
+ await addLinkedEntryDependencies({ appMap, linkMap, linkedEntry: dependencyEntry }, context);
59
59
  }
60
60
  }
61
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"addLinkedEntryDependencies.js","sourceRoot":"","sources":["../../src/createResolveMap/addLinkedEntryDependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import { PackageDefinitions } from '../PackageDefinitions.js';\nimport type { ResolveMapEntry } from './ResolveMapEntry.js';\nimport type { PackageMap } from './PackageMap.js';\nimport { satisfies } from 'semver';\n\n/**\n * Given a linkedEntry, iterates through dependencies to ensure they are added to the packageMap,\n * preferring packageMap dependencies over linkedMap dependencies.\n * @param options\n */\n\nexport async function addLinkedEntryDependencies(options: {\n appMap: PackageMap;\n linkMap: PackageMap;\n linkedEntry: ResolveMapEntry;\n packages?: PackageDefinitions;\n}) {\n const { appMap, linkMap, linkedEntry, packages = PackageDefinitions.getInstance() } = options;\n const { name, version, dependencies } = linkedEntry;\n const linkDefinition = await packages.get(linkedEntry.path);\n const versionRequirements = {\n ...(linkDefinition?.dependencies || {}),\n ...(linkDefinition?.peerDependencies || {}),\n };\n\n // Iterate through the dependencies of the linked package.\n for (const [dependencyName, linkedDependencyVersion] of Object.entries(dependencies)) {\n const appVersions = appMap[dependencyName];\n const versionRequirement = versionRequirements[dependencyName] as string;\n let isSatisfied = false;\n\n if (!appVersions) {\n // The app does not have any version of this dependency, we need to bring over the version\n // used by the linkedEntry.\n const dependencyEntry = linkMap[dependencyName]?.[linkedDependencyVersion];\n appMap[dependencyName] = { [linkedDependencyVersion]: dependencyEntry };\n dependencyEntry.requiredBy = { [`${name}@${version}`]: versionRequirement };\n\n // Recursive through the dependency's dependencies.\n await addLinkedEntryDependencies({ appMap, linkMap, linkedEntry: dependencyEntry, packages });\n isSatisfied = true;\n } else {\n // We have at least 1 or more versions of this dependency already. If a sufficient version\n // of the dependency is already in the appMap, we we just need to update the linkedEntry's\n // dependency and the dependency's requiredBy record for the parent.\n const appDependencyVersions = Object.values(appMap[dependencyName]);\n\n if (appDependencyVersions.length === 1 && !appDependencyVersions[0].isExternal) {\n continue;\n }\n\n for (const appDependencyEntry of appDependencyVersions) {\n // If the dependency satisfies the semver, use that!\n if (appDependencyEntry.isLinked || satisfies(appDependencyEntry.version, versionRequirement)) {\n linkedEntry.dependencies[dependencyName] = appDependencyEntry.version;\n appDependencyEntry.requiredBy[`${name}@${version}`] = versionRequirement;\n\n await addLinkedEntryDependencies({ appMap, linkMap, linkedEntry: appDependencyEntry, packages });\n isSatisfied = true;\n break;\n }\n }\n }\n\n if (!isSatisfied) {\n // We have at least 1 version of this dependency but nothing satisfies the requirement. We\n // need to introduce a duplicate. During the final pass, we will remove non-required deps.\n const dependencyEntry = linkMap[dependencyName]?.[linkedDependencyVersion];\n\n appMap[dependencyName][linkedDependencyVersion] = dependencyEntry;\n linkedEntry.dependencies[dependencyName] = linkedDependencyVersion;\n dependencyEntry.requiredBy = { [`${name}@${version}`]: versionRequirement };\n\n // Recursive through the dependency's dependencies.\n await addLinkedEntryDependencies({ appMap, linkMap, linkedEntry: dependencyEntry, packages });\n }\n }\n}\n"]}
1
+ {"version":3,"file":"addLinkedEntryDependencies.js","sourceRoot":"","sources":["../../src/createResolveMap/addLinkedEntryDependencies.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport { satisfies } from 'semver';\nimport type { PackageMap } from './PackageMap.js';\nimport type { ResolveMapEntry } from './ResolveMapEntry.js';\n\n/**\n * Given a linkedEntry, iterates through dependencies to ensure they are added to the packageMap,\n * preferring packageMap dependencies over linkedMap dependencies.\n * @param options\n */\n\nexport async function addLinkedEntryDependencies(\n options: {\n appMap: PackageMap;\n linkMap: PackageMap;\n linkedEntry: ResolveMapEntry;\n },\n context: {\n packages: PackageDefinitionsCache;\n },\n) {\n const { appMap, linkMap, linkedEntry } = options;\n const { packages } = context;\n const { name, version, dependencies } = linkedEntry;\n const linkDefinition = await packages.get(linkedEntry.path);\n const versionRequirements = {\n ...(linkDefinition?.dependencies || {}),\n ...(linkDefinition?.peerDependencies || {}),\n };\n\n // Iterate through the dependencies of the linked package.\n for (const [dependencyName, linkedDependencyVersion] of Object.entries(dependencies)) {\n const appVersions = appMap[dependencyName];\n const versionRequirement = versionRequirements[dependencyName] as string;\n let isSatisfied = false;\n\n if (!appVersions) {\n // The app does not have any version of this dependency, we need to bring over the version\n // used by the linkedEntry.\n const dependencyEntry = linkMap[dependencyName]?.[linkedDependencyVersion];\n appMap[dependencyName] = { [linkedDependencyVersion]: dependencyEntry };\n dependencyEntry.requiredBy = { [`${name}@${version}`]: versionRequirement };\n\n // Recursive through the dependency's dependencies.\n await addLinkedEntryDependencies({ appMap, linkMap, linkedEntry: dependencyEntry }, context);\n isSatisfied = true;\n } else {\n // We have at least 1 or more versions of this dependency already. If a sufficient version\n // of the dependency is already in the appMap, we we just need to update the linkedEntry's\n // dependency and the dependency's requiredBy record for the parent.\n const appDependencyVersions = Object.values(appMap[dependencyName]);\n\n if (appDependencyVersions.length === 1 && !appDependencyVersions[0].isExternal) {\n continue;\n }\n\n for (const appDependencyEntry of appDependencyVersions) {\n // If the dependency satisfies the semver, use that!\n if (appDependencyEntry.isLinked || satisfies(appDependencyEntry.version, versionRequirement)) {\n linkedEntry.dependencies[dependencyName] = appDependencyEntry.version;\n appDependencyEntry.requiredBy[`${name}@${version}`] = versionRequirement;\n\n await addLinkedEntryDependencies({ appMap, linkMap, linkedEntry: appDependencyEntry }, context);\n isSatisfied = true;\n break;\n }\n }\n }\n\n if (!isSatisfied) {\n // We have at least 1 version of this dependency but nothing satisfies the requirement. We\n // need to introduce a duplicate. During the final pass, we will remove non-required deps.\n const dependencyEntry = linkMap[dependencyName]?.[linkedDependencyVersion];\n\n appMap[dependencyName][linkedDependencyVersion] = dependencyEntry;\n linkedEntry.dependencies[dependencyName] = linkedDependencyVersion;\n dependencyEntry.requiredBy = { [`${name}@${version}`]: versionRequirement };\n\n // Recursive through the dependency's dependencies.\n await addLinkedEntryDependencies({ appMap, linkMap, linkedEntry: dependencyEntry }, context);\n }\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { PackageDefinitions } from '../PackageDefinitions.js';
2
1
  import type { ResolveMap } from './ResolveMap.js';
2
+ import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';
3
3
  /**
4
4
  * Create a resolve map for a given app path. We do this by walking the dependency tree
5
5
  * of the app to build a map of all packages and their dependencies. We then sort the
@@ -17,6 +17,7 @@ export declare function createResolveMap(options: {
17
17
  ignoredLinkedPackages?: string[];
18
18
  gitRootPath?: string;
19
19
  useStrictVersioning?: boolean;
20
- packages?: PackageDefinitions;
20
+ }, context: {
21
+ packages: PackageDefinitionsCache;
21
22
  }): Promise<ResolveMap>;
22
23
  //# sourceMappingURL=createResolveMap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createResolveMap.d.ts","sourceRoot":"","sources":["../../src/createResolveMap/createResolveMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKlD;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B,GAAG,OAAO,CAAC,UAAU,CAAC,CA0BtB"}
1
+ {"version":3,"file":"createResolveMap.d.ts","sourceRoot":"","sources":["../../src/createResolveMap/createResolveMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIlD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAE3E;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE;IACP,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,EACD,OAAO,EAAE;IACP,QAAQ,EAAE,uBAAuB,CAAC;CACnC,GACA,OAAO,CAAC,UAAU,CAAC,CA2BrB"}
@@ -1,4 +1,3 @@
1
- import { PackageDefinitions } from '../PackageDefinitions.js';
2
1
  import { findPackagesFromPath } from './findPackagesFromPath.js';
3
2
  import { convertToResolveMap } from './convertToResolveMap.js';
4
3
  import { linkPath } from './linkPath.js';
@@ -12,18 +11,17 @@ import { linkPath } from './linkPath.js';
12
11
  * package. Transitive dependencies of the linked package are validated and any dependencies
13
12
  * which aren't already in the resolve map are added as scoped versions.
14
13
  */
15
- export async function createResolveMap(options) {
16
- const { appPath, additionalPaths = [], linkedPaths = [], useStrictVersioning, packages = PackageDefinitions.getInstance(), ignoredLinkedPackages, gitRootPath, } = options;
14
+ export async function createResolveMap(options, context) {
15
+ const { appPath, additionalPaths = [], linkedPaths = [], useStrictVersioning, ignoredLinkedPackages, gitRootPath, } = options;
17
16
  // First we discover the dependencies for the app.
18
17
  const appMap = await findPackagesFromPath({
19
18
  paths: [appPath, ...additionalPaths],
20
- packages,
21
19
  gitRootPath,
22
20
  useStrictVersioning,
23
- });
21
+ }, context);
24
22
  // Next, we iterate through linked paths to inject them into the packageMap.
25
23
  for (const linkedPath of linkedPaths) {
26
- await linkPath({ linkedPath, appMap, packages, ignoredLinkedPackages });
24
+ await linkPath({ linkedPath, appMap, ignoredLinkedPackages }, context);
27
25
  }
28
26
  // Finally we condense into a resolve map.
29
27
  return convertToResolveMap({ appMap, paths: [appPath, ...additionalPaths] });