UNPKG

2.21 kBJavaScriptView Raw
1"use strict";
2var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4 return new (P || (P = Promise))(function (resolve, reject) {
5 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8 step((generator = generator.apply(thisArg, _arguments || [])).next());
9 });
10};
11Object.defineProperty(exports, "__esModule", { value: true });
12const readline_1 = require("readline");
13class InputStream {
14 constructor(input = process.stdin) {
15 this.reader = readline_1.createInterface({ input });
16 this.buffer = [];
17 this.handlers = [];
18 this.reader.on('line', (line) => {
19 if (this.handlers.length > 0) {
20 const resolver = this.handlers.shift();
21 if (resolver)
22 resolver(line);
23 }
24 else {
25 this.buffer.push(line);
26 }
27 });
28 this.reader.on('close', () => {
29 if (this.handlers.length > 0) {
30 const resolver = this.handlers.shift();
31 if (resolver)
32 resolver(null);
33 }
34 });
35 }
36 getLine() {
37 return __awaiter(this, void 0, void 0, function* () {
38 return new Promise(resolve => {
39 if (this.buffer.length > 0) {
40 this.reader.pause();
41 return resolve(this.buffer.shift());
42 }
43 this.reader.resume();
44 this.handlers.push(resolve);
45 });
46 });
47 }
48 close() {
49 this.reader.close();
50 }
51}
52let input = null;
53function default_1(options = {}) {
54 input = input || new InputStream(options.stream);
55 const line = input.getLine();
56 if (options.close)
57 input.close();
58 return line;
59}
60exports.default = default_1;