@ms-cloudpack/package-utilities 3.0.2 → 3.1.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 (29) hide show
  1. package/lib/createImportMap.js +1 -1
  2. package/lib/createImportMap.js.map +1 -1
  3. package/lib/createResolveMap/addLinkedEntryDependencies.d.ts.map +1 -1
  4. package/lib/createResolveMap/addLinkedEntryDependencies.js +9 -13
  5. package/lib/createResolveMap/addLinkedEntryDependencies.js.map +1 -1
  6. package/lib/createResolveMap/createResolveMap.d.ts +1 -0
  7. package/lib/createResolveMap/createResolveMap.d.ts.map +1 -1
  8. package/lib/createResolveMap/createResolveMap.js +2 -2
  9. package/lib/createResolveMap/createResolveMap.js.map +1 -1
  10. package/lib/createResolveMap/detachEntry.d.ts.map +1 -1
  11. package/lib/createResolveMap/detachEntry.js +18 -15
  12. package/lib/createResolveMap/detachEntry.js.map +1 -1
  13. package/lib/createResolveMap/diffResolveMaps.d.ts +15 -0
  14. package/lib/createResolveMap/diffResolveMaps.d.ts.map +1 -0
  15. package/lib/createResolveMap/diffResolveMaps.js +74 -0
  16. package/lib/createResolveMap/diffResolveMaps.js.map +1 -0
  17. package/lib/createResolveMap/linkPath.d.ts +1 -0
  18. package/lib/createResolveMap/linkPath.d.ts.map +1 -1
  19. package/lib/createResolveMap/linkPath.js +59 -34
  20. package/lib/createResolveMap/linkPath.js.map +1 -1
  21. package/lib/createResolveMap/parseRequiredBy.d.ts +5 -0
  22. package/lib/createResolveMap/parseRequiredBy.d.ts.map +1 -0
  23. package/lib/createResolveMap/parseRequiredBy.js +10 -0
  24. package/lib/createResolveMap/parseRequiredBy.js.map +1 -0
  25. package/lib/index.d.ts +2 -0
  26. package/lib/index.d.ts.map +1 -1
  27. package/lib/index.js +1 -0
  28. package/lib/index.js.map +1 -1
  29. package/package.json +3 -3
@@ -47,7 +47,7 @@ async function getImportMapFromEntry(entry, bundleServerUrl, packages, sessionVe
47
47
  requiredConditions: ['browser-esm'],
48
48
  });
49
49
  const bundledExportsMap = flattenExportsMap(exportsMap);
50
- const packagePrefix = `${definition.name}@${definition.version}/`;
50
+ const packagePrefix = `${entry.name}@${entry.version}/`;
51
51
  const baseUrl = `${bundleServerUrl}/${packagePrefix}`;
52
52
  // Add the bundled entries to the import map, but prefer unbundled if the entry exists.
53
53
  for (const [importPath, bundledFilePath] of Object.entries(bundledExportsMap)) {
@@ -1 +1 @@
1
- {"version":3,"file":"createImportMap.js","sourceRoot":"","sources":["../src/createImportMap.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport type { ResolveMap } from './createResolveMap/ResolveMap.js';\nimport type { ResolveMapEntry } from './createResolveMap/ResolveMapEntry.js';\nimport { PackageDefinitions } from './PackageDefinitions.js';\nimport { merge } from 'merge';\nimport { flattenExportsMap } from './flattenExportsMap.js';\nimport path from 'path';\nimport { getExportsMap } from './getExportsMap.js';\nimport { isExternalPackage } from './isExternalPackage.js';\n\nexport interface ImportMap {\n imports: Record<string, string>;\n scopes?: Record<string, Record<string, string>>;\n}\n\n/**\n * Given a resolve ma and a bundleServerUrl, returns an import map to be used in the browser.\n */\nexport async function createImportMap(\n resolveMap: ResolveMap,\n bundleServerUrl: string,\n options: {\n sessionVersion?: number;\n packages?: PackageDefinitionsCache;\n targetVersions?: Record<string, number>;\n } = {},\n): Promise<ImportMap> {\n const { packages = PackageDefinitions.getInstance(), sessionVersion = 0, targetVersions } = options;\n const importMap: ImportMap = {\n imports: {},\n };\n\n for (const resolveEntry of Object.values(resolveMap)) {\n merge(\n importMap.imports,\n await getImportMapFromEntry(resolveEntry, bundleServerUrl, packages, sessionVersion, targetVersions),\n );\n\n if (resolveEntry.scopedVersions) {\n // Initialize scopes\n importMap.scopes ??= {};\n\n for (const scopedEntry of Object.values(resolveEntry.scopedVersions)) {\n const importMapForEntry = await getImportMapFromEntry(\n scopedEntry,\n bundleServerUrl,\n packages,\n sessionVersion,\n targetVersions,\n );\n\n for (const requiredById of Object.keys(scopedEntry.requiredBy)) {\n const scopes = (importMap.scopes[`${bundleServerUrl}/${requiredById}/`] ??= {});\n merge(scopes, importMapForEntry);\n }\n }\n }\n }\n\n return importMap;\n}\n\nasync function getImportMapFromEntry(\n entry: ResolveMapEntry,\n bundleServerUrl: string,\n packages: PackageDefinitionsCache,\n sessionVersion: number,\n targetVersions?: Record<string, number>,\n): Promise<Record<string, string>> {\n const importMap: Record<string, string> = {};\n const definition = await packages.get(entry.path);\n const exportsMap = await getExportsMap(entry.path, { packages });\n\n if (\n !definition ||\n !definition.name ||\n !definition.version ||\n !exportsMap ||\n Object.keys(exportsMap).length === 0 ||\n definition.name.startsWith('@types/')\n ) {\n return importMap;\n }\n\n // Get both the unbundled entries from the exports map\n const unbundledExportsMap = flattenExportsMap(exportsMap, {\n conditions: ['browser-esm'],\n requiredConditions: ['browser-esm'],\n });\n const bundledExportsMap = flattenExportsMap(exportsMap);\n const packagePrefix = `${definition.name}@${definition.version}/`;\n const baseUrl = `${bundleServerUrl}/${packagePrefix}`;\n\n // Add the bundled entries to the import map, but prefer unbundled if the entry exists.\n for (const [importPath, bundledFilePath] of Object.entries(bundledExportsMap)) {\n const isExternal = isExternalPackage(entry.path);\n const unbundledFilePath = isExternal ? unbundledExportsMap[importPath] : undefined;\n let resolvedFilePath = unbundledFilePath ? `unbundled/${unbundledFilePath}` : `bundled/${bundledFilePath}`;\n const targetVersion = targetVersions?.[entry.path];\n const cacheBuster = `v${sessionVersion ?? 0}${targetVersion ? `.${targetVersion}` : ''}/`;\n\n resolvedFilePath = `${cacheBuster}${resolvedFilePath}`;\n const ext = path.extname(resolvedFilePath);\n\n // For bundled files:\n if (!unbundledFilePath) {\n // Ignore .d.ts entries\n if (resolvedFilePath.endsWith('.d.ts')) {\n continue;\n }\n\n // We always expect responses to come back as javascript (.js extensions.)\n if (ext !== '.js') {\n resolvedFilePath = path.join(\n path.dirname(resolvedFilePath),\n path.basename(resolvedFilePath, ext) + (ext === '.mjs' ? '.js' : ext + '.js'),\n );\n }\n\n // Plus signs should be replaced with underscores.\n resolvedFilePath = resolvedFilePath.replace(/\\+/g, '_');\n }\n\n importMap[importPath.replace('.', `${definition.name}`)] = new URL(resolvedFilePath, baseUrl).href;\n }\n\n // Finally add a fallback for all other unexpected bundle entries. (Note, this should point to a script\n // which logs this as an error to the user and offers a way to add the entry to exports overrides.)\n // importMap[definition.name + '/'] = baseUrl + 'missing/';\n\n return importMap;\n}\n"]}
1
+ {"version":3,"file":"createImportMap.js","sourceRoot":"","sources":["../src/createImportMap.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PackageDefinitionsCache } from '@ms-cloudpack/bundler-types';\nimport type { ResolveMap } from './createResolveMap/ResolveMap.js';\nimport type { ResolveMapEntry } from './createResolveMap/ResolveMapEntry.js';\nimport { PackageDefinitions } from './PackageDefinitions.js';\nimport { merge } from 'merge';\nimport { flattenExportsMap } from './flattenExportsMap.js';\nimport path from 'path';\nimport { getExportsMap } from './getExportsMap.js';\nimport { isExternalPackage } from './isExternalPackage.js';\n\nexport interface ImportMap {\n imports: Record<string, string>;\n scopes?: Record<string, Record<string, string>>;\n}\n\n/**\n * Given a resolve ma and a bundleServerUrl, returns an import map to be used in the browser.\n */\nexport async function createImportMap(\n resolveMap: ResolveMap,\n bundleServerUrl: string,\n options: {\n sessionVersion?: number;\n packages?: PackageDefinitionsCache;\n targetVersions?: Record<string, number>;\n } = {},\n): Promise<ImportMap> {\n const { packages = PackageDefinitions.getInstance(), sessionVersion = 0, targetVersions } = options;\n const importMap: ImportMap = {\n imports: {},\n };\n\n for (const resolveEntry of Object.values(resolveMap)) {\n merge(\n importMap.imports,\n await getImportMapFromEntry(resolveEntry, bundleServerUrl, packages, sessionVersion, targetVersions),\n );\n\n if (resolveEntry.scopedVersions) {\n // Initialize scopes\n importMap.scopes ??= {};\n\n for (const scopedEntry of Object.values(resolveEntry.scopedVersions)) {\n const importMapForEntry = await getImportMapFromEntry(\n scopedEntry,\n bundleServerUrl,\n packages,\n sessionVersion,\n targetVersions,\n );\n\n for (const requiredById of Object.keys(scopedEntry.requiredBy)) {\n const scopes = (importMap.scopes[`${bundleServerUrl}/${requiredById}/`] ??= {});\n merge(scopes, importMapForEntry);\n }\n }\n }\n }\n\n return importMap;\n}\n\nasync function getImportMapFromEntry(\n entry: ResolveMapEntry,\n bundleServerUrl: string,\n packages: PackageDefinitionsCache,\n sessionVersion: number,\n targetVersions?: Record<string, number>,\n): Promise<Record<string, string>> {\n const importMap: Record<string, string> = {};\n const definition = await packages.get(entry.path);\n const exportsMap = await getExportsMap(entry.path, { packages });\n\n if (\n !definition ||\n !definition.name ||\n !definition.version ||\n !exportsMap ||\n Object.keys(exportsMap).length === 0 ||\n definition.name.startsWith('@types/')\n ) {\n return importMap;\n }\n\n // Get both the unbundled entries from the exports map\n const unbundledExportsMap = flattenExportsMap(exportsMap, {\n conditions: ['browser-esm'],\n requiredConditions: ['browser-esm'],\n });\n const bundledExportsMap = flattenExportsMap(exportsMap);\n const packagePrefix = `${entry.name}@${entry.version}/`;\n const baseUrl = `${bundleServerUrl}/${packagePrefix}`;\n\n // Add the bundled entries to the import map, but prefer unbundled if the entry exists.\n for (const [importPath, bundledFilePath] of Object.entries(bundledExportsMap)) {\n const isExternal = isExternalPackage(entry.path);\n const unbundledFilePath = isExternal ? unbundledExportsMap[importPath] : undefined;\n let resolvedFilePath = unbundledFilePath ? `unbundled/${unbundledFilePath}` : `bundled/${bundledFilePath}`;\n const targetVersion = targetVersions?.[entry.path];\n const cacheBuster = `v${sessionVersion ?? 0}${targetVersion ? `.${targetVersion}` : ''}/`;\n\n resolvedFilePath = `${cacheBuster}${resolvedFilePath}`;\n const ext = path.extname(resolvedFilePath);\n\n // For bundled files:\n if (!unbundledFilePath) {\n // Ignore .d.ts entries\n if (resolvedFilePath.endsWith('.d.ts')) {\n continue;\n }\n\n // We always expect responses to come back as javascript (.js extensions.)\n if (ext !== '.js') {\n resolvedFilePath = path.join(\n path.dirname(resolvedFilePath),\n path.basename(resolvedFilePath, ext) + (ext === '.mjs' ? '.js' : ext + '.js'),\n );\n }\n\n // Plus signs should be replaced with underscores.\n resolvedFilePath = resolvedFilePath.replace(/\\+/g, '_');\n }\n\n importMap[importPath.replace('.', `${definition.name}`)] = new URL(resolvedFilePath, baseUrl).href;\n }\n\n // Finally add a fallback for all other unexpected bundle entries. (Note, this should point to a script\n // which logs this as an error to the user and offers a way to add the entry to exports overrides.)\n // importMap[definition.name + '/'] = baseUrl + 'missing/';\n\n return importMap;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"addLinkedEntryDependencies.d.ts","sourceRoot":"","sources":["../../src/createResolveMap/addLinkedEntryDependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD;;;;GAIG;AAEH,wBAAsB,0BAA0B,CAAC,OAAO,EAAE;IACxD,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,UAAU,CAAC;IACpB,WAAW,EAAE,eAAe,CAAC;IAC7B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B,iBAiEA"}
1
+ {"version":3,"file":"addLinkedEntryDependencies.d.ts","sourceRoot":"","sources":["../../src/createResolveMap/addLinkedEntryDependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD;;;;GAIG;AAEH,wBAAsB,0BAA0B,CAAC,OAAO,EAAE;IACxD,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,UAAU,CAAC;IACpB,WAAW,EAAE,eAAe,CAAC;IAC7B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B,iBA6DA"}
@@ -22,12 +22,8 @@ export async function addLinkedEntryDependencies(options) {
22
22
  // The app does not have any version of this dependency, we need to bring over the version
23
23
  // used by the linkedEntry.
24
24
  const dependencyEntry = linkMap[dependencyName]?.[linkedDependencyVersion];
25
- appMap[dependencyName] = { [dependencyEntry.isExternal ? linkedDependencyVersion : '*']: dependencyEntry };
25
+ appMap[dependencyName] = { [linkedDependencyVersion]: dependencyEntry };
26
26
  dependencyEntry.requiredBy = { [`${name}@${version}`]: versionRequirement };
27
- if (!dependencyEntry.isExternal) {
28
- dependencyEntry.isLinked = true;
29
- dependencyEntry.version = '*';
30
- }
31
27
  // Recursive through the dependency's dependencies.
32
28
  await addLinkedEntryDependencies({ appMap, linkMap, linkedEntry: dependencyEntry, packages });
33
29
  isSatisfied = true;
@@ -36,9 +32,13 @@ export async function addLinkedEntryDependencies(options) {
36
32
  // We have at least 1 or more versions of this dependency already. If a sufficient version
37
33
  // of the dependency is already in the appMap, we we just need to update the linkedEntry's
38
34
  // dependency and the dependency's requiredBy record for the parent.
39
- const appDependencyVersions = appMap[dependencyName];
40
- for (const appDependencyEntry of Object.values(appDependencyVersions)) {
41
- if (satisfies(appDependencyEntry.version, versionRequirement)) {
35
+ const appDependencyVersions = Object.values(appMap[dependencyName]);
36
+ if (appDependencyVersions.length === 1 && !appDependencyVersions[0].isExternal) {
37
+ continue;
38
+ }
39
+ for (const appDependencyEntry of appDependencyVersions) {
40
+ // If the dependency satisfies the semver, use that!
41
+ if (appDependencyEntry.isLinked || satisfies(appDependencyEntry.version, versionRequirement)) {
42
42
  linkedEntry.dependencies[dependencyName] = appDependencyEntry.version;
43
43
  appDependencyEntry.requiredBy[`${name}@${version}`] = versionRequirement;
44
44
  await addLinkedEntryDependencies({ appMap, linkMap, linkedEntry: appDependencyEntry, packages });
@@ -53,11 +53,7 @@ export async function addLinkedEntryDependencies(options) {
53
53
  const dependencyEntry = linkMap[dependencyName]?.[linkedDependencyVersion];
54
54
  appMap[dependencyName][linkedDependencyVersion] = dependencyEntry;
55
55
  linkedEntry.dependencies[dependencyName] = linkedDependencyVersion;
56
- dependencyEntry.requiredBy = { [`${name}@${linkedEntry.isExternal ? version : '*'}`]: versionRequirement };
57
- if (!dependencyEntry.isExternal) {
58
- dependencyEntry.isLinked = true;
59
- dependencyEntry.version = '*';
60
- }
56
+ dependencyEntry.requiredBy = { [`${name}@${version}`]: versionRequirement };
61
57
  // Recursive through the dependency's dependencies.
62
58
  await addLinkedEntryDependencies({ appMap, linkMap, linkedEntry: dependencyEntry, packages });
63
59
  }
@@ -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] = { [dependencyEntry.isExternal ? linkedDependencyVersion : '*']: dependencyEntry };\n dependencyEntry.requiredBy = { [`${name}@${version}`]: versionRequirement };\n\n if (!dependencyEntry.isExternal) {\n dependencyEntry.isLinked = true;\n dependencyEntry.version = '*';\n }\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 = appMap[dependencyName];\n\n for (const appDependencyEntry of Object.values(appDependencyVersions)) {\n if (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 appMap[dependencyName][linkedDependencyVersion] = dependencyEntry;\n linkedEntry.dependencies[dependencyName] = linkedDependencyVersion;\n dependencyEntry.requiredBy = { [`${name}@${linkedEntry.isExternal ? version : '*'}`]: versionRequirement };\n\n if (!dependencyEntry.isExternal) {\n dependencyEntry.isLinked = true;\n dependencyEntry.version = '*';\n }\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 { 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"]}
@@ -14,6 +14,7 @@ export declare function createResolveMap(options: {
14
14
  appPath: string;
15
15
  additionalPaths?: string[];
16
16
  linkedPaths?: string[];
17
+ ignoredLinkedPackages?: string[];
17
18
  gitRootPath?: string;
18
19
  useStrictVersioning?: boolean;
19
20
  packages?: PackageDefinitions;
@@ -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,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B,GAAG,OAAO,CAAC,UAAU,CAAC,CAyBtB"}
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"}
@@ -13,7 +13,7 @@ import { linkPath } from './linkPath.js';
13
13
  * which aren't already in the resolve map are added as scoped versions.
14
14
  */
15
15
  export async function createResolveMap(options) {
16
- const { appPath, additionalPaths = [], linkedPaths = [], useStrictVersioning, packages = PackageDefinitions.getInstance(), gitRootPath, } = options;
16
+ const { appPath, additionalPaths = [], linkedPaths = [], useStrictVersioning, packages = PackageDefinitions.getInstance(), ignoredLinkedPackages, gitRootPath, } = options;
17
17
  // First we discover the dependencies for the app.
18
18
  const appMap = await findPackagesFromPath({
19
19
  paths: [appPath, ...additionalPaths],
@@ -23,7 +23,7 @@ export async function createResolveMap(options) {
23
23
  });
24
24
  // Next, we iterate through linked paths to inject them into the packageMap.
25
25
  for (const linkedPath of linkedPaths) {
26
- await linkPath({ linkedPath, appMap, packages });
26
+ await linkPath({ linkedPath, appMap, packages, ignoredLinkedPackages });
27
27
  }
28
28
  // Finally we condense into a resolve map.
29
29
  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,OAOtC;IACC,MAAM,EACJ,OAAO,EACP,eAAe,GAAG,EAAE,EACpB,WAAW,GAAG,EAAE,EAChB,mBAAmB,EACnB,QAAQ,GAAG,kBAAkB,CAAC,WAAW,EAAE,EAC3C,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,CAAC,CAAC;KAClD;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 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 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 });\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":"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 +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;AAElD;;GAEG;AAEH,wBAAgB,WAAW,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,QAgClF"}
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,3 +1,4 @@
1
+ import { parseRequiredBy } from './parseRequiredBy.js';
1
2
  /**
2
3
  * Removes requiredBy references for an entry being removed.
3
4
  */
@@ -7,22 +8,24 @@ export function detachEntry(options) {
7
8
  while (dependenciesToDetach.length) {
8
9
  const entry = dependenciesToDetach.pop();
9
10
  const { name, version, requiredBy } = entry;
10
- if (appMap[name]?.[version]) {
11
- // Disconnect the entry from consumers.
12
- for (const requiredByName of Object.keys(requiredBy)) {
13
- const [parentName, parentVersion] = requiredByName.split('@');
14
- const parentEntry = appMap[parentName]?.[parentVersion];
15
- if (parentEntry) {
16
- delete parentEntry.dependencies[name];
11
+ if (!entry.isLinked) {
12
+ if (appMap[name]?.[version]) {
13
+ // Disconnect the entry from consumers.
14
+ for (const requiredByName of Object.keys(requiredBy)) {
15
+ const [parentName, parentVersion] = parseRequiredBy(requiredByName);
16
+ const parentEntry = appMap[parentName]?.[parentVersion];
17
+ if (parentEntry) {
18
+ delete parentEntry.dependencies[name];
19
+ }
17
20
  }
18
- }
19
- // Disconnect dependencies from the entry.
20
- for (const [dependencyName, dependencyVersion] of Object.entries(entry.dependencies)) {
21
- const dependencyEntry = appMap[dependencyName]?.[dependencyVersion];
22
- if (dependencyEntry) {
23
- delete dependencyEntry.requiredBy[`${name}@${version}`];
24
- if (Object.keys(dependencyEntry.requiredBy).length === 0) {
25
- dependenciesToDetach.push(dependencyEntry);
21
+ // Disconnect dependencies from the entry.
22
+ for (const [dependencyName, dependencyVersion] of Object.entries(entry.dependencies)) {
23
+ const dependencyEntry = appMap[dependencyName]?.[dependencyVersion];
24
+ if (dependencyEntry) {
25
+ delete dependencyEntry.requiredBy[`${name}@${version}`];
26
+ if (Object.keys(dependencyEntry.requiredBy).length === 0) {
27
+ dependenciesToDetach.push(dependencyEntry);
28
+ }
26
29
  }
27
30
  }
28
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"detachEntry.js","sourceRoot":"","sources":["../../src/createResolveMap/detachEntry.ts"],"names":[],"mappings":"AAGA;;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,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;YAC3B,uCAAuC;YACvC,KAAK,MAAM,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBACpD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC9D,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;gBAExD,IAAI,WAAW,EAAE;oBACf,OAAO,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;iBACvC;aACF;YAED,0CAA0C;YAC1C,KAAK,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;gBACpF,MAAM,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;gBAEpE,IAAI,eAAe,EAAE;oBACnB,OAAO,eAAe,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC;oBACxD,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;wBACxD,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;qBAC5C;iBACF;aACF;SACF;KACF;AACH,CAAC","sourcesContent":["import type { ResolveMapEntry } from './ResolveMapEntry.js';\nimport type { PackageMap } from './PackageMap.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 (appMap[name]?.[version]) {\n // Disconnect the entry from consumers.\n for (const requiredByName of Object.keys(requiredBy)) {\n const [parentName, parentVersion] = requiredByName.split('@');\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"]}
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"]}
@@ -0,0 +1,15 @@
1
+ import type { ResolveMap } from './ResolveMap.js';
2
+ export interface DiffResolveMapsChanges {
3
+ linked: string[];
4
+ internal: string[];
5
+ external: string[];
6
+ }
7
+ export interface DiffResolveMapsStats {
8
+ added: DiffResolveMapsChanges;
9
+ removed: DiffResolveMapsChanges;
10
+ }
11
+ export declare function diffResolveMaps(options: {
12
+ before: ResolveMap;
13
+ after: ResolveMap;
14
+ }): DiffResolveMapsStats;
15
+ //# sourceMappingURL=diffResolveMaps.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,74 @@
1
+ export function diffResolveMaps(options) {
2
+ const { before, after } = options;
3
+ const stats = {
4
+ added: {
5
+ linked: [],
6
+ internal: [],
7
+ external: [],
8
+ },
9
+ removed: {
10
+ linked: [],
11
+ internal: [],
12
+ external: [],
13
+ },
14
+ };
15
+ const oldPackageMap = toPackageMap(before);
16
+ const newPackageMap = toPackageMap(after);
17
+ // We will traverse the entries in the new list to compare with the old list. As we find entries that exist in the old,
18
+ // we will remove them from the old. This will leave the old list with only entries that were removed.
19
+ for (const [name, newVersions] of Object.entries(newPackageMap)) {
20
+ const oldVersions = oldPackageMap[name];
21
+ for (const [version, entry] of Object.entries(newVersions)) {
22
+ if (!oldVersions) {
23
+ trackEntry(entry, stats.added);
24
+ }
25
+ else if (!oldVersions[version]) {
26
+ trackEntry(entry, stats.added);
27
+ }
28
+ else {
29
+ delete oldVersions[version];
30
+ }
31
+ }
32
+ if (oldVersions) {
33
+ for (const entry of Object.values(oldVersions)) {
34
+ trackEntry(entry, stats.removed);
35
+ }
36
+ delete oldPackageMap[name];
37
+ }
38
+ }
39
+ // Iterate through the remaining entries in the old list to find any that were removed.
40
+ for (const oldVersions of Object.values(oldPackageMap)) {
41
+ for (const entry of Object.values(oldVersions)) {
42
+ trackEntry(entry, stats.removed);
43
+ }
44
+ }
45
+ return stats;
46
+ }
47
+ function trackEntry(entry, changes) {
48
+ const entryId = `${entry.name}@${entry.version}`;
49
+ if (entry.isLinked) {
50
+ changes.linked.push(entryId);
51
+ }
52
+ else if (entry.isExternal) {
53
+ changes.external.push(entryId);
54
+ }
55
+ else {
56
+ changes.internal.push(entryId);
57
+ }
58
+ }
59
+ function toPackageMap(resolveMap) {
60
+ var _a;
61
+ const packageMap = {};
62
+ const entriesToAdd = Object.values(resolveMap);
63
+ while (entriesToAdd.length) {
64
+ const entry = entriesToAdd.pop();
65
+ const { scopedVersions, ...rest } = entry;
66
+ const versions = (packageMap[_a = entry.name] || (packageMap[_a] = {}));
67
+ versions[entry.version] = rest;
68
+ if (scopedVersions) {
69
+ entriesToAdd.push(...Object.values(scopedVersions));
70
+ }
71
+ }
72
+ return packageMap;
73
+ }
74
+ //# sourceMappingURL=diffResolveMaps.js.map
@@ -0,0 +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"]}
@@ -8,5 +8,6 @@ export declare function linkPath(options: {
8
8
  linkedPath: string;
9
9
  appMap: PackageMap;
10
10
  packages: PackageDefinitions;
11
+ ignoredLinkedPackages?: string[];
11
12
  }): Promise<void>;
12
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;AAKlD;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,iBAuD/G"}
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,54 +1,79 @@
1
1
  import { findPackagesFromPath } from './findPackagesFromPath.js';
2
2
  import { addLinkedEntryDependencies } from './addLinkedEntryDependencies.js';
3
3
  import { detachEntry } from './detachEntry.js';
4
+ import { parseRequiredBy } from './parseRequiredBy.js';
4
5
  /**
5
6
  * Given a linked path, an appMap, find packages from the linked path and add them to the appMap.
6
7
  * @param options
7
8
  */
8
9
  export async function linkPath(options) {
9
- const { linkedPath, appMap, packages } = options;
10
+ const { linkedPath, appMap, packages, ignoredLinkedPackages } = options;
10
11
  const linkMap = await findPackagesFromPath({
11
12
  paths: [linkedPath],
12
13
  packages,
13
14
  discoverPackages: true,
14
15
  });
16
+ const entriesToLink = [];
15
17
  // Iterate through the linkMap, looking for internal packages to link to the appMap.
16
18
  for (const [packageName, packageVersions] of Object.entries(linkMap)) {
17
- if (appMap[packageName]) {
18
- const linkedVersions = Object.keys(packageVersions);
19
- if (linkedVersions.length == 1) {
20
- const linkedEntry = packageVersions[linkedVersions[0]];
21
- if (!linkedEntry.isExternal) {
22
- // Combine all requiredBy references from all appMap entries for this package so that we can
23
- // set it on the linked package entry.
24
- const requiredBy = Object.values(appMap[packageName]).reduce((acc, p) => {
25
- Object.assign(acc, p.requiredBy);
26
- return acc;
27
- }, {});
28
- // Linked packages use an asterisk for the version description. This keeps it semver compatible with
29
- // anything.
30
- linkedEntry.version = '*';
31
- linkedEntry.isLinked = true;
32
- linkedEntry.requiredBy = requiredBy;
33
- // Remove all existing requiredBy references to the entry we're about to replace.
34
- const existingVersions = Object.values(appMap[packageName]);
35
- for (const existingEntry of existingVersions) {
36
- detachEntry({ appMap, entry: existingEntry });
37
- }
38
- // Add the linked entry
39
- appMap[packageName] = { '*': linkedEntry };
40
- // Ensure that the parent entry depends on the linked entry.
41
- for (const parentId of Object.keys(requiredBy)) {
42
- const [name, version] = parentId.split('@');
43
- const parentEntry = appMap[name]?.[version];
44
- parentEntry.dependencies[packageName] = '*';
45
- }
46
- // We've now linked a package in. We need to assess its dependencies to determine if they are already
47
- // satisfied by existing dependencies.
48
- await addLinkedEntryDependencies({ linkedEntry, appMap: appMap, linkMap, packages });
49
- }
19
+ const appEntries = Object.values(appMap[packageName] || {});
20
+ if (appEntries.length) {
21
+ const linkedEntries = Object.values(packageVersions);
22
+ // For linked dependencies, we don't want multiple versions referenced. Remove them
23
+ // 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];
28
+ // Linked packages use an asterisk for the version description. This keeps it semver compatible with
29
+ // anything.
30
+ linkedEntry.version += '-linked';
31
+ linkedEntry.isLinked = true;
32
+ entriesToLink.push(linkedEntry);
50
33
  }
51
34
  }
52
35
  }
36
+ // We now have a list of paths to link. Iterate through them, add them to the appMap,
37
+ // and ensure their dependencies are satisfied.
38
+ for (const linkedEntry of entriesToLink) {
39
+ const { name } = linkedEntry;
40
+ const existingEntries = Object.values(appMap[name]);
41
+ linkedEntry.requiredBy = existingEntries.reduce((acc, entry) => {
42
+ for (const [requiredById, requirement] of Object.entries(entry.requiredBy)) {
43
+ const [requiredByName] = parseRequiredBy(requiredById);
44
+ const linkedParentEntry = Object.values(linkMap[requiredByName] || {})[0];
45
+ acc[linkedParentEntry?.isLinked ? `${linkedParentEntry.name}@${linkedParentEntry.version}` : requiredById] =
46
+ requirement;
47
+ }
48
+ return acc;
49
+ }, {});
50
+ }
51
+ for (const linkedEntry of entriesToLink) {
52
+ const { name } = linkedEntry;
53
+ const existingEntries = Object.values(appMap[name]);
54
+ // We need to detach all existing entries from the appMap, along with their dependences. Note - detaching just means that
55
+ // we disconnect the entry from its parent and children. If the children have no other parents, we disconnect them as well
56
+ // and recurse through their children.
57
+ for (const existingEntry of existingEntries) {
58
+ detachEntry({ appMap, entry: existingEntry });
59
+ }
60
+ // Attach the linked entry to the parents' dependencies.
61
+ for (const requiredById of Object.keys(linkedEntry.requiredBy)) {
62
+ const [requiredByName, requiredByVersion] = parseRequiredBy(requiredById);
63
+ let requiredByEntry = appMap[requiredByName][requiredByVersion];
64
+ // If we can't find the requiredBy entry, it likely means that the entry was already replaced with a linked entry
65
+ // in the app map. Fall back to the first entry.
66
+ if (!requiredByEntry) {
67
+ requiredByEntry = Object.values(appMap[requiredByName])[0];
68
+ }
69
+ requiredByEntry.dependencies[name] = linkedEntry.version;
70
+ }
71
+ // Add the linked entry
72
+ appMap[linkedEntry.name] = { [linkedEntry.version]: linkedEntry };
73
+ }
74
+ // Once all linked entries have been added, ensure their dependencies are resolved.
75
+ for (const linkedEntry of entriesToLink) {
76
+ await addLinkedEntryDependencies({ linkedEntry, appMap: appMap, linkMap, packages });
77
+ }
53
78
  }
54
79
  //# sourceMappingURL=linkPath.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"linkPath.js","sourceRoot":"","sources":["../../src/createResolveMap/linkPath.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAiF;IAC9G,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACjD,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC;QACzC,KAAK,EAAE,CAAC,UAAU,CAAC;QACnB,QAAQ;QACR,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IAEH,oFAAoF;IACpF,KAAK,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QACpE,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE;YACvB,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAEpD,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,EAAE;gBAC9B,MAAM,WAAW,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEvD,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;oBAC3B,4FAA4F;oBAC5F,sCAAsC;oBACtC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;wBACtE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;wBACjC,OAAO,GAAG,CAAC;oBACb,CAAC,EAAE,EAAE,CAAC,CAAC;oBAEP,oGAAoG;oBACpG,YAAY;oBACZ,WAAW,CAAC,OAAO,GAAG,GAAG,CAAC;oBAC1B,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;oBAC5B,WAAW,CAAC,UAAU,GAAG,UAAU,CAAC;oBAEpC,iFAAiF;oBACjF,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;oBAE5D,KAAK,MAAM,aAAa,IAAI,gBAAgB,EAAE;wBAC5C,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;qBAC/C;oBAED,uBAAuB;oBACvB,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;oBAE3C,4DAA4D;oBAC5D,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;wBAC9C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;wBAE5C,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;qBAC7C;oBAED,qGAAqG;oBACrG,sCAAsC;oBACtC,MAAM,0BAA0B,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;iBACtF;aACF;SACF;KACF;AACH,CAAC","sourcesContent":["import type { PackageDefinitions } from '../PackageDefinitions.js';\nimport type { PackageMap } from './PackageMap.js';\nimport { findPackagesFromPath } from './findPackagesFromPath.js';\nimport { addLinkedEntryDependencies } from './addLinkedEntryDependencies.js';\nimport { detachEntry } from './detachEntry.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: { linkedPath: string; appMap: PackageMap; packages: PackageDefinitions }) {\n const { linkedPath, appMap, packages } = options;\n const linkMap = await findPackagesFromPath({\n paths: [linkedPath],\n packages,\n discoverPackages: true,\n });\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 if (appMap[packageName]) {\n const linkedVersions = Object.keys(packageVersions);\n\n if (linkedVersions.length == 1) {\n const linkedEntry = packageVersions[linkedVersions[0]];\n\n if (!linkedEntry.isExternal) {\n // Combine all requiredBy references from all appMap entries for this package so that we can\n // set it on the linked package entry.\n const requiredBy = Object.values(appMap[packageName]).reduce((acc, p) => {\n Object.assign(acc, p.requiredBy);\n return acc;\n }, {});\n\n // Linked packages use an asterisk for the version description. This keeps it semver compatible with\n // anything.\n linkedEntry.version = '*';\n linkedEntry.isLinked = true;\n linkedEntry.requiredBy = requiredBy;\n\n // Remove all existing requiredBy references to the entry we're about to replace.\n const existingVersions = Object.values(appMap[packageName]);\n\n for (const existingEntry of existingVersions) {\n detachEntry({ appMap, entry: existingEntry });\n }\n\n // Add the linked entry\n appMap[packageName] = { '*': linkedEntry };\n\n // Ensure that the parent entry depends on the linked entry.\n for (const parentId of Object.keys(requiredBy)) {\n const [name, version] = parentId.split('@');\n const parentEntry = appMap[name]?.[version];\n\n parentEntry.dependencies[packageName] = '*';\n }\n\n // We've now linked a package in. We need to assess its dependencies to determine if they are already\n // satisfied by existing dependencies.\n await addLinkedEntryDependencies({ linkedEntry, appMap: appMap, linkMap, packages });\n }\n }\n }\n }\n}\n"]}
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"]}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Given a requiredBy string (e.g. "@fluentui/react@8.8.8"), return the package name and version.
3
+ */
4
+ export declare function parseRequiredBy(requiredBy: string): string[];
5
+ //# sourceMappingURL=parseRequiredBy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseRequiredBy.d.ts","sourceRoot":"","sources":["../../src/createResolveMap/parseRequiredBy.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,YAMjD"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Given a requiredBy string (e.g. "@fluentui/react@8.8.8"), return the package name and version.
3
+ */
4
+ export function parseRequiredBy(requiredBy) {
5
+ const divideIndex = requiredBy.lastIndexOf('@');
6
+ const name = requiredBy.slice(0, divideIndex);
7
+ const version = requiredBy.slice(divideIndex + 1);
8
+ return [name, version];
9
+ }
10
+ //# sourceMappingURL=parseRequiredBy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseRequiredBy.js","sourceRoot":"","sources":["../../src/createResolveMap/parseRequiredBy.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IAElD,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACzB,CAAC","sourcesContent":["/**\n * Given a requiredBy string (e.g. \"@fluentui/react@8.8.8\"), return the package name and version.\n */\nexport function parseRequiredBy(requiredBy: string) {\n const divideIndex = requiredBy.lastIndexOf('@');\n const name = requiredBy.slice(0, divideIndex);\n const version = requiredBy.slice(divideIndex + 1);\n\n return [name, version];\n}\n"]}
package/lib/index.d.ts CHANGED
@@ -3,6 +3,8 @@ export { createResolveMap } from './createResolveMap/createResolveMap.js';
3
3
  export type { ResolveMap } from './createResolveMap/ResolveMap.js';
4
4
  export type { ResolveMapEntry } from './createResolveMap/ResolveMapEntry.js';
5
5
  export { findResolveMapEntry } from './findResolveMapEntry.js';
6
+ export type { DiffResolveMapsChanges, DiffResolveMapsStats } from './createResolveMap/diffResolveMaps.js';
7
+ export { diffResolveMaps } from './createResolveMap/diffResolveMaps.js';
6
8
  export { flattenExportsMap } from './flattenExportsMap.js';
7
9
  export { createExportsMap } from './createExportsMap.js';
8
10
  export { addExportsMapEntry, type AddExportsMapEntryOptions } from './addExportsMapEntry.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,KAAK,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGvE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACxH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC1G,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAGxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,KAAK,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGvE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACxH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
package/lib/index.js CHANGED
@@ -3,6 +3,7 @@ export { PackageDefinitions } from './PackageDefinitions.js';
3
3
  // ResolveMap creation
4
4
  export { createResolveMap } from './createResolveMap/createResolveMap.js';
5
5
  export { findResolveMapEntry } from './findResolveMapEntry.js';
6
+ export { diffResolveMaps } from './createResolveMap/diffResolveMaps.js';
6
7
  // ExportsMap parsing and creation
7
8
  export { flattenExportsMap } from './flattenExportsMap.js';
8
9
  export { createExportsMap } from './createExportsMap.js';
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,sBAAsB;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAG1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,kCAAkC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAkC,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,qBAAqB;AACrB,OAAO,EAAE,eAAe,EAAkB,MAAM,sBAAsB,CAAC;AAEvE,8BAA8B;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,0BAA0B;AAC1B,OAAO,EAAE,gBAAgB,EAAmB,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAA+D,MAAM,wBAAwB,CAAC;AACxH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC","sourcesContent":["// Package definition parsing\nexport { PackageDefinitions } from './PackageDefinitions.js';\n\n// ResolveMap creation\nexport { createResolveMap } from './createResolveMap/createResolveMap.js';\nexport type { ResolveMap } from './createResolveMap/ResolveMap.js';\nexport type { ResolveMapEntry } from './createResolveMap/ResolveMapEntry.js';\nexport { findResolveMapEntry } from './findResolveMapEntry.js';\n\n// ExportsMap parsing and creation\nexport { flattenExportsMap } from './flattenExportsMap.js';\nexport { createExportsMap } from './createExportsMap.js';\nexport { addExportsMapEntry, type AddExportsMapEntryOptions } from './addExportsMapEntry.js';\nexport { getExportsMap } from './getExportsMap.js';\n\n// ImportMap creation\nexport { createImportMap, type ImportMap } from './createImportMap.js';\n\n// Import resolution utilities\nexport { resolve } from './resolve.js';\n\n// Other package utilities\nexport { detectModuleType, type ModuleType } from './detectModuleType.js';\nexport { isExternalPackage } from './isExternalPackage.js';\nexport { findFileInPackage, type FindFileInPackageOptions, type FindFileInPackageResult } from './findFileInPackage.js';\nexport { getVersion } from './getVersion.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,sBAAsB;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAG1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,kCAAkC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAkC,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,qBAAqB;AACrB,OAAO,EAAE,eAAe,EAAkB,MAAM,sBAAsB,CAAC;AAEvE,8BAA8B;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,0BAA0B;AAC1B,OAAO,EAAE,gBAAgB,EAAmB,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAA+D,MAAM,wBAAwB,CAAC;AACxH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC","sourcesContent":["// Package definition parsing\nexport { PackageDefinitions } from './PackageDefinitions.js';\n\n// ResolveMap creation\nexport { createResolveMap } from './createResolveMap/createResolveMap.js';\nexport type { ResolveMap } from './createResolveMap/ResolveMap.js';\nexport type { ResolveMapEntry } from './createResolveMap/ResolveMapEntry.js';\nexport { findResolveMapEntry } from './findResolveMapEntry.js';\nexport type { DiffResolveMapsChanges, DiffResolveMapsStats } from './createResolveMap/diffResolveMaps.js';\nexport { diffResolveMaps } from './createResolveMap/diffResolveMaps.js';\n\n// ExportsMap parsing and creation\nexport { flattenExportsMap } from './flattenExportsMap.js';\nexport { createExportsMap } from './createExportsMap.js';\nexport { addExportsMapEntry, type AddExportsMapEntryOptions } from './addExportsMapEntry.js';\nexport { getExportsMap } from './getExportsMap.js';\n\n// ImportMap creation\nexport { createImportMap, type ImportMap } from './createImportMap.js';\n\n// Import resolution utilities\nexport { resolve } from './resolve.js';\n\n// Other package utilities\nexport { detectModuleType, type ModuleType } from './detectModuleType.js';\nexport { isExternalPackage } from './isExternalPackage.js';\nexport { findFileInPackage, type FindFileInPackageOptions, type FindFileInPackageResult } from './findFileInPackage.js';\nexport { getVersion } from './getVersion.js';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ms-cloudpack/package-utilities",
3
- "version": "3.0.2",
3
+ "version": "3.1.0",
4
4
  "description": "Utilities for resolving/parsing packages and their imports.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -15,9 +15,9 @@
15
15
  "dependencies": {
16
16
  "@babel/parser": "^7.16.12",
17
17
  "@babel/traverse": "^7.16.10",
18
- "@ms-cloudpack/bundler-types": "^0.12.2",
18
+ "@ms-cloudpack/bundler-types": "^0.13.0",
19
19
  "@ms-cloudpack/json-utilities": "^0.0.6",
20
- "@ms-cloudpack/package-overrides": "^0.3.6",
20
+ "@ms-cloudpack/package-overrides": "^0.3.7",
21
21
  "@ms-cloudpack/path-utilities": "^2.2.2",
22
22
  "@ms-cloudpack/path-string-parsing": "^1.0.1",
23
23
  "fast-glob": "^3.2.12",