fix: ordering workspace projects that are in peer dependencies (#7821)

close #7813
This commit is contained in:
Zoltan Kochan
2024-03-24 11:35:22 +01:00
committed by GitHub
parent de06d05f2d
commit ca2be033a7
6 changed files with 68 additions and 15 deletions

View File

@@ -0,0 +1,6 @@
---
"@pnpm/workspace.pkgs-graph": patch
"pnpm": patch
---
When sorting packages in a workspace, take into account workspace dependencies specified as `peerDependencies` [#7813](https://github.com/pnpm/pnpm/issues/7813).

3
pnpm-lock.yaml generated
View File

@@ -6482,6 +6482,9 @@ importers:
'@pnpm/resolve-workspace-range':
specifier: workspace:*
version: link:../resolve-workspace-range
'@pnpm/types':
specifier: workspace:*
version: link:../../packages/types
ramda:
specifier: npm:@pnpm/ramda@0.28.1
version: '@pnpm/ramda@0.28.1'

View File

@@ -33,6 +33,7 @@
"@pnpm/npm-package-arg": "^1.0.0",
"@pnpm/npm-resolver": "workspace:*",
"@pnpm/resolve-workspace-range": "workspace:*",
"@pnpm/types": "workspace:*",
"ramda": "npm:@pnpm/ramda@0.28.1"
},
"funding": "https://opencollective.com/pnpm",

View File

@@ -2,24 +2,11 @@ import path from 'path'
import npa from '@pnpm/npm-package-arg'
import { resolveWorkspaceRange } from '@pnpm/resolve-workspace-range'
import { parsePref, workspacePrefToNpm } from '@pnpm/npm-resolver'
import { type BaseManifest } from '@pnpm/types'
import mapValues from 'ramda/src/map'
export interface Manifest {
name?: string
version?: string
dependencies?: {
[name: string]: string
}
devDependencies?: {
[name: string]: string
}
optionalDependencies?: {
[name: string]: string
}
}
export interface Package {
manifest: Manifest
manifest: BaseManifest
dir: string
}
@@ -48,6 +35,7 @@ export function createPkgGraph<T> (pkgs: Array<Package & T>, opts?: {
function createNode (pkg: Package): string[] {
const dependencies = {
...pkg.manifest.peerDependencies,
...(!opts?.ignoreDevDeps && pkg.manifest.devDependencies),
...pkg.manifest.optionalDependencies,
...pkg.manifest.dependencies,

View File

@@ -112,6 +112,58 @@ test('create package graph', () => {
})
})
test('create package graph using peer dependencies', () => {
const result = createPkgGraph([
{
dir: BAR1_PATH,
manifest: {
name: 'bar',
version: '1.0.0',
peerDependencies: {
foo: '^1.0.0',
'is-positive': '1.0.0',
},
},
},
{
dir: FOO1_PATH,
manifest: {
name: 'foo',
version: '1.0.0',
},
},
])
expect(result.unmatched).toStrictEqual([])
expect(result.graph).toStrictEqual({
[BAR1_PATH]: {
dependencies: [FOO1_PATH],
package: {
dir: BAR1_PATH,
manifest: {
name: 'bar',
version: '1.0.0',
peerDependencies: {
foo: '^1.0.0',
'is-positive': '1.0.0',
},
},
},
},
[FOO1_PATH]: {
dependencies: [],
package: {
dir: FOO1_PATH,
manifest: {
name: 'foo',
version: '1.0.0',
},
},
},
})
})
test('create package graph for local directory dependencies', () => {
const result = createPkgGraph([
{

View File

@@ -9,6 +9,9 @@
"../../__typings__/**/*.d.ts"
],
"references": [
{
"path": "../../packages/types"
},
{
"path": "../../resolving/npm-resolver"
},