mirror of
https://github.com/pnpm/pnpm.git
synced 2026-01-06 22:18:17 -05:00
fix(plugin-commands-script-runner): allow create scoped package with preferred version (#7055)
close #7053
This commit is contained in:
5
.changeset/plenty-feet-return.md
Normal file
5
.changeset/plenty-feet-return.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@pnpm/plugin-commands-script-runners": patch
|
||||
---
|
||||
|
||||
Allow create scoped package with preferred version. [#7053](https://github.com/pnpm/pnpm/issues/7053)
|
||||
@@ -55,20 +55,29 @@ const CREATE_PREFIX = 'create-'
|
||||
* for create-* packages.
|
||||
*
|
||||
* Example:
|
||||
* - `foo` -> `create-foo`
|
||||
* - `@usr/foo` -> `@usr/create-foo`
|
||||
* - `@usr` -> `@usr/create`
|
||||
* - `foo` -> `create-foo`
|
||||
* - `@usr/foo` -> `@usr/create-foo`
|
||||
* - `@usr` -> `@usr/create`
|
||||
* - `@usr@2.0.0` -> `@usr/create@2.0.0`
|
||||
* - `@usr/foo@2.0.0` -> `@usr/create-foo@2.0.0`
|
||||
* - `@usr@latest` -> `@user/create@latest`
|
||||
*
|
||||
* For more info, see https://docs.npmjs.com/cli/v7/commands/npm-init#description
|
||||
* For more info, see https://docs.npmjs.com/cli/v9/commands/npm-init#description
|
||||
*/
|
||||
function convertToCreateName (packageName: string) {
|
||||
if (packageName.startsWith('@')) {
|
||||
const preferredVersionPosition = packageName.indexOf('@', 1)
|
||||
let preferredVersion = ''
|
||||
if (preferredVersionPosition > -1) {
|
||||
preferredVersion = packageName.substring(preferredVersionPosition)
|
||||
packageName = packageName.substring(0, preferredVersionPosition)
|
||||
}
|
||||
const [scope, scopedPackage = ''] = packageName.split('/')
|
||||
|
||||
if (scopedPackage === '') {
|
||||
return `${scope}/create`
|
||||
return `${scope}/create${preferredVersion}`
|
||||
} else {
|
||||
return `${scope}/${ensureCreatePrefixed(scopedPackage)}`
|
||||
return `${scope}/${ensureCreatePrefixed(scopedPackage)}${preferredVersion}`
|
||||
}
|
||||
} else {
|
||||
return ensureCreatePrefixed(packageName)
|
||||
|
||||
@@ -97,3 +97,43 @@ it('passes the remaining arguments to `dlx`', async () => {
|
||||
}, ['some-app', 'directory/', '--silent'])
|
||||
expect(dlx.handler).toBeCalledWith(expect.anything(), ['create-some-app', 'directory/', '--silent'])
|
||||
})
|
||||
|
||||
it(
|
||||
'appends `create` to package with preferred version`',
|
||||
async () => {
|
||||
await create.handler({
|
||||
...DEFAULT_OPTS,
|
||||
dir: process.cwd(),
|
||||
}, ['foo@2.0.0'])
|
||||
expect(dlx.handler).toBeCalledWith(expect.anything(), ['create-foo@2.0.0'])
|
||||
await create.handler({
|
||||
...DEFAULT_OPTS,
|
||||
dir: process.cwd(),
|
||||
}, ['foo@latest'])
|
||||
expect(dlx.handler).toBeCalledWith(expect.anything(), ['create-foo@latest'])
|
||||
|
||||
await create.handler({
|
||||
...DEFAULT_OPTS,
|
||||
dir: process.cwd(),
|
||||
}, ['@scope@2.0.0'])
|
||||
expect(dlx.handler).toBeCalledWith(expect.anything(), ['@scope/create@2.0.0'])
|
||||
|
||||
await create.handler({
|
||||
...DEFAULT_OPTS,
|
||||
dir: process.cwd(),
|
||||
}, ['@scope@next'])
|
||||
expect(dlx.handler).toBeCalledWith(expect.anything(), ['@scope/create@next'])
|
||||
|
||||
await create.handler({
|
||||
...DEFAULT_OPTS,
|
||||
dir: process.cwd(),
|
||||
}, ['@scope/foo@2.0.0'])
|
||||
expect(dlx.handler).toBeCalledWith(expect.anything(), ['@scope/create-foo@2.0.0'])
|
||||
|
||||
await create.handler({
|
||||
...DEFAULT_OPTS,
|
||||
dir: process.cwd(),
|
||||
}, ['@scope/create-a@2.0.0'])
|
||||
expect(dlx.handler).toBeCalledWith(expect.anything(), ['@scope/create-a@2.0.0'])
|
||||
}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user