@ms-cloudpack/package-utilities 3.1.6 → 5.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 (90) 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 +7 -4
  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 +5 -4
  18. package/lib/createResolveMap/addLinkedEntryDependencies.d.ts.map +1 -1
  19. package/lib/createResolveMap/addLinkedEntryDependencies.js +69 -49
  20. package/lib/createResolveMap/addLinkedEntryDependencies.js.map +1 -1
  21. package/lib/createResolveMap/convertToResolveMap.d.ts +2 -2
  22. package/lib/createResolveMap/convertToResolveMap.d.ts.map +1 -1
  23. package/lib/createResolveMap/convertToResolveMap.js.map +1 -1
  24. package/lib/createResolveMap/createResolveMap.d.ts +6 -5
  25. package/lib/createResolveMap/createResolveMap.d.ts.map +1 -1
  26. package/lib/createResolveMap/createResolveMap.js +5 -7
  27. package/lib/createResolveMap/createResolveMap.js.map +1 -1
  28. package/lib/createResolveMap/detachEntry.d.ts +2 -2
  29. package/lib/createResolveMap/detachEntry.d.ts.map +1 -1
  30. package/lib/createResolveMap/detachEntry.js.map +1 -1
  31. package/lib/createResolveMap/diffResolveMaps.d.ts +5 -4
  32. package/lib/createResolveMap/diffResolveMaps.d.ts.map +1 -1
  33. package/lib/createResolveMap/diffResolveMaps.js +4 -6
  34. package/lib/createResolveMap/diffResolveMaps.js.map +1 -1
  35. package/lib/createResolveMap/entrySorter.d.ts +1 -1
  36. package/lib/createResolveMap/entrySorter.d.ts.map +1 -1
  37. package/lib/createResolveMap/entrySorter.js.map +1 -1
  38. package/lib/createResolveMap/findPackagesFromPath.d.ts +7 -6
  39. package/lib/createResolveMap/findPackagesFromPath.d.ts.map +1 -1
  40. package/lib/createResolveMap/findPackagesFromPath.js +7 -7
  41. package/lib/createResolveMap/findPackagesFromPath.js.map +1 -1
  42. package/lib/createResolveMap/linkPath.d.ts +6 -6
  43. package/lib/createResolveMap/linkPath.d.ts.map +1 -1
  44. package/lib/createResolveMap/linkPath.js +25 -12
  45. package/lib/createResolveMap/linkPath.js.map +1 -1
  46. package/lib/findFileInPackage.d.ts +4 -1
  47. package/lib/findFileInPackage.d.ts.map +1 -1
  48. package/lib/findFileInPackage.js +3 -3
  49. package/lib/findFileInPackage.js.map +1 -1
  50. package/lib/findPackagePath.d.ts +3 -0
  51. package/lib/findPackagePath.d.ts.map +1 -1
  52. package/lib/findPackagePath.js +3 -3
  53. package/lib/findPackagePath.js.map +1 -1
  54. package/lib/findResolveMapEntry.d.ts +2 -2
  55. package/lib/findResolveMapEntry.d.ts.map +1 -1
  56. package/lib/findResolveMapEntry.js.map +1 -1
  57. package/lib/getExportsMap.d.ts +5 -3
  58. package/lib/getExportsMap.d.ts.map +1 -1
  59. package/lib/getExportsMap.js +5 -13
  60. package/lib/getExportsMap.js.map +1 -1
  61. package/lib/getVersion.d.ts +3 -1
  62. package/lib/getVersion.d.ts.map +1 -1
  63. package/lib/getVersion.js +4 -2
  64. package/lib/getVersion.js.map +1 -1
  65. package/lib/index.d.ts +3 -2
  66. package/lib/index.d.ts.map +1 -1
  67. package/lib/index.js.map +1 -1
  68. package/lib/types/LinkedPath.d.ts +22 -0
  69. package/lib/types/LinkedPath.d.ts.map +1 -0
  70. package/lib/types/LinkedPath.js +2 -0
  71. package/lib/types/LinkedPath.js.map +1 -0
  72. package/lib/types/PackageMap.d.ts.map +1 -0
  73. package/lib/types/PackageMap.js.map +1 -0
  74. package/lib/{createResolveMap → types}/ResolveMap.d.ts +3 -0
  75. package/lib/types/ResolveMap.d.ts.map +1 -0
  76. package/lib/types/ResolveMap.js.map +1 -0
  77. package/lib/types/ResolveMapEntry.d.ts.map +1 -0
  78. package/lib/types/ResolveMapEntry.js.map +1 -0
  79. package/package.json +6 -6
  80. package/lib/createResolveMap/PackageMap.d.ts.map +0 -1
  81. package/lib/createResolveMap/PackageMap.js.map +0 -1
  82. package/lib/createResolveMap/ResolveMap.d.ts.map +0 -1
  83. package/lib/createResolveMap/ResolveMap.js.map +0 -1
  84. package/lib/createResolveMap/ResolveMapEntry.d.ts.map +0 -1
  85. package/lib/createResolveMap/ResolveMapEntry.js.map +0 -1
  86. /package/lib/{createResolveMap → types}/PackageMap.d.ts +0 -0
  87. /package/lib/{createResolveMap → types}/PackageMap.js +0 -0
  88. /package/lib/{createResolveMap → types}/ResolveMap.js +0 -0
  89. /package/lib/{createResolveMap → types}/ResolveMapEntry.d.ts +0 -0
  90. /package/lib/{createResolveMap → types}/ResolveMapEntry.js +0 -0
@@ -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 '../types/PackageMap.js';\nimport type { ResolveMapEntry } from '../types/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 visitedEntryPaths = new Set<string>(linkedEntry.path);\n const entriesToVisit: ResolveMapEntry[] = [linkedEntry];\n\n function enqueue(newEntry: ResolveMapEntry) {\n if (!visitedEntryPaths.has(newEntry.path)) {\n visitedEntryPaths.add(newEntry.path);\n entriesToVisit.push(newEntry);\n }\n }\n\n while (entriesToVisit.length) {\n const entry = entriesToVisit.pop();\n\n if (entry) {\n const { name, version, dependencies } = entry;\n\n const linkDefinition = await packages.get(entry.path);\n const versionRequirements = {\n ...(linkDefinition?.dependencies || {}),\n ...(linkDefinition?.peerDependencies || {}),\n };\n\n // Iterate through the dependencies of the linked package.\n if (dependencies) {\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 enqueue(dependencyEntry);\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 entry.dependencies[dependencyName] = appDependencyEntry.version;\n appDependencyEntry.requiredBy[`${name}@${version}`] = versionRequirement;\n\n enqueue(appDependencyEntry);\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 dependencyEntries = linkMap[dependencyName];\n\n for (const dependencyEntry of Object.values(dependencyEntries)) {\n if (satisfies(dependencyEntry.version, versionRequirement)) {\n appMap[dependencyName][dependencyEntry.version] = dependencyEntry;\n entry.dependencies[dependencyName] = linkedDependencyVersion;\n dependencyEntry.requiredBy = { [`${name}@${version}`]: versionRequirement };\n // Recursive through the dependency's dependencies.\n enqueue(dependencyEntry);\n break;\n }\n }\n }\n }\n }\n }\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import type { ResolveMap } from './ResolveMap.js';
2
- import type { PackageMap } from './PackageMap.js';
1
+ import type { ResolveMap } from '../types/ResolveMap.js';
2
+ import type { PackageMap } from '../types/PackageMap.js';
3
3
  /**
4
4
  * Given a PackageMap and all root paths (appPath and linked paths), returns a ResolveMap.
5
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"convertToResolveMap.d.ts","sourceRoot":"","sources":["../../src/createResolveMap/convertToResolveMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,UAAU,CAsBhG"}
1
+ {"version":3,"file":"convertToResolveMap.d.ts","sourceRoot":"","sources":["../../src/createResolveMap/convertToResolveMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,UAAU,CAsBhG"}
@@ -1 +1 @@
1
- {"version":3,"file":"convertToResolveMap.js","sourceRoot":"","sources":["../../src/createResolveMap/convertToResolveMap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAgD;IAClF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAClC,MAAM,UAAU,GAAe,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAClE,6EAA6E;QAC7E,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;aACvD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;aAC7E,IAAI,CAAC,WAAW,CAAC,CAAC;QACrB,wFAAwF;QACxF,2EAA2E;QAC3E,IAAI,oBAAoB,CAAC,MAAM,EAAE;YAC/B,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;YAElE,wDAAwD;YACxD,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnC,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;aACjH;SACF;KACF;IAED,OAAO,UAAU,CAAC;AACpB,CAAC","sourcesContent":["import type { ResolveMap } from './ResolveMap.js';\nimport type { PackageMap } from './PackageMap.js';\nimport { entrySorter } from './entrySorter.js';\n\n/**\n * Given a PackageMap and all root paths (appPath and linked paths), returns a ResolveMap.\n */\nexport function convertToResolveMap(options: { appMap: PackageMap; paths: string[] }): ResolveMap {\n const { paths, appMap } = options;\n const resolveMap: ResolveMap = {};\n\n for (const [packageName, packageEntries] of Object.entries(appMap)) {\n // Filter to root packages and packages which are required by other packages.\n const sortedPackageEntries = Object.values(packageEntries)\n .filter((e) => paths.indexOf(e.path) >= 0 || Object.keys(e.requiredBy).length)\n .sort(entrySorter);\n // Get the sorted package entries based on the most to least requiredBy references. This\n // ends up reducing the size of the resolve map by minimizing scoped cases.\n if (sortedPackageEntries.length) {\n const entry = (resolveMap[packageName] = sortedPackageEntries[0]);\n\n // Update scoped versions (version to resolve map entry)\n if (sortedPackageEntries.length > 1) {\n entry.scopedVersions = Object.fromEntries(sortedPackageEntries.slice(1).map((entry) => [entry.version, entry]));\n }\n }\n }\n\n return resolveMap;\n}\n"]}
1
+ {"version":3,"file":"convertToResolveMap.js","sourceRoot":"","sources":["../../src/createResolveMap/convertToResolveMap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAgD;IAClF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAClC,MAAM,UAAU,GAAe,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAClE,6EAA6E;QAC7E,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;aACvD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;aAC7E,IAAI,CAAC,WAAW,CAAC,CAAC;QACrB,wFAAwF;QACxF,2EAA2E;QAC3E,IAAI,oBAAoB,CAAC,MAAM,EAAE;YAC/B,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;YAElE,wDAAwD;YACxD,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnC,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;aACjH;SACF;KACF;IAED,OAAO,UAAU,CAAC;AACpB,CAAC","sourcesContent":["import type { ResolveMap } from '../types/ResolveMap.js';\nimport type { PackageMap } from '../types/PackageMap.js';\nimport { entrySorter } from './entrySorter.js';\n\n/**\n * Given a PackageMap and all root paths (appPath and linked paths), returns a ResolveMap.\n */\nexport function convertToResolveMap(options: { appMap: PackageMap; paths: string[] }): ResolveMap {\n const { paths, appMap } = options;\n const resolveMap: ResolveMap = {};\n\n for (const [packageName, packageEntries] of Object.entries(appMap)) {\n // Filter to root packages and packages which are required by other packages.\n const sortedPackageEntries = Object.values(packageEntries)\n .filter((e) => paths.indexOf(e.path) >= 0 || Object.keys(e.requiredBy).length)\n .sort(entrySorter);\n // Get the sorted package entries based on the most to least requiredBy references. This\n // ends up reducing the size of the resolve map by minimizing scoped cases.\n if (sortedPackageEntries.length) {\n const entry = (resolveMap[packageName] = sortedPackageEntries[0]);\n\n // Update scoped versions (version to resolve map entry)\n if (sortedPackageEntries.length > 1) {\n entry.scopedVersions = Object.fromEntries(sortedPackageEntries.slice(1).map((entry) => [entry.version, entry]));\n }\n }\n }\n\n return resolveMap;\n}\n"]}
@@ -1,5 +1,6 @@
1
- import { PackageDefinitions } from '../PackageDefinitions.js';
2
- import type { ResolveMap } from './ResolveMap.js';
1
+ import type { LinkedPath } from '../types/LinkedPath.js';
2
+ import type { ResolveMap } from '../types/ResolveMap.js';
3
+ import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';
3
4
  /**
4
5
  * Create a resolve map for a given app path. We do this by walking the dependency tree
5
6
  * of the app to build a map of all packages and their dependencies. We then sort the
@@ -13,10 +14,10 @@ import type { ResolveMap } from './ResolveMap.js';
13
14
  export declare function createResolveMap(options: {
14
15
  appPath: string;
15
16
  additionalPaths?: string[];
16
- linkedPaths?: string[];
17
- ignoredLinkedPackages?: string[];
17
+ linkedPaths?: LinkedPath[];
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,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIzD,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,UAAU,EAAE,CAAC;IAC3B,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,CAoBrB"}
@@ -1,6 +1,5 @@
1
- import { PackageDefinitions } from '../PackageDefinitions.js';
2
- import { findPackagesFromPath } from './findPackagesFromPath.js';
3
1
  import { convertToResolveMap } from './convertToResolveMap.js';
2
+ import { findPackagesFromPath } from './findPackagesFromPath.js';
4
3
  import { linkPath } from './linkPath.js';
5
4
  /**
6
5
  * Create a resolve map for a given app path. We do this by walking the dependency tree
@@ -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, 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 }, context);
27
25
  }
28
26
  // Finally we condense into a resolve map.
29
27
  return convertToResolveMap({ appMap, paths: [appPath, ...additionalPaths] });
@@ -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":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAMC,EACD,OAEC;IAED,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAEtG,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,EAAE,OAAO,CAAC,CAAC;KACjD;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 { LinkedPath } from '../types/LinkedPath.js';\nimport type { ResolveMap } from '../types/ResolveMap.js';\nimport { convertToResolveMap } from './convertToResolveMap.js';\nimport { findPackagesFromPath } from './findPackagesFromPath.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?: LinkedPath[];\n gitRootPath?: string;\n useStrictVersioning?: boolean;\n },\n context: {\n packages: PackageDefinitionsCache;\n },\n): Promise<ResolveMap> {\n const { appPath, additionalPaths = [], linkedPaths = [], useStrictVersioning, gitRootPath } = 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 }, context);\n }\n\n // Finally we condense into a resolve map.\n return convertToResolveMap({ appMap, paths: [appPath, ...additionalPaths] });\n}\n"]}
@@ -1,5 +1,5 @@
1
- import type { ResolveMapEntry } from './ResolveMapEntry.js';
2
- import type { PackageMap } from './PackageMap.js';
1
+ import type { ResolveMapEntry } from '../types/ResolveMapEntry.js';
2
+ import type { PackageMap } from '../types/PackageMap.js';
3
3
  /**
4
4
  * Removes requiredBy references for an entry being removed.
5
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"detachEntry.d.ts","sourceRoot":"","sources":["../../src/createResolveMap/detachEntry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD;;GAEG;AAEH,wBAAgB,WAAW,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,QAkClF"}
1
+ {"version":3,"file":"detachEntry.d.ts","sourceRoot":"","sources":["../../src/createResolveMap/detachEntry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD;;GAEG;AAEH,wBAAgB,WAAW,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,QAkClF"}
@@ -1 +1 @@
1
- {"version":3,"file":"detachEntry.js","sourceRoot":"","sources":["../../src/createResolveMap/detachEntry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;GAEG;AAEH,MAAM,UAAU,WAAW,CAAC,OAAuD;IACjF,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAClC,MAAM,oBAAoB,GAAsB,CAAC,KAAK,CAAC,CAAC;IAExD,OAAO,oBAAoB,CAAC,MAAM,EAAE;QAClC,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,EAAqB,CAAC;QAC5D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;QAE5C,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACnB,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;gBAC3B,uCAAuC;gBACvC,KAAK,MAAM,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;oBACpD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;oBACpE,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;oBAExD,IAAI,WAAW,EAAE;wBACf,OAAO,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;qBACvC;iBACF;gBAED,0CAA0C;gBAC1C,KAAK,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;oBACpF,MAAM,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;oBAEpE,IAAI,eAAe,EAAE;wBACnB,OAAO,eAAe,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC;wBACxD,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;4BACxD,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;yBAC5C;qBACF;iBACF;aACF;SACF;KACF;AACH,CAAC","sourcesContent":["import type { ResolveMapEntry } from './ResolveMapEntry.js';\nimport type { PackageMap } from './PackageMap.js';\nimport { parseRequiredBy } from './parseRequiredBy.js';\n\n/**\n * Removes requiredBy references for an entry being removed.\n */\n\nexport function detachEntry(options: { appMap: PackageMap; entry: ResolveMapEntry }) {\n const { appMap, entry } = options;\n const dependenciesToDetach: ResolveMapEntry[] = [entry];\n\n while (dependenciesToDetach.length) {\n const entry = dependenciesToDetach.pop() as ResolveMapEntry;\n const { name, version, requiredBy } = entry;\n\n if (!entry.isLinked) {\n if (appMap[name]?.[version]) {\n // Disconnect the entry from consumers.\n for (const requiredByName of Object.keys(requiredBy)) {\n const [parentName, parentVersion] = parseRequiredBy(requiredByName);\n const parentEntry = appMap[parentName]?.[parentVersion];\n\n if (parentEntry) {\n delete parentEntry.dependencies[name];\n }\n }\n\n // Disconnect dependencies from the entry.\n for (const [dependencyName, dependencyVersion] of Object.entries(entry.dependencies)) {\n const dependencyEntry = appMap[dependencyName]?.[dependencyVersion];\n\n if (dependencyEntry) {\n delete dependencyEntry.requiredBy[`${name}@${version}`];\n if (Object.keys(dependencyEntry.requiredBy).length === 0) {\n dependenciesToDetach.push(dependencyEntry);\n }\n }\n }\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"detachEntry.js","sourceRoot":"","sources":["../../src/createResolveMap/detachEntry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;GAEG;AAEH,MAAM,UAAU,WAAW,CAAC,OAAuD;IACjF,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAClC,MAAM,oBAAoB,GAAsB,CAAC,KAAK,CAAC,CAAC;IAExD,OAAO,oBAAoB,CAAC,MAAM,EAAE;QAClC,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,EAAqB,CAAC;QAC5D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;QAE5C,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACnB,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;gBAC3B,uCAAuC;gBACvC,KAAK,MAAM,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;oBACpD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;oBACpE,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;oBAExD,IAAI,WAAW,EAAE;wBACf,OAAO,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;qBACvC;iBACF;gBAED,0CAA0C;gBAC1C,KAAK,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;oBACpF,MAAM,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;oBAEpE,IAAI,eAAe,EAAE;wBACnB,OAAO,eAAe,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC;wBACxD,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;4BACxD,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;yBAC5C;qBACF;iBACF;aACF;SACF;KACF;AACH,CAAC","sourcesContent":["import type { ResolveMapEntry } from '../types/ResolveMapEntry.js';\nimport type { PackageMap } from '../types/PackageMap.js';\nimport { parseRequiredBy } from './parseRequiredBy.js';\n\n/**\n * Removes requiredBy references for an entry being removed.\n */\n\nexport function detachEntry(options: { appMap: PackageMap; entry: ResolveMapEntry }) {\n const { appMap, entry } = options;\n const dependenciesToDetach: ResolveMapEntry[] = [entry];\n\n while (dependenciesToDetach.length) {\n const entry = dependenciesToDetach.pop() as ResolveMapEntry;\n const { name, version, requiredBy } = entry;\n\n if (!entry.isLinked) {\n if (appMap[name]?.[version]) {\n // Disconnect the entry from consumers.\n for (const requiredByName of Object.keys(requiredBy)) {\n const [parentName, parentVersion] = parseRequiredBy(requiredByName);\n const parentEntry = appMap[parentName]?.[parentVersion];\n\n if (parentEntry) {\n delete parentEntry.dependencies[name];\n }\n }\n\n // Disconnect dependencies from the entry.\n for (const [dependencyName, dependencyVersion] of Object.entries(entry.dependencies)) {\n const dependencyEntry = appMap[dependencyName]?.[dependencyVersion];\n\n if (dependencyEntry) {\n delete dependencyEntry.requiredBy[`${name}@${version}`];\n if (Object.keys(dependencyEntry.requiredBy).length === 0) {\n dependenciesToDetach.push(dependencyEntry);\n }\n }\n }\n }\n }\n }\n}\n"]}
@@ -1,8 +1,9 @@
1
- import type { ResolveMap } from './ResolveMap.js';
1
+ import type { ResolveMap } from '../types/ResolveMap.js';
2
+ import type { ResolveMapEntry } from '../types/ResolveMapEntry.js';
2
3
  export interface DiffResolveMapsChanges {
3
- linked: string[];
4
- internal: string[];
5
- external: string[];
4
+ linked: ResolveMapEntry[];
5
+ internal: ResolveMapEntry[];
6
+ external: ResolveMapEntry[];
6
7
  }
7
8
  export interface DiffResolveMapsStats {
8
9
  added: DiffResolveMapsChanges;
@@ -1 +1 @@
1
- {"version":3,"file":"diffResolveMaps.d.ts","sourceRoot":"","sources":["../../src/createResolveMap/diffResolveMaps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,OAAO,EAAE,sBAAsB,CAAC;CACjC;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,wBAmDjF"}
1
+ {"version":3,"file":"diffResolveMaps.d.ts","sourceRoot":"","sources":["../../src/createResolveMap/diffResolveMaps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,OAAO,EAAE,sBAAsB,CAAC;CACjC;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,wBAmDjF"}
@@ -45,25 +45,23 @@ export function diffResolveMaps(options) {
45
45
  return stats;
46
46
  }
47
47
  function trackEntry(entry, changes) {
48
- const entryId = `${entry.name}@${entry.version}`;
49
48
  if (entry.isLinked) {
50
- changes.linked.push(entryId);
49
+ changes.linked.push(entry);
51
50
  }
52
51
  else if (entry.isExternal) {
53
- changes.external.push(entryId);
52
+ changes.external.push(entry);
54
53
  }
55
54
  else {
56
- changes.internal.push(entryId);
55
+ changes.internal.push(entry);
57
56
  }
58
57
  }
59
58
  function toPackageMap(resolveMap) {
60
- var _a;
61
59
  const packageMap = {};
62
60
  const entriesToAdd = Object.values(resolveMap);
63
61
  while (entriesToAdd.length) {
64
62
  const entry = entriesToAdd.pop();
65
63
  const { scopedVersions, ...rest } = entry;
66
- const versions = (packageMap[_a = entry.name] || (packageMap[_a] = {}));
64
+ const versions = (packageMap[entry.name] ??= {});
67
65
  versions[entry.version] = rest;
68
66
  if (scopedVersions) {
69
67
  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":"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","sourcesContent":["import type { PackageMap } from '../types/PackageMap.js';\nimport type { ResolveMap } from '../types/ResolveMap.js';\nimport type { ResolveMapEntry } from '../types/ResolveMapEntry.js';\n\nexport interface DiffResolveMapsChanges {\n linked: ResolveMapEntry[];\n internal: ResolveMapEntry[];\n external: ResolveMapEntry[];\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 if (entry.isLinked) {\n changes.linked.push(entry);\n } else if (entry.isExternal) {\n changes.external.push(entry);\n } else {\n changes.internal.push(entry);\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 type { ResolveMapEntry } from './ResolveMapEntry.js';
1
+ import type { ResolveMapEntry } from '../types/ResolveMapEntry.js';
2
2
  /**
3
3
  * Returns the array of entries, sorted by most required.
4
4
  */
@@ -1 +1 @@
1
- {"version":3,"file":"entrySorter.d.ts","sourceRoot":"","sources":["../../src/createResolveMap/entrySorter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D;;GAEG;AAEH,wBAAgB,WAAW,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,eAAe,UAajE"}
1
+ {"version":3,"file":"entrySorter.d.ts","sourceRoot":"","sources":["../../src/createResolveMap/entrySorter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAGnE;;GAEG;AAEH,wBAAgB,WAAW,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,eAAe,UAajE"}
@@ -1 +1 @@
1
- {"version":3,"file":"entrySorter.js","sourceRoot":"","sources":["../../src/createResolveMap/entrySorter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE5B;;GAEG;AAEH,MAAM,UAAU,WAAW,CAAC,CAAkB,EAAE,CAAkB;IAChE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;IAErD,IAAI,WAAW,GAAG,WAAW,EAAE;QAC7B,OAAO,CAAC,CAAC,CAAC;KACX;IAED,IAAI,WAAW,GAAG,WAAW,EAAE;QAC7B,OAAO,CAAC,CAAC;KACV;IAED,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC","sourcesContent":["import type { ResolveMapEntry } from './ResolveMapEntry.js';\nimport { gt } from 'semver';\n\n/**\n * Returns the array of entries, sorted by most required.\n */\n\nexport function entrySorter(a: ResolveMapEntry, b: ResolveMapEntry) {\n const aRequiredBy = Object.keys(a.requiredBy).length;\n const bRequiredBy = Object.keys(b.requiredBy).length;\n\n if (aRequiredBy > bRequiredBy) {\n return -1;\n }\n\n if (aRequiredBy < bRequiredBy) {\n return 1;\n }\n\n return gt(a.version, b.version) ? -1 : 1;\n}\n"]}
1
+ {"version":3,"file":"entrySorter.js","sourceRoot":"","sources":["../../src/createResolveMap/entrySorter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE5B;;GAEG;AAEH,MAAM,UAAU,WAAW,CAAC,CAAkB,EAAE,CAAkB;IAChE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;IAErD,IAAI,WAAW,GAAG,WAAW,EAAE;QAC7B,OAAO,CAAC,CAAC,CAAC;KACX;IAED,IAAI,WAAW,GAAG,WAAW,EAAE;QAC7B,OAAO,CAAC,CAAC;KACV;IAED,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC","sourcesContent":["import type { ResolveMapEntry } from '../types/ResolveMapEntry.js';\nimport { gt } from 'semver';\n\n/**\n * Returns the array of entries, sorted by most required.\n */\n\nexport function entrySorter(a: ResolveMapEntry, b: ResolveMapEntry) {\n const aRequiredBy = Object.keys(a.requiredBy).length;\n const bRequiredBy = Object.keys(b.requiredBy).length;\n\n if (aRequiredBy > bRequiredBy) {\n return -1;\n }\n\n if (aRequiredBy < bRequiredBy) {\n return 1;\n }\n\n return gt(a.version, b.version) ? -1 : 1;\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { PackageDefinitions } from '../PackageDefinitions.js';
2
- import type { PackageMap } from './PackageMap.js';
1
+ import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';
2
+ import type { PackageMap } from '../types/PackageMap.js';
3
3
  /**
4
4
  * Find all packages from a given path. We do this by walking the dependency tree
5
5
  * of the app to build a map of all packages and their dependencies.
@@ -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,wBAAwB,CAAC;AAGzD;;;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 '../types/PackageMap.js';\nimport type { ResolveMapEntry } from '../types/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,13 +1,13 @@
1
- import type { PackageDefinitions } from '../PackageDefinitions.js';
2
- import type { PackageMap } from './PackageMap.js';
1
+ import type { LinkedPath } from '../types/LinkedPath.js';
2
+ import type { PackageMap } from '../types/PackageMap.js';
3
+ import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';
3
4
  /**
4
5
  * Given a linked path, an appMap, find packages from the linked path and add them to the appMap.
5
- * @param options
6
6
  */
7
7
  export declare function linkPath(options: {
8
- linkedPath: string;
8
+ linkedPath: LinkedPath;
9
9
  appMap: PackageMap;
10
- packages: PackageDefinitions;
11
- ignoredLinkedPackages?: string[];
10
+ }, context: {
11
+ packages: PackageDefinitionsCache;
12
12
  }): Promise<void>;
13
13
  //# 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,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAOzD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAE3E;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE;IACP,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;CACpB,EACD,OAAO,EAAE;IACP,QAAQ,EAAE,uBAAuB,CAAC;CACnC,iBA2FF"}
@@ -1,30 +1,31 @@
1
- import { findPackagesFromPath } from './findPackagesFromPath.js';
2
1
  import { addLinkedEntryDependencies } from './addLinkedEntryDependencies.js';
3
2
  import { detachEntry } from './detachEntry.js';
3
+ import { findPackagesFromPath } from './findPackagesFromPath.js';
4
4
  import { parseRequiredBy } from './parseRequiredBy.js';
5
+ import { slash } from '@ms-cloudpack/path-string-parsing';
5
6
  /**
6
7
  * Given a linked path, an appMap, find packages from the linked path and add them to the appMap.
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 } = options;
11
11
  const linkMap = await findPackagesFromPath({
12
- paths: [linkedPath],
13
- packages,
12
+ paths: [linkedPath.path],
14
13
  discoverPackages: true,
15
- });
14
+ }, context);
16
15
  const entriesToLink = [];
16
+ const { path, ignoredPackages = [], includeAll } = linkedPath;
17
17
  // Iterate through the linkMap, looking for internal packages to link to the appMap.
18
18
  for (const [packageName, packageVersions] of Object.entries(linkMap)) {
19
19
  const appEntries = Object.values(appMap[packageName] || {});
20
20
  if (appEntries.length) {
21
21
  const linkedEntries = Object.values(packageVersions);
22
+ const linkedEntry = linkedEntries.length === 1 ? linkedEntries[0] : undefined;
22
23
  // For linked dependencies, we don't want multiple versions referenced. Remove them
23
24
  // all and add them in a second pass.
24
- if (linkedEntries.length == 1 &&
25
- !linkedEntries[0].isExternal &&
26
- (!ignoredLinkedPackages || ignoredLinkedPackages.indexOf(packageName) === -1)) {
27
- const linkedEntry = linkedEntries[0];
25
+ if (linkedEntry &&
26
+ !linkedEntry.isExternal &&
27
+ ignoredPackages.indexOf(packageName) === -1 &&
28
+ (includeAll || isContainedInPath(linkedEntry.path, path))) {
28
29
  // Linked packages use an asterisk for the version description. This keeps it semver compatible with
29
30
  // anything.
30
31
  linkedEntry.version += '-linked';
@@ -75,7 +76,19 @@ export async function linkPath(options) {
75
76
  }
76
77
  // Once all linked entries have been added, ensure their dependencies are resolved.
77
78
  for (const linkedEntry of entriesToLink) {
78
- await addLinkedEntryDependencies({ linkedEntry, appMap: appMap, linkMap, packages });
79
+ await addLinkedEntryDependencies({ linkedEntry, appMap: appMap, linkMap }, context);
80
+ }
81
+ }
82
+ function isContainedInPath(path, basePath) {
83
+ path = normalizePath(path);
84
+ basePath = normalizePath(basePath);
85
+ return path.indexOf(basePath) === 0;
86
+ }
87
+ function normalizePath(path) {
88
+ let normalizedPath = slash(path);
89
+ if (!normalizedPath.endsWith('/')) {
90
+ normalizedPath += '/';
79
91
  }
92
+ return normalizedPath;
80
93
  }
81
94
  //# 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 = {};\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, packages });\n }\n}\n"]}
1
+ {"version":3,"file":"linkPath.js","sourceRoot":"","sources":["../../src/createResolveMap/linkPath.ts"],"names":[],"mappings":"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","sourcesContent":["import type { LinkedPath } from '../types/LinkedPath.js';\nimport type { PackageMap } from '../types/PackageMap.js';\nimport type { ResolveMapEntry } from '../types/ResolveMapEntry.js';\nimport { addLinkedEntryDependencies } from './addLinkedEntryDependencies.js';\nimport { detachEntry } from './detachEntry.js';\nimport { findPackagesFromPath } from './findPackagesFromPath.js';\nimport { parseRequiredBy } from './parseRequiredBy.js';\nimport { slash } from '@ms-cloudpack/path-string-parsing';\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 */\nexport async function linkPath(\n options: {\n linkedPath: LinkedPath;\n appMap: PackageMap;\n },\n context: {\n packages: PackageDefinitionsCache;\n },\n) {\n const { linkedPath, appMap } = options;\n const linkMap = await findPackagesFromPath(\n {\n paths: [linkedPath.path],\n discoverPackages: true,\n },\n context,\n );\n const entriesToLink: ResolveMapEntry[] = [];\n const { path, ignoredPackages = [], includeAll } = linkedPath;\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 const linkedEntry = linkedEntries.length === 1 ? linkedEntries[0] : undefined;\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 linkedEntry &&\n !linkedEntry.isExternal &&\n ignoredPackages.indexOf(packageName) === -1 &&\n (includeAll || isContainedInPath(linkedEntry.path, path))\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\nfunction isContainedInPath(path: string, basePath: string) {\n path = normalizePath(path);\n basePath = normalizePath(basePath);\n\n return path.indexOf(basePath) === 0;\n}\n\nfunction normalizePath(path: string) {\n let normalizedPath = slash(path);\n\n if (!normalizedPath.endsWith('/')) {\n normalizedPath += '/';\n }\n\n return normalizedPath;\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"}