summaryrefslogtreecommitdiff
path: root/cli/rt/41_prompt.js
diff options
context:
space:
mode:
Diffstat (limited to 'cli/rt/41_prompt.js')
-rw-r--r--cli/rt/41_prompt.js66
1 files changed, 66 insertions, 0 deletions
diff --git a/cli/rt/41_prompt.js b/cli/rt/41_prompt.js
new file mode 100644
index 000000000..5a588def1
--- /dev/null
+++ b/cli/rt/41_prompt.js
@@ -0,0 +1,66 @@
+// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
+((window) => {
+ const { stdin, stdout } = window.__bootstrap.files;
+ const { isatty } = window.__bootstrap.tty;
+ const LF = "\n".charCodeAt(0);
+ const encoder = new TextEncoder();
+ const decoder = new TextDecoder();
+
+ function alert(message = "Alert") {
+ if (!isatty(stdin.rid)) {
+ return;
+ }
+
+ stdout.writeSync(encoder.encode(`${message} [Enter] `));
+
+ readLineFromStdinSync();
+ }
+
+ function confirm(message = "Confirm") {
+ if (!isatty(stdin.rid)) {
+ return false;
+ }
+
+ stdout.writeSync(encoder.encode(`${message} [y/N] `));
+
+ const answer = readLineFromStdinSync();
+
+ return answer === "Y" || answer === "y";
+ }
+
+ function prompt(message = "Prompt", defaultValue) {
+ defaultValue ??= null;
+
+ if (!isatty(stdin.rid)) {
+ return null;
+ }
+
+ stdout.writeSync(encoder.encode(`${message} `));
+
+ if (defaultValue) {
+ stdout.writeSync(encoder.encode(`[${defaultValue}] `));
+ }
+
+ return readLineFromStdinSync() || defaultValue;
+ }
+
+ function readLineFromStdinSync() {
+ const c = new Uint8Array(1);
+ const buf = [];
+
+ while (true) {
+ const n = stdin.readSync(c);
+ if (n === 0 || c[0] === LF) {
+ break;
+ }
+ buf.push(c[0]);
+ }
+ return decoder.decode(new Uint8Array(buf));
+ }
+
+ window.__bootstrap.prompt = {
+ alert,
+ confirm,
+ prompt,
+ };
+})(this);