Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit cb51ef2

Browse filesBrowse files
atlowChemiruyadorno
authored andcommitted
readline: use addAbortListener
PR-URL: #48550 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
1 parent be88f7c commit cb51ef2
Copy full SHA for cb51ef2

File tree

Expand file treeCollapse file tree

3 files changed

+18
-12
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

3 files changed

+18
-12
lines changed
Open diff view settings
Collapse file

‎lib/internal/readline/interface.js‎

Copy file name to clipboardExpand all lines: lib/internal/readline/interface.js
+3-2Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const {
2929
StringPrototypeStartsWith,
3030
StringPrototypeTrim,
3131
Symbol,
32+
SymbolDispose,
3233
SymbolAsyncIterator,
3334
SafeStringIterator,
3435
} = primordials;
@@ -332,8 +333,8 @@ function InterfaceConstructor(input, output, completer, terminal) {
332333
if (signal.aborted) {
333334
process.nextTick(onAborted);
334335
} else {
335-
signal.addEventListener('abort', onAborted, { once: true });
336-
self.once('close', () => signal.removeEventListener('abort', onAborted));
336+
const disposable = EventEmitter.addAbortListener(signal, onAborted);
337+
self.once('close', disposable[SymbolDispose]);
337338
}
338339
}
339340

Collapse file

‎lib/readline.js‎

Copy file name to clipboardExpand all lines: lib/readline.js
+9-8Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const {
3030
Promise,
3131
PromiseReject,
3232
StringPrototypeSlice,
33+
SymbolDispose,
3334
} = primordials;
3435

3536
const {
@@ -94,6 +95,7 @@ const {
9495
kWordRight,
9596
kWriteToOutput,
9697
} = require('internal/readline/interface');
98+
let addAbortListener;
9799

98100
function Interface(input, output, completer, terminal) {
99101
if (!(this instanceof Interface)) {
@@ -144,15 +146,13 @@ Interface.prototype.question = function(query, options, cb) {
144146
const onAbort = () => {
145147
this[kQuestionCancel]();
146148
};
147-
options.signal.addEventListener('abort', onAbort, { once: true });
148-
const cleanup = () => {
149-
options.signal.removeEventListener('abort', onAbort);
150-
};
149+
addAbortListener ??= require('events').addAbortListener;
150+
const disposable = addAbortListener(options.signal, onAbort);
151151
const originalCb = cb;
152152
cb = typeof cb === 'function' ? (answer) => {
153-
cleanup();
153+
disposable[SymbolDispose]();
154154
return originalCb(answer);
155-
} : cleanup;
155+
} : disposable[SymbolDispose];
156156
}
157157

158158
if (typeof cb === 'function') {
@@ -176,9 +176,10 @@ Interface.prototype.question[promisify.custom] = function question(query, option
176176
const onAbort = () => {
177177
reject(new AbortError(undefined, { cause: options.signal.reason }));
178178
};
179-
options.signal.addEventListener('abort', onAbort, { once: true });
179+
addAbortListener ??= require('events').addAbortListener;
180+
const disposable = addAbortListener(options.signal, onAbort);
180181
cb = (answer) => {
181-
options.signal.removeEventListener('abort', onAbort);
182+
disposable[SymbolDispose]();
182183
resolve(answer);
183184
};
184185
}
Collapse file

‎lib/readline/promises.js‎

Copy file name to clipboardExpand all lines: lib/readline/promises.js
+6-2Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
const {
44
Promise,
5+
SymbolDispose,
56
} = primordials;
67

78
const {
@@ -21,6 +22,7 @@ const { validateAbortSignal } = require('internal/validators');
2122
const {
2223
kEmptyObject,
2324
} = require('internal/util');
25+
let addAbortListener;
2426

2527
class Interface extends _Interface {
2628
// eslint-disable-next-line no-useless-constructor
@@ -42,9 +44,11 @@ class Interface extends _Interface {
4244
this[kQuestionCancel]();
4345
reject(new AbortError(undefined, { cause: options.signal.reason }));
4446
};
45-
options.signal.addEventListener('abort', onAbort, { once: true });
47+
addAbortListener ??= require('events').addAbortListener;
48+
const disposable = addAbortListener(options.signal, onAbort);
49+
4650
cb = (answer) => {
47-
options.signal.removeEventListener('abort', onAbort);
51+
disposable[SymbolDispose]();
4852
resolve(answer);
4953
};
5054
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.