mirror of
https://github.com/pnpm/pnpm.git
synced 2026-05-25 00:57:38 -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
|
return depSpec
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dependencies with bare "*", "^", "~",">=",">","<=",< versions
|
// Dependencies with bare "*", "^", "~",">=",">","<=", "<", version
|
||||||
const workspaceSemverRegex = /workspace:([\^~*]|>=|>|<=|<)/
|
const workspaceSemverRegex = /workspace:([\^~*]|>=|>|<=|<)?((\d+|[xX]|\*)(\.(\d+|[xX]|\*)){0,2})?/
|
||||||
const versionAliasSpecParts = workspaceSemverRegex.exec(depSpec)
|
const versionAliasSpecParts = workspaceSemverRegex.exec(depSpec)
|
||||||
|
|
||||||
if (versionAliasSpecParts != null) {
|
if (versionAliasSpecParts != null) {
|
||||||
|
const [, semverRangGroup = '', version] = versionAliasSpecParts
|
||||||
|
|
||||||
|
if (version) {
|
||||||
|
return depSpec.replace('workspace:', '')
|
||||||
|
}
|
||||||
|
|
||||||
modulesDir = modulesDir ?? path.join(dir, 'node_modules')
|
modulesDir = modulesDir ?? path.join(dir, 'node_modules')
|
||||||
const manifest = await resolveManifest(depName, modulesDir)
|
const manifest = await resolveManifest(depName, modulesDir)
|
||||||
|
|
||||||
const [,semverRangGroup] = versionAliasSpecParts
|
|
||||||
|
|
||||||
const semverRangeToken = semverRangGroup !== '*' ? semverRangGroup : ''
|
const semverRangeToken = semverRangGroup !== '*' ? semverRangGroup : ''
|
||||||
|
|
||||||
return depSpec.replace(workspaceSemverRegex, `${semverRangeToken}${manifest.version}`)
|
return depSpec.replace(workspaceSemverRegex, `${semverRangeToken}${manifest.version}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
depSpec = depSpec.replace('workspace:', '')
|
return depSpec.replace('workspace:', '')
|
||||||
|
|
||||||
return depSpec
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,10 +95,15 @@ test('workspace deps are replaced', async () => {
|
|||||||
bar: 'workspace:@foo/bar@*',
|
bar: 'workspace:@foo/bar@*',
|
||||||
baz: 'workspace:baz@^',
|
baz: 'workspace:baz@^',
|
||||||
foo: 'workspace:*',
|
foo: 'workspace:*',
|
||||||
|
qux: 'workspace:^',
|
||||||
|
waldo: 'workspace:^',
|
||||||
},
|
},
|
||||||
peerDependencies: {
|
peerDependencies: {
|
||||||
foo: 'workspace:>= || ^3.9.0',
|
foo: 'workspace:>= || ^3.9.0',
|
||||||
baz: '^1.0.0 || workspace:>',
|
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',
|
name: 'foo',
|
||||||
version: '4.5.6',
|
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/**'] })
|
writeYamlFile('pnpm-workspace.yaml', { packages: ['**', '!store/**'] })
|
||||||
@@ -131,10 +144,15 @@ test('workspace deps are replaced', async () => {
|
|||||||
bar: 'npm:@foo/bar@3.2.1',
|
bar: 'npm:@foo/bar@3.2.1',
|
||||||
baz: '^1.2.3',
|
baz: '^1.2.3',
|
||||||
foo: '4.5.6',
|
foo: '4.5.6',
|
||||||
|
qux: '^1.0.0-alpha-a.b-c-something+build.1-aef.1-its-okay',
|
||||||
|
waldo: '^1.9.0',
|
||||||
},
|
},
|
||||||
peerDependencies: {
|
peerDependencies: {
|
||||||
baz: '^1.0.0 || >1.2.3',
|
baz: '^1.0.0 || >1.2.3',
|
||||||
foo: '>=4.5.6 || ^3.9.0',
|
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