|
1 | 1 | 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' |
3 | 8 | import { cpus } from 'node:os' |
4 | 9 | import { pathEqual } from 'path-equal' |
5 | 10 | import { AbstractPackageManager } from '@/pkg-manager/managers/abstract.pkg-manager' |
6 | 11 | import { PackageManager, ROOT_PROJECT } from '@/pkg-manager/pkg-manager.consts' |
7 | 12 | import type { PackageManagerFactoryOptions } from '@/pkg-manager/pkg-manager.factory' |
8 | 13 | import type { RunCommandOptions } from '@/pkg-manager/pkg-manager.types' |
9 | 14 |
|
10 | | -type PnpmWorkspaceMeta = Array<{ |
| 15 | +interface PnpmWorkspaceMeta { |
11 | 16 | name: string |
12 | 17 | version?: string |
13 | 18 | path: string |
14 | 19 | private?: boolean |
15 | | -}> |
| 20 | +} |
16 | 21 |
|
17 | 22 | export class PnpmPackageManager extends AbstractPackageManager { |
18 | 23 | constructor(opts: PackageManagerFactoryOptions) { |
19 | 24 | super(opts, PackageManager.PNPM) |
20 | 25 | } |
21 | 26 |
|
22 | 27 | 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 | + ) |
29 | 32 |
|
30 | 33 | 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 | + |
33 | 39 | const isRoot = pathEqual(path, process.cwd()) |
34 | | - if (isRoot) return null |
| 40 | + |
| 41 | + if (!isRoot) return |
35 | 42 |
|
36 | 43 | const { targets, type } = |
37 | 44 | await this.resolver.resolveProjectTargets(path) |
|
0 commit comments