mirror of
https://github.com/pnpm/pnpm.git
synced 2026-05-22 23:56:31 -04:00
fix(exportable-manifest): replace semver in peerDependency with workspace protocol (#8383)
close: #8355 Co-authored-by: 장지훈 <32415680+WhiteKiwi@users.noreply.github.com> * Update smooth-ravens-wave.md --------- Co-authored-by: 장지훈 <32415680+WhiteKiwi@users.noreply.github.com> Co-authored-by: Zoltan Kochan <z@kochan.io>
This commit is contained in:
6
.changeset/smooth-ravens-wave.md
Normal file
6
.changeset/smooth-ravens-wave.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
"@pnpm/exportable-manifest": patch
|
||||
pnpm: patch
|
||||
---
|
||||
|
||||
Replace semver in peerDependency with workspace protocol [#8355](https://github.com/pnpm/pnpm/issues/8355).
|
||||
@@ -159,22 +159,23 @@ async function replaceWorkspaceProtocolPeerDependency (depName: string, depSpec:
|
||||
return depSpec
|
||||
}
|
||||
|
||||
// Dependencies with bare "*", "^", "~",">=",">","<=",< versions
|
||||
const workspaceSemverRegex = /workspace:([\^~*]|>=|>|<=|<)/
|
||||
// Dependencies with bare "*", "^", "~",">=",">","<=", "<", version
|
||||
const workspaceSemverRegex = /workspace:([\^~*]|>=|>|<=|<)?((\d+|[xX]|\*)(\.(\d+|[xX]|\*)){0,2})?/
|
||||
const versionAliasSpecParts = workspaceSemverRegex.exec(depSpec)
|
||||
|
||||
if (versionAliasSpecParts != null) {
|
||||
const [, semverRangGroup = '', version] = versionAliasSpecParts
|
||||
|
||||
if (version) {
|
||||
return depSpec.replace('workspace:', '')
|
||||
}
|
||||
|
||||
modulesDir = modulesDir ?? path.join(dir, 'node_modules')
|
||||
const manifest = await resolveManifest(depName, modulesDir)
|
||||
|
||||
const [,semverRangGroup] = versionAliasSpecParts
|
||||
|
||||
const semverRangeToken = semverRangGroup !== '*' ? semverRangGroup : ''
|
||||
|
||||
return depSpec.replace(workspaceSemverRegex, `${semverRangeToken}${manifest.version}`)
|
||||
}
|
||||
|
||||
depSpec = depSpec.replace('workspace:', '')
|
||||
|
||||
return depSpec
|
||||
return depSpec.replace('workspace:', '')
|
||||
}
|
||||
|
||||
@@ -95,10 +95,15 @@ test('workspace deps are replaced', async () => {
|
||||
bar: 'workspace:@foo/bar@*',
|
||||
baz: 'workspace:baz@^',
|
||||
foo: 'workspace:*',
|
||||
qux: 'workspace:^',
|
||||
waldo: 'workspace:^',
|
||||
},
|
||||
peerDependencies: {
|
||||
foo: 'workspace:>= || ^3.9.0',
|
||||
baz: '^1.0.0 || workspace:>',
|
||||
bar: 'workspace:^3.0.0',
|
||||
qux: 'workspace:^',
|
||||
waldo: 'workspace:^1.x',
|
||||
},
|
||||
}
|
||||
|
||||
@@ -116,6 +121,14 @@ test('workspace deps are replaced', async () => {
|
||||
name: 'foo',
|
||||
version: '4.5.6',
|
||||
},
|
||||
{
|
||||
name: 'qux',
|
||||
version: '1.0.0-alpha-a.b-c-something+build.1-aef.1-its-okay',
|
||||
},
|
||||
{
|
||||
name: 'waldo',
|
||||
version: '1.9.0',
|
||||
},
|
||||
])
|
||||
|
||||
writeYamlFile('pnpm-workspace.yaml', { packages: ['**', '!store/**'] })
|
||||
@@ -131,10 +144,15 @@ test('workspace deps are replaced', async () => {
|
||||
bar: 'npm:@foo/bar@3.2.1',
|
||||
baz: '^1.2.3',
|
||||
foo: '4.5.6',
|
||||
qux: '^1.0.0-alpha-a.b-c-something+build.1-aef.1-its-okay',
|
||||
waldo: '^1.9.0',
|
||||
},
|
||||
peerDependencies: {
|
||||
baz: '^1.0.0 || >1.2.3',
|
||||
foo: '>=4.5.6 || ^3.9.0',
|
||||
bar: '^3.0.0',
|
||||
qux: '^1.0.0-alpha-a.b-c-something+build.1-aef.1-its-okay',
|
||||
waldo: '^1.x',
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user