@teambit/dependency-resolver 1.0.779 → 1.0.781

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.
@@ -419,7 +419,7 @@ function groupByRangeOrVersion(indexItems) {
419
419
  function isRange(version, compIdStr) {
420
420
  const validRange = _semver().default.validRange(version);
421
421
  if (!validRange) {
422
- if (!(0, _componentVersion().isHash)(version) && !version.startsWith('workspace:') && !version.startsWith('npm:')) {
422
+ if (!(0, _componentVersion().isHash)(version) && !version.startsWith('workspace:') && !version.startsWith('npm:') && version !== '+') {
423
423
  throw new Error(`fatal: the version "${version}" originated from a dependent "${compIdStr}" is invalid semver range and not a hash`);
424
424
  }
425
425
  return false;
@@ -1 +1 @@
1
- {"version":3,"names":["_lodash","data","require","_semver","_interopRequireDefault","_semverIntersect","_semverRangeIntersect","_componentVersion","_constants","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","hoistDependencies","depIdIndex","options","result","getEmptyDedupedDependencies","indexItem","packageName","toContinue","handlePreserved","addOneOccurrenceToRoot","componentItems","handlePeersOnly","dedupePeerDependencies","groupedByRangeOrVersion","groupByRangeOrVersion","versions","ranges","handleExactVersionsOnly","handleRangesOnly","handleRangesAndVersions","dedupedDependencies","preservedVersion","metadata","preservedLifecycleType","keyName","KEY_NAME_BY_LIFECYCLE_TYPE","rootDependencies","filterFunc","item","intersect","range","map","addToComponentDependenciesMapInDeduped","indexItems","uniqVersions","uniq","lifecycleType","nonPeerItems","PEER_DEP_LIFECYCLE_TYPE","allRanges","intersected","conflictedComponents","componentPackageName","origin","conflictMessage","c","join","issue","issus","peerConflicts","allVersions","mostCommonVersion","findMostCommonVersion","version","lifeCycleType","getLifecycleType","depKeyName","rangesVersions","bestRange","findBestRange","intersectedRange","includes","groups","count","sortedByTotal","getSortedRangesCombination","combinationWithTotal","combination","total","counts","countBy","uniqRanges","rangesCombinations","arrayCombinations","countMultipleRanges","items","reduce","acc","curr","rangesCombinationsWithTotalCount","sortBy","property","reverse","DEV_DEP_LIFECYCLE_TYPE","RUNTIME_DEP_LIFECYCLE_TYPE","semver","gt","toFilter","compEntry","componentDependenciesMap","get","dependencies","optionalDependencies","devDependencies","peerDependencies","set","isVersionRange","isRange","compIdStr","validRange","isHash","startsWith","Error","parsed","parseRange","condition","array","fn","n","src","got","all","j","slice","concat","Map"],"sources":["hoist-dependencies.ts"],"sourcesContent":["import { countBy, forEach, property, sortBy, uniq } from 'lodash';\nimport semver from 'semver';\nimport { parseRange } from 'semver-intersect';\nimport { intersect } from 'semver-range-intersect';\nimport { isHash } from '@teambit/component-version';\n\nimport {\n DEV_DEP_LIFECYCLE_TYPE,\n KEY_NAME_BY_LIFECYCLE_TYPE,\n PEER_DEP_LIFECYCLE_TYPE,\n RUNTIME_DEP_LIFECYCLE_TYPE,\n} from '../../dependencies/constants';\nimport type { DependencyLifecycleType, SemverVersion, PackageName } from '../../dependencies';\nimport type { DedupedDependencies, DedupedDependenciesPeerConflicts } from './dedupe-dependencies';\nimport type { PackageNameIndex, PackageNameIndexItem, PackageNameIndexComponentItem } from './index-by-dep-id';\n\ntype ItemsGroupedByRangeOrVersion = {\n ranges: PackageNameIndexComponentItem[];\n versions: PackageNameIndexComponentItem[];\n};\n\ntype MostCommonVersion = {\n version: SemverVersion;\n count: number;\n};\n\ntype BestRange = {\n count: number;\n ranges: SemverVersion[];\n intersectedRange: SemverVersion;\n};\n\ntype CombinationWithTotal = {\n combination: SemverVersion[];\n total: number;\n};\n\n/**\n * This is the second phase of the deduping process.\n * It will get the index calculated in the first phase (with dep id as key)\n * and will find the most intersect range for each dep and move it to the root\n * it will also move deps which are both dev deps and runtime deps to be runtime deps\n *\n * @param {PackageNameIndex} depIdIndex\n * @returns {DedupedDependencies}\n */\nexport function hoistDependencies(\n depIdIndex: PackageNameIndex,\n options?: { dedupePeerDependencies?: boolean }\n): DedupedDependencies {\n const result: DedupedDependencies = getEmptyDedupedDependencies();\n\n // TODO: handle git urls\n\n depIdIndex.forEach((indexItem, packageName) => {\n let toContinue;\n toContinue = handlePreserved(result, packageName, indexItem);\n if (!toContinue) return;\n toContinue = addOneOccurrenceToRoot(result, packageName, indexItem.componentItems);\n if (!toContinue) return;\n toContinue = handlePeersOnly(result, packageName, indexItem.componentItems);\n if (!toContinue && !options?.dedupePeerDependencies) return;\n const groupedByRangeOrVersion = groupByRangeOrVersion(indexItem.componentItems);\n if (groupedByRangeOrVersion.versions.length > 0 && groupedByRangeOrVersion.ranges.length === 0) {\n handleExactVersionsOnly(result, packageName, indexItem.componentItems);\n } else if (groupedByRangeOrVersion.versions.length === 0 && groupedByRangeOrVersion.ranges.length > 0) {\n handleRangesOnly(result, packageName, indexItem.componentItems);\n } else {\n handleRangesAndVersions(result, packageName, indexItem.componentItems, groupedByRangeOrVersion);\n }\n });\n\n return result;\n}\n\nfunction handlePreserved(\n dedupedDependencies: DedupedDependencies,\n packageName: PackageName,\n indexItem: PackageNameIndexItem\n): boolean {\n const preservedVersion = indexItem.metadata.preservedVersion;\n // Not preserved, move on\n if (!preservedVersion) {\n return true;\n }\n\n const preservedLifecycleType = indexItem.metadata.preservedLifecycleType;\n\n const keyName = KEY_NAME_BY_LIFECYCLE_TYPE[preservedLifecycleType || 'dependencies'];\n dedupedDependencies.rootDependencies[keyName][packageName] = preservedVersion;\n\n const filterFunc = (item: PackageNameIndexComponentItem) => {\n // items which are intersect with the preserved version won't needed to be installed nested in the component\n // this in very rare cases might create bugs in case the version are intersects, but the real version in the registry\n // which satisfies the preserved not satisfy the item range.\n // In such case I would expect to get version not exist when coming to install the version in the nested component\n return !!intersect(item.range, preservedVersion);\n };\n\n indexItem.componentItems.map(addToComponentDependenciesMapInDeduped(dedupedDependencies, packageName, filterFunc));\n return false;\n}\n\n/**\n * In case there is only one component with a specific dependency,\n * OR\n * all the components have the same version of the dependency\n * add it to the root\n * (it used to check also if it's not peer, but we remove it for bit sign support)\n *\n * @param {DedupedDependencies} dedupedDependencies\n * @param {PackageName} packageName\n * @param {PackageNameIndexComponentItem} indexItem\n */\nfunction addOneOccurrenceToRoot(\n dedupedDependencies: DedupedDependencies,\n packageName: PackageName,\n indexItems: PackageNameIndexComponentItem[]\n): boolean {\n if (indexItems.length > 1) {\n const uniqVersions = uniq(indexItems.map((item) => item.range));\n if (uniqVersions.length > 1) {\n return true;\n }\n }\n const indexItem = indexItems[0];\n // if (indexItem.lifecycleType !== PEER_DEP_LIFECYCLE_TYPE) {\n const keyName = KEY_NAME_BY_LIFECYCLE_TYPE[indexItem.lifecycleType];\n dedupedDependencies.rootDependencies[keyName][packageName] = indexItem.range;\n return false;\n // }\n // return true;\n}\n\n/**\n * Handle a case where the package appear as a peer for all its deponents\n * in that case we won't hoist it to the root, we will only notify about conflicts\n *\n * @param {DedupedDependencies} dedupedDependencies\n * @param {PackageName} packageName\n * @param {PackageNameIndexComponentItem[]} indexItems\n * @returns {boolean}\n */\nfunction handlePeersOnly(\n dedupedDependencies: DedupedDependencies,\n packageName: PackageName,\n indexItems: PackageNameIndexComponentItem[]\n): boolean {\n const nonPeerItems = indexItems.filter((item) => {\n return item.lifecycleType !== PEER_DEP_LIFECYCLE_TYPE;\n });\n if (nonPeerItems.length > 0) {\n return true;\n }\n const allRanges = indexItems.map((item) => item.range);\n const intersected = intersect(...allRanges);\n if (intersected) {\n // Add to peers for each component to make sure we are getting warning from the package manager about missing peers\n indexItems.map(addToComponentDependenciesMapInDeduped(dedupedDependencies, packageName));\n } else {\n indexItems.map(addToComponentDependenciesMapInDeduped(dedupedDependencies, packageName));\n // There are peer version with conflicts, let the user know about it\n const conflictedComponents = indexItems.map((item) => {\n return {\n componentPackageName: item.origin,\n range: item.range,\n };\n });\n const conflictMessage = `The following components has conflicted peer dependencies: ${conflictedComponents\n .map((c) => c.componentPackageName)\n .join(',')} for the dependency: ${packageName}`;\n const issue: DedupedDependenciesPeerConflicts = {\n packageName,\n conflictedComponents,\n conflictMessage,\n };\n dedupedDependencies.issus?.peerConflicts.push(issue);\n }\n return false;\n}\n\n/**\n * This will handle a case when there is only exact version in the index\n * In such case it will take the most common version and hoist it to the root\n * It will set all the other version in the corresponding components\n * This assume the items has been already checked to contain only exact versions\n *\n * @param {DedupedDependencies} dedupedDependencies\n * @param {PackageName} packageName\n * @param {PackageNameIndexComponentItem[]} indexItems\n */\nfunction handleExactVersionsOnly(\n dedupedDependencies: DedupedDependencies,\n packageName: PackageName,\n indexItems: PackageNameIndexComponentItem[]\n): void {\n const allVersions = indexItems.map((item) => item.range);\n\n // Add most common version to root\n const mostCommonVersion = findMostCommonVersion(allVersions).version;\n const lifeCycleType = getLifecycleType(indexItems);\n const depKeyName = KEY_NAME_BY_LIFECYCLE_TYPE[lifeCycleType];\n dedupedDependencies.rootDependencies[depKeyName][packageName] = mostCommonVersion;\n\n const filterFunc = (item) => {\n if (item.range === mostCommonVersion) return true;\n return false;\n };\n\n indexItems.forEach(addToComponentDependenciesMapInDeduped(dedupedDependencies, packageName, filterFunc));\n}\n\n/**\n * This will handle a case when there is only ranges in the index\n * In such case it will search for an intersection with the most components and hoist it to the root\n * It will set all the other ranges in the corresponding components\n * This assume the items has been already checked to contain only ranges\n *\n * @param {DedupedDependencies} dedupedDependencies\n * @param {PackageName} packageName\n * @param {PackageNameIndexComponentItem[]} indexItems\n */\nfunction handleRangesOnly(\n dedupedDependencies: DedupedDependencies,\n packageName: PackageName,\n indexItems: PackageNameIndexComponentItem[]\n): void {\n const rangesVersions = indexItems.map((item) => item.range);\n const bestRange = findBestRange(rangesVersions);\n const lifeCycleType = getLifecycleType(indexItems);\n const depKeyName = KEY_NAME_BY_LIFECYCLE_TYPE[lifeCycleType];\n dedupedDependencies.rootDependencies[depKeyName][packageName] = bestRange.intersectedRange;\n\n const filterFunc = (item) => {\n if (bestRange.ranges.includes(item.range)) return true;\n return false;\n };\n\n indexItems.forEach(addToComponentDependenciesMapInDeduped(dedupedDependencies, packageName, filterFunc));\n}\n\n/**\n * This will handle a case when there is both ranges and exact versions in the index\n * it will find the best range and see how many components it fits\n * it will find the most common version and see how many components it fits\n * Then it will take the best of them and hoist into the root and put others in the components\n * TODO: this can be improved by adding to the ranges count the satisfying exact versions\n *\n * @param {DedupedDependencies} dedupedDependencies\n * @param {PackageName} packageName\n * @param {PackageNameIndexComponentItem[]} indexItems\n * @param {ItemsGroupedByRangeOrVersion} groups\n */\nfunction handleRangesAndVersions(\n dedupedDependencies: DedupedDependencies,\n packageName: PackageName,\n indexItems: PackageNameIndexComponentItem[],\n groups: ItemsGroupedByRangeOrVersion\n): void {\n const allVersions = groups.versions.map((item) => item.range);\n const mostCommonVersion = findMostCommonVersion(allVersions);\n // Include versions here since we might have a specific version which match the best version as well\n const rangesVersions = indexItems.map((item) => item.range);\n const bestRange = findBestRange(rangesVersions);\n const lifeCycleType = getLifecycleType(indexItems);\n const depKeyName = KEY_NAME_BY_LIFECYCLE_TYPE[lifeCycleType];\n\n let filterFunc = (item) => {\n if (bestRange.ranges.includes(item.range)) return true;\n return false;\n };\n\n if (bestRange.count < mostCommonVersion.count) {\n dedupedDependencies.rootDependencies[depKeyName][packageName] = mostCommonVersion.version;\n filterFunc = (item) => {\n if (item.range === mostCommonVersion) return true;\n return false;\n };\n } else {\n dedupedDependencies.rootDependencies[depKeyName][packageName] = bestRange.intersectedRange;\n }\n indexItems.forEach(addToComponentDependenciesMapInDeduped(dedupedDependencies, packageName, filterFunc));\n}\n\n/**\n * Finding the best range - a range the intersect as many ranges as possible\n * it will work by create all the possible combination of the ranges\n * then try to intersect them based on the number of the ranges (items) and how many times they appear in the original array\n *\n * @param {SemverVersion[]} ranges\n * @returns {BestRange}\n */\nfunction findBestRange(ranges: SemverVersion[]): BestRange {\n const result: BestRange = {\n ranges: [],\n intersectedRange: '0.0.0',\n count: 0,\n };\n\n const sortedByTotal = getSortedRangesCombination(ranges);\n let i = 0;\n // Since it's already sorted by count, once we found match we can stop looping\n while (result.count === 0 && i < sortedByTotal.length) {\n const combinationWithTotal = sortedByTotal[i];\n const intersectedRange = intersect(...combinationWithTotal.combination);\n if (intersectedRange) {\n result.intersectedRange = intersectedRange;\n result.ranges = combinationWithTotal.combination;\n result.count = combinationWithTotal.total;\n } else {\n i += 1;\n }\n }\n return result;\n}\n\n// function getSortedVersionsWithTotal(versions: SemverVersion[]): VersionWithTotal[] {\n// const counts = countBy((item) => item)(versions);\n// const uniqVersions = uniq(versions);\n// const versionsWithTotalCount = uniqVersions.map((version) => {\n// return {\n// version,\n// total: counts[version],\n// };\n// });\n\n// const sortByTotal = sortBy(prop('total'));\n// const sortedByTotal = sortByTotal(versionsWithTotalCount).reverse();\n// return sortedByTotal;\n// }\n\nfunction getSortedRangesCombination(ranges: SemverVersion[]): CombinationWithTotal[] {\n const counts = countBy(ranges, (item) => item);\n const uniqRanges = uniq(ranges);\n const rangesCombinations = arrayCombinations<SemverVersion>(uniqRanges);\n const countMultipleRanges = (items: SemverVersion[]): number => {\n return items.reduce((acc, curr) => {\n return acc + counts[curr];\n }, 0);\n };\n // The count is count of the items and for each item how many times it appear in the original ranges\n // Since there might be same range multiple time in the original ranges array.\n\n const rangesCombinationsWithTotalCount = rangesCombinations.map((combination) => {\n return {\n combination,\n total: countMultipleRanges(combination),\n };\n });\n\n const sortedByTotal = sortBy(rangesCombinationsWithTotalCount, property('total')).reverse();\n return sortedByTotal;\n}\n\n/**\n * Check if a package should be a dev dependency or runtime dependency by checking if it appears as runtime dependency at least once\n *\n * @param {PackageNameIndexComponentItem[]} indexItems\n * @returns {DependencyLifecycleType}\n */\nfunction getLifecycleType(indexItems: PackageNameIndexComponentItem[]): DependencyLifecycleType {\n let result: DependencyLifecycleType = DEV_DEP_LIFECYCLE_TYPE;\n indexItems.forEach((item) => {\n if (item.lifecycleType === RUNTIME_DEP_LIFECYCLE_TYPE) {\n result = RUNTIME_DEP_LIFECYCLE_TYPE;\n }\n });\n return result;\n}\n\n/**\n * Find the version that appears the most\n *\n * @param {SemverVersion[]} versions\n * @returns {MostCommonVersion}\n */\nfunction findMostCommonVersion(versions: SemverVersion[]): MostCommonVersion {\n const counts = countBy(versions, (item) => item);\n const result: MostCommonVersion = {\n version: '0.0.0',\n count: 0,\n };\n forEach(counts, (count, version) => {\n if (count > result.count || (count === result.count && semver.gt(version, result.version))) {\n result.version = version;\n result.count = count;\n }\n });\n return result;\n}\n\n/**\n * A wrapper function used to be passed to map on index items and add it to a component dependency in the deduped dependencies if it's filter function return false\n *\n * @param {DedupedDependencies} dedupedDependencies\n * @param {PackageName} packageName\n * @param {(item: PackageNameIndexComponentItem) => boolean} [filterFunc]\n * @returns\n */\nfunction addToComponentDependenciesMapInDeduped(\n dedupedDependencies: DedupedDependencies,\n packageName: PackageName,\n filterFunc?: (item: PackageNameIndexComponentItem) => boolean\n) {\n return (indexItem: PackageNameIndexComponentItem) => {\n if (filterFunc && typeof filterFunc === 'function') {\n const toFilter = filterFunc(indexItem);\n if (toFilter) return;\n }\n let compEntry = dedupedDependencies.componentDependenciesMap.get(indexItem.origin);\n const depKeyName = KEY_NAME_BY_LIFECYCLE_TYPE[indexItem.lifecycleType];\n if (!compEntry) {\n compEntry = {\n dependencies: {},\n optionalDependencies: {},\n devDependencies: {},\n peerDependencies: {},\n };\n }\n compEntry[depKeyName] = {\n ...compEntry[depKeyName],\n [packageName]: indexItem.range,\n };\n dedupedDependencies.componentDependenciesMap.set(indexItem.origin, compEntry);\n };\n}\n\n/**\n * Get an array of index items and group them to items with ranges and items with exact version\n *\n * @param {PackageNameIndexComponentItem[]} indexItems\n * @returns {ItemsGroupedByRangeOrVersion}\n */\nfunction groupByRangeOrVersion(indexItems: PackageNameIndexComponentItem[]): ItemsGroupedByRangeOrVersion {\n const result: ItemsGroupedByRangeOrVersion = {\n ranges: [],\n versions: [],\n };\n indexItems.forEach((item) => {\n const isVersionRange = isRange(item.range, item.origin);\n if (isVersionRange) {\n result.ranges.push(item);\n } else {\n result.versions.push(item);\n }\n });\n return result;\n}\n\nexport function isRange(version: string, compIdStr: string) {\n const validRange = semver.validRange(version);\n if (!validRange) {\n if (!isHash(version) && !version.startsWith('workspace:') && !version.startsWith('npm:')) {\n throw new Error(\n `fatal: the version \"${version}\" originated from a dependent \"${compIdStr}\" is invalid semver range and not a hash`\n );\n }\n return false;\n }\n // parseRange does not support `*` as version\n // `*` does not affect resulted version, it might be just ignored\n if (validRange === '*') {\n return true;\n }\n const parsed = parseRange(validRange);\n if (parsed.condition === '=') {\n return false;\n }\n return true;\n}\n\n// Taken from https://web.archive.org/web/20140418004051/http://dzone.com/snippets/calculate-all-combinations\n/**\n * Return all combinations of array items. for example:\n * arrayCombinations([1,2]) == [[1], [2], [1,2]];\n *\n * @param {Array<T>} array\n * @returns {Array<T[]>}\n */\nfunction arrayCombinations<T>(array: Array<T>): Array<T[]> {\n const fn = function (n, src, got, all) {\n if (n === 0) {\n if (got.length > 0) {\n all[all.length] = got;\n }\n return;\n }\n // eslint-disable-next-line\n for (let j = 0; j < src.length; j++) {\n fn(n - 1, src.slice(j + 1), got.concat([src[j]]), all);\n }\n };\n const all: Array<T[]> = [];\n // eslint-disable-next-line\n for (let i = 0; i < array.length; i++) {\n fn(i, array, [], all);\n }\n all.push(array);\n return all;\n}\n\nexport function getEmptyDedupedDependencies(): DedupedDependencies {\n const result: DedupedDependencies = {\n rootDependencies: {\n dependencies: {},\n optionalDependencies: {},\n devDependencies: {},\n peerDependencies: {},\n },\n componentDependenciesMap: new Map(),\n issus: {\n peerConflicts: [],\n },\n };\n return result;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_lodash","data","require","_semver","_interopRequireDefault","_semverIntersect","_semverRangeIntersect","_componentVersion","_constants","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","hoistDependencies","depIdIndex","options","result","getEmptyDedupedDependencies","indexItem","packageName","toContinue","handlePreserved","addOneOccurrenceToRoot","componentItems","handlePeersOnly","dedupePeerDependencies","groupedByRangeOrVersion","groupByRangeOrVersion","versions","ranges","handleExactVersionsOnly","handleRangesOnly","handleRangesAndVersions","dedupedDependencies","preservedVersion","metadata","preservedLifecycleType","keyName","KEY_NAME_BY_LIFECYCLE_TYPE","rootDependencies","filterFunc","item","intersect","range","map","addToComponentDependenciesMapInDeduped","indexItems","uniqVersions","uniq","lifecycleType","nonPeerItems","PEER_DEP_LIFECYCLE_TYPE","allRanges","intersected","conflictedComponents","componentPackageName","origin","conflictMessage","c","join","issue","issus","peerConflicts","allVersions","mostCommonVersion","findMostCommonVersion","version","lifeCycleType","getLifecycleType","depKeyName","rangesVersions","bestRange","findBestRange","intersectedRange","includes","groups","count","sortedByTotal","getSortedRangesCombination","combinationWithTotal","combination","total","counts","countBy","uniqRanges","rangesCombinations","arrayCombinations","countMultipleRanges","items","reduce","acc","curr","rangesCombinationsWithTotalCount","sortBy","property","reverse","DEV_DEP_LIFECYCLE_TYPE","RUNTIME_DEP_LIFECYCLE_TYPE","semver","gt","toFilter","compEntry","componentDependenciesMap","get","dependencies","optionalDependencies","devDependencies","peerDependencies","set","isVersionRange","isRange","compIdStr","validRange","isHash","startsWith","Error","parsed","parseRange","condition","array","fn","n","src","got","all","j","slice","concat","Map"],"sources":["hoist-dependencies.ts"],"sourcesContent":["import { countBy, forEach, property, sortBy, uniq } from 'lodash';\nimport semver from 'semver';\nimport { parseRange } from 'semver-intersect';\nimport { intersect } from 'semver-range-intersect';\nimport { isHash } from '@teambit/component-version';\n\nimport {\n DEV_DEP_LIFECYCLE_TYPE,\n KEY_NAME_BY_LIFECYCLE_TYPE,\n PEER_DEP_LIFECYCLE_TYPE,\n RUNTIME_DEP_LIFECYCLE_TYPE,\n} from '../../dependencies/constants';\nimport type { DependencyLifecycleType, SemverVersion, PackageName } from '../../dependencies';\nimport type { DedupedDependencies, DedupedDependenciesPeerConflicts } from './dedupe-dependencies';\nimport type { PackageNameIndex, PackageNameIndexItem, PackageNameIndexComponentItem } from './index-by-dep-id';\n\ntype ItemsGroupedByRangeOrVersion = {\n ranges: PackageNameIndexComponentItem[];\n versions: PackageNameIndexComponentItem[];\n};\n\ntype MostCommonVersion = {\n version: SemverVersion;\n count: number;\n};\n\ntype BestRange = {\n count: number;\n ranges: SemverVersion[];\n intersectedRange: SemverVersion;\n};\n\ntype CombinationWithTotal = {\n combination: SemverVersion[];\n total: number;\n};\n\n/**\n * This is the second phase of the deduping process.\n * It will get the index calculated in the first phase (with dep id as key)\n * and will find the most intersect range for each dep and move it to the root\n * it will also move deps which are both dev deps and runtime deps to be runtime deps\n *\n * @param {PackageNameIndex} depIdIndex\n * @returns {DedupedDependencies}\n */\nexport function hoistDependencies(\n depIdIndex: PackageNameIndex,\n options?: { dedupePeerDependencies?: boolean }\n): DedupedDependencies {\n const result: DedupedDependencies = getEmptyDedupedDependencies();\n\n // TODO: handle git urls\n\n depIdIndex.forEach((indexItem, packageName) => {\n let toContinue;\n toContinue = handlePreserved(result, packageName, indexItem);\n if (!toContinue) return;\n toContinue = addOneOccurrenceToRoot(result, packageName, indexItem.componentItems);\n if (!toContinue) return;\n toContinue = handlePeersOnly(result, packageName, indexItem.componentItems);\n if (!toContinue && !options?.dedupePeerDependencies) return;\n const groupedByRangeOrVersion = groupByRangeOrVersion(indexItem.componentItems);\n if (groupedByRangeOrVersion.versions.length > 0 && groupedByRangeOrVersion.ranges.length === 0) {\n handleExactVersionsOnly(result, packageName, indexItem.componentItems);\n } else if (groupedByRangeOrVersion.versions.length === 0 && groupedByRangeOrVersion.ranges.length > 0) {\n handleRangesOnly(result, packageName, indexItem.componentItems);\n } else {\n handleRangesAndVersions(result, packageName, indexItem.componentItems, groupedByRangeOrVersion);\n }\n });\n\n return result;\n}\n\nfunction handlePreserved(\n dedupedDependencies: DedupedDependencies,\n packageName: PackageName,\n indexItem: PackageNameIndexItem\n): boolean {\n const preservedVersion = indexItem.metadata.preservedVersion;\n // Not preserved, move on\n if (!preservedVersion) {\n return true;\n }\n\n const preservedLifecycleType = indexItem.metadata.preservedLifecycleType;\n\n const keyName = KEY_NAME_BY_LIFECYCLE_TYPE[preservedLifecycleType || 'dependencies'];\n dedupedDependencies.rootDependencies[keyName][packageName] = preservedVersion;\n\n const filterFunc = (item: PackageNameIndexComponentItem) => {\n // items which are intersect with the preserved version won't needed to be installed nested in the component\n // this in very rare cases might create bugs in case the version are intersects, but the real version in the registry\n // which satisfies the preserved not satisfy the item range.\n // In such case I would expect to get version not exist when coming to install the version in the nested component\n return !!intersect(item.range, preservedVersion);\n };\n\n indexItem.componentItems.map(addToComponentDependenciesMapInDeduped(dedupedDependencies, packageName, filterFunc));\n return false;\n}\n\n/**\n * In case there is only one component with a specific dependency,\n * OR\n * all the components have the same version of the dependency\n * add it to the root\n * (it used to check also if it's not peer, but we remove it for bit sign support)\n *\n * @param {DedupedDependencies} dedupedDependencies\n * @param {PackageName} packageName\n * @param {PackageNameIndexComponentItem} indexItem\n */\nfunction addOneOccurrenceToRoot(\n dedupedDependencies: DedupedDependencies,\n packageName: PackageName,\n indexItems: PackageNameIndexComponentItem[]\n): boolean {\n if (indexItems.length > 1) {\n const uniqVersions = uniq(indexItems.map((item) => item.range));\n if (uniqVersions.length > 1) {\n return true;\n }\n }\n const indexItem = indexItems[0];\n // if (indexItem.lifecycleType !== PEER_DEP_LIFECYCLE_TYPE) {\n const keyName = KEY_NAME_BY_LIFECYCLE_TYPE[indexItem.lifecycleType];\n dedupedDependencies.rootDependencies[keyName][packageName] = indexItem.range;\n return false;\n // }\n // return true;\n}\n\n/**\n * Handle a case where the package appear as a peer for all its deponents\n * in that case we won't hoist it to the root, we will only notify about conflicts\n *\n * @param {DedupedDependencies} dedupedDependencies\n * @param {PackageName} packageName\n * @param {PackageNameIndexComponentItem[]} indexItems\n * @returns {boolean}\n */\nfunction handlePeersOnly(\n dedupedDependencies: DedupedDependencies,\n packageName: PackageName,\n indexItems: PackageNameIndexComponentItem[]\n): boolean {\n const nonPeerItems = indexItems.filter((item) => {\n return item.lifecycleType !== PEER_DEP_LIFECYCLE_TYPE;\n });\n if (nonPeerItems.length > 0) {\n return true;\n }\n const allRanges = indexItems.map((item) => item.range);\n const intersected = intersect(...allRanges);\n if (intersected) {\n // Add to peers for each component to make sure we are getting warning from the package manager about missing peers\n indexItems.map(addToComponentDependenciesMapInDeduped(dedupedDependencies, packageName));\n } else {\n indexItems.map(addToComponentDependenciesMapInDeduped(dedupedDependencies, packageName));\n // There are peer version with conflicts, let the user know about it\n const conflictedComponents = indexItems.map((item) => {\n return {\n componentPackageName: item.origin,\n range: item.range,\n };\n });\n const conflictMessage = `The following components has conflicted peer dependencies: ${conflictedComponents\n .map((c) => c.componentPackageName)\n .join(',')} for the dependency: ${packageName}`;\n const issue: DedupedDependenciesPeerConflicts = {\n packageName,\n conflictedComponents,\n conflictMessage,\n };\n dedupedDependencies.issus?.peerConflicts.push(issue);\n }\n return false;\n}\n\n/**\n * This will handle a case when there is only exact version in the index\n * In such case it will take the most common version and hoist it to the root\n * It will set all the other version in the corresponding components\n * This assume the items has been already checked to contain only exact versions\n *\n * @param {DedupedDependencies} dedupedDependencies\n * @param {PackageName} packageName\n * @param {PackageNameIndexComponentItem[]} indexItems\n */\nfunction handleExactVersionsOnly(\n dedupedDependencies: DedupedDependencies,\n packageName: PackageName,\n indexItems: PackageNameIndexComponentItem[]\n): void {\n const allVersions = indexItems.map((item) => item.range);\n\n // Add most common version to root\n const mostCommonVersion = findMostCommonVersion(allVersions).version;\n const lifeCycleType = getLifecycleType(indexItems);\n const depKeyName = KEY_NAME_BY_LIFECYCLE_TYPE[lifeCycleType];\n dedupedDependencies.rootDependencies[depKeyName][packageName] = mostCommonVersion;\n\n const filterFunc = (item) => {\n if (item.range === mostCommonVersion) return true;\n return false;\n };\n\n indexItems.forEach(addToComponentDependenciesMapInDeduped(dedupedDependencies, packageName, filterFunc));\n}\n\n/**\n * This will handle a case when there is only ranges in the index\n * In such case it will search for an intersection with the most components and hoist it to the root\n * It will set all the other ranges in the corresponding components\n * This assume the items has been already checked to contain only ranges\n *\n * @param {DedupedDependencies} dedupedDependencies\n * @param {PackageName} packageName\n * @param {PackageNameIndexComponentItem[]} indexItems\n */\nfunction handleRangesOnly(\n dedupedDependencies: DedupedDependencies,\n packageName: PackageName,\n indexItems: PackageNameIndexComponentItem[]\n): void {\n const rangesVersions = indexItems.map((item) => item.range);\n const bestRange = findBestRange(rangesVersions);\n const lifeCycleType = getLifecycleType(indexItems);\n const depKeyName = KEY_NAME_BY_LIFECYCLE_TYPE[lifeCycleType];\n dedupedDependencies.rootDependencies[depKeyName][packageName] = bestRange.intersectedRange;\n\n const filterFunc = (item) => {\n if (bestRange.ranges.includes(item.range)) return true;\n return false;\n };\n\n indexItems.forEach(addToComponentDependenciesMapInDeduped(dedupedDependencies, packageName, filterFunc));\n}\n\n/**\n * This will handle a case when there is both ranges and exact versions in the index\n * it will find the best range and see how many components it fits\n * it will find the most common version and see how many components it fits\n * Then it will take the best of them and hoist into the root and put others in the components\n * TODO: this can be improved by adding to the ranges count the satisfying exact versions\n *\n * @param {DedupedDependencies} dedupedDependencies\n * @param {PackageName} packageName\n * @param {PackageNameIndexComponentItem[]} indexItems\n * @param {ItemsGroupedByRangeOrVersion} groups\n */\nfunction handleRangesAndVersions(\n dedupedDependencies: DedupedDependencies,\n packageName: PackageName,\n indexItems: PackageNameIndexComponentItem[],\n groups: ItemsGroupedByRangeOrVersion\n): void {\n const allVersions = groups.versions.map((item) => item.range);\n const mostCommonVersion = findMostCommonVersion(allVersions);\n // Include versions here since we might have a specific version which match the best version as well\n const rangesVersions = indexItems.map((item) => item.range);\n const bestRange = findBestRange(rangesVersions);\n const lifeCycleType = getLifecycleType(indexItems);\n const depKeyName = KEY_NAME_BY_LIFECYCLE_TYPE[lifeCycleType];\n\n let filterFunc = (item) => {\n if (bestRange.ranges.includes(item.range)) return true;\n return false;\n };\n\n if (bestRange.count < mostCommonVersion.count) {\n dedupedDependencies.rootDependencies[depKeyName][packageName] = mostCommonVersion.version;\n filterFunc = (item) => {\n if (item.range === mostCommonVersion) return true;\n return false;\n };\n } else {\n dedupedDependencies.rootDependencies[depKeyName][packageName] = bestRange.intersectedRange;\n }\n indexItems.forEach(addToComponentDependenciesMapInDeduped(dedupedDependencies, packageName, filterFunc));\n}\n\n/**\n * Finding the best range - a range the intersect as many ranges as possible\n * it will work by create all the possible combination of the ranges\n * then try to intersect them based on the number of the ranges (items) and how many times they appear in the original array\n *\n * @param {SemverVersion[]} ranges\n * @returns {BestRange}\n */\nfunction findBestRange(ranges: SemverVersion[]): BestRange {\n const result: BestRange = {\n ranges: [],\n intersectedRange: '0.0.0',\n count: 0,\n };\n\n const sortedByTotal = getSortedRangesCombination(ranges);\n let i = 0;\n // Since it's already sorted by count, once we found match we can stop looping\n while (result.count === 0 && i < sortedByTotal.length) {\n const combinationWithTotal = sortedByTotal[i];\n const intersectedRange = intersect(...combinationWithTotal.combination);\n if (intersectedRange) {\n result.intersectedRange = intersectedRange;\n result.ranges = combinationWithTotal.combination;\n result.count = combinationWithTotal.total;\n } else {\n i += 1;\n }\n }\n return result;\n}\n\n// function getSortedVersionsWithTotal(versions: SemverVersion[]): VersionWithTotal[] {\n// const counts = countBy((item) => item)(versions);\n// const uniqVersions = uniq(versions);\n// const versionsWithTotalCount = uniqVersions.map((version) => {\n// return {\n// version,\n// total: counts[version],\n// };\n// });\n\n// const sortByTotal = sortBy(prop('total'));\n// const sortedByTotal = sortByTotal(versionsWithTotalCount).reverse();\n// return sortedByTotal;\n// }\n\nfunction getSortedRangesCombination(ranges: SemverVersion[]): CombinationWithTotal[] {\n const counts = countBy(ranges, (item) => item);\n const uniqRanges = uniq(ranges);\n const rangesCombinations = arrayCombinations<SemverVersion>(uniqRanges);\n const countMultipleRanges = (items: SemverVersion[]): number => {\n return items.reduce((acc, curr) => {\n return acc + counts[curr];\n }, 0);\n };\n // The count is count of the items and for each item how many times it appear in the original ranges\n // Since there might be same range multiple time in the original ranges array.\n\n const rangesCombinationsWithTotalCount = rangesCombinations.map((combination) => {\n return {\n combination,\n total: countMultipleRanges(combination),\n };\n });\n\n const sortedByTotal = sortBy(rangesCombinationsWithTotalCount, property('total')).reverse();\n return sortedByTotal;\n}\n\n/**\n * Check if a package should be a dev dependency or runtime dependency by checking if it appears as runtime dependency at least once\n *\n * @param {PackageNameIndexComponentItem[]} indexItems\n * @returns {DependencyLifecycleType}\n */\nfunction getLifecycleType(indexItems: PackageNameIndexComponentItem[]): DependencyLifecycleType {\n let result: DependencyLifecycleType = DEV_DEP_LIFECYCLE_TYPE;\n indexItems.forEach((item) => {\n if (item.lifecycleType === RUNTIME_DEP_LIFECYCLE_TYPE) {\n result = RUNTIME_DEP_LIFECYCLE_TYPE;\n }\n });\n return result;\n}\n\n/**\n * Find the version that appears the most\n *\n * @param {SemverVersion[]} versions\n * @returns {MostCommonVersion}\n */\nfunction findMostCommonVersion(versions: SemverVersion[]): MostCommonVersion {\n const counts = countBy(versions, (item) => item);\n const result: MostCommonVersion = {\n version: '0.0.0',\n count: 0,\n };\n forEach(counts, (count, version) => {\n if (count > result.count || (count === result.count && semver.gt(version, result.version))) {\n result.version = version;\n result.count = count;\n }\n });\n return result;\n}\n\n/**\n * A wrapper function used to be passed to map on index items and add it to a component dependency in the deduped dependencies if it's filter function return false\n *\n * @param {DedupedDependencies} dedupedDependencies\n * @param {PackageName} packageName\n * @param {(item: PackageNameIndexComponentItem) => boolean} [filterFunc]\n * @returns\n */\nfunction addToComponentDependenciesMapInDeduped(\n dedupedDependencies: DedupedDependencies,\n packageName: PackageName,\n filterFunc?: (item: PackageNameIndexComponentItem) => boolean\n) {\n return (indexItem: PackageNameIndexComponentItem) => {\n if (filterFunc && typeof filterFunc === 'function') {\n const toFilter = filterFunc(indexItem);\n if (toFilter) return;\n }\n let compEntry = dedupedDependencies.componentDependenciesMap.get(indexItem.origin);\n const depKeyName = KEY_NAME_BY_LIFECYCLE_TYPE[indexItem.lifecycleType];\n if (!compEntry) {\n compEntry = {\n dependencies: {},\n optionalDependencies: {},\n devDependencies: {},\n peerDependencies: {},\n };\n }\n compEntry[depKeyName] = {\n ...compEntry[depKeyName],\n [packageName]: indexItem.range,\n };\n dedupedDependencies.componentDependenciesMap.set(indexItem.origin, compEntry);\n };\n}\n\n/**\n * Get an array of index items and group them to items with ranges and items with exact version\n *\n * @param {PackageNameIndexComponentItem[]} indexItems\n * @returns {ItemsGroupedByRangeOrVersion}\n */\nfunction groupByRangeOrVersion(indexItems: PackageNameIndexComponentItem[]): ItemsGroupedByRangeOrVersion {\n const result: ItemsGroupedByRangeOrVersion = {\n ranges: [],\n versions: [],\n };\n indexItems.forEach((item) => {\n const isVersionRange = isRange(item.range, item.origin);\n if (isVersionRange) {\n result.ranges.push(item);\n } else {\n result.versions.push(item);\n }\n });\n return result;\n}\n\nexport function isRange(version: string, compIdStr: string) {\n const validRange = semver.validRange(version);\n if (!validRange) {\n if (!isHash(version) && !version.startsWith('workspace:') && !version.startsWith('npm:') && version !== '+') {\n throw new Error(\n `fatal: the version \"${version}\" originated from a dependent \"${compIdStr}\" is invalid semver range and not a hash`\n );\n }\n return false;\n }\n // parseRange does not support `*` as version\n // `*` does not affect resulted version, it might be just ignored\n if (validRange === '*') {\n return true;\n }\n const parsed = parseRange(validRange);\n if (parsed.condition === '=') {\n return false;\n }\n return true;\n}\n\n// Taken from https://web.archive.org/web/20140418004051/http://dzone.com/snippets/calculate-all-combinations\n/**\n * Return all combinations of array items. for example:\n * arrayCombinations([1,2]) == [[1], [2], [1,2]];\n *\n * @param {Array<T>} array\n * @returns {Array<T[]>}\n */\nfunction arrayCombinations<T>(array: Array<T>): Array<T[]> {\n const fn = function (n, src, got, all) {\n if (n === 0) {\n if (got.length > 0) {\n all[all.length] = got;\n }\n return;\n }\n // eslint-disable-next-line\n for (let j = 0; j < src.length; j++) {\n fn(n - 1, src.slice(j + 1), got.concat([src[j]]), all);\n }\n };\n const all: Array<T[]> = [];\n // eslint-disable-next-line\n for (let i = 0; i < array.length; i++) {\n fn(i, array, [], all);\n }\n all.push(array);\n return all;\n}\n\nexport function getEmptyDedupedDependencies(): DedupedDependencies {\n const result: DedupedDependencies = {\n rootDependencies: {\n dependencies: {},\n optionalDependencies: {},\n devDependencies: {},\n peerDependencies: {},\n },\n componentDependenciesMap: new Map(),\n issus: {\n peerConflicts: [],\n },\n };\n return result;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -255,7 +255,19 @@ class WorkspaceManifestFactory {
255
255
  async _getDefaultPeerDependencies(component, packageNamesFromWorkspace) {
256
256
  const envPolicy = await this.dependencyResolver.getComponentEnvPolicy(component);
257
257
  const selfPolicyWithoutLocal = envPolicy.selfPolicy.filter(dep => !packageNamesFromWorkspace.includes(dep.dependencyId));
258
- return (0, _lodash().fromPairs)(selfPolicyWithoutLocal.toNameVersionTuple());
258
+ const nameVersionTuples = selfPolicyWithoutLocal.toNameVersionTuple();
259
+ const resolved = nameVersionTuples.map(([name, version]) => {
260
+ if (version !== '+') {
261
+ return [name, version];
262
+ }
263
+ // Resolve "+" version placeholders by looking up the already resolved version that was set in
264
+ // apply-overrides.resolveEnvPeerDepVersion()
265
+ const currentDeps = this.dependencyResolver.getDependencies(component);
266
+ const found = currentDeps.findByPkgNameOrCompId(name);
267
+ // If not found, use '*' as fallback
268
+ return [name, found?.version || '*'];
269
+ });
270
+ return (0, _lodash().fromPairs)(resolved);
259
271
  }
260
272
  async updateDependenciesVersions(component, rootPolicy, dependencyList) {
261
273
  // If root policy is not passed, it means that installation happens in a capsule
@@ -1 +1 @@
1
- {"version":3,"names":["_aspectLoader","data","require","_componentIssues","_pkgModules","_lodash","_semver","_pMapSeries","_interopRequireDefault","_componentPackageVersion","_dependencies","_policy","_componentManifest","_deduping","_updateDependencyVersion","_workspaceManifest","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","DEFAULT_CREATE_OPTIONS","filterComponentsFromManifests","createManifestForComponentsWithoutDependencies","dedupe","resolveVersionsFromDependenciesOnly","excludeExtensionsDependencies","WorkspaceManifestFactory","constructor","dependencyResolver","aspectLoader","createFromComponents","name","version","rootPolicy","rootDir","components","options","optsWithDefaults","assign","hasRootComponents","filterOutCoreAspects","componentDependenciesMap","buildComponentDependenciesMap","undefined","dependencyFilterFn","referenceLocalPackages","rootDependencies","toManifest","dependencies","dedupedDependencies","getEmptyDedupedDependencies","dedupeDependencies","dedupePeerDependencies","mapValues","deps","excludeWorkspaceDependencies","componentsManifestsMap","getComponentsManifests","envSelfPeers","getEnvsSelfPeersPolicy","workspaceManifest","WorkspaceManifest","coreAspectIds","getCoreAspectIds","coreAspectPkgNames","Set","map","coreAspectId","getCoreAspectPackageName","add","dep","has","dependencyId","foundEnvs","component","values","envPolicy","peersPolicies","policy","selfPolicy","mergedPolicies","VariantPolicy","mergePolices","packageNames","getPackageName","buildResultsP","packageName","componentIdToPackageName","state","_consumer","depList","getDependencies","includeHidden","additionalDeps","comp","toTypeArray","compIdWithoutVersion","id","split","isExtension","includes","componentInWorkspace","find","c","isEqual","componentId","pkgName","depManifestBeforeFiltering","toDependenciesManifest","filterComponents","filterExtensions","updateDependenciesVersions","depManifest","devMissings","runtimeMissings","getMissingPackages","unresolvedRuntimeMissingRootDeps","pickBy","_version","rootPackageName","devDependencies","peerDependencies","unresolvedDevMissingRootDeps","defaultPeerDependencies","_getDefaultPeerDependencies","result","Map","results","Promise","all","currResult","set","packageNamesFromWorkspace","getComponentEnvPolicy","selfPolicyWithoutLocal","fromPairs","toNameVersionTuple","dependencyList","getPolicy","updateDependencyVersion","componentsManifests","pMapSeries","blankDependencies","optionalDependencies","peerDependenciesMeta","get","getVersion","hasVersion","snapToSemver","manifest","ComponentManifest","SemVer","exports","filtered","ComponentDependency","componentsToFilterOut","depPkgName","some","existingComponent","toString","ignoreVersion","isEqualWithoutVersion","versionSpec","startsWith","missingPackagesData","issues","getIssue","IssuesClasses","MissingPackagesDependenciesOnFs","isDevFile","missingPackages","uniq","difference"],"sources":["workspace-manifest-factory.ts"],"sourcesContent":["import type { AspectLoaderMain } from '@teambit/aspect-loader';\nimport { getCoreAspectPackageName } from '@teambit/aspect-loader';\nimport { IssuesClasses } from '@teambit/component-issues';\nimport type { Component } from '@teambit/component';\nimport { componentIdToPackageName } from '@teambit/pkg.modules.component-package-name';\nimport { fromPairs, pickBy, mapValues, uniq, difference } from 'lodash';\nimport { SemVer } from 'semver';\nimport pMapSeries from 'p-map-series';\nimport { snapToSemver } from '@teambit/component-package-version';\nimport type { DependencyList, PackageName } from '../dependencies';\nimport { ComponentDependency } from '../dependencies';\nimport type { WorkspacePolicy, EnvPolicy } from '../policy';\nimport { VariantPolicy } from '../policy';\nimport type { DependencyResolverMain } from '../dependency-resolver.main.runtime';\nimport type { ComponentsManifestsMap } from '../types';\nimport { ComponentManifest } from './component-manifest';\nimport type { DedupedDependencies } from './deduping';\nimport { dedupeDependencies, getEmptyDedupedDependencies } from './deduping';\nimport type { ManifestToJsonOptions, ManifestDependenciesObject, DepObjectValue } from './manifest';\nimport { updateDependencyVersion } from './update-dependency-version';\nimport { WorkspaceManifest } from './workspace-manifest';\n\nexport type DepsFilterFn = (dependencies: DependencyList) => DependencyList;\n\nexport type ComponentDependenciesMap = Map<PackageName, ManifestDependenciesObject>;\nexport interface WorkspaceManifestToJsonOptions extends ManifestToJsonOptions {\n includeDir?: boolean;\n}\n\nexport type CreateFromComponentsOptions = {\n filterComponentsFromManifests: boolean;\n createManifestForComponentsWithoutDependencies: boolean;\n dedupe?: boolean;\n dependencyFilterFn?: DepsFilterFn;\n resolveVersionsFromDependenciesOnly?: boolean;\n referenceLocalPackages?: boolean;\n hasRootComponents?: boolean;\n excludeExtensionsDependencies?: boolean;\n};\n\nconst DEFAULT_CREATE_OPTIONS: CreateFromComponentsOptions = {\n filterComponentsFromManifests: true,\n createManifestForComponentsWithoutDependencies: true,\n dedupe: true,\n resolveVersionsFromDependenciesOnly: false,\n excludeExtensionsDependencies: false,\n};\nexport class WorkspaceManifestFactory {\n constructor(\n private dependencyResolver: DependencyResolverMain,\n private aspectLoader: AspectLoaderMain\n ) {}\n\n async createFromComponents(\n name: string,\n version: SemVer,\n rootPolicy: WorkspacePolicy,\n rootDir: string,\n components: Component[],\n options: CreateFromComponentsOptions = DEFAULT_CREATE_OPTIONS\n ): Promise<WorkspaceManifest> {\n // Make sure to take other default if passed options with only one option\n const optsWithDefaults = Object.assign({}, DEFAULT_CREATE_OPTIONS, options);\n const hasRootComponents = options.hasRootComponents ?? this.dependencyResolver.hasRootComponents();\n rootPolicy = this.filterOutCoreAspects(rootPolicy);\n const componentDependenciesMap: ComponentDependenciesMap = await this.buildComponentDependenciesMap(components, {\n filterComponentsFromManifests: optsWithDefaults.filterComponentsFromManifests,\n rootPolicy: optsWithDefaults.resolveVersionsFromDependenciesOnly ? undefined : rootPolicy,\n dependencyFilterFn: optsWithDefaults.dependencyFilterFn,\n excludeExtensionsDependencies: optsWithDefaults.excludeExtensionsDependencies,\n referenceLocalPackages: optsWithDefaults.referenceLocalPackages && hasRootComponents,\n rootDependencies: hasRootComponents ? rootPolicy.toManifest().dependencies : undefined,\n });\n let dedupedDependencies = getEmptyDedupedDependencies();\n if (hasRootComponents) {\n const { rootDependencies } = dedupeDependencies(rootPolicy, componentDependenciesMap, {\n dedupePeerDependencies: hasRootComponents,\n });\n // We hoist dependencies in order for the IDE to work.\n // For runtime, the peer dependencies are installed inside:\n // <ws root>/node_module/<comp name>/node_module/<comp name>/node_modules\n dedupedDependencies.rootDependencies = mapValues(\n rootDependencies,\n (deps) => deps && excludeWorkspaceDependencies(deps)\n );\n dedupedDependencies.componentDependenciesMap = componentDependenciesMap;\n } else if (options.dedupe) {\n dedupedDependencies = dedupeDependencies(rootPolicy, componentDependenciesMap);\n } else {\n dedupedDependencies.rootDependencies = rootPolicy.toManifest();\n dedupedDependencies.componentDependenciesMap = componentDependenciesMap;\n }\n const componentsManifestsMap = await this.getComponentsManifests(\n dedupedDependencies,\n components,\n optsWithDefaults.createManifestForComponentsWithoutDependencies\n );\n const envSelfPeers = this.getEnvsSelfPeersPolicy(componentsManifestsMap);\n const workspaceManifest = new WorkspaceManifest(\n name,\n version,\n dedupedDependencies.rootDependencies,\n envSelfPeers,\n rootDir,\n componentsManifestsMap\n );\n return workspaceManifest;\n }\n\n private filterOutCoreAspects(rootPolicy: WorkspacePolicy) {\n const coreAspectIds = this.aspectLoader.getCoreAspectIds();\n const coreAspectPkgNames = new Set(coreAspectIds.map((coreAspectId) => getCoreAspectPackageName(coreAspectId)));\n coreAspectPkgNames.add('@teambit/legacy');\n return rootPolicy.filter((dep) => !coreAspectPkgNames.has(dep.dependencyId));\n }\n\n private getEnvsSelfPeersPolicy(componentsManifestsMap: ComponentsManifestsMap) {\n const foundEnvs: EnvPolicy[] = [];\n for (const component of componentsManifestsMap.values()) {\n foundEnvs.push(component.envPolicy);\n }\n const peersPolicies = foundEnvs.map((policy) => policy.selfPolicy);\n // TODO: At the moment we are just merge everything, so in case of conflicts one will be taken\n // TODO: once we have root for each env, we should know to handle it differently\n const mergedPolicies = VariantPolicy.mergePolices(peersPolicies);\n return mergedPolicies;\n }\n\n /**\n * Get the components and build a map with the package name (from the component) as key and the dependencies as values\n *\n * @param {Component[]} components\n * @param {boolean} [filterComponentsFromManifests=true] - filter existing components from the dep graphs\n * @returns\n */\n private async buildComponentDependenciesMap(\n components: Component[],\n {\n dependencyFilterFn,\n filterComponentsFromManifests,\n excludeExtensionsDependencies,\n referenceLocalPackages,\n rootDependencies,\n rootPolicy,\n }: {\n dependencyFilterFn?: DepsFilterFn;\n filterComponentsFromManifests?: boolean;\n excludeExtensionsDependencies?: boolean;\n referenceLocalPackages?: boolean;\n rootDependencies?: Record<string, string>;\n rootPolicy?: WorkspacePolicy;\n }\n ): Promise<ComponentDependenciesMap> {\n const packageNames = components.map((component) => this.dependencyResolver.getPackageName(component));\n const buildResultsP = components.map(async (component) => {\n const packageName = componentIdToPackageName(component.state._consumer);\n let depList = this.dependencyResolver.getDependencies(component, { includeHidden: true });\n const additionalDeps = {};\n if (referenceLocalPackages) {\n const coreAspectIds = this.aspectLoader.getCoreAspectIds();\n for (const comp of depList.toTypeArray('component') as ComponentDependency[]) {\n const [compIdWithoutVersion] = comp.id.split('@');\n if (!comp.isExtension && !coreAspectIds.includes(compIdWithoutVersion)) {\n const componentInWorkspace = components.find((c) => c.id.isEqual(comp.componentId));\n if (componentInWorkspace) {\n const pkgName = this.dependencyResolver.getPackageName(componentInWorkspace);\n if (pkgName !== '@teambit/harmony') {\n additionalDeps[pkgName] = `workspace:*`;\n }\n }\n }\n }\n }\n const depManifestBeforeFiltering = depList.toDependenciesManifest();\n\n if (filterComponentsFromManifests ?? true) {\n depList = filterComponents(depList, components);\n }\n if (excludeExtensionsDependencies) {\n depList = filterExtensions(depList);\n }\n // Remove bit bin from dep list\n depList = depList.filter((dep) => dep.id !== '@teambit/legacy');\n if (dependencyFilterFn) {\n depList = dependencyFilterFn(depList);\n }\n await this.updateDependenciesVersions(component, rootPolicy, depList);\n const depManifest = depList.toDependenciesManifest();\n const { devMissings, runtimeMissings } = await getMissingPackages(component);\n // Only add missing root deps that are not already in the component manifest\n // We are using depManifestBeforeFiltering to support (rare) cases when a dependency is both:\n // a component in the workspace (bitmap) and a dependency in the workspace.jsonc / package.json\n // this happens for the bit repo itself for the @teambit/component-version component\n // in this case we don't want to add that to the manifest when it's missing, because it will be linked from the\n // workspace\n const unresolvedRuntimeMissingRootDeps = pickBy(rootDependencies, (_version, rootPackageName) => {\n return (\n runtimeMissings.includes(rootPackageName) &&\n !depManifestBeforeFiltering.dependencies[rootPackageName] &&\n !depManifestBeforeFiltering.devDependencies[rootPackageName] &&\n !depManifestBeforeFiltering.peerDependencies[rootPackageName]\n );\n });\n // Only add missing root deps that are not already in the component manifest\n const unresolvedDevMissingRootDeps = pickBy(rootDependencies, (_version, rootPackageName) => {\n return (\n devMissings.includes(rootPackageName) &&\n !depManifestBeforeFiltering.dependencies[rootPackageName] &&\n !depManifestBeforeFiltering.devDependencies[rootPackageName] &&\n !depManifestBeforeFiltering.peerDependencies[rootPackageName]\n );\n });\n\n const defaultPeerDependencies = await this._getDefaultPeerDependencies(component, packageNames);\n\n depManifest.dependencies = {\n ...defaultPeerDependencies,\n ...unresolvedRuntimeMissingRootDeps,\n ...additionalDeps,\n ...depManifest.dependencies,\n };\n\n depManifest.devDependencies = {\n ...unresolvedDevMissingRootDeps,\n ...depManifest.devDependencies,\n };\n\n return { packageName, depManifest };\n });\n const result: ComponentDependenciesMap = new Map();\n\n if (buildResultsP.length) {\n const results = await Promise.all(buildResultsP);\n results.forEach((currResult) => {\n result.set(currResult.packageName, currResult.depManifest);\n });\n }\n\n return result;\n }\n\n private async _getDefaultPeerDependencies(\n component: Component,\n packageNamesFromWorkspace: string[]\n ): Promise<Record<string, string>> {\n const envPolicy = await this.dependencyResolver.getComponentEnvPolicy(component);\n const selfPolicyWithoutLocal = envPolicy.selfPolicy.filter(\n (dep) => !packageNamesFromWorkspace.includes(dep.dependencyId)\n );\n return fromPairs(selfPolicyWithoutLocal.toNameVersionTuple());\n }\n\n private async updateDependenciesVersions(\n component: Component,\n rootPolicy: WorkspacePolicy | undefined,\n dependencyList: DependencyList\n ): Promise<void> {\n // If root policy is not passed, it means that installation happens in a capsule\n // and we only resolve versions from the dependencies, not any policies.\n const mergedPolicies = rootPolicy && (await this.dependencyResolver.getPolicy(component));\n dependencyList.forEach((dep) => {\n updateDependencyVersion(dep, rootPolicy, mergedPolicies);\n });\n }\n\n /**\n * Get the components manifests based on the calculated dedupedDependencies\n *\n * @param {DedupedDependencies} dedupedDependencies\n * @param {Component[]} components\n * @returns {ComponentsManifestsMap}\n */\n async getComponentsManifests(\n dedupedDependencies: DedupedDependencies,\n components: Component[],\n createManifestForComponentsWithoutDependencies = true\n ): Promise<ComponentsManifestsMap> {\n const componentsManifests: ComponentsManifestsMap = new Map();\n // don't use Promise.all, along the road this code might import an env from a remote, which can't be done in parallel.\n // otherwise, it may import the same component multiple times, and if fails, the ref (remote-lane) files may be corrupted.\n await pMapSeries(components, async (component) => {\n const packageName = componentIdToPackageName(component.state._consumer);\n if (\n dedupedDependencies.componentDependenciesMap.has(packageName) ||\n createManifestForComponentsWithoutDependencies\n ) {\n const blankDependencies: ManifestDependenciesObject = {\n dependencies: {},\n optionalDependencies: {},\n devDependencies: {},\n peerDependencies: {},\n peerDependenciesMeta: {},\n };\n let dependencies = blankDependencies;\n if (dedupedDependencies.componentDependenciesMap.has(packageName)) {\n dependencies = dedupedDependencies.componentDependenciesMap.get(packageName) as ManifestDependenciesObject;\n }\n\n const getVersion = (): string => {\n if (!component.id.hasVersion()) return '0.0.1-new';\n return snapToSemver(component.id.version as string);\n };\n\n const version = getVersion();\n const envPolicy = await this.dependencyResolver.getComponentEnvPolicy(component);\n const manifest = new ComponentManifest(packageName, new SemVer(version), dependencies, component, envPolicy);\n componentsManifests.set(packageName, manifest);\n }\n });\n return componentsManifests;\n }\n}\n\nfunction filterExtensions(dependencyList: DependencyList): DependencyList {\n const filtered = dependencyList.filter((dep) => {\n if (!(dep instanceof ComponentDependency)) {\n return true;\n }\n return !dep.isExtension;\n });\n return filtered;\n}\n\nfunction filterComponents(dependencyList: DependencyList, componentsToFilterOut: Component[]): DependencyList {\n const filtered = dependencyList.filter((dep) => {\n if (!(dep instanceof ComponentDependency)) {\n const depPkgName = dep.getPackageName?.();\n if (!depPkgName) return true;\n // If the package is already in the workspace as a local component,\n // then we don't want to install that package as a dependency to node_modules.\n // Otherwise, it would rewrite the local component inside the root node_modules that is created by bit link.\n return !componentsToFilterOut.some(\n (component) => depPkgName === componentIdToPackageName(component.state._consumer)\n );\n }\n // Remove dependencies which has no version (they are new in the workspace)\n if (!dep.componentId.hasVersion()) return false;\n const existingComponent = componentsToFilterOut.find((component) => {\n // For new components, the component has no version but the dependency id has version 0.0.1\n if (!component.id.hasVersion()) {\n return component.id.toString() === dep.componentId.toString({ ignoreVersion: true });\n }\n // We are checking against both component.id and component.state._consumer.id\n // Because during tag operation, the component.id has the current version (before the tag)\n // while the component.state._consumer.id has the upcoming version (the version that will be after the tag)\n // The dependency in some cases is already updated to the upcoming version\n return (\n component.id.isEqualWithoutVersion(dep.componentId) ||\n component.state._consumer.id.isEqualWithoutVersion(dep.componentId)\n );\n });\n if (existingComponent) return false;\n return true;\n });\n return filtered;\n}\n\nfunction excludeWorkspaceDependencies(deps: DepObjectValue): DepObjectValue {\n return pickBy(deps, (versionSpec) => !versionSpec.startsWith('file:') && !versionSpec.startsWith('workspace:'));\n}\n\nasync function getMissingPackages(component: Component): Promise<{ devMissings: string[]; runtimeMissings: string[] }> {\n const missingPackagesData = component.state.issues.getIssue(IssuesClasses.MissingPackagesDependenciesOnFs)?.data;\n if (!missingPackagesData?.length) return { devMissings: [], runtimeMissings: [] };\n\n let devMissings: string[] = [];\n let runtimeMissings: string[] = [];\n\n missingPackagesData.forEach((data) => {\n if (data.isDevFile) {\n devMissings.push(...data.missingPackages);\n } else {\n runtimeMissings.push(...data.missingPackages);\n }\n });\n devMissings = uniq(devMissings);\n runtimeMissings = uniq(runtimeMissings);\n\n // Remove dev missing which are also runtime missing\n devMissings = difference(devMissings, runtimeMissings);\n return {\n devMissings,\n runtimeMissings,\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_aspectLoader","data","require","_componentIssues","_pkgModules","_lodash","_semver","_pMapSeries","_interopRequireDefault","_componentPackageVersion","_dependencies","_policy","_componentManifest","_deduping","_updateDependencyVersion","_workspaceManifest","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","DEFAULT_CREATE_OPTIONS","filterComponentsFromManifests","createManifestForComponentsWithoutDependencies","dedupe","resolveVersionsFromDependenciesOnly","excludeExtensionsDependencies","WorkspaceManifestFactory","constructor","dependencyResolver","aspectLoader","createFromComponents","name","version","rootPolicy","rootDir","components","options","optsWithDefaults","assign","hasRootComponents","filterOutCoreAspects","componentDependenciesMap","buildComponentDependenciesMap","undefined","dependencyFilterFn","referenceLocalPackages","rootDependencies","toManifest","dependencies","dedupedDependencies","getEmptyDedupedDependencies","dedupeDependencies","dedupePeerDependencies","mapValues","deps","excludeWorkspaceDependencies","componentsManifestsMap","getComponentsManifests","envSelfPeers","getEnvsSelfPeersPolicy","workspaceManifest","WorkspaceManifest","coreAspectIds","getCoreAspectIds","coreAspectPkgNames","Set","map","coreAspectId","getCoreAspectPackageName","add","dep","has","dependencyId","foundEnvs","component","values","envPolicy","peersPolicies","policy","selfPolicy","mergedPolicies","VariantPolicy","mergePolices","packageNames","getPackageName","buildResultsP","packageName","componentIdToPackageName","state","_consumer","depList","getDependencies","includeHidden","additionalDeps","comp","toTypeArray","compIdWithoutVersion","id","split","isExtension","includes","componentInWorkspace","find","c","isEqual","componentId","pkgName","depManifestBeforeFiltering","toDependenciesManifest","filterComponents","filterExtensions","updateDependenciesVersions","depManifest","devMissings","runtimeMissings","getMissingPackages","unresolvedRuntimeMissingRootDeps","pickBy","_version","rootPackageName","devDependencies","peerDependencies","unresolvedDevMissingRootDeps","defaultPeerDependencies","_getDefaultPeerDependencies","result","Map","results","Promise","all","currResult","set","packageNamesFromWorkspace","getComponentEnvPolicy","selfPolicyWithoutLocal","nameVersionTuples","toNameVersionTuple","resolved","currentDeps","found","findByPkgNameOrCompId","fromPairs","dependencyList","getPolicy","updateDependencyVersion","componentsManifests","pMapSeries","blankDependencies","optionalDependencies","peerDependenciesMeta","get","getVersion","hasVersion","snapToSemver","manifest","ComponentManifest","SemVer","exports","filtered","ComponentDependency","componentsToFilterOut","depPkgName","some","existingComponent","toString","ignoreVersion","isEqualWithoutVersion","versionSpec","startsWith","missingPackagesData","issues","getIssue","IssuesClasses","MissingPackagesDependenciesOnFs","isDevFile","missingPackages","uniq","difference"],"sources":["workspace-manifest-factory.ts"],"sourcesContent":["import type { AspectLoaderMain } from '@teambit/aspect-loader';\nimport { getCoreAspectPackageName } from '@teambit/aspect-loader';\nimport { IssuesClasses } from '@teambit/component-issues';\nimport type { Component } from '@teambit/component';\nimport { componentIdToPackageName } from '@teambit/pkg.modules.component-package-name';\nimport { fromPairs, pickBy, mapValues, uniq, difference } from 'lodash';\nimport { SemVer } from 'semver';\nimport pMapSeries from 'p-map-series';\nimport { snapToSemver } from '@teambit/component-package-version';\nimport type { DependencyList, PackageName } from '../dependencies';\nimport { ComponentDependency } from '../dependencies';\nimport type { WorkspacePolicy, EnvPolicy } from '../policy';\nimport { VariantPolicy } from '../policy';\nimport type { DependencyResolverMain } from '../dependency-resolver.main.runtime';\nimport type { ComponentsManifestsMap } from '../types';\nimport { ComponentManifest } from './component-manifest';\nimport type { DedupedDependencies } from './deduping';\nimport { dedupeDependencies, getEmptyDedupedDependencies } from './deduping';\nimport type { ManifestToJsonOptions, ManifestDependenciesObject, DepObjectValue } from './manifest';\nimport { updateDependencyVersion } from './update-dependency-version';\nimport { WorkspaceManifest } from './workspace-manifest';\n\nexport type DepsFilterFn = (dependencies: DependencyList) => DependencyList;\n\nexport type ComponentDependenciesMap = Map<PackageName, ManifestDependenciesObject>;\nexport interface WorkspaceManifestToJsonOptions extends ManifestToJsonOptions {\n includeDir?: boolean;\n}\n\nexport type CreateFromComponentsOptions = {\n filterComponentsFromManifests: boolean;\n createManifestForComponentsWithoutDependencies: boolean;\n dedupe?: boolean;\n dependencyFilterFn?: DepsFilterFn;\n resolveVersionsFromDependenciesOnly?: boolean;\n referenceLocalPackages?: boolean;\n hasRootComponents?: boolean;\n excludeExtensionsDependencies?: boolean;\n};\n\nconst DEFAULT_CREATE_OPTIONS: CreateFromComponentsOptions = {\n filterComponentsFromManifests: true,\n createManifestForComponentsWithoutDependencies: true,\n dedupe: true,\n resolveVersionsFromDependenciesOnly: false,\n excludeExtensionsDependencies: false,\n};\nexport class WorkspaceManifestFactory {\n constructor(\n private dependencyResolver: DependencyResolverMain,\n private aspectLoader: AspectLoaderMain\n ) {}\n\n async createFromComponents(\n name: string,\n version: SemVer,\n rootPolicy: WorkspacePolicy,\n rootDir: string,\n components: Component[],\n options: CreateFromComponentsOptions = DEFAULT_CREATE_OPTIONS\n ): Promise<WorkspaceManifest> {\n // Make sure to take other default if passed options with only one option\n const optsWithDefaults = Object.assign({}, DEFAULT_CREATE_OPTIONS, options);\n const hasRootComponents = options.hasRootComponents ?? this.dependencyResolver.hasRootComponents();\n rootPolicy = this.filterOutCoreAspects(rootPolicy);\n const componentDependenciesMap: ComponentDependenciesMap = await this.buildComponentDependenciesMap(components, {\n filterComponentsFromManifests: optsWithDefaults.filterComponentsFromManifests,\n rootPolicy: optsWithDefaults.resolveVersionsFromDependenciesOnly ? undefined : rootPolicy,\n dependencyFilterFn: optsWithDefaults.dependencyFilterFn,\n excludeExtensionsDependencies: optsWithDefaults.excludeExtensionsDependencies,\n referenceLocalPackages: optsWithDefaults.referenceLocalPackages && hasRootComponents,\n rootDependencies: hasRootComponents ? rootPolicy.toManifest().dependencies : undefined,\n });\n let dedupedDependencies = getEmptyDedupedDependencies();\n if (hasRootComponents) {\n const { rootDependencies } = dedupeDependencies(rootPolicy, componentDependenciesMap, {\n dedupePeerDependencies: hasRootComponents,\n });\n // We hoist dependencies in order for the IDE to work.\n // For runtime, the peer dependencies are installed inside:\n // <ws root>/node_module/<comp name>/node_module/<comp name>/node_modules\n dedupedDependencies.rootDependencies = mapValues(\n rootDependencies,\n (deps) => deps && excludeWorkspaceDependencies(deps)\n );\n dedupedDependencies.componentDependenciesMap = componentDependenciesMap;\n } else if (options.dedupe) {\n dedupedDependencies = dedupeDependencies(rootPolicy, componentDependenciesMap);\n } else {\n dedupedDependencies.rootDependencies = rootPolicy.toManifest();\n dedupedDependencies.componentDependenciesMap = componentDependenciesMap;\n }\n const componentsManifestsMap = await this.getComponentsManifests(\n dedupedDependencies,\n components,\n optsWithDefaults.createManifestForComponentsWithoutDependencies\n );\n const envSelfPeers = this.getEnvsSelfPeersPolicy(componentsManifestsMap);\n const workspaceManifest = new WorkspaceManifest(\n name,\n version,\n dedupedDependencies.rootDependencies,\n envSelfPeers,\n rootDir,\n componentsManifestsMap\n );\n return workspaceManifest;\n }\n\n private filterOutCoreAspects(rootPolicy: WorkspacePolicy) {\n const coreAspectIds = this.aspectLoader.getCoreAspectIds();\n const coreAspectPkgNames = new Set(coreAspectIds.map((coreAspectId) => getCoreAspectPackageName(coreAspectId)));\n coreAspectPkgNames.add('@teambit/legacy');\n return rootPolicy.filter((dep) => !coreAspectPkgNames.has(dep.dependencyId));\n }\n\n private getEnvsSelfPeersPolicy(componentsManifestsMap: ComponentsManifestsMap) {\n const foundEnvs: EnvPolicy[] = [];\n for (const component of componentsManifestsMap.values()) {\n foundEnvs.push(component.envPolicy);\n }\n const peersPolicies = foundEnvs.map((policy) => policy.selfPolicy);\n // TODO: At the moment we are just merge everything, so in case of conflicts one will be taken\n // TODO: once we have root for each env, we should know to handle it differently\n const mergedPolicies = VariantPolicy.mergePolices(peersPolicies);\n return mergedPolicies;\n }\n\n /**\n * Get the components and build a map with the package name (from the component) as key and the dependencies as values\n *\n * @param {Component[]} components\n * @param {boolean} [filterComponentsFromManifests=true] - filter existing components from the dep graphs\n * @returns\n */\n private async buildComponentDependenciesMap(\n components: Component[],\n {\n dependencyFilterFn,\n filterComponentsFromManifests,\n excludeExtensionsDependencies,\n referenceLocalPackages,\n rootDependencies,\n rootPolicy,\n }: {\n dependencyFilterFn?: DepsFilterFn;\n filterComponentsFromManifests?: boolean;\n excludeExtensionsDependencies?: boolean;\n referenceLocalPackages?: boolean;\n rootDependencies?: Record<string, string>;\n rootPolicy?: WorkspacePolicy;\n }\n ): Promise<ComponentDependenciesMap> {\n const packageNames = components.map((component) => this.dependencyResolver.getPackageName(component));\n const buildResultsP = components.map(async (component) => {\n const packageName = componentIdToPackageName(component.state._consumer);\n let depList = this.dependencyResolver.getDependencies(component, { includeHidden: true });\n const additionalDeps = {};\n if (referenceLocalPackages) {\n const coreAspectIds = this.aspectLoader.getCoreAspectIds();\n for (const comp of depList.toTypeArray('component') as ComponentDependency[]) {\n const [compIdWithoutVersion] = comp.id.split('@');\n if (!comp.isExtension && !coreAspectIds.includes(compIdWithoutVersion)) {\n const componentInWorkspace = components.find((c) => c.id.isEqual(comp.componentId));\n if (componentInWorkspace) {\n const pkgName = this.dependencyResolver.getPackageName(componentInWorkspace);\n if (pkgName !== '@teambit/harmony') {\n additionalDeps[pkgName] = `workspace:*`;\n }\n }\n }\n }\n }\n const depManifestBeforeFiltering = depList.toDependenciesManifest();\n\n if (filterComponentsFromManifests ?? true) {\n depList = filterComponents(depList, components);\n }\n if (excludeExtensionsDependencies) {\n depList = filterExtensions(depList);\n }\n // Remove bit bin from dep list\n depList = depList.filter((dep) => dep.id !== '@teambit/legacy');\n if (dependencyFilterFn) {\n depList = dependencyFilterFn(depList);\n }\n await this.updateDependenciesVersions(component, rootPolicy, depList);\n const depManifest = depList.toDependenciesManifest();\n const { devMissings, runtimeMissings } = await getMissingPackages(component);\n // Only add missing root deps that are not already in the component manifest\n // We are using depManifestBeforeFiltering to support (rare) cases when a dependency is both:\n // a component in the workspace (bitmap) and a dependency in the workspace.jsonc / package.json\n // this happens for the bit repo itself for the @teambit/component-version component\n // in this case we don't want to add that to the manifest when it's missing, because it will be linked from the\n // workspace\n const unresolvedRuntimeMissingRootDeps = pickBy(rootDependencies, (_version, rootPackageName) => {\n return (\n runtimeMissings.includes(rootPackageName) &&\n !depManifestBeforeFiltering.dependencies[rootPackageName] &&\n !depManifestBeforeFiltering.devDependencies[rootPackageName] &&\n !depManifestBeforeFiltering.peerDependencies[rootPackageName]\n );\n });\n // Only add missing root deps that are not already in the component manifest\n const unresolvedDevMissingRootDeps = pickBy(rootDependencies, (_version, rootPackageName) => {\n return (\n devMissings.includes(rootPackageName) &&\n !depManifestBeforeFiltering.dependencies[rootPackageName] &&\n !depManifestBeforeFiltering.devDependencies[rootPackageName] &&\n !depManifestBeforeFiltering.peerDependencies[rootPackageName]\n );\n });\n\n const defaultPeerDependencies = await this._getDefaultPeerDependencies(component, packageNames);\n\n depManifest.dependencies = {\n ...defaultPeerDependencies,\n ...unresolvedRuntimeMissingRootDeps,\n ...additionalDeps,\n ...depManifest.dependencies,\n };\n\n depManifest.devDependencies = {\n ...unresolvedDevMissingRootDeps,\n ...depManifest.devDependencies,\n };\n\n return { packageName, depManifest };\n });\n const result: ComponentDependenciesMap = new Map();\n\n if (buildResultsP.length) {\n const results = await Promise.all(buildResultsP);\n results.forEach((currResult) => {\n result.set(currResult.packageName, currResult.depManifest);\n });\n }\n\n return result;\n }\n\n private async _getDefaultPeerDependencies(\n component: Component,\n packageNamesFromWorkspace: string[]\n ): Promise<Record<string, string>> {\n const envPolicy = await this.dependencyResolver.getComponentEnvPolicy(component);\n const selfPolicyWithoutLocal = envPolicy.selfPolicy.filter(\n (dep) => !packageNamesFromWorkspace.includes(dep.dependencyId)\n );\n\n const nameVersionTuples = selfPolicyWithoutLocal.toNameVersionTuple();\n const resolved = nameVersionTuples.map(([name, version]) => {\n if (version !== '+') {\n return [name, version];\n }\n // Resolve \"+\" version placeholders by looking up the already resolved version that was set in\n // apply-overrides.resolveEnvPeerDepVersion()\n const currentDeps = this.dependencyResolver.getDependencies(component);\n const found = currentDeps.findByPkgNameOrCompId(name);\n // If not found, use '*' as fallback\n return [name, found?.version || '*'];\n });\n return fromPairs(resolved);\n }\n\n private async updateDependenciesVersions(\n component: Component,\n rootPolicy: WorkspacePolicy | undefined,\n dependencyList: DependencyList\n ): Promise<void> {\n // If root policy is not passed, it means that installation happens in a capsule\n // and we only resolve versions from the dependencies, not any policies.\n const mergedPolicies = rootPolicy && (await this.dependencyResolver.getPolicy(component));\n dependencyList.forEach((dep) => {\n updateDependencyVersion(dep, rootPolicy, mergedPolicies);\n });\n }\n\n /**\n * Get the components manifests based on the calculated dedupedDependencies\n *\n * @param {DedupedDependencies} dedupedDependencies\n * @param {Component[]} components\n * @returns {ComponentsManifestsMap}\n */\n async getComponentsManifests(\n dedupedDependencies: DedupedDependencies,\n components: Component[],\n createManifestForComponentsWithoutDependencies = true\n ): Promise<ComponentsManifestsMap> {\n const componentsManifests: ComponentsManifestsMap = new Map();\n // don't use Promise.all, along the road this code might import an env from a remote, which can't be done in parallel.\n // otherwise, it may import the same component multiple times, and if fails, the ref (remote-lane) files may be corrupted.\n await pMapSeries(components, async (component) => {\n const packageName = componentIdToPackageName(component.state._consumer);\n if (\n dedupedDependencies.componentDependenciesMap.has(packageName) ||\n createManifestForComponentsWithoutDependencies\n ) {\n const blankDependencies: ManifestDependenciesObject = {\n dependencies: {},\n optionalDependencies: {},\n devDependencies: {},\n peerDependencies: {},\n peerDependenciesMeta: {},\n };\n let dependencies = blankDependencies;\n if (dedupedDependencies.componentDependenciesMap.has(packageName)) {\n dependencies = dedupedDependencies.componentDependenciesMap.get(packageName) as ManifestDependenciesObject;\n }\n\n const getVersion = (): string => {\n if (!component.id.hasVersion()) return '0.0.1-new';\n return snapToSemver(component.id.version as string);\n };\n\n const version = getVersion();\n const envPolicy = await this.dependencyResolver.getComponentEnvPolicy(component);\n const manifest = new ComponentManifest(packageName, new SemVer(version), dependencies, component, envPolicy);\n componentsManifests.set(packageName, manifest);\n }\n });\n return componentsManifests;\n }\n}\n\nfunction filterExtensions(dependencyList: DependencyList): DependencyList {\n const filtered = dependencyList.filter((dep) => {\n if (!(dep instanceof ComponentDependency)) {\n return true;\n }\n return !dep.isExtension;\n });\n return filtered;\n}\n\nfunction filterComponents(dependencyList: DependencyList, componentsToFilterOut: Component[]): DependencyList {\n const filtered = dependencyList.filter((dep) => {\n if (!(dep instanceof ComponentDependency)) {\n const depPkgName = dep.getPackageName?.();\n if (!depPkgName) return true;\n // If the package is already in the workspace as a local component,\n // then we don't want to install that package as a dependency to node_modules.\n // Otherwise, it would rewrite the local component inside the root node_modules that is created by bit link.\n return !componentsToFilterOut.some(\n (component) => depPkgName === componentIdToPackageName(component.state._consumer)\n );\n }\n // Remove dependencies which has no version (they are new in the workspace)\n if (!dep.componentId.hasVersion()) return false;\n const existingComponent = componentsToFilterOut.find((component) => {\n // For new components, the component has no version but the dependency id has version 0.0.1\n if (!component.id.hasVersion()) {\n return component.id.toString() === dep.componentId.toString({ ignoreVersion: true });\n }\n // We are checking against both component.id and component.state._consumer.id\n // Because during tag operation, the component.id has the current version (before the tag)\n // while the component.state._consumer.id has the upcoming version (the version that will be after the tag)\n // The dependency in some cases is already updated to the upcoming version\n return (\n component.id.isEqualWithoutVersion(dep.componentId) ||\n component.state._consumer.id.isEqualWithoutVersion(dep.componentId)\n );\n });\n if (existingComponent) return false;\n return true;\n });\n return filtered;\n}\n\nfunction excludeWorkspaceDependencies(deps: DepObjectValue): DepObjectValue {\n return pickBy(deps, (versionSpec) => !versionSpec.startsWith('file:') && !versionSpec.startsWith('workspace:'));\n}\n\nasync function getMissingPackages(component: Component): Promise<{ devMissings: string[]; runtimeMissings: string[] }> {\n const missingPackagesData = component.state.issues.getIssue(IssuesClasses.MissingPackagesDependenciesOnFs)?.data;\n if (!missingPackagesData?.length) return { devMissings: [], runtimeMissings: [] };\n\n let devMissings: string[] = [];\n let runtimeMissings: string[] = [];\n\n missingPackagesData.forEach((data) => {\n if (data.isDevFile) {\n devMissings.push(...data.missingPackages);\n } else {\n runtimeMissings.push(...data.missingPackages);\n }\n });\n devMissings = uniq(devMissings);\n runtimeMissings = uniq(runtimeMissings);\n\n // Remove dev missing which are also runtime missing\n devMissings = difference(devMissings, runtimeMissings);\n return {\n devMissings,\n runtimeMissings,\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -17,6 +17,11 @@ export declare class WorkspaceManifest extends Manifest {
17
17
  get dir(): string;
18
18
  getComponentMap(): void;
19
19
  toJson(options?: WorkspaceManifestToJsonOptions): Record<string, any>;
20
+ /**
21
+ * Resolves "+" version placeholders in the env peers policy.
22
+ * The "+" means: use the version from the workspace components (.bitmap or workspace.jsonc).
23
+ */
24
+ private _resolvePlusVersions;
20
25
  toJsonWithDir(options?: WorkspaceManifestToJsonOptions): {
21
26
  rootDir: string;
22
27
  manifest: Record<string, any>;
@@ -31,11 +31,31 @@ class WorkspaceManifest extends _manifest().Manifest {
31
31
  const manifest = super.toJson(options);
32
32
  if (options.installPeersFromEnvs) {
33
33
  const peersManifest = this.envSelfPeersPolicy?.toVersionManifest();
34
+ // Resolve "+" version placeholders from peersManifest
35
+ const resolvedPeersManifest = this._resolvePlusVersions(peersManifest || {});
34
36
  manifest.dependencies = manifest.dependencies || {};
35
- Object.assign(manifest.dependencies, peersManifest);
37
+ Object.assign(manifest.dependencies, resolvedPeersManifest);
36
38
  }
37
39
  return manifest;
38
40
  }
41
+
42
+ /**
43
+ * Resolves "+" version placeholders in the env peers policy.
44
+ * The "+" means: use the version from the workspace components (.bitmap or workspace.jsonc).
45
+ */
46
+ _resolvePlusVersions(peersManifest) {
47
+ return Object.keys(peersManifest).reduce((acc, pkgName) => {
48
+ const version = peersManifest[pkgName];
49
+ if (version !== '+') {
50
+ acc[pkgName] = version;
51
+ return acc;
52
+ }
53
+ const foundVersion = this.dependencies.dependencies?.[pkgName] || this.dependencies.optionalDependencies?.[pkgName] || this.dependencies.devDependencies?.[pkgName] || this.dependencies.peerDependencies?.[pkgName];
54
+ // Fallback to '*' if we can't resolve the version
55
+ acc[pkgName] = foundVersion || '*';
56
+ return acc;
57
+ }, {});
58
+ }
39
59
  toJsonWithDir(options = {}) {
40
60
  return {
41
61
  manifest: this.toJson(options),
@@ -1 +1 @@
1
- {"version":3,"names":["_manifest","data","require","WorkspaceManifest","Manifest","constructor","name","version","dependencies","envSelfPeersPolicy","rootDir","componentsManifestsMap","dir","getComponentMap","toJson","options","manifest","installPeersFromEnvs","peersManifest","toVersionManifest","Object","assign","toJsonWithDir","exports"],"sources":["workspace-manifest.ts"],"sourcesContent":["import type { SemVer } from 'semver';\nimport type { VariantPolicy } from '../policy';\n\nimport type { ComponentsManifestsMap } from '../types';\nimport type { ManifestToJsonOptions, ManifestDependenciesObject } from './manifest';\nimport { Manifest } from './manifest';\n\nexport interface WorkspaceManifestToJsonOptions extends ManifestToJsonOptions {\n installPeersFromEnvs?: boolean;\n}\n\nexport class WorkspaceManifest extends Manifest {\n constructor(\n // TODO: please prefer readonly on public\n public name: string,\n public version: SemVer,\n public dependencies: ManifestDependenciesObject,\n private envSelfPeersPolicy: VariantPolicy | undefined,\n private rootDir: string,\n public componentsManifestsMap: ComponentsManifestsMap\n ) {\n super(name, version, dependencies);\n }\n\n get dir() {\n return this.rootDir;\n }\n\n getComponentMap() {}\n\n toJson(options: WorkspaceManifestToJsonOptions = {}): Record<string, any> {\n const manifest = super.toJson(options);\n if (options.installPeersFromEnvs) {\n const peersManifest = this.envSelfPeersPolicy?.toVersionManifest();\n manifest.dependencies = manifest.dependencies || {};\n Object.assign(manifest.dependencies, peersManifest);\n }\n return manifest;\n }\n\n toJsonWithDir(options: WorkspaceManifestToJsonOptions = {}): { rootDir: string; manifest: Record<string, any> } {\n return {\n manifest: this.toJson(options),\n rootDir: this.rootDir,\n };\n }\n}\n"],"mappings":";;;;;;AAKA,SAAAA,UAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,SAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAMO,MAAME,iBAAiB,SAASC,oBAAQ,CAAC;EAC9CC,WAAWA;EACT;EACOC,IAAY,EACZC,OAAe,EACfC,YAAwC,EACvCC,kBAA6C,EAC7CC,OAAe,EAChBC,sBAA8C,EACrD;IACA,KAAK,CAACL,IAAI,EAAEC,OAAO,EAAEC,YAAY,CAAC;IAAC,KAP5BF,IAAY,GAAZA,IAAY;IAAA,KACZC,OAAe,GAAfA,OAAe;IAAA,KACfC,YAAwC,GAAxCA,YAAwC;IAAA,KACvCC,kBAA6C,GAA7CA,kBAA6C;IAAA,KAC7CC,OAAe,GAAfA,OAAe;IAAA,KAChBC,sBAA8C,GAA9CA,sBAA8C;EAGvD;EAEA,IAAIC,GAAGA,CAAA,EAAG;IACR,OAAO,IAAI,CAACF,OAAO;EACrB;EAEAG,eAAeA,CAAA,EAAG,CAAC;EAEnBC,MAAMA,CAACC,OAAuC,GAAG,CAAC,CAAC,EAAuB;IACxE,MAAMC,QAAQ,GAAG,KAAK,CAACF,MAAM,CAACC,OAAO,CAAC;IACtC,IAAIA,OAAO,CAACE,oBAAoB,EAAE;MAChC,MAAMC,aAAa,GAAG,IAAI,CAACT,kBAAkB,EAAEU,iBAAiB,CAAC,CAAC;MAClEH,QAAQ,CAACR,YAAY,GAAGQ,QAAQ,CAACR,YAAY,IAAI,CAAC,CAAC;MACnDY,MAAM,CAACC,MAAM,CAACL,QAAQ,CAACR,YAAY,EAAEU,aAAa,CAAC;IACrD;IACA,OAAOF,QAAQ;EACjB;EAEAM,aAAaA,CAACP,OAAuC,GAAG,CAAC,CAAC,EAAsD;IAC9G,OAAO;MACLC,QAAQ,EAAE,IAAI,CAACF,MAAM,CAACC,OAAO,CAAC;MAC9BL,OAAO,EAAE,IAAI,CAACA;IAChB,CAAC;EACH;AACF;AAACa,OAAA,CAAApB,iBAAA,GAAAA,iBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_manifest","data","require","WorkspaceManifest","Manifest","constructor","name","version","dependencies","envSelfPeersPolicy","rootDir","componentsManifestsMap","dir","getComponentMap","toJson","options","manifest","installPeersFromEnvs","peersManifest","toVersionManifest","resolvedPeersManifest","_resolvePlusVersions","Object","assign","keys","reduce","acc","pkgName","foundVersion","optionalDependencies","devDependencies","peerDependencies","toJsonWithDir","exports"],"sources":["workspace-manifest.ts"],"sourcesContent":["import type { SemVer } from 'semver';\nimport type { VariantPolicy } from '../policy';\n\nimport type { ComponentsManifestsMap } from '../types';\nimport type { ManifestToJsonOptions, ManifestDependenciesObject } from './manifest';\nimport { Manifest } from './manifest';\n\nexport interface WorkspaceManifestToJsonOptions extends ManifestToJsonOptions {\n installPeersFromEnvs?: boolean;\n}\n\nexport class WorkspaceManifest extends Manifest {\n constructor(\n // TODO: please prefer readonly on public\n public name: string,\n public version: SemVer,\n public dependencies: ManifestDependenciesObject,\n private envSelfPeersPolicy: VariantPolicy | undefined,\n private rootDir: string,\n public componentsManifestsMap: ComponentsManifestsMap\n ) {\n super(name, version, dependencies);\n }\n\n get dir() {\n return this.rootDir;\n }\n\n getComponentMap() {}\n\n toJson(options: WorkspaceManifestToJsonOptions = {}): Record<string, any> {\n const manifest = super.toJson(options);\n if (options.installPeersFromEnvs) {\n const peersManifest = this.envSelfPeersPolicy?.toVersionManifest();\n // Resolve \"+\" version placeholders from peersManifest\n const resolvedPeersManifest = this._resolvePlusVersions(peersManifest || {});\n manifest.dependencies = manifest.dependencies || {};\n Object.assign(manifest.dependencies, resolvedPeersManifest);\n }\n return manifest;\n }\n\n /**\n * Resolves \"+\" version placeholders in the env peers policy.\n * The \"+\" means: use the version from the workspace components (.bitmap or workspace.jsonc).\n */\n private _resolvePlusVersions(peersManifest: Record<string, string>): Record<string, string> {\n return Object.keys(peersManifest).reduce((acc, pkgName) => {\n const version = peersManifest[pkgName];\n if (version !== '+') {\n acc[pkgName] = version;\n return acc;\n }\n const foundVersion =\n this.dependencies.dependencies?.[pkgName] ||\n this.dependencies.optionalDependencies?.[pkgName] ||\n this.dependencies.devDependencies?.[pkgName] ||\n this.dependencies.peerDependencies?.[pkgName];\n // Fallback to '*' if we can't resolve the version\n acc[pkgName] = foundVersion || '*';\n return acc;\n }, {});\n }\n\n toJsonWithDir(options: WorkspaceManifestToJsonOptions = {}): { rootDir: string; manifest: Record<string, any> } {\n return {\n manifest: this.toJson(options),\n rootDir: this.rootDir,\n };\n }\n}\n"],"mappings":";;;;;;AAKA,SAAAA,UAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,SAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAMO,MAAME,iBAAiB,SAASC,oBAAQ,CAAC;EAC9CC,WAAWA;EACT;EACOC,IAAY,EACZC,OAAe,EACfC,YAAwC,EACvCC,kBAA6C,EAC7CC,OAAe,EAChBC,sBAA8C,EACrD;IACA,KAAK,CAACL,IAAI,EAAEC,OAAO,EAAEC,YAAY,CAAC;IAAC,KAP5BF,IAAY,GAAZA,IAAY;IAAA,KACZC,OAAe,GAAfA,OAAe;IAAA,KACfC,YAAwC,GAAxCA,YAAwC;IAAA,KACvCC,kBAA6C,GAA7CA,kBAA6C;IAAA,KAC7CC,OAAe,GAAfA,OAAe;IAAA,KAChBC,sBAA8C,GAA9CA,sBAA8C;EAGvD;EAEA,IAAIC,GAAGA,CAAA,EAAG;IACR,OAAO,IAAI,CAACF,OAAO;EACrB;EAEAG,eAAeA,CAAA,EAAG,CAAC;EAEnBC,MAAMA,CAACC,OAAuC,GAAG,CAAC,CAAC,EAAuB;IACxE,MAAMC,QAAQ,GAAG,KAAK,CAACF,MAAM,CAACC,OAAO,CAAC;IACtC,IAAIA,OAAO,CAACE,oBAAoB,EAAE;MAChC,MAAMC,aAAa,GAAG,IAAI,CAACT,kBAAkB,EAAEU,iBAAiB,CAAC,CAAC;MAClE;MACA,MAAMC,qBAAqB,GAAG,IAAI,CAACC,oBAAoB,CAACH,aAAa,IAAI,CAAC,CAAC,CAAC;MAC5EF,QAAQ,CAACR,YAAY,GAAGQ,QAAQ,CAACR,YAAY,IAAI,CAAC,CAAC;MACnDc,MAAM,CAACC,MAAM,CAACP,QAAQ,CAACR,YAAY,EAAEY,qBAAqB,CAAC;IAC7D;IACA,OAAOJ,QAAQ;EACjB;;EAEA;AACF;AACA;AACA;EACUK,oBAAoBA,CAACH,aAAqC,EAA0B;IAC1F,OAAOI,MAAM,CAACE,IAAI,CAACN,aAAa,CAAC,CAACO,MAAM,CAAC,CAACC,GAAG,EAAEC,OAAO,KAAK;MACzD,MAAMpB,OAAO,GAAGW,aAAa,CAACS,OAAO,CAAC;MACtC,IAAIpB,OAAO,KAAK,GAAG,EAAE;QACnBmB,GAAG,CAACC,OAAO,CAAC,GAAGpB,OAAO;QACtB,OAAOmB,GAAG;MACZ;MACA,MAAME,YAAY,GAChB,IAAI,CAACpB,YAAY,CAACA,YAAY,GAAGmB,OAAO,CAAC,IACzC,IAAI,CAACnB,YAAY,CAACqB,oBAAoB,GAAGF,OAAO,CAAC,IACjD,IAAI,CAACnB,YAAY,CAACsB,eAAe,GAAGH,OAAO,CAAC,IAC5C,IAAI,CAACnB,YAAY,CAACuB,gBAAgB,GAAGJ,OAAO,CAAC;MAC/C;MACAD,GAAG,CAACC,OAAO,CAAC,GAAGC,YAAY,IAAI,GAAG;MAClC,OAAOF,GAAG;IACZ,CAAC,EAAE,CAAC,CAAC,CAAC;EACR;EAEAM,aAAaA,CAACjB,OAAuC,GAAG,CAAC,CAAC,EAAsD;IAC9G,OAAO;MACLC,QAAQ,EAAE,IAAI,CAACF,MAAM,CAACC,OAAO,CAAC;MAC9BL,OAAO,EAAE,IAAI,CAACA;IAChB,CAAC;EACH;AACF;AAACuB,OAAA,CAAA9B,iBAAA,GAAAA,iBAAA","ignoreList":[]}
@@ -1,5 +1,5 @@
1
- import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.dependencies_dependency-resolver@1.0.779/dist/dependency-resolver.composition.js';
2
- import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.dependencies_dependency-resolver@1.0.779/dist/dependency-resolver.docs.mdx';
1
+ import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.dependencies_dependency-resolver@1.0.781/dist/dependency-resolver.composition.js';
2
+ import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.dependencies_dependency-resolver@1.0.781/dist/dependency-resolver.docs.mdx';
3
3
 
4
4
  export const compositions = [compositions_0];
5
5
  export const overview = [overview_0];
@@ -450,7 +450,7 @@ function groupByRangeOrVersion(indexItems: PackageNameIndexComponentItem[]): Ite
450
450
  export function isRange(version: string, compIdStr: string) {
451
451
  const validRange = semver.validRange(version);
452
452
  if (!validRange) {
453
- if (!isHash(version) && !version.startsWith('workspace:') && !version.startsWith('npm:')) {
453
+ if (!isHash(version) && !version.startsWith('workspace:') && !version.startsWith('npm:') && version !== '+') {
454
454
  throw new Error(
455
455
  `fatal: the version "${version}" originated from a dependent "${compIdStr}" is invalid semver range and not a hash`
456
456
  );
@@ -247,7 +247,20 @@ export class WorkspaceManifestFactory {
247
247
  const selfPolicyWithoutLocal = envPolicy.selfPolicy.filter(
248
248
  (dep) => !packageNamesFromWorkspace.includes(dep.dependencyId)
249
249
  );
250
- return fromPairs(selfPolicyWithoutLocal.toNameVersionTuple());
250
+
251
+ const nameVersionTuples = selfPolicyWithoutLocal.toNameVersionTuple();
252
+ const resolved = nameVersionTuples.map(([name, version]) => {
253
+ if (version !== '+') {
254
+ return [name, version];
255
+ }
256
+ // Resolve "+" version placeholders by looking up the already resolved version that was set in
257
+ // apply-overrides.resolveEnvPeerDepVersion()
258
+ const currentDeps = this.dependencyResolver.getDependencies(component);
259
+ const found = currentDeps.findByPkgNameOrCompId(name);
260
+ // If not found, use '*' as fallback
261
+ return [name, found?.version || '*'];
262
+ });
263
+ return fromPairs(resolved);
251
264
  }
252
265
 
253
266
  private async updateDependenciesVersions(
@@ -32,12 +32,36 @@ export class WorkspaceManifest extends Manifest {
32
32
  const manifest = super.toJson(options);
33
33
  if (options.installPeersFromEnvs) {
34
34
  const peersManifest = this.envSelfPeersPolicy?.toVersionManifest();
35
+ // Resolve "+" version placeholders from peersManifest
36
+ const resolvedPeersManifest = this._resolvePlusVersions(peersManifest || {});
35
37
  manifest.dependencies = manifest.dependencies || {};
36
- Object.assign(manifest.dependencies, peersManifest);
38
+ Object.assign(manifest.dependencies, resolvedPeersManifest);
37
39
  }
38
40
  return manifest;
39
41
  }
40
42
 
43
+ /**
44
+ * Resolves "+" version placeholders in the env peers policy.
45
+ * The "+" means: use the version from the workspace components (.bitmap or workspace.jsonc).
46
+ */
47
+ private _resolvePlusVersions(peersManifest: Record<string, string>): Record<string, string> {
48
+ return Object.keys(peersManifest).reduce((acc, pkgName) => {
49
+ const version = peersManifest[pkgName];
50
+ if (version !== '+') {
51
+ acc[pkgName] = version;
52
+ return acc;
53
+ }
54
+ const foundVersion =
55
+ this.dependencies.dependencies?.[pkgName] ||
56
+ this.dependencies.optionalDependencies?.[pkgName] ||
57
+ this.dependencies.devDependencies?.[pkgName] ||
58
+ this.dependencies.peerDependencies?.[pkgName];
59
+ // Fallback to '*' if we can't resolve the version
60
+ acc[pkgName] = foundVersion || '*';
61
+ return acc;
62
+ }, {});
63
+ }
64
+
41
65
  toJsonWithDir(options: WorkspaceManifestToJsonOptions = {}): { rootDir: string; manifest: Record<string, any> } {
42
66
  return {
43
67
  manifest: this.toJson(options),
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/dependency-resolver",
3
- "version": "1.0.779",
3
+ "version": "1.0.781",
4
4
  "homepage": "https://bit.cloud/teambit/dependencies/dependency-resolver",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.dependencies",
8
8
  "name": "dependency-resolver",
9
- "version": "1.0.779"
9
+ "version": "1.0.781"
10
10
  },
11
11
  "dependencies": {
12
12
  "chalk": "4.1.2",
@@ -23,7 +23,7 @@
23
23
  "multimatch": "5.0.0",
24
24
  "semver": "7.7.1",
25
25
  "p-limit": "3.1.0",
26
- "@pnpm/core": "1010.1.4",
26
+ "@pnpm/core": "1011.0.0",
27
27
  "semver-intersect": "1.4.0",
28
28
  "semver-range-intersect": "0.3.1",
29
29
  "@teambit/logger": "0.0.1375",
@@ -55,11 +55,11 @@
55
55
  "@teambit/legacy.consumer-config": "0.0.83",
56
56
  "@teambit/toolbox.crypto.sha1": "0.0.10",
57
57
  "@teambit/toolbox.object.sorter": "0.0.2",
58
- "@teambit/component": "1.0.779",
59
- "@teambit/envs": "1.0.779",
60
- "@teambit/aspect-loader": "1.0.779",
61
- "@teambit/objects": "0.0.286",
62
- "@teambit/graphql": "1.0.779"
58
+ "@teambit/component": "1.0.781",
59
+ "@teambit/envs": "1.0.781",
60
+ "@teambit/aspect-loader": "1.0.781",
61
+ "@teambit/objects": "0.0.288",
62
+ "@teambit/graphql": "1.0.781"
63
63
  },
64
64
  "devDependencies": {
65
65
  "@types/fs-extra": "9.0.7",