fix: respect workspace alias syntax in pkg graph (#6928)

close #6922
This commit is contained in:
await-ovo
2023-08-10 06:41:10 +08:00
committed by GitHub
parent 66423df837
commit 41c2b65cff
7 changed files with 66 additions and 5 deletions

View File

@@ -0,0 +1,7 @@
---
"@pnpm/npm-resolver": patch
"@pnpm/workspace.pkgs-graph": patch
"pnpm": patch
---
Respect workspace alias syntax in pkg graph [#6922](https://github.com/pnpm/pnpm/issues/6922)

5
pnpm-lock.yaml generated
View File

@@ -6116,6 +6116,9 @@ importers:
'@pnpm/npm-package-arg':
specifier: ^1.0.0
version: 1.0.0
'@pnpm/npm-resolver':
specifier: workspace:*
version: link:../../resolving/npm-resolver
'@pnpm/resolve-workspace-range':
specifier: workspace:*
version: link:../resolve-workspace-range
@@ -8387,7 +8390,7 @@ packages:
/@types/byline@4.2.33:
resolution: {integrity: sha512-LJYez7wrWcJQQDknqZtrZuExMGP0IXmPl1rOOGDqLbu+H7UNNRfKNuSxCBcQMLH1EfjeWidLedC/hCc5dDfBog==}
dependencies:
'@types/node': 20.4.8
'@types/node': 16.18.39
dev: true
/@types/cacheable-request@6.0.3:

View File

@@ -47,6 +47,7 @@ export class NoMatchingVersionError extends PnpmError {
export {
parsePref,
workspacePrefToNpm,
type PackageMeta,
type PackageMetaCache,
type RegistryPackageSpec,

View File

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

View File

@@ -1,6 +1,7 @@
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 mapValues from 'ramda/src/map'
export interface Manifest {
@@ -58,10 +59,9 @@ export function createPkgGraph<T> (pkgs: Array<Package & T>, opts?: {
const isWorkspaceSpec = rawSpec.startsWith('workspace:')
try {
if (isWorkspaceSpec) {
rawSpec = rawSpec.slice(10)
if (rawSpec === '^' || rawSpec === '~') {
rawSpec = '*'
}
const { fetchSpec, name } = parsePref(workspacePrefToNpm(rawSpec), depName, 'latest', '')!
rawSpec = fetchSpec
depName = name
}
spec = npa.resolve(depName, rawSpec, pkg.dir)
} catch (err: any) { // eslint-disable-line

View File

@@ -717,3 +717,49 @@ test('successfully create a package graph even when a workspace package has no v
},
})
})
test('create package graph respects workspace alias syntax', async () => {
const result = createPkgGraph([
{
dir: BAR1_PATH,
manifest: {
dependencies: {
'foo-alias': 'workspace:foo@*',
},
name: 'bar',
version: '1.0.0',
},
},
{
dir: FOO1_PATH,
manifest: {
name: 'foo',
},
},
])
expect(result.unmatched).toStrictEqual([])
expect(result.graph).toStrictEqual({
[BAR1_PATH]: {
dependencies: [FOO1_PATH],
package: {
dir: BAR1_PATH,
manifest: {
dependencies: {
'foo-alias': 'workspace:foo@*',
},
name: 'bar',
version: '1.0.0',
},
},
},
[FOO1_PATH]: {
dependencies: [],
package: {
dir: FOO1_PATH,
manifest: {
name: 'foo',
},
},
},
})
})

View File

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