@nxtedition/deepstream.io-client-js 23.4.23 → 23.4.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nxtedition/deepstream.io-client-js",
3
- "version": "23.4.23",
3
+ "version": "23.4.25",
4
4
  "description": "the javascript client for deepstream.io",
5
5
  "homepage": "http://deepstream.io",
6
6
  "bugs": {
@@ -393,11 +393,6 @@ class RecordHandler {
393
393
  let prevData = kEmpty
394
394
 
395
395
  const onUpdate = (record) => {
396
- if (signal?.aborted) {
397
- o.error(new utils.AbortError())
398
- return
399
- }
400
-
401
396
  if (state && record.state < state) {
402
397
  return
403
398
  }
@@ -443,8 +438,13 @@ class RecordHandler {
443
438
  onUpdate(record)
444
439
  }
445
440
 
441
+ const abort = signal ? () => o.error(new utils.AbortError()) : null
442
+
443
+ utils.addAbortListener(signal, abort)
444
+
446
445
  return () => {
447
446
  record.unsubscribe(onUpdate).unref()
447
+ utils.removeAbortListener(signal, abort)
448
448
  }
449
449
  })
450
450
  }
@@ -127,3 +127,45 @@ module.exports.AbortError = class AbortError extends Error {
127
127
  }
128
128
 
129
129
  module.exports.schedule = isNode ? setImmediate : window.requestIdleCallback
130
+
131
+ const abortSignals = new WeakMap()
132
+ const onAbort = function () {
133
+ const handlers = abortSignals.get(this)
134
+ if (handlers) {
135
+ for (const handler of handlers) {
136
+ handler()
137
+ }
138
+ }
139
+ }
140
+
141
+ module.exports.addAbortListener = function addAbortListener(signal, handler) {
142
+ if (!signal) {
143
+ return
144
+ }
145
+
146
+ let handlers = abortSignals.get(signal)
147
+ if (!handlers) {
148
+ handlers = []
149
+ abortSignals.set(signal, handlers)
150
+ signal.addEventListener('abort', onAbort)
151
+ }
152
+ handlers.push(handler)
153
+ }
154
+
155
+ module.exports.removeAbortListener = function removeAbortListener(signal, handler) {
156
+ if (!signal) {
157
+ return
158
+ }
159
+
160
+ const handlers = abortSignals.get(signal)
161
+ if (handlers) {
162
+ const index = handlers.indexOf(handler)
163
+ if (index !== -1) {
164
+ handlers.splice(index, 1)
165
+ if (handlers.length === 0) {
166
+ abortSignals.delete(signal)
167
+ signal.removeEventListener('abort', onAbort)
168
+ }
169
+ }
170
+ }
171
+ }