Skip to content

Commit

Permalink
fix: auto-install-peers in a workspace
Browse files Browse the repository at this point in the history
wip
  • Loading branch information
zkochan committed Sep 17, 2022
1 parent 2e60abb commit df7acc4
Showing 1 changed file with 18 additions and 6 deletions.
24 changes: 18 additions & 6 deletions packages/resolve-dependencies/src/resolveDependencies.ts
Expand Up @@ -41,6 +41,7 @@ import {
import * as dp from 'dependency-path'
import exists from 'path-exists'
import pDefer from 'p-defer'
import pShare from 'promise-share'
import isEmpty from 'ramda/src/isEmpty'
import fromPairs from 'ramda/src/fromPairs'
import omit from 'ramda/src/omit'
Expand Down Expand Up @@ -157,13 +158,19 @@ export interface ResolutionContext {
virtualStoreDir: string
updateMatching?: (pkgName: string) => boolean
workspacePackages?: WorkspacePackages
missingPeersOfChildrenByPkgId: Record<string, { parentNodeId: string, missingPeers: pDefer.DeferredPromise<MissingPeers> }>
missingPeersOfChildrenByPkgId: Record<string, { parentNodeId: string, missingPeers: MissingPeersOfChildren }>
}

export type MissingPeers = Record<string, string>

export type ResolvedPeers = Record<string, PkgAddress>

interface MissingPeersOfChildren {
resolve: (missingPeers: MissingPeers) => void
reject: (err: Error) => void
get: () => Promise<MissingPeers>
}

export type PkgAddress = {
alias: string
depIsLinked: boolean
Expand All @@ -179,7 +186,7 @@ export type PkgAddress = {
updated: boolean
rootDir: string
missingPeers: MissingPeers
missingPeersOfChildren?: pDefer.DeferredPromise<MissingPeers>
missingPeersOfChildren?: MissingPeersOfChildren
resolvedPeers: ResolvedPeers
publishedAt?: string
} & ({
Expand Down Expand Up @@ -639,7 +646,7 @@ async function resolveDependenciesOfDependency (
resolveDependencyResult,
missingPeersPromise: resolveDependencyResult.missingPeersOfChildren != null
? async (postponedResolutionOpts) => {
const missingPeers = await resolveDependencyResult.missingPeersOfChildren!.promise
const missingPeers = await resolveDependencyResult.missingPeersOfChildren!.get()
const newMissing = {} as MissingPeers
const resolvedPeers = {} as ResolvedPeers
for (const [peerName, peerVersion] of Object.entries(missingPeers)) {
Expand Down Expand Up @@ -690,7 +697,7 @@ async function resolveDependenciesOfDependency (
missingPeers: newMissing,
}
} catch (err) {
resolveDependencyResult.missingPeersOfChildren!.reject(err)
resolveDependencyResult.missingPeersOfChildren!.reject(err as Error)
throw err
}
},
Expand Down Expand Up @@ -1254,14 +1261,19 @@ async function resolveDependency (
const rootDir = pkgResponse.body.resolution.type === 'directory'
? path.resolve(ctx.lockfileDir, pkgResponse.body.resolution['directory'])
: options.prefix
let missingPeersOfChildren!: pDefer.DeferredPromise<MissingPeers> | undefined
let missingPeersOfChildren!: MissingPeersOfChildren | undefined
if (!nodeIdContains(options.parentPkg.nodeId, depPath)) {
if (ctx.missingPeersOfChildrenByPkgId[pkgResponse.body.id]) {
if (!options.parentPkg.nodeId.startsWith(ctx.missingPeersOfChildrenByPkgId[pkgResponse.body.id].parentNodeId)) {
missingPeersOfChildren = ctx.missingPeersOfChildrenByPkgId[pkgResponse.body.id].missingPeers
}
} else {
missingPeersOfChildren = pDefer<MissingPeers>()
const p = pDefer<MissingPeers>()
missingPeersOfChildren = {
resolve: p.resolve,
reject: p.reject,
get: pShare(p.promise),
}
ctx.missingPeersOfChildrenByPkgId[pkgResponse.body.id] = {
parentNodeId: options.parentPkg.nodeId,
missingPeers: missingPeersOfChildren,
Expand Down

0 comments on commit df7acc4

Please sign in to comment.