project1
This commit is contained in:
21
nodeJS/Project/01/node_modules/prompt-sync/LICENSE
generated
vendored
Normal file
21
nodeJS/Project/01/node_modules/prompt-sync/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014-2019 Paolo Fragomeni & David Mark Clements
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
118
nodeJS/Project/01/node_modules/prompt-sync/README.md
generated
vendored
Normal file
118
nodeJS/Project/01/node_modules/prompt-sync/README.md
generated
vendored
Normal file
@@ -0,0 +1,118 @@
|
||||
# SYNOPSIS
|
||||
A sync prompt for node. very simple. no C++ bindings and no bash scripts.
|
||||
|
||||
Works on Linux, OS X and Windows.
|
||||
|
||||
# BASIC MODE
|
||||
```js
|
||||
|
||||
var prompt = require('prompt-sync')();
|
||||
//
|
||||
// get input from the user.
|
||||
//
|
||||
var n = prompt('How many more times? ');
|
||||
```
|
||||
# WITH HISTORY
|
||||
|
||||
History is an optional extra, to use simply install the history plugin.
|
||||
|
||||
```sh
|
||||
npm install --save prompt-sync-history
|
||||
```
|
||||
|
||||
```js
|
||||
var prompt = require('prompt-sync')({
|
||||
history: require('prompt-sync-history')() //open history file
|
||||
});
|
||||
//get some user input
|
||||
var input = prompt()
|
||||
prompt.history.save() //save history back to file
|
||||
```
|
||||
|
||||
See the [prompt-sync-history](http://npm.im/prompt-sync-history) module
|
||||
for options, or fork it for customized behaviour.
|
||||
|
||||
# API
|
||||
|
||||
## `require('prompt-sync')(config) => prompt`
|
||||
|
||||
Returns an instance of the `prompt` function.
|
||||
Takes `config` option with the following possible properties
|
||||
|
||||
`sigint`: Default is `false`. A ^C may be pressed during the input process to abort the text entry. If sigint it `false`, prompt returns `null`. If sigint is `true` the ^C will be handled in the traditional way: as a SIGINT signal causing process to exit with code 130.
|
||||
|
||||
`eot`: Default is `false`. A ^D pressed as the first character of an input line causes prompt-sync to echo `exit` and exit the process with code 0.
|
||||
|
||||
`autocomplete`: A completer function that will be called when user enters TAB to allow for autocomplete. It takes a string as an argument an returns an array of strings that are possible matches for completion. An empty array is returned if there are no matches.
|
||||
|
||||
`history`: Takes an object that supplies a "history interface", see [prompt-sync-history](http://npm.im/prompt-sync-history) for an example.
|
||||
|
||||
## `prompt(ask, value, opts)`
|
||||
|
||||
`ask` is the label of the prompt, `value` is the default value
|
||||
in absence of a response.
|
||||
|
||||
The `opts` argument can also be in the first or second parameter position.
|
||||
|
||||
Opts can have the following properties
|
||||
|
||||
`echo`: Default is `'*'`. If set the password will be masked with the specified character. For hidden input, set echo to `''` (or use `prompt.hide`).
|
||||
|
||||
`autocomplete`: Overrides the instance `autocomplete` function to allow for custom
|
||||
autocompletion of a particular prompt.
|
||||
|
||||
`value`: Same as the `value` parameter, the default value for the prompt. If `opts`
|
||||
is in the third position, this property will *not* overwrite the `value` parameter.
|
||||
|
||||
`ask`: Sames as the `value` parameter. The prompt label. If `opts` is not in the first position, the `ask` parameter will *not* be overridden by this property.
|
||||
|
||||
## `prompt.hide(ask)`
|
||||
|
||||
Convenience method for creating a standard hidden password prompt,
|
||||
this is the same as `prompt(ask, {echo: ''})`
|
||||
|
||||
|
||||
# LINE EDITING
|
||||
Line editing is enabled in the non-hidden mode. (use up/down arrows for history and backspace and left/right arrows for editing)
|
||||
|
||||
History is not set when using hidden mode.
|
||||
|
||||
# EXAMPLES
|
||||
|
||||
```js
|
||||
//basic:
|
||||
console.log(require('prompt-sync')()('tell me something about yourself: '))
|
||||
|
||||
var prompt = require('prompt-sync')({
|
||||
history: require('prompt-sync-history')(),
|
||||
autocomplete: complete(['hello1234', 'he', 'hello', 'hello12', 'hello123456']),
|
||||
sigint: false
|
||||
});
|
||||
|
||||
var value = 'frank';
|
||||
var name = prompt('enter name: ', value);
|
||||
console.log('enter echo * password');
|
||||
var pw = prompt({echo: '*'});
|
||||
var pwb = prompt('enter hidden password (or don\'t): ', {echo: '', value: '*pwb default*'})
|
||||
var pwc = prompt.hide('enter another hidden password: ')
|
||||
var autocompleteTest = prompt('custom autocomplete: ', {
|
||||
autocomplete: complete(['bye1234', 'by', 'bye12', 'bye123456'])
|
||||
});
|
||||
|
||||
prompt.history.save();
|
||||
|
||||
console.log('\nName: %s\nPassword *: %s\nHidden password: %s\nAnother Hidden password: %s', name, pw, pwb, pwc);
|
||||
console.log('autocomplete2: ', autocompleteTest);
|
||||
|
||||
function complete(commands) {
|
||||
return function (str) {
|
||||
var i;
|
||||
var ret = [];
|
||||
for (i=0; i< commands.length; i++) {
|
||||
if (commands[i].indexOf(str) == 0)
|
||||
ret.push(commands[i]);
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
};
|
||||
```
|
||||
243
nodeJS/Project/01/node_modules/prompt-sync/index.js
generated
vendored
Normal file
243
nodeJS/Project/01/node_modules/prompt-sync/index.js
generated
vendored
Normal file
@@ -0,0 +1,243 @@
|
||||
'use strict'
|
||||
|
||||
var fs = require('fs');
|
||||
var stripAnsi = require('strip-ansi');
|
||||
var term = 13; // carriage return
|
||||
|
||||
/**
|
||||
* create -- sync function for reading user input from stdin
|
||||
* @param {Object} config {
|
||||
* sigint: {Boolean} exit on ^C
|
||||
* autocomplete: {StringArray} function({String})
|
||||
* history: {String} a history control object (see `prompt-sync-history`)
|
||||
* }
|
||||
* @returns {Function} prompt function
|
||||
*/
|
||||
|
||||
// for ANSI escape codes reference see https://en.wikipedia.org/wiki/ANSI_escape_code
|
||||
|
||||
function create(config) {
|
||||
|
||||
config = config || {};
|
||||
var sigint = config.sigint;
|
||||
var eot = config.eot;
|
||||
var autocomplete = config.autocomplete =
|
||||
config.autocomplete || function(){return []};
|
||||
var history = config.history;
|
||||
prompt.history = history || {save: function(){}};
|
||||
prompt.hide = function (ask) { return prompt(ask, {echo: ''}) };
|
||||
|
||||
return prompt;
|
||||
|
||||
|
||||
/**
|
||||
* prompt -- sync function for reading user input from stdin
|
||||
* @param {String} ask opening question/statement to prompt for
|
||||
* @param {String} value initial value for the prompt
|
||||
* @param {Object} opts {
|
||||
* echo: set to a character to be echoed, default is '*'. Use '' for no echo
|
||||
* value: {String} initial value for the prompt
|
||||
* ask: {String} opening question/statement to prompt for, does not override ask param
|
||||
* autocomplete: {StringArray} function({String})
|
||||
* }
|
||||
*
|
||||
* @returns {string} Returns the string input or (if sigint === false)
|
||||
* null if user terminates with a ^C
|
||||
*/
|
||||
|
||||
|
||||
function prompt(ask, value, opts) {
|
||||
var insert = 0, savedinsert = 0, res, i, savedstr;
|
||||
opts = opts || {};
|
||||
|
||||
if (Object(ask) === ask) {
|
||||
opts = ask;
|
||||
ask = opts.ask;
|
||||
} else if (Object(value) === value) {
|
||||
opts = value;
|
||||
value = opts.value;
|
||||
}
|
||||
ask = ask || '';
|
||||
var echo = opts.echo;
|
||||
var masked = 'echo' in opts;
|
||||
autocomplete = opts.autocomplete || autocomplete;
|
||||
|
||||
var fd = (process.platform === 'win32') ?
|
||||
process.stdin.fd :
|
||||
fs.openSync('/dev/tty', 'rs');
|
||||
|
||||
var wasRaw = process.stdin.isRaw;
|
||||
if (!wasRaw) { process.stdin.setRawMode && process.stdin.setRawMode(true); }
|
||||
|
||||
var buf = Buffer.alloc(3);
|
||||
var str = '', character, read;
|
||||
|
||||
savedstr = '';
|
||||
|
||||
if (ask) {
|
||||
process.stdout.write(ask);
|
||||
}
|
||||
|
||||
var cycle = 0;
|
||||
var prevComplete;
|
||||
|
||||
while (true) {
|
||||
read = fs.readSync(fd, buf, 0, 3);
|
||||
if (read > 1) { // received a control sequence
|
||||
switch(buf.toString()) {
|
||||
case '\u001b[A': //up arrow
|
||||
if (masked) break;
|
||||
if (!history) break;
|
||||
if (history.atStart()) break;
|
||||
|
||||
if (history.atEnd()) {
|
||||
savedstr = str;
|
||||
savedinsert = insert;
|
||||
}
|
||||
str = history.prev();
|
||||
insert = str.length;
|
||||
process.stdout.write('\u001b[2K\u001b[0G' + ask + str);
|
||||
break;
|
||||
case '\u001b[B': //down arrow
|
||||
if (masked) break;
|
||||
if (!history) break;
|
||||
if (history.pastEnd()) break;
|
||||
|
||||
if (history.atPenultimate()) {
|
||||
str = savedstr;
|
||||
insert = savedinsert;
|
||||
history.next();
|
||||
} else {
|
||||
str = history.next();
|
||||
insert = str.length;
|
||||
}
|
||||
process.stdout.write('\u001b[2K\u001b[0G'+ ask + str + '\u001b['+(insert+ask.length+1)+'G');
|
||||
break;
|
||||
case '\u001b[D': //left arrow
|
||||
if (masked) break;
|
||||
var before = insert;
|
||||
insert = (--insert < 0) ? 0 : insert;
|
||||
if (before - insert)
|
||||
process.stdout.write('\u001b[1D');
|
||||
break;
|
||||
case '\u001b[C': //right arrow
|
||||
if (masked) break;
|
||||
insert = (++insert > str.length) ? str.length : insert;
|
||||
process.stdout.write('\u001b[' + (insert+ask.length+1) + 'G');
|
||||
break;
|
||||
default:
|
||||
if (buf.toString()) {
|
||||
str = str + buf.toString();
|
||||
str = str.replace(/\0/g, '');
|
||||
insert = str.length;
|
||||
promptPrint(masked, ask, echo, str, insert);
|
||||
process.stdout.write('\u001b[' + (insert+ask.length+1) + 'G');
|
||||
buf = Buffer.alloc(3);
|
||||
}
|
||||
}
|
||||
continue; // any other 3 character sequence is ignored
|
||||
}
|
||||
|
||||
// if it is not a control character seq, assume only one character is read
|
||||
character = buf[read-1];
|
||||
|
||||
// catch a ^C and return null
|
||||
if (character == 3){
|
||||
process.stdout.write('^C\n');
|
||||
fs.closeSync(fd);
|
||||
|
||||
if (sigint) process.exit(130);
|
||||
|
||||
process.stdin.setRawMode && process.stdin.setRawMode(wasRaw);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
// catch a ^D and exit
|
||||
if (character == 4) {
|
||||
if (str.length == 0 && eot) {
|
||||
process.stdout.write('exit\n');
|
||||
process.exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
// catch the terminating character
|
||||
if (character == term) {
|
||||
fs.closeSync(fd);
|
||||
if (!history) break;
|
||||
if (!masked && str.length) history.push(str);
|
||||
history.reset();
|
||||
break;
|
||||
}
|
||||
|
||||
// catch a TAB and implement autocomplete
|
||||
if (character == 9) { // TAB
|
||||
res = autocomplete(str);
|
||||
|
||||
if (str == res[0]) {
|
||||
res = autocomplete('');
|
||||
} else {
|
||||
prevComplete = res.length;
|
||||
}
|
||||
|
||||
if (res.length == 0) {
|
||||
process.stdout.write('\t');
|
||||
continue;
|
||||
}
|
||||
|
||||
var item = res[cycle++] || res[cycle = 0, cycle++];
|
||||
|
||||
if (item) {
|
||||
process.stdout.write('\r\u001b[K' + ask + item);
|
||||
str = item;
|
||||
insert = item.length;
|
||||
}
|
||||
}
|
||||
|
||||
if (character == 127 || (process.platform == 'win32' && character == 8)) { //backspace
|
||||
if (!insert) continue;
|
||||
str = str.slice(0, insert-1) + str.slice(insert);
|
||||
insert--;
|
||||
process.stdout.write('\u001b[2D');
|
||||
} else {
|
||||
if ((character < 32 ) || (character > 126))
|
||||
continue;
|
||||
str = str.slice(0, insert) + String.fromCharCode(character) + str.slice(insert);
|
||||
insert++;
|
||||
};
|
||||
|
||||
promptPrint(masked, ask, echo, str, insert);
|
||||
|
||||
}
|
||||
|
||||
process.stdout.write('\n')
|
||||
|
||||
process.stdin.setRawMode && process.stdin.setRawMode(wasRaw);
|
||||
|
||||
return str || value || '';
|
||||
};
|
||||
|
||||
|
||||
function promptPrint(masked, ask, echo, str, insert) {
|
||||
if (masked) {
|
||||
process.stdout.write('\u001b[2K\u001b[0G' + ask + Array(str.length+1).join(echo));
|
||||
} else {
|
||||
process.stdout.write('\u001b[s');
|
||||
if (insert == str.length) {
|
||||
process.stdout.write('\u001b[2K\u001b[0G'+ ask + str);
|
||||
} else {
|
||||
if (ask) {
|
||||
process.stdout.write('\u001b[2K\u001b[0G'+ ask + str);
|
||||
} else {
|
||||
process.stdout.write('\u001b[2K\u001b[0G'+ str + '\u001b[' + (str.length - insert) + 'D');
|
||||
}
|
||||
}
|
||||
|
||||
// Reposition the cursor to the right of the insertion point
|
||||
var askLength = stripAnsi(ask).length;
|
||||
process.stdout.write(`\u001b[${askLength+1+(echo==''? 0:insert)}G`);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = create;
|
||||
40
nodeJS/Project/01/node_modules/prompt-sync/package.json
generated
vendored
Normal file
40
nodeJS/Project/01/node_modules/prompt-sync/package.json
generated
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"name": "prompt-sync",
|
||||
"version": "4.2.0",
|
||||
"description": "a synchronous prompt for node.js",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "node test"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/heapwolf/prompt-sync.git"
|
||||
},
|
||||
"keywords": [
|
||||
"prompt",
|
||||
"sync",
|
||||
"blocking",
|
||||
"readline",
|
||||
"input",
|
||||
"getline",
|
||||
"repl",
|
||||
"history"
|
||||
],
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Paolo Fragomeni",
|
||||
"email": "paolo@async.ly"
|
||||
},
|
||||
{
|
||||
"name": "David Mark Clements",
|
||||
"email": "david.clements@nearform.com"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"prompt-sync-history": "^1.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"strip-ansi": "^5.0.0"
|
||||
}
|
||||
}
|
||||
38
nodeJS/Project/01/node_modules/prompt-sync/test.js
generated
vendored
Normal file
38
nodeJS/Project/01/node_modules/prompt-sync/test.js
generated
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
//basic:
|
||||
console.log(require('./')()('tell me something about yourself: '))
|
||||
|
||||
// ANSI escape codes colored text test
|
||||
require('./')()('\u001B[31mcolored text: \u001B[39m');
|
||||
|
||||
var prompt = require('./')({
|
||||
history: require('prompt-sync-history')(),
|
||||
autocomplete: complete(['hello1234', 'he', 'hello', 'hello12', 'hello123456']),
|
||||
sigint: false
|
||||
});
|
||||
|
||||
var value = 'frank';
|
||||
var name = prompt('enter name: ', value);
|
||||
console.log('enter echo * password');
|
||||
var pw = prompt({echo: '*'});
|
||||
var pwb = prompt('enter hidden password (or don\'t): ', {echo: '', value: '*pwb default*'})
|
||||
var pwc = prompt.hide('enter another hidden password: ')
|
||||
var autocompleteTest = prompt('custom autocomplete: ', {
|
||||
autocomplete: complete(['bye1234', 'by', 'bye12', 'bye123456'])
|
||||
});
|
||||
|
||||
prompt.history.save();
|
||||
|
||||
console.log('\nName: %s\nPassword *: %s\nHidden password: %s\nAnother Hidden password: %s', name, pw, pwb, pwc);
|
||||
console.log('autocomplete2: ', autocompleteTest);
|
||||
|
||||
function complete(commands) {
|
||||
return function (str) {
|
||||
var i;
|
||||
var ret = [];
|
||||
for (i=0; i< commands.length; i++) {
|
||||
if (commands[i].indexOf(str) == 0)
|
||||
ret.push(commands[i]);
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user