|
2 | 2 |
|
3 | 3 | import chalk from 'chalk'
|
4 | 4 | import meow from 'meow'
|
| 5 | +import fetch from 'node-fetch' |
5 | 6 | import ora from 'ora'
|
6 | 7 |
|
7 | 8 | import { outputFlags, validationFlags } from '../../flags/index.js'
|
@@ -47,9 +48,9 @@ export const info = {
|
47 | 48 | * @param {string} description
|
48 | 49 | * @param {readonly string[]} argv
|
49 | 50 | * @param {ImportMeta} importMeta
|
50 |
| - * @returns {void|CommandContext} |
| 51 | + * @returns {Promise<void|CommandContext>} |
51 | 52 | */
|
52 |
| -function setupCommand (name, description, argv, importMeta) { |
| 53 | +async function setupCommand (name, description, argv, importMeta) { |
53 | 54 | const flags = {
|
54 | 55 | ...outputFlags,
|
55 | 56 | ...validationFlags,
|
@@ -92,15 +93,24 @@ function setupCommand (name, description, argv, importMeta) {
|
92 | 93 |
|
93 | 94 | const versionSeparator = rawPkgName.lastIndexOf('@')
|
94 | 95 |
|
| 96 | + let pkgVersion, pkgName |
95 | 97 | if (versionSeparator < 1) {
|
96 |
| - throw new InputError('Need to specify a full package identifier, like eg: [email protected]') |
97 |
| - } |
98 |
| - |
99 |
| - const pkgName = rawPkgName.slice(0, versionSeparator) |
100 |
| - const pkgVersion = rawPkgName.slice(versionSeparator + 1) |
101 |
| - |
102 |
| - if (!pkgVersion) { |
103 |
| - throw new InputError('Need to specify a version, like eg: [email protected]') |
| 98 | + // Get the latest version |
| 99 | + try { |
| 100 | + pkgName = rawPkgName |
| 101 | + const response = await fetch(`https://registry.npmjs.org/${rawPkgName}/latest`) |
| 102 | + /** @type any */ |
| 103 | + const packageDetails = await response.json() || null |
| 104 | + |
| 105 | + if (packageDetails?.version) { |
| 106 | + pkgVersion = packageDetails.version |
| 107 | + } |
| 108 | + } catch (e) { |
| 109 | + throw new Error('Issue fetching package version') |
| 110 | + } |
| 111 | + } else { |
| 112 | + pkgName = rawPkgName.slice(0, versionSeparator) |
| 113 | + pkgVersion = rawPkgName.slice(versionSeparator + 1) |
104 | 114 | }
|
105 | 115 |
|
106 | 116 | return {
|
|
0 commit comments