1
|
|
|
declare module "readline" { |
2
|
|
|
import * as events from "events"; |
3
|
|
|
import * as stream from "stream"; |
4
|
|
|
|
5
|
|
|
interface Key { |
6
|
|
|
sequence?: string; |
7
|
|
|
name?: string; |
8
|
|
|
ctrl?: boolean; |
9
|
|
|
meta?: boolean; |
10
|
|
|
shift?: boolean; |
11
|
|
|
} |
12
|
|
|
|
13
|
|
|
class Interface extends events.EventEmitter { |
14
|
|
|
readonly terminal: boolean; |
15
|
|
|
|
16
|
|
|
// Need direct access to line/cursor data, for use in external processes |
17
|
|
|
// see: https://github.com/nodejs/node/issues/30347 |
18
|
|
|
/** The current input data */ |
19
|
|
|
readonly line: string; |
20
|
|
|
/** The current cursor position in the input line */ |
21
|
|
|
readonly cursor: number; |
22
|
|
|
|
23
|
|
|
/** |
24
|
|
|
* NOTE: According to the documentation: |
25
|
|
|
* |
26
|
|
|
* > Instances of the `readline.Interface` class are constructed using the |
27
|
|
|
* > `readline.createInterface()` method. |
28
|
|
|
* |
29
|
|
|
* @see https://nodejs.org/dist/latest-v10.x/docs/api/readline.html#readline_class_interface |
30
|
|
|
*/ |
31
|
|
|
protected constructor(input: NodeJS.ReadableStream, output?: NodeJS.WritableStream, completer?: Completer | AsyncCompleter, terminal?: boolean); |
32
|
|
|
/** |
33
|
|
|
* NOTE: According to the documentation: |
34
|
|
|
* |
35
|
|
|
* > Instances of the `readline.Interface` class are constructed using the |
36
|
|
|
* > `readline.createInterface()` method. |
37
|
|
|
* |
38
|
|
|
* @see https://nodejs.org/dist/latest-v10.x/docs/api/readline.html#readline_class_interface |
39
|
|
|
*/ |
40
|
|
|
protected constructor(options: ReadLineOptions); |
41
|
|
|
|
42
|
|
|
setPrompt(prompt: string): void; |
43
|
|
|
prompt(preserveCursor?: boolean): void; |
44
|
|
|
question(query: string, callback: (answer: string) => void): void; |
45
|
|
|
pause(): this; |
46
|
|
|
resume(): this; |
47
|
|
|
close(): void; |
48
|
|
|
write(data: string | Buffer, key?: Key): void; |
49
|
|
|
|
50
|
|
|
/** |
51
|
|
|
* Returns the real position of the cursor in relation to the input |
52
|
|
|
* prompt + string. Long input (wrapping) strings, as well as multiple |
53
|
|
|
* line prompts are included in the calculations. |
54
|
|
|
*/ |
55
|
|
|
getCursorPos(): CursorPos; |
56
|
|
|
|
57
|
|
|
/** |
58
|
|
|
* events.EventEmitter |
59
|
|
|
* 1. close |
60
|
|
|
* 2. line |
61
|
|
|
* 3. pause |
62
|
|
|
* 4. resume |
63
|
|
|
* 5. SIGCONT |
64
|
|
|
* 6. SIGINT |
65
|
|
|
* 7. SIGTSTP |
66
|
|
|
*/ |
67
|
|
|
|
68
|
|
|
addListener(event: string, listener: (...args: any[]) => void): this; |
69
|
|
|
addListener(event: "close", listener: () => void): this; |
70
|
|
|
addListener(event: "line", listener: (input: string) => void): this; |
71
|
|
|
addListener(event: "pause", listener: () => void): this; |
72
|
|
|
addListener(event: "resume", listener: () => void): this; |
73
|
|
|
addListener(event: "SIGCONT", listener: () => void): this; |
74
|
|
|
addListener(event: "SIGINT", listener: () => void): this; |
75
|
|
|
addListener(event: "SIGTSTP", listener: () => void): this; |
76
|
|
|
|
77
|
|
|
emit(event: string | symbol, ...args: any[]): boolean; |
78
|
|
|
emit(event: "close"): boolean; |
79
|
|
|
emit(event: "line", input: string): boolean; |
80
|
|
|
emit(event: "pause"): boolean; |
81
|
|
|
emit(event: "resume"): boolean; |
82
|
|
|
emit(event: "SIGCONT"): boolean; |
83
|
|
|
emit(event: "SIGINT"): boolean; |
84
|
|
|
emit(event: "SIGTSTP"): boolean; |
85
|
|
|
|
86
|
|
|
on(event: string, listener: (...args: any[]) => void): this; |
87
|
|
|
on(event: "close", listener: () => void): this; |
88
|
|
|
on(event: "line", listener: (input: string) => void): this; |
89
|
|
|
on(event: "pause", listener: () => void): this; |
90
|
|
|
on(event: "resume", listener: () => void): this; |
91
|
|
|
on(event: "SIGCONT", listener: () => void): this; |
92
|
|
|
on(event: "SIGINT", listener: () => void): this; |
93
|
|
|
on(event: "SIGTSTP", listener: () => void): this; |
94
|
|
|
|
95
|
|
|
once(event: string, listener: (...args: any[]) => void): this; |
96
|
|
|
once(event: "close", listener: () => void): this; |
97
|
|
|
once(event: "line", listener: (input: string) => void): this; |
98
|
|
|
once(event: "pause", listener: () => void): this; |
99
|
|
|
once(event: "resume", listener: () => void): this; |
100
|
|
|
once(event: "SIGCONT", listener: () => void): this; |
101
|
|
|
once(event: "SIGINT", listener: () => void): this; |
102
|
|
|
once(event: "SIGTSTP", listener: () => void): this; |
103
|
|
|
|
104
|
|
|
prependListener(event: string, listener: (...args: any[]) => void): this; |
105
|
|
|
prependListener(event: "close", listener: () => void): this; |
106
|
|
|
prependListener(event: "line", listener: (input: string) => void): this; |
107
|
|
|
prependListener(event: "pause", listener: () => void): this; |
108
|
|
|
prependListener(event: "resume", listener: () => void): this; |
109
|
|
|
prependListener(event: "SIGCONT", listener: () => void): this; |
110
|
|
|
prependListener(event: "SIGINT", listener: () => void): this; |
111
|
|
|
prependListener(event: "SIGTSTP", listener: () => void): this; |
112
|
|
|
|
113
|
|
|
prependOnceListener(event: string, listener: (...args: any[]) => void): this; |
114
|
|
|
prependOnceListener(event: "close", listener: () => void): this; |
115
|
|
|
prependOnceListener(event: "line", listener: (input: string) => void): this; |
116
|
|
|
prependOnceListener(event: "pause", listener: () => void): this; |
117
|
|
|
prependOnceListener(event: "resume", listener: () => void): this; |
118
|
|
|
prependOnceListener(event: "SIGCONT", listener: () => void): this; |
119
|
|
|
prependOnceListener(event: "SIGINT", listener: () => void): this; |
120
|
|
|
prependOnceListener(event: "SIGTSTP", listener: () => void): this; |
121
|
|
|
[Symbol.asyncIterator](): AsyncIterableIterator<string>; |
122
|
|
|
} |
123
|
|
|
|
124
|
|
|
type ReadLine = Interface; // type forwarded for backwards compatiblity |
125
|
|
|
|
126
|
|
|
type Completer = (line: string) => CompleterResult; |
127
|
|
|
type AsyncCompleter = (line: string, callback: (err?: null | Error, result?: CompleterResult) => void) => any; |
128
|
|
|
|
129
|
|
|
type CompleterResult = [string[], string]; |
130
|
|
|
|
131
|
|
|
interface ReadLineOptions { |
132
|
|
|
input: NodeJS.ReadableStream; |
133
|
|
|
output?: NodeJS.WritableStream; |
134
|
|
|
completer?: Completer | AsyncCompleter; |
135
|
|
|
terminal?: boolean; |
136
|
|
|
historySize?: number; |
137
|
|
|
prompt?: string; |
138
|
|
|
crlfDelay?: number; |
139
|
|
|
removeHistoryDuplicates?: boolean; |
140
|
|
|
escapeCodeTimeout?: number; |
141
|
|
|
tabSize?: number; |
142
|
|
|
} |
143
|
|
|
|
144
|
|
|
function createInterface(input: NodeJS.ReadableStream, output?: NodeJS.WritableStream, completer?: Completer | AsyncCompleter, terminal?: boolean): Interface; |
145
|
|
|
function createInterface(options: ReadLineOptions): Interface; |
146
|
|
|
function emitKeypressEvents(stream: NodeJS.ReadableStream, readlineInterface?: Interface): void; |
147
|
|
|
|
148
|
|
|
type Direction = -1 | 0 | 1; |
149
|
|
|
|
150
|
|
|
interface CursorPos { |
151
|
|
|
rows: number; |
152
|
|
|
cols: number; |
153
|
|
|
} |
154
|
|
|
|
155
|
|
|
/** |
156
|
|
|
* Clears the current line of this WriteStream in a direction identified by `dir`. |
157
|
|
|
*/ |
158
|
|
|
function clearLine(stream: NodeJS.WritableStream, dir: Direction, callback?: () => void): boolean; |
159
|
|
|
/** |
160
|
|
|
* Clears this `WriteStream` from the current cursor down. |
161
|
|
|
*/ |
162
|
|
|
function clearScreenDown(stream: NodeJS.WritableStream, callback?: () => void): boolean; |
163
|
|
|
/** |
164
|
|
|
* Moves this WriteStream's cursor to the specified position. |
165
|
|
|
*/ |
166
|
|
|
function cursorTo(stream: NodeJS.WritableStream, x: number, y?: number, callback?: () => void): boolean; |
167
|
|
|
/** |
168
|
|
|
* Moves this WriteStream's cursor relative to its current position. |
169
|
|
|
*/ |
170
|
|
|
function moveCursor(stream: NodeJS.WritableStream, dx: number, dy: number, callback?: () => void): boolean; |
171
|
|
|
} |
172
|
|
|
|