1.4.0 • Published 3 years ago

@simplyappdevs/nodejs-prompt v1.4.0

Weekly downloads
-
License
GPL-3.0
Repository
github
Last release
3 years ago

NodeJS Prompt System

Module to get input from user that supports 1 to n prompt(s) and also prompt with options.

Why

There already bunch of similar modules on NPM ... but then why not :)? Kidding aside, we learn better by doing, so made this module to learn/hone working w/ Typescript, Unit Test, Test Coverage, and NPM.

Notable Features

  • Prompt with configuration
  • Single or multiple prompts
  • Prompt with options
  • Default value for prompt
  • ...few others

Notable Stacks

  • Typescript
  • Node readline, process.stdin, and process.stdout
  • Reductive promise chaining
  • Jest with ts-jest
  • readline mock

Install

  • npm i @simplyappdevs/nodejs-prompt

Manual Build

  • Clone repo: git clone https://github.com/simplyappdevs/nodejs-prompt
  • CWD: cd nodejs-prompt
  • Install deps: npm i
  • Clear existing output: npm run clean
  • Build module: npm run build
  • Test: npm test

Example

Examples on how to use this module is available from https://github.com/simplyappdevs/nodejs-prompt-example

Reminder for ESM Application

npm exec command option

You will need to run your application with --es-module-specifier-resolution=node option.

Ex: "exec": "node --es-module-specifier-resolution=node ./dist/index.js" for your NPM script npm run exec.

Configure package.json

Set type to module "type": "module"

{
  "name": "nodejs-prompt-example",
  "version": "1.0.0",
  "description": "My Awesome App",
  "main": "index.js",
  "type": "module",
  "scripts": {
  }
}

Configure tsconfig.json

Set module to one of ECMA script "module": "esnext" in compilerOptions section

{
  "compilerOptions": {
    "module": "esnext",
  }
}

Set module resolution to node "moduleResolution": "node" in compilerOptions section

{
  "compilerOptions": {
    "moduleResolution": "node",
  }
}

Usage

// import
import prompter, {PromptInput, PromptResult, PromptItem} from '@simplyappdevs/nodejs-prompt';

// prompt 1
const inp01: PromptInput = {
  id: 'inp01',
  allowEmptyValue: false,
  defaultValue: '',
  endIfEmpty: false,
  valueToEndPrompt: '',
  prompt: 'Enter first name'
};

const inp02: PromptInput = {
  ...inp01,
  prompt: 'Enter last name'
};

const inp03: PromptInput = {
  ...inp02,
  endIfEmpty: true,
  promptList: [
    {id: 1, key: 'M', text: 'Male'},
    {id: 2, key: 'F', text: 'Female'}
  ],
  prompt: 'Enter your gender'
};

const inp04: PromptInput = {
  ...inp02,
  endIfEmpty: false,
  allowEmptyValue: true,
  defaultValue: 'Secret',
  prompt: 'Enter your age'
};

// single prompt
prompter.prompt(inp01).then((res: PromptResult) => {
  console.log(`User entered: ${res.enteredValue}`);
}).catch((err)=>{
  console.log(`Error: ${err.message}`);
});

// single prompt with options
prompter.prompt(inp03).then((res: PromptResult) => {
  console.log(`User entered: ${res.enteredValue}`);
}).catch((err)=>{
  console.log(`Error: ${err.message}`);
});

// multi prompts
prompter.prompts([inp01, inp02, inp03, inp04]).then((res: PromptResult[]) => {
  console.log(`User entered: ${res[0].enteredValue}`);
  console.log(`User entered: ${res[1].enteredValue}`);
  console.log(`User entered: ${res[2].enteredValue}`);
  console.log(`User entered: ${res[3].enteredValue}`);
}).catch((err)=>{
  console.log(`Error: ${err.message}`);
});

Objects

PromptInput

PropertyTypeRequiredComment
idstringYUnique id for this prompt (useful in multi-prompt)
allowEmptyValuebooleanYAccept empty string '' as a valid input
defaultValuestringYValue to use if user entered empty string ''
endIfEmptybooleanYTrue will end prompt session if user enter empty string ''
valueToEndPromptstringNFuture used?
promptstringYPrompt text
promptListTitlestringNPrompt list title
promptListPromptItem[]NList of prompt options

PromptItem

PropertyTypeRequiredComment
idnumberYUnique id for this option
keystringYValue to select this option
textstringYPrompt option text

PromptResult (extends PromptInput)

PropertyTypeComment
enteredValuestringReturns what the user entered

Methods

Single prompt: prompter.prompt() returns Promise<PromptResult>

Multi prompts: prompter.prompts() returns Promise<PromptResult[]>

Information

Brought to you by www.simplyappdevs.com (2021)

1.4.0

3 years ago

1.3.0

3 years ago

1.2.5

3 years ago

1.2.0

4 years ago

1.1.6

4 years ago

1.1.5

4 years ago

1.1.4

4 years ago

1.1.3

4 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.1.2

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago