#!/usr/bin/env node const This = require('./this'); const { Command } = require('commander'); // Example of subcommands which are implemented as stand-alone executable files. // // When `.command()` is invoked with a description argument, // this tells Commander that you're going to use a stand-alone executable for the subcommand. // // Only `install` and `list` are implemented, see pm-install and pm-list.js class Pm extends This { constructor() { super(); this.version = '0.0.1'; this.description = 'Fake package manager'; // implement commander abilities this.program = new Command().name(this.scriptName).version(this.version).description(this.description); } // override This.discovery() discovery() { const methods = this.listMethods(); return methods; } start() { // Usage const pm = new Pm(); // Output: Methods of ExampleClass: [ 'methodOne', 'methodTwo' ] // Properties of ExampleClass: [ 'propertyOne', 'propertyTwo', 'version' ] and Version: 1.1.0 // pm.discovery(); // this.program // .name(this.scriptName) // .version('0.0.1') // .description('Fake package manager') // .command('install [name]', 'install one or more packages') // .alias('i') // .command('search [query]', 'search with optional query') // .alias('s') // .command('update', 'update installed packages', { // executableFile: 'myUpdateSubCommand', // }) // .command('list', 'list packages installed', { isDefault: false }); //this.program.parse(); // applies logDecorator to this.discovery() and binds it to 'this' to maintain the correct context const logDecoratedDiscovery = this._logDecorator(this.discovery).bind(this); logDecoratedDiscovery(); // Try the following on macOS or Linux: // ./examples/pm // // Try the following: // ./pm // ./pm help install // ./pm install -h // ./pm install foo bar baz // ./pm install foo bar baz --force } } // main const pm = new Pm(); // // applies logDecorator to this.discovery() and binds it to the instance to maintain the correct context // const logDecoratedDiscovery = pm._logDecorator(pm.discovery).bind(pm); // logDecoratedDiscovery(); pm.start();