From a5bde0aa284108ca8142def28772b6b94b0034f8 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Sat, 3 Jul 2021 14:59:09 +0300 Subject: [PATCH] feat(find-workspace-packages): export findWorkspacePackagesNoCheck() --- .changeset/hot-melons-rule.md | 5 +++++ packages/find-workspace-packages/src/index.ts | 15 ++++++++++----- .../test/__fixtures__/bad-engine/pkg/package.json | 7 +++++++ .../__fixtures__/bad-engine/pnpm-workspace.yaml | 2 ++ packages/find-workspace-packages/test/index.ts | 9 ++++++++- 5 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 .changeset/hot-melons-rule.md create mode 100644 packages/find-workspace-packages/test/__fixtures__/bad-engine/pkg/package.json create mode 100644 packages/find-workspace-packages/test/__fixtures__/bad-engine/pnpm-workspace.yaml diff --git a/.changeset/hot-melons-rule.md b/.changeset/hot-melons-rule.md new file mode 100644 index 0000000000..dc99b703dd --- /dev/null +++ b/.changeset/hot-melons-rule.md @@ -0,0 +1,5 @@ +--- +"@pnpm/find-workspace-packages": minor +--- + +Export findWorkspacePackagesNoCheck() for finding packages and skipping engine checks. diff --git a/packages/find-workspace-packages/src/index.ts b/packages/find-workspace-packages/src/index.ts index 20ae52d334..b32d7f2fcf 100644 --- a/packages/find-workspace-packages/src/index.ts +++ b/packages/find-workspace-packages/src/index.ts @@ -14,6 +14,15 @@ export default async ( patterns?: string[] } ) => { + const pkgs = await findWorkspacePackagesNoCheck(workspaceRoot, opts) + for (const pkg of pkgs) { + packageIsInstallable(pkg.dir, pkg.manifest, opts ?? {}) + } + + return pkgs +} + +export async function findWorkspacePackagesNoCheck (workspaceRoot: string, opts?: { patterns?: string[] }): Promise { let patterns = opts?.patterns if (patterns == null) { const packagesManifest = await requirePackagesManifest(workspaceRoot) @@ -28,11 +37,7 @@ export default async ( patterns, }) pkgs.sort((pkg1: {dir: string}, pkg2: {dir: string}) => pkg1.dir.localeCompare(pkg2.dir)) - for (const pkg of pkgs) { - packageIsInstallable(pkg.dir, pkg.manifest, opts ?? {}) - } - - return pkgs as Project[] + return pkgs } async function requirePackagesManifest (dir: string): Promise<{packages?: string[]} | null> { diff --git a/packages/find-workspace-packages/test/__fixtures__/bad-engine/pkg/package.json b/packages/find-workspace-packages/test/__fixtures__/bad-engine/pkg/package.json new file mode 100644 index 0000000000..1899219886 --- /dev/null +++ b/packages/find-workspace-packages/test/__fixtures__/bad-engine/pkg/package.json @@ -0,0 +1,7 @@ +{ + "name": "pkg", + "version": "1.0.0", + "engines": { + "pnpm": "10000.0.0" + } +} diff --git a/packages/find-workspace-packages/test/__fixtures__/bad-engine/pnpm-workspace.yaml b/packages/find-workspace-packages/test/__fixtures__/bad-engine/pnpm-workspace.yaml new file mode 100644 index 0000000000..64f9f110dc --- /dev/null +++ b/packages/find-workspace-packages/test/__fixtures__/bad-engine/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - pkg diff --git a/packages/find-workspace-packages/test/index.ts b/packages/find-workspace-packages/test/index.ts index 8d74aba3b3..2db0f3f7e0 100644 --- a/packages/find-workspace-packages/test/index.ts +++ b/packages/find-workspace-packages/test/index.ts @@ -1,4 +1,5 @@ -import { arrayOfWorkspacePackagesToMap } from '@pnpm/find-workspace-packages' +import path from 'path' +import { findWorkspacePackagesNoCheck, arrayOfWorkspacePackagesToMap } from '@pnpm/find-workspace-packages' // This is supported for compatibility with Yarn's implementation // see https://github.com/pnpm/pnpm/issues/2648 @@ -14,3 +15,9 @@ test('arrayOfWorkspacePackagesToMap() treats private packages with no version as }, }) }) + +test('findWorkspacePackagesNoCheck() skips engine checks', async () => { + const pkgs = await findWorkspacePackagesNoCheck(path.join(__dirname, '__fixtures__/bad-engine')) + expect(pkgs.length).toBe(1) + expect(pkgs[0].manifest.name).toBe('pkg') +})