Skip to content

Commit

Permalink
refactor: resolve dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
zkochan committed May 16, 2024
1 parent f69c248 commit bcd4c4e
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 35 deletions.
4 changes: 2 additions & 2 deletions pkg-manager/resolve-dependencies/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ export async function resolveDependencies (
dependenciesTree,
outdatedDependencies,
resolvedImporters,
resolvedPackagesByDepPath,
resolvedPkgsById,
wantedToBeSkippedPackageIds,
appliedPatches,
time,
Expand Down Expand Up @@ -301,7 +301,7 @@ export async function resolveDependencies (

// waiting till package requests are finished
async function waitTillAllFetchingsFinish (): Promise<void> {
await Promise.all(Object.values(resolvedPackagesByDepPath).map(async ({ fetching }) => {
await Promise.all(Object.values(resolvedPkgsById).map(async ({ fetching }) => {
try {
await fetching?.()
} catch {}
Expand Down
52 changes: 26 additions & 26 deletions pkg-manager/resolve-dependencies/src/resolveDependencies.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,13 @@ const dependencyResolvedLogger = logger('_dependency_resolved')

const omitDepsFields = omit(['dependencies', 'optionalDependencies', 'peerDependencies', 'peerDependenciesMeta'])

export function getPkgsInfoFromDepPaths (
depPaths: string[],
resolvedPackagesByDepPath: ResolvedPackagesByDepPath
export function getPkgsInfoFromIds (
ids: string[],
resolvedPkgsById: ResolvedPkgsById
): Array<{ id: string, name: string, version: string }> {
return depPaths
.map((depPath) => {
const { id, name, version } = resolvedPackagesByDepPath[depPath]
return ids
.map((id) => {
const { name, version } = resolvedPkgsById[id]
return { id, name, version }
})
}
Expand Down Expand Up @@ -95,7 +95,7 @@ string,
DependenciesTreeNode<T>
>

export type ResolvedPackagesByDepPath = Record<string, ResolvedPackage>
export type ResolvedPkgsById = Record<string, ResolvedPackage>

export interface LinkedDependency {
isLinkedDependency: true
Expand Down Expand Up @@ -139,7 +139,7 @@ export interface ResolutionContext {
dryRun: boolean
forceFullResolution: boolean
ignoreScripts?: boolean
resolvedPackagesByDepPath: ResolvedPackagesByDepPath
resolvedPkgsById: ResolvedPkgsById
outdatedDependencies: { [pkgId: string]: string }
childrenByParentId: ChildrenByParentId
patchedDependencies?: Record<string, PatchFile>
Expand Down Expand Up @@ -456,7 +456,7 @@ async function resolveDependenciesOfImporters (
if (pkgAddress.updated) {
ctx.updatedSet.add(pkgAddress.alias)
}
const resolvedPackage = ctx.resolvedPackagesByDepPath[pkgAddress.depPath]
const resolvedPackage = ctx.resolvedPkgsById[pkgAddress.pkgId]
if (!resolvedPackage) continue // This will happen only with linked dependencies
if (!Object.prototype.hasOwnProperty.call(newPreferredVersions, resolvedPackage.name)) {
newPreferredVersions[resolvedPackage.name] = { ...importer.preferredVersions[resolvedPackage.name] }
Expand Down Expand Up @@ -586,7 +586,7 @@ export async function resolveDependencies (
if (pkgAddress.updated) {
ctx.updatedSet.add(pkgAddress.alias)
}
const resolvedPackage = ctx.resolvedPackagesByDepPath[pkgAddress.depPath]
const resolvedPackage = ctx.resolvedPkgsById[pkgAddress.pkgId]
if (!resolvedPackage) continue // This will happen only with linked dependencies
if (!Object.prototype.hasOwnProperty.call(newPreferredVersions, resolvedPackage.name)) {
newPreferredVersions[resolvedPackage.name] = { ...preferredVersions[resolvedPackage.name] }
Expand Down Expand Up @@ -899,7 +899,7 @@ async function resolveChildren (
}, {} as Record<string, string>),
depth: parentDepth,
installable: parentPkg.installable,
resolvedPackage: ctx.resolvedPackagesByDepPath[parentPkg.depPath],
resolvedPackage: ctx.resolvedPkgsById[parentPkg.pkgId],
})
return resolvingPeers
}
Expand Down Expand Up @@ -1172,7 +1172,7 @@ async function resolveDependency (
supportedArchitectures: options.supportedArchitectures,
onFetchError: (err: any) => { // eslint-disable-line
err.prefix = options.prefix
err.pkgsStack = getPkgsInfoFromDepPaths(options.parentIds, ctx.resolvedPackagesByDepPath)
err.pkgsStack = getPkgsInfoFromIds(options.parentIds, ctx.resolvedPkgsById)
return err
},
updateToLatest: options.updateToLatest,
Expand All @@ -1186,14 +1186,14 @@ async function resolveDependency (
pref: wantedDependency.pref,
version: wantedDependency.alias ? wantedDependency.pref : undefined,
},
parents: getPkgsInfoFromDepPaths(options.parentIds, ctx.resolvedPackagesByDepPath),
parents: getPkgsInfoFromIds(options.parentIds, ctx.resolvedPkgsById),
prefix: options.prefix,
reason: 'resolution_failure',
})
return null
}
err.prefix = options.prefix
err.pkgsStack = getPkgsInfoFromDepPaths(options.parentIds, ctx.resolvedPackagesByDepPath)
err.pkgsStack = getPkgsInfoFromIds(options.parentIds, ctx.resolvedPkgsById)
throw err
}

Expand Down Expand Up @@ -1352,7 +1352,7 @@ async function resolveDependency (

const parentIsInstallable = options.parentPkg.installable === undefined || options.parentPkg.installable
const installable = parentIsInstallable && pkgResponse.body.isInstallable !== false
const isNew = !ctx.resolvedPackagesByDepPath[depPath]
const isNew = !ctx.resolvedPkgsById[pkgResponse.body.id]
const parentImporterId = options.parentPkg.nodeId.substring(0, options.parentPkg.nodeId.indexOf('>', 1) + 1)
let resolveChildren = false
const currentIsOptional = wantedDependency.optional || options.parentPkg.optional
Expand Down Expand Up @@ -1383,7 +1383,7 @@ async function resolveDependency (

// WARN: It is very important to keep this sync
// Otherwise, deprecation messages for the same package might get written several times
ctx.resolvedPackagesByDepPath[depPath] = getResolvedPackage({
ctx.resolvedPkgsById[pkgResponse.body.id] = getResolvedPackage({
allowBuild: ctx.allowBuild,
dependencyLockfile: currentPkg.dependencyLockfile,
depPath,
Expand All @@ -1398,17 +1398,17 @@ async function resolveDependency (
optional: currentIsOptional,
})
} else {
ctx.resolvedPackagesByDepPath[depPath].prod = ctx.resolvedPackagesByDepPath[depPath].prod || !wantedDependency.dev && !wantedDependency.optional
ctx.resolvedPackagesByDepPath[depPath].dev = ctx.resolvedPackagesByDepPath[depPath].dev || wantedDependency.dev
ctx.resolvedPackagesByDepPath[depPath].optional = ctx.resolvedPackagesByDepPath[depPath].optional && currentIsOptional
ctx.resolvedPkgsById[pkgResponse.body.id].prod = ctx.resolvedPkgsById[pkgResponse.body.id].prod || !wantedDependency.dev && !wantedDependency.optional
ctx.resolvedPkgsById[pkgResponse.body.id].dev = ctx.resolvedPkgsById[pkgResponse.body.id].dev || wantedDependency.dev
ctx.resolvedPkgsById[pkgResponse.body.id].optional = ctx.resolvedPkgsById[pkgResponse.body.id].optional && currentIsOptional
if (ctx.hoistPeers) {
resolveChildren = !ctx.missingPeersOfChildrenByPkgId[pkgResponse.body.id].missingPeersOfChildren.resolved &&
!ctx.resolvedPackagesByDepPath[depPath].parentImporterIds.has(parentImporterId)
ctx.resolvedPackagesByDepPath[depPath].parentImporterIds.add(parentImporterId)
!ctx.resolvedPkgsById[pkgResponse.body.id].parentImporterIds.has(parentImporterId)
ctx.resolvedPkgsById[pkgResponse.body.id].parentImporterIds.add(parentImporterId)
}
if (ctx.resolvedPackagesByDepPath[depPath].fetching == null && pkgResponse.fetching != null) {
ctx.resolvedPackagesByDepPath[depPath].fetching = pkgResponse.fetching
ctx.resolvedPackagesByDepPath[depPath].filesIndexFile = pkgResponse.filesIndexFile!
if (ctx.resolvedPkgsById[pkgResponse.body.id].fetching == null && pkgResponse.fetching != null) {
ctx.resolvedPkgsById[pkgResponse.body.id].fetching = pkgResponse.fetching
ctx.resolvedPkgsById[pkgResponse.body.id].filesIndexFile = pkgResponse.filesIndexFile!
}

if (ctx.dependenciesTree.has(nodeId)) {
Expand All @@ -1420,7 +1420,7 @@ async function resolveDependency (
parentIds: options.parentIds,
installable,
nodeId,
resolvedPackage: ctx.resolvedPackagesByDepPath[depPath],
resolvedPackage: ctx.resolvedPkgsById[pkgResponse.body.id],
})
}
}
Expand Down Expand Up @@ -1458,7 +1458,7 @@ async function resolveDependency (
pkgId: pkgResponse.body.id,
rootDir,
missingPeers: getMissingPeers(pkg),
optional: ctx.resolvedPackagesByDepPath[depPath].optional,
optional: ctx.resolvedPkgsById[pkgResponse.body.id].optional,

// Next fields are actually only needed when isNew = true
installable,
Expand Down
14 changes: 7 additions & 7 deletions pkg-manager/resolve-dependencies/src/resolveDependencyTree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import {
type PkgAddress,
resolveRootDependencies,
type ResolvedPackage,
type ResolvedPackagesByDepPath,
type ResolvedPkgsById,
type ResolutionContext,
} from './resolveDependencies'

Expand Down Expand Up @@ -111,7 +111,7 @@ export interface ResolveDependencyTreeResult {
[pkgId: string]: string
}
resolvedImporters: ResolvedImporters
resolvedPackagesByDepPath: ResolvedPackagesByDepPath
resolvedPkgsById: ResolvedPkgsById
wantedToBeSkippedPackageIds: Set<string>
appliedPatches: Set<string>
time?: Record<string, string>
Expand Down Expand Up @@ -147,7 +147,7 @@ export async function resolveDependencyTree<T> (
preferWorkspacePackages: opts.preferWorkspacePackages,
readPackageHook: opts.hooks.readPackage,
registries: opts.registries,
resolvedPackagesByDepPath: {} as ResolvedPackagesByDepPath,
resolvedPkgsById: {} as ResolvedPkgsById,
resolutionMode: opts.resolutionMode,
skipped: wantedToBeSkippedPackageIds,
storeController: opts.storeController,
Expand Down Expand Up @@ -208,7 +208,7 @@ export async function resolveDependencyTree<T> (
ctx.dependenciesTree.set(pendingNode.nodeId, {
children: () => buildTree(ctx, pendingNode.resolvedPackage.depPath,
pendingNode.parentIds,
ctx.childrenByParentId[pendingNode.resolvedPackage.depPath], pendingNode.depth + 1, pendingNode.installable),
ctx.childrenByParentId[pendingNode.resolvedPackage.id], pendingNode.depth + 1, pendingNode.installable),
depth: pendingNode.depth,
installable: pendingNode.installable,
resolvedPackage: pendingNode.resolvedPackage,
Expand Down Expand Up @@ -251,7 +251,7 @@ export async function resolveDependencyTree<T> (
dependenciesTree: ctx.dependenciesTree,
outdatedDependencies: ctx.outdatedDependencies,
resolvedImporters,
resolvedPackagesByDepPath: ctx.resolvedPackagesByDepPath,
resolvedPkgsById: ctx.resolvedPkgsById,
wantedToBeSkippedPackageIds,
appliedPatches: ctx.appliedPatches,
time,
Expand All @@ -263,7 +263,7 @@ function buildTree (
ctx: {
childrenByParentId: ChildrenByParentId
dependenciesTree: DependenciesTree<ResolvedPackage>
resolvedPackagesByDepPath: ResolvedPackagesByDepPath
resolvedPkgsById: ResolvedPkgsById
skipped: Set<string>
},
parentId: string,
Expand Down Expand Up @@ -294,7 +294,7 @@ function buildTree (
),
depth,
installable,
resolvedPackage: ctx.resolvedPackagesByDepPath[child.id],
resolvedPackage: ctx.resolvedPkgsById[child.id],
})
}
return childrenNodeIds
Expand Down

0 comments on commit bcd4c4e

Please sign in to comment.