Skip to content

Commit 2c887dd

Browse files
committed
fix: pnpm bug with nesting workspaces
1 parent 8154103 commit 2c887dd

File tree

1 file changed

+19
-12
lines changed

1 file changed

+19
-12
lines changed

src/pkg-manager/managers/pnpm.pkg-manager.ts

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,44 @@
11
import { parseJson } from '@neodx/fs'
2-
import { concurrently, isTruthy, isTypeOfString } from '@neodx/std'
2+
import {
3+
compact,
4+
concurrently,
5+
isTruthy,
6+
isTypeOfString
7+
} from '@neodx/std'
38
import { cpus } from 'node:os'
49
import { pathEqual } from 'path-equal'
510
import { AbstractPackageManager } from '@/pkg-manager/managers/abstract.pkg-manager'
611
import { PackageManager, ROOT_PROJECT } from '@/pkg-manager/pkg-manager.consts'
712
import type { PackageManagerFactoryOptions } from '@/pkg-manager/pkg-manager.factory'
813
import type { RunCommandOptions } from '@/pkg-manager/pkg-manager.types'
914

10-
type PnpmWorkspaceMeta = Array<{
15+
interface PnpmWorkspaceMeta {
1116
name: string
1217
version?: string
1318
path: string
1419
private?: boolean
15-
}>
20+
}
1621

1722
export class PnpmPackageManager extends AbstractPackageManager {
1823
constructor(opts: PackageManagerFactoryOptions) {
1924
super(opts, PackageManager.PNPM)
2025
}
2126

2227
public async computeWorkspaceProjects(): Promise<void> {
23-
const output = await this.exec('list --recursive --depth -1 --json')
24-
const workspaces = parseJson<PnpmWorkspaceMeta>(output)
25-
26-
if (!Array.isArray(workspaces)) {
27-
return this.updateProjects()
28-
}
28+
const rawOutput = await this.exec('list --recursive --depth -1 --json')
29+
const serializedMeta = compact(rawOutput.split(']')).map((s) =>
30+
s.concat(']')
31+
)
2932

3033
const pnpmWorkspaces = await concurrently(
31-
workspaces,
32-
async ({ name, path }) => {
34+
serializedMeta,
35+
async (meta) => {
36+
const [workspaceMeta] = parseJson<[PnpmWorkspaceMeta]>(meta)
37+
const { path, name } = workspaceMeta
38+
3339
const isRoot = pathEqual(path, process.cwd())
34-
if (isRoot) return null
40+
41+
if (!isRoot) return
3542

3643
const { targets, type } =
3744
await this.resolver.resolveProjectTargets(path)

0 commit comments

Comments
 (0)