Compare commits
73 Commits
Author | SHA1 | Date | |
---|---|---|---|
17983b1da9 | |||
5fcdf1ff8f | |||
ef7ee7fc73 | |||
c48e85897e | |||
9466b3e473 | |||
ab3127b8a6 | |||
1e62e27980 | |||
4b87004478 | |||
7750f1fbf5 | |||
c4e5ba6587 | |||
9d1f0f22ba | |||
1ce9e32116 | |||
adfda70522 | |||
c701e3e04c | |||
7b1de5b31d | |||
7908fd8cfd | |||
21bd0c9279 | |||
9d1108e40d | |||
390e0cb491 | |||
032fd0c2fd | |||
440881c3d8 | |||
f208121e2c | |||
7c4ae84871 | |||
668f6c3e16 | |||
b1e08aad1f | |||
f1ab614cdf | |||
995c808512 | |||
28acb867a0 | |||
3148a50d43 | |||
41c99de4d8 | |||
a91f56dacf | |||
f60f17f91e | |||
d154cf0d0f | |||
a6e0fa65e0 | |||
c7e940f597 | |||
45d3ce8ffc | |||
ce121b8b7f | |||
ce65b8d7c9 | |||
9acdfca460 | |||
59bcd8dadf | |||
b6375fd8fa | |||
8183417c90 | |||
5e66d35125 | |||
3ff4c3ff2f | |||
6508b29bfc | |||
66fd7138ab | |||
f3ce1c1408 | |||
d2b84acc55 | |||
ce008da9ad | |||
f0f1f9b86f | |||
089787454a | |||
f8a122b777 | |||
c6db092062 | |||
857d31dcb2 | |||
e257a38688 | |||
19a5082381 | |||
00f5539e6b | |||
cacb0221f1 | |||
b98b90163d | |||
daa6312aea | |||
7f2dab091f | |||
dd293875c4 | |||
120eca42ac | |||
fc289616f6 | |||
e7c1c1c45b | |||
f33c759fa8 | |||
1185df362b | |||
36de8e11f0 | |||
74ffb3aa87 | |||
96a6d01720 | |||
7833bd0be8 | |||
7ca18c4a46 | |||
b98e2a1a62 |
21
.gitignore
vendored
21
.gitignore
vendored
@ -1,9 +1,22 @@
|
|||||||
node_modules/
|
.nogit/
|
||||||
|
|
||||||
|
# artifacts
|
||||||
coverage/
|
coverage/
|
||||||
|
public/
|
||||||
pages/
|
pages/
|
||||||
|
|
||||||
|
# installs
|
||||||
|
node_modules/
|
||||||
|
|
||||||
ts/*.js
|
# caches
|
||||||
ts/*.js.map
|
.yarn/
|
||||||
ts/typings/
|
.cache/
|
||||||
|
.rpt2_cache
|
||||||
|
|
||||||
|
# builds
|
||||||
|
dist/
|
||||||
|
dist_web/
|
||||||
|
dist_serve/
|
||||||
|
dist_ts_web/
|
||||||
|
|
||||||
|
# custom
|
120
.gitlab-ci.yml
120
.gitlab-ci.yml
@ -1,50 +1,126 @@
|
|||||||
image: hosttoday/ht-docker-node:npmts
|
# gitzone ci_default
|
||||||
|
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
||||||
|
|
||||||
|
cache:
|
||||||
|
paths:
|
||||||
|
- .npmci_cache/
|
||||||
|
key: '$CI_BUILD_STAGE'
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- test
|
- security
|
||||||
- release
|
- test
|
||||||
- page
|
- release
|
||||||
|
- metadata
|
||||||
|
|
||||||
testLEGACY:
|
# ====================
|
||||||
|
# security stage
|
||||||
|
# ====================
|
||||||
|
mirror:
|
||||||
|
stage: security
|
||||||
|
script:
|
||||||
|
- npmci git mirror
|
||||||
|
tags:
|
||||||
|
- lossless
|
||||||
|
- docker
|
||||||
|
- notpriv
|
||||||
|
|
||||||
|
snyk:
|
||||||
|
image: registry.gitlab.com/hosttoday/ht-docker-node:snyk
|
||||||
|
stage: security
|
||||||
|
script:
|
||||||
|
- npmci npm prepare
|
||||||
|
- npmci command npm install --ignore-scripts
|
||||||
|
- npmci command snyk test
|
||||||
|
tags:
|
||||||
|
- lossless
|
||||||
|
- docker
|
||||||
|
- notpriv
|
||||||
|
|
||||||
|
# ====================
|
||||||
|
# test stage
|
||||||
|
# ====================
|
||||||
|
|
||||||
|
testStable:
|
||||||
stage: test
|
stage: test
|
||||||
script:
|
script:
|
||||||
- npmci test legacy
|
- npmci npm prepare
|
||||||
|
- npmci node install stable
|
||||||
|
- npmci npm install
|
||||||
|
- npmci npm test
|
||||||
|
coverage: /\d+.?\d+?\%\s*coverage/
|
||||||
tags:
|
tags:
|
||||||
|
- lossless
|
||||||
- docker
|
- docker
|
||||||
allow_failure: true
|
- priv
|
||||||
|
|
||||||
testLTS:
|
testBuild:
|
||||||
stage: test
|
stage: test
|
||||||
script:
|
script:
|
||||||
- npmci test lts
|
- npmci npm prepare
|
||||||
tags:
|
- npmci node install stable
|
||||||
- docker
|
- npmci npm install
|
||||||
|
- npmci command npm run build
|
||||||
testSTABLE:
|
coverage: /\d+.?\d+?\%\s*coverage/
|
||||||
stage: test
|
|
||||||
script:
|
|
||||||
- npmci test stable
|
|
||||||
tags:
|
tags:
|
||||||
|
- lossless
|
||||||
- docker
|
- docker
|
||||||
|
- notpriv
|
||||||
|
|
||||||
release:
|
release:
|
||||||
stage: release
|
stage: release
|
||||||
script:
|
script:
|
||||||
- npmci publish
|
- npmci node install stable
|
||||||
|
- npmci npm publish
|
||||||
only:
|
only:
|
||||||
- tags
|
- tags
|
||||||
tags:
|
tags:
|
||||||
|
- lossless
|
||||||
- docker
|
- docker
|
||||||
|
- notpriv
|
||||||
|
|
||||||
|
# ====================
|
||||||
|
# metadata stage
|
||||||
|
# ====================
|
||||||
|
codequality:
|
||||||
|
stage: metadata
|
||||||
|
allow_failure: true
|
||||||
|
script:
|
||||||
|
- npmci command npm install -g tslint typescript
|
||||||
|
- npmci npm prepare
|
||||||
|
- npmci npm install
|
||||||
|
- npmci command "tslint -c tslint.json ./ts/**/*.ts"
|
||||||
|
tags:
|
||||||
|
- lossless
|
||||||
|
- docker
|
||||||
|
- priv
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
stage: metadata
|
||||||
|
script:
|
||||||
|
- npmci trigger
|
||||||
|
only:
|
||||||
|
- tags
|
||||||
|
tags:
|
||||||
|
- lossless
|
||||||
|
- docker
|
||||||
|
- notpriv
|
||||||
|
|
||||||
pages:
|
pages:
|
||||||
image: hosttoday/ht-docker-node:npmpage
|
stage: metadata
|
||||||
stage: page
|
|
||||||
script:
|
script:
|
||||||
- npmci test stable
|
- npmci node install lts
|
||||||
- npmci command npmpage --host gitlab
|
- npmci command npm install -g @gitzone/tsdoc
|
||||||
|
- npmci npm prepare
|
||||||
|
- npmci npm install
|
||||||
|
- npmci command tsdoc
|
||||||
|
tags:
|
||||||
|
- lossless
|
||||||
|
- docker
|
||||||
|
- notpriv
|
||||||
only:
|
only:
|
||||||
- tags
|
- tags
|
||||||
artifacts:
|
artifacts:
|
||||||
expire_in: 1 week
|
expire_in: 1 week
|
||||||
paths:
|
paths:
|
||||||
- public
|
- public
|
||||||
|
allow_failure: true
|
||||||
|
9
.snyk
Normal file
9
.snyk
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities.
|
||||||
|
version: v1.12.0
|
||||||
|
# ignores vulnerabilities until expiry date; change duration by modifying expiry date
|
||||||
|
ignore:
|
||||||
|
'npm:mem:20180117':
|
||||||
|
- yargs > os-locale > mem:
|
||||||
|
reason: None given
|
||||||
|
expires: '2018-09-29T22:12:38.004Z'
|
||||||
|
patch: {}
|
29
.vscode/launch.json
vendored
Normal file
29
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "current file",
|
||||||
|
"type": "node",
|
||||||
|
"request": "launch",
|
||||||
|
"args": [
|
||||||
|
"${relativeFile}"
|
||||||
|
],
|
||||||
|
"runtimeArgs": ["-r", "@gitzone/tsrun"],
|
||||||
|
"cwd": "${workspaceRoot}",
|
||||||
|
"protocol": "inspector",
|
||||||
|
"internalConsoleOptions": "openOnSessionStart"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "test.ts",
|
||||||
|
"type": "node",
|
||||||
|
"request": "launch",
|
||||||
|
"args": [
|
||||||
|
"test/test.ts"
|
||||||
|
],
|
||||||
|
"runtimeArgs": ["-r", "@gitzone/tsrun"],
|
||||||
|
"cwd": "${workspaceRoot}",
|
||||||
|
"protocol": "inspector",
|
||||||
|
"internalConsoleOptions": "openOnSessionStart"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
26
.vscode/settings.json
vendored
Normal file
26
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"json.schemas": [
|
||||||
|
{
|
||||||
|
"fileMatch": ["/npmextra.json"],
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"npmci": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "settings for npmci"
|
||||||
|
},
|
||||||
|
"gitzone": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "settings for gitzone",
|
||||||
|
"properties": {
|
||||||
|
"projectType": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["website", "element", "service", "npm"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
47
README.md
47
README.md
@ -1,47 +0,0 @@
|
|||||||
# smartcli
|
|
||||||
nodejs wrapper for CLI related tasks. TypeScript ready.
|
|
||||||
|
|
||||||
## Availabililty
|
|
||||||
[](https://www.npmjs.com/package/smartcli)
|
|
||||||
[](https://gitlab.com/pushrocks/smartcli)
|
|
||||||
[](https://github.com/pushrocks/smartcli)
|
|
||||||
[](https://pushrocks.gitlab.io/smartcli/docs)
|
|
||||||
|
|
||||||
## Status for master
|
|
||||||
[](https://gitlab.com/pushrocks/smartcli/commits/master)
|
|
||||||
[](https://gitlab.com/pushrocks/smartcli/commits/master)
|
|
||||||
[](https://david-dm.org/pushrocks/smartcli)
|
|
||||||
[](https://www.bithound.io/github/pushrocks/smartcli/master/dependencies/npm)
|
|
||||||
[](https://www.bithound.io/github/pushrocks/smartcli)
|
|
||||||
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
|
||||||
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
|
||||||
|
|
||||||
## Install the package
|
|
||||||
npm install smartcli --save
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
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' 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)
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
import {Smartcli} from "smartcli"
|
|
||||||
mySmartcli = new Smartcli();
|
|
||||||
mySmartcli.standardTask()
|
|
||||||
.then(argvArg => {
|
|
||||||
// do something if program is called without an command
|
|
||||||
});
|
|
||||||
|
|
||||||
mySmartcli.question
|
|
||||||
```
|
|
2
dist/index.d.ts
vendored
2
dist/index.d.ts
vendored
@ -1,2 +0,0 @@
|
|||||||
import "typings-global";
|
|
||||||
export { Smartcli } from "./smartcli.classes.smartcli";
|
|
5
dist/index.js
vendored
5
dist/index.js
vendored
@ -1,5 +0,0 @@
|
|||||||
"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==
|
|
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=
|
|
52
dist/smartcli.classes.smartcli.d.ts
vendored
52
dist/smartcli.classes.smartcli.d.ts
vendored
@ -1,52 +0,0 @@
|
|||||||
/// <reference types="q" />
|
|
||||||
import "typings-global";
|
|
||||||
import * as plugins from "./smartcli.plugins";
|
|
||||||
import { Objectmap } from "lik";
|
|
||||||
export interface commandPromiseObject {
|
|
||||||
commandName: string;
|
|
||||||
promise: plugins.q.Promise<any>;
|
|
||||||
}
|
|
||||||
export declare class Smartcli {
|
|
||||||
argv: any;
|
|
||||||
questionsDone: any;
|
|
||||||
parseStarted: any;
|
|
||||||
commands: any;
|
|
||||||
questions: any;
|
|
||||||
version: string;
|
|
||||||
allCommandPromises: Objectmap<commandPromiseObject>;
|
|
||||||
constructor();
|
|
||||||
/**
|
|
||||||
* adds an alias, meaning one equals the other in terms of triggering associated commands
|
|
||||||
*/
|
|
||||||
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<{}>;
|
|
||||||
/**
|
|
||||||
* gets a Promise for a command word
|
|
||||||
*/
|
|
||||||
getCommandPromiseByName(commandNameArg: string): plugins.q.Promise<any>;
|
|
||||||
/**
|
|
||||||
* allows to specify help text to be printed above the rest of the help text
|
|
||||||
*/
|
|
||||||
addHelp(optionsArg: {
|
|
||||||
helpText: string;
|
|
||||||
}): void;
|
|
||||||
/**
|
|
||||||
* specify version to be printed for -v --version
|
|
||||||
*/
|
|
||||||
addVersion(versionArg: string): void;
|
|
||||||
/**
|
|
||||||
* returns promise that is resolved when no commands are specified
|
|
||||||
*/
|
|
||||||
standardTask(): plugins.q.Promise<{}>;
|
|
||||||
/**
|
|
||||||
* start the process of evaluating commands
|
|
||||||
*/
|
|
||||||
startParse(): void;
|
|
||||||
}
|
|
102
dist/smartcli.classes.smartcli.js
vendored
102
dist/smartcli.classes.smartcli.js
vendored
@ -1,102 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
require("typings-global");
|
|
||||||
const plugins = require("./smartcli.plugins");
|
|
||||||
// import classes
|
|
||||||
const lik_1 = require("lik");
|
|
||||||
;
|
|
||||||
class Smartcli {
|
|
||||||
constructor() {
|
|
||||||
// maps
|
|
||||||
this.allCommandPromises = new lik_1.Objectmap();
|
|
||||||
this.argv = plugins.yargs;
|
|
||||||
this.questionsDone = plugins.q.defer();
|
|
||||||
this.parseStarted = plugins.q.defer();
|
|
||||||
}
|
|
||||||
;
|
|
||||||
/**
|
|
||||||
* adds an alias, meaning one equals the other in terms of triggering associated commands
|
|
||||||
*/
|
|
||||||
addAlias(keyArg, aliasArg) {
|
|
||||||
this.argv = this.argv.alias(keyArg, aliasArg);
|
|
||||||
}
|
|
||||||
;
|
|
||||||
/**
|
|
||||||
* 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();
|
|
||||||
this.parseStarted.promise
|
|
||||||
.then(() => {
|
|
||||||
if (this.argv._.indexOf(definitionArg.commandName) == 0) {
|
|
||||||
done.resolve(this.argv);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
done.reject(this.argv);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return done.promise;
|
|
||||||
}
|
|
||||||
;
|
|
||||||
/**
|
|
||||||
* gets a Promise for a command word
|
|
||||||
*/
|
|
||||||
getCommandPromiseByName(commandNameArg) {
|
|
||||||
return this.allCommandPromises.find(commandPromiseObjectArg => {
|
|
||||||
return commandPromiseObjectArg.commandName === commandNameArg;
|
|
||||||
}).promise;
|
|
||||||
}
|
|
||||||
;
|
|
||||||
/**
|
|
||||||
* allows to specify help text to be printed above the rest of the help text
|
|
||||||
*/
|
|
||||||
addHelp(optionsArg) {
|
|
||||||
this.addCommand({
|
|
||||||
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.parseStarted.promise
|
|
||||||
.then(() => {
|
|
||||||
if (this.argv.v) {
|
|
||||||
console.log(this.version);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
;
|
|
||||||
/**
|
|
||||||
* returns promise that is resolved when no commands are specified
|
|
||||||
*/
|
|
||||||
standardTask() {
|
|
||||||
let done = plugins.q.defer();
|
|
||||||
this.parseStarted.promise
|
|
||||||
.then(() => {
|
|
||||||
if (this.argv._.length == 0 && !this.argv.v) {
|
|
||||||
done.resolve(this.argv);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
done.reject(this.argv);
|
|
||||||
}
|
|
||||||
;
|
|
||||||
});
|
|
||||||
return done.promise;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* start the process of evaluating commands
|
|
||||||
*/
|
|
||||||
startParse() {
|
|
||||||
this.argv = this.argv.argv;
|
|
||||||
this.parseStarted.resolve();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.Smartcli = Smartcli;
|
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRjbGkuY2xhc3Nlcy5zbWFydGNsaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0Y2xpLmNsYXNzZXMuc21hcnRjbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUV4QixNQUFZLE9BQU8sV0FBTSxvQkFBb0IsQ0FBQyxDQUFBO0FBRzlDLGlCQUFpQjtBQUNqQixzQkFBd0IsS0FBSyxDQUFDLENBQUE7QUFNN0IsQ0FBQztBQUVGO0lBVUk7UUFGQSxPQUFPO1FBQ1AsdUJBQWtCLEdBQUcsSUFBSSxlQUFTLEVBQXdCLENBQUM7UUFFdkQsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUMsQ0FBQzs7SUFFRDs7T0FFRztJQUNILFFBQVEsQ0FBQyxNQUFNLEVBQUMsUUFBUTtRQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsQ0FBQztJQUNqRCxDQUFDOztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsYUFBa0M7UUFDekMsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU87YUFDcEIsSUFBSSxDQUFDO1lBQ0YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLENBQUMsT0FBTyxDQUFDLElB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
|
|
9
dist/smartcli.plugins.d.ts
vendored
9
dist/smartcli.plugins.d.ts
vendored
@ -1,9 +0,0 @@
|
|||||||
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");
|
|
11
dist/smartcli.plugins.js
vendored
11
dist/smartcli.plugins.js
vendored
@ -1,11 +0,0 @@
|
|||||||
"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==
|
|
@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
"structure": {
|
|
||||||
"readme": "index.md"
|
|
||||||
},
|
|
||||||
"plugins": [
|
|
||||||
"tonic",
|
|
||||||
"edit-link"
|
|
||||||
],
|
|
||||||
"pluginsConfig": {
|
|
||||||
"edit-link": {
|
|
||||||
"base": "https://gitlab.com/pushrocks/npmts/edit/master/docs/",
|
|
||||||
"label": "Edit on GitLab"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,23 +1,25 @@
|
|||||||
# smartcli
|
# smartcli
|
||||||
nodejs wrapper for CLI related tasks. TypeScript ready.
|
|
||||||
|
nodejs wrapper for CLI related tasks
|
||||||
|
|
||||||
## Availabililty
|
## Availabililty
|
||||||
[](https://www.npmjs.com/package/smartcli)
|
|
||||||
[](https://gitlab.com/pushrocks/smartcli)
|
[](https://www.npmjs.com/package/smartcli)
|
||||||
[](https://github.com/pushrocks/smartcli)
|
[](https://GitLab.com/pushrocks/smartcli)
|
||||||
[](https://pushrocks.gitlab.io/smartcli/docs)
|
[](https://github.com/pushrocks/smartcli)
|
||||||
|
[](https://pushrocks.gitlab.io/smartcli/)
|
||||||
|
|
||||||
## Status for master
|
## Status for master
|
||||||
[](https://gitlab.com/pushrocks/smartcli/commits/master)
|
|
||||||
[](https://gitlab.com/pushrocks/smartcli/commits/master)
|
[](https://GitLab.com/pushrocks/smartcli/commits/master)
|
||||||
|
[](https://GitLab.com/pushrocks/smartcli/commits/master)
|
||||||
|
[](https://www.npmjs.com/package/smartcli)
|
||||||
[](https://david-dm.org/pushrocks/smartcli)
|
[](https://david-dm.org/pushrocks/smartcli)
|
||||||
[](https://www.bithound.io/github/pushrocks/smartcli/master/dependencies/npm)
|
[](https://www.bithound.io/github/pushrocks/smartcli/master/dependencies/npm)
|
||||||
[](https://www.bithound.io/github/pushrocks/smartcli)
|
[](https://www.bithound.io/github/pushrocks/smartcli)
|
||||||
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
||||||
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
||||||
|
[](http://standardjs.com/)
|
||||||
## Install the package
|
|
||||||
npm install smartcli --save
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
@ -26,22 +28,43 @@ this plugin tries to establish some logic in which CLI tools work.
|
|||||||
take the following commandline input:
|
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)
|
- `mytool` obviously is the tool (like git)
|
||||||
* function is the main thing the tool shall do (like commit)
|
- `command` is the main thing the tool shall do (like commit)
|
||||||
* argument1 and argument2 are arguments
|
- `argument1` and `argument2` are arguments
|
||||||
* option1 is a longform option you can add (like --message for message)
|
- `option1` is a longform option you can add (like --message for message)
|
||||||
* optionValue is the referenced option value (like a commit message)
|
- `optionValue` is the referenced option value (like a commit message)
|
||||||
|
|
||||||
```typescript
|
When there is no command and no option specified the standardTask applied.
|
||||||
import {Smartcli} from "smartcli"
|
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 = new Smartcli();
|
||||||
mySmartcli.standardTask()
|
mySmartcli.standardTask().then(argvArg => {
|
||||||
.then(argvArg => {
|
// do something if program is called without an command
|
||||||
// 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.
|
||||||
```
|
```
|
||||||
|
|
||||||
|
For further information read the linked docs at the top of this README.
|
||||||
|
|
||||||
|
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
|
||||||
|
> | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
|
||||||
|
|
||||||
|
[](https://push.rocks)
|
||||||
|
17
npmextra.json
Normal file
17
npmextra.json
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"npmci": {
|
||||||
|
"npmGlobalTools": [],
|
||||||
|
"npmAccesslevel": "public"
|
||||||
|
},
|
||||||
|
"gitzone": {
|
||||||
|
"projectType": "npm",
|
||||||
|
"module": {
|
||||||
|
"githost": "gitlab.com",
|
||||||
|
"gitscope": "pushrocks",
|
||||||
|
"gitrepo": "smartcli",
|
||||||
|
"shortDescription": "easy observable cli tasks",
|
||||||
|
"npmPackagename": "@pushrocks/smartcli",
|
||||||
|
"license": "MIT"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"mode":"default"
|
|
||||||
}
|
|
1825
package-lock.json
generated
Normal file
1825
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
64
package.json
64
package.json
@ -1,49 +1,57 @@
|
|||||||
{
|
{
|
||||||
"name": "smartcli",
|
"name": "@pushrocks/smartcli",
|
||||||
"version": "1.0.8",
|
"private": false,
|
||||||
|
"version": "3.0.8",
|
||||||
"description": "nodejs wrapper for CLI related tasks",
|
"description": "nodejs wrapper for CLI related tasks",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"typings": "dist/index.d.ts",
|
"typings": "dist/index.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "(npmts)",
|
"test": "(tstest test/)",
|
||||||
"testm": "(cd ts/compile && gulp) && (node test.js jazz jam --awesome)",
|
"build": "(tsbuild)"
|
||||||
"devTest": "(npm test) && (node test.js --test true)",
|
|
||||||
"reinstall": "(rm -r node_modules && npm install)",
|
|
||||||
"release": "(git pull origin master && npm version patch && git push origin master && git checkout release && git merge master && git push origin release && git checkout master)",
|
|
||||||
"startdev": "(git checkout master && git pull origin master)"
|
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://gitlab.com/pushrocks/smartcli.git"
|
"url": "https://gitlab.com/pushrocks/smartcli.git"
|
||||||
},
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"json",
|
"cli",
|
||||||
"jade",
|
"promise",
|
||||||
"template"
|
"task",
|
||||||
|
"push.rocks"
|
||||||
],
|
],
|
||||||
"author": "Smart Coordination GmbH <office@push.rocks> (https://push.rocks)",
|
"author": "Lossless GmbH <office@lossless.com> (https://lossless.com)",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://gitlab.com/pushrocks/smartcli/issues"
|
"url": "https://gitlab.com/pushrocks/smartcli/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://gitlab.com/pushrocks/smartcli",
|
"homepage": "https://gitlab.com/pushrocks/smartcli",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/cliff": "^0.1.3",
|
"@pushrocks/lik": "^3.0.19",
|
||||||
"@types/inquirer": "0.x.x",
|
"@pushrocks/smartlog": "^2.0.21",
|
||||||
"@types/q": "0.x.x",
|
"@pushrocks/smartparam": "^1.1.6",
|
||||||
"@types/yargs": "0.x.x",
|
"@pushrocks/smartpromise": "^3.0.6",
|
||||||
"beautylog": "^5.0.20",
|
"@types/yargs": "^15.0.4",
|
||||||
"cliff": "^0.1.10",
|
"rxjs": "^6.5.4",
|
||||||
"inquirer": "^1.1.2",
|
"yargs": "^15.3.0"
|
||||||
"lik": "^1.0.15",
|
|
||||||
"q": "^1.4.1",
|
|
||||||
"smartparam": "0.1.1",
|
|
||||||
"typings-global": "^1.0.6",
|
|
||||||
"yargs": "^5.0.0"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"npmts-g": "^5.2.8",
|
"@gitzone/tsbuild": "^2.1.20",
|
||||||
"should": "^11.1.0",
|
"@gitzone/tsrun": "^1.2.8",
|
||||||
"typings-test": "^1.0.1"
|
"@gitzone/tstest": "^1.0.28",
|
||||||
}
|
"@pushrocks/tapbundle": "^3.2.0",
|
||||||
|
"@types/node": "^13.9.0",
|
||||||
|
"tslint": "^6.1.0",
|
||||||
|
"tslint-config-prettier": "^1.18.0"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"ts/**/*",
|
||||||
|
"ts_web/**/*",
|
||||||
|
"dist/**/*",
|
||||||
|
"dist_web/**/*",
|
||||||
|
"dist_ts_web/**/*",
|
||||||
|
"assets/**/*",
|
||||||
|
"cli.js",
|
||||||
|
"npmextra.json",
|
||||||
|
"readme.md"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
1
test/test.d.ts
vendored
1
test/test.d.ts
vendored
@ -1 +0,0 @@
|
|||||||
import "typings-test";
|
|
36
test/test.js
36
test/test.js
@ -1,36 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
require("typings-test");
|
|
||||||
const smartcli = require("../dist/index");
|
|
||||||
let beautylog = require("beautylog");
|
|
||||||
let should = require("should");
|
|
||||||
describe("smartcli.Smartcli class", function () {
|
|
||||||
let smartCliTestObject;
|
|
||||||
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 () {
|
|
||||||
smartCliTestObject.addCommand({
|
|
||||||
commandName: "awesome"
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
describe(".standardTask", function () {
|
|
||||||
it("should start parsing a standardTask", function (done) {
|
|
||||||
smartCliTestObject.standardTask()
|
|
||||||
.then(() => {
|
|
||||||
console.log("this is the standard Task!");
|
|
||||||
});
|
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
describe(".startParse", function () {
|
|
||||||
it("should start parsing the CLI input", function () {
|
|
||||||
smartCliTestObject.startParse();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFFdEIsTUFBTyxRQUFRLFdBQVcsZUFBZSxDQUFDLENBQUM7QUFDM0MsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3JDLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUUvQixRQUFRLENBQUMseUJBQXlCLEVBQUM7SUFDL0IsSUFBSSxrQkFBb0MsQ0FBQztJQUN6QyxRQUFRLENBQUMsZ0JBQWdCLEVBQUM7UUFDdEIsRUFBRSxDQUFDLDhCQUE4QixFQUFDO1lBQzlCLGtCQUFrQixHQUFHLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0gsUUFBUSxDQUFDLGFBQWEsRUFBQztRQUNuQixFQUFFLENBQUMsdUJBQXVCLEVBQUM7WUFDdkIsa0JBQWtCLENBQUMsVUFBVSxDQUFDO2dCQUMxQixXQUFXLEVBQUMsU0FBUzthQUN4QixDQUFDLENBQUM7UUFFUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0gsUUFBUSxDQUFDLGVBQWUsRUFBQztRQUNyQixFQUFFLENBQUMscUNBQXFDLEVBQUMsVUFBUyxJQUFJO1lBQ2xELGtCQUFrQixDQUFDLFlBQVksRUFBRTtpQkFDNUIsSUFBSSxDQUFDO2dCQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUM5QyxDQUFDLENBQUMsQ0FBQztZQUNQLElBQUksRUFBRSxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQTtJQUNGLFFBQVEsQ0FBQyxhQUFhLEVBQUM7UUFDbkIsRUFBRSxDQUFDLG9DQUFvQyxFQUFDO1lBQ3BDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUMsQ0FBQyJ9
|
|
@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"test.js","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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"}
|
|
72
test/test.ts
72
test/test.ts
@ -1,37 +1,43 @@
|
|||||||
import "typings-test";
|
import { tap, expect } from '@pushrocks/tapbundle';
|
||||||
|
import { Subject } from 'rxjs';
|
||||||
|
|
||||||
import smartcli = require("../dist/index");
|
import smartcli = require('../ts/index');
|
||||||
let beautylog = require("beautylog");
|
|
||||||
let should = require("should");
|
|
||||||
|
|
||||||
describe("smartcli.Smartcli class",function(){
|
let smartCliTestObject: smartcli.Smartcli;
|
||||||
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(){
|
|
||||||
smartCliTestObject.addCommand({
|
|
||||||
commandName:"awesome"
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
tap.test('should create a new Smartcli', async () => {
|
||||||
});
|
smartCliTestObject = new smartcli.Smartcli();
|
||||||
describe(".standardTask",function(){
|
expect(smartCliTestObject).to.be.instanceof(smartcli.Smartcli);
|
||||||
it("should start parsing a standardTask",function(done){
|
|
||||||
smartCliTestObject.standardTask()
|
|
||||||
.then(() => {
|
|
||||||
console.log("this is the standard Task!");
|
|
||||||
});
|
|
||||||
done();
|
|
||||||
})
|
|
||||||
})
|
|
||||||
describe(".startParse",function(){
|
|
||||||
it("should start parsing the CLI input",function(){
|
|
||||||
smartCliTestObject.startParse();
|
|
||||||
})
|
|
||||||
})
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
tap.test('should add an command', async () => {
|
||||||
|
expect(smartCliTestObject.addCommand('awesome')).to.be.instanceOf(Subject);
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('should start parsing a standardTask', async () => {
|
||||||
|
expect(smartCliTestObject.standardTask()).to.be.instanceOf(Subject);
|
||||||
|
});
|
||||||
|
|
||||||
|
let hasExecuted: boolean = false;
|
||||||
|
|
||||||
|
tap.test('should accept a command', async () => {
|
||||||
|
smartCliTestObject.addTrigger('triggerme').subscribe(() => {
|
||||||
|
hasExecuted = true;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('should not have executed yet', async () => {
|
||||||
|
expect(hasExecuted).to.be.false;
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('should execute when triggered', async () => {
|
||||||
|
smartCliTestObject.trigger('triggerme');
|
||||||
|
expect(hasExecuted).be.true;
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('should start parsing the CLI input', async () => {
|
||||||
|
smartCliTestObject.startParse();
|
||||||
|
expect(smartCliTestObject.parseStarted.promise).to.be.instanceOf(Promise);
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.start();
|
||||||
|
@ -1,4 +1 @@
|
|||||||
import "typings-global";
|
export { Smartcli } from './smartcli.classes.smartcli';
|
||||||
|
|
||||||
import {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,116 +1,165 @@
|
|||||||
import "typings-global";
|
import * as smartpromise from '@pushrocks/smartpromise';
|
||||||
|
import { Subject } from 'rxjs';
|
||||||
|
|
||||||
import * as plugins from "./smartcli.plugins";
|
import * as plugins from './smartcli.plugins';
|
||||||
import * as interaction from "./smartcli.classes.interaction";
|
|
||||||
|
|
||||||
// import classes
|
// import classes
|
||||||
import {Objectmap} from "lik";
|
import { Objectmap } from '@pushrocks/lik';
|
||||||
|
|
||||||
// interfaces
|
// interfaces
|
||||||
export interface commandPromiseObject {
|
export interface ICommandPromiseObject {
|
||||||
commandName:string;
|
commandName: string;
|
||||||
promise: plugins.q.Promise<any>;
|
promise: Promise<void>;
|
||||||
};
|
}
|
||||||
|
|
||||||
export class Smartcli {
|
export interface ITriggerObservableObject {
|
||||||
argv:any;
|
triggerName: string;
|
||||||
questionsDone;
|
subject: Subject<any>;
|
||||||
parseStarted;
|
}
|
||||||
commands;
|
|
||||||
questions;
|
/**
|
||||||
version:string;
|
* class to create a new instance of Smartcli. Handles parsing of command line arguments.
|
||||||
|
*/
|
||||||
// maps
|
export class Smartcli {
|
||||||
allCommandPromises = new Objectmap<commandPromiseObject>();
|
argv: any;
|
||||||
constructor(){
|
questionsDone;
|
||||||
this.argv = plugins.yargs;
|
parseStarted: smartpromise.Deferred<any>;
|
||||||
this.questionsDone = plugins.q.defer();
|
commands;
|
||||||
this.parseStarted = plugins.q.defer();
|
questions;
|
||||||
};
|
version: string;
|
||||||
|
private onlyOnProcessEnvCliCall = false;
|
||||||
/**
|
|
||||||
* adds an alias, meaning one equals the other in terms of triggering associated commands
|
/**
|
||||||
*/
|
* map of all Trigger/Observable objects to keep track
|
||||||
addAlias(keyArg,aliasArg){
|
*/
|
||||||
this.argv = this.argv.alias(keyArg,aliasArg);
|
allTriggerObservablesMap = new Objectmap<ITriggerObservableObject>();
|
||||||
};
|
|
||||||
|
/**
|
||||||
/**
|
* The constructor of Smartcli
|
||||||
* adds a Command by returning a Promise that reacts to the specific commandString given.
|
*/
|
||||||
*
|
constructor() {
|
||||||
* Note: in e.g. "npm install something" the "install" is considered the command.
|
this.argv = plugins.yargs;
|
||||||
*/
|
this.questionsDone = smartpromise.defer();
|
||||||
addCommand(definitionArg:{commandName:string}){
|
this.parseStarted = smartpromise.defer();
|
||||||
let done = plugins.q.defer();
|
}
|
||||||
this.parseStarted.promise
|
|
||||||
.then(() => {
|
/**
|
||||||
if (this.argv._.indexOf(definitionArg.commandName) == 0) {
|
* halts any execution of commands if (process.env.CLI_CALL === false)
|
||||||
done.resolve(this.argv);
|
*/
|
||||||
} else {
|
onlyTriggerOnProcessEnvCliCall() {
|
||||||
done.reject(this.argv);
|
this.onlyOnProcessEnvCliCall = true;
|
||||||
}
|
}
|
||||||
});
|
|
||||||
return done.promise;
|
/**
|
||||||
};
|
* adds an alias, meaning one equals the other in terms of command execution.
|
||||||
|
*/
|
||||||
/**
|
addCommandAlias(keyArg, aliasArg): void {
|
||||||
* gets a Promise for a command word
|
this.argv = this.argv.alias(keyArg, aliasArg);
|
||||||
*/
|
return;
|
||||||
getCommandPromiseByName(commandNameArg:string){
|
}
|
||||||
return this.allCommandPromises.find(commandPromiseObjectArg => {
|
|
||||||
return commandPromiseObjectArg.commandName === commandNameArg;
|
/**
|
||||||
}).promise;
|
* 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(commandNameArg: string): Subject<any> {
|
||||||
* allows to specify help text to be printed above the rest of the help text
|
let triggerSubject = this.addTrigger(commandNameArg);
|
||||||
*/
|
this.parseStarted.promise.then(() => {
|
||||||
addHelp(optionsArg:{
|
if (this.argv._.indexOf(commandNameArg) === 0) {
|
||||||
helpText:string
|
this.trigger(commandNameArg);
|
||||||
}){
|
}
|
||||||
this.addCommand({
|
});
|
||||||
commandName:"help"
|
return triggerSubject;
|
||||||
}).then(argvArg => {
|
}
|
||||||
plugins.beautylog.log(optionsArg.helpText);
|
|
||||||
})
|
/**
|
||||||
};
|
* adds a Trigger. Like addCommand(), but returns an subscribable observable
|
||||||
|
*/
|
||||||
/**
|
addTrigger(triggerNameArg: string) {
|
||||||
* specify version to be printed for -v --version
|
let triggerSubject = new Subject<any>();
|
||||||
*/
|
if (!this.getTriggerSubject(triggerNameArg)) {
|
||||||
addVersion(versionArg:string){
|
this.allTriggerObservablesMap.add({
|
||||||
this.version = versionArg;
|
triggerName: triggerNameArg,
|
||||||
this.addAlias("v","version");
|
subject: triggerSubject
|
||||||
this.parseStarted.promise
|
});
|
||||||
.then(() => {
|
} else {
|
||||||
if(this.argv.v){
|
throw new Error(`you can't add a trigger twice`);
|
||||||
console.log(this.version);
|
}
|
||||||
}
|
return triggerSubject;
|
||||||
})
|
}
|
||||||
};
|
|
||||||
|
/**
|
||||||
/**
|
* execute trigger by name
|
||||||
* returns promise that is resolved when no commands are specified
|
* @param commandNameArg - the name of the command to trigger
|
||||||
*/
|
*/
|
||||||
standardTask(){
|
trigger(triggerName: string) {
|
||||||
let done = plugins.q.defer();
|
let triggerSubject = this.getTriggerSubject(triggerName);
|
||||||
this.parseStarted.promise
|
triggerSubject.next(this.argv);
|
||||||
.then(() => {
|
return triggerSubject;
|
||||||
if(this.argv._.length == 0 && !this.argv.v){
|
}
|
||||||
done.resolve(this.argv);
|
|
||||||
} else {
|
getTriggerSubject(triggerName: string) {
|
||||||
done.reject(this.argv);
|
const triggerObservableObject = this.allTriggerObservablesMap.find(
|
||||||
};
|
triggerObservableObjectArg => {
|
||||||
});
|
return triggerObservableObjectArg.triggerName === triggerName;
|
||||||
return done.promise;
|
}
|
||||||
}
|
);
|
||||||
|
if (triggerObservableObject) {
|
||||||
/**
|
return triggerObservableObject.subject;
|
||||||
* start the process of evaluating commands
|
} else {
|
||||||
*/
|
return null;
|
||||||
startParse(){
|
}
|
||||||
this.argv = this.argv.argv;
|
}
|
||||||
this.parseStarted.resolve();
|
|
||||||
}
|
/**
|
||||||
|
* allows to specify help text to be printed above the rest of the help text
|
||||||
|
*/
|
||||||
|
addHelp(optionsArg: { helpText: string }) {
|
||||||
|
this.addCommand('help').subscribe(argvArg => {
|
||||||
|
plugins.smartlog.defaultLogger.log('info', optionsArg.helpText);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* specify version to be printed for -v --version
|
||||||
|
*/
|
||||||
|
addVersion(versionArg: string) {
|
||||||
|
this.version = versionArg;
|
||||||
|
this.addCommandAlias('v', 'version');
|
||||||
|
this.parseStarted.promise.then(() => {
|
||||||
|
if (this.argv.v) {
|
||||||
|
console.log(this.version);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* adds a trigger that is called when no command is specified
|
||||||
|
*/
|
||||||
|
standardTask(): Subject<any> {
|
||||||
|
let standardSubject = this.addTrigger('standardTask');
|
||||||
|
this.parseStarted.promise.then(() => {
|
||||||
|
if (this.argv._.length === 0 && !this.argv.v) {
|
||||||
|
if (this.onlyOnProcessEnvCliCall) {
|
||||||
|
if (process.env.CLI_CALL === 'true') {
|
||||||
|
this.trigger('standardTask');
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.trigger('standardTask');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return standardSubject;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* start the process of evaluating commands
|
||||||
|
*/
|
||||||
|
startParse(): void {
|
||||||
|
this.argv = this.argv.argv;
|
||||||
|
this.parseStarted.resolve();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,10 +1,7 @@
|
|||||||
import "typings-global";
|
import * as yargs from 'yargs';
|
||||||
|
import * as smartlog from '@pushrocks/smartlog';
|
||||||
|
import * as lik from '@pushrocks/lik';
|
||||||
|
import * as path from 'path';
|
||||||
|
import * as smartparam from '@pushrocks/smartparam';
|
||||||
|
|
||||||
export import yargs = require('yargs');
|
export { yargs, smartlog, lik, path, smartparam };
|
||||||
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");
|
|
||||||
|
17
tslint.json
Normal file
17
tslint.json
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"extends": ["tslint:latest", "tslint-config-prettier"],
|
||||||
|
"rules": {
|
||||||
|
"semicolon": [true, "always"],
|
||||||
|
"no-console": false,
|
||||||
|
"ordered-imports": false,
|
||||||
|
"object-literal-sort-keys": false,
|
||||||
|
"member-ordering": {
|
||||||
|
"options":{
|
||||||
|
"order": [
|
||||||
|
"static-method"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"defaultSeverity": "warning"
|
||||||
|
}
|
Reference in New Issue
Block a user