Skip to content

Commit

Permalink
fix: ordering workspace projects that are in peer dependencies (#7821)
Browse files Browse the repository at this point in the history
close #7813
  • Loading branch information
zkochan committed Mar 24, 2024
1 parent f13d198 commit 61565f8
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 15 deletions.
6 changes: 6 additions & 0 deletions .changeset/loud-teachers-kiss.md
@@ -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 changes: 3 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions workspace/pkgs-graph/package.json
Expand Up @@ -33,6 +33,7 @@
"@pnpm/npm-package-arg": "^1.0.0",
"@pnpm/resolve-workspace-range": "workspace:*",
"@pnpm/npm-resolver": "workspace:*",
"@pnpm/types": "workspace:*",
"ramda": "npm:@pnpm/ramda@0.28.1"
},
"funding": "https://opencollective.com/pnpm",
Expand Down
18 changes: 3 additions & 15 deletions workspace/pkgs-graph/src/index.ts
Expand Up @@ -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
}

Expand Down Expand Up @@ -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,
Expand Down
52 changes: 52 additions & 0 deletions workspace/pkgs-graph/test/index.ts
Expand Up @@ -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([
{
Expand Down
3 changes: 3 additions & 0 deletions workspace/pkgs-graph/tsconfig.json
Expand Up @@ -9,6 +9,9 @@
"../../__typings__/**/*.d.ts"
],
"references": [
{
"path": "../../packages/types"
},
{
"path": "../../resolving/npm-resolver"
},
Expand Down

0 comments on commit 61565f8

Please sign in to comment.