npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

y-prompt

v1.0.12

Published

A configurable terminal prompter for nodejs.

Downloads

5

Readme

y-prompt

A configurable terminal prompter for nodejs.

Install :

npm install y-prompt

Ask your questions and process the result:

	const Prompt=require('y-prompt');
	// use predefined types
	Prompt.baseTypes();
	// --- prompt your questions
	Prompt.prompter()
	// prepare your questions
	.log(datas=>'\n--------- Start prompt ---------\n')
	.ask('yn','response','do you say yes or no ?',{defaultValue:'n'})
	.log(datas=>'\n--------- End prompt ('+datas.response+') ---------\n')
	// launch the prompt
	.start()
	.then(function(datas){
		// process the result
		var answer=['No','Yes'][datas.response?1:0];
		console.log('\n- anwser='+answer+'\n- data='+JSON.stringify(datas));

		// **** if y displays :
		//- anwser=Yes
		//- data={response:true}

		// **** if n displays :
		//- anwser=No
		//- data={response:false}

		process.exit();
	});

A more elabored exemple can be found in test_prompt.js .

Launch demo :

cd node_modules/y-prompt
node test_prompt

Menu

Types.

The types definitions is the root feature of 'y-prompt'. This is where you define what type of question you can ask an what kind of data you expect.

Base types.

On your first uses, you may want to use 'y-prompt' base types instead before defining your owns (in this case go directly to Make a prompter), or you may simply use them whith yours.

	// ...
	// use predefined types
	Prompt.baseTypes();

The file where they are defined is shortly documented on their behaviours and shows many exemples of type definitions (YPrompt.baseTypes.js).

Define types.

define a new type with Prompt.addType:

	/**
	Add a new question type.
	@param {string} name : the type name.
	@param {function(inpt,onError,params)} check : return true if input is valid, else call onError.<br/>
	- {string} input : the current entry value<br/>
	- {function(message)} onError : Call to send an error message when the input is invalid.<br/>
	- {object} params : The parameters you may add to a quetion.<br/>
	@param {function(input,params)} transform : return the data corresponding to 'input'.
	- {string} input : the current entry value<br/>
	- {object} params : The parameters you may add to a quetion.<br/>
	@param {string} [parentType] : inherits its behaviour from a parent type if 'parentType' is defined. The parent will check and transform the data before passing it to the child method
	@param {any} [defaultValue] : defines a default value. Its use is deprecated since it remove the possibility to make the answer mandatory.
	*/
	Prompt.addType(name,check,transform,parentType,defaultValue);

Exemple from base types :

	// ...
	/**
	gets a 'y' (for Yes) or 'n' (for No) answer as a boolean
	*/
	Prompt.addType('yn',
		function(inpt,onerr,params){//check
			if(['n','y'].indexOf(inpt.toLowerCase())>-1){
				return 1;
			}else{
				onerr(`'${inpt}' is not a valid answer, accepted are 'y' for yes or 'n' for no.`);
			}

		},
		function(inpt){return !!(['n','y'].indexOf(inpt.toLowerCase()));}//transform gets boolean
	);

Configuration.

You can change the appearance of the prompt by changing the configuration styles for varName,type,value,defaultValue,error.

	// ...
	Prompt.config.style.varName='green';

Make a prompter.

The first step is to create a new prompter.

	// ... dont forget to init types before
	// ...
	var prompter=Prompt.prompter();

Use the prompter to prepare your questions and get the result. NB: All the prompter actions ar chainables except 'start'.

Prompter basics.

prompter.log

Log a message between quesions.

	/**
	Log a message between quesions.
	@param {string} message : will be logged to the console in time.
	@return {Prompter} the current prompter.
	*/
	prompter.log(message);

prompter.ask

Ask a question.

	/**
	Ask a question.
	@param {string} type : the name of the type used for the question.
	@param {string} varName : the name of the data property to witch the result will be assigned.
	@param {string} message : the question you want to ask.
	@param {object} [params] : specific questions parameters.<br/>
	@return {Prompter} the current prompter.
	*/
	prompter.ask(type,varName,message,params);

Prompter conditionnals.

prompter.askIf

adds a conditionnal prompter.

	/**
	adds a conditionnal prompter.
	@param {string} varName : data property to witch the  the resulting object will be assigned.<br/>
	If not a string, resulting object properties are directky applied to the parent object.
	@param {function(datas,localDatas)} condition : return true when condition ok.<br/>
	- {object} datas : The current global datas.<br/>
	- {object} localDatas : The current prompter datas.<br/>
	@param {function(prompter,datas,localDatas)} collector : calls for a new collector if condition ok.<br/>
	- {Prompter} prompter : the prompter used to collect new questions.<br/>
	- {object} datas : The current global datas.<br/>
	- {object} localDatas : The local prompter datas.<br/>
	@return {Prompter} the current prompter.
	*/
	prompter.askIf(varName,condition,collector);

prompter.elseIf

adds a conditionnal prompter if preceeding conditions are not ok.

	/**
	adds a conditionnal prompter if preceeding conditions are not ok.<br/>
	can be only called after askIf or elseIf.
	@param {string} varName : data property to witch the  the resulting object will be assigned.<br/>
	If not a string, resulting object properties are directky applied to the parent object.
	@param {function(datas,localDatas)} condition : return true when condition ok.<br/>
	- {object} datas : The current global datas.<br/>
	- {object} localDatas : The current prompter datas.<br/>
	@param {function(prompter,datas,localDatas)} collector : calls for a new collector if condition ok.<br/>
	- {Prompter} prompter : the prompter used to collect new questions.<br/>
	- {object} datas : The current global datas.<br/>
	- {object} localDatas : The local prompter datas.<br/>
	@return {Prompter} the current prompter.
	*/
	prompter.elseIf(varName,condition,collector);

prompter.else

adds a prompter if preceeding conditions are not ok.

	/**
	adds a prompter if preceeding conditions are not ok.<br/>
	can be only called after askIf or elseIf.
	@param {string} varName : data property to witch the  the resulting object will be assigned.<br/>
	If not a string, resulting object properties are directky applied to the parent object.
	@param {function(prompter,datas,localDatas)} collector : calls for a new collector if condition ok.<br/>
	- {Prompter} prompter : the prompter used to collect new questions.<br/>
	- {object} datas : The current global datas.<br/>
	- {object} localDatas : The local prompter datas.<br/>
	@return {Prompter} the current prompter.
	*/
	prompter.else(varName,collector);

Prompter loops.

prompter.askWhile

Calls for prompters while condition is ok.

	/**
	Calls for collector while condition is ok. Creates an array of objects.<br/>
	@param {string} varName : data property to witch the  the resulting array will be assigned.<br/>
	@param {function(datas,localDatas)} condition : return true when condition ok.<br/>
	- {object} datas : The current global datas.<br/>
	- {object} localDatas : The current prompter datas.<br/>
	@param {function(prompter,datas,localDatas)} collector : calls for a new collector eatch time condition ok.<br/>
	- {Prompter} prompter : the prompter used to collect new questions.<br/>
	- {object} datas : The current global datas.<br/>
	- {object} localDatas : The local prompter datas.<br/>
	@return {Prompter} the current prompter.
	*/
	prompter.askWhile(varName,condition,collector);

prompter.askLoop

Calls for prompters a number of times.

/**
	Calls for collector 'nbLoop' times. Creates an array of objects.<br/>
	@param {string} varName : data property to witch the  the resulting array will be assigned.<br/>
	@param {number>0|function} nbLoop : is or returns the size of the resulting array.<br/>
	@param {function(prompter,datas,localDatas)} collector : calls for a new collector 'nbLoop' times.<br/>
	- {Prompter} prompter : the prompter used to collect new questions.<br/>
	- {object} datas : The current global datas.<br/>
	- {object} localDatas : The local prompter datas.<br/>
	@return {Prompter} the current prompter.
	*/
	prompter.askLoop(varName,nbLoop,collector);

Get the result.

prompter.start

	/**
	Starts the prompt session.<br/>
	Does not return a prompter. 'start' is the final action, call it only when all questions are prepared.
	@return {Promise} a promise flushed with the resulting datas when all questions are answered.
	*/
	prompter.start().then(datas=>{/* proceed result */})

Exemples.