mirror of
https://github.com/serverless/serverless.git
synced 2026-01-18 14:58:43 +00:00
59 lines
2.0 KiB
JavaScript
59 lines
2.0 KiB
JavaScript
// TODO: Remove with next major release
|
|
|
|
'use strict';
|
|
|
|
const ServerlessError = require('../../serverless-error');
|
|
const cliCommandsSchema = require('../../cli/commands-schema');
|
|
|
|
module.exports = class InteractiveCli {
|
|
constructor(serverless) {
|
|
this.serverless = serverless;
|
|
|
|
this.commands = {
|
|
interactiveCli: {
|
|
...cliCommandsSchema.get(''),
|
|
isHidden: true,
|
|
},
|
|
};
|
|
}
|
|
|
|
asyncInit() {
|
|
/*
|
|
* The majority of setup is done here to allow other plugins to modify
|
|
* this.commands.interactiveCli.options before deciding if the CLI
|
|
* is in interactive mode or not.
|
|
*/
|
|
|
|
if (!process.stdin.isTTY) return;
|
|
|
|
const { processedInput } = this.serverless;
|
|
if (processedInput.commands.length) return;
|
|
const usedOptions = new Set(Object.keys(processedInput.options));
|
|
const supportedOptions = new Set(Object.keys(this.commands.interactiveCli.options));
|
|
// --help-interactive should trigger help which is not handled from scope of this command
|
|
supportedOptions.delete('help-interactive');
|
|
// --help should trigger general help, and this command should not be considered
|
|
supportedOptions.delete('help');
|
|
// Normally this option is handled by main CLI script, still if locally installed Framework
|
|
// is invokved by old version which does not have such handling yet, we need below to prevent
|
|
// interactive CLI to jump in
|
|
supportedOptions.delete('version');
|
|
|
|
for (const opt of supportedOptions) usedOptions.delete(opt);
|
|
|
|
if (usedOptions.size) return;
|
|
|
|
if (this.serverless._isInvokedByGlobalInstallation) {
|
|
throw new ServerlessError(
|
|
"Outdated global installation of 'serverless'. Please upgrade. " +
|
|
"It's needed to ensure desired interactive CLI experience"
|
|
);
|
|
}
|
|
throw new Error(
|
|
'Unexpected interactive CLI fallback (please report at ' +
|
|
'https://github.com/serverless/serverless/issues/new' +
|
|
'?assignees=&labels=&template=bug_report.md'
|
|
);
|
|
}
|
|
};
|