mirror of
https://github.com/pnpm/pnpm.git
synced 2026-03-31 13:32:18 -04:00
7
.changeset/kind-rivers-happen.md
Normal file
7
.changeset/kind-rivers-happen.md
Normal 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
5
pnpm-lock.yaml
generated
@@ -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:
|
||||
|
||||
@@ -47,6 +47,7 @@ export class NoMatchingVersionError extends PnpmError {
|
||||
|
||||
export {
|
||||
parsePref,
|
||||
workspacePrefToNpm,
|
||||
type PackageMeta,
|
||||
type PackageMetaCache,
|
||||
type RegistryPackageSpec,
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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',
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
@@ -9,6 +9,9 @@
|
||||
"../../__typings__/**/*.d.ts"
|
||||
],
|
||||
"references": [
|
||||
{
|
||||
"path": "../../resolving/npm-resolver"
|
||||
},
|
||||
{
|
||||
"path": "../resolve-workspace-range"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user