From ef2edbf2f7e7eb7f19cadd4d1dd615166838837c Mon Sep 17 00:00:00 2001 From: Andrei Fidelman Date: Mon, 17 Feb 2025 16:22:28 +0100 Subject: [PATCH 1/5] Replace useFragment with Apollo's native --- .../apollo-react-relay-duct-tape/package.json | 3 +- .../compiledHooks/useCompiledFragment.ts | 168 ++++++++------ yarn.lock | 209 +++++++++++------- 3 files changed, 230 insertions(+), 150 deletions(-) diff --git a/packages/apollo-react-relay-duct-tape/package.json b/packages/apollo-react-relay-duct-tape/package.json index ca4e72a60..3f8ed1dff 100644 --- a/packages/apollo-react-relay-duct-tape/package.json +++ b/packages/apollo-react-relay-duct-tape/package.json @@ -20,7 +20,7 @@ "duct-tape-compiler": "yarn duct-tape-compiler:compiled-hooks && yarn duct-tape-compiler:noop-hooks" }, "devDependencies": { - "@apollo/client": ">= ^3.3.0 < 3.7.0", + "@apollo/client": "3.8.1", "@graphitation/apollo-mock-client": "^0.11.10", "@graphitation/graphql-js-operation-payload-generator": "^0.12.10", "@graphitation/graphql-js-tag": "^0.9.4", @@ -34,7 +34,6 @@ "ts-expect": "^1.3.0" }, "peerDependencies": { - "@apollo/client": ">= ^3.3.0 < 3.7.0", "graphql": "^15.0.0", "react": "^18.2.0" }, diff --git a/packages/apollo-react-relay-duct-tape/src/storeObservation/compiledHooks/useCompiledFragment.ts b/packages/apollo-react-relay-duct-tape/src/storeObservation/compiledHooks/useCompiledFragment.ts index 6e0d1dace..9a0bc81db 100644 --- a/packages/apollo-react-relay-duct-tape/src/storeObservation/compiledHooks/useCompiledFragment.ts +++ b/packages/apollo-react-relay-duct-tape/src/storeObservation/compiledHooks/useCompiledFragment.ts @@ -1,22 +1,23 @@ -import { useEffect, useMemo } from "react"; import invariant from "invariant"; -import { useForceUpdate } from "./useForceUpdate"; -import { useOverridenOrDefaultApolloClient } from "../../useOverridenOrDefaultApolloClient"; import type { FragmentReference } from "./types"; -import type { CompiledArtefactModule } from "@graphitation/apollo-react-relay-duct-tape-compiler"; -import { Cache } from "@apollo/client/core"; +import type { + CompiledArtefactModule, + Metadata, +} from "@graphitation/apollo-react-relay-duct-tape-compiler"; +import { DocumentNode } from "@apollo/client/core"; +import { useFragment, UseFragmentOptions } from "@apollo/client"; +import { Kind, ValueNode } from "graphql"; /** * @param documents Compiled watch query document that is used to setup a narrow * observable for just the data selected by the original fragment. * @param fragmentReference A Node object that has a globally unique `id` field. */ - export function useCompiledFragment( documents: CompiledArtefactModule, fragmentReference: FragmentReference, -): object { +) { invariant( fragmentReference, "useFragment(): Expected metadata to have been extracted from " + @@ -28,73 +29,102 @@ export function useCompiledFragment( "useFragment(): Expected a `watchQueryDocument` to have been " + "extracted. Did you forget to invoke the compiler?", ); + const from = fragmentReference.id; + invariant( + typeof from === "string", + "useFragment(): Expected the fragment reference to have a string id. " + + "Did you forget to invoke the compiler?", + ); + invariant( + metadata, + "useFragment(): Expected metadata to have been extracted from " + + "the fragment. Did you forget to invoke the compiler?", + ); - const client = useOverridenOrDefaultApolloClient(); - const forceUpdate = useForceUpdate(); + const defaultVariables = getDefaultVariables(watchQueryDocument); + const variables = { + ...defaultVariables, + ...fragmentReference.__fragments, + }; - const observableQuery = useMemo( - () => - client.watchQuery({ - fetchPolicy: "cache-only", - query: watchQueryDocument, - returnPartialData: false, - variables: { - ...fragmentReference.__fragments, - id: fragmentReference.id, - __fragments: fragmentReference.__fragments, - }, - }), - [client, fragmentReference.id, fragmentReference.__fragments], - ); + const doc: UseFragmentOptions = { + fragment: getFragmentDocumentFromWatchQueryDocument( + watchQueryDocument, + metadata, + ), + fragmentName: metadata?.mainFragment?.name, + from, + variables, + }; - useEffect(() => { - let skipFirst = true; - const subscription = observableQuery.subscribe( - () => { - // Unclear why, but this yields twice with the same results, so skip one. - if (skipFirst) { - skipFirst = false; - } else { - forceUpdate(); - } - }, - (error) => { - console.log(error); - }, - ); - return () => subscription.unsubscribe(); - }, [observableQuery]); + const result = useFragment(doc); + const data = result.complete ? result.data : {}; + return data as object; +} - const result = observableQuery.getCurrentResult(); - if (result.partial) { - invariant( - false, - "useFragment(): Missing data expected to be seeded by the execution query document: %s. Please check your type policies and possibleTypes configuration. If only subset of properties is missing you might need to configure merge functions for non-normalized types.", - JSON.stringify( - // we need the cast because queryInfo and lastDiff are private but very useful for debugging - ( - observableQuery as unknown as { - queryInfo?: { lastDiff?: { diff?: Cache.DiffResult } }; - } - ).queryInfo?.lastDiff?.diff?.missing?.map((e) => e.path), - ), - ); - } - let data = result.data; - if (metadata?.rootSelection) { - invariant( - data, - "useFragment(): Expected Apollo to respond with previously seeded data of the execution query document: %s. Did you configure your type policies and possibleTypes correctly? Check apollo-react-relay-duct-tape README for more details.", - JSON.stringify({ - selection: metadata.rootSelection, - mainFragment: metadata.mainFragment, - }), - ); - data = data[metadata.rootSelection]; +type DefaultValue = + | string + | number + | boolean + | { [key: string]: DefaultValue } + | DefaultValue[] + | undefined; + +const extractValue = (node: ValueNode): DefaultValue => { + if (!node) return undefined; + + switch (node.kind) { + case Kind.INT: + case Kind.FLOAT: + return Number(node.value); + case Kind.STRING: + case Kind.ENUM: + case Kind.BOOLEAN: + return node.value; + case Kind.LIST: + return node.values.map(extractValue); + case Kind.OBJECT: + return node.fields.reduce>((obj, field) => { + obj[field.name.value] = extractValue(field.value); + return obj; + }, {}); + default: + return undefined; } +}; + +function getDefaultVariables(documentNode: DocumentNode) { + const variableDefinitions = documentNode.definitions + .filter((def) => def.kind === Kind.OPERATION_DEFINITION) + .flatMap((def) => def.variableDefinitions || []); + + return variableDefinitions.reduce>( + (acc, varDef) => { + if (varDef.defaultValue) { + acc[varDef.variable.name.value] = extractValue(varDef.defaultValue); + } + return acc; + }, + {}, + ); +} +function getFragmentDocumentFromWatchQueryDocument( + watchQueryDocument: DocumentNode, + metadata: Metadata, +): DocumentNode { + const fragmentDefinition = watchQueryDocument.definitions.find((def) => { + if (def.kind === "FragmentDefinition") { + return def.name.value === metadata?.mainFragment?.name; + } + return false; + }); invariant( - data, - "useFragment(): Expected Apollo to respond with previously seeded data of the execution query document. Did you configure your type policies and possibleTypes correctly? Check apollo-react-relay-duct-tape README for more details.", + fragmentDefinition, + "useFragment(): Expected a fragment definition to be found in the " + + "watch query document. Did you forget to invoke the compiler?", ); - return data; + return { + kind: "Document", + definitions: [fragmentDefinition], + }; } diff --git a/yarn.lock b/yarn.lock index c16389cc1..2abb372de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,6 +10,25 @@ "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" +"@apollo/client@3.8.1": + version "3.8.1" + resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.8.1.tgz#a1e3045a5fb276c08e38f7b5f930551d79741257" + integrity sha512-JGGj/9bdoLEqzatRikDeN8etseY5qeFAY0vSAx/Pd0ePNsaflKzHx6V2NZ0NsGkInq+9IXXX3RLVDf0EotizMA== + dependencies: + "@graphql-typed-document-node/core" "^3.1.1" + "@wry/context" "^0.7.3" + "@wry/equality" "^0.5.6" + "@wry/trie" "^0.4.3" + graphql-tag "^2.12.6" + hoist-non-react-statics "^3.3.2" + optimism "^0.17.5" + prop-types "^15.7.2" + response-iterator "^0.2.6" + symbol-observable "^4.0.0" + ts-invariant "^0.10.3" + tslib "^2.3.0" + zen-observable-ts "^1.2.5" + "@apollo/client@>= ^3.3.0 < 3.7.0", "@apollo/client@~3.6.0": version "3.6.10" resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.6.10.tgz#f12d1f0cc4811d6bfe68b3f48a18e08a757ee301" @@ -90,12 +109,13 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/code-frame@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.25.7.tgz#438f2c524071531d643c6f0188e1e28f130cebc7" - integrity sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g== +"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== dependencies: - "@babel/highlight" "^7.25.7" + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" picocolors "^1.0.0" "@babel/compat-data@^7.13.8", "@babel/compat-data@^7.20.0": @@ -155,12 +175,13 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/generator@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.7.tgz#de86acbeb975a3e11ee92dd52223e6b03b479c56" - integrity sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA== +"@babel/generator@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.5.tgz#e44d4ab3176bbcaf78a5725da5f1dc28802a9458" + integrity sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw== dependencies: - "@babel/types" "^7.25.7" + "@babel/parser" "^7.26.5" + "@babel/types" "^7.26.5" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" @@ -299,20 +320,20 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w== -"@babel/helper-string-parser@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz#d50e8d37b1176207b4fe9acedec386c565a44a54" - integrity sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g== +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== -"@babel/helper-validator-identifier@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz#77b7f60c40b15c97df735b38a66ba1d7c3e93da5" - integrity sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg== +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== "@babel/helper-validator-option@^7.18.6": version "7.18.6" @@ -337,16 +358,6 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/highlight@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.7.tgz#20383b5f442aa606e7b5e3043b0b1aafe9f37de5" - integrity sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw== - dependencies: - "@babel/helper-validator-identifier" "^7.25.7" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" - "@babel/parser@7.15.5": version "7.15.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.5.tgz#d33a58ca69facc05b26adfe4abebfed56c1c2dac" @@ -357,12 +368,19 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.5.tgz#821bb520118fd25b982eaf8d37421cf5c64a312b" integrity sha512-J+IxH2IsxV4HbnTrSWgMAQj0UEo61hDA4Ny8h8PCX0MLXiibqHbqIOVneqdocemSBc22VpBKxt4J6FQzy9HarQ== -"@babel/parser@^7.25.7": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.8.tgz#f6aaf38e80c36129460c1657c0762db584c9d5e2" - integrity sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ== +"@babel/parser@^7.25.9", "@babel/parser@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.5.tgz#6fec9aebddef25ca57a935c86dbb915ae2da3e1f" + integrity sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw== dependencies: - "@babel/types" "^7.25.8" + "@babel/types" "^7.26.5" + +"@babel/parser@^7.26.7": + version "7.26.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.7.tgz#e114cd099e5f7d17b05368678da0fb9f69b3385c" + integrity sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w== + dependencies: + "@babel/types" "^7.26.7" "@babel/plugin-proposal-class-properties@^7.0.0": version "7.13.0" @@ -682,25 +700,25 @@ "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" -"@babel/template@^7.25.7": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.7.tgz#27f69ce382855d915b14ab0fe5fb4cbf88fa0769" - integrity sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA== +"@babel/template@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" + integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== dependencies: - "@babel/code-frame" "^7.25.7" - "@babel/parser" "^7.25.7" - "@babel/types" "^7.25.7" + "@babel/code-frame" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/types" "^7.25.9" "@babel/traverse@7.15.4", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.0", "@babel/traverse@^7.15.4", "@babel/traverse@^7.16.8", "@babel/traverse@^7.20.1", "@babel/traverse@^7.23.0", "@babel/traverse@^7.7.2": - version "7.25.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.7.tgz#83e367619be1cab8e4f2892ef30ba04c26a40fa8" - integrity sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg== - dependencies: - "@babel/code-frame" "^7.25.7" - "@babel/generator" "^7.25.7" - "@babel/parser" "^7.25.7" - "@babel/template" "^7.25.7" - "@babel/types" "^7.25.7" + version "7.26.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.7.tgz#99a0a136f6a75e7fb8b0a1ace421e0b25994b8bb" + integrity sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.5" + "@babel/parser" "^7.26.7" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.7" debug "^4.3.1" globals "^11.1.0" @@ -722,14 +740,21 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" -"@babel/types@^7.25.7", "@babel/types@^7.25.8": - version "7.25.8" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.8.tgz#5cf6037258e8a9bcad533f4979025140cb9993e1" - integrity sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg== +"@babel/types@^7.25.9", "@babel/types@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.5.tgz#7a1e1c01d28e26d1fe7f8ec9567b3b92b9d07747" + integrity sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg== dependencies: - "@babel/helper-string-parser" "^7.25.7" - "@babel/helper-validator-identifier" "^7.25.7" - to-fast-properties "^2.0.0" + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + +"@babel/types@^7.26.7": + version "7.26.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.7.tgz#5e2b89c0768e874d4d061961f3a5a153d71dc17a" + integrity sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" "@bcoe/v8-coverage@^0.2.3": version "0.2.3" @@ -2652,12 +2677,12 @@ tslib "^2.4.0" value-or-promise "^1.0.12" -"@graphql-typed-document-node/core@3.2.0", "@graphql-typed-document-node/core@^3.2.0": +"@graphql-typed-document-node/core@3.2.0", "@graphql-typed-document-node/core@^3.1.1", "@graphql-typed-document-node/core@^3.2.0": version "3.2.0" resolved "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== -"@graphql-typed-document-node/core@^3.0.0", "@graphql-typed-document-node/core@^3.1.1": +"@graphql-typed-document-node/core@^3.0.0": 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== @@ -4386,26 +4411,33 @@ dependencies: tslib "^2.1.0" -"@wry/context@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.7.0.tgz#be88e22c0ddf62aeb0ae9f95c3d90932c619a5c8" - integrity sha512-LcDAiYWRtwAoSOArfk7cuYvFXytxfVrdX7yxoUmK7pPITLk5jYh2F8knCwS7LjgYL8u1eidPlKKV6Ikqq0ODqQ== +"@wry/context@^0.7.0", "@wry/context@^0.7.3": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.7.4.tgz#e32d750fa075955c4ab2cfb8c48095e1d42d5990" + integrity sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ== dependencies: tslib "^2.3.0" -"@wry/equality@^0.5.0": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.5.2.tgz#72c8a7a7d884dff30b612f4f8464eba26c080e73" - integrity sha512-oVMxbUXL48EV/C0/M7gLVsoK6qRHPS85x8zECofEZOVvxGmIPLA9o5Z27cc2PoAyZz1S2VoM2A7FLAnpfGlneA== +"@wry/equality@^0.5.0", "@wry/equality@^0.5.6": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.5.7.tgz#72ec1a73760943d439d56b7b1e9985aec5d497bb" + integrity sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw== dependencies: tslib "^2.3.0" "@wry/trie@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.3.0.tgz#3245e74988c4e3033299e479a1bf004430752463" - integrity sha512-Yw1akIogPhAT6XPYsRHlZZIS0tIGmAl9EYXHi2scf7LPKKqdqmow/Hu4kEqP2cJR3EjaU/9L0ZlAjFf3hFxmug== + version "0.3.2" + resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.3.2.tgz#a06f235dc184bd26396ba456711f69f8c35097e6" + integrity sha512-yRTyhWSls2OY/pYLfwff867r8ekooZ4UI+/gxot5Wj8EFwSf2rG+n+Mo/6LoLQm1TKA4GRj2+LCpbfS937dClQ== dependencies: - tslib "^2.1.0" + tslib "^2.3.0" + +"@wry/trie@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.4.3.tgz#077d52c22365871bf3ffcbab8e95cb8bc5689af4" + integrity sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w== + dependencies: + tslib "^2.3.0" "@xstate/fsm@1.4.0": version "1.4.0" @@ -5713,9 +5745,9 @@ copy-to-clipboard@^3.2.0: toggle-selection "^1.0.6" core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== cosmiconfig-toml-loader@1.0.0: version "1.0.0" @@ -5761,11 +5793,11 @@ create-require@^1.1.0: integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-fetch@3.1.4, cross-fetch@^3.0.4, cross-fetch@^3.0.6, cross-fetch@^3.1.4, cross-fetch@^3.1.5: - version "3.1.8" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" - integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3" + integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q== dependencies: - node-fetch "^2.6.12" + node-fetch "^2.7.0" cross-spawn@^6.0.5: version "6.0.5" @@ -9532,7 +9564,7 @@ node-emoji@^1.10.0: dependencies: lodash.toarray "^4.4.0" -node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.5, node-fetch@^2.6.7: +node-fetch@^2.6.1, node-fetch@^2.6.5, node-fetch@^2.6.7, node-fetch@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -9750,6 +9782,15 @@ optimism@^0.16.1: "@wry/context" "^0.7.0" "@wry/trie" "^0.3.0" +optimism@^0.17.5: + version "0.17.5" + resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.17.5.tgz#a4c78b3ad12c58623abedbebb4f2f2c19b8e8816" + integrity sha512-TEcp8ZwK1RczmvMnvktxHSF2tKgMWjJ71xEFGX5ApLh67VsMSTy1ZUlipJw8W+KaqgOmQ+4pqwkeivY89j+4Vw== + dependencies: + "@wry/context" "^0.7.0" + "@wry/trie" "^0.4.3" + tslib "^2.3.0" + optionator@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" @@ -10633,6 +10674,11 @@ resolve@~1.17.0: dependencies: path-parse "^1.0.6" +response-iterator@^0.2.6: + version "0.2.20" + resolved "https://registry.yarnpkg.com/response-iterator/-/response-iterator-0.2.20.tgz#9a8259d7f6fe35fb81ab2d8f2b938e5e6c892821" + integrity sha512-RfNi9saiJ9VKznrRZEGZtlfeiQI7NWMUlXvmkvO60xaHfW1y+36EOibZkV59LuKNak8VIqL6IyxYxhMOGTurIQ== + responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -11665,11 +11711,16 @@ tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2, tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0, tslib@~2.4.0: +tslib@^2, tslib@^2.0.0, tslib@^2.0.3, tslib@^2.3.1, tslib@^2.4.0, tslib@~2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== +tslib@^2.1.0, tslib@^2.3.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tslib@^2.4.1, tslib@^2.5.0, tslib@^2.6.1, tslib@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" From 6ee69a1892c4292e03ddcea69b76e5b012b30696 Mon Sep 17 00:00:00 2001 From: Andrei Fidelman Date: Mon, 24 Feb 2025 16:06:31 +0100 Subject: [PATCH 2/5] Review fixes (path apollo and invariant result.complete) --- .../apollo-react-relay-duct-tape/package.json | 3 +- .../compiledHooks/useCompiledFragment.ts | 12 +- patches/@apollo+client+3.6.10.patch | 179 ++++++++++++++++++ yarn.lock | 44 +---- 4 files changed, 191 insertions(+), 47 deletions(-) diff --git a/packages/apollo-react-relay-duct-tape/package.json b/packages/apollo-react-relay-duct-tape/package.json index 3f8ed1dff..ca4e72a60 100644 --- a/packages/apollo-react-relay-duct-tape/package.json +++ b/packages/apollo-react-relay-duct-tape/package.json @@ -20,7 +20,7 @@ "duct-tape-compiler": "yarn duct-tape-compiler:compiled-hooks && yarn duct-tape-compiler:noop-hooks" }, "devDependencies": { - "@apollo/client": "3.8.1", + "@apollo/client": ">= ^3.3.0 < 3.7.0", "@graphitation/apollo-mock-client": "^0.11.10", "@graphitation/graphql-js-operation-payload-generator": "^0.12.10", "@graphitation/graphql-js-tag": "^0.9.4", @@ -34,6 +34,7 @@ "ts-expect": "^1.3.0" }, "peerDependencies": { + "@apollo/client": ">= ^3.3.0 < 3.7.0", "graphql": "^15.0.0", "react": "^18.2.0" }, diff --git a/packages/apollo-react-relay-duct-tape/src/storeObservation/compiledHooks/useCompiledFragment.ts b/packages/apollo-react-relay-duct-tape/src/storeObservation/compiledHooks/useCompiledFragment.ts index 9a0bc81db..fb135aa30 100644 --- a/packages/apollo-react-relay-duct-tape/src/storeObservation/compiledHooks/useCompiledFragment.ts +++ b/packages/apollo-react-relay-duct-tape/src/storeObservation/compiledHooks/useCompiledFragment.ts @@ -32,8 +32,7 @@ export function useCompiledFragment( const from = fragmentReference.id; invariant( typeof from === "string", - "useFragment(): Expected the fragment reference to have a string id. " + - "Did you forget to invoke the compiler?", + "useFragment(): Expected the fragment reference to have a string id.", ); invariant( metadata, @@ -58,8 +57,13 @@ export function useCompiledFragment( }; const result = useFragment(doc); - const data = result.complete ? result.data : {}; - return data as object; + + invariant( + result.complete, + "useFragment(): Missing data expected to be seeded by the execution query document. Please check your type policies and possibleTypes configuration. If only subset of properties is missing you might need to configure merge functions for non-normalized types.", + ); + + return result.data as object; } type DefaultValue = diff --git a/patches/@apollo+client+3.6.10.patch b/patches/@apollo+client+3.6.10.patch index 224af6fdd..fe2ee4da7 100644 --- a/patches/@apollo+client+3.6.10.patch +++ b/patches/@apollo+client+3.6.10.patch @@ -19,6 +19,70 @@ index afbbcd0..d93d0af 100644 fieldName: fieldName, storeFieldName: storeFieldName, variables: variables, +diff --git a/node_modules/@apollo/client/cache/core/types/Cache.d.ts b/node_modules/@apollo/client/cache/core/types/Cache.d.ts +index 13fdd1f..6ceac48 100644 +--- a/node_modules/@apollo/client/cache/core/types/Cache.d.ts ++++ b/node_modules/@apollo/client/cache/core/types/Cache.d.ts +@@ -14,9 +14,9 @@ export declare namespace Cache { + dataId?: string; + result: TResult; + } +- interface DiffOptions extends ReadOptions { ++ interface DiffOptions extends Omit, "rootId"> { + } +- interface WatchOptions extends ReadOptions { ++ interface WatchOptions extends DiffOptions { + watcher?: object; + immediate?: boolean; + callback: WatchCallback; +diff --git a/node_modules/@apollo/client/cache/core/types/common.js b/node_modules/@apollo/client/cache/core/types/common.js +index bf82b96..266f9fe 100644 +--- a/node_modules/@apollo/client/cache/core/types/common.js ++++ b/node_modules/@apollo/client/cache/core/types/common.js +@@ -7,6 +7,15 @@ var MissingFieldError = (function (_super) { + _this.path = path; + _this.query = query; + _this.variables = variables; ++ if (Array.isArray(_this.path)) { ++ _this.missing = _this.message; ++ for (var i = _this.path.length - 1; i >= 0; --i) { ++ _this.missing = (_a = {}, _a[_this.path[i]] = _this.missing, _a); ++ } ++ } ++ else { ++ _this.missing = _this.path; ++ } + _this.__proto__ = MissingFieldError.prototype; + return _this; + } +diff --git a/node_modules/@apollo/client/cache/index.d.ts b/node_modules/@apollo/client/cache/index.d.ts +index 2f13047..4d9e466 100644 +--- a/node_modules/@apollo/client/cache/index.d.ts ++++ b/node_modules/@apollo/client/cache/index.d.ts +@@ -2,7 +2,7 @@ import '../utilities/globals'; + export { Transaction, ApolloCache } from './core/cache'; + export { Cache } from './core/types/Cache'; + export { DataProxy } from './core/types/DataProxy'; +-export { Modifier, Modifiers, MissingFieldError, ReadFieldOptions } from './core/types/common'; ++export { MissingTree, Modifier, Modifiers, MissingFieldError, ReadFieldOptions } from './core/types/common'; + export { Reference, isReference, makeReference, } from '../utilities'; + export { EntityStore } from './inmemory/entityStore'; + export { fieldNameFromStoreName, defaultDataIdFromObject, } from './inmemory/helpers'; +diff --git a/node_modules/@apollo/client/cache/inmemory/inMemoryCache.js b/node_modules/@apollo/client/cache/inmemory/inMemoryCache.js +index 18fb41a..d8360e0 100644 +--- a/node_modules/@apollo/client/cache/inmemory/inMemoryCache.js ++++ b/node_modules/@apollo/client/cache/inmemory/inMemoryCache.js +@@ -60,8 +60,8 @@ var InMemoryCache = (function (_super) { + makeCacheKey: function (c) { + var store = c.optimistic ? _this.optimisticData : _this.data; + if (supportsResultCaching(store)) { +- var optimistic = c.optimistic, rootId = c.rootId, variables = c.variables; +- return store.makeCacheKey(c.query, c.callback, canonicalStringify({ optimistic: optimistic, rootId: rootId, variables: variables })); ++ var optimistic = c.optimistic, id = c.id, variables = c.variables; ++ return store.makeCacheKey(c.query, c.callback, canonicalStringify({ optimistic: optimistic, id: id, variables: variables })); + } + } + }); diff --git a/node_modules/@apollo/client/cache/inmemory/policies.d.ts b/node_modules/@apollo/client/cache/inmemory/policies.d.ts index 6a93238..fdef0a4 100644 --- a/node_modules/@apollo/client/cache/inmemory/policies.d.ts @@ -58,3 +122,118 @@ index a2c1b93..d28dddf 100644 fieldName: fieldName, storeFieldName: storeFieldName, variables: variables, +diff --git a/node_modules/@apollo/client/react/hooks/index.d.ts b/node_modules/@apollo/client/react/hooks/index.d.ts +index a590efb..458f53f 100644 +--- a/node_modules/@apollo/client/react/hooks/index.d.ts ++++ b/node_modules/@apollo/client/react/hooks/index.d.ts +@@ -5,4 +5,5 @@ export * from './useMutation'; + export { useQuery } from './useQuery'; + export * from './useSubscription'; + export * from './useReactiveVar'; ++export * from "./useFragment.js"; + //# sourceMappingURL=index.d.ts.map +\ No newline at end of file +diff --git a/node_modules/@apollo/client/react/hooks/index.js b/node_modules/@apollo/client/react/hooks/index.js +index 5a93908..074732c 100644 +--- a/node_modules/@apollo/client/react/hooks/index.js ++++ b/node_modules/@apollo/client/react/hooks/index.js +@@ -5,4 +5,5 @@ export * from "./useMutation.js"; + export { useQuery } from "./useQuery.js"; + export * from "./useSubscription.js"; + export * from "./useReactiveVar.js"; ++export * from "./useFragment.js"; + //# sourceMappingURL=index.js.map +\ No newline at end of file +diff --git a/node_modules/@apollo/client/react/hooks/useFragment.d.ts b/node_modules/@apollo/client/react/hooks/useFragment.d.ts +new file mode 100644 +index 0000000..0e91e5e +--- /dev/null ++++ b/node_modules/@apollo/client/react/hooks/useFragment.d.ts +@@ -0,0 +1,19 @@ ++import type { DeepPartial } from "../../utilities/index.js"; ++import type { Cache, Reference, StoreObject, MissingTree } from "../../cache/index.js"; ++import type { OperationVariables } from "../../core/index.js"; ++import type { NoInfer } from "../types/types.js"; ++export interface UseFragmentOptions extends Omit, NoInfer>, "id" | "query" | "optimistic" | "previousResult" | "returnPartialData">, Omit, "id" | "variables" | "returnPartialData"> { ++ from: StoreObject | Reference | string; ++ optimistic?: boolean; ++} ++export type UseFragmentResult = { ++ data: TData; ++ complete: true; ++ missing?: never; ++} | { ++ data: DeepPartial; ++ complete: false; ++ missing?: MissingTree; ++}; ++export declare function useFragment(options: UseFragmentOptions): UseFragmentResult; ++//# sourceMappingURL=useFragment.d.ts.map +\ No newline at end of file +diff --git a/node_modules/@apollo/client/react/hooks/useFragment.d.ts.map b/node_modules/@apollo/client/react/hooks/useFragment.d.ts.map +new file mode 100644 +index 0000000..09c87a4 +--- /dev/null ++++ b/node_modules/@apollo/client/react/hooks/useFragment.d.ts.map +@@ -0,0 +1 @@ ++{"version":3,"file":"useFragment.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useFragment.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,KAAK,EACV,KAAK,EACL,SAAS,EACT,WAAW,EACX,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAI9B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,WAAW,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAC9C,SAAQ,IAAI,CACR,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EACjD,IAAI,GAAG,OAAO,GAAG,YAAY,GAAG,gBAAgB,GAAG,mBAAmB,CACvE,EACD,IAAI,CACF,KAAK,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,EACvC,IAAI,GAAG,WAAW,GAAG,mBAAmB,CACzC;IACH,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;IAEvC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,iBAAiB,CAAC,KAAK,IAC/B;IACE,IAAI,EAAE,KAAK,CAAC;IACZ,QAAQ,EAAE,IAAI,CAAC;IACf,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB,GACD;IACE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB,CAAC;AAEN,wBAAgB,WAAW,CAAC,KAAK,GAAG,GAAG,EAAE,KAAK,GAAG,kBAAkB,EACjE,OAAO,EAAE,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,GACxC,iBAAiB,CAAC,KAAK,CAAC,CA8C1B"} +\ No newline at end of file +diff --git a/node_modules/@apollo/client/react/hooks/useFragment.js b/node_modules/@apollo/client/react/hooks/useFragment.js +new file mode 100644 +index 0000000..0f480b5 +--- /dev/null ++++ b/node_modules/@apollo/client/react/hooks/useFragment.js +@@ -0,0 +1,44 @@ ++import { __assign, __rest } from "tslib"; ++import * as React from "react"; ++import { equal } from "@wry/equality"; ++import { mergeDeepArray } from "../../utilities/index.js"; ++import { useApolloClient } from "./useApolloClient.js"; ++import { useSyncExternalStore } from "./useSyncExternalStore.js"; ++export function useFragment(options) { ++ var cache = useApolloClient().cache; ++ var fragment = options.fragment, fragmentName = options.fragmentName, from = options.from, _a = options.optimistic, optimistic = _a === void 0 ? true : _a, rest = __rest(options, ["fragment", "fragmentName", "from", "optimistic"]); ++ var diffOptions = __assign(__assign({}, rest), { returnPartialData: true, id: typeof from === "string" ? from : cache.identify(from), query: cache["getFragmentDoc"](fragment, fragmentName), optimistic: optimistic }); ++ var resultRef = React.useRef(); ++ var latestDiff = cache.diff(diffOptions); ++ var getSnapshot = function () { ++ var latestDiffToResult = diffToResult(latestDiff); ++ return resultRef.current && ++ equal(resultRef.current.data, latestDiffToResult.data) ++ ? resultRef.current ++ : (resultRef.current = latestDiffToResult); ++ }; ++ return useSyncExternalStore(function (forceUpdate) { ++ var lastTimeout = 0; ++ var unsubcribe = cache.watch(__assign(__assign({}, diffOptions), { immediate: true, callback: function (diff) { ++ if (!equal(diff, latestDiff)) { ++ resultRef.current = diffToResult((latestDiff = diff)); ++ lastTimeout = setTimeout(forceUpdate); ++ } ++ } })); ++ return function () { ++ unsubcribe(); ++ clearTimeout(lastTimeout); ++ }; ++ }, getSnapshot, getSnapshot); ++} ++function diffToResult(diff) { ++ var result = { ++ data: diff.result, ++ complete: !!diff.complete, ++ }; ++ if (diff.missing) { ++ result.missing = mergeDeepArray(diff.missing.map(function (error) { return error.missing; })); ++ } ++ return result; ++} ++//# sourceMappingURL=useFragment.js.map +\ No newline at end of file +diff --git a/node_modules/@apollo/client/react/hooks/useFragment.js.map b/node_modules/@apollo/client/react/hooks/useFragment.js.map +new file mode 100644 +index 0000000..abd2a70 +--- /dev/null ++++ b/node_modules/@apollo/client/react/hooks/useFragment.js.map +@@ -0,0 +1 @@ ++{"version":3,"file":"useFragment.js","sourceRoot":"","sources":["../../../src/react/hooks/useFragment.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAQ1D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AA8BjE,MAAM,UAAU,WAAW,CACzB,OAAyC;IAEjC,IAAA,KAAK,GAAK,eAAe,EAAE,MAAtB,CAAuB;IAE5B,IAAA,QAAQ,GAAqD,OAAO,SAA5D,EAAE,YAAY,GAAuC,OAAO,aAA9C,EAAE,IAAI,GAAiC,OAAO,KAAxC,EAAE,KAA+B,OAAO,WAArB,EAAjB,UAAU,mBAAG,IAAI,KAAA,EAAK,IAAI,UAAK,OAAO,EAAtE,kDAA4D,CAAF,CAAa;IAE7E,IAAM,WAAW,yBACZ,IAAI,KACP,iBAAiB,EAAE,IAAI,EACvB,EAAE,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC1D,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,EACtD,UAAU,YAAA,GACX,CAAC;IAEF,IAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAA4B,CAAC;IAC3D,IAAI,UAAU,GAAG,KAAK,CAAC,IAAI,CAAQ,WAAW,CAAC,CAAC;IAGhD,IAAM,WAAW,GAAG;QAClB,IAAM,kBAAkB,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACpD,OAAO,SAAS,CAAC,OAAO;YACtB,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC;YACtD,CAAC,CAAC,SAAS,CAAC,OAAO;YACnB,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,GAAG,kBAAkB,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF,OAAO,oBAAoB,CACzB,UAAC,WAAW;QACV,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAM,UAAU,GAAG,KAAK,CAAC,KAAK,uBACzB,WAAW,KACd,SAAS,EAAE,IAAI,EACf,QAAQ,YAAC,IAAI;gBACX,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;oBAC5B,SAAS,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC;oBACtD,WAAW,GAAG,UAAU,CAAC,WAAW,CAAQ,CAAC;iBAC9C;YACH,CAAC,IACD,CAAC;QACH,OAAO;YACL,UAAU,EAAE,CAAC;YACb,YAAY,CAAC,WAAW,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC,EACD,WAAW,EACX,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,IAA6B;IAE7B,IAAM,MAAM,GAAG;QACb,IAAI,EAAE,IAAI,CAAC,MAAO;QAClB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;KACE,CAAC;IAE9B,IAAI,IAAI,CAAC,OAAO,EAAE;QAChB,MAAM,CAAC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,OAAO,EAAb,CAAa,CAAC,CAAC,CAAC;KAC7E;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import * as React from \"react\";\nimport { equal } from \"@wry/equality\";\n\nimport type { DeepPartial } from \"../../utilities/index.js\";\nimport { mergeDeepArray } from \"../../utilities/index.js\";\nimport type {\n Cache,\n Reference,\n StoreObject,\n MissingTree,\n} from \"../../cache/index.js\";\n\nimport { useApolloClient } from \"./useApolloClient.js\";\nimport { useSyncExternalStore } from \"./useSyncExternalStore.js\";\nimport type { OperationVariables } from \"../../core/index.js\";\nimport type { NoInfer } from \"../types/types.js\";\n\nexport interface UseFragmentOptions\n extends Omit<\n Cache.DiffOptions, NoInfer>,\n \"id\" | \"query\" | \"optimistic\" | \"previousResult\" | \"returnPartialData\"\n >,\n Omit<\n Cache.ReadFragmentOptions,\n \"id\" | \"variables\" | \"returnPartialData\"\n > {\n from: StoreObject | Reference | string;\n // Override this field to make it optional (default: true).\n optimistic?: boolean;\n}\n\nexport type UseFragmentResult =\n | {\n data: TData;\n complete: true;\n missing?: never;\n }\n | {\n data: DeepPartial;\n complete: false;\n missing?: MissingTree;\n };\n\nexport function useFragment(\n options: UseFragmentOptions\n): UseFragmentResult {\n const { cache } = useApolloClient();\n\n const { fragment, fragmentName, from, optimistic = true, ...rest } = options;\n\n const diffOptions: Cache.DiffOptions = {\n ...rest,\n returnPartialData: true,\n id: typeof from === \"string\" ? from : cache.identify(from),\n query: cache[\"getFragmentDoc\"](fragment, fragmentName),\n optimistic,\n };\n\n const resultRef = React.useRef>();\n let latestDiff = cache.diff(diffOptions);\n\n // Used for both getSnapshot and getServerSnapshot\n const getSnapshot = () => {\n const latestDiffToResult = diffToResult(latestDiff);\n return resultRef.current &&\n equal(resultRef.current.data, latestDiffToResult.data)\n ? resultRef.current\n : (resultRef.current = latestDiffToResult);\n };\n\n return useSyncExternalStore(\n (forceUpdate) => {\n let lastTimeout = 0;\n const unsubcribe = cache.watch({\n ...diffOptions,\n immediate: true,\n callback(diff) {\n if (!equal(diff, latestDiff)) {\n resultRef.current = diffToResult((latestDiff = diff));\n lastTimeout = setTimeout(forceUpdate) as any;\n }\n },\n });\n return () => {\n unsubcribe();\n clearTimeout(lastTimeout);\n };\n },\n getSnapshot,\n getSnapshot\n );\n}\n\nfunction diffToResult(\n diff: Cache.DiffResult\n): UseFragmentResult {\n const result = {\n data: diff.result!,\n complete: !!diff.complete,\n } as UseFragmentResult;\n\n if (diff.missing) {\n result.missing = mergeDeepArray(diff.missing.map((error) => error.missing));\n }\n\n return result;\n}\n"]} +\ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 2abb372de..46d6fe75b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,25 +10,6 @@ "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" -"@apollo/client@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.8.1.tgz#a1e3045a5fb276c08e38f7b5f930551d79741257" - integrity sha512-JGGj/9bdoLEqzatRikDeN8etseY5qeFAY0vSAx/Pd0ePNsaflKzHx6V2NZ0NsGkInq+9IXXX3RLVDf0EotizMA== - dependencies: - "@graphql-typed-document-node/core" "^3.1.1" - "@wry/context" "^0.7.3" - "@wry/equality" "^0.5.6" - "@wry/trie" "^0.4.3" - graphql-tag "^2.12.6" - hoist-non-react-statics "^3.3.2" - optimism "^0.17.5" - prop-types "^15.7.2" - response-iterator "^0.2.6" - symbol-observable "^4.0.0" - ts-invariant "^0.10.3" - tslib "^2.3.0" - zen-observable-ts "^1.2.5" - "@apollo/client@>= ^3.3.0 < 3.7.0", "@apollo/client@~3.6.0": version "3.6.10" resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.6.10.tgz#f12d1f0cc4811d6bfe68b3f48a18e08a757ee301" @@ -4411,14 +4392,14 @@ dependencies: tslib "^2.1.0" -"@wry/context@^0.7.0", "@wry/context@^0.7.3": +"@wry/context@^0.7.0": version "0.7.4" resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.7.4.tgz#e32d750fa075955c4ab2cfb8c48095e1d42d5990" integrity sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ== dependencies: tslib "^2.3.0" -"@wry/equality@^0.5.0", "@wry/equality@^0.5.6": +"@wry/equality@^0.5.0": version "0.5.7" resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.5.7.tgz#72ec1a73760943d439d56b7b1e9985aec5d497bb" integrity sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw== @@ -4432,13 +4413,6 @@ dependencies: tslib "^2.3.0" -"@wry/trie@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.4.3.tgz#077d52c22365871bf3ffcbab8e95cb8bc5689af4" - integrity sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w== - dependencies: - tslib "^2.3.0" - "@xstate/fsm@1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@xstate/fsm/-/fsm-1.4.0.tgz#6fd082336fde4d026e9e448576189ee5265fa51a" @@ -9782,15 +9756,6 @@ optimism@^0.16.1: "@wry/context" "^0.7.0" "@wry/trie" "^0.3.0" -optimism@^0.17.5: - version "0.17.5" - resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.17.5.tgz#a4c78b3ad12c58623abedbebb4f2f2c19b8e8816" - integrity sha512-TEcp8ZwK1RczmvMnvktxHSF2tKgMWjJ71xEFGX5ApLh67VsMSTy1ZUlipJw8W+KaqgOmQ+4pqwkeivY89j+4Vw== - dependencies: - "@wry/context" "^0.7.0" - "@wry/trie" "^0.4.3" - tslib "^2.3.0" - optionator@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" @@ -10674,11 +10639,6 @@ resolve@~1.17.0: dependencies: path-parse "^1.0.6" -response-iterator@^0.2.6: - version "0.2.20" - resolved "https://registry.yarnpkg.com/response-iterator/-/response-iterator-0.2.20.tgz#9a8259d7f6fe35fb81ab2d8f2b938e5e6c892821" - integrity sha512-RfNi9saiJ9VKznrRZEGZtlfeiQI7NWMUlXvmkvO60xaHfW1y+36EOibZkV59LuKNak8VIqL6IyxYxhMOGTurIQ== - responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" From 981a19846c92898cae96282f2834f43983997ce8 Mon Sep 17 00:00:00 2001 From: Andrei Fidelman Date: Wed, 26 Feb 2025 19:31:47 +0100 Subject: [PATCH 3/5] revert yarn lock --- yarn.lock | 167 +++++++++++++++++++++++++----------------------------- 1 file changed, 78 insertions(+), 89 deletions(-) diff --git a/yarn.lock b/yarn.lock index 46d6fe75b..5b89e1fc0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -90,13 +90,12 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.2": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" - integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== +"@babel/code-frame@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.25.7.tgz#438f2c524071531d643c6f0188e1e28f130cebc7" + integrity sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g== dependencies: - "@babel/helper-validator-identifier" "^7.25.9" - js-tokens "^4.0.0" + "@babel/highlight" "^7.25.7" picocolors "^1.0.0" "@babel/compat-data@^7.13.8", "@babel/compat-data@^7.20.0": @@ -156,13 +155,12 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/generator@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.5.tgz#e44d4ab3176bbcaf78a5725da5f1dc28802a9458" - integrity sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw== +"@babel/generator@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.7.tgz#de86acbeb975a3e11ee92dd52223e6b03b479c56" + integrity sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA== dependencies: - "@babel/parser" "^7.26.5" - "@babel/types" "^7.26.5" + "@babel/types" "^7.25.7" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" @@ -301,20 +299,20 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w== -"@babel/helper-string-parser@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" - integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== +"@babel/helper-string-parser@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz#d50e8d37b1176207b4fe9acedec386c565a44a54" + integrity sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g== "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== -"@babel/helper-validator-identifier@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" - integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== +"@babel/helper-validator-identifier@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz#77b7f60c40b15c97df735b38a66ba1d7c3e93da5" + integrity sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg== "@babel/helper-validator-option@^7.18.6": version "7.18.6" @@ -339,6 +337,16 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.7.tgz#20383b5f442aa606e7b5e3043b0b1aafe9f37de5" + integrity sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw== + dependencies: + "@babel/helper-validator-identifier" "^7.25.7" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + "@babel/parser@7.15.5": version "7.15.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.5.tgz#d33a58ca69facc05b26adfe4abebfed56c1c2dac" @@ -349,19 +357,12 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.5.tgz#821bb520118fd25b982eaf8d37421cf5c64a312b" integrity sha512-J+IxH2IsxV4HbnTrSWgMAQj0UEo61hDA4Ny8h8PCX0MLXiibqHbqIOVneqdocemSBc22VpBKxt4J6FQzy9HarQ== -"@babel/parser@^7.25.9", "@babel/parser@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.5.tgz#6fec9aebddef25ca57a935c86dbb915ae2da3e1f" - integrity sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw== +"@babel/parser@^7.25.7": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.8.tgz#f6aaf38e80c36129460c1657c0762db584c9d5e2" + integrity sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ== dependencies: - "@babel/types" "^7.26.5" - -"@babel/parser@^7.26.7": - version "7.26.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.7.tgz#e114cd099e5f7d17b05368678da0fb9f69b3385c" - integrity sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w== - dependencies: - "@babel/types" "^7.26.7" + "@babel/types" "^7.25.8" "@babel/plugin-proposal-class-properties@^7.0.0": version "7.13.0" @@ -681,25 +682,25 @@ "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" -"@babel/template@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" - integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== +"@babel/template@^7.25.7": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.7.tgz#27f69ce382855d915b14ab0fe5fb4cbf88fa0769" + integrity sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA== dependencies: - "@babel/code-frame" "^7.25.9" - "@babel/parser" "^7.25.9" - "@babel/types" "^7.25.9" + "@babel/code-frame" "^7.25.7" + "@babel/parser" "^7.25.7" + "@babel/types" "^7.25.7" "@babel/traverse@7.15.4", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.0", "@babel/traverse@^7.15.4", "@babel/traverse@^7.16.8", "@babel/traverse@^7.20.1", "@babel/traverse@^7.23.0", "@babel/traverse@^7.7.2": - version "7.26.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.7.tgz#99a0a136f6a75e7fb8b0a1ace421e0b25994b8bb" - integrity sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.5" - "@babel/parser" "^7.26.7" - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.7" + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.7.tgz#83e367619be1cab8e4f2892ef30ba04c26a40fa8" + integrity sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg== + dependencies: + "@babel/code-frame" "^7.25.7" + "@babel/generator" "^7.25.7" + "@babel/parser" "^7.25.7" + "@babel/template" "^7.25.7" + "@babel/types" "^7.25.7" debug "^4.3.1" globals "^11.1.0" @@ -721,21 +722,14 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" -"@babel/types@^7.25.9", "@babel/types@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.5.tgz#7a1e1c01d28e26d1fe7f8ec9567b3b92b9d07747" - integrity sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - -"@babel/types@^7.26.7": - version "7.26.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.7.tgz#5e2b89c0768e874d4d061961f3a5a153d71dc17a" - integrity sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg== +"@babel/types@^7.25.7", "@babel/types@^7.25.8": + version "7.25.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.8.tgz#5cf6037258e8a9bcad533f4979025140cb9993e1" + integrity sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg== dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" + "@babel/helper-string-parser" "^7.25.7" + "@babel/helper-validator-identifier" "^7.25.7" + to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": version "0.2.3" @@ -2658,12 +2652,12 @@ tslib "^2.4.0" value-or-promise "^1.0.12" -"@graphql-typed-document-node/core@3.2.0", "@graphql-typed-document-node/core@^3.1.1", "@graphql-typed-document-node/core@^3.2.0": +"@graphql-typed-document-node/core@3.2.0", "@graphql-typed-document-node/core@^3.2.0": version "3.2.0" resolved "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== -"@graphql-typed-document-node/core@^3.0.0": +"@graphql-typed-document-node/core@^3.0.0", "@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== @@ -4393,25 +4387,25 @@ tslib "^2.1.0" "@wry/context@^0.7.0": - version "0.7.4" - resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.7.4.tgz#e32d750fa075955c4ab2cfb8c48095e1d42d5990" - integrity sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ== + version "0.7.0" + resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.7.0.tgz#be88e22c0ddf62aeb0ae9f95c3d90932c619a5c8" + integrity sha512-LcDAiYWRtwAoSOArfk7cuYvFXytxfVrdX7yxoUmK7pPITLk5jYh2F8knCwS7LjgYL8u1eidPlKKV6Ikqq0ODqQ== dependencies: tslib "^2.3.0" "@wry/equality@^0.5.0": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.5.7.tgz#72ec1a73760943d439d56b7b1e9985aec5d497bb" - integrity sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw== + version "0.5.2" + resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.5.2.tgz#72c8a7a7d884dff30b612f4f8464eba26c080e73" + integrity sha512-oVMxbUXL48EV/C0/M7gLVsoK6qRHPS85x8zECofEZOVvxGmIPLA9o5Z27cc2PoAyZz1S2VoM2A7FLAnpfGlneA== dependencies: tslib "^2.3.0" "@wry/trie@^0.3.0": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.3.2.tgz#a06f235dc184bd26396ba456711f69f8c35097e6" - integrity sha512-yRTyhWSls2OY/pYLfwff867r8ekooZ4UI+/gxot5Wj8EFwSf2rG+n+Mo/6LoLQm1TKA4GRj2+LCpbfS937dClQ== + version "0.3.0" + resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.3.0.tgz#3245e74988c4e3033299e479a1bf004430752463" + integrity sha512-Yw1akIogPhAT6XPYsRHlZZIS0tIGmAl9EYXHi2scf7LPKKqdqmow/Hu4kEqP2cJR3EjaU/9L0ZlAjFf3hFxmug== dependencies: - tslib "^2.3.0" + tslib "^2.1.0" "@xstate/fsm@1.4.0": version "1.4.0" @@ -5719,9 +5713,9 @@ copy-to-clipboard@^3.2.0: toggle-selection "^1.0.6" core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= cosmiconfig-toml-loader@1.0.0: version "1.0.0" @@ -5767,11 +5761,11 @@ create-require@^1.1.0: integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-fetch@3.1.4, cross-fetch@^3.0.4, cross-fetch@^3.0.6, cross-fetch@^3.1.4, cross-fetch@^3.1.5: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3" - integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q== + version "3.1.8" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" + integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== dependencies: - node-fetch "^2.7.0" + node-fetch "^2.6.12" cross-spawn@^6.0.5: version "6.0.5" @@ -9538,7 +9532,7 @@ node-emoji@^1.10.0: dependencies: lodash.toarray "^4.4.0" -node-fetch@^2.6.1, node-fetch@^2.6.5, node-fetch@^2.6.7, node-fetch@^2.7.0: +node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.5, node-fetch@^2.6.7: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -11671,16 +11665,11 @@ tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2, tslib@^2.0.0, tslib@^2.0.3, tslib@^2.3.1, tslib@^2.4.0, tslib@~2.4.0: +tslib@^2, tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0, tslib@~2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== -tslib@^2.1.0, tslib@^2.3.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - tslib@^2.4.1, tslib@^2.5.0, tslib@^2.6.1, tslib@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" @@ -12531,4 +12520,4 @@ zustand@^4.3.7: resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.2.tgz#e26ad331d0a2e28a7d4aa126b00c7140b34904bb" integrity sha512-qF3/vZHCrjPUX5DvPE3DPDZlh+FiAWRKlP9PI7SlW1MCk8q4vUCDqyWsbF8K41ne0Yx8eeeb0m1cypn1LqUMYQ== dependencies: - use-sync-external-store "1.2.0" + use-sync-external-store "1.2.0" \ No newline at end of file From 06b44c514559e30e1565258b1789d497c7d56238 Mon Sep 17 00:00:00 2001 From: Andrei Fidelman Date: Wed, 26 Feb 2025 20:53:30 +0100 Subject: [PATCH 4/5] fix types in patch --- patches/@apollo+client+3.6.10.patch | 89 +++++++++++++++++++++++------ 1 file changed, 73 insertions(+), 16 deletions(-) diff --git a/patches/@apollo+client+3.6.10.patch b/patches/@apollo+client+3.6.10.patch index fe2ee4da7..2f3ca0c76 100644 --- a/patches/@apollo+client+3.6.10.patch +++ b/patches/@apollo+client+3.6.10.patch @@ -19,22 +19,6 @@ index afbbcd0..d93d0af 100644 fieldName: fieldName, storeFieldName: storeFieldName, variables: variables, -diff --git a/node_modules/@apollo/client/cache/core/types/Cache.d.ts b/node_modules/@apollo/client/cache/core/types/Cache.d.ts -index 13fdd1f..6ceac48 100644 ---- a/node_modules/@apollo/client/cache/core/types/Cache.d.ts -+++ b/node_modules/@apollo/client/cache/core/types/Cache.d.ts -@@ -14,9 +14,9 @@ export declare namespace Cache { - dataId?: string; - result: TResult; - } -- interface DiffOptions extends ReadOptions { -+ interface DiffOptions extends Omit, "rootId"> { - } -- interface WatchOptions extends ReadOptions { -+ interface WatchOptions extends DiffOptions { - watcher?: object; - immediate?: boolean; - callback: WatchCallback; diff --git a/node_modules/@apollo/client/cache/core/types/common.js b/node_modules/@apollo/client/cache/core/types/common.js index bf82b96..266f9fe 100644 --- a/node_modules/@apollo/client/cache/core/types/common.js @@ -237,3 +221,76 @@ index 0000000..abd2a70 @@ -0,0 +1 @@ +{"version":3,"file":"useFragment.js","sourceRoot":"","sources":["../../../src/react/hooks/useFragment.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAQ1D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AA8BjE,MAAM,UAAU,WAAW,CACzB,OAAyC;IAEjC,IAAA,KAAK,GAAK,eAAe,EAAE,MAAtB,CAAuB;IAE5B,IAAA,QAAQ,GAAqD,OAAO,SAA5D,EAAE,YAAY,GAAuC,OAAO,aAA9C,EAAE,IAAI,GAAiC,OAAO,KAAxC,EAAE,KAA+B,OAAO,WAArB,EAAjB,UAAU,mBAAG,IAAI,KAAA,EAAK,IAAI,UAAK,OAAO,EAAtE,kDAA4D,CAAF,CAAa;IAE7E,IAAM,WAAW,yBACZ,IAAI,KACP,iBAAiB,EAAE,IAAI,EACvB,EAAE,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC1D,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,EACtD,UAAU,YAAA,GACX,CAAC;IAEF,IAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAA4B,CAAC;IAC3D,IAAI,UAAU,GAAG,KAAK,CAAC,IAAI,CAAQ,WAAW,CAAC,CAAC;IAGhD,IAAM,WAAW,GAAG;QAClB,IAAM,kBAAkB,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACpD,OAAO,SAAS,CAAC,OAAO;YACtB,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC;YACtD,CAAC,CAAC,SAAS,CAAC,OAAO;YACnB,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,GAAG,kBAAkB,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF,OAAO,oBAAoB,CACzB,UAAC,WAAW;QACV,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAM,UAAU,GAAG,KAAK,CAAC,KAAK,uBACzB,WAAW,KACd,SAAS,EAAE,IAAI,EACf,QAAQ,YAAC,IAAI;gBACX,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;oBAC5B,SAAS,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC;oBACtD,WAAW,GAAG,UAAU,CAAC,WAAW,CAAQ,CAAC;iBAC9C;YACH,CAAC,IACD,CAAC;QACH,OAAO;YACL,UAAU,EAAE,CAAC;YACb,YAAY,CAAC,WAAW,CAAC,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC,EACD,WAAW,EACX,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,IAA6B;IAE7B,IAAM,MAAM,GAAG;QACb,IAAI,EAAE,IAAI,CAAC,MAAO;QAClB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;KACE,CAAC;IAE9B,IAAI,IAAI,CAAC,OAAO,EAAE;QAChB,MAAM,CAAC,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,OAAO,EAAb,CAAa,CAAC,CAAC,CAAC;KAC7E;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import * as React from \"react\";\nimport { equal } from \"@wry/equality\";\n\nimport type { DeepPartial } from \"../../utilities/index.js\";\nimport { mergeDeepArray } from \"../../utilities/index.js\";\nimport type {\n Cache,\n Reference,\n StoreObject,\n MissingTree,\n} from \"../../cache/index.js\";\n\nimport { useApolloClient } from \"./useApolloClient.js\";\nimport { useSyncExternalStore } from \"./useSyncExternalStore.js\";\nimport type { OperationVariables } from \"../../core/index.js\";\nimport type { NoInfer } from \"../types/types.js\";\n\nexport interface UseFragmentOptions\n extends Omit<\n Cache.DiffOptions, NoInfer>,\n \"id\" | \"query\" | \"optimistic\" | \"previousResult\" | \"returnPartialData\"\n >,\n Omit<\n Cache.ReadFragmentOptions,\n \"id\" | \"variables\" | \"returnPartialData\"\n > {\n from: StoreObject | Reference | string;\n // Override this field to make it optional (default: true).\n optimistic?: boolean;\n}\n\nexport type UseFragmentResult =\n | {\n data: TData;\n complete: true;\n missing?: never;\n }\n | {\n data: DeepPartial;\n complete: false;\n missing?: MissingTree;\n };\n\nexport function useFragment(\n options: UseFragmentOptions\n): UseFragmentResult {\n const { cache } = useApolloClient();\n\n const { fragment, fragmentName, from, optimistic = true, ...rest } = options;\n\n const diffOptions: Cache.DiffOptions = {\n ...rest,\n returnPartialData: true,\n id: typeof from === \"string\" ? from : cache.identify(from),\n query: cache[\"getFragmentDoc\"](fragment, fragmentName),\n optimistic,\n };\n\n const resultRef = React.useRef>();\n let latestDiff = cache.diff(diffOptions);\n\n // Used for both getSnapshot and getServerSnapshot\n const getSnapshot = () => {\n const latestDiffToResult = diffToResult(latestDiff);\n return resultRef.current &&\n equal(resultRef.current.data, latestDiffToResult.data)\n ? resultRef.current\n : (resultRef.current = latestDiffToResult);\n };\n\n return useSyncExternalStore(\n (forceUpdate) => {\n let lastTimeout = 0;\n const unsubcribe = cache.watch({\n ...diffOptions,\n immediate: true,\n callback(diff) {\n if (!equal(diff, latestDiff)) {\n resultRef.current = diffToResult((latestDiff = diff));\n lastTimeout = setTimeout(forceUpdate) as any;\n }\n },\n });\n return () => {\n unsubcribe();\n clearTimeout(lastTimeout);\n };\n },\n getSnapshot,\n getSnapshot\n );\n}\n\nfunction diffToResult(\n diff: Cache.DiffResult\n): UseFragmentResult {\n const result = {\n data: diff.result!,\n complete: !!diff.complete,\n } as UseFragmentResult;\n\n if (diff.missing) {\n result.missing = mergeDeepArray(diff.missing.map((error) => error.missing));\n }\n\n return result;\n}\n"]} \ No newline at end of file +diff --git a/node_modules/@apollo/client/react/types/types.d.ts b/node_modules/@apollo/client/react/types/types.d.ts +index dd7a345..586a405 100644 +--- a/node_modules/@apollo/client/react/types/types.d.ts ++++ b/node_modules/@apollo/client/react/types/types.d.ts +@@ -112,4 +112,5 @@ export interface SubscriptionCurrentObservable { + query?: Observable; + subscription?: ObservableSubscription; + } ++export type NoInfer = [T][T extends any ? 0 : never]; + //# sourceMappingURL=types.d.ts.map +\ No newline at end of file +diff --git a/node_modules/@apollo/client/utilities/index.d.ts b/node_modules/@apollo/client/utilities/index.d.ts +index cea6746..153d291 100644 +--- a/node_modules/@apollo/client/utilities/index.d.ts ++++ b/node_modules/@apollo/client/utilities/index.d.ts +@@ -22,4 +22,5 @@ export * from './common/makeUniqueId'; + export * from './common/stringifyForDisplay'; + export * from './common/mergeOptions'; + export * from './types/IsStrictlyAny'; ++export type { DeepPartial } from "./types/DeepPartial"; + //# sourceMappingURL=index.d.ts.map +\ No newline at end of file +diff --git a/node_modules/@apollo/client/utilities/types/DeepPartial.d.ts b/node_modules/@apollo/client/utilities/types/DeepPartial.d.ts +new file mode 100644 +index 0000000..2cc68e7 +--- /dev/null ++++ b/node_modules/@apollo/client/utilities/types/DeepPartial.d.ts +@@ -0,0 +1,44 @@ ++type Primitive = ++ | null ++ | undefined ++ | string ++ | number ++ | boolean ++ | symbol ++ | bigint; ++type DeepPartialPrimitive = Primitive | Date | RegExp; ++export type DeepPartial = T extends DeepPartialPrimitive ++ ? T ++ : T extends Map ++ ? DeepPartialMap ++ : T extends ReadonlyMap ++ ? DeepPartialReadonlyMap ++ : T extends Set ++ ? DeepPartialSet ++ : T extends ReadonlySet ++ ? DeepPartialReadonlySet ++ : T extends (...args: any[]) => unknown ++ ? T | undefined ++ : T extends object ++ ? T extends ReadonlyArray ++ ? TItem[] extends T ++ ? readonly TItem[] extends T ++ ? ReadonlyArray> ++ : Array> ++ : DeepPartialObject ++ : DeepPartialObject ++ : unknown; ++type DeepPartialMap = {} & Map< ++ DeepPartial, ++ DeepPartial ++>; ++type DeepPartialReadonlyMap = {} & ReadonlyMap< ++ DeepPartial, ++ DeepPartial ++>; ++type DeepPartialSet = {} & Set>; ++type DeepPartialReadonlySet = {} & ReadonlySet>; ++type DeepPartialObject = { ++ [K in keyof T]?: DeepPartial; ++}; ++export {}; +\ No newline at end of file From 002e242b75a54f206fce46a7d34e344684463cc9 Mon Sep 17 00:00:00 2001 From: Andrei Fidelman Date: Tue, 8 Apr 2025 17:24:41 +0200 Subject: [PATCH 5/5] Patch to fix missis useEffect in tests --- patches/@apollo+client+3.6.10.patch | 51 +++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/patches/@apollo+client+3.6.10.patch b/patches/@apollo+client+3.6.10.patch index 2f3ca0c76..ffe62414e 100644 --- a/patches/@apollo+client+3.6.10.patch +++ b/patches/@apollo+client+3.6.10.patch @@ -106,6 +106,57 @@ index a2c1b93..d28dddf 100644 fieldName: fieldName, storeFieldName: storeFieldName, variables: variables, +diff --git a/node_modules/@apollo/client/react/hooks/hooks.cjs b/node_modules/@apollo/client/react/hooks/hooks.cjs +index 3a2234a..d7b5029 100644 +--- a/node_modules/@apollo/client/react/hooks/hooks.cjs ++++ b/node_modules/@apollo/client/react/hooks/hooks.cjs +@@ -616,7 +616,46 @@ function useReactiveVar(rv) { + return value; + } + ++function useFragment(options) { ++ var cache = useApolloClient().cache; ++ var fragment = options.fragment, fragmentName = options.fragmentName, from = options.from, _a = options.optimistic, optimistic = _a === void 0 ? true : _a, rest = tslib.__rest(options, ["fragment", "fragmentName", "from", "optimistic"]); ++ var diffOptions = tslib.__assign(tslib.__assign({}, rest), { returnPartialData: true, id: typeof from === "string" ? from : cache.identify(from), query: cache["getFragmentDoc"](fragment, fragmentName), optimistic: optimistic }); ++ var resultRef = React__namespace.useRef(); ++ var latestDiff = cache.diff(diffOptions); ++ var getSnapshot = function () { ++ var latestDiffToResult = diffToResult(latestDiff); ++ return resultRef.current && ++ equality.equal(resultRef.current.data, latestDiffToResult.data) ++ ? resultRef.current ++ : (resultRef.current = latestDiffToResult); ++ }; ++ return useSyncExternalStore(function (forceUpdate) { ++ var lastTimeout = 0; ++ var unsubcribe = cache.watch(tslib.__assign(tslib.__assign({}, diffOptions), { immediate: true, callback: function (diff) { ++ if (!equality.equal(diff, latestDiff)) { ++ resultRef.current = diffToResult((latestDiff = diff)); ++ lastTimeout = setTimeout(forceUpdate); ++ } ++ } })); ++ return function () { ++ unsubcribe(); ++ clearTimeout(lastTimeout); ++ }; ++ }, getSnapshot, getSnapshot); ++} ++function diffToResult(diff) { ++ var result = { ++ data: diff.result, ++ complete: !!diff.complete, ++ }; ++ if (diff.missing) { ++ result.missing = utilities.mergeDeepArray(diff.missing.map(function (error) { return error.missing; })); ++ } ++ return result; ++} ++ + exports.useApolloClient = useApolloClient; ++exports.useFragment = useFragment; + exports.useLazyQuery = useLazyQuery; + exports.useMutation = useMutation; + exports.useQuery = useQuery; diff --git a/node_modules/@apollo/client/react/hooks/index.d.ts b/node_modules/@apollo/client/react/hooks/index.d.ts index a590efb..458f53f 100644 --- a/node_modules/@apollo/client/react/hooks/index.d.ts