@apollo/client 3.7.10 → 3.7.11

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.
Files changed (66) hide show
  1. package/apollo-client.cjs +177 -145
  2. package/apollo-client.cjs.map +1 -1
  3. package/apollo-client.min.cjs +1 -1
  4. package/core/ApolloClient.d.ts.map +1 -1
  5. package/core/ApolloClient.js.map +1 -1
  6. package/core/ObservableQuery.d.ts +2 -1
  7. package/core/ObservableQuery.d.ts.map +1 -1
  8. package/core/ObservableQuery.js +8 -5
  9. package/core/ObservableQuery.js.map +1 -1
  10. package/core/QueryManager.d.ts +1 -0
  11. package/core/QueryManager.d.ts.map +1 -1
  12. package/core/QueryManager.js +52 -43
  13. package/core/QueryManager.js.map +1 -1
  14. package/core/core.cjs +63 -52
  15. package/core/core.cjs.map +1 -1
  16. package/core/core.cjs.native.js +63 -52
  17. package/errors/errors.cjs +17 -17
  18. package/errors/errors.cjs.map +1 -1
  19. package/errors/errors.cjs.native.js +17 -17
  20. package/errors/index.d.ts +24 -8
  21. package/errors/index.d.ts.map +1 -1
  22. package/errors/index.js +17 -19
  23. package/errors/index.js.map +1 -1
  24. package/invariantErrorCodes.js +1 -1
  25. package/link/core/types.d.ts +4 -0
  26. package/link/core/types.d.ts.map +1 -1
  27. package/link/core/types.js.map +1 -1
  28. package/link/http/createHttpLink.d.ts.map +1 -1
  29. package/link/http/createHttpLink.js +19 -3
  30. package/link/http/createHttpLink.js.map +1 -1
  31. package/link/http/http.cjs +52 -15
  32. package/link/http/http.cjs.map +1 -1
  33. package/link/http/http.cjs.native.js +52 -15
  34. package/link/http/parseAndCheckHttpResponse.d.ts.map +1 -1
  35. package/link/http/parseAndCheckHttpResponse.js +29 -14
  36. package/link/http/parseAndCheckHttpResponse.js.map +1 -1
  37. package/link/subscriptions/index.d.ts.map +1 -1
  38. package/link/subscriptions/index.js +8 -3
  39. package/link/subscriptions/index.js.map +1 -1
  40. package/link/subscriptions/subscriptions.cjs +8 -3
  41. package/link/subscriptions/subscriptions.cjs.map +1 -1
  42. package/link/subscriptions/subscriptions.cjs.native.js +8 -3
  43. package/package.json +18 -19
  44. package/react/hooks/hooks.cjs +36 -44
  45. package/react/hooks/hooks.cjs.map +1 -1
  46. package/react/hooks/hooks.cjs.native.js +36 -44
  47. package/react/hooks/useLazyQuery.d.ts.map +1 -1
  48. package/react/hooks/useLazyQuery.js +11 -20
  49. package/react/hooks/useLazyQuery.js.map +1 -1
  50. package/react/hooks/useQuery.d.ts +1 -3
  51. package/react/hooks/useQuery.d.ts.map +1 -1
  52. package/react/hooks/useQuery.js +27 -26
  53. package/react/hooks/useQuery.js.map +1 -1
  54. package/testing/core/itAsync.js.map +1 -1
  55. package/testing/core/mocking/mockSubscriptionLink.d.ts +1 -1
  56. package/testing/react/MockedProvider.js +5 -4
  57. package/testing/react/MockedProvider.js.map +1 -1
  58. package/testing/testing.cjs +4 -2
  59. package/testing/testing.cjs.map +1 -1
  60. package/testing/testing.cjs.native.js +4 -2
  61. package/utilities/common/incrementalResult.d.ts +2 -1
  62. package/utilities/common/incrementalResult.d.ts.map +1 -1
  63. package/utilities/common/incrementalResult.js +4 -0
  64. package/utilities/common/incrementalResult.js.map +1 -1
  65. package/utilities/utilities.cjs.map +1 -1
  66. package/version.js +1 -1
@@ -1,20 +1,22 @@
1
- import { __awaiter, __generator } from "tslib";
1
+ import { __assign, __awaiter, __generator } from "tslib";
2
2
  import { responseIterator } from "./responseIterator.js";
3
3
  import { throwServerError } from "../utils/index.js";
4
+ import { PROTOCOL_ERRORS_SYMBOL } from "../../errors/index.js";
5
+ import { isApolloPayloadResult } from "../../utilities/common/incrementalResult.js";
4
6
  var hasOwnProperty = Object.prototype.hasOwnProperty;
5
7
  export function readMultipartBody(response, observer) {
6
- var _a, _b, _c;
8
+ var _a, _b, _c, _d;
7
9
  return __awaiter(this, void 0, void 0, function () {
8
- var decoder, contentType, delimiter, boundaryVal, boundary, buffer, iterator, running, _d, value, done, chunk, bi, message, i, headers, contentType_1, body, result;
9
- var _e;
10
- return __generator(this, function (_f) {
11
- switch (_f.label) {
10
+ var decoder, contentType, delimiter, boundaryVal, boundary, buffer, iterator, running, _e, value, done, chunk, bi, message, i, headers, contentType_1, body, result, next;
11
+ var _f, _g;
12
+ return __generator(this, function (_h) {
13
+ switch (_h.label) {
12
14
  case 0:
13
15
  if (TextDecoder === undefined) {
14
16
  throw new Error("TextDecoder must be defined in the environment: please import a polyfill.");
15
17
  }
16
18
  decoder = new TextDecoder("utf-8");
17
- contentType = (_a = response.headers) === null || _a === void 0 ? void 0 : _a.get('content-type');
19
+ contentType = (_a = response.headers) === null || _a === void 0 ? void 0 : _a.get("content-type");
18
20
  delimiter = "boundary=";
19
21
  boundaryVal = (contentType === null || contentType === void 0 ? void 0 : contentType.includes(delimiter))
20
22
  ? contentType === null || contentType === void 0 ? void 0 : contentType.substring((contentType === null || contentType === void 0 ? void 0 : contentType.indexOf(delimiter)) + delimiter.length).replace(/['"]/g, "").replace(/\;(.*)/gm, "").trim()
@@ -23,22 +25,22 @@ export function readMultipartBody(response, observer) {
23
25
  buffer = "";
24
26
  iterator = responseIterator(response);
25
27
  running = true;
26
- _f.label = 1;
28
+ _h.label = 1;
27
29
  case 1:
28
30
  if (!running) return [3, 3];
29
31
  return [4, iterator.next()];
30
32
  case 2:
31
- _d = _f.sent(), value = _d.value, done = _d.done;
33
+ _e = _h.sent(), value = _e.value, done = _e.done;
32
34
  chunk = typeof value === "string" ? value : decoder.decode(value);
33
35
  running = !done;
34
36
  buffer += chunk;
35
37
  bi = buffer.indexOf(boundary);
36
38
  while (bi > -1) {
37
39
  message = void 0;
38
- _e = [
40
+ _f = [
39
41
  buffer.slice(0, bi),
40
42
  buffer.slice(bi + boundary.length),
41
- ], message = _e[0], buffer = _e[1];
43
+ ], message = _f[0], buffer = _f[1];
42
44
  if (message.trim()) {
43
45
  i = message.indexOf("\r\n\r\n");
44
46
  headers = parseHeaders(message.slice(0, i));
@@ -53,8 +55,21 @@ export function readMultipartBody(response, observer) {
53
55
  if (Object.keys(result).length > 1 ||
54
56
  "data" in result ||
55
57
  "incremental" in result ||
56
- "errors" in result) {
57
- (_b = observer.next) === null || _b === void 0 ? void 0 : _b.call(observer, result);
58
+ "errors" in result ||
59
+ "payload" in result) {
60
+ if (isApolloPayloadResult(result)) {
61
+ next = {};
62
+ if ("payload" in result) {
63
+ next = __assign({}, result.payload);
64
+ }
65
+ if ("errors" in result) {
66
+ next = __assign(__assign({}, next), { extensions: __assign(__assign({}, ("extensions" in next ? next.extensions : null)), (_g = {}, _g[PROTOCOL_ERRORS_SYMBOL] = result.errors, _g)) });
67
+ }
68
+ (_b = observer.next) === null || _b === void 0 ? void 0 : _b.call(observer, next);
69
+ }
70
+ else {
71
+ (_c = observer.next) === null || _c === void 0 ? void 0 : _c.call(observer, result);
72
+ }
58
73
  }
59
74
  }
60
75
  catch (err) {
@@ -65,7 +80,7 @@ export function readMultipartBody(response, observer) {
65
80
  }
66
81
  return [3, 1];
67
82
  case 3:
68
- (_c = observer.complete) === null || _c === void 0 ? void 0 : _c.call(observer);
83
+ (_d = observer.complete) === null || _d === void 0 ? void 0 : _d.call(observer);
69
84
  return [2];
70
85
  }
71
86
  });
@@ -1 +1 @@
1
- {"version":3,"file":"parseAndCheckHttpResponse.js","sourceRoot":"","sources":["../../../src/link/http/parseAndCheckHttpResponse.ts"],"names":[],"mappings":"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","sourcesContent":["import { responseIterator } from \"./responseIterator\";\nimport { Operation } from \"../core\";\nimport { throwServerError } from \"../utils\";\nimport { Observer } from \"../../utilities\";\n\nconst { hasOwnProperty } = Object.prototype;\n\nexport type ServerParseError = Error & {\n response: Response;\n statusCode: number;\n bodyText: string;\n};\n\nexport async function readMultipartBody<\n T extends object = Record<string, unknown>\n>(response: Response, observer: Observer<T>) {\n if (TextDecoder === undefined) {\n throw new Error(\n \"TextDecoder must be defined in the environment: please import a polyfill.\"\n );\n }\n const decoder = new TextDecoder(\"utf-8\");\n const contentType = response.headers?.get('content-type');\n const delimiter = \"boundary=\";\n\n // parse boundary value and ignore any subsequent name/value pairs after ;\n // https://www.rfc-editor.org/rfc/rfc9110.html#name-parameters\n // e.g. multipart/mixed;boundary=\"graphql\";deferSpec=20220824\n // if no boundary is specified, default to -\n const boundaryVal = contentType?.includes(delimiter)\n ? contentType\n ?.substring(contentType?.indexOf(delimiter) + delimiter.length)\n .replace(/['\"]/g, \"\")\n .replace(/\\;(.*)/gm, \"\")\n .trim()\n : \"-\";\n\n let boundary = `--${boundaryVal}`;\n let buffer = \"\";\n const iterator = responseIterator(response);\n let running = true;\n\n while (running) {\n const { value, done } = await iterator.next();\n const chunk = typeof value === \"string\" ? value : decoder.decode(value);\n running = !done;\n buffer += chunk;\n let bi = buffer.indexOf(boundary);\n\n while (bi > -1) {\n let message: string;\n [message, buffer] = [\n buffer.slice(0, bi),\n buffer.slice(bi + boundary.length),\n ];\n if (message.trim()) {\n const i = message.indexOf(\"\\r\\n\\r\\n\");\n const headers = parseHeaders(message.slice(0, i));\n const contentType = headers[\"content-type\"];\n if (\n contentType &&\n contentType.toLowerCase().indexOf(\"application/json\") === -1\n ) {\n throw new Error(\"Unsupported patch content type: application/json is required.\");\n }\n const body = message.slice(i);\n\n try {\n const result = parseJsonBody<T>(response, body.replace(\"\\r\\n\", \"\"));\n if (\n Object.keys(result).length > 1 ||\n \"data\" in result ||\n \"incremental\" in result ||\n \"errors\" in result\n ) {\n // for the last chunk with only `hasNext: false`,\n // we don't need to call observer.next as there is no data/errors\n observer.next?.(result);\n }\n } catch (err) {\n handleError(err, observer);\n }\n }\n bi = buffer.indexOf(boundary);\n }\n }\n observer.complete?.();\n}\n\nexport function parseHeaders(headerText: string): Record<string, string> {\n const headersInit: Record<string, string> = {};\n headerText.split(\"\\n\").forEach((line) => {\n const i = line.indexOf(\":\");\n if (i > -1) {\n // normalize headers to lowercase\n const name = line.slice(0, i).trim().toLowerCase();\n const value = line.slice(i + 1).trim();\n headersInit[name] = value;\n }\n });\n return headersInit;\n}\n\nexport function parseJsonBody<T>(response: Response, bodyText: string): T {\n if (response.status >= 300) {\n // Network error\n const getResult = () => {\n try {\n return JSON.parse(bodyText);\n } catch (err) {\n return bodyText\n }\n }\n throwServerError(\n response,\n getResult(),\n `Response not successful: Received status code ${response.status}`,\n );\n }\n\n try {\n return JSON.parse(bodyText) as T;\n } catch (err) {\n const parseError = err as ServerParseError;\n parseError.name = \"ServerParseError\";\n parseError.response = response;\n parseError.statusCode = response.status;\n parseError.bodyText = bodyText;\n throw parseError;\n }\n}\n\nexport function handleError(err: any, observer: Observer<any>) {\n if (err.name === \"AbortError\") return;\n // if it is a network error, BUT there is graphql result info fire\n // the next observer before calling error this gives apollo-client\n // (and react-apollo) the `graphqlErrors` and `networkErrors` to\n // pass to UI this should only happen if we *also* have data as\n // part of the response key per the spec\n if (err.result && err.result.errors && err.result.data) {\n // if we don't call next, the UI can only show networkError\n // because AC didn't get any graphqlErrors this is graphql\n // execution result info (i.e errors and possibly data) this is\n // because there is no formal spec how errors should translate to\n // http status codes. So an auth error (401) could have both data\n // from a public field, errors from a private field, and a status\n // of 401\n // {\n // user { // this will have errors\n // firstName\n // }\n // products { // this is public so will have data\n // cost\n // }\n // }\n //\n // the result of above *could* look like this:\n // {\n // data: { products: [{ cost: \"$10\" }] },\n // errors: [{\n // message: 'your session has timed out',\n // path: []\n // }]\n // }\n // status code of above would be a 401\n // in the UI you want to show data where you can, errors as data where you can\n // and use correct http status codes\n observer.next?.(err.result);\n }\n\n observer.error?.(err);\n}\n\nexport function readJsonBody<T = Record<string, unknown>>(\n response: Response,\n operation: Operation,\n observer: Observer<T>\n) {\n parseAndCheckHttpResponse(operation)(response)\n .then((result) => {\n observer.next?.(result);\n observer.complete?.();\n })\n .catch((err) => handleError(err, observer));\n}\n\nexport function parseAndCheckHttpResponse(operations: Operation | Operation[]) {\n return (response: Response) =>\n response\n .text()\n .then((bodyText) => parseJsonBody(response, bodyText))\n .then((result: any) => {\n if (response.status >= 300) {\n // Network error\n throwServerError(\n response,\n result,\n `Response not successful: Received status code ${response.status}`\n );\n }\n if (\n !Array.isArray(result) &&\n !hasOwnProperty.call(result, \"data\") &&\n !hasOwnProperty.call(result, \"errors\")\n ) {\n // Data error\n throwServerError(\n response,\n result,\n `Server response was missing for query '${\n Array.isArray(operations)\n ? operations.map((op) => op.operationName)\n : operations.operationName\n }'.`\n );\n }\n return result;\n });\n}\n"]}
1
+ {"version":3,"file":"parseAndCheckHttpResponse.js","sourceRoot":"","sources":["../../../src/link/http/parseAndCheckHttpResponse.ts"],"names":[],"mappings":"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","sourcesContent":["import { responseIterator } from \"./responseIterator\";\nimport { Operation } from \"../core\";\nimport { throwServerError } from \"../utils\";\nimport { PROTOCOL_ERRORS_SYMBOL } from '../../errors';\nimport { Observer } from \"../../utilities\";\nimport {\n isApolloPayloadResult\n} from '../../utilities/common/incrementalResult';\n\nconst { hasOwnProperty } = Object.prototype;\n\nexport type ServerParseError = Error & {\n response: Response;\n statusCode: number;\n bodyText: string;\n};\n\nexport async function readMultipartBody<\n T extends object = Record<string, unknown>\n>(response: Response, observer: Observer<T>) {\n if (TextDecoder === undefined) {\n throw new Error(\n \"TextDecoder must be defined in the environment: please import a polyfill.\"\n );\n }\n const decoder = new TextDecoder(\"utf-8\");\n const contentType = response.headers?.get(\"content-type\");\n const delimiter = \"boundary=\";\n\n // parse boundary value and ignore any subsequent name/value pairs after ;\n // https://www.rfc-editor.org/rfc/rfc9110.html#name-parameters\n // e.g. multipart/mixed;boundary=\"graphql\";deferSpec=20220824\n // if no boundary is specified, default to -\n const boundaryVal = contentType?.includes(delimiter)\n ? contentType\n ?.substring(contentType?.indexOf(delimiter) + delimiter.length)\n .replace(/['\"]/g, \"\")\n .replace(/\\;(.*)/gm, \"\")\n .trim()\n : \"-\";\n\n let boundary = `--${boundaryVal}`;\n let buffer = \"\";\n const iterator = responseIterator(response);\n let running = true;\n\n while (running) {\n const { value, done } = await iterator.next();\n const chunk = typeof value === \"string\" ? value : decoder.decode(value);\n running = !done;\n buffer += chunk;\n let bi = buffer.indexOf(boundary);\n\n while (bi > -1) {\n let message: string;\n [message, buffer] = [\n buffer.slice(0, bi),\n buffer.slice(bi + boundary.length),\n ];\n if (message.trim()) {\n const i = message.indexOf(\"\\r\\n\\r\\n\");\n const headers = parseHeaders(message.slice(0, i));\n const contentType = headers[\"content-type\"];\n if (\n contentType &&\n contentType.toLowerCase().indexOf(\"application/json\") === -1\n ) {\n throw new Error(\n \"Unsupported patch content type: application/json is required.\"\n );\n }\n const body = message.slice(i);\n\n try {\n const result = parseJsonBody<T>(response, body.replace(\"\\r\\n\", \"\"));\n if (\n Object.keys(result).length > 1 ||\n \"data\" in result ||\n \"incremental\" in result ||\n \"errors\" in result ||\n \"payload\" in result\n ) {\n if (isApolloPayloadResult(result)) {\n let next = {};\n if (\"payload\" in result) {\n next = { ...result.payload };\n }\n if (\"errors\" in result) {\n next = {\n ...next,\n extensions: {\n ...(\"extensions\" in next ? next.extensions : null as any),\n [PROTOCOL_ERRORS_SYMBOL]: result.errors\n },\n };\n }\n observer.next?.(next as T);\n } else {\n // for the last chunk with only `hasNext: false`\n // we don't need to call observer.next as there is no data/errors\n observer.next?.(result);\n }\n }\n } catch (err) {\n handleError(err, observer);\n }\n }\n bi = buffer.indexOf(boundary);\n }\n }\n observer.complete?.();\n}\n\nexport function parseHeaders(headerText: string): Record<string, string> {\n const headersInit: Record<string, string> = {};\n headerText.split(\"\\n\").forEach((line) => {\n const i = line.indexOf(\":\");\n if (i > -1) {\n // normalize headers to lowercase\n const name = line.slice(0, i).trim().toLowerCase();\n const value = line.slice(i + 1).trim();\n headersInit[name] = value;\n }\n });\n return headersInit;\n}\n\nexport function parseJsonBody<T>(response: Response, bodyText: string): T {\n if (response.status >= 300) {\n // Network error\n const getResult = () => {\n try {\n return JSON.parse(bodyText);\n } catch (err) {\n return bodyText;\n }\n };\n throwServerError(\n response,\n getResult(),\n `Response not successful: Received status code ${response.status}`\n );\n }\n\n try {\n return JSON.parse(bodyText) as T;\n } catch (err) {\n const parseError = err as ServerParseError;\n parseError.name = \"ServerParseError\";\n parseError.response = response;\n parseError.statusCode = response.status;\n parseError.bodyText = bodyText;\n throw parseError;\n }\n}\n\nexport function handleError(err: any, observer: Observer<any>) {\n if (err.name === \"AbortError\") return;\n // if it is a network error, BUT there is graphql result info fire\n // the next observer before calling error this gives apollo-client\n // (and react-apollo) the `graphqlErrors` and `networkErrors` to\n // pass to UI this should only happen if we *also* have data as\n // part of the response key per the spec\n if (err.result && err.result.errors && err.result.data) {\n // if we don't call next, the UI can only show networkError\n // because AC didn't get any graphqlErrors this is graphql\n // execution result info (i.e errors and possibly data) this is\n // because there is no formal spec how errors should translate to\n // http status codes. So an auth error (401) could have both data\n // from a public field, errors from a private field, and a status\n // of 401\n // {\n // user { // this will have errors\n // firstName\n // }\n // products { // this is public so will have data\n // cost\n // }\n // }\n //\n // the result of above *could* look like this:\n // {\n // data: { products: [{ cost: \"$10\" }] },\n // errors: [{\n // message: 'your session has timed out',\n // path: []\n // }]\n // }\n // status code of above would be a 401\n // in the UI you want to show data where you can, errors as data where you can\n // and use correct http status codes\n observer.next?.(err.result);\n }\n\n observer.error?.(err);\n}\n\nexport function readJsonBody<T = Record<string, unknown>>(\n response: Response,\n operation: Operation,\n observer: Observer<T>\n) {\n parseAndCheckHttpResponse(operation)(response)\n .then((result) => {\n observer.next?.(result);\n observer.complete?.();\n })\n .catch((err) => handleError(err, observer));\n}\n\nexport function parseAndCheckHttpResponse(operations: Operation | Operation[]) {\n return (response: Response) =>\n response\n .text()\n .then((bodyText) => parseJsonBody(response, bodyText))\n .then((result: any) => {\n if (response.status >= 300) {\n // Network error\n throwServerError(\n response,\n result,\n `Response not successful: Received status code ${response.status}`\n );\n }\n if (\n !Array.isArray(result) &&\n !hasOwnProperty.call(result, \"data\") &&\n !hasOwnProperty.call(result, \"errors\")\n ) {\n // Data error\n throwServerError(\n response,\n result,\n `Server response was missing for query '${\n Array.isArray(operations)\n ? operations.map((op) => op.operationName)\n : operations.operationName\n }'.`\n );\n }\n return result;\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/link/subscriptions/index.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAmB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAe9D,qBAAa,aAAc,SAAQ,UAAU;aACf,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;IAInC,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC;CA+B9D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/link/subscriptions/index.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAmB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAa9D,qBAAa,aAAc,SAAQ,UAAU;aACf,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;IAInC,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC;CAiC9D"}
@@ -4,7 +4,11 @@ import { ApolloLink } from "../core/index.js";
4
4
  import { isNonNullObject, Observable } from "../../utilities/index.js";
5
5
  import { ApolloError } from "../../errors/index.js";
6
6
  function isLikeCloseEvent(val) {
7
- return isNonNullObject(val) && 'code' in val && 'reason' in val;
7
+ return isNonNullObject(val) && "code" in val && "reason" in val;
8
+ }
9
+ function isLikeErrorEvent(err) {
10
+ var _a;
11
+ return isNonNullObject(err) && ((_a = err.target) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.CLOSED;
8
12
  }
9
13
  var GraphQLWsLink = (function (_super) {
10
14
  __extends(GraphQLWsLink, _super);
@@ -23,8 +27,9 @@ var GraphQLWsLink = (function (_super) {
23
27
  if (err instanceof Error) {
24
28
  return observer.error(err);
25
29
  }
26
- if (isLikeCloseEvent(err)) {
27
- return observer.error(new Error("Socket closed with event ".concat(err.code, " ").concat(err.reason || "")));
30
+ var likeClose = isLikeCloseEvent(err);
31
+ if (likeClose || isLikeErrorEvent(err)) {
32
+ return observer.error(new Error("Socket closed".concat(likeClose ? " with event ".concat(err.code) : "").concat(likeClose ? " ".concat(err.reason) : "")));
28
33
  }
29
34
  return observer.error(new ApolloError({
30
35
  graphQLErrors: Array.isArray(err) ? err : [err],
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/link/subscriptions/index.ts"],"names":[],"mappings":";AA8BA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,OAAO,EAAE,UAAU,EAA0B,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAS3C,SAAS,gBAAgB,CAAC,GAAY;IACpC,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,MAAM,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,CAAC;AAClE,CAAC;AAGD;IAAmC,iCAAU;IAC3C,uBAA4B,MAAc;QAA1C,YACE,iBAAO,SACR;QAF2B,YAAM,GAAN,MAAM,CAAQ;;IAE1C,CAAC;IAEM,+BAAO,GAAd,UAAe,SAAoB;QAAnC,iBA8BC;QA7BC,OAAO,IAAI,UAAU,CAAC,UAAC,QAAQ;YAC7B,OAAO,KAAI,CAAC,MAAM,CAAC,SAAS,uBACrB,SAAS,KAAE,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,KAC7C;gBACE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAClC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC1C,KAAK,EAAE,UAAC,GAAG;oBACT,IAAI,GAAG,YAAY,KAAK,EAAE;wBACxB,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;qBAC5B;oBAED,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE;wBACzB,OAAO,QAAQ,CAAC,KAAK,CAEnB,IAAI,KAAK,CACP,mCAA4B,GAAG,CAAC,IAAI,cAAI,GAAG,CAAC,MAAM,IAAI,EAAE,CAAE,CAC3D,CACF,CAAC;qBACH;oBAED,OAAO,QAAQ,CAAC,KAAK,CACnB,IAAI,WAAW,CAAC;wBACd,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;qBAChD,CAAC,CACH,CAAC;gBACJ,CAAC;aACF,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IACH,oBAAC;AAAD,CAAC,AApCD,CAAmC,UAAU,GAoC5C","sourcesContent":["// This file is adapted from the graphql-ws npm package:\n// https://github.com/enisdenjo/graphql-ws\n//\n// Most of the file comes from that package's README; some other parts (such as\n// isLikeCloseEvent) come from its source.\n//\n// Here's the license of the original code:\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2020-2021 Denis Badurina\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport { print } from \"graphql\";\nimport type { Client } from \"graphql-ws\";\n\nimport { ApolloLink, Operation, FetchResult } from \"../core\";\nimport { isNonNullObject, Observable } from \"../../utilities\";\nimport { ApolloError } from \"../../errors\";\n\ninterface LikeCloseEvent {\n /** Returns the WebSocket connection close code provided by the server. */\n readonly code: number;\n /** Returns the WebSocket connection close reason provided by the server. */\n readonly reason: string;\n}\n\nfunction isLikeCloseEvent(val: unknown): val is LikeCloseEvent {\n return isNonNullObject(val) && 'code' in val && 'reason' in val;\n}\n\n\nexport class GraphQLWsLink extends ApolloLink {\n constructor(public readonly client: Client) {\n super();\n }\n\n public request(operation: Operation): Observable<FetchResult> {\n return new Observable((observer) => {\n return this.client.subscribe<FetchResult>(\n { ...operation, query: print(operation.query) },\n {\n next: observer.next.bind(observer),\n complete: observer.complete.bind(observer),\n error: (err) => {\n if (err instanceof Error) {\n return observer.error(err);\n }\n\n if (isLikeCloseEvent(err)) {\n return observer.error(\n // reason will be available on clean closes\n new Error(\n `Socket closed with event ${err.code} ${err.reason || \"\"}`\n )\n );\n }\n\n return observer.error(\n new ApolloError({\n graphQLErrors: Array.isArray(err) ? err : [err],\n })\n );\n },\n }\n );\n });\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/link/subscriptions/index.ts"],"names":[],"mappings":";AA8BA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,OAAO,EAAE,UAAU,EAA0B,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3C,SAAS,gBAAgB,CAAC,GAAY;IACpC,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,MAAM,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,CAAC;AAClE,CAAC;AAGD,SAAS,gBAAgB,CAAC,GAAY;;IACpC,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAA,MAAA,GAAG,CAAC,MAAM,0CAAE,UAAU,MAAK,SAAS,CAAC,MAAM,CAAC;AAC7E,CAAC;AAED;IAAmC,iCAAU;IAC3C,uBAA4B,MAAc;QAA1C,YACE,iBAAO,SACR;QAF2B,YAAM,GAAN,MAAM,CAAQ;;IAE1C,CAAC;IAEM,+BAAO,GAAd,UAAe,SAAoB;QAAnC,iBAgCC;QA/BC,OAAO,IAAI,UAAU,CAAC,UAAC,QAAQ;YAC7B,OAAO,KAAI,CAAC,MAAM,CAAC,SAAS,uBACrB,SAAS,KAAE,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,KAC7C;gBACE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAClC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC1C,KAAK,EAAE,UAAC,GAAG;oBACT,IAAI,GAAG,YAAY,KAAK,EAAE;wBACxB,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;qBAC5B;oBACD,IAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;oBACxC,IAAI,SAAS,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE;wBACtC,OAAO,QAAQ,CAAC,KAAK,CAEnB,IAAI,KAAK,CAAC,uBACR,SAAS,CAAC,CAAC,CAAC,sBAAe,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,EAAE,SAE1C,SAAS,CAAC,CAAC,CAAC,WAAI,GAAG,CAAC,MAAM,CAAE,CAAC,CAAC,CAAC,EAAE,CACjC,CAAC,CACJ,CAAC;qBACH;oBAED,OAAO,QAAQ,CAAC,KAAK,CACnB,IAAI,WAAW,CAAC;wBACd,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;qBAChD,CAAC,CACH,CAAC;gBACJ,CAAC;aACF,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IACH,oBAAC;AAAD,CAAC,AAtCD,CAAmC,UAAU,GAsC5C","sourcesContent":["// This file is adapted from the graphql-ws npm package:\n// https://github.com/enisdenjo/graphql-ws\n//\n// Most of the file comes from that package's README; some other parts (such as\n// isLikeCloseEvent) come from its source.\n//\n// Here's the license of the original code:\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2020-2021 Denis Badurina\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport { print } from \"graphql\";\nimport type { Client } from \"graphql-ws\";\n\nimport { ApolloLink, Operation, FetchResult } from \"../core\";\nimport { isNonNullObject, Observable } from \"../../utilities\";\nimport { ApolloError } from \"../../errors\";\n\n// https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/close_event\nfunction isLikeCloseEvent(val: unknown): val is CloseEvent {\n return isNonNullObject(val) && \"code\" in val && \"reason\" in val;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/error_event\nfunction isLikeErrorEvent(err: unknown): err is Event {\n return isNonNullObject(err) && err.target?.readyState === WebSocket.CLOSED;\n}\n\nexport class GraphQLWsLink extends ApolloLink {\n constructor(public readonly client: Client) {\n super();\n }\n\n public request(operation: Operation): Observable<FetchResult> {\n return new Observable((observer) => {\n return this.client.subscribe<FetchResult>(\n { ...operation, query: print(operation.query) },\n {\n next: observer.next.bind(observer),\n complete: observer.complete.bind(observer),\n error: (err) => {\n if (err instanceof Error) {\n return observer.error(err);\n }\n const likeClose = isLikeCloseEvent(err);\n if (likeClose || isLikeErrorEvent(err)) {\n return observer.error(\n // reason will be available on clean closes\n new Error(`Socket closed${\n likeClose ? ` with event ${err.code}` : \"\"\n }${\n likeClose ? ` ${err.reason}` : \"\"\n }`)\n );\n }\n\n return observer.error(\n new ApolloError({\n graphQLErrors: Array.isArray(err) ? err : [err],\n })\n );\n },\n }\n );\n });\n }\n}\n"]}
@@ -9,7 +9,11 @@ var utilities = require('../../utilities');
9
9
  var errors = require('../../errors');
10
10
 
11
11
  function isLikeCloseEvent(val) {
12
- return utilities.isNonNullObject(val) && 'code' in val && 'reason' in val;
12
+ return utilities.isNonNullObject(val) && "code" in val && "reason" in val;
13
+ }
14
+ function isLikeErrorEvent(err) {
15
+ var _a;
16
+ return utilities.isNonNullObject(err) && ((_a = err.target) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.CLOSED;
13
17
  }
14
18
  var GraphQLWsLink = (function (_super) {
15
19
  tslib.__extends(GraphQLWsLink, _super);
@@ -28,8 +32,9 @@ var GraphQLWsLink = (function (_super) {
28
32
  if (err instanceof Error) {
29
33
  return observer.error(err);
30
34
  }
31
- if (isLikeCloseEvent(err)) {
32
- return observer.error(new Error("Socket closed with event ".concat(err.code, " ").concat(err.reason || "")));
35
+ var likeClose = isLikeCloseEvent(err);
36
+ if (likeClose || isLikeErrorEvent(err)) {
37
+ return observer.error(new Error("Socket closed".concat(likeClose ? " with event ".concat(err.code) : "").concat(likeClose ? " ".concat(err.reason) : "")));
33
38
  }
34
39
  return observer.error(new errors.ApolloError({
35
40
  graphQLErrors: Array.isArray(err) ? err : [err],
@@ -1 +1 @@
1
- {"version":3,"file":"subscriptions.cjs","sources":["index.js"],"sourcesContent":["import { __assign, __extends } from \"tslib\";\nimport { print } from \"graphql\";\nimport { ApolloLink } from \"../core\";\nimport { isNonNullObject, Observable } from \"../../utilities\";\nimport { ApolloError } from \"../../errors\";\nfunction isLikeCloseEvent(val) {\n return isNonNullObject(val) && 'code' in val && 'reason' in val;\n}\nvar GraphQLWsLink = (function (_super) {\n __extends(GraphQLWsLink, _super);\n function GraphQLWsLink(client) {\n var _this = _super.call(this) || this;\n _this.client = client;\n return _this;\n }\n GraphQLWsLink.prototype.request = function (operation) {\n var _this = this;\n return new Observable(function (observer) {\n return _this.client.subscribe(__assign(__assign({}, operation), { query: print(operation.query) }), {\n next: observer.next.bind(observer),\n complete: observer.complete.bind(observer),\n error: function (err) {\n if (err instanceof Error) {\n return observer.error(err);\n }\n if (isLikeCloseEvent(err)) {\n return observer.error(new Error(\"Socket closed with event \".concat(err.code, \" \").concat(err.reason || \"\")));\n }\n return observer.error(new ApolloError({\n graphQLErrors: Array.isArray(err) ? err : [err],\n }));\n },\n });\n });\n };\n return GraphQLWsLink;\n}(ApolloLink));\nexport { GraphQLWsLink };\n//# sourceMappingURL=index.js.map"],"names":["isNonNullObject","__extends","Observable","__assign","print","ApolloError","ApolloLink"],"mappings":";;;;;;;;;;AAKA,SAAS,gBAAgB,CAAC,GAAG,EAAE;AAC/B,IAAI,OAAOA,yBAAe,CAAC,GAAG,CAAC,IAAI,MAAM,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,CAAC;AACpE,CAAC;AACE,IAAC,aAAa,IAAI,UAAU,MAAM,EAAE;AACvC,IAAIC,eAAS,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AACrC,IAAI,SAAS,aAAa,CAAC,MAAM,EAAE;AACnC,QAAQ,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAC9C,QAAQ,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AAC9B,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,aAAa,CAAC,SAAS,CAAC,OAAO,GAAG,UAAU,SAAS,EAAE;AAC3D,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC;AACzB,QAAQ,OAAO,IAAIC,oBAAU,CAAC,UAAU,QAAQ,EAAE;AAClD,YAAY,OAAO,KAAK,CAAC,MAAM,CAAC,SAAS,CAACC,cAAQ,CAACA,cAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,EAAEC,aAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;AAChH,gBAAgB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AAClD,gBAAgB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC1D,gBAAgB,KAAK,EAAE,UAAU,GAAG,EAAE;AACtC,oBAAoB,IAAI,GAAG,YAAY,KAAK,EAAE;AAC9C,wBAAwB,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnD,qBAAqB;AACrB,oBAAoB,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE;AAC/C,wBAAwB,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACrI,qBAAqB;AACrB,oBAAoB,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAIC,kBAAW,CAAC;AAC1D,wBAAwB,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AACvE,qBAAqB,CAAC,CAAC,CAAC;AACxB,iBAAiB;AACjB,aAAa,CAAC,CAAC;AACf,SAAS,CAAC,CAAC;AACX,KAAK,CAAC;AACN,IAAI,OAAO,aAAa,CAAC;AACzB,CAAC,CAACC,eAAU,CAAC;;;;"}
1
+ {"version":3,"file":"subscriptions.cjs","sources":["index.js"],"sourcesContent":["import { __assign, __extends } from \"tslib\";\nimport { print } from \"graphql\";\nimport { ApolloLink } from \"../core\";\nimport { isNonNullObject, Observable } from \"../../utilities\";\nimport { ApolloError } from \"../../errors\";\nfunction isLikeCloseEvent(val) {\n return isNonNullObject(val) && \"code\" in val && \"reason\" in val;\n}\nfunction isLikeErrorEvent(err) {\n var _a;\n return isNonNullObject(err) && ((_a = err.target) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.CLOSED;\n}\nvar GraphQLWsLink = (function (_super) {\n __extends(GraphQLWsLink, _super);\n function GraphQLWsLink(client) {\n var _this = _super.call(this) || this;\n _this.client = client;\n return _this;\n }\n GraphQLWsLink.prototype.request = function (operation) {\n var _this = this;\n return new Observable(function (observer) {\n return _this.client.subscribe(__assign(__assign({}, operation), { query: print(operation.query) }), {\n next: observer.next.bind(observer),\n complete: observer.complete.bind(observer),\n error: function (err) {\n if (err instanceof Error) {\n return observer.error(err);\n }\n var likeClose = isLikeCloseEvent(err);\n if (likeClose || isLikeErrorEvent(err)) {\n return observer.error(new Error(\"Socket closed\".concat(likeClose ? \" with event \".concat(err.code) : \"\").concat(likeClose ? \" \".concat(err.reason) : \"\")));\n }\n return observer.error(new ApolloError({\n graphQLErrors: Array.isArray(err) ? err : [err],\n }));\n },\n });\n });\n };\n return GraphQLWsLink;\n}(ApolloLink));\nexport { GraphQLWsLink };\n//# sourceMappingURL=index.js.map"],"names":["isNonNullObject","__extends","Observable","__assign","print","ApolloError","ApolloLink"],"mappings":";;;;;;;;;;AAKA,SAAS,gBAAgB,CAAC,GAAG,EAAE;AAC/B,IAAI,OAAOA,yBAAe,CAAC,GAAG,CAAC,IAAI,MAAM,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,CAAC;AACpE,CAAC;AACD,SAAS,gBAAgB,CAAC,GAAG,EAAE;AAC/B,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,OAAOA,yBAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,UAAU,MAAM,SAAS,CAAC,MAAM,CAAC;AAC/H,CAAC;AACE,IAAC,aAAa,IAAI,UAAU,MAAM,EAAE;AACvC,IAAIC,eAAS,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AACrC,IAAI,SAAS,aAAa,CAAC,MAAM,EAAE;AACnC,QAAQ,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAC9C,QAAQ,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AAC9B,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,aAAa,CAAC,SAAS,CAAC,OAAO,GAAG,UAAU,SAAS,EAAE;AAC3D,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC;AACzB,QAAQ,OAAO,IAAIC,oBAAU,CAAC,UAAU,QAAQ,EAAE;AAClD,YAAY,OAAO,KAAK,CAAC,MAAM,CAAC,SAAS,CAACC,cAAQ,CAACA,cAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,EAAEC,aAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;AAChH,gBAAgB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AAClD,gBAAgB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC1D,gBAAgB,KAAK,EAAE,UAAU,GAAG,EAAE;AACtC,oBAAoB,IAAI,GAAG,YAAY,KAAK,EAAE;AAC9C,wBAAwB,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnD,qBAAqB;AACrB,oBAAoB,IAAI,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAC1D,oBAAoB,IAAI,SAAS,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE;AAC5D,wBAAwB,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACnL,qBAAqB;AACrB,oBAAoB,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAIC,kBAAW,CAAC;AAC1D,wBAAwB,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AACvE,qBAAqB,CAAC,CAAC,CAAC;AACxB,iBAAiB;AACjB,aAAa,CAAC,CAAC;AACf,SAAS,CAAC,CAAC;AACX,KAAK,CAAC;AACN,IAAI,OAAO,aAAa,CAAC;AACzB,CAAC,CAACC,eAAU,CAAC;;;;"}
@@ -9,7 +9,11 @@ var utilities = require('../../utilities');
9
9
  var errors = require('../../errors');
10
10
 
11
11
  function isLikeCloseEvent(val) {
12
- return utilities.isNonNullObject(val) && 'code' in val && 'reason' in val;
12
+ return utilities.isNonNullObject(val) && "code" in val && "reason" in val;
13
+ }
14
+ function isLikeErrorEvent(err) {
15
+ var _a;
16
+ return utilities.isNonNullObject(err) && ((_a = err.target) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.CLOSED;
13
17
  }
14
18
  var GraphQLWsLink = (function (_super) {
15
19
  tslib.__extends(GraphQLWsLink, _super);
@@ -28,8 +32,9 @@ var GraphQLWsLink = (function (_super) {
28
32
  if (err instanceof Error) {
29
33
  return observer.error(err);
30
34
  }
31
- if (isLikeCloseEvent(err)) {
32
- return observer.error(new Error("Socket closed with event ".concat(err.code, " ").concat(err.reason || "")));
35
+ var likeClose = isLikeCloseEvent(err);
36
+ if (likeClose || isLikeErrorEvent(err)) {
37
+ return observer.error(new Error("Socket closed".concat(likeClose ? " with event ".concat(err.code) : "").concat(likeClose ? " ".concat(err.reason) : "")));
33
38
  }
34
39
  return observer.error(new errors.ApolloError({
35
40
  graphQLErrors: Array.isArray(err) ? err : [err],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apollo/client",
3
- "version": "3.7.10",
3
+ "version": "3.7.11",
4
4
  "description": "A fully-featured caching GraphQL client.",
5
5
  "private": false,
6
6
  "keywords": [
@@ -57,7 +57,7 @@
57
57
  "@wry/trie": "^0.3.0",
58
58
  "graphql-tag": "^2.12.6",
59
59
  "hoist-non-react-statics": "^3.3.2",
60
- "optimism": "^0.16.1",
60
+ "optimism": "^0.16.2",
61
61
  "prop-types": "^15.7.2",
62
62
  "response-iterator": "^0.2.6",
63
63
  "symbol-observable": "^4.0.0",
@@ -66,40 +66,39 @@
66
66
  "zen-observable-ts": "^1.2.5"
67
67
  },
68
68
  "devDependencies": {
69
- "@babel/parser": "7.20.15",
69
+ "@babel/parser": "7.21.3",
70
70
  "@changesets/changelog-github": "0.4.8",
71
- "@changesets/cli": "2.26.0",
72
- "@graphql-tools/schema": "9.0.16",
71
+ "@changesets/cli": "2.26.1",
72
+ "@graphql-tools/schema": "9.0.17",
73
73
  "@rollup/plugin-node-resolve": "11.2.1",
74
74
  "@testing-library/react": "14.0.0",
75
75
  "@testing-library/react-12": "npm:@testing-library/react@^12",
76
76
  "@testing-library/user-event": "14.4.3",
77
77
  "@types/bytes": "3.1.1",
78
- "@types/fast-json-stable-stringify": "2.0.0",
79
78
  "@types/fetch-mock": "7.3.5",
80
- "@types/glob": "8.0.1",
79
+ "@types/glob": "8.1.0",
81
80
  "@types/hoist-non-react-statics": "3.3.1",
82
- "@types/jest": "29.2.6",
81
+ "@types/jest": "29.5.0",
83
82
  "@types/lodash": "4.14.191",
84
- "@types/node": "18.14.0",
83
+ "@types/node": "18.15.10",
85
84
  "@types/node-fetch": "2.6.2",
86
- "@types/react": "18.0.28",
85
+ "@types/react": "18.0.29",
87
86
  "@types/react-dom": "18.0.11",
88
87
  "@types/use-sync-external-store": "0.0.3",
89
- "@typescript-eslint/eslint-plugin": "5.52.0",
90
- "@typescript-eslint/parser": "5.52.0",
88
+ "@typescript-eslint/eslint-plugin": "5.56.0",
89
+ "@typescript-eslint/parser": "5.56.0",
91
90
  "acorn": "8.8.2",
92
91
  "blob-polyfill": "7.0.20220408",
93
92
  "bytes": "3.1.2",
94
93
  "cross-fetch": "3.1.5",
95
- "eslint": "8.34.0",
94
+ "eslint": "8.36.0",
96
95
  "eslint-plugin-testing-library": "5.10.2",
97
96
  "fetch-mock": "9.11.0",
98
97
  "glob": "8.1.0",
99
98
  "graphql": "16.6.0",
100
- "graphql-ws": "5.11.3",
101
- "jest": "29.3.1",
102
- "jest-environment-jsdom": "29.3.1",
99
+ "graphql-ws": "5.12.0",
100
+ "jest": "29.5.0",
101
+ "jest-environment-jsdom": "29.5.0",
103
102
  "jest-junit": "15.0.0",
104
103
  "lodash": "4.17.21",
105
104
  "patch-package": "6.5.1",
@@ -109,16 +108,16 @@
109
108
  "react-dom-17": "npm:react-dom@^17",
110
109
  "recast": "0.22.0",
111
110
  "resolve": "1.22.1",
112
- "rimraf": "4.1.2",
111
+ "rimraf": "4.4.1",
113
112
  "rollup": "2.79.1",
114
113
  "rollup-plugin-terser": "7.0.2",
115
114
  "rxjs": "7.8.0",
116
115
  "subscriptions-transport-ws": "0.11.0",
117
- "terser": "5.16.4",
116
+ "terser": "5.16.8",
118
117
  "ts-jest": "29.0.5",
119
118
  "ts-node": "10.9.1",
120
119
  "typedoc": "0.22.18",
121
- "typescript": "4.9.5",
120
+ "typescript": "5.0.2",
122
121
  "wait-for-observables": "1.0.3",
123
122
  "web-streams-polyfill": "3.2.1",
124
123
  "whatwg-fetch": "3.6.2"
@@ -103,8 +103,6 @@ var InternalState = (function () {
103
103
  function InternalState(client, query, previous) {
104
104
  this.client = client;
105
105
  this.query = query;
106
- this.asyncResolveFns = new Set();
107
- this.optionsToIgnoreOnce = new (utilities.canUseWeakSet ? WeakSet : Set)();
108
106
  this.ssrDisabledResult = utilities.maybeDeepFreeze({
109
107
  loading: true,
110
108
  data: void 0,
@@ -128,20 +126,30 @@ var InternalState = (function () {
128
126
  InternalState.prototype.forceUpdate = function () {
129
127
  __DEV__ && globals.invariant.warn("Calling default no-op implementation of InternalState#forceUpdate");
130
128
  };
131
- InternalState.prototype.asyncUpdate = function (signal) {
129
+ InternalState.prototype.executeQuery = function (options) {
132
130
  var _this = this;
133
- return new Promise(function (resolve, reject) {
134
- var watchQueryOptions = _this.watchQueryOptions;
135
- var handleAborted = function () {
136
- _this.asyncResolveFns.delete(resolve);
137
- _this.optionsToIgnoreOnce.delete(watchQueryOptions);
138
- signal.removeEventListener('abort', handleAborted);
139
- reject(signal.reason);
140
- };
141
- _this.asyncResolveFns.add(resolve);
142
- _this.optionsToIgnoreOnce.add(watchQueryOptions);
143
- signal.addEventListener('abort', handleAborted);
144
- _this.forceUpdate();
131
+ var _a;
132
+ if (options.query) {
133
+ Object.assign(this, { query: options.query });
134
+ }
135
+ this.watchQueryOptions = this.createWatchQueryOptions(this.queryHookOptions = options);
136
+ var concast = this.observable.reobserveAsConcast(this.getObsQueryOptions());
137
+ this.previousData = ((_a = this.result) === null || _a === void 0 ? void 0 : _a.data) || this.previousData;
138
+ this.result = void 0;
139
+ this.forceUpdate();
140
+ return new Promise(function (resolve) {
141
+ var result;
142
+ concast.subscribe({
143
+ next: function (value) {
144
+ result = value;
145
+ },
146
+ error: function () {
147
+ resolve(_this.toQueryResult(_this.observable.getCurrentResult()));
148
+ },
149
+ complete: function () {
150
+ resolve(_this.toQueryResult(result));
151
+ }
152
+ });
145
153
  });
146
154
  };
147
155
  InternalState.prototype.useQuery = function (options) {
@@ -190,29 +198,22 @@ var InternalState = (function () {
190
198
  }
191
199
  };
192
200
  var subscription = obsQuery.subscribe(onNext, onError);
193
- return function () { return subscription.unsubscribe(); };
201
+ return function () { return setTimeout(function () { return subscription.unsubscribe(); }); };
194
202
  }, [
195
203
  obsQuery,
196
204
  this.renderPromises,
197
205
  this.client.disableNetworkFetches,
198
206
  ]), function () { return _this.getCurrentResult(); }, function () { return _this.getCurrentResult(); });
199
207
  this.unsafeHandlePartialRefetch(result);
200
- var queryResult = this.toQueryResult(result);
201
- if (!queryResult.loading && this.asyncResolveFns.size) {
202
- this.asyncResolveFns.forEach(function (resolve) { return resolve(queryResult); });
203
- this.asyncResolveFns.clear();
204
- }
205
- return queryResult;
208
+ return this.toQueryResult(result);
206
209
  };
207
210
  InternalState.prototype.useOptions = function (options) {
208
211
  var _a;
209
212
  var watchQueryOptions = this.createWatchQueryOptions(this.queryHookOptions = options);
210
213
  var currentWatchQueryOptions = this.watchQueryOptions;
211
- if (this.optionsToIgnoreOnce.has(currentWatchQueryOptions) ||
212
- !equality.equal(watchQueryOptions, currentWatchQueryOptions)) {
214
+ if (!equality.equal(watchQueryOptions, currentWatchQueryOptions)) {
213
215
  this.watchQueryOptions = watchQueryOptions;
214
216
  if (currentWatchQueryOptions && this.observable) {
215
- this.optionsToIgnoreOnce.delete(currentWatchQueryOptions);
216
217
  this.observable.reobserve(this.getObsQueryOptions());
217
218
  this.previousData = ((_a = this.result) === null || _a === void 0 ? void 0 : _a.data) || this.previousData;
218
219
  this.result = void 0;
@@ -378,10 +379,14 @@ var EAGER_METHODS = [
378
379
  ];
379
380
  function useLazyQuery(query, options) {
380
381
  var _a;
381
- var abortControllersRef = React.useRef(new Set());
382
382
  var execOptionsRef = React.useRef();
383
+ var optionsRef = React.useRef();
384
+ var queryRef = React.useRef();
383
385
  var merged = execOptionsRef.current ? utilities.mergeOptions(options, execOptionsRef.current) : options;
384
- var internalState = useInternalState(useApolloClient(options && options.client), (_a = merged === null || merged === void 0 ? void 0 : merged.query) !== null && _a !== void 0 ? _a : query);
386
+ var document = (_a = merged === null || merged === void 0 ? void 0 : merged.query) !== null && _a !== void 0 ? _a : query;
387
+ optionsRef.current = merged;
388
+ queryRef.current = document;
389
+ var internalState = useInternalState(useApolloClient(options && options.client), document);
385
390
  var useQueryResult = internalState.useQuery(tslib.__assign(tslib.__assign({}, merged), { skip: !execOptionsRef.current }));
386
391
  var initialFetchPolicy = useQueryResult.observable.options.initialFetchPolicy ||
387
392
  internalState.getDefaultFetchPolicy();
@@ -407,28 +412,15 @@ function useLazyQuery(query, options) {
407
412
  return eagerMethods;
408
413
  }, []);
409
414
  Object.assign(result, eagerMethods);
410
- React.useEffect(function () {
411
- return function () {
412
- abortControllersRef.current.forEach(function (controller) {
413
- controller.abort();
414
- });
415
- };
416
- }, []);
417
415
  var execute = React.useCallback(function (executeOptions) {
418
- var controller = new AbortController();
419
- abortControllersRef.current.add(controller);
420
416
  execOptionsRef.current = executeOptions ? tslib.__assign(tslib.__assign({}, executeOptions), { fetchPolicy: executeOptions.fetchPolicy || initialFetchPolicy }) : {
421
417
  fetchPolicy: initialFetchPolicy,
422
418
  };
419
+ var options = utilities.mergeOptions(optionsRef.current, tslib.__assign({ query: queryRef.current }, execOptionsRef.current));
423
420
  var promise = internalState
424
- .asyncUpdate(controller.signal)
425
- .then(function (queryResult) {
426
- abortControllersRef.current.delete(controller);
427
- return Object.assign(queryResult, eagerMethods);
428
- });
429
- promise.catch(function () {
430
- abortControllersRef.current.delete(controller);
431
- });
421
+ .executeQuery(tslib.__assign(tslib.__assign({}, options), { skip: false }))
422
+ .then(function (queryResult) { return Object.assign(queryResult, eagerMethods); });
423
+ promise.catch(function () { });
432
424
  return promise;
433
425
  }, []);
434
426
  return [execute, result];