Skip to content

Commit

Permalink
fix(plugin-commands-script-runner): allow create scoped package with …
Browse files Browse the repository at this point in the history
…preferred version (#7055)

close #7053
  • Loading branch information
await-ovo committed Sep 5, 2023
1 parent 548768e commit b962c27
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 6 deletions.
5 changes: 5 additions & 0 deletions .changeset/plenty-feet-return.md
Original file line number Diff line number Diff line change
@@ -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)
21 changes: 15 additions & 6 deletions exec/plugin-commands-script-runners/src/create.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
40 changes: 40 additions & 0 deletions exec/plugin-commands-script-runners/test/create.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'])
}
)

0 comments on commit b962c27

Please sign in to comment.