fix(plugin-commands-script-runner): allow create scoped package with preferred version (#7055)

close #7053
This commit is contained in:
await-ovo
2023-09-05 23:20:19 +08:00
committed by GitHub
parent 548768e092
commit b962c27ae6
3 changed files with 60 additions and 6 deletions

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

View File

@@ -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)

View File

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