|
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