Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
e257a38688 | |||
19a5082381 | |||
00f5539e6b | |||
cacb0221f1 | |||
b98b90163d | |||
daa6312aea | |||
7f2dab091f | |||
dd293875c4 | |||
120eca42ac | |||
fc289616f6 | |||
e7c1c1c45b | |||
f33c759fa8 | |||
1185df362b | |||
36de8e11f0 | |||
74ffb3aa87 | |||
96a6d01720 | |||
7833bd0be8 |
33
README.md
33
README.md
@ -26,16 +26,20 @@ this plugin tries to establish some logic in which CLI tools work.
|
||||
take the following commandline input:
|
||||
|
||||
```
|
||||
mytool function argument1 argument2 --option1 -o2 option2Value
|
||||
mytool command argument1 argument2 --option1 -o2 option2Value
|
||||
```
|
||||
|
||||
* 'mytool' obviously is the tool (like git)
|
||||
* function is the main thing the tool shall do (like commit)
|
||||
* argument1 and argument2 are arguments
|
||||
* option1 is a longform option you can add (like --message for message)
|
||||
* optionValue is the referenced option value (like a commit message)
|
||||
* `mytool` obviously is the tool (like git)
|
||||
* `command` is the main thing the tool shall do (like commit)
|
||||
* `argument1` and `argument2` are arguments
|
||||
* `option1` is a longform option you can add (like --message for message)
|
||||
* `optionValue` is the referenced option value (like a commit message)
|
||||
|
||||
```typescript
|
||||
When there is no command and no option specified the standardTask applied.
|
||||
When there is a option specified but no command, standardTask applies,
|
||||
except when of the options is -v, --version or --help.
|
||||
|
||||
```javascript
|
||||
import {Smartcli} from "smartcli"
|
||||
mySmartcli = new Smartcli();
|
||||
mySmartcli.standardTask()
|
||||
@ -43,5 +47,18 @@ mySmartcli.standardTask()
|
||||
// do something if program is called without an command
|
||||
});
|
||||
|
||||
mySmartcli.question
|
||||
mySmartcli.addCommand({commandname: 'install'})
|
||||
.then(argvArg => {
|
||||
// do something if program is called with command "install"
|
||||
})
|
||||
|
||||
mySmartcli.addVersion('1.0.0') // -v and --version options will display the specified version in the terminal
|
||||
|
||||
mySmartCli.addHelp({ // is triggered by help command and --help option
|
||||
helpText: 'some help text to print' // the helpText to display
|
||||
})
|
||||
|
||||
mySmartcli.startParse() // starts the evaluation and fullfills or rejects promises.
|
||||
```
|
||||
|
||||
[](https://push.rocks)
|
||||
|
3
dist/index.d.ts
vendored
3
dist/index.d.ts
vendored
@ -1,2 +1 @@
|
||||
import "typings-global";
|
||||
export { Smartcli } from "./smartcli.classes.smartcli";
|
||||
export { Smartcli } from './smartcli.classes.smartcli';
|
||||
|
3
dist/index.js
vendored
3
dist/index.js
vendored
@ -1,5 +1,4 @@
|
||||
"use strict";
|
||||
require("typings-global");
|
||||
var smartcli_classes_smartcli_1 = require("./smartcli.classes.smartcli");
|
||||
exports.Smartcli = smartcli_classes_smartcli_1.Smartcli;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFBZ0IsQ0FBQyxDQUFBO0FBR3hCLDBDQUF1Qiw2QkFBNkIsQ0FBQztBQUE3Qyx3REFBNkMifQ==
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEseUVBQXNEO0FBQTdDLCtDQUFBLFFBQVEsQ0FBQSJ9
|
32
dist/smartcli.classes.interaction.d.ts
vendored
32
dist/smartcli.classes.interaction.d.ts
vendored
@ -1,32 +0,0 @@
|
||||
import "typings-global";
|
||||
/**
|
||||
* allows to specify an user interaction during runtime
|
||||
*/
|
||||
export declare type questionType = "input" | "confirm" | "list" | "rawlist" | "expand" | "checkbox" | "password" | "editor";
|
||||
export interface choiceObject {
|
||||
name: string;
|
||||
value: any;
|
||||
}
|
||||
export interface validateFunction {
|
||||
(any: any): boolean;
|
||||
}
|
||||
export declare class Interaction {
|
||||
constructor();
|
||||
askQuestion(optionsArg: {
|
||||
type: questionType;
|
||||
message: string;
|
||||
default: any;
|
||||
choices: string[] | choiceObject[];
|
||||
validate: validateFunction;
|
||||
}): void;
|
||||
askQuestionArray: any;
|
||||
}
|
||||
export declare class QuestionTree {
|
||||
constructor(questionString: string, optionsArray: any);
|
||||
}
|
||||
export declare class QuestionTreeNode {
|
||||
constructor();
|
||||
}
|
||||
export declare class QuestionStorage {
|
||||
constructor();
|
||||
}
|
41
dist/smartcli.classes.interaction.js
vendored
41
dist/smartcli.classes.interaction.js
vendored
@ -1,41 +0,0 @@
|
||||
"use strict";
|
||||
require("typings-global");
|
||||
const plugins = require("./smartcli.plugins");
|
||||
class Interaction {
|
||||
constructor() {
|
||||
}
|
||||
;
|
||||
askQuestion(optionsArg) {
|
||||
let done = plugins.q.defer();
|
||||
plugins.inquirer.prompt([{
|
||||
type: optionsArg.type,
|
||||
message: optionsArg.message,
|
||||
default: optionsArg.default,
|
||||
choices: optionsArg.choices,
|
||||
validate: optionsArg.validate
|
||||
}]).then(answers => {
|
||||
done.resolve(answers);
|
||||
});
|
||||
}
|
||||
;
|
||||
}
|
||||
exports.Interaction = Interaction;
|
||||
class QuestionTree {
|
||||
constructor(questionString, optionsArray) {
|
||||
}
|
||||
;
|
||||
}
|
||||
exports.QuestionTree = QuestionTree;
|
||||
;
|
||||
class QuestionTreeNode {
|
||||
constructor() {
|
||||
}
|
||||
}
|
||||
exports.QuestionTreeNode = QuestionTreeNode;
|
||||
;
|
||||
class QuestionStorage {
|
||||
constructor() {
|
||||
}
|
||||
}
|
||||
exports.QuestionStorage = QuestionStorage;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRjbGkuY2xhc3Nlcy5pbnRlcmFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0Y2xpLmNsYXNzZXMuaW50ZXJhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUN4QixNQUFZLE9BQU8sV0FBTSxvQkFBb0IsQ0FBQyxDQUFBO0FBZTlDO0lBQ0k7SUFDQSxDQUFDOztJQUVELFdBQVcsQ0FBQyxVQU1YO1FBQ0csSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNyQixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7Z0JBQ3JCLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztnQkFDM0IsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO2dCQUMzQixPQUFPLEVBQUMsVUFBVSxDQUFDLE9BQU87Z0JBQzFCLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTthQUNoQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTztZQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztBQUVMLENBQUM7QUF2QlksbUJBQVcsY0F1QnZCLENBQUE7QUFHRDtJQUVJLFlBQVksY0FBc0IsRUFBRSxZQUFZO0lBRWhELENBQUM7O0FBQ0wsQ0FBQztBQUxZLG9CQUFZLGVBS3hCLENBQUE7QUFBQSxDQUFDO0FBRUY7SUFDSTtJQUVBLENBQUM7QUFDTCxDQUFDO0FBSlksd0JBQWdCLG1CQUk1QixDQUFBO0FBQUEsQ0FBQztBQUVGO0lBQ0k7SUFFQSxDQUFDO0FBQ0wsQ0FBQztBQUpZLHVCQUFlLGtCQUkzQixDQUFBIn0=
|
26
dist/smartcli.classes.smartcli.d.ts
vendored
26
dist/smartcli.classes.smartcli.d.ts
vendored
@ -1,10 +1,9 @@
|
||||
/// <reference types="q" />
|
||||
import "typings-global";
|
||||
import * as plugins from "./smartcli.plugins";
|
||||
import { Objectmap } from "lik";
|
||||
export interface commandPromiseObject {
|
||||
import * as q from 'q';
|
||||
import { Objectmap } from 'lik';
|
||||
export interface ICommandDeferredObject {
|
||||
commandName: string;
|
||||
promise: plugins.q.Promise<any>;
|
||||
deferred: q.Deferred<any>;
|
||||
}
|
||||
export declare class Smartcli {
|
||||
argv: any;
|
||||
@ -13,7 +12,10 @@ export declare class Smartcli {
|
||||
commands: any;
|
||||
questions: any;
|
||||
version: string;
|
||||
allCommandPromises: Objectmap<commandPromiseObject>;
|
||||
/**
|
||||
* map of all Command/Promise objects to keep track
|
||||
*/
|
||||
allCommandDeferredsMap: Objectmap<ICommandDeferredObject>;
|
||||
constructor();
|
||||
/**
|
||||
* adds an alias, meaning one equals the other in terms of triggering associated commands
|
||||
@ -21,16 +23,20 @@ export declare class Smartcli {
|
||||
addAlias(keyArg: any, aliasArg: any): void;
|
||||
/**
|
||||
* adds a Command by returning a Promise that reacts to the specific commandString given.
|
||||
*
|
||||
* Note: in e.g. "npm install something" the "install" is considered the command.
|
||||
*/
|
||||
addCommand(definitionArg: {
|
||||
commandName: string;
|
||||
}): plugins.q.Promise<any>;
|
||||
}): q.Promise<any>;
|
||||
/**
|
||||
* gets a Promise for a command word
|
||||
*/
|
||||
getCommandPromiseByName(commandNameArg: string): plugins.q.Promise<any>;
|
||||
getCommandPromiseByName(commandNameArg: string): q.Promise<void>;
|
||||
/**
|
||||
* triggers a command by name
|
||||
* @param commandNameArg - the name of the command to trigger
|
||||
*/
|
||||
triggerCommandByName(commandNameArg: string): q.Promise<any>;
|
||||
/**
|
||||
* allows to specify help text to be printed above the rest of the help text
|
||||
*/
|
||||
@ -44,7 +50,7 @@ export declare class Smartcli {
|
||||
/**
|
||||
* returns promise that is resolved when no commands are specified
|
||||
*/
|
||||
standardTask(): plugins.q.Promise<any>;
|
||||
standardTask(): q.Promise<any>;
|
||||
/**
|
||||
* start the process of evaluating commands
|
||||
*/
|
||||
|
56
dist/smartcli.classes.smartcli.js
vendored
56
dist/smartcli.classes.smartcli.js
vendored
@ -1,18 +1,18 @@
|
||||
"use strict";
|
||||
require("typings-global");
|
||||
const q = require("q");
|
||||
const plugins = require("./smartcli.plugins");
|
||||
// import classes
|
||||
const lik_1 = require("lik");
|
||||
;
|
||||
class Smartcli {
|
||||
constructor() {
|
||||
// maps
|
||||
this.allCommandPromises = new lik_1.Objectmap();
|
||||
/**
|
||||
* map of all Command/Promise objects to keep track
|
||||
*/
|
||||
this.allCommandDeferredsMap = new lik_1.Objectmap();
|
||||
this.argv = plugins.yargs;
|
||||
this.questionsDone = plugins.q.defer();
|
||||
this.parseStarted = plugins.q.defer();
|
||||
this.questionsDone = q.defer();
|
||||
this.parseStarted = q.defer();
|
||||
}
|
||||
;
|
||||
/**
|
||||
* adds an alias, meaning one equals the other in terms of triggering associated commands
|
||||
*/
|
||||
@ -20,17 +20,19 @@ class Smartcli {
|
||||
this.argv = this.argv.alias(keyArg, aliasArg);
|
||||
return;
|
||||
}
|
||||
;
|
||||
/**
|
||||
* adds a Command by returning a Promise that reacts to the specific commandString given.
|
||||
*
|
||||
* Note: in e.g. "npm install something" the "install" is considered the command.
|
||||
*/
|
||||
addCommand(definitionArg) {
|
||||
let done = plugins.q.defer();
|
||||
let done = q.defer();
|
||||
this.allCommandDeferredsMap.add({
|
||||
commandName: definitionArg.commandName,
|
||||
deferred: done
|
||||
});
|
||||
this.parseStarted.promise
|
||||
.then(() => {
|
||||
if (this.argv._.indexOf(definitionArg.commandName) == 0) {
|
||||
if (this.argv._.indexOf(definitionArg.commandName) === 0) {
|
||||
done.resolve(this.argv);
|
||||
}
|
||||
else {
|
||||
@ -39,33 +41,41 @@ class Smartcli {
|
||||
});
|
||||
return done.promise;
|
||||
}
|
||||
;
|
||||
/**
|
||||
* gets a Promise for a command word
|
||||
*/
|
||||
getCommandPromiseByName(commandNameArg) {
|
||||
return this.allCommandPromises.find(commandPromiseObjectArg => {
|
||||
return commandPromiseObjectArg.commandName === commandNameArg;
|
||||
}).promise;
|
||||
return this.allCommandDeferredsMap.find(commandDeferredObjectArg => {
|
||||
return commandDeferredObjectArg.commandName === commandNameArg;
|
||||
}).deferred.promise;
|
||||
}
|
||||
/**
|
||||
* triggers a command by name
|
||||
* @param commandNameArg - the name of the command to trigger
|
||||
*/
|
||||
triggerCommandByName(commandNameArg) {
|
||||
let commandDeferred = this.allCommandDeferredsMap.find(commandDeferredObjectArg => {
|
||||
return commandDeferredObjectArg.commandName === commandNameArg;
|
||||
}).deferred;
|
||||
commandDeferred.resolve();
|
||||
return commandDeferred.promise;
|
||||
}
|
||||
;
|
||||
/**
|
||||
* allows to specify help text to be printed above the rest of the help text
|
||||
*/
|
||||
addHelp(optionsArg) {
|
||||
this.addCommand({
|
||||
commandName: "help"
|
||||
commandName: 'help'
|
||||
}).then(argvArg => {
|
||||
plugins.beautylog.log(optionsArg.helpText);
|
||||
});
|
||||
}
|
||||
;
|
||||
/**
|
||||
* specify version to be printed for -v --version
|
||||
*/
|
||||
addVersion(versionArg) {
|
||||
this.version = versionArg;
|
||||
this.addAlias("v", "version");
|
||||
this.addAlias('v', 'version');
|
||||
this.parseStarted.promise
|
||||
.then(() => {
|
||||
if (this.argv.v) {
|
||||
@ -73,21 +83,19 @@ class Smartcli {
|
||||
}
|
||||
});
|
||||
}
|
||||
;
|
||||
/**
|
||||
* returns promise that is resolved when no commands are specified
|
||||
*/
|
||||
standardTask() {
|
||||
let done = plugins.q.defer();
|
||||
let done = q.defer();
|
||||
this.parseStarted.promise
|
||||
.then(() => {
|
||||
if (this.argv._.length == 0 && !this.argv.v) {
|
||||
if (this.argv._.length === 0 && !this.argv.v) {
|
||||
done.resolve(this.argv);
|
||||
}
|
||||
else {
|
||||
done.reject(this.argv);
|
||||
}
|
||||
;
|
||||
});
|
||||
return done.promise;
|
||||
}
|
||||
@ -101,4 +109,4 @@ class Smartcli {
|
||||
}
|
||||
}
|
||||
exports.Smartcli = Smartcli;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRjbGkuY2xhc3Nlcy5zbWFydGNsaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0Y2xpLmNsYXNzZXMuc21hcnRjbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUV4QixNQUFZLE9BQU8sV0FBTSxvQkFBb0IsQ0FBQyxDQUFBO0FBRzlDLGlCQUFpQjtBQUNqQixzQkFBd0IsS0FBSyxDQUFDLENBQUE7QUFNN0IsQ0FBQztBQUVGO0lBVUk7UUFGQSxPQUFPO1FBQ1AsdUJBQWtCLEdBQUcsSUFBSSxlQUFTLEVBQXdCLENBQUM7UUFFdkQsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUMsQ0FBQzs7SUFFRDs7T0FFRztJQUNILFFBQVEsQ0FBQyxNQUFNLEVBQUMsUUFBUTtRQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsQ0FBQztRQUM3QyxNQUFNLENBQUM7SUFDWCxDQUFDOztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsYUFBa0M7UUFDekMsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQU8sQ0FBQztRQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU87YUFDcEIsSUFBSSxDQUFDO1lBQ0YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLENB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
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRjbGkuY2xhc3Nlcy5zbWFydGNsaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0Y2xpLmNsYXNzZXMuc21hcnRjbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHVCQUFzQjtBQUV0Qiw4Q0FBNkM7QUFFN0MsaUJBQWlCO0FBQ2pCLDZCQUE2QjtBQVE3QjtJQWFJO1FBTEE7O1dBRUc7UUFDSCwyQkFBc0IsR0FBRyxJQUFJLGVBQVMsRUFBMEIsQ0FBQTtRQUc1RCxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUE7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUSxDQUFDLE1BQU0sRUFBQyxRQUFRO1FBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzVDLE1BQU0sQ0FBQTtJQUNWLENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVLENBQUMsYUFBb0M7UUFDM0MsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBTyxDQUFBO1FBQ3pCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUM7WUFDNUIsV0FBVyxFQUFFLGFBQWEsQ0FBQyxXQUFXO1lBQ3RDLFFBQVEsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTzthQUNwQixJQUFJLENBQUM7WUFDRixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZE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
|
16
dist/smartcli.plugins.d.ts
vendored
16
dist/smartcli.plugins.d.ts
vendored
@ -1,9 +1,7 @@
|
||||
import "typings-global";
|
||||
export import yargs = require('yargs');
|
||||
export import beautylog = require("beautylog");
|
||||
export import cliff = require("cliff");
|
||||
export import inquirer = require("inquirer");
|
||||
export import lik = require("lik");
|
||||
export import path = require("path");
|
||||
export import q = require("q");
|
||||
export import smartparam = require("smartparam");
|
||||
import 'typings-global';
|
||||
import * as yargs from 'yargs';
|
||||
import * as beautylog from 'beautylog';
|
||||
import * as lik from 'lik';
|
||||
import * as path from 'path';
|
||||
import * as smartparam from 'smartparam';
|
||||
export { yargs, beautylog, lik, path, smartparam };
|
||||
|
20
dist/smartcli.plugins.js
vendored
20
dist/smartcli.plugins.js
vendored
@ -1,11 +1,13 @@
|
||||
"use strict";
|
||||
require("typings-global");
|
||||
exports.yargs = require('yargs');
|
||||
exports.beautylog = require("beautylog");
|
||||
exports.cliff = require("cliff");
|
||||
exports.inquirer = require("inquirer");
|
||||
exports.lik = require("lik");
|
||||
exports.path = require("path");
|
||||
exports.q = require("q");
|
||||
exports.smartparam = require("smartparam");
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRjbGkucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0Y2xpLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUVWLGFBQUssV0FBVyxPQUFPLENBQUMsQ0FBQztBQUN6QixpQkFBUyxXQUFXLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLGFBQUssV0FBVyxPQUFPLENBQUMsQ0FBQztBQUN6QixnQkFBUSxXQUFXLFVBQVUsQ0FBQyxDQUFDO0FBQy9CLFdBQUcsV0FBVyxLQUFLLENBQUMsQ0FBQztBQUNyQixZQUFJLFdBQVcsTUFBTSxDQUFDLENBQUM7QUFDdkIsU0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLGtCQUFVLFdBQVcsWUFBWSxDQUFDLENBQUMifQ==
|
||||
const yargs = require("yargs");
|
||||
exports.yargs = yargs;
|
||||
const beautylog = require("beautylog");
|
||||
exports.beautylog = beautylog;
|
||||
const lik = require("lik");
|
||||
exports.lik = lik;
|
||||
const path = require("path");
|
||||
exports.path = path;
|
||||
const smartparam = require("smartparam");
|
||||
exports.smartparam = smartparam;
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRjbGkucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0Y2xpLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDBCQUF3QjtBQUV4QiwrQkFBOEI7QUFPMUIsc0JBQUs7QUFOVCx1Q0FBc0M7QUFPbEMsOEJBQVM7QUFOYiwyQkFBMEI7QUFPdEIsa0JBQUc7QUFOUCw2QkFBNEI7QUFPeEIsb0JBQUk7QUFOUix5Q0FBd0M7QUFPcEMsZ0NBQVUifQ==
|
30
package.json
30
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "smartcli",
|
||||
"version": "1.0.9",
|
||||
"version": "1.0.16",
|
||||
"description": "nodejs wrapper for CLI related tasks",
|
||||
"main": "dist/index.js",
|
||||
"typings": "dist/index.d.ts",
|
||||
@ -17,33 +17,31 @@
|
||||
"url": "https://gitlab.com/pushrocks/smartcli.git"
|
||||
},
|
||||
"keywords": [
|
||||
"json",
|
||||
"jade",
|
||||
"template"
|
||||
"cli",
|
||||
"promise",
|
||||
"task",
|
||||
"push.rocks"
|
||||
],
|
||||
"author": "Smart Coordination GmbH <office@push.rocks> (https://push.rocks)",
|
||||
"author": "Lossless GmbH <office@lossless.com> (https://lossless.com)",
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://gitlab.com/pushrocks/smartcli/issues"
|
||||
},
|
||||
"homepage": "https://gitlab.com/pushrocks/smartcli",
|
||||
"dependencies": {
|
||||
"@types/cliff": "^0.1.3",
|
||||
"@types/inquirer": "0.x.x",
|
||||
"@types/q": "0.x.x",
|
||||
"@types/yargs": "0.x.x",
|
||||
"beautylog": "^5.0.20",
|
||||
"cliff": "^0.1.10",
|
||||
"inquirer": "^1.1.2",
|
||||
"lik": "^1.0.15",
|
||||
"@types/yargs": "6.x.x",
|
||||
"beautylog": "^6.0.0",
|
||||
"lik": "^1.0.24",
|
||||
"q": "^1.4.1",
|
||||
"smartparam": "0.1.1",
|
||||
"typings-global": "^1.0.6",
|
||||
"yargs": "^5.0.0"
|
||||
"typings-global": "^1.0.14",
|
||||
"yargs": "^6.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/should": "^8.1.30",
|
||||
"npmts-g": "^5.2.8",
|
||||
"should": "^11.1.0",
|
||||
"typings-test": "^1.0.1"
|
||||
"should": "^11.1.1",
|
||||
"typings-test": "^1.0.3"
|
||||
}
|
||||
}
|
||||
|
2
test/test.d.ts
vendored
2
test/test.d.ts
vendored
@ -1 +1 @@
|
||||
import "typings-test";
|
||||
import 'typings-test';
|
||||
|
49
test/test.js
49
test/test.js
@ -1,36 +1,55 @@
|
||||
"use strict";
|
||||
require("typings-test");
|
||||
const smartcli = require("../dist/index");
|
||||
let beautylog = require("beautylog");
|
||||
let should = require("should");
|
||||
describe("smartcli.Smartcli class", function () {
|
||||
const should = require("should");
|
||||
describe('smartcli.Smartcli class', function () {
|
||||
let smartCliTestObject;
|
||||
describe("new Smartcli()", function () {
|
||||
it("should create a new Smartcli", function () {
|
||||
describe('new Smartcli()', function () {
|
||||
it('should create a new Smartcli', function () {
|
||||
smartCliTestObject = new smartcli.Smartcli();
|
||||
smartCliTestObject.should.be.instanceof(smartcli.Smartcli);
|
||||
should(smartCliTestObject).be.instanceof(smartcli.Smartcli);
|
||||
});
|
||||
});
|
||||
describe(".addCommand", function () {
|
||||
it("should add an command", function () {
|
||||
describe('.addCommand', function () {
|
||||
it('should add an command', function () {
|
||||
smartCliTestObject.addCommand({
|
||||
commandName: "awesome"
|
||||
commandName: 'awesome'
|
||||
});
|
||||
});
|
||||
});
|
||||
describe(".standardTask", function () {
|
||||
it("should start parsing a standardTask", function (done) {
|
||||
describe('.standardTask', function () {
|
||||
it('should start parsing a standardTask', function (done) {
|
||||
smartCliTestObject.standardTask()
|
||||
.then(() => {
|
||||
console.log("this is the standard Task!");
|
||||
console.log('this is the standard Task!');
|
||||
});
|
||||
done();
|
||||
});
|
||||
});
|
||||
describe(".startParse", function () {
|
||||
it("should start parsing the CLI input", function () {
|
||||
describe('.triggerCommandByName', function () {
|
||||
let hasExecuted = false;
|
||||
it('should accept a command', function (done) {
|
||||
smartCliTestObject.addCommand({ commandName: 'triggerme' })
|
||||
.then(argvArg => {
|
||||
hasExecuted = true;
|
||||
});
|
||||
done();
|
||||
});
|
||||
it('should not have executed yet', function () {
|
||||
should(hasExecuted).be.false();
|
||||
});
|
||||
it('should execute when triggered', function (done) {
|
||||
smartCliTestObject.triggerCommandByName('triggerme')
|
||||
.then(argvArg => {
|
||||
should(hasExecuted).be.true();
|
||||
done();
|
||||
}).catch(err => { done(err); });
|
||||
});
|
||||
});
|
||||
describe('.startParse', function () {
|
||||
it('should start parsing the CLI input', function () {
|
||||
smartCliTestObject.startParse();
|
||||
});
|
||||
});
|
||||
});
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFFdEIsTUFBTyxRQUFRLFdBQVcsZUFBZSxDQUFDLENBQUM7QUFDM0MsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3JDLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUUvQixRQUFRLENBQUMseUJBQXlCLEVBQUM7SUFDL0IsSUFBSSxrQkFBb0MsQ0FBQztJQUN6QyxRQUFRLENBQUMsZ0JBQWdCLEVBQUM7UUFDdEIsRUFBRSxDQUFDLDhCQUE4QixFQUFDO1lBQzlCLGtCQUFrQixHQUFHLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0gsUUFBUSxDQUFDLGFBQWEsRUFBQztRQUNuQixFQUFFLENBQUMsdUJBQXVCLEVBQUM7WUFDdkIsa0JBQWtCLENBQUMsVUFBVSxDQUFDO2dCQUMxQixXQUFXLEVBQUMsU0FBUzthQUN4QixDQUFDLENBQUM7UUFFUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0gsUUFBUSxDQUFDLGVBQWUsRUFBQztRQUNyQixFQUFFLENBQUMscUNBQXFDLEVBQUMsVUFBUyxJQUFJO1lBQ2xELGtCQUFrQixDQUFDLFlBQVksRUFBRTtpQkFDNUIsSUFBSSxDQUFDO2dCQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUM5QyxDQUFDLENBQUMsQ0FBQztZQUNQLElBQUksRUFBRSxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQTtJQUNGLFFBQVEsQ0FBQyxhQUFhLEVBQUM7UUFDbkIsRUFBRSxDQUFDLG9DQUFvQyxFQUFDO1lBQ3BDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUMsQ0FBQyJ9
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdCQUFxQjtBQUVyQiwwQ0FBMEM7QUFDMUMsaUNBQWdDO0FBRWhDLFFBQVEsQ0FBQyx5QkFBeUIsRUFBQztJQUMvQixJQUFJLGtCQUFxQyxDQUFBO0lBQ3pDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBQztRQUN0QixFQUFFLENBQUMsOEJBQThCLEVBQUM7WUFDOUIsa0JBQWtCLEdBQUcsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUE7WUFDNUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDL0QsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQTtJQUNGLFFBQVEsQ0FBQyxhQUFhLEVBQUM7UUFDbkIsRUFBRSxDQUFDLHVCQUF1QixFQUFDO1lBQ3ZCLGtCQUFrQixDQUFDLFVBQVUsQ0FBQztnQkFDMUIsV0FBVyxFQUFFLFNBQVM7YUFDekIsQ0FBQyxDQUFBO1FBQ04sQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQTtJQUNGLFFBQVEsQ0FBQyxlQUFlLEVBQUM7UUFDckIsRUFBRSxDQUFDLHFDQUFxQyxFQUFDLFVBQVMsSUFBSTtZQUNsRCxrQkFBa0IsQ0FBQyxZQUFZLEVBQUU7aUJBQzVCLElBQUksQ0FBQztnQkFDRixPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUE7WUFDN0MsQ0FBQyxDQUFDLENBQUE7WUFDTixJQUFJLEVBQUUsQ0FBQTtRQUNWLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUE7SUFDRixRQUFRLENBQUMsdUJBQXVCLEVBQUU7UUFDOUIsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFBO1FBQ3ZCLEVBQUUsQ0FBQyx5QkFBeUIsRUFBRSxVQUFTLElBQUk7WUFDdkMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUMsV0FBVyxFQUFFLFdBQVcsRUFBQyxDQUFDO2lCQUNwRCxJQUFJLENBQUMsT0FBTztnQkFDVCxXQUFXLEdBQUcsSUFBSSxDQUFBO1lBQ3RCLENBQUMsQ0FBQyxDQUFBO1lBQ04sSUFBSSxFQUFFLENBQUE7UUFDVixDQUFDLENBQUMsQ0FBQTtRQUNGLEVBQUUsQ0FBQyw4QkFBOEIsRUFBRTtZQUMvQixNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ2xDLENBQUMsQ0FBQyxDQUFBO1FBQ0YsRUFBRSxDQUFDLCtCQUErQixFQUFFLFVBQVMsSUFBSTtZQUM3QyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUM7aUJBQy9DLElBQUksQ0FBQyxPQUFPO2dCQUNULE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUE7Z0JBQzdCLElBQUksRUFBRSxDQUFBO1lBQ1YsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN0QyxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBQyxDQUFBO0lBQ0YsUUFBUSxDQUFDLGFBQWEsRUFBQztRQUNuQixFQUFFLENBQUMsb0NBQW9DLEVBQUM7WUFDcEMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDbkMsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFBIn0=
|
74
test/test.ts
74
test/test.ts
@ -1,37 +1,55 @@
|
||||
import "typings-test";
|
||||
import 'typings-test'
|
||||
|
||||
import smartcli = require("../dist/index");
|
||||
let beautylog = require("beautylog");
|
||||
let should = require("should");
|
||||
import smartcli = require('../dist/index')
|
||||
import * as should from 'should'
|
||||
|
||||
describe("smartcli.Smartcli class",function(){
|
||||
let smartCliTestObject:smartcli.Smartcli;
|
||||
describe("new Smartcli()",function(){
|
||||
it("should create a new Smartcli",function(){
|
||||
smartCliTestObject = new smartcli.Smartcli();
|
||||
smartCliTestObject.should.be.instanceof(smartcli.Smartcli);
|
||||
});
|
||||
});
|
||||
describe(".addCommand",function(){
|
||||
it("should add an command",function(){
|
||||
describe('smartcli.Smartcli class',function(){
|
||||
let smartCliTestObject: smartcli.Smartcli
|
||||
describe('new Smartcli()',function(){
|
||||
it('should create a new Smartcli',function(){
|
||||
smartCliTestObject = new smartcli.Smartcli()
|
||||
should(smartCliTestObject).be.instanceof(smartcli.Smartcli)
|
||||
})
|
||||
})
|
||||
describe('.addCommand',function(){
|
||||
it('should add an command',function(){
|
||||
smartCliTestObject.addCommand({
|
||||
commandName:"awesome"
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
describe(".standardTask",function(){
|
||||
it("should start parsing a standardTask",function(done){
|
||||
commandName: 'awesome'
|
||||
})
|
||||
})
|
||||
})
|
||||
describe('.standardTask',function(){
|
||||
it('should start parsing a standardTask',function(done){
|
||||
smartCliTestObject.standardTask()
|
||||
.then(() => {
|
||||
console.log("this is the standard Task!");
|
||||
});
|
||||
done();
|
||||
console.log('this is the standard Task!')
|
||||
})
|
||||
done()
|
||||
})
|
||||
})
|
||||
describe(".startParse",function(){
|
||||
it("should start parsing the CLI input",function(){
|
||||
smartCliTestObject.startParse();
|
||||
describe('.triggerCommandByName', function() {
|
||||
let hasExecuted = false
|
||||
it('should accept a command', function(done) {
|
||||
smartCliTestObject.addCommand({commandName: 'triggerme'})
|
||||
.then(argvArg => {
|
||||
hasExecuted = true
|
||||
})
|
||||
done()
|
||||
})
|
||||
it('should not have executed yet', function() {
|
||||
should(hasExecuted).be.false()
|
||||
})
|
||||
it('should execute when triggered', function(done) {
|
||||
smartCliTestObject.triggerCommandByName('triggerme')
|
||||
.then(argvArg => {
|
||||
should(hasExecuted).be.true()
|
||||
done()
|
||||
}).catch(err => { done(err) })
|
||||
})
|
||||
})
|
||||
describe('.startParse',function(){
|
||||
it('should start parsing the CLI input',function(){
|
||||
smartCliTestObject.startParse()
|
||||
})
|
||||
})
|
||||
})
|
||||
});
|
||||
|
@ -1,4 +1 @@
|
||||
import "typings-global";
|
||||
|
||||
import {Smartcli} from "./smartcli.classes.smartcli";
|
||||
export {Smartcli} from "./smartcli.classes.smartcli";
|
||||
export { Smartcli } from './smartcli.classes.smartcli'
|
||||
|
@ -1,60 +0,0 @@
|
||||
import "typings-global";
|
||||
import * as plugins from "./smartcli.plugins";
|
||||
|
||||
/**
|
||||
* allows to specify an user interaction during runtime
|
||||
*/
|
||||
|
||||
export type questionType = "input" | "confirm" | "list" | "rawlist" | "expand" | "checkbox" | "password" | "editor"
|
||||
export interface choiceObject {
|
||||
name: string;
|
||||
value: any
|
||||
}
|
||||
export interface validateFunction {
|
||||
(any):boolean
|
||||
}
|
||||
|
||||
export class Interaction {
|
||||
constructor() {
|
||||
};
|
||||
|
||||
askQuestion(optionsArg: {
|
||||
type: questionType,
|
||||
message: string
|
||||
default: any
|
||||
choices: string[] | choiceObject[];
|
||||
validate: validateFunction
|
||||
}) {
|
||||
let done = plugins.q.defer();
|
||||
plugins.inquirer.prompt([{
|
||||
type: optionsArg.type,
|
||||
message: optionsArg.message,
|
||||
default: optionsArg.default,
|
||||
choices:optionsArg.choices,
|
||||
validate: optionsArg.validate
|
||||
}]).then(answers => {
|
||||
done.resolve(answers);
|
||||
});
|
||||
};
|
||||
askQuestionArray
|
||||
}
|
||||
|
||||
|
||||
export class QuestionTree {
|
||||
|
||||
constructor(questionString: string, optionsArray) {
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
export class QuestionTreeNode {
|
||||
constructor() {
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
export class QuestionStorage {
|
||||
constructor() {
|
||||
|
||||
}
|
||||
}
|
@ -1,67 +1,84 @@
|
||||
import "typings-global";
|
||||
import * as q from 'q'
|
||||
|
||||
import * as plugins from "./smartcli.plugins";
|
||||
import * as interaction from "./smartcli.classes.interaction";
|
||||
import * as plugins from './smartcli.plugins'
|
||||
|
||||
// import classes
|
||||
import {Objectmap} from "lik";
|
||||
import {Objectmap} from 'lik'
|
||||
|
||||
// interfaces
|
||||
export interface commandPromiseObject {
|
||||
commandName:string;
|
||||
promise: plugins.q.Promise<any>;
|
||||
};
|
||||
export interface ICommandDeferredObject {
|
||||
commandName: string
|
||||
deferred: q.Deferred<any>
|
||||
}
|
||||
|
||||
export class Smartcli {
|
||||
argv:any;
|
||||
questionsDone;
|
||||
parseStarted;
|
||||
commands;
|
||||
questions;
|
||||
version:string;
|
||||
argv: any
|
||||
questionsDone
|
||||
parseStarted
|
||||
commands
|
||||
questions
|
||||
version: string
|
||||
|
||||
/**
|
||||
* map of all Command/Promise objects to keep track
|
||||
*/
|
||||
allCommandDeferredsMap = new Objectmap<ICommandDeferredObject>()
|
||||
|
||||
// maps
|
||||
allCommandPromises = new Objectmap<commandPromiseObject>();
|
||||
constructor() {
|
||||
this.argv = plugins.yargs;
|
||||
this.questionsDone = plugins.q.defer();
|
||||
this.parseStarted = plugins.q.defer();
|
||||
};
|
||||
this.argv = plugins.yargs
|
||||
this.questionsDone = q.defer()
|
||||
this.parseStarted = q.defer()
|
||||
}
|
||||
|
||||
/**
|
||||
* adds an alias, meaning one equals the other in terms of triggering associated commands
|
||||
*/
|
||||
addAlias(keyArg,aliasArg): void {
|
||||
this.argv = this.argv.alias(keyArg,aliasArg);
|
||||
return;
|
||||
};
|
||||
this.argv = this.argv.alias(keyArg,aliasArg)
|
||||
return
|
||||
}
|
||||
|
||||
/**
|
||||
* adds a Command by returning a Promise that reacts to the specific commandString given.
|
||||
*
|
||||
* Note: in e.g. "npm install something" the "install" is considered the command.
|
||||
*/
|
||||
addCommand(definitionArg:{commandName:string}):plugins.q.Promise<any>{
|
||||
let done = plugins.q.defer<any>();
|
||||
addCommand(definitionArg: {commandName: string}): q.Promise<any> {
|
||||
let done = q.defer<any>()
|
||||
this.allCommandDeferredsMap.add({
|
||||
commandName: definitionArg.commandName,
|
||||
deferred: done
|
||||
})
|
||||
this.parseStarted.promise
|
||||
.then(() => {
|
||||
if (this.argv._.indexOf(definitionArg.commandName) == 0) {
|
||||
done.resolve(this.argv);
|
||||
if (this.argv._.indexOf(definitionArg.commandName) === 0) {
|
||||
done.resolve(this.argv)
|
||||
} else {
|
||||
done.reject(this.argv);
|
||||
done.reject(this.argv)
|
||||
}
|
||||
})
|
||||
return done.promise
|
||||
}
|
||||
});
|
||||
return done.promise;
|
||||
};
|
||||
|
||||
/**
|
||||
* gets a Promise for a command word
|
||||
*/
|
||||
getCommandPromiseByName(commandNameArg:string){
|
||||
return this.allCommandPromises.find(commandPromiseObjectArg => {
|
||||
return commandPromiseObjectArg.commandName === commandNameArg;
|
||||
}).promise;
|
||||
};
|
||||
getCommandPromiseByName(commandNameArg: string): q.Promise<void> {
|
||||
return this.allCommandDeferredsMap.find(commandDeferredObjectArg => {
|
||||
return commandDeferredObjectArg.commandName === commandNameArg
|
||||
}).deferred.promise
|
||||
}
|
||||
|
||||
/**
|
||||
* triggers a command by name
|
||||
* @param commandNameArg - the name of the command to trigger
|
||||
*/
|
||||
triggerCommandByName(commandNameArg: string) {
|
||||
let commandDeferred = this.allCommandDeferredsMap.find(commandDeferredObjectArg => {
|
||||
return commandDeferredObjectArg.commandName === commandNameArg
|
||||
}).deferred
|
||||
commandDeferred.resolve()
|
||||
return commandDeferred.promise
|
||||
}
|
||||
|
||||
/**
|
||||
* allows to specify help text to be printed above the rest of the help text
|
||||
@ -70,49 +87,49 @@ export class Smartcli {
|
||||
helpText: string
|
||||
}) {
|
||||
this.addCommand({
|
||||
commandName:"help"
|
||||
commandName: 'help'
|
||||
}).then(argvArg => {
|
||||
plugins.beautylog.log(optionsArg.helpText);
|
||||
plugins.beautylog.log(optionsArg.helpText)
|
||||
})
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* specify version to be printed for -v --version
|
||||
*/
|
||||
addVersion(versionArg: string) {
|
||||
this.version = versionArg;
|
||||
this.addAlias("v","version");
|
||||
this.version = versionArg
|
||||
this.addAlias('v','version')
|
||||
this.parseStarted.promise
|
||||
.then(() => {
|
||||
if (this.argv.v) {
|
||||
console.log(this.version);
|
||||
console.log(this.version)
|
||||
}
|
||||
})
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* returns promise that is resolved when no commands are specified
|
||||
*/
|
||||
standardTask():plugins.q.Promise<any>{
|
||||
let done = plugins.q.defer<any>();
|
||||
standardTask(): q.Promise<any> {
|
||||
let done = q.defer<any>()
|
||||
this.parseStarted.promise
|
||||
.then(() => {
|
||||
if(this.argv._.length == 0 && !this.argv.v){
|
||||
done.resolve(this.argv);
|
||||
if (this.argv._.length === 0 && !this.argv.v) {
|
||||
done.resolve(this.argv)
|
||||
} else {
|
||||
done.reject(this.argv);
|
||||
};
|
||||
});
|
||||
return done.promise;
|
||||
done.reject(this.argv)
|
||||
}
|
||||
})
|
||||
return done.promise
|
||||
}
|
||||
|
||||
/**
|
||||
* start the process of evaluating commands
|
||||
*/
|
||||
startParse(): void {
|
||||
this.argv = this.argv.argv;
|
||||
this.parseStarted.resolve();
|
||||
return;
|
||||
this.argv = this.argv.argv
|
||||
this.parseStarted.resolve()
|
||||
return
|
||||
}
|
||||
|
||||
}
|
@ -1,10 +1,15 @@
|
||||
import "typings-global";
|
||||
import 'typings-global';
|
||||
|
||||
export import yargs = require('yargs');
|
||||
export import beautylog = require("beautylog");
|
||||
export import cliff = require("cliff");
|
||||
export import inquirer = require("inquirer");
|
||||
export import lik = require("lik");
|
||||
export import path = require("path");
|
||||
export import q = require("q");
|
||||
export import smartparam = require("smartparam");
|
||||
import * as yargs from 'yargs'
|
||||
import * as beautylog from 'beautylog'
|
||||
import * as lik from 'lik'
|
||||
import * as path from 'path'
|
||||
import * as smartparam from 'smartparam'
|
||||
|
||||
export {
|
||||
yargs,
|
||||
beautylog,
|
||||
lik,
|
||||
path,
|
||||
smartparam
|
||||
}
|
||||
|
3
tslint.json
Normal file
3
tslint.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"extends": "tslint-config-standard"
|
||||
}
|
Reference in New Issue
Block a user