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:
GwanSik Kim
2024-08-14 07:17:24 +09:00
committed by GitHub
parent f5a389a031
commit ecbe2ea965
3 changed files with 33 additions and 8 deletions

View 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).

View File

@@ -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:', '')
}

View File

@@ -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',
},
})
})