diff --git a/packages/api-client-core/package.json b/packages/api-client-core/package.json index 878c25475..079a68778 100644 --- a/packages/api-client-core/package.json +++ b/packages/api-client-core/package.json @@ -20,16 +20,15 @@ }, "dependencies": { "@opentelemetry/api": "^1.4.0", - "@urql/core": "^3.0.1", - "@urql/exchange-multipart-fetch": "^1.0.1", - "cross-fetch": "^3.0.6", + "@urql/core": "^4.0.7", + "cross-fetch": "^3.1.5", "gql-query-builder": "^3.7.2", - "graphql": "^16.5.0", - "graphql-ws": "^5.5.5", - "isomorphic-ws": "^4.0.1", + "graphql": "^16.6.0", + "graphql-ws": "^5.13.1", + "isomorphic-ws": "^5.0.0", "lodash.clonedeep": "^4.5.0", "lodash.isequal": "^4.5.0", - "ws": "^8.11.0" + "ws": "^8.13.0" }, "devDependencies": { "@types/lodash.clonedeep": "^4.5.6", diff --git a/packages/api-client-core/spec/support.spec.ts b/packages/api-client-core/spec/support.spec.ts index 32b6f9ddc..3a99ac5de 100644 --- a/packages/api-client-core/spec/support.spec.ts +++ b/packages/api-client-core/spec/support.spec.ts @@ -16,6 +16,8 @@ describe("support utilities", () => { { operation: null as any, data: { foo: { bar: "baz" } }, + stale: false, + hasNext: false, }, ["foo", "bar"] ) @@ -29,6 +31,8 @@ describe("support utilities", () => { operation: null as any, data: null, error: new CombinedError({ networkError: new Error("foobar") }), + stale: false, + hasNext: false, }, ["foo", "bar"] @@ -43,6 +47,8 @@ describe("support utilities", () => { operation: null as any, data: null, error: new CombinedError({ networkError: new Error("foobar") }), + stale: false, + hasNext: false, }, ["foo", "bar"] @@ -60,6 +66,8 @@ describe("support utilities", () => { data: null, // @ts-expect-error an array of network errors doesn't match urql's types, but we've observed it at runtime error: new CombinedError({ networkError: [new Error("foo"), new Error("foo")] }), + stale: false, + hasNext: false, }, ["foo", "bar"] @@ -77,6 +85,8 @@ describe("support utilities", () => { operation: null as any, data: null, error: new CombinedError({ graphQLErrors: [new Error("foo")] }), + stale: false, + hasNext: false, }, ["foo", "bar"] @@ -91,6 +101,8 @@ describe("support utilities", () => { operation: null as any, data: null, error: new CombinedError({ graphQLErrors: [new Error("foo"), "bar"] }), + stale: false, + hasNext: false, }, ["foo", "bar"] @@ -108,6 +120,8 @@ describe("support utilities", () => { operation: null as any, data: null, error: new CombinedError({ graphQLErrors: [new GraphQLError("inner graphql error")] }), + stale: false, + hasNext: false, }, ["foo", "bar"] @@ -122,6 +136,8 @@ describe("support utilities", () => { operation: null as any, data: null, error: new CombinedError({ response: { whatever: true } }), + stale: false, + hasNext: false, }, ["foo", "bar"] @@ -138,6 +154,8 @@ describe("support utilities", () => { operation: null as any, data: null, error: new CombinedError({ graphQLErrors: [new GraphQLError("inner graphql error")] }), + stale: false, + hasNext: false, }, ["foo", "bar"] ) @@ -150,6 +168,8 @@ describe("support utilities", () => { operation: null as any, data: undefined, error: undefined, + stale: false, + hasNext: false, }, ["foo", "bar"] ); @@ -194,6 +214,8 @@ describe("support utilities", () => { { operation: null as any, data: { createWidget: { success: true, errors: null, widget: { bar: "baz" } } }, + stale: false, + hasNext: false, }, ["createWidget"] ) @@ -212,6 +234,8 @@ describe("support utilities", () => { widget: null, }, }, + stale: false, + hasNext: false, }, ["createWidget"] @@ -231,6 +255,8 @@ describe("support utilities", () => { widget: null, }, }, + stale: false, + hasNext: false, }, ["createWidget"] @@ -266,6 +292,8 @@ describe("support utilities", () => { widget: null, }, }, + stale: false, + hasNext: false, }, ["createWidget"] ); @@ -302,6 +330,8 @@ describe("support utilities", () => { widget: null, }, }, + stale: false, + hasNext: false, }, ["createWidget"] ); diff --git a/packages/api-client-core/src/GadgetConnection.ts b/packages/api-client-core/src/GadgetConnection.ts index b128f6ebc..f74e16a2b 100644 --- a/packages/api-client-core/src/GadgetConnection.ts +++ b/packages/api-client-core/src/GadgetConnection.ts @@ -1,6 +1,5 @@ import type { ClientOptions, RequestPolicy } from "@urql/core"; -import { Client, cacheExchange, dedupExchange, subscriptionExchange } from "@urql/core"; -import { multipartFetchExchange } from "@urql/exchange-multipart-fetch"; +import { Client, cacheExchange, fetchExchange, subscriptionExchange } from "@urql/core"; import fetchPolyfill from "cross-fetch"; import type { ExecutionResult } from "graphql"; import type { Sink, Client as SubscriptionClient, ClientOptions as SubscriptionClientOptions } from "graphql-ws"; @@ -100,7 +99,7 @@ export class GadgetConnection { } else { this._fetchImplementation = fetchPolyfill; } - this.websocketImplementation = options.websocketImplementation ?? WebSocket; + this.websocketImplementation = options.websocketImplementation ?? globalThis?.WebSocket ?? WebSocket; this.websocketsEndpoint = options.websocketsEndpoint ?? options.endpoint + "/batch"; this.websocketsEndpoint = this.websocketsEndpoint.replace(/^http/, "ws"); this.environment = options.environment ?? "Development"; @@ -214,10 +213,11 @@ export class GadgetConnection { requestPolicy: "network-only", // skip any cached data during transactions exchanges: [ subscriptionExchange({ - forwardSubscription(operation) { + forwardSubscription(request) { + const input = { ...request, query: request.query || "" }; return { subscribe: (sink) => { - const dispose = subscriptionClient!.subscribe(operation, sink as Sink); + const dispose = subscriptionClient!.subscribe(input, sink as Sink); return { unsubscribe: dispose, }; @@ -328,7 +328,7 @@ export class GadgetConnection { } private newBaseClient() { - const exchanges = [dedupExchange]; + const exchanges = []; // apply urql's default caching behaviour when client side (but skip it server side) if (typeof window != "undefined") { @@ -336,12 +336,13 @@ export class GadgetConnection { } exchanges.push( - multipartFetchExchange, + fetchExchange, subscriptionExchange({ - forwardSubscription: (operation) => { + forwardSubscription: (request) => { return { subscribe: (sink) => { - const dispose = this.baseSubscriptionClient.subscribe(operation, sink as Sink); + const input = { ...request, query: request.query || "" }; + const dispose = this.baseSubscriptionClient.subscribe(input, sink as Sink); return { unsubscribe: dispose, }; diff --git a/packages/react/package.json b/packages/react/package.json index 3d9411a6b..57dc79978 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -21,7 +21,7 @@ "dependencies": { "@gadgetinc/api-client-core": "^0.13.10", "deep-equal": "^2.2.0", - "urql": "^3.0.3" + "urql": "^4.0.2" }, "devDependencies": { "@testing-library/react": "^13.4.0", diff --git a/packages/react/spec/useAction.spec.tsx b/packages/react/spec/useAction.spec.tsx index a11ae98ed..ee96cd7b9 100644 --- a/packages/react/spec/useAction.spec.tsx +++ b/packages/react/spec/useAction.spec.tsx @@ -121,6 +121,8 @@ describe("useAction", () => { }, }, }, + stale: false, + hasNext: false, }); await act(async () => { @@ -173,6 +175,8 @@ describe("useAction", () => { }, }, }, + stale: false, + hasNext: false, }); await act(async () => { @@ -216,6 +220,8 @@ describe("useAction", () => { }, }, }, + stale: false, + hasNext: false, }); await act(async () => { @@ -254,6 +260,8 @@ describe("useAction", () => { }, }, }, + stale: false, + hasNext: false, }); await act(async () => { @@ -289,6 +297,8 @@ describe("useAction", () => { }, }, }, + stale: false, + hasNext: false, }); await act(async () => { diff --git a/packages/react/spec/useBulkAction.spec.ts b/packages/react/spec/useBulkAction.spec.ts index 0682ce258..46859f198 100644 --- a/packages/react/spec/useBulkAction.spec.ts +++ b/packages/react/spec/useBulkAction.spec.ts @@ -84,6 +84,8 @@ describe("useBulkAction", () => { ], }, }, + stale: false, + hasNext: false, }); await act(async () => { @@ -132,6 +134,8 @@ describe("useBulkAction", () => { widgets: null, }, }, + stale: false, + hasNext: false, }); await act(async () => { @@ -169,6 +173,8 @@ describe("useBulkAction", () => { ], }, }, + stale: false, + hasNext: false, }); await act(async () => { diff --git a/packages/react/spec/useFindBy.spec.ts b/packages/react/spec/useFindBy.spec.ts index 04ceabc78..3ac2ea97f 100644 --- a/packages/react/spec/useFindBy.spec.ts +++ b/packages/react/spec/useFindBy.spec.ts @@ -58,6 +58,8 @@ describe("useFindBy", () => { }, }, }, + stale: false, + hasNext: false, }); expect(result.current[0].data!.id).toEqual("123"); @@ -87,6 +89,8 @@ describe("useFindBy", () => { }, }, }, + stale: false, + hasNext: false, }); expect(result.current[0].data).toBeFalsy(); @@ -115,6 +119,8 @@ describe("useFindBy", () => { }, }, }, + stale: false, + hasNext: false, }); const data = result.current[0].data; diff --git a/packages/react/spec/useFindMany.spec.ts b/packages/react/spec/useFindMany.spec.ts index f0e67c537..e90fd61a8 100644 --- a/packages/react/spec/useFindMany.spec.ts +++ b/packages/react/spec/useFindMany.spec.ts @@ -57,6 +57,8 @@ describe("useFindMany", () => { }, }, }, + stale: false, + hasNext: false, }); expect(result.current[0].data![0].id).toEqual("123"); @@ -96,6 +98,8 @@ describe("useFindMany", () => { }, }, }, + stale: false, + hasNext: false, }); expect(result.current[0].data![0].id).toEqual("123"); @@ -130,6 +134,8 @@ describe("useFindMany", () => { }, }, }, + stale: false, + hasNext: false, }); expect(result.current[0].data![0].id).toEqual("def"); @@ -161,6 +167,8 @@ describe("useFindMany", () => { }, }, }, + stale: false, + hasNext: false, }); expect(result.current[0].data!.length).toEqual(0); @@ -192,6 +200,8 @@ describe("useFindMany", () => { }, }, }, + stale: false, + hasNext: false, }); const beforeObject = result.current[0]; diff --git a/packages/react/spec/useFindOne.spec.ts b/packages/react/spec/useFindOne.spec.ts index ce94acc1b..1887f698f 100644 --- a/packages/react/spec/useFindOne.spec.ts +++ b/packages/react/spec/useFindOne.spec.ts @@ -51,6 +51,8 @@ describe("useFindOne", () => { email: "test@test.com", }, }, + stale: false, + hasNext: false, }); expect(result.current[0].data!.id).toEqual("123"); @@ -72,6 +74,8 @@ describe("useFindOne", () => { data: { user: null, }, + stale: false, + hasNext: false, }); expect(result.current[0].data).toBeFalsy(); @@ -98,6 +102,8 @@ describe("useFindOne", () => { email: "test@test.com", }, }, + stale: false, + hasNext: false, }); const beforeObject = result.current[0]; diff --git a/packages/react/spec/useGet.spec.ts b/packages/react/spec/useGet.spec.ts index df24f01a5..576387b10 100644 --- a/packages/react/spec/useGet.spec.ts +++ b/packages/react/spec/useGet.spec.ts @@ -50,6 +50,8 @@ describe("useGet", () => { id: "123", }, }, + stale: false, + hasNext: false, }); expect(result.current[0].data!.id).toEqual("123"); @@ -70,6 +72,8 @@ describe("useGet", () => { data: { currentSession: null, }, + stale: false, + hasNext: false, }); expect(result.current[0].data).toBe(null); @@ -88,6 +92,8 @@ describe("useGet", () => { id: "123", }, }, + stale: false, + hasNext: false, }); const beforeObject = result.current[0]; diff --git a/packages/react/spec/useGlobalAction.spec.ts b/packages/react/spec/useGlobalAction.spec.ts index 8ea133018..36b6f9f6d 100644 --- a/packages/react/spec/useGlobalAction.spec.ts +++ b/packages/react/spec/useGlobalAction.spec.ts @@ -52,6 +52,8 @@ describe("useGlobalAction", () => { result: { flipped: true }, }, }, + stale: false, + hasNext: false, }); await act(async () => { @@ -92,6 +94,8 @@ describe("useGlobalAction", () => { ], }, }, + stale: false, + hasNext: false, }); await act(async () => { @@ -122,6 +126,8 @@ describe("useGlobalAction", () => { result: { flipped: true }, }, }, + stale: false, + hasNext: false, }); await act(async () => { diff --git a/packages/react/src/useAction.ts b/packages/react/src/useAction.ts index b61f6dc5a..42797da10 100644 --- a/packages/react/src/useAction.ts +++ b/packages/react/src/useAction.ts @@ -119,7 +119,7 @@ export const useAction = < ...context, additionalTypenames: [...(context?.additionalTypenames ?? []), capitalizeIdentifier(action.modelApiIdentifier)], }); - return processResult({ fetching: false, stale: false, ...result }, action); + return processResult({ fetching: false, ...result }, action); }, [action, runMutation] ), diff --git a/packages/react/src/useBulkAction.ts b/packages/react/src/useBulkAction.ts index e66b6d7ea..bb52decc0 100644 --- a/packages/react/src/useBulkAction.ts +++ b/packages/react/src/useBulkAction.ts @@ -79,7 +79,7 @@ export const useBulkAction = < ...context, additionalTypenames: [...(context?.additionalTypenames ?? []), capitalizeIdentifier(action.modelApiIdentifier)], }); - return processResult({ fetching: false, stale: false, ...result }, action); + return processResult({ fetching: false, ...result }, action); }, [action, runMutation] ), diff --git a/packages/react/src/useGlobalAction.ts b/packages/react/src/useGlobalAction.ts index 2cdd248ef..19108e4a5 100644 --- a/packages/react/src/useGlobalAction.ts +++ b/packages/react/src/useGlobalAction.ts @@ -43,7 +43,7 @@ export const useGlobalAction = >( useCallback( async (variables, context) => { const result = await runMutation(variables, context); - return processResult({ fetching: false, stale: false, ...result }, action); + return processResult({ fetching: false, ...result }, action); }, [action, runMutation] ), diff --git a/yarn.lock b/yarn.lock index 1f578bf2d..678dce344 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@0no-co/graphql.web@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@0no-co/graphql.web/-/graphql.web-1.0.1.tgz#db3da0d2cd41548b50f0583c0d2f4743c767e56b" + integrity sha512-6Yaxyv6rOwRkLIvFaL0NrLDgfNqC/Ng9QOPmTmlqW4mORXMEKmh5NYGkIvvt5Yw8fZesnMAqkj8cIqTj8f40cQ== + "@ampproject/remapping@^2.1.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" @@ -676,34 +681,46 @@ "@gadgetinc/api-client-core" "0.13.3" "@gadgetinc/api-client-core@0.11.0": - version "0.13.9" + version "0.13.10" dependencies: "@opentelemetry/api" "^1.4.0" - "@urql/core" "^3.0.1" - "@urql/exchange-multipart-fetch" "^1.0.1" - cross-fetch "^3.0.6" + "@urql/core" "^4.0.7" + cross-fetch "^3.1.5" gql-query-builder "^3.7.2" - graphql "^16.5.0" - graphql-ws "^5.5.5" - isomorphic-ws "^4.0.1" + graphql "^16.6.0" + graphql-ws "^5.13.1" + isomorphic-ws "^5.0.0" lodash.clonedeep "^4.5.0" lodash.isequal "^4.5.0" - ws "^8.11.0" + ws "^8.13.0" "@gadgetinc/api-client-core@0.13.3": - version "0.13.9" + version "0.13.10" dependencies: "@opentelemetry/api" "^1.4.0" - "@urql/core" "^3.0.1" - "@urql/exchange-multipart-fetch" "^1.0.1" - cross-fetch "^3.0.6" + "@urql/core" "^4.0.7" + cross-fetch "^3.1.5" gql-query-builder "^3.7.2" - graphql "^16.5.0" - graphql-ws "^5.5.5" - isomorphic-ws "^4.0.1" + graphql "^16.6.0" + graphql-ws "^5.13.1" + isomorphic-ws "^5.0.0" lodash.clonedeep "^4.5.0" lodash.isequal "^4.5.0" - ws "^8.11.0" + ws "^8.13.0" + +"@gadgetinc/api-client-core@0.13.9": + version "0.13.10" + dependencies: + "@opentelemetry/api" "^1.4.0" + "@urql/core" "^4.0.7" + cross-fetch "^3.1.5" + gql-query-builder "^3.7.2" + graphql "^16.6.0" + graphql-ws "^5.13.1" + isomorphic-ws "^5.0.0" + lodash.clonedeep "^4.5.0" + lodash.isequal "^4.5.0" + ws "^8.13.0" "@gadgetinc/eslint-config@^0.6.1": version "0.6.1" @@ -730,11 +747,6 @@ dependencies: prettier-plugin-organize-imports "^3.2.1" -"@graphql-typed-document-node/core@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.1.tgz#076d78ce99822258cf813ecc1e7fa460fa74d052" - integrity sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg== - "@humanwhocodes/config-array@^0.11.8": version "0.11.8" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" @@ -1618,30 +1630,13 @@ "@typescript-eslint/types" "5.59.2" eslint-visitor-keys "^3.3.0" -"@urql/core@>=3.0.0", "@urql/core@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@urql/core/-/core-3.0.1.tgz#76be27b0ac0b0e3ca02c5240fc1c19735b63df75" - integrity sha512-VMnAx1JsV32XjuCQVHHeq2BAn39XBSr6qEJd3xSE3Gwrc2NGndTZeFd6loZKmYF9XTHmvj8YbY2BFfHW7nGbmg== - dependencies: - "@graphql-typed-document-node/core" "^3.1.1" - wonka "^6.0.0" - -"@urql/core@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@urql/core/-/core-3.0.3.tgz#da054babb4d4aed26dc4503806b310ba6dd6eea1" - integrity sha512-raQP51ERNtg5BvlN8x8mHVRvk4K0ugWQ69n53BdkjKpXVV5kuWp7trnwriGv1fQKa8HuiGNSCfyslUucc0OVQg== +"@urql/core@^4.0.0", "@urql/core@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@urql/core/-/core-4.0.7.tgz#8918a956f8e2ffbaeb3aae58190d728813de5841" + integrity sha512-UtZ9oSbSFODXzFydgLCXpAQz26KGT1d6uEfcylKphiRWNXSWZi8k7vhJXNceNm/Dn0MiZ+kaaJHKcnGY1jvHRQ== dependencies: - "@graphql-typed-document-node/core" "^3.1.1" - wonka "^6.0.0" - -"@urql/exchange-multipart-fetch@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@urql/exchange-multipart-fetch/-/exchange-multipart-fetch-1.0.1.tgz#83d0b892897bb95d436a03af615442f635af22c5" - integrity sha512-fjxRrKR/D9Rs52L8wJMvqsGQBC/mjFcg/VdkSkU5IXmqCb5KmicXl2208hoCnaBl/QLA6NDpCNnG3zjDniMOTg== - dependencies: - "@urql/core" ">=3.0.0" - extract-files "^11.0.0" - wonka "^6.0.0" + "@0no-co/graphql.web" "^1.0.1" + wonka "^6.3.2" "@vitejs/plugin-react-swc@^3.0.0": version "3.3.0" @@ -2203,7 +2198,7 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-fetch@^3.0.6, cross-fetch@^3.1.5: +cross-fetch@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== @@ -2921,11 +2916,6 @@ expect@^29.0.0, expect@^29.3.1: jest-message-util "^29.3.1" jest-util "^29.3.1" -extract-files@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-11.0.0.tgz#b72d428712f787eef1f5193aff8ab5351ca8469a" - integrity sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -3304,17 +3294,17 @@ grapheme-splitter@^1.0.4: resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== -graphql-ws@^5.5.5: - version "5.8.2" - resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.8.2.tgz#800184b1addb20b3010dc06cb70877703a5fff20" - integrity sha512-hYo8kTGzxePFJtMGC7Y4cbypwifMphIJJ7n4TDcVUAfviRwQBnmZAbfZlC+XFwWDUaR7raEDQPxWctpccmE0JQ== +graphql-ws@^5.13.1: + version "5.13.1" + resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.13.1.tgz#96ac9963edb1e94c8e7f21af48ce5fcaab91779a" + integrity sha512-eiX7ES/ZQr0q7hSM5UBOEIFfaAUmAY9/CSDyAnsETuybByU7l/v46drRg9DQoTvVABEHp3QnrvwgTRMhqy7zxQ== graphql@16.5.0: version "16.5.0" resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.5.0.tgz#41b5c1182eaac7f3d47164fb247f61e4dfb69c85" integrity sha512-qbHgh8Ix+j/qY+a/ZcJnFQ+j8ezakqPiHwPiZhV/3PgGlgf96QMBB5/f2rkiC9sgLoy/xvT6TSiaf2nTHJh5iA== -graphql@^16.5.0: +graphql@^16.6.0: version "16.6.0" resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.6.0.tgz#c2dcffa4649db149f6282af726c8c83f1c7c5fdb" integrity sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw== @@ -3714,10 +3704,10 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isomorphic-ws@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== +isomorphic-ws@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" + integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" @@ -5693,13 +5683,13 @@ url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" -urql@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/urql/-/urql-3.0.3.tgz#275631f487558354e090d9ffc4ea2030bd56c34a" - integrity sha512-aVUAMRLdc5AOk239DxgXt6ZxTl/fEmjr7oyU5OGo8uvpqu42FkeJErzd2qBzhAQ3DyusoZIbqbBLPlnKo/yy2A== +urql@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/urql/-/urql-4.0.2.tgz#c67a64fe80a5a66f2916a24e31493e0c91ab2f56" + integrity sha512-jMb71UGtoAHI4A0TO15ZUSG8qvUxC5fBTXmUq/DyE3WWcnJkZbnMCBlcZIzMrXK4txAMIHE718jsaUujRkdlkg== dependencies: - "@urql/core" "^3.0.3" - wonka "^6.0.0" + "@urql/core" "^4.0.0" + wonka "^6.3.2" util-deprecate@^1.0.1: version "1.0.2" @@ -5868,10 +5858,10 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -wonka@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/wonka/-/wonka-6.0.0.tgz#38cd39a517fc3ff721ea3bf353642b353bf48860" - integrity sha512-TEiIOqkhQXbcmL1RrjxPCzTX15V5FSyJvZRSiTxvgTgrJMaOVKmzGTdRVh349CfaNo9dsIhWDyg1/GNq4NWrEg== +wonka@^6.3.2: + version "6.3.2" + resolved "https://registry.yarnpkg.com/wonka/-/wonka-6.3.2.tgz#6f32992b332251d7b696b038990f4dc284b3b33d" + integrity sha512-2xXbQ1LnwNS7egVm1HPhW2FyKrekolzhpM3mCwXdQr55gO+tAiY76rhb32OL9kKsW8taj++iP7C6hxlVzbnvrw== word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" @@ -5909,10 +5899,10 @@ write-file-atomic@^4.0.1: imurmurhash "^0.1.4" signal-exit "^3.0.7" -ws@^8.11.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" - integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== +ws@^8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== ws@^8.8.0: version "8.8.1"