@graphql-tools/executor-http 1.2.2 → 1.2.3-alpha-eeb5a1d4d585f1315b38da3d023b25283b3ac051

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @graphql-tools/executor-http
2
2
 
3
+ ## 1.2.3-alpha-eeb5a1d4d585f1315b38da3d023b25283b3ac051
4
+
5
+ ### Patch Changes
6
+
7
+ - [#376](https://github.com/graphql-hive/gateway/pull/376) [`eeb5a1d`](https://github.com/graphql-hive/gateway/commit/eeb5a1d4d585f1315b38da3d023b25283b3ac051) Thanks [@ardatan](https://github.com/ardatan)! - No need to handle event listeners inside HTTP Executor thanks to the improvements with `@graphql-tools/utils`'s `registerAbortSignalListener` to avoid Node.js warnings when multiple event listeners registered to an `AbortSignal`
8
+
3
9
  ## 1.2.2
4
10
 
5
11
  ### Patch Changes
package/dist/index.cjs CHANGED
@@ -285,29 +285,12 @@ function prepareGETUrl({
285
285
  return finalUrl;
286
286
  }
287
287
 
288
- function createSignalWrapper(signal) {
289
- const listeners = /* @__PURE__ */ new Set();
290
- signal.onabort = (event) => {
291
- for (const listener of listeners) {
292
- listener(event);
293
- }
294
- };
295
- return Object.assign(signal, {
296
- addEventListener(_type, listener) {
297
- listeners.add(listener);
298
- },
299
- removeEventListener(_type, listener) {
300
- listeners.delete(listener);
301
- }
302
- });
303
- }
304
288
  function buildHTTPExecutor(options) {
305
289
  const printFn = options?.print ?? defaultPrintFn;
306
290
  const disposeCtrl = new AbortController();
307
- const sharedSignal = createSignalWrapper(disposeCtrl.signal);
308
291
  const baseExecutor = (request, excludeQuery) => {
309
- if (sharedSignal.aborted) {
310
- return createResultForAbort(sharedSignal.reason);
292
+ if (disposeCtrl.signal.aborted) {
293
+ return createResultForAbort(disposeCtrl.signal.reason);
311
294
  }
312
295
  const fetchFn = request.extensions?.fetch ?? options?.fetch ?? fetch.fetch;
313
296
  let method = request.extensions?.method || options?.method;
@@ -336,7 +319,7 @@ function buildHTTPExecutor(options) {
336
319
  Object.assign(headers, headersFromExtensions);
337
320
  request.extensions = restExtensions;
338
321
  }
339
- const signals = [sharedSignal];
322
+ const signals = [disposeCtrl.signal];
340
323
  const signalFromRequest = request.signal || request.info?.signal;
341
324
  if (signalFromRequest) {
342
325
  if (signalFromRequest.aborted) {
@@ -347,7 +330,7 @@ function buildHTTPExecutor(options) {
347
330
  if (options?.timeout) {
348
331
  signals.push(AbortSignal.timeout(options.timeout));
349
332
  }
350
- const signal = gatewayAbortSignalAny.abortSignalAny(signals);
333
+ const signal = signals.length > 1 ? gatewayAbortSignalAny.abortSignalAny(signals) : signals[0];
351
334
  const upstreamErrorExtensions = {
352
335
  request: {
353
336
  method
@@ -557,8 +540,8 @@ function buildHTTPExecutor(options) {
557
540
  let result;
558
541
  let attempt = 0;
559
542
  function retryAttempt() {
560
- if (sharedSignal.aborted) {
561
- return createResultForAbort(sharedSignal.reason);
543
+ if (disposeCtrl.signal.aborted) {
544
+ return createResultForAbort(disposeCtrl.signal.reason);
562
545
  }
563
546
  attempt++;
564
547
  if (attempt > options.retry) {
package/dist/index.js CHANGED
@@ -283,29 +283,12 @@ function prepareGETUrl({
283
283
  return finalUrl;
284
284
  }
285
285
 
286
- function createSignalWrapper(signal) {
287
- const listeners = /* @__PURE__ */ new Set();
288
- signal.onabort = (event) => {
289
- for (const listener of listeners) {
290
- listener(event);
291
- }
292
- };
293
- return Object.assign(signal, {
294
- addEventListener(_type, listener) {
295
- listeners.add(listener);
296
- },
297
- removeEventListener(_type, listener) {
298
- listeners.delete(listener);
299
- }
300
- });
301
- }
302
286
  function buildHTTPExecutor(options) {
303
287
  const printFn = options?.print ?? defaultPrintFn;
304
288
  const disposeCtrl = new AbortController();
305
- const sharedSignal = createSignalWrapper(disposeCtrl.signal);
306
289
  const baseExecutor = (request, excludeQuery) => {
307
- if (sharedSignal.aborted) {
308
- return createResultForAbort(sharedSignal.reason);
290
+ if (disposeCtrl.signal.aborted) {
291
+ return createResultForAbort(disposeCtrl.signal.reason);
309
292
  }
310
293
  const fetchFn = request.extensions?.fetch ?? options?.fetch ?? fetch;
311
294
  let method = request.extensions?.method || options?.method;
@@ -334,7 +317,7 @@ function buildHTTPExecutor(options) {
334
317
  Object.assign(headers, headersFromExtensions);
335
318
  request.extensions = restExtensions;
336
319
  }
337
- const signals = [sharedSignal];
320
+ const signals = [disposeCtrl.signal];
338
321
  const signalFromRequest = request.signal || request.info?.signal;
339
322
  if (signalFromRequest) {
340
323
  if (signalFromRequest.aborted) {
@@ -345,7 +328,7 @@ function buildHTTPExecutor(options) {
345
328
  if (options?.timeout) {
346
329
  signals.push(AbortSignal.timeout(options.timeout));
347
330
  }
348
- const signal = abortSignalAny(signals);
331
+ const signal = signals.length > 1 ? abortSignalAny(signals) : signals[0];
349
332
  const upstreamErrorExtensions = {
350
333
  request: {
351
334
  method
@@ -555,8 +538,8 @@ function buildHTTPExecutor(options) {
555
538
  let result;
556
539
  let attempt = 0;
557
540
  function retryAttempt() {
558
- if (sharedSignal.aborted) {
559
- return createResultForAbort(sharedSignal.reason);
541
+ if (disposeCtrl.signal.aborted) {
542
+ return createResultForAbort(disposeCtrl.signal.reason);
560
543
  }
561
544
  attempt++;
562
545
  if (attempt > options.retry) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@graphql-tools/executor-http",
3
- "version": "1.2.2",
3
+ "version": "1.2.3-alpha-eeb5a1d4d585f1315b38da3d023b25283b3ac051",
4
4
  "type": "module",
5
5
  "description": "A set of utils for faster development of GraphQL tools",
6
6
  "repository": {