1const { addAbortListener } = require('../core/util') 2const { RequestAbortedError } = require('../core/errors') 3 4const kListener = Symbol('kListener') 5const kSignal = Symbol('kSignal') 6 7function abort (self) { 8 if (self.abort) { 9 self.abort() 10 } else { 11 self.onError(new RequestAbortedError()) 12 } 13} 14 15function addSignal (self, signal) { 16 self[kSignal] = null 17 self[kListener] = null 18 19 if (!signal) { 20 return 21 } 22 23 if (signal.aborted) { 24 abort(self) 25 return 26 } 27 28 self[kSignal] = signal 29 self[kListener] = () => { 30 abort(self) 31 } 32 33 addAbortListener(self[kSignal], self[kListener]) 34} 35 36function removeSignal (self) { 37 if (!self[kSignal]) { 38 return 39 } 40 41 if ('removeEventListener' in self[kSignal]) { 42 self[kSignal].removeEventListener('abort', self[kListener]) 43 } else { 44 self[kSignal].removeListener('abort', self[kListener]) 45 } 46 47 self[kSignal] = null 48 self[kListener] = null 49} 50 51module.exports = { 52 addSignal, 53 removeSignal 54} 55