Skip to content

Commit cb51ef2

Browse 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

3 files changed

Lines changed: 18 additions & 12 deletions

File tree

‎lib/internal/readline/interface.js‎

Lines 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+
constdisposable=EventEmitter.addAbortListener(signal,onAborted);
337+
self.once('close',disposable[SymbolDispose]);
337338
}
338339
}
339340

‎lib/readline.js‎

Lines 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+
letaddAbortListener;
9799

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

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

‎lib/readline/promises.js‎

Lines 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+
letaddAbortListener;
2426

2527
classInterfaceextends_Interface{
2628
// eslint-disable-next-line no-useless-constructor
@@ -42,9 +44,11 @@ class Interface extends _Interface {
4244
this[kQuestionCancel]();
4345
reject(newAbortError(undefined,{cause: options.signal.reason}));
4446
};
45-
options.signal.addEventListener('abort',onAbort,{once: true});
47+
addAbortListener??=require('events').addAbortListener;
48+
constdisposable=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)