mirror of
https://github.com/pnpm/pnpm.git
synced 2026-04-10 18:18:56 -04:00
fix: ordering workspace projects that are in peer dependencies (#7821)
close #7813
This commit is contained in:
6
.changeset/loud-teachers-kiss.md
Normal file
6
.changeset/loud-teachers-kiss.md
Normal 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
3
pnpm-lock.yaml
generated
@@ -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'
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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([
|
||||
{
|
||||
|
||||
@@ -9,6 +9,9 @@
|
||||
"../../__typings__/**/*.d.ts"
|
||||
],
|
||||
"references": [
|
||||
{
|
||||
"path": "../../packages/types"
|
||||
},
|
||||
{
|
||||
"path": "../../resolving/npm-resolver"
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user