@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 +1 @@
1
- {"version":3,"file":"createResolveMap.js","sourceRoot":"","sources":["../../src/createResolveMap/createResolveMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAQtC;IACC,MAAM,EACJ,OAAO,EACP,eAAe,GAAG,EAAE,EACpB,WAAW,GAAG,EAAE,EAChB,mBAAmB,EACnB,QAAQ,GAAG,kBAAkB,CAAC,WAAW,EAAE,EAC3C,qBAAqB,EACrB,WAAW,GACZ,GAAG,OAAO,CAAC;IAEZ,kDAAkD;IAClD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC;QACxC,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,eAAe,CAAC;QACpC,QAAQ;QACR,WAAW;QACX,mBAAmB;KACpB,CAAC,CAAC;IAEH,4EAA4E;IAC5E,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;QACpC,MAAM,QAAQ,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC,CAAC;KACzE;IAED,0CAA0C;IAC1C,OAAO,mBAAmB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;AAC/E,CAAC","sourcesContent":["import { PackageDefinitions } from '../PackageDefinitions.js';\nimport type { ResolveMap } from './ResolveMap.js';\nimport { findPackagesFromPath } from './findPackagesFromPath.js';\nimport { convertToResolveMap } from './convertToResolveMap.js';\nimport { linkPath } from './linkPath.js';\n\n/**\n * Create a resolve map for a given app path. We do this by walking the dependency tree\n * of the app to build a map of all packages and their dependencies. We then sort the\n * dependencies by the number of other packages that depend on them. The package with the\n * most dependencies is considered the dominant version and is the one that will be used\n * by the bundler. Once this has been resolved, linkedPaths are evaluated separately by\n * discovering their dependencies and redirecting any existing dependencies to the linked\n * package. Transitive dependencies of the linked package are validated and any dependencies\n * which aren't already in the resolve map are added as scoped versions.\n */\nexport async function createResolveMap(options: {\n appPath: string;\n additionalPaths?: string[];\n linkedPaths?: string[];\n ignoredLinkedPackages?: string[];\n gitRootPath?: string;\n useStrictVersioning?: boolean;\n packages?: PackageDefinitions;\n}): Promise<ResolveMap> {\n const {\n appPath,\n additionalPaths = [],\n linkedPaths = [],\n useStrictVersioning,\n packages = PackageDefinitions.getInstance(),\n ignoredLinkedPackages,\n gitRootPath,\n } = options;\n\n // First we discover the dependencies for the app.\n const appMap = await findPackagesFromPath({\n paths: [appPath, ...additionalPaths],\n packages,\n gitRootPath,\n useStrictVersioning,\n });\n\n // Next, we iterate through linked paths to inject them into the packageMap.\n for (const linkedPath of linkedPaths) {\n await linkPath({ linkedPath, appMap, packages, ignoredLinkedPackages });\n }\n\n // Finally we condense into a resolve map.\n return convertToResolveMap({ appMap, paths: [appPath, ...additionalPaths] });\n}\n"]}
1
+ {"version":3,"file":"createResolveMap.js","sourceRoot":"","sources":["../../src/createResolveMap/createResolveMap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAOC,EACD,OAEC;IAED,MAAM,EACJ,OAAO,EACP,eAAe,GAAG,EAAE,EACpB,WAAW,GAAG,EAAE,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,GACZ,GAAG,OAAO,CAAC;IAEZ,kDAAkD;IAClD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC;QACE,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,eAAe,CAAC;QACpC,WAAW;QACX,mBAAmB;KACpB,EACD,OAAO,CACR,CAAC;IAEF,4EAA4E;IAC5E,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;QACpC,MAAM,QAAQ,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,qBAAqB,EAAE,EAAE,OAAO,CAAC,CAAC;KACxE;IAED,0CAA0C;IAC1C,OAAO,mBAAmB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;AAC/E,CAAC","sourcesContent":["import type { ResolveMap } from './ResolveMap.js';\nimport { findPackagesFromPath } from './findPackagesFromPath.js';\nimport { convertToResolveMap } from './convertToResolveMap.js';\nimport { linkPath } from './linkPath.js';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\n\n/**\n * Create a resolve map for a given app path. We do this by walking the dependency tree\n * of the app to build a map of all packages and their dependencies. We then sort the\n * dependencies by the number of other packages that depend on them. The package with the\n * most dependencies is considered the dominant version and is the one that will be used\n * by the bundler. Once this has been resolved, linkedPaths are evaluated separately by\n * discovering their dependencies and redirecting any existing dependencies to the linked\n * package. Transitive dependencies of the linked package are validated and any dependencies\n * which aren't already in the resolve map are added as scoped versions.\n */\nexport async function createResolveMap(\n options: {\n appPath: string;\n additionalPaths?: string[];\n linkedPaths?: string[];\n ignoredLinkedPackages?: string[];\n gitRootPath?: string;\n useStrictVersioning?: boolean;\n },\n context: {\n packages: PackageDefinitionsCache;\n },\n): Promise<ResolveMap> {\n const {\n appPath,\n additionalPaths = [],\n linkedPaths = [],\n useStrictVersioning,\n ignoredLinkedPackages,\n gitRootPath,\n } = options;\n\n // First we discover the dependencies for the app.\n const appMap = await findPackagesFromPath(\n {\n paths: [appPath, ...additionalPaths],\n gitRootPath,\n useStrictVersioning,\n },\n context,\n );\n\n // Next, we iterate through linked paths to inject them into the packageMap.\n for (const linkedPath of linkedPaths) {\n await linkPath({ linkedPath, appMap, ignoredLinkedPackages }, context);\n }\n\n // Finally we condense into a resolve map.\n return convertToResolveMap({ appMap, paths: [appPath, ...additionalPaths] });\n}\n"]}
@@ -57,13 +57,12 @@ function trackEntry(entry, changes) {
57
57
  }
58
58
  }
59
59
  function toPackageMap(resolveMap) {
60
- var _a;
61
60
  const packageMap = {};
62
61
  const entriesToAdd = Object.values(resolveMap);
63
62
  while (entriesToAdd.length) {
64
63
  const entry = entriesToAdd.pop();
65
64
  const { scopedVersions, ...rest } = entry;
66
- const versions = (packageMap[_a = entry.name] || (packageMap[_a] = {}));
65
+ const versions = (packageMap[entry.name] ??= {});
67
66
  versions[entry.version] = rest;
68
67
  if (scopedVersions) {
69
68
  entriesToAdd.push(...Object.values(scopedVersions));
@@ -1 +1 @@
1
- {"version":3,"file":"diffResolveMaps.js","sourceRoot":"","sources":["../../src/createResolveMap/diffResolveMaps.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageMap } from './PackageMap.js';\nimport type { ResolveMap } from './ResolveMap.js';\nimport type { ResolveMapEntry } from './ResolveMapEntry.js';\n\nexport interface DiffResolveMapsChanges {\n linked: string[];\n internal: string[];\n external: string[];\n}\n\nexport interface DiffResolveMapsStats {\n added: DiffResolveMapsChanges;\n removed: DiffResolveMapsChanges;\n}\n\nexport function diffResolveMaps(options: { before: ResolveMap; after: ResolveMap }) {\n const { before, after } = options;\n const stats: DiffResolveMapsStats = {\n added: {\n linked: [],\n internal: [],\n external: [],\n },\n\n removed: {\n linked: [],\n internal: [],\n external: [],\n },\n };\n\n const oldPackageMap = toPackageMap(before);\n const newPackageMap = toPackageMap(after);\n\n // We will traverse the entries in the new list to compare with the old list. As we find entries that exist in the old,\n // we will remove them from the old. This will leave the old list with only entries that were removed.\n for (const [name, newVersions] of Object.entries(newPackageMap)) {\n const oldVersions = oldPackageMap[name];\n\n for (const [version, entry] of Object.entries(newVersions)) {\n if (!oldVersions) {\n trackEntry(entry, stats.added);\n } else if (!oldVersions[version]) {\n trackEntry(entry, stats.added);\n } else {\n delete oldVersions[version];\n }\n }\n\n if (oldVersions) {\n for (const entry of Object.values(oldVersions)) {\n trackEntry(entry, stats.removed);\n }\n\n delete oldPackageMap[name];\n }\n }\n\n // Iterate through the remaining entries in the old list to find any that were removed.\n for (const oldVersions of Object.values(oldPackageMap)) {\n for (const entry of Object.values(oldVersions)) {\n trackEntry(entry, stats.removed);\n }\n }\n\n return stats;\n}\n\nfunction trackEntry(entry: ResolveMapEntry, changes: DiffResolveMapsChanges) {\n const entryId = `${entry.name}@${entry.version}`;\n\n if (entry.isLinked) {\n changes.linked.push(entryId);\n } else if (entry.isExternal) {\n changes.external.push(entryId);\n } else {\n changes.internal.push(entryId);\n }\n}\n\nfunction toPackageMap(resolveMap: ResolveMap): PackageMap {\n const packageMap: PackageMap = {};\n const entriesToAdd = Object.values(resolveMap);\n\n while (entriesToAdd.length) {\n const entry = entriesToAdd.pop() as ResolveMapEntry;\n const { scopedVersions, ...rest } = entry;\n\n const versions = (packageMap[entry.name] ||= {});\n\n versions[entry.version] = rest;\n\n if (scopedVersions) {\n entriesToAdd.push(...Object.values(scopedVersions));\n }\n }\n\n return packageMap;\n}\n"]}
1
+ {"version":3,"file":"diffResolveMaps.js","sourceRoot":"","sources":["../../src/createResolveMap/diffResolveMaps.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,eAAe,CAAC,OAAkD;IAChF,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAClC,MAAM,KAAK,GAAyB;QAClC,KAAK,EAAE;YACL,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,EAAE;SACb;QAED,OAAO,EAAE;YACP,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,EAAE;SACb;KACF,CAAC;IAEF,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAE1C,uHAAuH;IACvH,sGAAsG;IACtG,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;QAC/D,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAExC,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YAC1D,IAAI,CAAC,WAAW,EAAE;gBAChB,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;aAChC;iBAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;gBAChC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;aAChC;iBAAM;gBACL,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;aAC7B;SACF;QAED,IAAI,WAAW,EAAE;YACf,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;gBAC9C,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;aAClC;YAED,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;SAC5B;KACF;IAED,uFAAuF;IACvF,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;QACtD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;YAC9C,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;SAClC;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,KAAsB,EAAE,OAA+B;IACzE,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;IAEjD,IAAI,KAAK,CAAC,QAAQ,EAAE;QAClB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC9B;SAAM,IAAI,KAAK,CAAC,UAAU,EAAE;QAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAChC;SAAM;QACL,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAChC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,UAAsB;IAC1C,MAAM,UAAU,GAAe,EAAE,CAAC;IAClC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAE/C,OAAO,YAAY,CAAC,MAAM,EAAE;QAC1B,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,EAAqB,CAAC;QACpD,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;QAE1C,MAAM,QAAQ,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAEjD,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;QAE/B,IAAI,cAAc,EAAE;YAClB,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;SACrD;KACF;IAED,OAAO,UAAU,CAAC;AACpB,CAAC","sourcesContent":["import type { PackageMap } from './PackageMap.js';\nimport type { ResolveMap } from './ResolveMap.js';\nimport type { ResolveMapEntry } from './ResolveMapEntry.js';\n\nexport interface DiffResolveMapsChanges {\n linked: string[];\n internal: string[];\n external: string[];\n}\n\nexport interface DiffResolveMapsStats {\n added: DiffResolveMapsChanges;\n removed: DiffResolveMapsChanges;\n}\n\nexport function diffResolveMaps(options: { before: ResolveMap; after: ResolveMap }) {\n const { before, after } = options;\n const stats: DiffResolveMapsStats = {\n added: {\n linked: [],\n internal: [],\n external: [],\n },\n\n removed: {\n linked: [],\n internal: [],\n external: [],\n },\n };\n\n const oldPackageMap = toPackageMap(before);\n const newPackageMap = toPackageMap(after);\n\n // We will traverse the entries in the new list to compare with the old list. As we find entries that exist in the old,\n // we will remove them from the old. This will leave the old list with only entries that were removed.\n for (const [name, newVersions] of Object.entries(newPackageMap)) {\n const oldVersions = oldPackageMap[name];\n\n for (const [version, entry] of Object.entries(newVersions)) {\n if (!oldVersions) {\n trackEntry(entry, stats.added);\n } else if (!oldVersions[version]) {\n trackEntry(entry, stats.added);\n } else {\n delete oldVersions[version];\n }\n }\n\n if (oldVersions) {\n for (const entry of Object.values(oldVersions)) {\n trackEntry(entry, stats.removed);\n }\n\n delete oldPackageMap[name];\n }\n }\n\n // Iterate through the remaining entries in the old list to find any that were removed.\n for (const oldVersions of Object.values(oldPackageMap)) {\n for (const entry of Object.values(oldVersions)) {\n trackEntry(entry, stats.removed);\n }\n }\n\n return stats;\n}\n\nfunction trackEntry(entry: ResolveMapEntry, changes: DiffResolveMapsChanges) {\n const entryId = `${entry.name}@${entry.version}`;\n\n if (entry.isLinked) {\n changes.linked.push(entryId);\n } else if (entry.isExternal) {\n changes.external.push(entryId);\n } else {\n changes.internal.push(entryId);\n }\n}\n\nfunction toPackageMap(resolveMap: ResolveMap): PackageMap {\n const packageMap: PackageMap = {};\n const entriesToAdd = Object.values(resolveMap);\n\n while (entriesToAdd.length) {\n const entry = entriesToAdd.pop() as ResolveMapEntry;\n const { scopedVersions, ...rest } = entry;\n\n const versions = (packageMap[entry.name] ??= {});\n\n versions[entry.version] = rest;\n\n if (scopedVersions) {\n entriesToAdd.push(...Object.values(scopedVersions));\n }\n }\n\n return packageMap;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { PackageDefinitions } from '../PackageDefinitions.js';
1
+ import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';
2
2
  import type { PackageMap } from './PackageMap.js';
3
3
  /**
4
4
  * Find all packages from a given path. We do this by walking the dependency tree
@@ -9,10 +9,6 @@ export declare function findPackagesFromPath(options: {
9
9
  * Paths to search for package.json files and traverse their dependencies to build a PackageMap.
10
10
  */
11
11
  paths: string[];
12
- /**
13
- * Package cache.
14
- */
15
- packages?: PackageDefinitions;
16
12
  /**
17
13
  * Where to stop looking for packages. If not specified, will look for a git root. If one is not
18
14
  * found, will use the first path in the paths array.
@@ -28,5 +24,10 @@ export declare function findPackagesFromPath(options: {
28
24
  * If true will glob for all package.json files in the path and add them to the map.
29
25
  **/
30
26
  discoverPackages?: boolean;
27
+ }, context: {
28
+ /**
29
+ * Package cache.
30
+ */
31
+ packages: PackageDefinitionsCache;
31
32
  }): Promise<PackageMap>;
32
33
  //# sourceMappingURL=findPackagesFromPath.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"findPackagesFromPath.d.ts","sourceRoot":"","sources":["../../src/createResolveMap/findPackagesFromPath.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD;;OAEG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAE9B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;QAII;IACJ,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;QAEI;IACJ,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAAC,UAAU,CAAC,CAuFtB"}
1
+ {"version":3,"file":"findPackagesFromPath.d.ts","sourceRoot":"","sources":["../../src/createResolveMap/findPackagesFromPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAe,MAAM,6BAA6B,CAAC;AAOxF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE;IACP;;OAEG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;QAII;IACJ,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;QAEI;IACJ,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,EACD,OAAO,EAAE;IACP;;OAEG;IACH,QAAQ,EAAE,uBAAuB,CAAC;CACnC,GACA,OAAO,CAAC,UAAU,CAAC,CA2FrB"}
@@ -2,15 +2,15 @@ import { isFolder } from '@ms-cloudpack/path-utilities';
2
2
  import glob from 'fast-glob';
3
3
  import { dirname, join } from 'path';
4
4
  import { findGitRoot } from 'workspace-tools';
5
- import { PackageDefinitions } from '../PackageDefinitions.js';
6
5
  import { findPackagePath } from '../findPackagePath.js';
7
6
  import { isExternalPackage } from '../isExternalPackage.js';
8
7
  /**
9
8
  * Find all packages from a given path. We do this by walking the dependency tree
10
9
  * of the app to build a map of all packages and their dependencies.
11
10
  */
12
- export async function findPackagesFromPath(options) {
13
- const { paths, discoverPackages, useStrictVersioning, packages = PackageDefinitions.getInstance() } = options;
11
+ export async function findPackagesFromPath(options, context) {
12
+ const { paths, discoverPackages, useStrictVersioning } = options;
13
+ const { packages } = context;
14
14
  const packageMap = {};
15
15
  const visitedPaths = new Set();
16
16
  const pathsToVisit = [];
@@ -57,7 +57,7 @@ export async function findPackagesFromPath(options) {
57
57
  versionRequirement: useStrictVersioning && !isPeerDependency ? versionRequirement : undefined,
58
58
  cwd: packagePath,
59
59
  gitRootPath,
60
- });
60
+ }, context);
61
61
  if (dependencyPath) {
62
62
  const dependencyDefinition = await packages.get(dependencyPath);
63
63
  if (dependencyDefinition?.name && dependencyDefinition.version) {
@@ -84,14 +84,14 @@ export async function findPackagesFromPath(options) {
84
84
  function initPackageEntry(options) {
85
85
  const { path = '', packageMap, definition } = options;
86
86
  const { name = '_no_name_', version = '*' } = definition;
87
- const mapEntry = (packageMap[name] || (packageMap[name] = {}));
88
- const entry = (mapEntry[version] || (mapEntry[version] = {
87
+ const mapEntry = (packageMap[name] ??= {});
88
+ const entry = (mapEntry[version] ??= {
89
89
  name,
90
90
  version,
91
91
  path,
92
92
  dependencies: {},
93
93
  requiredBy: {},
94
- }));
94
+ });
95
95
  if (isExternalPackage(path)) {
96
96
  entry.isExternal = true;
97
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"findPackagesFromPath.js","sourceRoot":"","sources":["../../src/createResolveMap/findPackagesFromPath.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageJson } from '@ms-cloudpack/bundler-types';\nimport { isFolder } from '@ms-cloudpack/path-utilities';\nimport glob from 'fast-glob';\nimport { dirname, join } from 'path';\nimport { findGitRoot } from 'workspace-tools';\nimport { PackageDefinitions } from '../PackageDefinitions.js';\nimport { findPackagePath } from '../findPackagePath.js';\nimport { isExternalPackage } from '../isExternalPackage.js';\nimport type { PackageMap } from './PackageMap.js';\nimport type { ResolveMapEntry } from './ResolveMapEntry.js';\n\n/**\n * Find all packages from a given path. We do this by walking the dependency tree\n * of the app to build a map of all packages and their dependencies.\n */\nexport async function findPackagesFromPath(options: {\n /**\n * Paths to search for package.json files and traverse their dependencies to build a PackageMap.\n */\n paths: string[];\n\n /**\n * Package cache.\n */\n packages?: PackageDefinitions;\n\n /**\n * Where to stop looking for packages. If not specified, will look for a git root. If one is not\n * found, will use the first path in the paths array.\n */\n gitRootPath?: string;\n\n /**\n * If true will check semver requirements for all dependencies. Note that if the workspace\n * uses resolutions to force a particular version of a dependency, this could cause a failure.\n * TODO: read resolutions from package.json and use them to allow mismatches.\n **/\n useStrictVersioning?: boolean;\n\n /**\n * If true will glob for all package.json files in the path and add them to the map.\n **/\n discoverPackages?: boolean;\n}): Promise<PackageMap> {\n const { paths, discoverPackages, useStrictVersioning, packages = PackageDefinitions.getInstance() } = options;\n const packageMap: PackageMap = {};\n const visitedPaths = new Set<string>();\n const pathsToVisit: string[] = [];\n\n for (const path of paths) {\n if (!(await isFolder(path))) {\n throw new Error(`Path ${path} is not a folder.`);\n }\n\n let { gitRootPath } = options;\n\n if (!gitRootPath) {\n try {\n gitRootPath = findGitRoot(path);\n } catch (e) {\n /* ignore */\n }\n }\n\n if (discoverPackages) {\n const packagePaths = await glob('**/package.json', { cwd: path, ignore: ['**/node_modules/**'] });\n\n pathsToVisit.push(...packagePaths.map((p) => dirname(join(path, p))));\n } else {\n pathsToVisit.push(path);\n }\n\n while (pathsToVisit.length) {\n const packagePath = pathsToVisit.shift();\n\n if (packagePath && !visitedPaths.has(packagePath)) {\n visitedPaths.add(packagePath);\n\n const packageDefinition = await packages.get(packagePath);\n\n if (!packageDefinition) {\n throw new Error(`Could not find package definition at \"${packagePath}\".`);\n }\n\n if (packageDefinition?.name && packageDefinition.version) {\n const { name, version } = packageDefinition;\n const entry = initPackageEntry({ path: packagePath, packageMap, definition: packageDefinition });\n\n // Add all dependencies to the list of paths to visit.\n const dependencies = {\n ...(packageDefinition.dependencies || {}),\n ...(packageDefinition.peerDependencies || {}),\n } as Record<string, string>;\n\n for (const [dependencyName, versionRequirement] of Object.entries(dependencies)) {\n const isPeerDependency = !!packageDefinition.peerDependencies?.[dependencyName];\n\n const dependencyPath = await findPackagePath({\n dependencyName,\n versionRequirement: useStrictVersioning && !isPeerDependency ? versionRequirement : undefined,\n cwd: packagePath,\n gitRootPath,\n });\n\n if (dependencyPath) {\n const dependencyDefinition = await packages.get(dependencyPath);\n if (dependencyDefinition?.name && dependencyDefinition.version) {\n const dependencyEntry = initPackageEntry({\n path: dependencyPath,\n packageMap,\n definition: dependencyDefinition,\n });\n\n entry.dependencies[dependencyDefinition.name] = dependencyDefinition.version;\n dependencyEntry.requiredBy[`${name}@${version}`] = versionRequirement;\n\n pathsToVisit.push(dependencyPath);\n }\n } else if (!isPeerDependency) {\n throw new Error(\n `Could not find dependency \"${dependencyName}\" at \"${packagePath}\" with version requirement \"${versionRequirement}\".`,\n );\n }\n }\n }\n }\n }\n }\n\n return packageMap;\n}\n\nfunction initPackageEntry(options: { path: string; packageMap: PackageMap; definition: PackageJson }): ResolveMapEntry {\n const { path = '', packageMap, definition } = options;\n const { name = '_no_name_', version = '*' } = definition;\n\n const mapEntry = (packageMap[name] ||= {}) as Record<string, ResolveMapEntry>;\n const entry = (mapEntry[version] ||= {\n name,\n version,\n path,\n dependencies: {},\n requiredBy: {},\n });\n\n if (isExternalPackage(path)) {\n entry.isExternal = true;\n }\n\n return entry;\n}\n"]}
1
+ {"version":3,"file":"findPackagesFromPath.js","sourceRoot":"","sources":["../../src/createResolveMap/findPackagesFromPath.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitionsCache, PackageJson } from '@ms-cloudpack/bundler-types';\nimport { isFolder } from '@ms-cloudpack/path-utilities';\nimport glob from 'fast-glob';\nimport { dirname, join } from 'path';\nimport { findGitRoot } from 'workspace-tools';\nimport { findPackagePath } from '../findPackagePath.js';\nimport { isExternalPackage } from '../isExternalPackage.js';\nimport type { PackageMap } from './PackageMap.js';\nimport type { ResolveMapEntry } from './ResolveMapEntry.js';\n\n/**\n * Find all packages from a given path. We do this by walking the dependency tree\n * of the app to build a map of all packages and their dependencies.\n */\nexport async function findPackagesFromPath(\n options: {\n /**\n * Paths to search for package.json files and traverse their dependencies to build a PackageMap.\n */\n paths: string[];\n\n /**\n * Where to stop looking for packages. If not specified, will look for a git root. If one is not\n * found, will use the first path in the paths array.\n */\n gitRootPath?: string;\n\n /**\n * If true will check semver requirements for all dependencies. Note that if the workspace\n * uses resolutions to force a particular version of a dependency, this could cause a failure.\n * TODO: read resolutions from package.json and use them to allow mismatches.\n **/\n useStrictVersioning?: boolean;\n\n /**\n * If true will glob for all package.json files in the path and add them to the map.\n **/\n discoverPackages?: boolean;\n },\n context: {\n /**\n * Package cache.\n */\n packages: PackageDefinitionsCache;\n },\n): Promise<PackageMap> {\n const { paths, discoverPackages, useStrictVersioning } = options;\n const { packages } = context;\n const packageMap: PackageMap = {};\n const visitedPaths = new Set<string>();\n const pathsToVisit: string[] = [];\n\n for (const path of paths) {\n if (!(await isFolder(path))) {\n throw new Error(`Path ${path} is not a folder.`);\n }\n\n let { gitRootPath } = options;\n\n if (!gitRootPath) {\n try {\n gitRootPath = findGitRoot(path);\n } catch (e) {\n /* ignore */\n }\n }\n\n if (discoverPackages) {\n const packagePaths = await glob('**/package.json', { cwd: path, ignore: ['**/node_modules/**'] });\n\n pathsToVisit.push(...packagePaths.map((p) => dirname(join(path, p))));\n } else {\n pathsToVisit.push(path);\n }\n\n while (pathsToVisit.length) {\n const packagePath = pathsToVisit.shift();\n\n if (packagePath && !visitedPaths.has(packagePath)) {\n visitedPaths.add(packagePath);\n\n const packageDefinition = await packages.get(packagePath);\n\n if (!packageDefinition) {\n throw new Error(`Could not find package definition at \"${packagePath}\".`);\n }\n\n if (packageDefinition?.name && packageDefinition.version) {\n const { name, version } = packageDefinition;\n const entry = initPackageEntry({ path: packagePath, packageMap, definition: packageDefinition });\n\n // Add all dependencies to the list of paths to visit.\n const dependencies = {\n ...(packageDefinition.dependencies || {}),\n ...(packageDefinition.peerDependencies || {}),\n } as Record<string, string>;\n\n for (const [dependencyName, versionRequirement] of Object.entries(dependencies)) {\n const isPeerDependency = !!packageDefinition.peerDependencies?.[dependencyName];\n\n const dependencyPath = await findPackagePath(\n {\n dependencyName,\n versionRequirement: useStrictVersioning && !isPeerDependency ? versionRequirement : undefined,\n cwd: packagePath,\n gitRootPath,\n },\n context,\n );\n\n if (dependencyPath) {\n const dependencyDefinition = await packages.get(dependencyPath);\n if (dependencyDefinition?.name && dependencyDefinition.version) {\n const dependencyEntry = initPackageEntry({\n path: dependencyPath,\n packageMap,\n definition: dependencyDefinition,\n });\n\n entry.dependencies[dependencyDefinition.name] = dependencyDefinition.version;\n dependencyEntry.requiredBy[`${name}@${version}`] = versionRequirement;\n\n pathsToVisit.push(dependencyPath);\n }\n } else if (!isPeerDependency) {\n throw new Error(\n `Could not find dependency \"${dependencyName}\" at \"${packagePath}\" with version requirement \"${versionRequirement}\".`,\n );\n }\n }\n }\n }\n }\n }\n\n return packageMap;\n}\n\nfunction initPackageEntry(options: { path: string; packageMap: PackageMap; definition: PackageJson }): ResolveMapEntry {\n const { path = '', packageMap, definition } = options;\n const { name = '_no_name_', version = '*' } = definition;\n\n const mapEntry = (packageMap[name] ??= {}) as Record<string, ResolveMapEntry>;\n const entry = (mapEntry[version] ??= {\n name,\n version,\n path,\n dependencies: {},\n requiredBy: {},\n });\n\n if (isExternalPackage(path)) {\n entry.isExternal = true;\n }\n\n return entry;\n}\n"]}
@@ -1,5 +1,5 @@
1
- import type { PackageDefinitions } from '../PackageDefinitions.js';
2
1
  import type { PackageMap } from './PackageMap.js';
2
+ import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';
3
3
  /**
4
4
  * Given a linked path, an appMap, find packages from the linked path and add them to the appMap.
5
5
  * @param options
@@ -7,7 +7,8 @@ import type { PackageMap } from './PackageMap.js';
7
7
  export declare function linkPath(options: {
8
8
  linkedPath: string;
9
9
  appMap: PackageMap;
10
- packages: PackageDefinitions;
11
10
  ignoredLinkedPackages?: string[];
11
+ }, context: {
12
+ packages: PackageDefinitionsCache;
12
13
  }): Promise<void>;
13
14
  //# sourceMappingURL=linkPath.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"linkPath.d.ts","sourceRoot":"","sources":["../../src/createResolveMap/linkPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAOlD;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC,iBAuFA"}
1
+ {"version":3,"file":"linkPath.d.ts","sourceRoot":"","sources":["../../src/createResolveMap/linkPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAMlD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAE3E;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE;IACP,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC,EACD,OAAO,EAAE;IACP,QAAQ,EAAE,uBAAuB,CAAC;CACnC,iBA0FF"}
@@ -6,13 +6,12 @@ import { parseRequiredBy } from './parseRequiredBy.js';
6
6
  * Given a linked path, an appMap, find packages from the linked path and add them to the appMap.
7
7
  * @param options
8
8
  */
9
- export async function linkPath(options) {
10
- const { linkedPath, appMap, packages, ignoredLinkedPackages } = options;
9
+ export async function linkPath(options, context) {
10
+ const { linkedPath, appMap, ignoredLinkedPackages } = options;
11
11
  const linkMap = await findPackagesFromPath({
12
12
  paths: [linkedPath],
13
- packages,
14
13
  discoverPackages: true,
15
- });
14
+ }, context);
16
15
  const entriesToLink = [];
17
16
  // Iterate through the linkMap, looking for internal packages to link to the appMap.
18
17
  for (const [packageName, packageVersions] of Object.entries(linkMap)) {
@@ -38,15 +37,17 @@ export async function linkPath(options) {
38
37
  for (const linkedEntry of entriesToLink) {
39
38
  const { name } = linkedEntry;
40
39
  const existingEntries = Object.values(appMap[name]);
41
- linkedEntry.requiredBy = existingEntries.reduce((acc, entry) => {
40
+ linkedEntry.requiredBy = {};
41
+ for (const entry of existingEntries) {
42
42
  for (const [requiredById, requirement] of Object.entries(entry.requiredBy)) {
43
43
  const [requiredByName] = parseRequiredBy(requiredById);
44
44
  const linkedParentEntry = Object.values(linkMap[requiredByName] || {})[0];
45
- acc[linkedParentEntry?.isLinked ? `${linkedParentEntry.name}@${linkedParentEntry.version}` : requiredById] =
46
- requirement;
45
+ const requiredByKey = linkedParentEntry?.isLinked
46
+ ? `${linkedParentEntry.name}@${linkedParentEntry.version}`
47
+ : requiredById;
48
+ linkedEntry.requiredBy[requiredByKey] = requirement;
47
49
  }
48
- return acc;
49
- }, {});
50
+ }
50
51
  }
51
52
  for (const linkedEntry of entriesToLink) {
52
53
  const { name } = linkedEntry;
@@ -73,7 +74,7 @@ export async function linkPath(options) {
73
74
  }
74
75
  // Once all linked entries have been added, ensure their dependencies are resolved.
75
76
  for (const linkedEntry of entriesToLink) {
76
- await addLinkedEntryDependencies({ linkedEntry, appMap: appMap, linkMap, packages });
77
+ await addLinkedEntryDependencies({ linkedEntry, appMap: appMap, linkMap }, context);
77
78
  }
78
79
  }
79
80
  //# sourceMappingURL=linkPath.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"linkPath.js","sourceRoot":"","sources":["../../src/createResolveMap/linkPath.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitions } from '../PackageDefinitions.js';\nimport type { PackageMap } from './PackageMap.js';\nimport { findPackagesFromPath } from './findPackagesFromPath.js';\nimport { addLinkedEntryDependencies } from './addLinkedEntryDependencies.js';\nimport type { ResolveMapEntry } from './ResolveMapEntry.js';\nimport { detachEntry } from './detachEntry.js';\nimport { parseRequiredBy } from './parseRequiredBy.js';\n\n/**\n * Given a linked path, an appMap, find packages from the linked path and add them to the appMap.\n * @param options\n */\nexport async function linkPath(options: {\n linkedPath: string;\n appMap: PackageMap;\n packages: PackageDefinitions;\n ignoredLinkedPackages?: string[];\n}) {\n const { linkedPath, appMap, packages, ignoredLinkedPackages } = options;\n const linkMap = await findPackagesFromPath({\n paths: [linkedPath],\n packages,\n discoverPackages: true,\n });\n const entriesToLink: ResolveMapEntry[] = [];\n\n // Iterate through the linkMap, looking for internal packages to link to the appMap.\n for (const [packageName, packageVersions] of Object.entries(linkMap)) {\n const appEntries = Object.values(appMap[packageName] || {});\n\n if (appEntries.length) {\n const linkedEntries = Object.values(packageVersions);\n\n // For linked dependencies, we don't want multiple versions referenced. Remove them\n // all and add them in a second pass.\n if (\n linkedEntries.length == 1 &&\n !linkedEntries[0].isExternal &&\n (!ignoredLinkedPackages || ignoredLinkedPackages.indexOf(packageName) === -1)\n ) {\n const linkedEntry = linkedEntries[0];\n\n // Linked packages use an asterisk for the version description. This keeps it semver compatible with\n // anything.\n linkedEntry.version += '-linked';\n linkedEntry.isLinked = true;\n\n entriesToLink.push(linkedEntry);\n }\n }\n }\n\n // We now have a list of paths to link. Iterate through them, add them to the appMap,\n // and ensure their dependencies are satisfied.\n for (const linkedEntry of entriesToLink) {\n const { name } = linkedEntry;\n const existingEntries = Object.values(appMap[name]);\n\n linkedEntry.requiredBy = existingEntries.reduce((acc, entry) => {\n for (const [requiredById, requirement] of Object.entries(entry.requiredBy)) {\n const [requiredByName] = parseRequiredBy(requiredById);\n const linkedParentEntry = Object.values(linkMap[requiredByName] || {})[0];\n\n acc[linkedParentEntry?.isLinked ? `${linkedParentEntry.name}@${linkedParentEntry.version}` : requiredById] =\n requirement;\n }\n\n return acc;\n }, {} as Record<string, string>);\n }\n\n for (const linkedEntry of entriesToLink) {\n const { name } = linkedEntry;\n const existingEntries = Object.values(appMap[name]);\n\n // We need to detach all existing entries from the appMap, along with their dependences. Note - detaching just means that\n // we disconnect the entry from its parent and children. If the children have no other parents, we disconnect them as well\n // and recurse through their children.\n for (const existingEntry of existingEntries) {\n detachEntry({ appMap, entry: existingEntry });\n }\n\n // Attach the linked entry to the parents' dependencies.\n for (const requiredById of Object.keys(linkedEntry.requiredBy)) {\n const [requiredByName, requiredByVersion] = parseRequiredBy(requiredById);\n let requiredByEntry = appMap[requiredByName][requiredByVersion];\n\n // If we can't find the requiredBy entry, it likely means that the entry was already replaced with a linked entry\n // in the app map. Fall back to the first entry.\n if (!requiredByEntry) {\n requiredByEntry = Object.values(appMap[requiredByName])[0];\n }\n\n requiredByEntry.dependencies[name] = linkedEntry.version;\n }\n\n // Add the linked entry\n appMap[linkedEntry.name] = { [linkedEntry.version]: linkedEntry };\n }\n\n // Once all linked entries have been added, ensure their dependencies are resolved.\n for (const linkedEntry of entriesToLink) {\n await addLinkedEntryDependencies({ linkedEntry, appMap: appMap, linkMap, packages });\n }\n}\n"]}
1
+ {"version":3,"file":"linkPath.js","sourceRoot":"","sources":["../../src/createResolveMap/linkPath.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAIC,EACD,OAEC;IAED,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;IAC9D,MAAM,OAAO,GAAG,MAAM,oBAAoB,CACxC;QACE,KAAK,EAAE,CAAC,UAAU,CAAC;QACnB,gBAAgB,EAAE,IAAI;KACvB,EACD,OAAO,CACR,CAAC;IACF,MAAM,aAAa,GAAsB,EAAE,CAAC;IAE5C,oFAAoF;IACpF,KAAK,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QACpE,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAE5D,IAAI,UAAU,CAAC,MAAM,EAAE;YACrB,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YAErD,mFAAmF;YACnF,qCAAqC;YACrC,IACE,aAAa,CAAC,MAAM,IAAI,CAAC;gBACzB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU;gBAC5B,CAAC,CAAC,qBAAqB,IAAI,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAC7E;gBACA,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBAErC,oGAAoG;gBACpG,YAAY;gBACZ,WAAW,CAAC,OAAO,IAAI,SAAS,CAAC;gBACjC,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAE5B,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACjC;SACF;KACF;IAED,qFAAqF;IACrF,+CAA+C;IAC/C,KAAK,MAAM,WAAW,IAAI,aAAa,EAAE;QACvC,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC;QAC7B,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpD,WAAW,CAAC,UAAU,GAAG,EAAE,CAAC;QAC5B,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE;YACnC,KAAK,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;gBAC1E,MAAM,CAAC,cAAc,CAAC,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;gBACvD,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1E,MAAM,aAAa,GAAG,iBAAiB,EAAE,QAAQ;oBAC/C,CAAC,CAAE,GAAG,iBAAiB,CAAC,IAAI,IAAI,iBAAiB,CAAC,OAAO,EAAY;oBACrE,CAAC,CAAC,YAAY,CAAC;gBACjB,WAAW,CAAC,UAAU,CAAC,aAAsC,CAAC,GAAG,WAAW,CAAC;aAC9E;SACF;KACF;IAED,KAAK,MAAM,WAAW,IAAI,aAAa,EAAE;QACvC,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC;QAC7B,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpD,yHAAyH;QACzH,0HAA0H;QAC1H,sCAAsC;QACtC,KAAK,MAAM,aAAa,IAAI,eAAe,EAAE;YAC3C,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;SAC/C;QAED,wDAAwD;QACxD,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;YAC9D,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;YAC1E,IAAI,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,iBAAiB,CAAC,CAAC;YAEhE,iHAAiH;YACjH,gDAAgD;YAChD,IAAI,CAAC,eAAe,EAAE;gBACpB,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5D;YAED,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC;SAC1D;QAED,uBAAuB;QACvB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;KACnE;IAED,mFAAmF;IACnF,KAAK,MAAM,WAAW,IAAI,aAAa,EAAE;QACvC,MAAM,0BAA0B,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;KACrF;AACH,CAAC","sourcesContent":["import type { PackageMap } from './PackageMap.js';\nimport { findPackagesFromPath } from './findPackagesFromPath.js';\nimport { addLinkedEntryDependencies } from './addLinkedEntryDependencies.js';\nimport type { ResolveMapEntry } from './ResolveMapEntry.js';\nimport { detachEntry } from './detachEntry.js';\nimport { parseRequiredBy } from './parseRequiredBy.js';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\n\n/**\n * Given a linked path, an appMap, find packages from the linked path and add them to the appMap.\n * @param options\n */\nexport async function linkPath(\n options: {\n linkedPath: string;\n appMap: PackageMap;\n ignoredLinkedPackages?: string[];\n },\n context: {\n packages: PackageDefinitionsCache;\n },\n) {\n const { linkedPath, appMap, ignoredLinkedPackages } = options;\n const linkMap = await findPackagesFromPath(\n {\n paths: [linkedPath],\n discoverPackages: true,\n },\n context,\n );\n const entriesToLink: ResolveMapEntry[] = [];\n\n // Iterate through the linkMap, looking for internal packages to link to the appMap.\n for (const [packageName, packageVersions] of Object.entries(linkMap)) {\n const appEntries = Object.values(appMap[packageName] || {});\n\n if (appEntries.length) {\n const linkedEntries = Object.values(packageVersions);\n\n // For linked dependencies, we don't want multiple versions referenced. Remove them\n // all and add them in a second pass.\n if (\n linkedEntries.length == 1 &&\n !linkedEntries[0].isExternal &&\n (!ignoredLinkedPackages || ignoredLinkedPackages.indexOf(packageName) === -1)\n ) {\n const linkedEntry = linkedEntries[0];\n\n // Linked packages use an asterisk for the version description. This keeps it semver compatible with\n // anything.\n linkedEntry.version += '-linked';\n linkedEntry.isLinked = true;\n\n entriesToLink.push(linkedEntry);\n }\n }\n }\n\n // We now have a list of paths to link. Iterate through them, add them to the appMap,\n // and ensure their dependencies are satisfied.\n for (const linkedEntry of entriesToLink) {\n const { name } = linkedEntry;\n const existingEntries = Object.values(appMap[name]);\n\n linkedEntry.requiredBy = {};\n for (const entry of existingEntries) {\n for (const [requiredById, requirement] of Object.entries(entry.requiredBy)) {\n const [requiredByName] = parseRequiredBy(requiredById);\n const linkedParentEntry = Object.values(linkMap[requiredByName] || {})[0];\n const requiredByKey = linkedParentEntry?.isLinked\n ? (`${linkedParentEntry.name}@${linkedParentEntry.version}` as const)\n : requiredById;\n linkedEntry.requiredBy[requiredByKey as `${string}@${string}`] = requirement;\n }\n }\n }\n\n for (const linkedEntry of entriesToLink) {\n const { name } = linkedEntry;\n const existingEntries = Object.values(appMap[name]);\n\n // We need to detach all existing entries from the appMap, along with their dependences. Note - detaching just means that\n // we disconnect the entry from its parent and children. If the children have no other parents, we disconnect them as well\n // and recurse through their children.\n for (const existingEntry of existingEntries) {\n detachEntry({ appMap, entry: existingEntry });\n }\n\n // Attach the linked entry to the parents' dependencies.\n for (const requiredById of Object.keys(linkedEntry.requiredBy)) {\n const [requiredByName, requiredByVersion] = parseRequiredBy(requiredById);\n let requiredByEntry = appMap[requiredByName][requiredByVersion];\n\n // If we can't find the requiredBy entry, it likely means that the entry was already replaced with a linked entry\n // in the app map. Fall back to the first entry.\n if (!requiredByEntry) {\n requiredByEntry = Object.values(appMap[requiredByName])[0];\n }\n\n requiredByEntry.dependencies[name] = linkedEntry.version;\n }\n\n // Add the linked entry\n appMap[linkedEntry.name] = { [linkedEntry.version]: linkedEntry };\n }\n\n // Once all linked entries have been added, ensure their dependencies are resolved.\n for (const linkedEntry of entriesToLink) {\n await addLinkedEntryDependencies({ linkedEntry, appMap: appMap, linkMap }, context);\n }\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';
1
2
  export type FindFileInPackageOptions = {
2
3
  packagePath: string;
3
4
  filePath: string;
@@ -17,5 +18,7 @@ export type FindFileInPackageResult = {
17
18
  * exists, or in internal packages, if `src/index.tsx` exists, then this is a valid candidate. If the file does not
18
19
  * exist, then we should not include it in the exports map.
19
20
  */
20
- export declare function findFileInPackage(options: FindFileInPackageOptions): Promise<FindFileInPackageResult>;
21
+ export declare function findFileInPackage(options: FindFileInPackageOptions, context: {
22
+ packages: PackageDefinitionsCache;
23
+ }): Promise<FindFileInPackageResult>;
21
24
  //# sourceMappingURL=findFileInPackage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"findFileInPackage.d.ts","sourceRoot":"","sources":["../src/findFileInPackage.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,wBAAwB,GAAG;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;;;;;;;GASG;AAEH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAkF3G"}
1
+ {"version":3,"file":"findFileInPackage.d.ts","sourceRoot":"","sources":["../src/findFileInPackage.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAE3E,MAAM,MAAM,wBAAwB,GAAG;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;;;;;;;GASG;AAEH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,EACjC,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAA;CAAE,GAC7C,OAAO,CAAC,uBAAuB,CAAC,CAqFlC"}
@@ -14,7 +14,7 @@ import { flattenExportsMap } from './flattenExportsMap.js';
14
14
  * exists, or in internal packages, if `src/index.tsx` exists, then this is a valid candidate. If the file does not
15
15
  * exist, then we should not include it in the exports map.
16
16
  */
17
- export async function findFileInPackage(options) {
17
+ export async function findFileInPackage(options, context) {
18
18
  const { packagePath } = options;
19
19
  let filePath = safeRelativePath(options.filePath);
20
20
  let sourcePath;
@@ -57,7 +57,7 @@ export async function findFileInPackage(options) {
57
57
  const result = {};
58
58
  if (isNestedPackageDefinition) {
59
59
  const nestedDefinitionPath = path.dirname(path.join(packagePath, filePath));
60
- const exportsMap = await getExportsMap(nestedDefinitionPath);
60
+ const exportsMap = await getExportsMap({ packagePath: nestedDefinitionPath }, context);
61
61
  const entryPath = flattenExportsMap(exportsMap)['.'];
62
62
  if (entryPath) {
63
63
  typesPath = flattenExportsMap(exportsMap, { conditions: ['types'] })['.'];
@@ -65,7 +65,7 @@ export async function findFileInPackage(options) {
65
65
  ...(await findFileInPackage({
66
66
  packagePath,
67
67
  filePath: safeRelativePath(path.relative(packagePath, path.join(nestedDefinitionPath, entryPath))),
68
- })),
68
+ }, context)),
69
69
  typesPath: typesPath && safeRelativePath(path.relative(packagePath, path.join(nestedDefinitionPath, typesPath))),
70
70
  };
71
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"findFileInPackage.js","sourceRoot":"","sources":["../src/findFileInPackage.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\nimport { intermediateToSourcePath, sourceToIntermediatePath, isFile } from '@ms-cloudpack/path-utilities';\nimport { isExternalPackage } from './isExternalPackage.js';\nimport { safeRelativePath } from '@ms-cloudpack/path-string-parsing';\nimport { getExportsMap } from './getExportsMap.js';\nimport { flattenExportsMap } from './flattenExportsMap.js';\n\nexport type FindFileInPackageOptions = {\n packagePath: string;\n filePath: string;\n};\n\nexport type FindFileInPackageResult = {\n filePath?: string;\n typesPath?: string;\n sourcePath?: string;\n};\n\n/**\n * Given a requested partial filePath, resolves the relative path intermediate path if the file exists, with special\n * consideration for internal packages, which may not have intermediate files but only source files. Paths returned\n * are always relative and start with `./`.\n *\n * This helper is used in deriving if the given package.json entries are actual validate candidates when constructing an\n * exports map from existing metadata. For example, a package.json may list `main` as `lib/index.js`. If this file\n * exists, or in internal packages, if `src/index.tsx` exists, then this is a valid candidate. If the file does not\n * exist, then we should not include it in the exports map.\n */\n\nexport async function findFileInPackage(options: FindFileInPackageOptions): Promise<FindFileInPackageResult> {\n const { packagePath } = options;\n let filePath: string | undefined = safeRelativePath(options.filePath);\n let sourcePath: string | undefined;\n let typesPath: string | undefined;\n const isInternal = !isExternalPackage(packagePath);\n\n const candidates = [\n filePath,\n filePath + '.js',\n safeRelativePath(path.join(filePath, 'index.js')),\n safeRelativePath(path.join(filePath, 'package.json')),\n ];\n\n filePath = undefined;\n for (const candidate of candidates) {\n if (await isFile(path.join(packagePath, candidate))) {\n filePath = candidate;\n break;\n }\n }\n\n // For internal packages, try and find source/typings and convert to intermediate (which may be missing.)\n if (isInternal) {\n for (const candidate of candidates) {\n const intermediateCandidate = intermediateToSourcePath(candidate, packagePath);\n if (intermediateCandidate && (await isFile(path.join(packagePath, intermediateCandidate)))) {\n sourcePath = intermediateCandidate;\n break;\n }\n }\n\n // If we couldn't find a unique source file, stick with the resolved intermediate file as the only known truth.\n if (filePath && sourcePath === filePath) {\n sourcePath = undefined;\n }\n\n if (sourcePath) {\n if (!filePath) {\n filePath = sourceToIntermediatePath(sourcePath);\n }\n\n typesPath = filePath && path.extname(filePath) === '.js' ? filePath.replace(/\\.js$/, '.d.ts') : undefined;\n }\n }\n\n const isNestedPackageDefinition =\n filePath && path.basename(filePath) === 'package.json' && path.basename(options.filePath) !== 'package.json';\n const result: FindFileInPackageResult = {};\n\n if (isNestedPackageDefinition) {\n const nestedDefinitionPath = path.dirname(path.join(packagePath, filePath as string));\n const exportsMap = await getExportsMap(nestedDefinitionPath);\n const entryPath = flattenExportsMap(exportsMap)['.'];\n\n if (entryPath) {\n typesPath = flattenExportsMap(exportsMap, { conditions: ['types'] })['.'];\n\n return {\n ...(await findFileInPackage({\n packagePath,\n filePath: safeRelativePath(path.relative(packagePath, path.join(nestedDefinitionPath, entryPath))),\n })),\n typesPath:\n typesPath && safeRelativePath(path.relative(packagePath, path.join(nestedDefinitionPath, typesPath))),\n };\n }\n }\n\n if (typesPath) {\n result.typesPath = safeRelativePath(typesPath);\n }\n\n if (filePath) {\n result.filePath = safeRelativePath(filePath);\n }\n\n if (sourcePath) {\n result.sourcePath = safeRelativePath(sourcePath);\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"file":"findFileInPackage.js","sourceRoot":"","sources":["../src/findFileInPackage.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\nimport { intermediateToSourcePath, sourceToIntermediatePath, isFile } from '@ms-cloudpack/path-utilities';\nimport { isExternalPackage } from './isExternalPackage.js';\nimport { safeRelativePath } from '@ms-cloudpack/path-string-parsing';\nimport { getExportsMap } from './getExportsMap.js';\nimport { flattenExportsMap } from './flattenExportsMap.js';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\n\nexport type FindFileInPackageOptions = {\n packagePath: string;\n filePath: string;\n};\n\nexport type FindFileInPackageResult = {\n filePath?: string;\n typesPath?: string;\n sourcePath?: string;\n};\n\n/**\n * Given a requested partial filePath, resolves the relative path intermediate path if the file exists, with special\n * consideration for internal packages, which may not have intermediate files but only source files. Paths returned\n * are always relative and start with `./`.\n *\n * This helper is used in deriving if the given package.json entries are actual validate candidates when constructing an\n * exports map from existing metadata. For example, a package.json may list `main` as `lib/index.js`. If this file\n * exists, or in internal packages, if `src/index.tsx` exists, then this is a valid candidate. If the file does not\n * exist, then we should not include it in the exports map.\n */\n\nexport async function findFileInPackage(\n options: FindFileInPackageOptions,\n context: { packages: PackageDefinitionsCache },\n): Promise<FindFileInPackageResult> {\n const { packagePath } = options;\n let filePath: string | undefined = safeRelativePath(options.filePath);\n let sourcePath: string | undefined;\n let typesPath: string | undefined;\n const isInternal = !isExternalPackage(packagePath);\n\n const candidates = [\n filePath,\n filePath + '.js',\n safeRelativePath(path.join(filePath, 'index.js')),\n safeRelativePath(path.join(filePath, 'package.json')),\n ];\n\n filePath = undefined;\n for (const candidate of candidates) {\n if (await isFile(path.join(packagePath, candidate))) {\n filePath = candidate;\n break;\n }\n }\n\n // For internal packages, try and find source/typings and convert to intermediate (which may be missing.)\n if (isInternal) {\n for (const candidate of candidates) {\n const intermediateCandidate = intermediateToSourcePath(candidate, packagePath);\n if (intermediateCandidate && (await isFile(path.join(packagePath, intermediateCandidate)))) {\n sourcePath = intermediateCandidate;\n break;\n }\n }\n\n // If we couldn't find a unique source file, stick with the resolved intermediate file as the only known truth.\n if (filePath && sourcePath === filePath) {\n sourcePath = undefined;\n }\n\n if (sourcePath) {\n if (!filePath) {\n filePath = sourceToIntermediatePath(sourcePath);\n }\n\n typesPath = filePath && path.extname(filePath) === '.js' ? filePath.replace(/\\.js$/, '.d.ts') : undefined;\n }\n }\n\n const isNestedPackageDefinition =\n filePath && path.basename(filePath) === 'package.json' && path.basename(options.filePath) !== 'package.json';\n const result: FindFileInPackageResult = {};\n\n if (isNestedPackageDefinition) {\n const nestedDefinitionPath = path.dirname(path.join(packagePath, filePath as string));\n const exportsMap = await getExportsMap({ packagePath: nestedDefinitionPath }, context);\n const entryPath = flattenExportsMap(exportsMap)['.'];\n\n if (entryPath) {\n typesPath = flattenExportsMap(exportsMap, { conditions: ['types'] })['.'];\n\n return {\n ...(await findFileInPackage(\n {\n packagePath,\n filePath: safeRelativePath(path.relative(packagePath, path.join(nestedDefinitionPath, entryPath))),\n },\n context,\n )),\n typesPath:\n typesPath && safeRelativePath(path.relative(packagePath, path.join(nestedDefinitionPath, typesPath))),\n };\n }\n }\n\n if (typesPath) {\n result.typesPath = safeRelativePath(typesPath);\n }\n\n if (filePath) {\n result.filePath = safeRelativePath(filePath);\n }\n\n if (sourcePath) {\n result.sourcePath = safeRelativePath(sourcePath);\n }\n\n return result;\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';
1
2
  /**
2
3
  *
3
4
  * @param options
@@ -8,5 +9,7 @@ export declare function findPackagePath(options: {
8
9
  versionRequirement: string | undefined;
9
10
  cwd: string;
10
11
  gitRootPath?: string;
12
+ }, context: {
13
+ packages: PackageDefinitionsCache;
11
14
  }): Promise<string | undefined>;
12
15
  //# sourceMappingURL=findPackagePath.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"findPackagePath.d.ts","sourceRoot":"","sources":["../src/findPackagePath.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA2B9B"}
1
+ {"version":3,"file":"findPackagePath.d.ts","sourceRoot":"","sources":["../src/findPackagePath.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAE3E;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE;IACP,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,EACD,OAAO,EAAE;IACP,QAAQ,EAAE,uBAAuB,CAAC;CACnC,GACA,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA4B7B"}
@@ -1,18 +1,18 @@
1
1
  import path from 'path';
2
2
  import fsPromises from 'fs/promises';
3
3
  import semver from 'semver';
4
- import { PackageDefinitions } from './PackageDefinitions.js';
5
4
  /**
6
5
  *
7
6
  * @param options
8
7
  * @returns
9
8
  */
10
- export async function findPackagePath(options) {
9
+ export async function findPackagePath(options, context) {
11
10
  const { dependencyName, versionRequirement, cwd, gitRootPath } = options;
11
+ const { packages } = context;
12
12
  let packagePath = cwd;
13
13
  do {
14
14
  const resolvedPath = path.join(packagePath, 'node_modules', dependencyName);
15
- const definition = await PackageDefinitions.getInstance().get(resolvedPath);
15
+ const definition = await packages.get(resolvedPath);
16
16
  if (definition?.version && (!versionRequirement || semver.satisfies(definition.version, versionRequirement))) {
17
17
  return fsPromises.realpath(resolvedPath);
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"findPackagePath.js","sourceRoot":"","sources":["../src/findPackagePath.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAKrC;IACC,MAAM,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IACzE,IAAI,WAAW,GAAG,GAAG,CAAC;IAEtB,GAAG;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;QAC5E,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE5E,IAAI,UAAU,EAAE,OAAO,IAAI,CAAC,CAAC,kBAAkB,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE;YAC5G,OAAO,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;SAC1C;QAED,mDAAmD;QACnD,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAExC,oDAAoD;QACpD,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC9C,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SACzC;QAED,yCAAyC;QACzC,IAAI,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;YACxC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SACzC;KACF,QAAQ,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,WAAW,EAAE;IAElH,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import path from 'path';\nimport fsPromises from 'fs/promises';\nimport semver from 'semver';\nimport { PackageDefinitions } from './PackageDefinitions.js';\n\n/**\n *\n * @param options\n * @returns\n */\nexport async function findPackagePath(options: {\n dependencyName: string;\n versionRequirement: string | undefined;\n cwd: string;\n gitRootPath?: string;\n}): Promise<string | undefined> {\n const { dependencyName, versionRequirement, cwd, gitRootPath } = options;\n let packagePath = cwd;\n\n do {\n const resolvedPath = path.join(packagePath, 'node_modules', dependencyName);\n const definition = await PackageDefinitions.getInstance().get(resolvedPath);\n\n if (definition?.version && (!versionRequirement || semver.satisfies(definition.version, versionRequirement))) {\n return fsPromises.realpath(resolvedPath);\n }\n\n // We haven't found it. Try to move up a directory.\n packagePath = path.dirname(packagePath);\n\n // If we moved up into a scope folder, skip over it.\n if (path.basename(packagePath).startsWith('@')) {\n packagePath = path.dirname(packagePath);\n }\n\n // Skip over nested node_modules folders.\n if (packagePath.endsWith('node_modules')) {\n packagePath = path.dirname(packagePath);\n }\n } while ((!gitRootPath || packagePath.length >= gitRootPath.length) && path.dirname(packagePath) !== packagePath);\n\n return undefined;\n}\n"]}
1
+ {"version":3,"file":"findPackagePath.js","sourceRoot":"","sources":["../src/findPackagePath.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAKC,EACD,OAEC;IAED,MAAM,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IACzE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC7B,IAAI,WAAW,GAAG,GAAG,CAAC;IAEtB,GAAG;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;QAC5E,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAEpD,IAAI,UAAU,EAAE,OAAO,IAAI,CAAC,CAAC,kBAAkB,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE;YAC5G,OAAO,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;SAC1C;QAED,mDAAmD;QACnD,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAExC,oDAAoD;QACpD,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC9C,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SACzC;QAED,yCAAyC;QACzC,IAAI,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;YACxC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SACzC;KACF,QAAQ,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,WAAW,EAAE;IAElH,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import path from 'path';\nimport fsPromises from 'fs/promises';\nimport semver from 'semver';\nimport type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\n\n/**\n *\n * @param options\n * @returns\n */\nexport async function findPackagePath(\n options: {\n dependencyName: string;\n versionRequirement: string | undefined;\n cwd: string;\n gitRootPath?: string;\n },\n context: {\n packages: PackageDefinitionsCache;\n },\n): Promise<string | undefined> {\n const { dependencyName, versionRequirement, cwd, gitRootPath } = options;\n const { packages } = context;\n let packagePath = cwd;\n\n do {\n const resolvedPath = path.join(packagePath, 'node_modules', dependencyName);\n const definition = await packages.get(resolvedPath);\n\n if (definition?.version && (!versionRequirement || semver.satisfies(definition.version, versionRequirement))) {\n return fsPromises.realpath(resolvedPath);\n }\n\n // We haven't found it. Try to move up a directory.\n packagePath = path.dirname(packagePath);\n\n // If we moved up into a scope folder, skip over it.\n if (path.basename(packagePath).startsWith('@')) {\n packagePath = path.dirname(packagePath);\n }\n\n // Skip over nested node_modules folders.\n if (packagePath.endsWith('node_modules')) {\n packagePath = path.dirname(packagePath);\n }\n } while ((!gitRootPath || packagePath.length >= gitRootPath.length) && path.dirname(packagePath) !== packagePath);\n\n return undefined;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"flattenExportsMap.d.ts","sourceRoot":"","sources":["../src/flattenExportsMap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiC,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAKrG;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,kBAAkB,EAC9B,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,GACL,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoBxB"}
1
+ {"version":3,"file":"flattenExportsMap.d.ts","sourceRoot":"","sources":["../src/flattenExportsMap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA4B,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAKhG;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,kBAAkB,EAC9B,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,GACL,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoBxB"}
@@ -37,9 +37,9 @@ function extractExports(exports, conditions, requiredConditions, exportsMap = {}
37
37
  else if (exports && typeof exports === 'object') {
38
38
  // Iterate through condition matches and go deeper if a match is found.
39
39
  for (const condition of conditions) {
40
- const conditionalExports = exports[condition];
41
- if (conditionalExports) {
42
- extractExports(conditionalExports, conditions, requiredConditions, exportsMap, importMatch, matchedConditions.concat(condition));
40
+ const exportsObject = exports[condition];
41
+ if (exportsObject) {
42
+ extractExports(exportsObject, conditions, requiredConditions, exportsMap, importMatch, matchedConditions.concat(condition));
43
43
  // Stop at the first match.
44
44
  return exportsMap;
45
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"flattenExportsMap.js","sourceRoot":"","sources":["../src/flattenExportsMap.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\nimport type { PackageJsonConditionalExports, PackageJsonExports } from '@ms-cloudpack/bundler-types';\nimport { cleanEntry } from './cleanEntry.js';\n\nconst defaultConditions = ['browser', 'module', 'import', 'default'];\n\n/**\n * Given a package definition and applicable conditions, return a flat map of package import to physical (relative) path.\n * Optionally return the exports map fully qualified with conditions intact using the `fullExports` option.\n */\nexport function flattenExportsMap(\n exportsMap: PackageJsonExports,\n options: {\n conditions?: string[];\n requiredConditions?: string[];\n } = {},\n): Record<string, string> {\n const { requiredConditions } = options;\n let { conditions } = options;\n\n if (conditions) {\n const defaultIndex = conditions.indexOf('...');\n if (defaultIndex !== -1) {\n conditions = [...conditions.slice(0, defaultIndex), ...defaultConditions, ...conditions.slice(defaultIndex + 1)];\n }\n } else {\n conditions = defaultConditions;\n }\n\n if (typeof exportsMap === 'string' && conditions.includes('default')) {\n return {\n '.': cleanEntry(exportsMap),\n };\n }\n\n return extractExports(exportsMap, conditions, requiredConditions);\n}\n\nfunction extractExports(\n exports: PackageJsonExports,\n conditions: string[],\n requiredConditions?: string[],\n exportsMap: Record<string, string> = {},\n importMatch = '.',\n matchedConditions: string[] = [],\n) {\n if (\n typeof exports === 'string' &&\n (!requiredConditions || requiredConditions.every((condition) => matchedConditions.includes(condition)))\n ) {\n addExportsEntry(exportsMap, importMatch, exports);\n } else if (Array.isArray(exports)) {\n for (const exportEntry of exports) {\n extractExports(exportEntry, conditions, requiredConditions, exportsMap, importMatch, matchedConditions);\n }\n } else if (exports && typeof exports === 'object') {\n // Iterate through condition matches and go deeper if a match is found.\n for (const condition of conditions) {\n const conditionalExports = (exports as PackageJsonConditionalExports)[condition];\n if (conditionalExports) {\n extractExports(\n conditionalExports,\n conditions,\n requiredConditions,\n exportsMap,\n importMatch,\n matchedConditions.concat(condition),\n );\n // Stop at the first match.\n return exportsMap;\n }\n }\n\n // No conditions are available. Check for import entries.\n for (const [key, value] of Object.entries(exports)) {\n if (key.startsWith('.')) {\n importMatch = key;\n\n if (typeof value === 'string') {\n if (!exportsMap[importMatch] && (!requiredConditions || requiredConditions?.includes(key))) {\n addExportsEntry(exportsMap, importMatch, value);\n }\n } else if (value) {\n extractExports(value, conditions, requiredConditions, exportsMap, importMatch, [...matchedConditions, key]);\n }\n }\n }\n }\n\n return exportsMap;\n}\n\nfunction addExportsEntry(exportsMap: Record<string, string>, key: string, value: string) {\n const basename = path.basename(value);\n const isFilename = basename !== '' && basename !== '.' && !value.endsWith('/');\n\n if (!exportsMap[key] && isFilename && key.indexOf('*') === -1 && !key.endsWith('/') && value.indexOf('*') === -1) {\n exportsMap[key] = cleanEntry(value);\n }\n}\n"]}
1
+ {"version":3,"file":"flattenExportsMap.js","sourceRoot":"","sources":["../src/flattenExportsMap.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\nimport type { PackageJsonExportsObject, PackageJsonExports } from '@ms-cloudpack/bundler-types';\nimport { cleanEntry } from './cleanEntry.js';\n\nconst defaultConditions = ['browser', 'module', 'import', 'default'];\n\n/**\n * Given a package definition and applicable conditions, return a flat map of package import to physical (relative) path.\n * Optionally return the exports map fully qualified with conditions intact using the `fullExports` option.\n */\nexport function flattenExportsMap(\n exportsMap: PackageJsonExports,\n options: {\n conditions?: string[];\n requiredConditions?: string[];\n } = {},\n): Record<string, string> {\n const { requiredConditions } = options;\n let { conditions } = options;\n\n if (conditions) {\n const defaultIndex = conditions.indexOf('...');\n if (defaultIndex !== -1) {\n conditions = [...conditions.slice(0, defaultIndex), ...defaultConditions, ...conditions.slice(defaultIndex + 1)];\n }\n } else {\n conditions = defaultConditions;\n }\n\n if (typeof exportsMap === 'string' && conditions.includes('default')) {\n return {\n '.': cleanEntry(exportsMap),\n };\n }\n\n return extractExports(exportsMap, conditions, requiredConditions);\n}\n\nfunction extractExports(\n exports: PackageJsonExports,\n conditions: string[],\n requiredConditions?: string[],\n exportsMap: Record<string, string> = {},\n importMatch = '.',\n matchedConditions: string[] = [],\n) {\n if (\n typeof exports === 'string' &&\n (!requiredConditions || requiredConditions.every((condition) => matchedConditions.includes(condition)))\n ) {\n addExportsEntry(exportsMap, importMatch, exports);\n } else if (Array.isArray(exports)) {\n for (const exportEntry of exports) {\n extractExports(exportEntry, conditions, requiredConditions, exportsMap, importMatch, matchedConditions);\n }\n } else if (exports && typeof exports === 'object') {\n // Iterate through condition matches and go deeper if a match is found.\n for (const condition of conditions) {\n const exportsObject = (exports as PackageJsonExportsObject)[condition];\n\n if (exportsObject) {\n extractExports(\n exportsObject as PackageJsonExports,\n conditions,\n requiredConditions,\n exportsMap,\n importMatch,\n matchedConditions.concat(condition),\n );\n // Stop at the first match.\n return exportsMap;\n }\n }\n\n // No conditions are available. Check for import entries.\n for (const [key, value] of Object.entries(exports)) {\n if (key.startsWith('.')) {\n importMatch = key;\n\n if (typeof value === 'string') {\n if (!exportsMap[importMatch] && (!requiredConditions || requiredConditions?.includes(key))) {\n addExportsEntry(exportsMap, importMatch, value);\n }\n } else if (value) {\n extractExports(value, conditions, requiredConditions, exportsMap, importMatch, [...matchedConditions, key]);\n }\n }\n }\n }\n\n return exportsMap;\n}\n\nfunction addExportsEntry(exportsMap: Record<string, string>, key: string, value: string) {\n const basename = path.basename(value);\n const isFilename = basename !== '' && basename !== '.' && !value.endsWith('/');\n\n if (!exportsMap[key] && isFilename && key.indexOf('*') === -1 && !key.endsWith('/') && value.indexOf('*') === -1) {\n exportsMap[key] = cleanEntry(value);\n }\n}\n"]}
@@ -1,5 +1,7 @@
1
- import type { PackageJsonExports, PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';
2
- export declare function getExportsMap(packagePath: string, options?: {
3
- packages?: PackageDefinitionsCache;
1
+ import type { PackageDefinitionsCache, PackageJsonExports } from '@ms-cloudpack/bundler-types';
2
+ export declare function getExportsMap(options: {
3
+ packagePath: string;
4
+ }, context: {
5
+ packages: PackageDefinitionsCache;
4
6
  }): Promise<PackageJsonExports>;
5
7
  //# sourceMappingURL=getExportsMap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getExportsMap.d.ts","sourceRoot":"","sources":["../src/getExportsMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAI/F,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,uBAAuB,CAAA;CAAO,GACnD,OAAO,CAAC,kBAAkB,CAAC,CAmB7B"}
1
+ {"version":3,"file":"getExportsMap.d.ts","sourceRoot":"","sources":["../src/getExportsMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAG/F,wBAAsB,aAAa,CACjC,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,EAChC,OAAO,EAAE;IAAE,QAAQ,EAAE,uBAAuB,CAAA;CAAE,GAC7C,OAAO,CAAC,kBAAkB,CAAC,CAY7B"}
@@ -1,20 +1,12 @@
1
- import { PackageDefinitions } from './PackageDefinitions.js';
2
1
  import { createExportsMap } from './createExportsMap.js';
3
- export async function getExportsMap(packagePath, options = {}) {
4
- const { packages = PackageDefinitions.getInstance() } = options;
2
+ export async function getExportsMap(options, context) {
3
+ const { packagePath } = options;
4
+ const { packages } = context;
5
5
  const packageDefinition = await packages.get(packagePath);
6
6
  if (!packageDefinition) {
7
7
  throw new Error(`Package definition not found for ${packagePath}`);
8
8
  }
9
- let { exports } = packageDefinition;
10
- // If the package definition doesn't have a full object-based exports map, create one.
11
- if (typeof exports === 'string') {
12
- exports = {
13
- '.': {
14
- default: exports,
15
- },
16
- };
17
- }
18
- return exports || (await createExportsMap(packagePath, options));
9
+ const { exports } = packageDefinition;
10
+ return exports === undefined ? await createExportsMap(options, context) : exports;
19
11
  }
20
12
  //# sourceMappingURL=getExportsMap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getExportsMap.js","sourceRoot":"","sources":["../src/getExportsMap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,WAAmB,EACnB,UAAkD,EAAE;IAEpD,MAAM,EAAE,QAAQ,GAAG,kBAAkB,CAAC,WAAW,EAAE,EAAE,GAAG,OAAO,CAAC;IAChE,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAE1D,IAAI,CAAC,iBAAiB,EAAE;QACtB,MAAM,IAAI,KAAK,CAAC,oCAAoC,WAAW,EAAE,CAAC,CAAC;KACpE;IAED,IAAI,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC;IAEpC,sFAAsF;IACtF,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC/B,OAAO,GAAG;YACR,GAAG,EAAE;gBACH,OAAO,EAAE,OAAO;aACjB;SACF,CAAC;KACH;IACD,OAAO,OAAO,IAAI,CAAC,MAAM,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;AACnE,CAAC","sourcesContent":["import type { PackageJsonExports, PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport { PackageDefinitions } from './PackageDefinitions.js';\nimport { createExportsMap } from './createExportsMap.js';\n\nexport async function getExportsMap(\n packagePath: string,\n options: { packages?: PackageDefinitionsCache } = {},\n): Promise<PackageJsonExports> {\n const { packages = PackageDefinitions.getInstance() } = options;\n const packageDefinition = await packages.get(packagePath);\n\n if (!packageDefinition) {\n throw new Error(`Package definition not found for ${packagePath}`);\n }\n\n let { exports } = packageDefinition;\n\n // If the package definition doesn't have a full object-based exports map, create one.\n if (typeof exports === 'string') {\n exports = {\n '.': {\n default: exports,\n },\n };\n }\n return exports || (await createExportsMap(packagePath, options));\n}\n"]}
1
+ {"version":3,"file":"getExportsMap.js","sourceRoot":"","sources":["../src/getExportsMap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAgC,EAChC,OAA8C;IAE9C,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAChC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC7B,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAE1D,IAAI,CAAC,iBAAiB,EAAE;QACtB,MAAM,IAAI,KAAK,CAAC,oCAAoC,WAAW,EAAE,CAAC,CAAC;KACpE;IAED,MAAM,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC;IAEtC,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AACpF,CAAC","sourcesContent":["import type { PackageDefinitionsCache, PackageJsonExports } from '@ms-cloudpack/bundler-types';\nimport { createExportsMap } from './createExportsMap.js';\n\nexport async function getExportsMap(\n options: { packagePath: string },\n context: { packages: PackageDefinitionsCache },\n): Promise<PackageJsonExports> {\n const { packagePath } = options;\n const { packages } = context;\n const packageDefinition = await packages.get(packagePath);\n\n if (!packageDefinition) {\n throw new Error(`Package definition not found for ${packagePath}`);\n }\n\n const { exports } = packageDefinition;\n\n return exports === undefined ? await createExportsMap(options, context) : exports;\n}\n"]}
@@ -1,5 +1,7 @@
1
1
  /**
2
- * Returns the version of the package which contains the import url provided.
2
+ * Returns the displayable version of the package which contains the import url provided. If the package
3
+ * is a local package rather than a node_modules external package, we display the version as "0.0.0-local"
4
+ * with the path following it.
3
5
  * @param importUrl - import.meta.url
4
6
  * @returns - the version of the package. If the package is not in node_modules, it returns "0.0.0-local".
5
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"getVersion.d.ts","sourceRoot":"","sources":["../src/getVersion.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAYpD"}
1
+ {"version":3,"file":"getVersion.d.ts","sourceRoot":"","sources":["../src/getVersion.ts"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAYpD"}
package/lib/getVersion.js CHANGED
@@ -4,13 +4,15 @@ import path from 'path';
4
4
  import { fileURLToPath } from 'url';
5
5
  import { isExternalPackage } from './isExternalPackage.js';
6
6
  /**
7
- * Returns the version of the package which contains the import url provided.
7
+ * Returns the displayable version of the package which contains the import url provided. If the package
8
+ * is a local package rather than a node_modules external package, we display the version as "0.0.0-local"
9
+ * with the path following it.
8
10
  * @param importUrl - import.meta.url
9
11
  * @returns - the version of the package. If the package is not in node_modules, it returns "0.0.0-local".
10
12
  */
11
13
  export function getVersion(importUrl) {
12
- let version = '0.0.0-local';
13
14
  const packagePath = findPackageRoot(path.dirname(fileURLToPath(importUrl)));
15
+ let version = `0.0.0-local ${packagePath}`;
14
16
  if (packagePath && isExternalPackage(packagePath)) {
15
17
  const packageJSONpath = path.join(packagePath, 'package.json');
16
18
  // eslint-disable-next-line no-restricted-syntax