Skip to content

Middlelayer for Inquirer.js to allow prompting even when output is piped

License

Notifications You must be signed in to change notification settings

miraclx/ninjaQuery

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NinjaQuery

Middlelayer for Inquirer.js to allow prompting even when output is piped

NPM Version NPM Downloads

NPM

Installing

Via NPM:

npm install ninja_query

Usage

// Node CommonJS
const ninjaQuery = require('ninja_query');
// Or Node ES6
import ninjaQuery from 'ninja_query';

Examples

// Use ninjaQuery just like you use 
ninjaQuery({
  name: "name",
  message: "What is your name?"
}).then(({name}) => console.log(`Hello, ${name}`))

API

ninjaQuery(questions)

Launch the prompt interface (inquiry session)

ninjaQuery.extend(templateID[, question])

Merge the templateID's default Question with the specified question object.

ninjaQuery.password(question[, options])

  • question: <Question> Question block to be used
  • options: <Object> Password options
    • confirm: <string> Whether or not to request a re-enter for confirmation of input. Default: false
    • confirmMessage: <string> Message to print on the re-enter prompt. Default: 'Re enter password ?'
    • unmatchMessage: <string> Message to print when passwords don't match. Default: '[!] Password mismatch'
  • Returns: <Promise>

Construct a password prompt that inherits from DefaultQuestions.password and can request a password re-entry for confirmation.

ninjaQuery.defaults: DefaultQuestions

Question

A question object is a hash containing question related values:

  • type: <string> Type of the prompt.
  • name: <string> The name to use when storing the answer in the answers hash. If the name contains periods, it will define a path in the answers hash.
  • message: <string| (rootObject: object) => string > The question to print. If defined as a function, the first parameter will be the current inquirer session answers. Defaults to the value of name (followed by a colon).
  • default: <string|number|boolean|array|function> Default value(s) to use if nothing is entered, or a function that returns the default value(s). If defined as a function, the first parameter will be the current inquirer session answers.
  • choices: <array| (rootObject: object) => array > Choices array or a function returning a choices array. If defined as a function, the first parameter will be the current inquirer session answers. Array values can be simple numbers, strings, or objects containing a name (to display in list), a value (to save in the answers hash) and a short (to display after selection) properties. The choices array can also contain a Separator.
  • validate: < (input: string, hash: object) => boolean > Receive the user input and answers hash. Should return true if the value is valid, and an error message (String) otherwise. If false is returned, a default error message is provided.
  • filter: < input => string > Receive the user input and return the filtered value to be used inside the program. The value returned will be added to the Answers hash.
  • transformer: < (input: string, hash: object, flags: object) => string > Receive the user input, answers hash and option flags, and return a transformed value to display to the user. The transformation only impacts what is shown while editing. It does not modify the answers hash.
  • when: < hash => boolean > Receive the current user answers hash and should return true or false depending on whether or not this question should be asked. The value can also be a simple boolean.
  • pageSize: <number> Change the number of lines that will be rendered when using list, rawList, expand or checkbox.
  • prefix: <string> Change the default prefix message.
  • suffix: <string> Change the default suffix message.

DefaultQuestions

Default templates for Question

- password

name type message validate
'password' 'password' 'Please enter a password :' function
- `validate`: Password must be 4 characters or more
  - **else** `'Password should contain at least 4 characters'`
  • confirm

    name type message
    'confirm' 'confirm' 'Are you sure?'
  • name

    name type message filter transformer validate
    'name' 'input' 'Enter full name :' function function function
    • filter: Autocapitalise first character
    • validate: A least one character must be present
    • transform: Autocapitalise first character, colorise when [Enter] is pressed
  • username

    name type message validate
    'username' 'input' 'Enter user name :' function
    • validate: A least one character must be present
  • email

    name type message transformer validate
    'email' 'input' 'Enter your email :' function function
    • validate: Email must be valid
      • else 'Email invalid'
    • transform: Colorise email once email is valid
  • dateofbirth

    name type message filter transformer validate suffix
    'dateofbirth' 'input' 'Date Of Birth ' function function function '[ddmmyy]:'
    • filter: Insert separator '/' to date in answers
    • validate: Must be a valid date in the format 'dd/mm/yy'
      • else 'Date of birth should match the format [dd/mm/yy]'
    • transform: Insert separator '/' to date on input

More Examples

Check out some examples in the examples folder

$ node examples/form.js
$ node examples/login.js
$ node examples/password.js

Development

Building

Feel free to clone, use in adherance to the license and perhaps send pull requests

git clone https://github.com/miraclx/ninjaQuery.git
cd ninjaquery
npm install
# hack on code
npm run build

License

Apache 2.0 © Miraculous Owonubi (@miraclx) <omiraculous@gmail.com>