react-native-flip
Version:
164 lines (125 loc) • 3.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _fs() {
const data = _interopRequireDefault(require("fs"));
_fs = function () {
return data;
};
return data;
}
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
// Simplified version of:
// https://github.com/0x00A/prompt-sync/blob/master/index.js
const term = 13; // carriage return
function create() {
return prompt;
function prompt(ask, value, opts) {
let insert = 0;
opts = opts || {};
if (typeof ask === 'object') {
opts = ask;
ask = opts.ask;
} else if (typeof value === 'object') {
opts = value;
value = opts.value;
}
ask = ask || '';
const echo = opts.echo;
const masked = ('echo' in opts);
let fd;
if (process.platform === 'win32') {
// @ts-ignore
fd = process.stdin.fd;
} else {
fd = _fs().default.openSync('/dev/tty', 'rs');
}
const wasRaw = process.stdin.isRaw;
if (!wasRaw && process.stdin.setRawMode) {
process.stdin.setRawMode(true);
}
let buf = Buffer.alloc(3);
let str = '';
let character;
let read;
if (ask) {
process.stdout.write(ask);
}
while (true) {
read = _fs().default.readSync(fd, buf, 0, 3, null);
if (read > 1) {
// received a control sequence
if (buf.toString()) {
str += buf.toString();
str = str.replace(/\0/g, '');
insert = str.length;
process.stdout.write(`\u001b[2K\u001b[0G${ask}${str}`);
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().default.closeSync(fd);
process.exit(130);
if (process.stdin.setRawMode) {
process.stdin.setRawMode(!!wasRaw);
}
return null;
} // catch the terminating character
if (character === term) {
_fs().default.closeSync(fd);
break;
}
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++;
}
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`);
}
process.stdout.write('\u001b[u');
process.stdout.write('\u001b[1C');
}
}
process.stdout.write('\n');
if (process.stdin.setRawMode) {
process.stdin.setRawMode(!!wasRaw);
}
return str || value || '';
}
}
var _default = create;
exports.default = _default;
//# sourceMappingURL=promptSync.js.map