+import { outputJSON, pathExists } from 'fs-extra'
+import { join } from 'path'
import { execShell } from '../../helpers/core-utils'
-import { logger } from '../../helpers/logger'
import { isNpmPluginNameValid, isPluginVersionValid } from '../../helpers/custom-validators/plugins'
+import { logger } from '../../helpers/logger'
import { CONFIG } from '../../initializers/config'
-import { outputJSON, pathExists } from 'fs-extra'
-import { join } from 'path'
+import { getLatestPluginVersion } from './plugin-index'
-async function installNpmPlugin (name: string, version?: string) {
+async function installNpmPlugin (npmName: string, versionArg?: string) {
// Security check
- checkNpmPluginNameOrThrow(name)
- if (version) checkPluginVersionOrThrow(version)
+ checkNpmPluginNameOrThrow(npmName)
+ if (versionArg) checkPluginVersionOrThrow(versionArg)
- let toInstall = name
+ const version = versionArg || await getLatestPluginVersion(npmName)
+
+ let toInstall = npmName
if (version) toInstall += `@${version}`
- await execYarn('add ' + toInstall)
+ const { stdout } = await execYarn('add ' + toInstall)
+
+ logger.debug('Added a yarn package.', { yarnStdout: stdout })
}
async function installNpmPluginFromDisk (path: string) {
await outputJSON(pluginPackageJSON, {})
}
- await execShell(`yarn ${command}`, { cwd: pluginDirectory })
+ return execShell(`yarn ${command}`, { cwd: pluginDirectory })
} catch (result) {
logger.error('Cannot exec yarn.', { command, err: result.err, stderr: result.stderr })