8 Commits

Author SHA1 Message Date
69592933aa 2.0.7 2020-02-02 18:05:50 +00:00
10074b5888 fix(core): update 2020-02-02 18:05:50 +00:00
fe9564e37c 2.0.6 2020-02-02 13:46:49 +00:00
fa5f2d0267 fix(core): update 2020-02-02 13:46:49 +00:00
a4cd5175b3 2.0.5 2020-02-02 13:46:00 +00:00
97c3ccb329 fix(core): update 2020-02-02 13:45:59 +00:00
cfdd54eff1 2.0.4 2018-07-25 17:39:31 +02:00
741365d325 fix(ci): build with right access level for npm 2018-07-25 17:39:31 +02:00
10 changed files with 780 additions and 759 deletions

View File

@ -25,34 +25,7 @@ smart cli interaction
Use TypeScript for best in class instellisense.
```javascript
import { SmartInteract } from 'smartinteract'
let myInteract = new SmartInteract([{ // note: its an array. You can specify multiple questions
name: 'question1',
type: 'input',
message: 'Who are you?',
default: 'Somebody',
validate: (inputString) => { return true } // implement your own validation
}])
myInteract.addQuestions([ ... ]) // add more questions
myInteract.runQueue()
.then(answerBucket => { // the bucket has all the answers of the completed queue
let answerQuestion1 = answerBucket.getAnswerFor('question1')
// do something with the answers
})
// alternatively use .askQuestion() for more direct control
myInteract.askQuestion{ // note: its an array. You can specify multiple questions
name: 'question2',
type: 'confirm',
message: 'Do you speak English?',
default: true,
validate: (inputString) => { return true } // implement your own validation
}().then(answerObject => {
// answerObject looks like { name: 'question2', value: true }
})
```
For further information read the linked docs at the top of this README.

View File

@ -1,6 +1,6 @@
{
"npmci": {
"npmGlobalTools": ["npmts"]
},
"npmAccessLevel": "public"
"npmGlobalTools": ["npmts"],
"npmAccessLevel": "public"
}
}

1366
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
{
"name": "@pushrocks/smartinteract",
"private": false,
"version": "2.0.3",
"version": "2.0.7",
"description": "smart cli interaction",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
@ -25,13 +25,16 @@
},
"homepage": "https://gitlab.com/pushrocks/smartinteract#README",
"dependencies": {
"@pushrocks/lik": "^3.0.1",
"@pushrocks/smartpromise": "^2.0.5",
"@types/inquirer": "0.0.42",
"inquirer": "^6.0.0"
"@pushrocks/lik": "^3.0.13",
"@pushrocks/smartparam": "^1.1.6",
"@pushrocks/smartpromise": "^3.0.6",
"@types/inquirer": "^6.5.0",
"inquirer": "^7.0.4"
},
"devDependencies": {
"@gitzone/tsrun": "^1.1.9",
"@pushrocks/tapbundle": "^3.0.1"
"@gitzone/tsrun": "^1.2.8",
"@pushrocks/tapbundle": "^3.2.0",
"tslint": "^6.0.0",
"tslint-config-prettier": "^1.18.0"
}
}

View File

@ -25,7 +25,36 @@ smart cli interaction
Use TypeScript for best in class instellisense.
For further information read the linked docs at the top of this README.
```javascript
import { SmartInteract } from 'smartinteract'
let myInteract = new SmartInteract([{ // note: its an array. You can specify multiple questions
name: 'question1',
type: 'input',
message: 'Who are you?',
default: 'Somebody',
validate: (inputString) => { return true } // implement your own validation
}])
myInteract.addQuestions([ ... ]) // add more questions
myInteract.runQueue()
.then(answerBucket => { // the bucket has all the answers of the completed queue
let answerQuestion1 = answerBucket.getAnswerFor('question1')
// do something with the answers
})
// alternatively use .askQuestion() for more direct control
myInteract.askQuestion{ // note: its an array. You can specify multiple questions
name: 'question2',
type: 'confirm',
message: 'Do you speak English?',
default: true,
validate: (inputString) => { return true } // implement your own validation
}().then(answerObject => {
// answerObject looks like { name: 'question2', value: true }
})
```
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)

View File

@ -30,14 +30,14 @@ tap.test('should add question to SmartInteract instance', async () => {
{
name: 'some.dotted.name',
type: 'input',
message: 'what is your second favourite color? Answer is red',
message: 'what is your second favourite color? Answer is aValidAnswer',
default: 'aValidAnswer'
}
]);
});
tap.test('should use default value when not in CI', async () => {
let answerBucket = await testInteract.runQueue();
const answerBucket = await testInteract.runQueue();
expect(answerBucket.getAnswerFor('testQuestion1')).to.equal('blue');
expect(answerBucket.getAnswerFor('testQuestion2')).to.equal('red');
expect(answerBucket.getAnswerFor('some.dotted.name')).to.equal('aValidAnswer');

View File

@ -1 +1,2 @@
export * from './smartinteract.classes.smartinteract';
export * from './smartinteract.classes.answerbucket';

View File

@ -0,0 +1,33 @@
import * as plugins from './smartinteract.plugins';
import { IAnswerObject } from './smartinteract.classes.smartinteract';
/**
* class AnswerBucket holds answers
*/
export class AnswerBucket {
private answerMap = new plugins.lik.Objectmap<IAnswerObject>();
/**
* add an answer to the bucket
*/
public addAnswer(answerArg: IAnswerObject) {
this.answerMap.add(answerArg);
}
/**
* gets an answer for a specific name
*/
public getAnswerFor(nameArg: string) {
const answer = this.answerMap.find(answerArg => {
return answerArg.name === nameArg;
});
return answer ? answer.value : null;
}
/**
* gets all answers as array
*/
public getAllAnswers() {
return this.answerMap.getArray();
}
}

View File

@ -1,6 +1,6 @@
import * as plugins from './smartinteract.plugins';
import * as smartpromise from '@pushrocks/smartpromise';
import { Objectmap } from '@pushrocks/lik';
import { AnswerBucket } from './smartinteract.classes.answerbucket';
/**
* the availeable question types
@ -48,7 +48,7 @@ export class SmartInteract {
/**
* holds the qestion queue, that is emptied once you call
*/
private questionMap = new Objectmap<IQuestionObject>();
private questionMap = new plugins.lik.Objectmap<IQuestionObject>();
/**
* constructor of class SmartInteract
@ -76,13 +76,9 @@ export class SmartInteract {
validate: optionsArg.validate
}
])
.then((answers: IAnswerObject[]) => {
.then((answers) => {
// adjust to the fact that now dots define paths for inquirer
let answerValue: any = answers;
let nameArray = optionsArg.name.split('.');
for (let name of nameArray) {
answerValue = answerValue[name];
}
let answerValue = plugins.smartparam.smartGet(answers, optionsArg.name);
done.resolve({
name: optionsArg.name,
value: answerValue
@ -140,34 +136,3 @@ export class SmartInteract {
}
}
}
/**
* class AnswerBucket holds answers
*/
export class AnswerBucket {
answerMap = new Objectmap<IAnswerObject>();
/**
* add an answer to the bucket
*/
addAnswer(answerArg: IAnswerObject) {
this.answerMap.add(answerArg);
}
/**
* gets an answer for a specific name
*/
getAnswerFor(nameArg: string) {
let answer = this.answerMap.find(answerArg => {
return answerArg.name === nameArg;
});
return answer.value;
}
/**
* gets all answers as array
*/
getAllAnswers() {
return this.answerMap.getArray();
}
}

View File

@ -1,3 +1,14 @@
// pushrocks scope
import * as lik from '@pushrocks/lik';
import * as smartparam from '@pushrocks/smartparam';
export {
lik,
smartparam
}
// third party scope
import * as inquirer from 'inquirer';
export { inquirer };