| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -29,6 +29,7 @@ const { | |||
| 29 | 29 | StringPrototypeStartsWith, | |
| 30 | 30 | StringPrototypeTrim, | |
| 31 | 31 | Symbol, | |
| 32 | + SymbolDispose, | ||
| 32 | 33 | SymbolAsyncIterator, | |
| 33 | 34 | SafeStringIterator, | |
| 34 | 35 | } = primordials; | |
@@ -332,8 +333,8 @@ function InterfaceConstructor(input, output, completer, terminal) { | |||
| 332 | 333 | if (signal.aborted) { | |
| 333 | 334 | process.nextTick(onAborted); | |
| 334 | 335 | } 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]); | ||
| 337 | 338 | } | |
| 338 | 339 | } | |
| 339 | 340 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -30,6 +30,7 @@ const { | |||
| 30 | 30 | Promise, | |
| 31 | 31 | PromiseReject, | |
| 32 | 32 | StringPrototypeSlice, | |
| 33 | + SymbolDispose, | ||
| 33 | 34 | } = primordials; | |
| 34 | 35 | ||
| 35 | 36 | const { | |
@@ -94,6 +95,7 @@ const { | |||
| 94 | 95 | kWordRight, | |
| 95 | 96 | kWriteToOutput, | |
| 96 | 97 | } = require('internal/readline/interface'); | |
| 98 | + let addAbortListener; | ||
| 97 | 99 | ||
| 98 | 100 | function Interface(input, output, completer, terminal) { | |
| 99 | 101 | if (!(this instanceof Interface)) { | |
@@ -144,15 +146,13 @@ Interface.prototype.question = function(query, options, cb) { | |||
| 144 | 146 | const onAbort = () => { | |
| 145 | 147 | this[kQuestionCancel](); | |
| 146 | 148 | }; | |
| 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); | ||
| 151 | 151 | const originalCb = cb; | |
| 152 | 152 | cb = typeof cb === 'function' ? (answer) => { | |
| 153 | - cleanup(); | ||
| 153 | + disposable[SymbolDispose](); | ||
| 154 | 154 | return originalCb(answer); | |
| 155 | - } : cleanup; | ||
| 155 | + } : disposable[SymbolDispose]; | ||
| 156 | 156 | } | |
| 157 | 157 | ||
| 158 | 158 | if (typeof cb === 'function') { | |
@@ -176,9 +176,10 @@ Interface.prototype.question[promisify.custom] = function question(query, option | |||
| 176 | 176 | const onAbort = () => { | |
| 177 | 177 | reject(new AbortError(undefined, { cause: options.signal.reason })); | |
| 178 | 178 | }; | |
| 179 | - options.signal.addEventListener('abort', onAbort, { once: true }); | ||
| 179 | + addAbortListener ??= require('events').addAbortListener; | ||
| 180 | + const disposable = addAbortListener(options.signal, onAbort); | ||
| 180 | 181 | cb = (answer) => { | |
| 181 | - options.signal.removeEventListener('abort', onAbort); | ||
| 182 | + disposable[SymbolDispose](); | ||
| 182 | 183 | resolve(answer); | |
| 183 | 184 | }; | |
| 184 | 185 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -2,6 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | 3 | const { | |
| 4 | 4 | Promise, | |
| 5 | + SymbolDispose, | ||
| 5 | 6 | } = primordials; | |
| 6 | 7 | ||
| 7 | 8 | const { | |
@@ -21,6 +22,7 @@ const { validateAbortSignal } = require('internal/validators'); | |||
| 21 | 22 | const { | |
| 22 | 23 | kEmptyObject, | |
| 23 | 24 | } = require('internal/util'); | |
| 25 | + let addAbortListener; | ||
| 24 | 26 | ||
| 25 | 27 | class Interface extends _Interface { | |
| 26 | 28 | // eslint-disable-next-line no-useless-constructor | |
@@ -42,9 +44,11 @@ class Interface extends _Interface { | |||
| 42 | 44 | this[kQuestionCancel](); | |
| 43 | 45 | reject(new AbortError(undefined, { cause: options.signal.reason })); | |
| 44 | 46 | }; | |
| 45 | - options.signal.addEventListener('abort', onAbort, { once: true }); | ||
| 47 | + addAbortListener ??= require('events').addAbortListener; | ||
| 48 | + const disposable = addAbortListener(options.signal, onAbort); | ||
| 49 | + | ||
| 46 | 50 | cb = (answer) => { | |
| 47 | - options.signal.removeEventListener('abort', onAbort); | ||
| 51 | + disposable[SymbolDispose](); | ||
| 48 | 52 | resolve(answer); | |
| 49 | 53 | }; | |
| 50 | 54 | } | |
| Back | FazBrowse Home | New Git URL |
0 commit comments