src/services/cli/cliSHNodeRun.js
const { provider } = require('jimple');
const CLICommand = require('../../abstracts/cliCommand');
/**
* This is a private command the shell script executes in order to run a Node target with `nodemon`.
* @extends {CLICommand}
*/
class CLISHNodeRunCommand extends CLICommand {
/**
* Class constructor.
* @param {BuildNodeRunner} buildNodeRunner To actually run a target.
* @param {Targets} targets To get a target information.
*/
constructor(buildNodeRunner, targets) {
super();
/**
* A local reference for the `buildNodeRunner` service.
* @type {BuildNodeRunner}
*/
this.buildNodeRunner = buildNodeRunner;
/**
* A local reference for the `targets` service.
* @type {Targets}
*/
this.targets = targets;
/**
* The instruction needed to trigger the command.
* @type {string}
*/
this.command = 'sh-node-run [target]';
/**
* A description of the command, just to follow the interface as the command won't show up on
* the help interface.
* @type {string}
*/
this.description = 'Run a Node target that wasn\'t bundled';
/**
* Hide the command from the help interface.
* @type {boolean}
*/
this.hidden = true;
/**
* Enable unknown options so other services can customize the run command.
* @type {boolean}
*/
this.allowUnknownOptions = true;
this.addOption(
'inspect',
'-i, --inspect',
'Enables the Node inspector',
false
);
}
/**
* Handle the execution of the command and runs a Node target.
* @param {string} name The name of the target.
* @param {Command} command The executed command (sent by `commander`).
* @param {Object} options The command options.
* @param {boolean} options.inspect Whether or not to enable the Node inspector.
* @return {Nodemon}
*/
handle(name, command, options) {
const target = this.targets.getTarget(name);
return this.buildNodeRunner.runTarget(target, options.inspect);
}
}
/**
* The service provider that once registered on the app container will set an instance of
* `CLISHNodeRunCommand` as the `cliSHNodeRunCommand` service.
* @example
* // Register it on the container
* container.register(cliSHNodeRunCommand);
* // Getting access to the service instance
* const cliSHNodeRunCommand = container.get('cliSHNodeRunCommand');
* @type {Provider}
*/
const cliSHNodeRunCommand = provider((app) => {
app.set('cliSHNodeRunCommand', () => new CLISHNodeRunCommand(
app.get('buildNodeRunner'),
app.get('targets')
));
});
module.exports = {
CLISHNodeRunCommand,
cliSHNodeRunCommand,
};