Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F101962950
index.js
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sat, Feb 15, 15:43
Size
6 KB
Mime Type
text/x-c++
Expires
Mon, Feb 17, 15:43 (1 d, 15 h)
Engine
blob
Format
Raw Data
Handle
24257496
Attached To
rOACCT Open Access Compliance Check Tool (OACCT)
index.js
View Options
'use strict'
;
const
assert
=
require
(
'assert'
);
const
Events
=
require
(
'events'
);
const
utils
=
require
(
'./lib/utils'
);
/**
* Create an instance of `Enquirer`.
*
* ```js
* const Enquirer = require('enquirer');
* const enquirer = new Enquirer();
* ```
* @name Enquirer
* @param {Object} `options` (optional) Options to use with all prompts.
* @param {Object} `answers` (optional) Answers object to initialize with.
* @api public
*/
class
Enquirer
extends
Events
{
constructor
(
options
,
answers
)
{
super
();
this
.
options
=
utils
.
merge
({},
options
);
this
.
answers
=
{
...
answers
};
}
/**
* Register a custom prompt type.
*
* ```js
* const Enquirer = require('enquirer');
* const enquirer = new Enquirer();
* enquirer.register('customType', require('./custom-prompt'));
* ```
* @name register()
* @param {String} `type`
* @param {Function|Prompt} `fn` `Prompt` class, or a function that returns a `Prompt` class.
* @return {Object} Returns the Enquirer instance
* @api public
*/
register
(
type
,
fn
)
{
if
(
utils
.
isObject
(
type
))
{
for
(
let
key
of
Object
.
keys
(
type
))
this
.
register
(
key
,
type
[
key
]);
return
this
;
}
assert
.
equal
(
typeof
fn
,
'function'
,
'expected a function'
);
let
name
=
type
.
toLowerCase
();
if
(
fn
.
prototype
instanceof
this
.
Prompt
)
{
this
.
prompts
[
name
]
=
fn
;
}
else
{
this
.
prompts
[
name
]
=
fn
(
this
.
Prompt
,
this
);
}
return
this
;
}
/**
* Prompt function that takes a "question" object or array of question objects,
* and returns an object with responses from the user.
*
* ```js
* const Enquirer = require('enquirer');
* const enquirer = new Enquirer();
*
* const response = await enquirer.prompt({
* type: 'input',
* name: 'username',
* message: 'What is your username?'
* });
* console.log(response);
* ```
* @name prompt()
* @param {Array|Object} `questions` Options objects for one or more prompts to run.
* @return {Promise} Promise that returns an "answers" object with the user's responses.
* @api public
*/
async
prompt
(
questions
=
[])
{
for
(
let
question
of
[].
concat
(
questions
))
{
try
{
if
(
typeof
question
===
'function'
)
question
=
await
question
.
call
(
this
);
await
this
.
ask
(
utils
.
merge
({},
this
.
options
,
question
));
}
catch
(
err
)
{
return
Promise
.
reject
(
err
);
}
}
return
this
.
answers
;
}
async
ask
(
question
)
{
if
(
typeof
question
===
'function'
)
{
question
=
await
question
.
call
(
this
);
}
let
opts
=
utils
.
merge
({},
this
.
options
,
question
);
let
{
type
,
name
}
=
question
;
let
{
set
,
get
}
=
utils
;
if
(
typeof
type
===
'function'
)
{
type
=
await
type
.
call
(
this
,
question
,
this
.
answers
);
}
if
(
!
type
)
return
this
.
answers
[
name
];
assert
(
this
.
prompts
[
type
],
`
Prompt
"${type}"
is
not
registered
`
);
let
prompt
=
new
this
.
prompts
[
type
](
opts
);
let
value
=
get
(
this
.
answers
,
name
);
prompt
.
state
.
answers
=
this
.
answers
;
prompt
.
enquirer
=
this
;
if
(
name
)
{
prompt
.
on
(
'submit'
,
value
=>
{
this
.
emit
(
'answer'
,
name
,
value
,
prompt
);
set
(
this
.
answers
,
name
,
value
);
});
}
// bubble events
let
emit
=
prompt
.
emit
.
bind
(
prompt
);
prompt
.
emit
=
(...
args
)
=>
{
this
.
emit
.
call
(
this
,
...
args
);
return
emit
(...
args
);
};
this
.
emit
(
'prompt'
,
prompt
,
this
);
if
(
opts
.
autofill
&&
value
!=
null
)
{
prompt
.
value
=
prompt
.
input
=
value
;
// if "autofill=show" render the prompt, otherwise stay "silent"
if
(
opts
.
autofill
===
'show'
)
{
await
prompt
.
submit
();
}
}
else
{
value
=
prompt
.
value
=
await
prompt
.
run
();
}
return
value
;
}
/**
* Use an enquirer plugin.
*
* ```js
* const Enquirer = require('enquirer');
* const enquirer = new Enquirer();
* const plugin = enquirer => {
* // do stuff to enquire instance
* };
* enquirer.use(plugin);
* ```
* @name use()
* @param {Function} `plugin` Plugin function that takes an instance of Enquirer.
* @return {Object} Returns the Enquirer instance.
* @api public
*/
use
(
plugin
)
{
plugin
.
call
(
this
,
this
);
return
this
;
}
set
Prompt
(
value
)
{
this
.
_Prompt
=
value
;
}
get
Prompt
()
{
return
this
.
_Prompt
||
this
.
constructor
.
Prompt
;
}
get
prompts
()
{
return
this
.
constructor
.
prompts
;
}
static
set
Prompt
(
value
)
{
this
.
_Prompt
=
value
;
}
static
get
Prompt
()
{
return
this
.
_Prompt
||
require
(
'./lib/prompt'
);
}
static
get
prompts
()
{
return
require
(
'./lib/prompts'
);
}
static
get
types
()
{
return
require
(
'./lib/types'
);
}
/**
* Prompt function that takes a "question" object or array of question objects,
* and returns an object with responses from the user.
*
* ```js
* const { prompt } = require('enquirer');
* const response = await prompt({
* type: 'input',
* name: 'username',
* message: 'What is your username?'
* });
* console.log(response);
* ```
* @name Enquirer#prompt
* @param {Array|Object} `questions` Options objects for one or more prompts to run.
* @return {Promise} Promise that returns an "answers" object with the user's responses.
* @api public
*/
static
get
prompt
()
{
const
fn
=
(
questions
,
...
rest
)
=>
{
let
enquirer
=
new
this
(...
rest
);
let
emit
=
enquirer
.
emit
.
bind
(
enquirer
);
enquirer
.
emit
=
(...
args
)
=>
{
fn
.
emit
(...
args
);
return
emit
(...
args
);
};
return
enquirer
.
prompt
(
questions
);
};
utils
.
mixinEmitter
(
fn
,
new
Events
());
return
fn
;
}
}
utils
.
mixinEmitter
(
Enquirer
,
new
Events
());
const
prompts
=
Enquirer
.
prompts
;
for
(
let
name
of
Object
.
keys
(
prompts
))
{
let
key
=
name
.
toLowerCase
();
let
run
=
options
=>
new
prompts
[
name
](
options
).
run
();
Enquirer
.
prompt
[
key
]
=
run
;
Enquirer
[
key
]
=
run
;
if
(
!
Enquirer
[
name
])
{
Reflect
.
defineProperty
(
Enquirer
,
name
,
{
get
:
()
=>
prompts
[
name
]
});
}
}
const
exp
=
name
=>
{
utils
.
defineExport
(
Enquirer
,
name
,
()
=>
Enquirer
.
types
[
name
]);
};
exp
(
'ArrayPrompt'
);
exp
(
'AuthPrompt'
);
exp
(
'BooleanPrompt'
);
exp
(
'NumberPrompt'
);
exp
(
'StringPrompt'
);
module
.
exports
=
Enquirer
;
Event Timeline
Log In to Comment