From 31e01d9a93b81b1bb94d3f6cc8a49387cd4dbd63 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Fri, 20 Aug 2021 16:28:34 +0300 Subject: [PATCH] fix: installing optional dependencies --- .changeset/friendly-poems-yawn.md | 5 +++ .changeset/odd-clocks-enjoy.md | 5 +++ .../package-requester/src/packageRequester.ts | 1 + .../src/resolveDependencies.ts | 40 ++++++++++++------- 4 files changed, 36 insertions(+), 15 deletions(-) create mode 100644 .changeset/friendly-poems-yawn.md create mode 100644 .changeset/odd-clocks-enjoy.md diff --git a/.changeset/friendly-poems-yawn.md b/.changeset/friendly-poems-yawn.md new file mode 100644 index 0000000000..548ee42fcd --- /dev/null +++ b/.changeset/friendly-poems-yawn.md @@ -0,0 +1,5 @@ +--- +"@pnpm/package-requester": patch +--- + +isInstallable should be always returned by `packageRequester()`. diff --git a/.changeset/odd-clocks-enjoy.md b/.changeset/odd-clocks-enjoy.md new file mode 100644 index 0000000000..0a584b1e26 --- /dev/null +++ b/.changeset/odd-clocks-enjoy.md @@ -0,0 +1,5 @@ +--- +"@pnpm/resolve-dependencies": patch +--- + +Fetch a package if it is not installable as optional but also exists as not optional. diff --git a/packages/package-requester/src/packageRequester.ts b/packages/package-requester/src/packageRequester.ts index aeed5a42d1..eb9f98ce5b 100644 --- a/packages/package-requester/src/packageRequester.ts +++ b/packages/package-requester/src/packageRequester.ts @@ -248,6 +248,7 @@ async function resolveAndFetch ( body: { id, isLocal: false as const, + isInstallable: isInstallable ?? undefined, latest, manifest, normalizedPref, diff --git a/packages/resolve-dependencies/src/resolveDependencies.ts b/packages/resolve-dependencies/src/resolveDependencies.ts index 26d576f2f9..48082a95e3 100644 --- a/packages/resolve-dependencies/src/resolveDependencies.ts +++ b/packages/resolve-dependencies/src/resolveDependencies.ts @@ -764,21 +764,7 @@ async function resolveDependency ( requester: ctx.lockfileDir, status: 'resolved', }) - if (pkgResponse.files != null) { - pkgResponse.files() - .then((fetchResult: PackageFilesResponse) => { - progressLogger.debug({ - packageId: pkgResponse.body.id, - requester: ctx.lockfileDir, - status: fetchResult.fromStore - ? 'found_in_store' - : 'fetched', - }) - }) - .catch(() => { - // Ignore - }) - } + logFetchResult(pkgResponse, ctx.lockfileDir) ctx.resolvedPackagesByDepPath[depPath] = getResolvedPackage({ dependencyLockfile: currentPkg.dependencyLockfile, @@ -795,6 +781,13 @@ async function resolveDependency ( 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 && wantedDependency.optional + if (ctx.resolvedPackagesByDepPath[depPath].fetchingFiles == null && pkgResponse.files != null) { + logFetchResult(pkgResponse, ctx.lockfileDir) + ctx.resolvedPackagesByDepPath[depPath].fetchingFiles = pkgResponse.files + ctx.resolvedPackagesByDepPath[depPath].filesIndexFile = pkgResponse.filesIndexFile! + ctx.resolvedPackagesByDepPath[depPath].finishing = pkgResponse.finishing! + ctx.resolvedPackagesByDepPath[depPath].fetchingBundledManifest = pkgResponse.bundledManifest! + } if (ctx.dependenciesTree[nodeId]) { ctx.dependenciesTree[nodeId].depth = Math.min(ctx.dependenciesTree[nodeId].depth, options.currentDepth) @@ -826,6 +819,23 @@ async function resolveDependency ( } } +function logFetchResult (pkgResponse: PackageResponse, lockfileDir: string) { + if (pkgResponse.files == null) return + pkgResponse.files() + .then((fetchResult: PackageFilesResponse) => { + progressLogger.debug({ + packageId: pkgResponse.body.id, + requester: lockfileDir, + status: fetchResult.fromStore + ? 'found_in_store' + : 'fetched', + }) + }) + .catch(() => { + // Ignore + }) +} + function pkgIsLeaf (pkg: PackageManifest) { return isEmpty(pkg.dependencies ?? {}) && isEmpty(pkg.optionalDependencies ?? {}) &&