From 3094be0cf06f916d8cf180036433677ecd73e013 Mon Sep 17 00:00:00 2001 From: Mariusz Nowak Date: Tue, 28 Sep 2021 14:04:40 +0200 Subject: [PATCH] refactor(CLI): Modern logs for `plugin uninstall` command --- commands/plugin-uninstall.js | 28 ++++++++++++++++++++++------ lib/plugins/plugin/uninstall.js | 30 ++++++++++++++++++++++-------- 2 files changed, 44 insertions(+), 14 deletions(-) diff --git a/commands/plugin-uninstall.js b/commands/plugin-uninstall.js index 95c4afb9fa5..6bd8fbf858b 100644 --- a/commands/plugin-uninstall.js +++ b/commands/plugin-uninstall.js @@ -8,7 +8,7 @@ const _ = require('lodash'); const isPlainObject = require('type/plain-object/is'); const yaml = require('js-yaml'); const cloudformationSchema = require('@serverless/utils/cloudformation-schema'); -const log = require('@serverless/utils/log'); +const { legacy, log, progress, style } = require('@serverless/utils/log'); const yamlAstParser = require('../lib/utils/yamlAstParser'); const npmCommandDeferred = require('../lib/utils/npm-command-deferred'); const { @@ -17,7 +17,10 @@ const { validate, } = require('../lib/commands/plugin-management'); +const mainProgress = progress.get('main'); + module.exports = async ({ configuration, serviceDir, configurationFilename, options }) => { + const commandRunStartTime = Date.now(); validate({ serviceDir }); const pluginInfo = getPluginInfo(options.name); @@ -25,14 +28,20 @@ module.exports = async ({ configuration, serviceDir, configurationFilename, opti const configurationFilePath = getServerlessFilePath({ serviceDir, configurationFilename }); const context = { configuration, serviceDir, configurationFilePath, pluginName }; + mainProgress.notice(`Uninstalling plugin "${pluginName}"`, { isMainEvent: true }); await uninstallPlugin(context); await removePluginFromServerlessFile(context); - log(`Successfully uninstalled "${pluginName}"`); + legacy.log(`Successfully uninstalled "${pluginName}"`); + log.notice.success( + `Plugin "${pluginName}" uninstalled ${style.aside( + `(${Math.floor((Date.now() - commandRunStartTime) / 1000)}s)` + )}` + ); }; const uninstallPlugin = async ({ serviceDir, pluginName }) => { - log(`Uninstalling plugin "${pluginName}" (this might take a few seconds...)`); + legacy.log(`Uninstalling plugin "${pluginName}" (this might take a few seconds...)`); await npmUninstall(pluginName, { serviceDir }); }; @@ -98,13 +107,20 @@ const npmUninstall = async (name, { serviceDir }) => { stdio: 'pipe', }); } catch (error) { - process.stdout.write(error.stderrBuffer); + legacy.write(error.stderrBuffer); + log.error(String(error.stderrBuffer)); throw error; } }; -const requestManualUpdate = (configurationFilePath) => - log(` +const requestManualUpdate = (configurationFilePath) => { + legacy.log(` Can't automatically remove plugin from "${path.basename(configurationFilePath)}" file. Please do it manually. `); + log.notice.skip( + `Can't automatically remove plugin from "${path.basename( + configurationFilePath + )}" file. Please make it manually.` + ); +}; diff --git a/lib/plugins/plugin/uninstall.js b/lib/plugins/plugin/uninstall.js index ec314ccd054..2622718ed62 100644 --- a/lib/plugins/plugin/uninstall.js +++ b/lib/plugins/plugin/uninstall.js @@ -11,16 +11,24 @@ const _ = require('lodash'); const isPlainObject = require('type/plain-object/is'); const yaml = require('js-yaml'); const cloudformationSchema = require('@serverless/utils/cloudformation-schema'); -const log = require('@serverless/utils/log'); +const { legacy, log, progress, style } = require('@serverless/utils/log'); const cliCommandsSchema = require('../../cli/commands-schema'); const yamlAstParser = require('../../utils/yamlAstParser'); const pluginUtils = require('./lib/utils'); -const requestManualUpdate = (serverlessFilePath) => - log(` +const mainProgress = progress.get('main'); + +const requestManualUpdate = (serverlessFilePath) => { + legacy.log(` Can't automatically remove plugin from "${path.basename(serverlessFilePath)}" file. Please make it manually. `); + log.notice.skip( + `Can't automatically remove plugin from "${path.basename( + serverlessFilePath + )}" file. Please make it manually.` + ); +}; class PluginUninstall { constructor(serverless, options) { @@ -54,25 +62,31 @@ class PluginUninstall { .then((plugins) => { const plugin = plugins.find((item) => item.name === this.options.pluginName); if (!plugin) { - this.serverless.cli.log( - 'Plugin not found in serverless registry, continuing to uninstall' - ); + legacy.log('Plugin not found in serverless registry, continuing to uninstall'); } return BbPromise.bind(this) .then(this.uninstallPeerDependencies) .then(this.pluginUninstall) .then(this.removePluginFromServerlessFile) .then(() => { - this.serverless.cli.log(`Successfully uninstalled "${this.options.pluginName}"`); + legacy.log(`Successfully uninstalled "${this.options.pluginName}"`); + log.notice.success( + `Plugin "${this.options.pluginName}" uninstalled ${style.aside( + `(${Math.floor( + (Date.now() - this.serverless.pluginManager.commandRunStartTime) / 1000 + )}s)` + )}` + ); return BbPromise.resolve(); }); }); } async pluginUninstall() { - this.serverless.cli.log( + legacy.log( `Uninstalling plugin "${this.options.pluginName}" (this might take a few seconds...)` ); + mainProgress.notice(`Uninstalling plugin "${this.options.pluginName}"`, { isMainEvent: true }); return this.npmUninstall(this.options.pluginName); }