Repository: tannerlinsley/react-query
Pull request #2638 (2021-09-05 09:16:00)

fix(types): fix generics for refetchPage function
two issues:

1) The types inferred for the `refetch` function returned from useInfiniteQuery were wrong, as the input to the function is not of type InfiniteData; It's quite hard to infer the correct type, so making the function generic and defaulting to unknown is the safer choice. Users can now still explicitly provide the generic.

2) for all other methods on the queryClient, generics were mising and types for pages / allPages were always unknown. Adding a generic to refetchQueries / invalidateQueries / resetQueries that also defaults to unknown fixes that and makes those function easier to work with

vercel[bot]: This pull request is being automatically deployed with Vercel ([learn more](https://vercel.link/github-learn-more)).  
To see the status of your deployment, click below or on the icon next to each commit.

🔍 Inspect: [https://vercel.com/tannerlinsley/react-query/2SpSDFPaq3uQBw4R2DCm1UE7CwaV](https://vercel.com/tannerlinsley/react-query/2SpSDFPaq3uQBw4R2DCm1UE7CwaV)  
✅ Preview: *In Progress*



Patch:
diff --git a/docs/src/components/markdown.module.css b/docs/src/components/markdown.module.css
index f521614f7..11368d1ac 100644
--- a/docs/src/components/markdown.module.css
+++ b/docs/src/components/markdown.module.css
@@ -61,19 +61,19 @@
   @apply text-base;
 }
 
-.markdown > p > a,
-.markdown > ul > li > a,
-.markdown > ol > li > a,
-.markdown > blockquote > p > a,
-.markdown > table > tbody > tr > td > a {
+.markdown p > a,
+.markdown ul > li > a,
+.markdown ol > li > a,
+.markdown blockquote > p > a,
+.markdown table > tbody > tr > td > a {
   @apply text-blue-600 font-semibold transition-colors duration-150 ease-out;
 }
 
-.markdown > p > a:hover,
-.markdown > ul > li > a:hover,
-.markdown > ol > li > a:hover,
-.markdown > blockquote > p > a:hover,
-.markdown > table > tbody > tr > td > a:hover {
+.markdown p > a:hover,
+.markdown ul > li > a:hover,
+.markdown ol > li > a:hover,
+.markdown blockquote > p > a:hover,
+.markdown table > tbody > tr > td > a:hover {
   @apply text-blue-800 transition-colors duration-150 ease-out;
 }
 
diff --git a/docs/src/images/emblem-light.svg b/docs/src/images/emblem-light.svg
index abb0bf8ec..a58e69ad5 100644
--- a/docs/src/images/emblem-light.svg
+++ b/docs/src/images/emblem-light.svg
@@ -3,11 +3,11 @@
     <!-- Generator: Sketch 60.1 (88133) - https://sketch.com -->
     <title>emblem-light</title>
     <desc>Created with Sketch.</desc>
-    <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="og-white">
-            <path d="M39.7239712,61.3436237 C36.631224,46.362877 35.9675112,34.8727722 37.9666331,26.5293551 C39.1555965,21.5671678 41.3293088,17.5190846 44.6346064,14.5984631 C48.1241394,11.5150478 52.5360327,10.0020122 57.493257,10.0020122 C65.6712013,10.0020122 74.2682602,13.7273214 83.4557246,20.8044264 C87.2031203,23.6910458 91.0924366,27.170411 95.1316515,31.2444746 C95.4531404,30.8310265 95.8165416,30.4410453 96.2214301,30.0806152 C107.64098,19.9149716 117.255245,13.5989272 125.478408,11.1636507 C130.367899,9.715636 134.958526,9.57768202 139.138936,10.983031 C143.551631,12.4664684 147.06766,15.5329489 149.548314,19.8281091 C153.642288,26.9166735 154.721918,36.2310983 153.195595,47.7320243 C152.573451,52.4199112 151.50985,57.5263831 150.007094,63.0593153 C150.574045,63.1277086 151.142416,63.2532808 151.705041,63.4395297 C166.193932,68.2358678 176.453582,73.3937462 182.665021,79.2882839 C186.360669,82.7953831 188.773972,86.6998434 189.646365,91.0218204 C190.567176,95.5836746 189.669313,100.159332 187.191548,104.451297 C183.105211,111.529614 175.591643,117.11221 164.887587,121.534031 C160.589552,123.309539 155.726579,124.917559 150.293259,126.363748 C150.541176,126.92292 150.733521,127.516759 150.862138,128.139758 C153.954886,143.120505 154.618598,154.61061 152.619477,162.954027 C151.430513,167.916214 149.256801,171.964297 145.951503,174.884919 C142.46197,177.968334 138.050077,179.48137 133.092853,179.48137 C124.914908,179.48137 116.31785,175.756061 107.130385,168.678956 C103.343104,165.761613 99.4108655,162.238839 95.3254337,158.108619 C94.9050753,158.765474 94.3889681,159.376011 93.7785699,159.919385 C82.3590198,170.085028 72.744755,176.401073 64.5215915,178.836349 C59.6321009,180.284364 55.0414736,180.422318 50.8610636,179.016969 C46.4483686,177.533532 42.9323404,174.467051 40.4516862,170.171891 C36.3577116,163.083327 35.2780823,153.768902 36.8044053,142.267976 C37.449038,137.410634 38.56762,132.103898 40.1575891,126.339009 C39.5361041,126.276104 38.9120754,126.144816 38.2949591,125.940529 C23.8060684,121.144191 13.5464184,115.986312 7.33497892,110.091775 C3.63933121,106.584675 1.22602752,102.680215 0.353635235,98.3582381 C-0.567176333,93.7963839 0.330686581,89.2207269 2.80845236,84.9287618 C6.89478863,77.8504443 14.4083565,72.2678481 25.1124133,67.8460273 C29.5385143,66.0176154 34.5637208,64.366822 40.1939394,62.8874674 C39.9933393,62.3969171 39.8349374,61.8811235 39.7239712,61.3436237 Z" id="Path" fill="#002C4B" fill-rule="nonzero" transform="translate(95.000000, 95.000000) scale(-1, 1) translate(-95.000000, -95.000000) "></path>
-            <path d="M80.3968824,64 L109.608177,64 C111.399254,64 113.053521,64.958025 113.944933,66.5115174 L128.577138,92.0115174 C129.461464,93.5526583 129.461464,95.4473417 128.577138,96.9884826 L113.944933,122.488483 C113.053521,124.041975 111.399254,125 109.608177,125 L80.3968824,125 C78.6058059,125 76.9515387,124.041975 76.0601262,122.488483 L61.4279211,96.9884826 C60.543596,95.4473417 60.543596,93.5526583 61.4279211,92.0115174 L76.0601262,66.5115174 C76.9515387,64.958025 78.6058059,64 80.3968824,64 Z M105.987827,70.2765273 C107.779849,70.2765273 109.434839,71.2355558 110.325899,72.7903404 L121.343038,92.0138131 C122.225607,93.5537825 122.225607,95.4462175 121.343038,96.9861869 L110.325899,116.20966 C109.434839,117.764444 107.779849,118.723473 105.987827,118.723473 L84.0172329,118.723473 C82.2252106,118.723473 80.5702207,117.764444 79.6791602,116.20966 L68.6620219,96.9861869 C67.7794521,95.4462175 67.7794521,93.5537825 68.6620219,92.0138131 L79.6791602,72.7903404 C80.5702207,71.2355558 82.2252106,70.2765273 84.0172329,70.2765273 L105.987827,70.2765273 Z M102.080648,77.1414791 L87.9244113,77.1414791 C86.1342282,77.1414791 84.4806439,78.0985567 83.5888998,79.6508285 L83.5888998,79.6508285 L76.4892166,92.0093494 C75.6032319,93.5515958 75.6032319,95.4484042 76.4892166,96.9906506 L76.4892166,96.9906506 L83.5888998,109.349172 C84.4806439,110.901443 86.1342282,111.858521 87.9244113,111.858521 L87.9244113,111.858521 L102.080648,111.858521 C103.870831,111.858521 105.524416,110.901443 106.41616,109.349172 L106.41616,109.349172 L113.515843,96.9906506 C114.401828,95.4484042 114.401828,93.5515958 113.515843,92.0093494 L113.515843,92.0093494 L106.41616,79.6508285 C105.524416,78.0985567 103.870831,77.1414791 102.080648,77.1414791 L102.080648,77.1414791 Z M98.3191856,83.7122186 C100.108028,83.7122186 101.760587,84.6678753 102.652827,86.2183156 L105.983552,92.0060969 C106.87203,93.5500005 106.87203,95.4499995 105.983552,96.9939031 L102.652827,102.781684 C101.760587,104.332125 100.108028,105.287781 98.3191856,105.287781 L91.685874,105.287781 C89.8970316,105.287781 88.2444725,104.332125 87.3522326,102.781684 L84.021508,96.9939031 C83.1330298,95.4499995 83.1330298,93.5500005 84.021508,92.0060969 L87.3522326,86.2183156 C88.2444725,84.6678753 89.8970316,83.7122186 91.685874,83.7122186 L98.3191856,83.7122186 Z M95.0037937,90.1848875 C93.459294,90.1848875 92.0343817,91.0072828 91.2630046,92.3424437 C90.4917325,93.6774232 90.4917325,95.3225768 91.2630046,96.6575563 C92.0343817,97.9927172 93.459294,98.8151125 95.0012659,98.8151125 L95.0012659,98.8151125 C96.5457656,98.8151125 97.9706779,97.9927172 98.7420549,96.6575563 C99.5133271,95.3225768 99.5133271,93.6774232 98.7420549,92.3424437 C97.9706779,91.0072828 96.5457656,90.1848875 95.0037937,90.1848875 L95.0037937,90.1848875 Z M60,94.5009646 L67.7677636,94.5009646" id="Polygon-2" fill="#FFD94C"></path>
-            <path d="M54.8601729,108.357758 C56.1715224,107.608286 57.8360246,108.074601 58.5779424,109.399303 L58.5779424,109.399303 L59.0525843,110.24352 C62.8563392,116.982993 66.8190116,123.380176 70.9406016,129.435068 C75.8078808,136.585427 81.28184,143.82411 87.3624792,151.151115 C88.3168778,152.30114 88.1849437,154.011176 87.065686,154.997937 L87.065686,154.997937 L86.4542085,155.534625 C66.3465389,173.103314 53.2778188,176.612552 47.2480482,166.062341 C41.3500652,155.742717 43.4844915,136.982888 53.6513274,109.782853 C53.876818,109.179582 54.3045861,108.675291 54.8601729,108.357758 Z M140.534177,129.041504 C141.986131,128.785177 143.375496,129.742138 143.65963,131.194242 L143.65963,131.194242 L143.812815,131.986376 C148.782365,157.995459 145.283348,171 133.315764,171 C121.609745,171 106.708724,159.909007 88.6127018,137.727022 C88.2113495,137.235047 87.9945723,136.617371 88,135.981509 C88.013158,134.480686 89.2357854,133.274651 90.730918,133.287756 L90.730918,133.287756 L91.6846544,133.294531 C99.3056979,133.335994 106.714387,133.071591 113.910723,132.501323 C122.409039,131.82788 131.283523,130.674607 140.534177,129.041504 Z M147.408726,73.8119663 C147.932139,72.4026903 149.508386,71.6634537 150.954581,72.149012 L150.954581,72.149012 L151.742552,72.4154854 C177.583763,81.217922 187.402356,90.8916805 181.198332,101.436761 C175.129904,111.751366 157.484347,119.260339 128.26166,123.963678 C127.613529,124.067994 126.948643,123.945969 126.382735,123.618843 C125.047025,122.846729 124.602046,121.158214 125.388848,119.847438 L125.388848,119.847438 L125.889328,119.0105 C129.877183,112.31633 133.481358,105.654262 136.701854,99.0242957 C140.50501,91.1948179 144.073967,82.7907081 147.408726,73.8119663 Z M61.7383398,66.0363218 C62.3864708,65.9320063 63.0513565,66.0540315 63.6172646,66.3811573 C64.9529754,67.153271 65.3979538,68.8417862 64.6111517,70.1525615 L64.6111517,70.1525615 L64.1106718,70.9895001 C60.1228168,77.6836699 56.5186416,84.3457379 53.2981462,90.9757043 C49.49499,98.8051821 45.9260328,107.209292 42.5912744,116.188034 C42.0678608,117.59731 40.4916142,118.336546 39.045419,117.850988 L39.045419,117.850988 L38.2574475,117.584515 C12.4162372,108.782078 2.59764398,99.1083195 8.80166786,88.5632391 C14.8700957,78.2486335 32.515653,70.7396611 61.7383398,66.0363218 Z M103.545792,34.4653746 C123.653461,16.8966864 136.722181,13.3874478 142.751952,23.9376587 C148.649935,34.2572826 146.515508,53.0171122 136.348673,80.2171474 C136.123182,80.8204179 135.695414,81.324709 135.139827,81.6422422 C133.828478,82.3917144 132.163975,81.9253986 131.422058,80.6006966 L131.422058,80.6006966 L130.947416,79.7564798 C127.143661,73.0170065 123.180988,66.6198239 119.059398,60.564932 C114.192119,53.4145727 108.71816,46.1758903 102.637521,38.8488847 C101.683122,37.6988602 101.815056,35.9888243 102.934314,35.0020629 L102.934314,35.0020629 Z M57.6842361,18 C69.3902551,18 84.2912758,29.0909926 102.387298,51.2729777 C102.788651,51.7649527 103.005428,52.3826288 103,53.0184911 C102.986842,54.5193144 101.764215,55.7253489 100.269082,55.7122445 L100.269082,55.7122445 L99.3153456,55.7054689 C91.6943021,55.6640063 84.2856126,55.9284091 77.0892772,56.4986773 C68.5909612,57.17212 59.7164767,58.325393 50.4658235,59.9584962 C49.0138691,60.2148231 47.6245044,59.2578618 47.3403697,57.805758 L47.3403697,57.805758 L47.1871846,57.0136235 C42.2176347,31.0045412 45.7166519,18 57.6842361,18 Z" id="Combined-Shape" fill="#FF4154"></path>
+    <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g>
+            <path d="M39.7239712,61.3436237 C36.631224,46.362877 35.9675112,34.8727722 37.9666331,26.5293551 C39.1555965,21.5671678 41.3293088,17.5190846 44.6346064,14.5984631 C48.1241394,11.5150478 52.5360327,10.0020122 57.493257,10.0020122 C65.6712013,10.0020122 74.2682602,13.7273214 83.4557246,20.8044264 C87.2031203,23.6910458 91.0924366,27.170411 95.1316515,31.2444746 C95.4531404,30.8310265 95.8165416,30.4410453 96.2214301,30.0806152 C107.64098,19.9149716 117.255245,13.5989272 125.478408,11.1636507 C130.367899,9.715636 134.958526,9.57768202 139.138936,10.983031 C143.551631,12.4664684 147.06766,15.5329489 149.548314,19.8281091 C153.642288,26.9166735 154.721918,36.2310983 153.195595,47.7320243 C152.573451,52.4199112 151.50985,57.5263831 150.007094,63.0593153 C150.574045,63.1277086 151.142416,63.2532808 151.705041,63.4395297 C166.193932,68.2358678 176.453582,73.3937462 182.665021,79.2882839 C186.360669,82.7953831 188.773972,86.6998434 189.646365,91.0218204 C190.567176,95.5836746 189.669313,100.159332 187.191548,104.451297 C183.105211,111.529614 175.591643,117.11221 164.887587,121.534031 C160.589552,123.309539 155.726579,124.917559 150.293259,126.363748 C150.541176,126.92292 150.733521,127.516759 150.862138,128.139758 C153.954886,143.120505 154.618598,154.61061 152.619477,162.954027 C151.430513,167.916214 149.256801,171.964297 145.951503,174.884919 C142.46197,177.968334 138.050077,179.48137 133.092853,179.48137 C124.914908,179.48137 116.31785,175.756061 107.130385,168.678956 C103.343104,165.761613 99.4108655,162.238839 95.3254337,158.108619 C94.9050753,158.765474 94.3889681,159.376011 93.7785699,159.919385 C82.3590198,170.085028 72.744755,176.401073 64.5215915,178.836349 C59.6321009,180.284364 55.0414736,180.422318 50.8610636,179.016969 C46.4483686,177.533532 42.9323404,174.467051 40.4516862,170.171891 C36.3577116,163.083327 35.2780823,153.768902 36.8044053,142.267976 C37.449038,137.410634 38.56762,132.103898 40.1575891,126.339009 C39.5361041,126.276104 38.9120754,126.144816 38.2949591,125.940529 C23.8060684,121.144191 13.5464184,115.986312 7.33497892,110.091775 C3.63933121,106.584675 1.22602752,102.680215 0.353635235,98.3582381 C-0.567176333,93.7963839 0.330686581,89.2207269 2.80845236,84.9287618 C6.89478863,77.8504443 14.4083565,72.2678481 25.1124133,67.8460273 C29.5385143,66.0176154 34.5637208,64.366822 40.1939394,62.8874674 C39.9933393,62.3969171 39.8349374,61.8811235 39.7239712,61.3436237 Z" fill="#002C4B" fill-rule="nonzero" transform="translate(95.000000, 95.000000) scale(-1, 1) translate(-95.000000, -95.000000) "></path>
+            <path d="M80.3968824,64 L109.608177,64 C111.399254,64 113.053521,64.958025 113.944933,66.5115174 L128.577138,92.0115174 C129.461464,93.5526583 129.461464,95.4473417 128.577138,96.9884826 L113.944933,122.488483 C113.053521,124.041975 111.399254,125 109.608177,125 L80.3968824,125 C78.6058059,125 76.9515387,124.041975 76.0601262,122.488483 L61.4279211,96.9884826 C60.543596,95.4473417 60.543596,93.5526583 61.4279211,92.0115174 L76.0601262,66.5115174 C76.9515387,64.958025 78.6058059,64 80.3968824,64 Z M105.987827,70.2765273 C107.779849,70.2765273 109.434839,71.2355558 110.325899,72.7903404 L121.343038,92.0138131 C122.225607,93.5537825 122.225607,95.4462175 121.343038,96.9861869 L110.325899,116.20966 C109.434839,117.764444 107.779849,118.723473 105.987827,118.723473 L84.0172329,118.723473 C82.2252106,118.723473 80.5702207,117.764444 79.6791602,116.20966 L68.6620219,96.9861869 C67.7794521,95.4462175 67.7794521,93.5537825 68.6620219,92.0138131 L79.6791602,72.7903404 C80.5702207,71.2355558 82.2252106,70.2765273 84.0172329,70.2765273 L105.987827,70.2765273 Z M102.080648,77.1414791 L87.9244113,77.1414791 C86.1342282,77.1414791 84.4806439,78.0985567 83.5888998,79.6508285 L83.5888998,79.6508285 L76.4892166,92.0093494 C75.6032319,93.5515958 75.6032319,95.4484042 76.4892166,96.9906506 L76.4892166,96.9906506 L83.5888998,109.349172 C84.4806439,110.901443 86.1342282,111.858521 87.9244113,111.858521 L87.9244113,111.858521 L102.080648,111.858521 C103.870831,111.858521 105.524416,110.901443 106.41616,109.349172 L106.41616,109.349172 L113.515843,96.9906506 C114.401828,95.4484042 114.401828,93.5515958 113.515843,92.0093494 L113.515843,92.0093494 L106.41616,79.6508285 C105.524416,78.0985567 103.870831,77.1414791 102.080648,77.1414791 L102.080648,77.1414791 Z M98.3191856,83.7122186 C100.108028,83.7122186 101.760587,84.6678753 102.652827,86.2183156 L105.983552,92.0060969 C106.87203,93.5500005 106.87203,95.4499995 105.983552,96.9939031 L102.652827,102.781684 C101.760587,104.332125 100.108028,105.287781 98.3191856,105.287781 L91.685874,105.287781 C89.8970316,105.287781 88.2444725,104.332125 87.3522326,102.781684 L84.021508,96.9939031 C83.1330298,95.4499995 83.1330298,93.5500005 84.021508,92.0060969 L87.3522326,86.2183156 C88.2444725,84.6678753 89.8970316,83.7122186 91.685874,83.7122186 L98.3191856,83.7122186 Z M95.0037937,90.1848875 C93.459294,90.1848875 92.0343817,91.0072828 91.2630046,92.3424437 C90.4917325,93.6774232 90.4917325,95.3225768 91.2630046,96.6575563 C92.0343817,97.9927172 93.459294,98.8151125 95.0012659,98.8151125 L95.0012659,98.8151125 C96.5457656,98.8151125 97.9706779,97.9927172 98.7420549,96.6575563 C99.5133271,95.3225768 99.5133271,93.6774232 98.7420549,92.3424437 C97.9706779,91.0072828 96.5457656,90.1848875 95.0037937,90.1848875 L95.0037937,90.1848875 Z M60,94.5009646 L67.7677636,94.5009646" fill="#FFD94C"></path>
+            <path d="M54.8601729,108.357758 C56.1715224,107.608286 57.8360246,108.074601 58.5779424,109.399303 L58.5779424,109.399303 L59.0525843,110.24352 C62.8563392,116.982993 66.8190116,123.380176 70.9406016,129.435068 C75.8078808,136.585427 81.28184,143.82411 87.3624792,151.151115 C88.3168778,152.30114 88.1849437,154.011176 87.065686,154.997937 L87.065686,154.997937 L86.4542085,155.534625 C66.3465389,173.103314 53.2778188,176.612552 47.2480482,166.062341 C41.3500652,155.742717 43.4844915,136.982888 53.6513274,109.782853 C53.876818,109.179582 54.3045861,108.675291 54.8601729,108.357758 Z M140.534177,129.041504 C141.986131,128.785177 143.375496,129.742138 143.65963,131.194242 L143.65963,131.194242 L143.812815,131.986376 C148.782365,157.995459 145.283348,171 133.315764,171 C121.609745,171 106.708724,159.909007 88.6127018,137.727022 C88.2113495,137.235047 87.9945723,136.617371 88,135.981509 C88.013158,134.480686 89.2357854,133.274651 90.730918,133.287756 L90.730918,133.287756 L91.6846544,133.294531 C99.3056979,133.335994 106.714387,133.071591 113.910723,132.501323 C122.409039,131.82788 131.283523,130.674607 140.534177,129.041504 Z M147.408726,73.8119663 C147.932139,72.4026903 149.508386,71.6634537 150.954581,72.149012 L150.954581,72.149012 L151.742552,72.4154854 C177.583763,81.217922 187.402356,90.8916805 181.198332,101.436761 C175.129904,111.751366 157.484347,119.260339 128.26166,123.963678 C127.613529,124.067994 126.948643,123.945969 126.382735,123.618843 C125.047025,122.846729 124.602046,121.158214 125.388848,119.847438 L125.388848,119.847438 L125.889328,119.0105 C129.877183,112.31633 133.481358,105.654262 136.701854,99.0242957 C140.50501,91.1948179 144.073967,82.7907081 147.408726,73.8119663 Z M61.7383398,66.0363218 C62.3864708,65.9320063 63.0513565,66.0540315 63.6172646,66.3811573 C64.9529754,67.153271 65.3979538,68.8417862 64.6111517,70.1525615 L64.6111517,70.1525615 L64.1106718,70.9895001 C60.1228168,77.6836699 56.5186416,84.3457379 53.2981462,90.9757043 C49.49499,98.8051821 45.9260328,107.209292 42.5912744,116.188034 C42.0678608,117.59731 40.4916142,118.336546 39.045419,117.850988 L39.045419,117.850988 L38.2574475,117.584515 C12.4162372,108.782078 2.59764398,99.1083195 8.80166786,88.5632391 C14.8700957,78.2486335 32.515653,70.7396611 61.7383398,66.0363218 Z M103.545792,34.4653746 C123.653461,16.8966864 136.722181,13.3874478 142.751952,23.9376587 C148.649935,34.2572826 146.515508,53.0171122 136.348673,80.2171474 C136.123182,80.8204179 135.695414,81.324709 135.139827,81.6422422 C133.828478,82.3917144 132.163975,81.9253986 131.422058,80.6006966 L131.422058,80.6006966 L130.947416,79.7564798 C127.143661,73.0170065 123.180988,66.6198239 119.059398,60.564932 C114.192119,53.4145727 108.71816,46.1758903 102.637521,38.8488847 C101.683122,37.6988602 101.815056,35.9888243 102.934314,35.0020629 L102.934314,35.0020629 Z M57.6842361,18 C69.3902551,18 84.2912758,29.0909926 102.387298,51.2729777 C102.788651,51.7649527 103.005428,52.3826288 103,53.0184911 C102.986842,54.5193144 101.764215,55.7253489 100.269082,55.7122445 L100.269082,55.7122445 L99.3153456,55.7054689 C91.6943021,55.6640063 84.2856126,55.9284091 77.0892772,56.4986773 C68.5909612,57.17212 59.7164767,58.325393 50.4658235,59.9584962 C49.0138691,60.2148231 47.6245044,59.2578618 47.3403697,57.805758 L47.3403697,57.805758 L47.1871846,57.0136235 C42.2176347,31.0045412 45.7166519,18 57.6842361,18 Z" fill="#FF4154"></path>
         </g>
     </g>
 </svg>
\ No newline at end of file
diff --git a/docs/src/images/logo.svg b/docs/src/images/logo.svg
index cf878d5df..cb2ff00be 100644
--- a/docs/src/images/logo.svg
+++ b/docs/src/images/logo.svg
@@ -3,21 +3,21 @@
     <!-- Generator: Sketch 60.1 (88133) - https://sketch.com -->
     <title>logo</title>
     <desc>Created with Sketch.</desc>
-    <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="logo">
-            <path d="M343.113,309.464 L332.448134,327.983049 C329.235311,333.561819 323.287674,337 316.849903,337 L235.150097,337 C228.712326,337 222.764689,333.561819 219.551866,327.983049 L208.886,309.464 L343.113,309.464 Z M372.97,257.621 L354.165,290.273 L197.834,290.273 L179.03,257.621 L372.97,257.621 Z M354.856,206.925 L373,238.431 L179,238.431 L197.144,206.925 L354.856,206.925 Z M316.849903,159 C323.287674,159 329.235311,162.438181 332.448134,168.016951 L343.804,187.734 L208.196,187.734 L219.551866,168.016951 C222.764689,162.438181 228.712326,159 235.150097,159 L316.849903,159 Z" id="Polygon-2-Copy-6" fill="#00435B"></path>
-            <g id="Group-Copy-3" transform="translate(193.000000, 289.000000)"></g>
-            <path d="M116.244884,150.406615 C107.194529,106.52184 105.252296,72.8625915 111.102358,48.4212873 C114.58164,33.8849974 120.942609,22.026495 130.614954,13.4707918 C140.826429,4.43819877 153.737022,0.00589446291 168.243426,0.00589446291 C192.174673,0.00589446291 217.332382,10.9188593 244.217805,31.6506139 C255.183868,40.1067105 266.565236,50.2992041 278.385254,62.2338139 C279.326032,61.022654 280.389459,59.8802387 281.57429,58.8243904 C314.9915,29.0450344 343.125875,10.5427396 367.189448,3.40881198 C381.497642,-0.83301926 394.931267,-1.23714325 407.164466,2.87970264 C420.077405,7.22530165 430.366414,16.2082855 437.625592,28.7905785 C449.605854,49.5559023 452.765191,76.841688 448.298688,110.532636 C446.478098,124.265387 443.365665,139.224346 438.968129,155.432583 C440.627205,155.632935 442.290437,156.000787 443.936857,156.546387 C486.335926,170.596836 516.358902,185.706386 534.535535,202.973914 C545.350168,213.247652 552.412256,224.685424 554.965152,237.346274 C557.659737,250.709823 555.032307,264.113807 547.781582,276.68674 C535.823671,297.422046 513.836599,313.775769 482.513149,326.729103 C469.93574,331.930298 455.705146,336.640849 439.805538,340.877334 C440.531021,342.515377 441.093882,344.254975 441.470258,346.079998 C450.520613,389.964774 452.462846,423.624022 446.612784,448.065326 C443.133502,462.601616 436.772533,474.460118 427.100188,483.015822 C416.888713,492.048415 403.97812,496.480719 389.471716,496.480719 C365.540469,496.480719 340.38276,485.567754 313.497337,464.836 C302.414558,456.289901 290.907585,445.970246 278.952322,433.871131 C277.72222,435.79533 276.211928,437.583843 274.42571,439.17561 C241.0085,468.954966 212.874125,487.45726 188.810552,494.591188 C174.502358,498.833019 161.068733,499.237143 148.835534,495.120297 C135.922595,490.774698 125.633586,481.791714 118.374408,469.209422 C106.394146,448.444098 103.234809,421.158312 107.701312,387.467364 C109.587711,373.23821 112.861035,357.692597 117.513787,340.804862 C115.695126,340.620588 113.869021,340.235991 112.063143,339.637549 C69.6640738,325.5871 39.641098,310.47755 21.4644646,293.210022 C10.6498324,282.936284 3.58774368,271.498512 1.03484837,258.837662 C-1.65973706,245.474113 0.967693362,232.07013 8.21841848,219.497196 C20.1763288,198.76189 42.1634012,182.408167 73.4868514,169.454833 C86.4390207,164.098661 101.144362,159.262808 117.62016,154.929169 C117.03314,153.492145 116.569606,151.981174 116.244884,150.406615 Z" id="Combined-Shape-Copy-2" fill="#002B3B" fill-rule="nonzero"></path>
-            <path d="M225.133723,136.425962 C247.112019,134.676747 269.765528,133.904301 293.094249,134.108623 L293.094249,134.108622 C297.512357,134.147317 301.12531,130.597102 301.164005,126.178995 C301.180303,124.318178 300.547388,122.50989 299.374208,121.0654 C246.276598,55.6884667 202.554909,23 168.209139,23 C132.750515,23 122.634738,62.0860572 137.861808,140.258172 L137.861806,140.258172 C138.696436,144.542964 142.811897,147.367623 147.110243,146.605863 C174.219491,141.801521 200.227318,138.40822 225.133723,136.425962 Z" id="Path-3-Copy-24" fill="#FF4154"></path>
-            <path d="M348.510832,147.18674 C361.20348,165.476383 373.385335,184.845173 385.056394,205.29311 L385.0564,205.293107 C387.246571,209.130332 392.132742,210.465533 395.969967,208.275362 C397.57904,207.356952 398.81946,205.908524 399.47947,204.177345 C429.51487,125.395696 435.827221,71.0646203 418.416522,41.184118 C400.449906,10.3495405 361.302692,21.0113248 300.974882,73.1694709 L300.974878,73.1694669 C297.65796,76.0372042 297.267529,81.0405429 300.099442,84.3880992 C318.023814,105.576196 334.160944,126.509077 348.510832,147.18674 Z" id="Path-3-Copy-25" fill="#FF4154"></path>
-            <path d="M401.782962,257.247764 C392.283402,277.212779 381.605954,297.278404 369.750618,317.444638 C367.511466,321.253493 368.783962,326.156372 372.592818,328.395524 C374.20542,329.343541 376.099249,329.696482 377.945086,329.392991 C460.717636,315.783608 510.700527,294.061918 527.893758,264.227921 C545.650759,233.415662 517.095163,205.174519 442.226969,179.504493 L442.226971,179.504488 C438.102558,178.090353 433.605291,180.239322 432.114465,184.336639 C422.667086,210.301371 412.556585,234.60508 401.782962,257.247764 Z" id="Path-3-Copy-26" fill="#FF4154"></path>
-            <path d="M343.133723,462.425962 C365.112019,460.676747 387.765528,459.904301 411.094249,460.108623 L411.094249,460.108622 C415.512357,460.147317 419.12531,456.597102 419.164005,452.178995 C419.180303,450.318178 418.547388,448.50989 417.374208,447.0654 C364.276598,381.688467 320.554909,349 286.209139,349 C250.750515,349 240.634738,388.086057 255.861808,466.258172 L255.861806,466.258172 C256.696436,470.542964 260.811897,473.367623 265.110243,472.605863 C292.219491,467.801521 318.227318,464.40822 343.133723,462.425962 Z" id="Path-3-Copy-27" fill="#FF4154" transform="translate(338.500000, 411.500000) rotate(-180.000000) translate(-338.500000, -411.500000) "></path>
-            <path d="M207.489168,350.81326 C194.79652,332.523617 182.614665,313.154827 170.943606,292.70689 L170.9436,292.706893 C168.753429,288.869668 163.867258,287.534467 160.030033,289.724638 C158.42096,290.643048 157.18054,292.091476 156.52053,293.822655 C126.48513,372.604304 120.172779,426.93538 137.583478,456.815882 C155.550094,487.65046 194.697308,476.988675 255.025118,424.830529 L255.025122,424.830533 C258.34204,421.962796 258.732471,416.959457 255.900558,413.611901 C237.976186,392.423804 221.839056,371.490923 207.489168,350.81326 Z" id="Path-3-Copy-28" fill="#FF4154"></path>
-            <path d="M154.217038,237.752236 C163.716598,217.787221 174.394046,197.721596 186.249382,177.555362 C188.488534,173.746507 187.216038,168.843628 183.407182,166.604476 C181.79458,165.656459 179.900751,165.303518 178.054914,165.607009 C95.2823639,179.216392 45.2994732,200.938082 28.1062416,230.772079 C10.3492407,261.584338 38.904837,289.825481 113.773031,315.495507 L113.773029,315.495512 C117.897442,316.909647 122.394709,314.760678 123.885535,310.663361 C133.332914,284.698629 143.443415,260.39492 154.217038,237.752236 Z" id="Path-3-Copy-29" fill="#FF4154"></path>
-            <g id="Emblem" transform="translate(175.000000, 160.000000)" fill="#FFD94C">
-                <path d="M66.7177979,2.84217094e-14 L135.296803,2.84217094e-14 C145.32613,2.65793519e-14 154.58949,5.36419618 159.581661,14.0627957 L194.015968,74.0627957 C198.96949,82.6940525 198.96949,93.3059475 194.015968,101.937204 L159.581661,161.937204 C154.58949,170.635804 145.32613,176 135.296803,176 L66.7177979,176 C56.6884708,176 47.4251105,170.635804 42.4329397,161.937204 L7.99863284,101.937204 C3.04511039,93.3059475 3.04511039,82.6940525 7.99863284,74.0627957 L42.4329397,14.0627957 C47.4251105,5.36419618 56.6884708,3.73694943e-14 66.7177979,2.84217094e-14 Z M124.844708,18.1093248 C134.879332,18.1093248 144.14674,23.4791404 149.13694,32.1849766 L173.148745,74.0756519 C178.092436,82.7003489 178.092436,93.2996511 173.148745,101.924348 L149.13694,143.815023 C144.14674,152.52086 134.879332,157.890675 124.844708,157.890675 L77.1698923,157.890675 C67.1352682,157.890675 57.8678604,152.52086 52.8776604,143.815023 L28.8658549,101.924348 C23.9221641,93.2996511 23.9221641,82.7003489 28.8658549,74.0756519 L52.8776604,32.1849766 C57.8678604,23.4791404 67.1352682,18.1093248 77.1698923,18.1093248 L124.844708,18.1093248 Z M113.579035,37.9163987 L88.4355652,37.9163987 C78.4112416,37.9163987 69.151706,43.2752892 64.1576791,51.967053 L64.1576791,51.967053 L51.4691036,74.0506542 C46.5062851,82.6881019 46.5062851,93.3118981 51.4691036,101.949346 L51.4691036,101.949346 L64.1576791,124.032947 C69.151706,132.724711 78.4112416,138.083601 88.4355652,138.083601 L88.4355652,138.083601 L113.579035,138.083601 C123.603359,138.083601 132.862894,132.724711 137.856921,124.032947 L137.856921,124.032947 L150.545497,101.949346 C155.508315,93.3118981 155.508315,82.6881019 150.545497,74.0506542 L150.545497,74.0506542 L137.856921,51.967053 C132.862894,43.2752892 123.603359,37.9163987 113.579035,37.9163987 L113.579035,37.9163987 Z M102.731325,56.8745981 C112.74814,56.8745981 122.001934,62.2255316 126.998737,70.9070377 L128.79762,74.0324396 C133.774405,82.6791668 133.774405,93.3208332 128.79762,101.96756 L126.998737,105.092962 C122.001934,113.774468 112.74814,119.125402 102.731325,119.125402 L99.2832753,119.125402 C89.2664603,119.125402 80.0126664,113.774468 75.0158639,105.092962 L73.2169807,101.96756 C68.2401959,93.3208332 68.2401959,82.6791668 73.2169807,74.0324396 L75.0158639,70.9070377 C80.0126664,62.2255316 89.2664603,56.8745981 99.2832753,56.8745981 L102.731325,56.8745981 Z M101.011823,75.5498392 C96.5535807,75.5498392 92.442097,77.9226101 90.2160991,81.7749196 C87.9904765,85.6265797 87.9904765,90.3734203 90.2160991,94.2250804 C92.442097,98.0773899 96.5535807,100.450161 101.002778,100.450161 L101.002778,100.450161 C105.46102,100.450161 109.572503,98.0773899 111.798501,94.2250804 C114.024124,90.3734203 114.024124,85.6265797 111.798501,81.7749196 C109.572503,77.9226101 105.46102,75.5498392 101.011823,75.5498392 L101.011823,75.5498392 Z M-1.27897692e-13,88 L22.4155464,88" id="Polygon-2"></path>
+    <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g>
+            <path d="M343.113,309.464 L332.448134,327.983049 C329.235311,333.561819 323.287674,337 316.849903,337 L235.150097,337 C228.712326,337 222.764689,333.561819 219.551866,327.983049 L208.886,309.464 L343.113,309.464 Z M372.97,257.621 L354.165,290.273 L197.834,290.273 L179.03,257.621 L372.97,257.621 Z M354.856,206.925 L373,238.431 L179,238.431 L197.144,206.925 L354.856,206.925 Z M316.849903,159 C323.287674,159 329.235311,162.438181 332.448134,168.016951 L343.804,187.734 L208.196,187.734 L219.551866,168.016951 C222.764689,162.438181 228.712326,159 235.150097,159 L316.849903,159 Z" fill="#00435B"></path>
+            <g transform="translate(193.000000, 289.000000)"></g>
+            <path d="M116.244884,150.406615 C107.194529,106.52184 105.252296,72.8625915 111.102358,48.4212873 C114.58164,33.8849974 120.942609,22.026495 130.614954,13.4707918 C140.826429,4.43819877 153.737022,0.00589446291 168.243426,0.00589446291 C192.174673,0.00589446291 217.332382,10.9188593 244.217805,31.6506139 C255.183868,40.1067105 266.565236,50.2992041 278.385254,62.2338139 C279.326032,61.022654 280.389459,59.8802387 281.57429,58.8243904 C314.9915,29.0450344 343.125875,10.5427396 367.189448,3.40881198 C381.497642,-0.83301926 394.931267,-1.23714325 407.164466,2.87970264 C420.077405,7.22530165 430.366414,16.2082855 437.625592,28.7905785 C449.605854,49.5559023 452.765191,76.841688 448.298688,110.532636 C446.478098,124.265387 443.365665,139.224346 438.968129,155.432583 C440.627205,155.632935 442.290437,156.000787 443.936857,156.546387 C486.335926,170.596836 516.358902,185.706386 534.535535,202.973914 C545.350168,213.247652 552.412256,224.685424 554.965152,237.346274 C557.659737,250.709823 555.032307,264.113807 547.781582,276.68674 C535.823671,297.422046 513.836599,313.775769 482.513149,326.729103 C469.93574,331.930298 455.705146,336.640849 439.805538,340.877334 C440.531021,342.515377 441.093882,344.254975 441.470258,346.079998 C450.520613,389.964774 452.462846,423.624022 446.612784,448.065326 C443.133502,462.601616 436.772533,474.460118 427.100188,483.015822 C416.888713,492.048415 403.97812,496.480719 389.471716,496.480719 C365.540469,496.480719 340.38276,485.567754 313.497337,464.836 C302.414558,456.289901 290.907585,445.970246 278.952322,433.871131 C277.72222,435.79533 276.211928,437.583843 274.42571,439.17561 C241.0085,468.954966 212.874125,487.45726 188.810552,494.591188 C174.502358,498.833019 161.068733,499.237143 148.835534,495.120297 C135.922595,490.774698 125.633586,481.791714 118.374408,469.209422 C106.394146,448.444098 103.234809,421.158312 107.701312,387.467364 C109.587711,373.23821 112.861035,357.692597 117.513787,340.804862 C115.695126,340.620588 113.869021,340.235991 112.063143,339.637549 C69.6640738,325.5871 39.641098,310.47755 21.4644646,293.210022 C10.6498324,282.936284 3.58774368,271.498512 1.03484837,258.837662 C-1.65973706,245.474113 0.967693362,232.07013 8.21841848,219.497196 C20.1763288,198.76189 42.1634012,182.408167 73.4868514,169.454833 C86.4390207,164.098661 101.144362,159.262808 117.62016,154.929169 C117.03314,153.492145 116.569606,151.981174 116.244884,150.406615 Z" fill="#002B3B" fill-rule="nonzero"></path>
+            <path d="M225.133723,136.425962 C247.112019,134.676747 269.765528,133.904301 293.094249,134.108623 L293.094249,134.108622 C297.512357,134.147317 301.12531,130.597102 301.164005,126.178995 C301.180303,124.318178 300.547388,122.50989 299.374208,121.0654 C246.276598,55.6884667 202.554909,23 168.209139,23 C132.750515,23 122.634738,62.0860572 137.861808,140.258172 L137.861806,140.258172 C138.696436,144.542964 142.811897,147.367623 147.110243,146.605863 C174.219491,141.801521 200.227318,138.40822 225.133723,136.425962 Z" fill="#FF4154"></path>
+            <path d="M348.510832,147.18674 C361.20348,165.476383 373.385335,184.845173 385.056394,205.29311 L385.0564,205.293107 C387.246571,209.130332 392.132742,210.465533 395.969967,208.275362 C397.57904,207.356952 398.81946,205.908524 399.47947,204.177345 C429.51487,125.395696 435.827221,71.0646203 418.416522,41.184118 C400.449906,10.3495405 361.302692,21.0113248 300.974882,73.1694709 L300.974878,73.1694669 C297.65796,76.0372042 297.267529,81.0405429 300.099442,84.3880992 C318.023814,105.576196 334.160944,126.509077 348.510832,147.18674 Z" fill="#FF4154"></path>
+            <path d="M401.782962,257.247764 C392.283402,277.212779 381.605954,297.278404 369.750618,317.444638 C367.511466,321.253493 368.783962,326.156372 372.592818,328.395524 C374.20542,329.343541 376.099249,329.696482 377.945086,329.392991 C460.717636,315.783608 510.700527,294.061918 527.893758,264.227921 C545.650759,233.415662 517.095163,205.174519 442.226969,179.504493 L442.226971,179.504488 C438.102558,178.090353 433.605291,180.239322 432.114465,184.336639 C422.667086,210.301371 412.556585,234.60508 401.782962,257.247764 Z" fill="#FF4154"></path>
+            <path d="M343.133723,462.425962 C365.112019,460.676747 387.765528,459.904301 411.094249,460.108623 L411.094249,460.108622 C415.512357,460.147317 419.12531,456.597102 419.164005,452.178995 C419.180303,450.318178 418.547388,448.50989 417.374208,447.0654 C364.276598,381.688467 320.554909,349 286.209139,349 C250.750515,349 240.634738,388.086057 255.861808,466.258172 L255.861806,466.258172 C256.696436,470.542964 260.811897,473.367623 265.110243,472.605863 C292.219491,467.801521 318.227318,464.40822 343.133723,462.425962 Z" fill="#FF4154" transform="translate(338.500000, 411.500000) rotate(-180.000000) translate(-338.500000, -411.500000) "></path>
+            <path d="M207.489168,350.81326 C194.79652,332.523617 182.614665,313.154827 170.943606,292.70689 L170.9436,292.706893 C168.753429,288.869668 163.867258,287.534467 160.030033,289.724638 C158.42096,290.643048 157.18054,292.091476 156.52053,293.822655 C126.48513,372.604304 120.172779,426.93538 137.583478,456.815882 C155.550094,487.65046 194.697308,476.988675 255.025118,424.830529 L255.025122,424.830533 C258.34204,421.962796 258.732471,416.959457 255.900558,413.611901 C237.976186,392.423804 221.839056,371.490923 207.489168,350.81326 Z" fill="#FF4154"></path>
+            <path d="M154.217038,237.752236 C163.716598,217.787221 174.394046,197.721596 186.249382,177.555362 C188.488534,173.746507 187.216038,168.843628 183.407182,166.604476 C181.79458,165.656459 179.900751,165.303518 178.054914,165.607009 C95.2823639,179.216392 45.2994732,200.938082 28.1062416,230.772079 C10.3492407,261.584338 38.904837,289.825481 113.773031,315.495507 L113.773029,315.495512 C117.897442,316.909647 122.394709,314.760678 123.885535,310.663361 C133.332914,284.698629 143.443415,260.39492 154.217038,237.752236 Z" fill="#FF4154"></path>
+            <g transform="translate(175.000000, 160.000000)" fill="#FFD94C">
+                <path d="M66.7177979,2.84217094e-14 L135.296803,2.84217094e-14 C145.32613,2.65793519e-14 154.58949,5.36419618 159.581661,14.0627957 L194.015968,74.0627957 C198.96949,82.6940525 198.96949,93.3059475 194.015968,101.937204 L159.581661,161.937204 C154.58949,170.635804 145.32613,176 135.296803,176 L66.7177979,176 C56.6884708,176 47.4251105,170.635804 42.4329397,161.937204 L7.99863284,101.937204 C3.04511039,93.3059475 3.04511039,82.6940525 7.99863284,74.0627957 L42.4329397,14.0627957 C47.4251105,5.36419618 56.6884708,3.73694943e-14 66.7177979,2.84217094e-14 Z M124.844708,18.1093248 C134.879332,18.1093248 144.14674,23.4791404 149.13694,32.1849766 L173.148745,74.0756519 C178.092436,82.7003489 178.092436,93.2996511 173.148745,101.924348 L149.13694,143.815023 C144.14674,152.52086 134.879332,157.890675 124.844708,157.890675 L77.1698923,157.890675 C67.1352682,157.890675 57.8678604,152.52086 52.8776604,143.815023 L28.8658549,101.924348 C23.9221641,93.2996511 23.9221641,82.7003489 28.8658549,74.0756519 L52.8776604,32.1849766 C57.8678604,23.4791404 67.1352682,18.1093248 77.1698923,18.1093248 L124.844708,18.1093248 Z M113.579035,37.9163987 L88.4355652,37.9163987 C78.4112416,37.9163987 69.151706,43.2752892 64.1576791,51.967053 L64.1576791,51.967053 L51.4691036,74.0506542 C46.5062851,82.6881019 46.5062851,93.3118981 51.4691036,101.949346 L51.4691036,101.949346 L64.1576791,124.032947 C69.151706,132.724711 78.4112416,138.083601 88.4355652,138.083601 L88.4355652,138.083601 L113.579035,138.083601 C123.603359,138.083601 132.862894,132.724711 137.856921,124.032947 L137.856921,124.032947 L150.545497,101.949346 C155.508315,93.3118981 155.508315,82.6881019 150.545497,74.0506542 L150.545497,74.0506542 L137.856921,51.967053 C132.862894,43.2752892 123.603359,37.9163987 113.579035,37.9163987 L113.579035,37.9163987 Z M102.731325,56.8745981 C112.74814,56.8745981 122.001934,62.2255316 126.998737,70.9070377 L128.79762,74.0324396 C133.774405,82.6791668 133.774405,93.3208332 128.79762,101.96756 L126.998737,105.092962 C122.001934,113.774468 112.74814,119.125402 102.731325,119.125402 L99.2832753,119.125402 C89.2664603,119.125402 80.0126664,113.774468 75.0158639,105.092962 L73.2169807,101.96756 C68.2401959,93.3208332 68.2401959,82.6791668 73.2169807,74.0324396 L75.0158639,70.9070377 C80.0126664,62.2255316 89.2664603,56.8745981 99.2832753,56.8745981 L102.731325,56.8745981 Z M101.011823,75.5498392 C96.5535807,75.5498392 92.442097,77.9226101 90.2160991,81.7749196 C87.9904765,85.6265797 87.9904765,90.3734203 90.2160991,94.2250804 C92.442097,98.0773899 96.5535807,100.450161 101.002778,100.450161 L101.002778,100.450161 C105.46102,100.450161 109.572503,98.0773899 111.798501,94.2250804 C114.024124,90.3734203 114.024124,85.6265797 111.798501,81.7749196 C109.572503,77.9226101 105.46102,75.5498392 101.011823,75.5498392 L101.011823,75.5498392 Z M-1.27897692e-13,88 L22.4155464,88"></path>
             </g>
-            <path d="M717.3065,379 L717.3065,287.363 L767.3915,287.363 L814.5085,379 L877.5785,379 L828.9775,278.83 C843.570167,272.894 855.071167,262.629667 863.4805,248.037 C871.889833,233.444333 876.0945,218.480667 876.0945,203.146 C876.0945,178.412667 869.107333,158.255 855.133,142.673 C841.158667,127.091 818.5895,119.3 787.4255,119.3 L787.4255,119.3 L660.9145,119.3 L660.9145,379 L717.3065,379 Z M788.1675,233.939 L717.3065,233.939 L717.3065,172.724 L788.1675,172.724 C798.5555,172.724 806.037333,175.630167 810.613,181.4425 C815.188667,187.254833 817.4765,194.489333 817.4765,203.146 C817.4765,223.674667 807.706833,233.939 788.1675,233.939 L788.1675,233.939 Z M961.9915,383.452 C992.166167,383.452 1016.77583,371.951 1035.8205,348.949 L1035.8205,348.949 L1004.6565,317.785 C993.5265,331.141 979.304833,337.819 961.9915,337.819 C951.356167,337.819 942.575833,334.912833 935.6505,329.1005 C928.725167,323.288167 925.015167,314.446 924.5205,302.574 L924.5205,302.574 L1045.8375,302.574 C1046.82683,296.143333 1047.3215,286.868333 1047.3215,274.749 C1047.3215,245.563667 1039.40683,223.303667 1023.5775,207.969 C1007.74817,192.634333 987.2195,184.967 961.9915,184.967 C934.290167,184.967 912.339333,193.871 896.139,211.679 C879.938667,229.487 871.8385,253.602 871.8385,284.024 C871.8385,315.188 879.876833,339.550333 895.9535,357.111 C912.030167,374.671667 934.042833,383.452 961.9915,383.452 Z M995.7525,262.135 L924.8915,262.135 C926.128167,252.241667 929.838167,244.5125 936.0215,238.9475 C942.204833,233.3825 950.1195,230.6 959.7655,230.6 C981.036167,230.6 993.031833,241.111667 995.7525,262.135 L995.7525,262.135 Z M1123.9435,383.452 C1143.9775,383.452 1159.68317,377.268667 1171.0605,364.902 L1171.0605,364.902 L1171.0605,379 L1224.4845,379 L1224.4845,259.167 C1224.4845,209.700333 1197.64883,184.967 1143.9775,184.967 C1113.06083,184.967 1085.97783,192.881667 1062.7285,208.711 L1062.7285,208.711 L1079.4235,249.892 C1099.4575,236.536 1119.73883,229.858 1140.2675,229.858 C1149.9135,229.858 1157.45717,232.145833 1162.8985,236.7215 C1168.33983,241.297167 1171.0605,247.913333 1171.0605,256.57 L1171.0605,256.57 L1171.0605,266.958 C1161.16717,262.506 1147.3165,260.28 1129.5085,260.28 C1108.97983,260.28 1091.04817,265.535833 1075.7135,276.0475 C1060.37883,286.559167 1052.7115,301.584667 1052.7115,321.124 C1052.7115,341.158 1059.32767,356.5545 1072.56,367.3135 C1085.79233,378.0725 1102.92017,383.452 1123.9435,383.452 Z M1134.3315,338.19 C1115.0395,338.19 1105.3935,332.625 1105.3935,321.495 C1105.3935,309.375667 1116.5235,303.316 1138.7835,303.316 C1150.40817,303.316 1161.16717,304.8 1171.0605,307.768 L1171.0605,307.768 L1171.0605,324.834 C1159.9305,333.738 1147.6875,338.19 1134.3315,338.19 Z M1327.8185,383.452 C1370.8545,383.452 1398.6795,362.057667 1411.2935,319.269 L1411.2935,319.269 L1359.7245,304.429 C1354.03583,322.731667 1343.4005,331.883 1327.8185,331.883 C1317.92517,331.883 1309.76317,327.492833 1303.3325,318.7125 C1296.90183,309.932167 1293.6865,298.493 1293.6865,284.395 C1293.6865,270.297 1296.96367,258.796 1303.518,249.892 C1310.07233,240.988 1318.41983,236.536 1328.5605,236.536 C1343.15317,236.536 1353.54117,244.698 1359.7245,261.022 L1359.7245,261.022 L1410.9225,244.327 C1398.55583,204.753667 1370.8545,184.967 1327.8185,184.967 C1301.1065,184.967 1279.65033,193.932833 1263.45,211.8645 C1247.24967,229.796167 1239.1495,253.973 1239.1495,284.395 C1239.1495,315.311667 1247.18783,339.550333 1263.2645,357.111 C1279.34117,374.671667 1300.85917,383.452 1327.8185,383.452 Z M1485.6895,383.452 C1502.7555,383.452 1517.10083,380.607667 1528.7255,374.919 L1528.7255,374.919 L1534.6615,329.657 C1523.77883,334.603667 1512.89617,337.077 1502.0135,337.077 C1499.0455,337.077 1496.51033,336.1495 1494.408,334.2945 C1492.30567,332.4395 1491.2545,329.780667 1491.2545,326.318 L1491.2545,326.318 L1491.2545,236.536 L1532.4355,236.536 L1532.4355,189.419 L1491.2545,189.419 L1491.2545,111.138 L1437.8305,136.737 L1437.8305,189.419 L1411.8605,189.419 L1411.8605,236.536 L1437.8305,236.536 L1437.8305,331.512 C1437.8305,366.138667 1453.7835,383.452 1485.6895,383.452 Z M1779.9135,409.051 L1821.4655,382.339 L1801.4315,353.03 C1825.9175,327.554667 1838.1605,292.928 1838.1605,249.15 C1838.1605,232.331333 1835.99633,216.254667 1831.668,200.92 C1827.33967,185.585333 1820.84717,171.301833 1812.1905,158.0695 C1803.53383,144.837167 1791.53817,134.3255 1776.2035,126.5345 C1760.86883,118.7435 1743.1845,114.848 1723.1505,114.848 C1706.8265,114.848 1692.04833,117.445 1678.816,122.639 C1665.58367,127.833 1654.63917,134.820167 1645.9825,143.6005 C1637.32583,152.380833 1630.09133,162.583333 1624.279,174.208 C1618.46667,185.832667 1614.262,197.890167 1611.665,210.3805 C1609.068,222.870833 1607.7695,235.794 1607.7695,249.15 C1607.7695,262.506 1609.068,275.429167 1611.665,287.9195 C1614.262,300.409833 1618.46667,312.467333 1624.279,324.092 C1630.09133,335.716667 1637.32583,345.919167 1645.9825,354.6995 C1654.63917,363.479833 1665.58367,370.467 1678.816,375.661 C1692.04833,380.855 1706.8265,383.452 1723.1505,383.452 C1735.51717,383.452 1747.51283,381.844333 1759.1375,378.629 L1759.1375,378.629 L1779.9135,409.051 Z M1723.1505,328.915 C1713.00983,328.915 1704.10583,326.5035 1696.4385,321.6805 C1688.77117,316.8575 1682.83517,310.426833 1678.6305,302.3885 C1674.42583,294.350167 1671.33417,285.879 1669.3555,276.975 C1667.37683,268.071 1666.3875,258.796 1666.3875,249.15 C1666.3875,236.288667 1667.99517,224.1075 1671.2105,212.6065 C1674.42583,201.1055 1680.54733,190.964833 1689.575,182.1845 C1698.60267,173.404167 1709.7945,169.014 1723.1505,169.014 C1736.5065,169.014 1747.6365,173.2805 1756.5405,181.8135 C1765.4445,190.3465 1771.50417,200.3635 1774.7195,211.8645 C1777.93483,223.3655 1779.5425,235.794 1779.5425,249.15 C1779.5425,270.915333 1775.58517,288.476 1767.6705,301.832 L1767.6705,301.832 L1746.8945,270.668 L1704.9715,297.751 L1726.1185,328.544 L1726.1185,328.544 L1724.2635,328.544 L1723.1505,328.915 Z M1919.6055,383.452 C1942.36017,383.452 1959.6735,376.155667 1971.5455,361.563 L1971.5455,361.563 L1971.5455,379 L2025.3405,379 L2025.3405,189.419 L1971.5455,189.419 L1971.5455,288.847 C1971.5455,303.439667 1968.88667,314.198667 1963.569,321.124 C1958.25133,328.049333 1949.90383,331.512 1938.5265,331.512 C1927.14917,331.512 1919.2345,328.049333 1914.7825,321.124 C1910.3305,314.198667 1908.1045,303.192333 1908.1045,288.105 L1908.1045,288.105 L1908.1045,189.419 L1854.3095,189.419 L1854.3095,312.591 C1854.3095,325.452333 1856.35,336.706 1860.431,346.352 C1864.512,355.998 1869.8915,363.418 1876.5695,368.612 C1883.2475,373.806 1890.17283,377.577833 1897.3455,379.9275 C1904.51817,382.277167 1911.93817,383.452 1919.6055,383.452 Z M2133.8685,383.452 C2164.04317,383.452 2188.65283,371.951 2207.6975,348.949 L2207.6975,348.949 L2176.5335,317.785 C2165.4035,331.141 2151.18183,337.819 2133.8685,337.819 C2123.23317,337.819 2114.45283,334.912833 2107.5275,329.1005 C2100.60217,323.288167 2096.89217,314.446 2096.3975,302.574 L2096.3975,302.574 L2217.7145,302.574 C2218.70383,296.143333 2219.1985,286.868333 2219.1985,274.749 C2219.1985,245.563667 2211.28383,223.303667 2195.4545,207.969 C2179.62517,192.634333 2159.0965,184.967 2133.8685,184.967 C2106.16717,184.967 2084.21633,193.871 2068.016,211.679 C2051.81567,229.487 2043.7155,253.602 2043.7155,284.024 C2043.7155,315.188 2051.75383,339.550333 2067.8305,357.111 C2083.90717,374.671667 2105.91983,383.452 2133.8685,383.452 Z M2167.6295,262.135 L2096.7685,262.135 C2098.00517,252.241667 2101.71517,244.5125 2107.8985,238.9475 C2114.08183,233.3825 2121.9965,230.6 2131.6425,230.6 C2152.91317,230.6 2164.90883,241.111667 2167.6295,262.135 L2167.6295,262.135 Z M2289.5135,379 L2289.5135,276.233 C2289.5135,250.015667 2300.39617,236.907 2322.1615,236.907 C2334.28083,236.907 2345.5345,241.235333 2355.9225,249.892 L2355.9225,249.892 L2362.9715,200.92 C2352.83083,190.284667 2340.3405,184.967 2325.5005,184.967 C2316.84383,184.967 2309.30017,187.316667 2302.8695,192.016 C2296.43883,196.715333 2291.98683,201.538333 2289.5135,206.485 L2289.5135,206.485 L2289.5135,189.419 L2235.7185,189.419 L2235.7185,379 L2289.5135,379 Z M2450.7235,450.974 L2551.6355,189.419 L2496.3565,189.419 L2458.1435,290.702 C2455.42283,298.122 2453.44417,304.058 2452.2075,308.51 C2450.97083,304.058 2448.99217,298.122 2446.2715,290.702 L2446.2715,290.702 L2407.6875,189.419 L2352.0375,189.419 L2423.6405,376.774 L2395.0735,450.974 L2450.7235,450.974 Z" id="ReactQuery" fill="#00435B" fill-rule="nonzero"></path>
+            <path d="M717.3065,379 L717.3065,287.363 L767.3915,287.363 L814.5085,379 L877.5785,379 L828.9775,278.83 C843.570167,272.894 855.071167,262.629667 863.4805,248.037 C871.889833,233.444333 876.0945,218.480667 876.0945,203.146 C876.0945,178.412667 869.107333,158.255 855.133,142.673 C841.158667,127.091 818.5895,119.3 787.4255,119.3 L787.4255,119.3 L660.9145,119.3 L660.9145,379 L717.3065,379 Z M788.1675,233.939 L717.3065,233.939 L717.3065,172.724 L788.1675,172.724 C798.5555,172.724 806.037333,175.630167 810.613,181.4425 C815.188667,187.254833 817.4765,194.489333 817.4765,203.146 C817.4765,223.674667 807.706833,233.939 788.1675,233.939 L788.1675,233.939 Z M961.9915,383.452 C992.166167,383.452 1016.77583,371.951 1035.8205,348.949 L1035.8205,348.949 L1004.6565,317.785 C993.5265,331.141 979.304833,337.819 961.9915,337.819 C951.356167,337.819 942.575833,334.912833 935.6505,329.1005 C928.725167,323.288167 925.015167,314.446 924.5205,302.574 L924.5205,302.574 L1045.8375,302.574 C1046.82683,296.143333 1047.3215,286.868333 1047.3215,274.749 C1047.3215,245.563667 1039.40683,223.303667 1023.5775,207.969 C1007.74817,192.634333 987.2195,184.967 961.9915,184.967 C934.290167,184.967 912.339333,193.871 896.139,211.679 C879.938667,229.487 871.8385,253.602 871.8385,284.024 C871.8385,315.188 879.876833,339.550333 895.9535,357.111 C912.030167,374.671667 934.042833,383.452 961.9915,383.452 Z M995.7525,262.135 L924.8915,262.135 C926.128167,252.241667 929.838167,244.5125 936.0215,238.9475 C942.204833,233.3825 950.1195,230.6 959.7655,230.6 C981.036167,230.6 993.031833,241.111667 995.7525,262.135 L995.7525,262.135 Z M1123.9435,383.452 C1143.9775,383.452 1159.68317,377.268667 1171.0605,364.902 L1171.0605,364.902 L1171.0605,379 L1224.4845,379 L1224.4845,259.167 C1224.4845,209.700333 1197.64883,184.967 1143.9775,184.967 C1113.06083,184.967 1085.97783,192.881667 1062.7285,208.711 L1062.7285,208.711 L1079.4235,249.892 C1099.4575,236.536 1119.73883,229.858 1140.2675,229.858 C1149.9135,229.858 1157.45717,232.145833 1162.8985,236.7215 C1168.33983,241.297167 1171.0605,247.913333 1171.0605,256.57 L1171.0605,256.57 L1171.0605,266.958 C1161.16717,262.506 1147.3165,260.28 1129.5085,260.28 C1108.97983,260.28 1091.04817,265.535833 1075.7135,276.0475 C1060.37883,286.559167 1052.7115,301.584667 1052.7115,321.124 C1052.7115,341.158 1059.32767,356.5545 1072.56,367.3135 C1085.79233,378.0725 1102.92017,383.452 1123.9435,383.452 Z M1134.3315,338.19 C1115.0395,338.19 1105.3935,332.625 1105.3935,321.495 C1105.3935,309.375667 1116.5235,303.316 1138.7835,303.316 C1150.40817,303.316 1161.16717,304.8 1171.0605,307.768 L1171.0605,307.768 L1171.0605,324.834 C1159.9305,333.738 1147.6875,338.19 1134.3315,338.19 Z M1327.8185,383.452 C1370.8545,383.452 1398.6795,362.057667 1411.2935,319.269 L1411.2935,319.269 L1359.7245,304.429 C1354.03583,322.731667 1343.4005,331.883 1327.8185,331.883 C1317.92517,331.883 1309.76317,327.492833 1303.3325,318.7125 C1296.90183,309.932167 1293.6865,298.493 1293.6865,284.395 C1293.6865,270.297 1296.96367,258.796 1303.518,249.892 C1310.07233,240.988 1318.41983,236.536 1328.5605,236.536 C1343.15317,236.536 1353.54117,244.698 1359.7245,261.022 L1359.7245,261.022 L1410.9225,244.327 C1398.55583,204.753667 1370.8545,184.967 1327.8185,184.967 C1301.1065,184.967 1279.65033,193.932833 1263.45,211.8645 C1247.24967,229.796167 1239.1495,253.973 1239.1495,284.395 C1239.1495,315.311667 1247.18783,339.550333 1263.2645,357.111 C1279.34117,374.671667 1300.85917,383.452 1327.8185,383.452 Z M1485.6895,383.452 C1502.7555,383.452 1517.10083,380.607667 1528.7255,374.919 L1528.7255,374.919 L1534.6615,329.657 C1523.77883,334.603667 1512.89617,337.077 1502.0135,337.077 C1499.0455,337.077 1496.51033,336.1495 1494.408,334.2945 C1492.30567,332.4395 1491.2545,329.780667 1491.2545,326.318 L1491.2545,326.318 L1491.2545,236.536 L1532.4355,236.536 L1532.4355,189.419 L1491.2545,189.419 L1491.2545,111.138 L1437.8305,136.737 L1437.8305,189.419 L1411.8605,189.419 L1411.8605,236.536 L1437.8305,236.536 L1437.8305,331.512 C1437.8305,366.138667 1453.7835,383.452 1485.6895,383.452 Z M1779.9135,409.051 L1821.4655,382.339 L1801.4315,353.03 C1825.9175,327.554667 1838.1605,292.928 1838.1605,249.15 C1838.1605,232.331333 1835.99633,216.254667 1831.668,200.92 C1827.33967,185.585333 1820.84717,171.301833 1812.1905,158.0695 C1803.53383,144.837167 1791.53817,134.3255 1776.2035,126.5345 C1760.86883,118.7435 1743.1845,114.848 1723.1505,114.848 C1706.8265,114.848 1692.04833,117.445 1678.816,122.639 C1665.58367,127.833 1654.63917,134.820167 1645.9825,143.6005 C1637.32583,152.380833 1630.09133,162.583333 1624.279,174.208 C1618.46667,185.832667 1614.262,197.890167 1611.665,210.3805 C1609.068,222.870833 1607.7695,235.794 1607.7695,249.15 C1607.7695,262.506 1609.068,275.429167 1611.665,287.9195 C1614.262,300.409833 1618.46667,312.467333 1624.279,324.092 C1630.09133,335.716667 1637.32583,345.919167 1645.9825,354.6995 C1654.63917,363.479833 1665.58367,370.467 1678.816,375.661 C1692.04833,380.855 1706.8265,383.452 1723.1505,383.452 C1735.51717,383.452 1747.51283,381.844333 1759.1375,378.629 L1759.1375,378.629 L1779.9135,409.051 Z M1723.1505,328.915 C1713.00983,328.915 1704.10583,326.5035 1696.4385,321.6805 C1688.77117,316.8575 1682.83517,310.426833 1678.6305,302.3885 C1674.42583,294.350167 1671.33417,285.879 1669.3555,276.975 C1667.37683,268.071 1666.3875,258.796 1666.3875,249.15 C1666.3875,236.288667 1667.99517,224.1075 1671.2105,212.6065 C1674.42583,201.1055 1680.54733,190.964833 1689.575,182.1845 C1698.60267,173.404167 1709.7945,169.014 1723.1505,169.014 C1736.5065,169.014 1747.6365,173.2805 1756.5405,181.8135 C1765.4445,190.3465 1771.50417,200.3635 1774.7195,211.8645 C1777.93483,223.3655 1779.5425,235.794 1779.5425,249.15 C1779.5425,270.915333 1775.58517,288.476 1767.6705,301.832 L1767.6705,301.832 L1746.8945,270.668 L1704.9715,297.751 L1726.1185,328.544 L1726.1185,328.544 L1724.2635,328.544 L1723.1505,328.915 Z M1919.6055,383.452 C1942.36017,383.452 1959.6735,376.155667 1971.5455,361.563 L1971.5455,361.563 L1971.5455,379 L2025.3405,379 L2025.3405,189.419 L1971.5455,189.419 L1971.5455,288.847 C1971.5455,303.439667 1968.88667,314.198667 1963.569,321.124 C1958.25133,328.049333 1949.90383,331.512 1938.5265,331.512 C1927.14917,331.512 1919.2345,328.049333 1914.7825,321.124 C1910.3305,314.198667 1908.1045,303.192333 1908.1045,288.105 L1908.1045,288.105 L1908.1045,189.419 L1854.3095,189.419 L1854.3095,312.591 C1854.3095,325.452333 1856.35,336.706 1860.431,346.352 C1864.512,355.998 1869.8915,363.418 1876.5695,368.612 C1883.2475,373.806 1890.17283,377.577833 1897.3455,379.9275 C1904.51817,382.277167 1911.93817,383.452 1919.6055,383.452 Z M2133.8685,383.452 C2164.04317,383.452 2188.65283,371.951 2207.6975,348.949 L2207.6975,348.949 L2176.5335,317.785 C2165.4035,331.141 2151.18183,337.819 2133.8685,337.819 C2123.23317,337.819 2114.45283,334.912833 2107.5275,329.1005 C2100.60217,323.288167 2096.89217,314.446 2096.3975,302.574 L2096.3975,302.574 L2217.7145,302.574 C2218.70383,296.143333 2219.1985,286.868333 2219.1985,274.749 C2219.1985,245.563667 2211.28383,223.303667 2195.4545,207.969 C2179.62517,192.634333 2159.0965,184.967 2133.8685,184.967 C2106.16717,184.967 2084.21633,193.871 2068.016,211.679 C2051.81567,229.487 2043.7155,253.602 2043.7155,284.024 C2043.7155,315.188 2051.75383,339.550333 2067.8305,357.111 C2083.90717,374.671667 2105.91983,383.452 2133.8685,383.452 Z M2167.6295,262.135 L2096.7685,262.135 C2098.00517,252.241667 2101.71517,244.5125 2107.8985,238.9475 C2114.08183,233.3825 2121.9965,230.6 2131.6425,230.6 C2152.91317,230.6 2164.90883,241.111667 2167.6295,262.135 L2167.6295,262.135 Z M2289.5135,379 L2289.5135,276.233 C2289.5135,250.015667 2300.39617,236.907 2322.1615,236.907 C2334.28083,236.907 2345.5345,241.235333 2355.9225,249.892 L2355.9225,249.892 L2362.9715,200.92 C2352.83083,190.284667 2340.3405,184.967 2325.5005,184.967 C2316.84383,184.967 2309.30017,187.316667 2302.8695,192.016 C2296.43883,196.715333 2291.98683,201.538333 2289.5135,206.485 L2289.5135,206.485 L2289.5135,189.419 L2235.7185,189.419 L2235.7185,379 L2289.5135,379 Z M2450.7235,450.974 L2551.6355,189.419 L2496.3565,189.419 L2458.1435,290.702 C2455.42283,298.122 2453.44417,304.058 2452.2075,308.51 C2450.97083,304.058 2448.99217,298.122 2446.2715,290.702 L2446.2715,290.702 L2407.6875,189.419 L2352.0375,189.419 L2423.6405,376.774 L2395.0735,450.974 L2450.7235,450.974 Z" fill="#00435B" fill-rule="nonzero"></path>
         </g>
     </g>
 </svg>
\ No newline at end of file
diff --git a/docs/src/images/logos/walmart.svg b/docs/src/images/logos/walmart.svg
index 58b31faae..1cfff01f1 100644
--- a/docs/src/images/logos/walmart.svg
+++ b/docs/src/images/logos/walmart.svg
@@ -1,1 +1,1 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="250" height="61" version="1.1" viewBox="0 0 250 61"><title>Walmart_logo</title><desc>Created with Sketch.</desc><g id="Logos" fill="none" fill-rule="evenodd" stroke="none" stroke-width="1"><g id="Artboard-Copy" fill-rule="nonzero" transform="translate(-447.000000, -59.000000)"><g id="Group-3" transform="translate(83.000000, 44.000000)"><g id="Walmart_logo" transform="translate(364.000000, 15.000000)"><g id="Group" transform="translate(125.000000, 31.000000) scale(-1, 1) rotate(-180.000000) translate(-125.000000, -31.000000)"><g id="Shape"><path fill="#007DC6" d="M0,12.3888735 C0,12.3888735 6.18433333,37.8675222 7.17133333,42.0030897 C8.32333333,46.8300411 10.3990333,48.6065924 16.3836667,47.4084843 L20.2453333,31.6118897 C21.2240667,27.6881276 21.8805333,24.8907546 22.5096667,20.8992951 L22.6203433,20.8992951 C23.06241,24.9299654 23.6918767,27.6998573 24.49731,31.6256303 C24.49731,31.6256303 26.0692767,38.7968519 26.8742767,42.5634357 C27.68141,46.3286789 29.9276433,48.7017708 35.78961,47.4098249 L44.9909433,12.3915546 L37.5619433,12.3915546 L34.4206767,27.5316195 C33.57611,31.9386465 32.80971,35.38216 32.2188433,39.4138357 L32.1140267,39.4138357 C31.5770267,35.4223762 30.8940267,32.1152627 30.03536,27.8215114 L26.7645267,12.3915546 L19.0241933,12.3915546 L15.5255267,27.4327546 C14.5343267,32.0033276 13.60726,35.6941708 13.0177267,39.5891114 L12.9109567,39.5891114 C12.3072233,35.9210573 11.50309,31.2824519 10.6323233,26.8579978 C10.6323233,26.8579978 8.55369,16.0998249 7.82439,12.3915546 L0.000723333333,12.39256 L0,12.3888735 Z M70.82,12.3888735 L70.82,47.4071438 L77.893,47.4071438 L77.893,39.9711654 L77.893,12.3871978 L70.82,12.3871978 L70.82,12.3888735 Z M170.436667,12.3888735 L170.436667,38.2224303 C170.436667,41.7842465 171.1034,44.2796627 172.529767,45.8041924 C173.775933,47.1375276 175.828567,48.0009027 178.2881,48.0009027 C180.379267,48.0009027 182.436767,47.6021589 183.406433,47.2390065 L183.31529,41.6817957 C182.593757,41.8603389 181.76369,42.0031869 180.628423,42.0031869 C178.219057,42.0031869 177.41099,40.4517123 177.41099,37.2536518 L177.41099,27.3698464 L183.57099,27.3698464 L183.57099,20.6698248 L177.41099,20.6698248 L177.41099,12.3889707 L170.436323,12.3888735 L170.436667,12.3888735 Z M55.0133333,20.5068519 C50.6176667,20.5068519 47.1283333,21.7477232 45.2263333,22.8527978 L46.6182667,27.6448951 C48.3589667,26.5415632 51.1306,25.6281859 53.7549333,25.6281859 C58.0999333,25.6169589 58.8102667,28.0982995 58.8102667,29.6896886 L58.8102667,30.0660454 C49.3426,30.0517586 43.3622667,33.3456108 43.3622667,40.0597751 C43.3622667,44.1591481 46.4066,48.0008022 51.7002667,48.0008022 C54.9589333,48.0008022 57.6842667,46.6941438 59.3176,44.6005211 L59.4777567,44.6005211 C59.4777567,44.6005211 60.5593567,49.1472995 66.51809,47.4085849 C66.20505,45.5162108 66.10339,43.4985632 66.10339,41.0684984 L66.10339,31.7135362 C66.10339,25.751147 63.57129,20.5069524 55.01339,20.5069524 L55.0133333,20.5068519 Z M97.3233333,20.5068519 C92.8973333,20.5068519 90.9083333,22.7619762 89.7023333,24.6752627 L89.5975167,24.6752627 L89.5975167,21.1007114 L82.8475167,21.1007114 L82.8475167,47.4088195 L89.9581833,47.4088195 L89.9581833,31.9802032 C89.9581833,31.2569146 90.0403933,30.4920692 90.2915167,29.8266919 C90.88065,28.273307 92.3181167,26.4562378 94.6131833,26.4562378 C97.48225,26.4562378 98.82485,28.8950162 98.82485,32.4146054 L98.82485,47.4085514 L105.92785,47.4085514 L105.92785,31.7932649 C105.92785,31.1028195 106.021993,30.2711816 106.224077,29.6606995 C106.808043,27.893733 108.35771,26.4559697 110.491077,26.4559697 C113.399743,26.4559697 114.795743,28.85232 114.795743,32.9937859 L114.795743,47.4086184 L121.903743,47.4088195 L121.903743,31.9139805 C121.903743,23.7423805 117.776743,20.5069859 113.118077,20.5069859 C111.054877,20.5069859 109.42641,21.0271157 107.954077,21.9359016 C106.716477,22.6994065 105.608677,23.7842054 104.640277,25.2126184 L104.53546,25.2126184 C103.408793,22.3773751 100.76546,20.5069859 97.3221267,20.5069859 L97.3233333,20.5068519 Z M136.37,20.5068519 C131.975333,20.5068519 128.486667,21.7477232 126.583,22.8527978 L127.976867,27.6448951 C129.715867,26.5415632 132.4892,25.6281859 135.1122,25.6281859 C139.4542,25.6169589 140.1662,28.0982995 140.1662,29.6896886 L140.1662,30.0660454 C130.699867,30.0517586 124.718867,33.3456108 124.718867,40.0597751 C124.718867,44.1591481 127.764767,48.0008022 133.0612,48.0008022 C136.317267,48.0008022 139.043533,46.6941438 140.673867,44.6005211 L140.834677,44.6005211 C140.834677,44.6005211 141.916077,49.1472995 147.875677,47.4085849 C147.562177,45.5162108 147.46161,43.4985632 147.46161,41.0684984 L147.46161,31.7135362 C147.46161,25.751147 144.928843,20.5069524 136.369943,20.5069524 L136.37,20.5068519 Z M165.898667,20.5068519 C163.1758,20.5068519 160.078,22.2739524 158.777667,26.0620519 L158.5791,26.0620519 L158.5791,21.1003762 L152.1781,21.1003762 L152.1781,47.4084843 L159.4751,47.4084843 L159.4751,33.9370573 C159.4751,33.2103168 159.518927,32.5766768 159.633303,31.9956195 C160.17297,29.1737146 162.319803,27.3697492 165.40097,27.3697492 C166.246803,27.3697492 166.85217,27.4618577 167.507103,27.5569523 L167.507103,20.6695902 C166.957937,20.5580304 166.582337,20.5066039 165.899037,20.5066039 L165.898667,20.5068519 Z M59.0386667,34.7279762 L59.0386667,38.0099546 C59.0386667,38.4954314 58.9966367,38.9963243 58.8628867,39.4342789 C58.3154867,41.2570454 56.4373533,42.79736 54.0895533,42.79736 C52.1321533,42.79736 50.57722,41.6804551 50.57722,39.3176519 C50.57722,35.7035546 54.53422,34.7045168 59.0388867,34.7279762 L59.0386667,34.7279762 Z M140.395333,34.7279762 L140.395333,38.0099546 C140.395333,38.4954314 140.352427,38.9963243 140.219553,39.4342789 C139.672153,41.2570454 137.794687,42.79736 135.446887,42.79736 C133.489053,42.79736 131.933887,41.6804551 131.933887,39.3176519 C131.933887,35.7035546 135.890887,34.7045168 140.395553,34.7279762 L140.395333,34.7279762 Z" transform="translate(0.750000, 0.888108) translate(91.785495, 30.194050) scale(-1, 1) rotate(-180.000000) translate(-91.785495, -30.194050)"/><path fill="#FFC220" d="M221.813333,0.317875676 C219.529933,0.317875676 217.715,1.59990162 217.715,3.16062595 L219.101733,18.9478368 C219.254817,19.8989838 220.413667,20.6326616 221.814633,20.6326616 C223.218367,20.6308184 224.373167,19.8977773 224.529467,18.9478368 L225.9228,3.16062595 C225.9228,1.60003568 224.1028,0.31800973 221.816133,0.31800973 L221.813333,0.317875676 Z M199.215,12.981627 C198.029567,13.0099057 196.682933,13.9122638 195.826333,15.4054584 C194.680733,17.3937816 194.883733,19.6157611 196.224133,20.3952854 L210.514467,27.0862584 C211.4072,27.4200932 212.619667,26.7826863 213.321767,25.5657168 C213.321867,25.5655482 213.32167,25.5652141 213.321767,25.5650465 C214.027133,24.3420714 213.972533,22.9669784 213.22997,22.3570324 L200.323303,13.2554324 C199.988103,13.0602363 199.611037,12.9724008 199.21587,12.9818248 L199.215,12.981627 Z M244.411667,12.981627 C244.0166,12.9721997 243.6401,13.0600386 243.305533,13.2552347 L230.3972,22.3568347 C229.659033,22.9667471 229.6043,24.3419071 230.306057,25.5648488 L230.306723,25.565519 C231.011423,26.7824952 232.219957,27.4198888 233.112723,27.0860606 L247.40939,20.3954228 C248.755357,19.6158985 248.948257,17.3940196 247.810423,15.4055958 C246.949957,13.9123677 245.60109,13.0100498 244.415757,12.9817644 L244.411667,12.981627 Z M211.048333,33.8106108 C210.863463,33.8080973 210.684233,33.8368117 210.516433,33.9002863 L196.2261,40.583216 C194.885733,41.3661587 194.682733,43.588976 195.8283,45.5794106 C196.970433,47.5638128 198.9836,48.5072182 200.3243,47.7290009 L213.231967,38.6344387 C213.974633,38.0170528 214.029433,36.6423284 213.323763,35.4205598 L213.32963,35.4232409 C212.759097,34.4280571 211.849497,33.8213619 211.048363,33.810403 L211.048333,33.8106108 Z M232.584667,33.8106108 C231.784467,33.8215697 230.876667,34.4282649 230.304733,35.4234486 L230.309933,35.4207676 C229.607733,36.6425362 229.6621,38.0172605 230.400427,38.6346465 L243.30876,47.7292086 C244.64696,48.5074259 246.662093,47.5640507 247.809427,45.5796184 C248.94726,43.5891168 248.75436,41.3662995 247.408393,40.5834238 L233.11606,33.9004941 C232.94827,33.8370195 232.76946,33.8082883 232.584793,33.8108186 L232.584667,33.8106108 Z M221.811333,40.3534541 C220.412733,40.3551297 219.256533,41.0856908 219.103667,42.0343578 L217.716933,57.8208984 C217.716933,59.3842368 219.531833,60.6636486 221.815267,60.6636486 C224.102933,60.6636486 225.921267,59.3842032 225.921267,57.8208984 L224.5313,42.0343578 C224.374997,41.0856908 223.2202,40.3552638 221.816467,40.3534541 L221.811267,40.3534541 L221.811333,40.3534541 Z" transform="translate(0.750000, 0.888108) translate(221.817013, 30.490762) scale(-1, 1) rotate(-180.000000) translate(-221.817013, -30.490762)"/></g></g></g></g></g></g></svg>
\ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="250" height="61" version="1.1" viewBox="0 0 250 61"><title>Walmart_logo</title><desc>Created with Sketch.</desc><g fill="none" fill-rule="evenodd" stroke="none" stroke-width="1"><g fill-rule="nonzero" transform="translate(-447.000000, -59.000000)"><g transform="translate(83.000000, 44.000000)"><g transform="translate(364.000000, 15.000000)"><g transform="translate(125.000000, 31.000000) scale(-1, 1) rotate(-180.000000) translate(-125.000000, -31.000000)"><g><path fill="#007DC6" d="M0,12.3888735 C0,12.3888735 6.18433333,37.8675222 7.17133333,42.0030897 C8.32333333,46.8300411 10.3990333,48.6065924 16.3836667,47.4084843 L20.2453333,31.6118897 C21.2240667,27.6881276 21.8805333,24.8907546 22.5096667,20.8992951 L22.6203433,20.8992951 C23.06241,24.9299654 23.6918767,27.6998573 24.49731,31.6256303 C24.49731,31.6256303 26.0692767,38.7968519 26.8742767,42.5634357 C27.68141,46.3286789 29.9276433,48.7017708 35.78961,47.4098249 L44.9909433,12.3915546 L37.5619433,12.3915546 L34.4206767,27.5316195 C33.57611,31.9386465 32.80971,35.38216 32.2188433,39.4138357 L32.1140267,39.4138357 C31.5770267,35.4223762 30.8940267,32.1152627 30.03536,27.8215114 L26.7645267,12.3915546 L19.0241933,12.3915546 L15.5255267,27.4327546 C14.5343267,32.0033276 13.60726,35.6941708 13.0177267,39.5891114 L12.9109567,39.5891114 C12.3072233,35.9210573 11.50309,31.2824519 10.6323233,26.8579978 C10.6323233,26.8579978 8.55369,16.0998249 7.82439,12.3915546 L0.000723333333,12.39256 L0,12.3888735 Z M70.82,12.3888735 L70.82,47.4071438 L77.893,47.4071438 L77.893,39.9711654 L77.893,12.3871978 L70.82,12.3871978 L70.82,12.3888735 Z M170.436667,12.3888735 L170.436667,38.2224303 C170.436667,41.7842465 171.1034,44.2796627 172.529767,45.8041924 C173.775933,47.1375276 175.828567,48.0009027 178.2881,48.0009027 C180.379267,48.0009027 182.436767,47.6021589 183.406433,47.2390065 L183.31529,41.6817957 C182.593757,41.8603389 181.76369,42.0031869 180.628423,42.0031869 C178.219057,42.0031869 177.41099,40.4517123 177.41099,37.2536518 L177.41099,27.3698464 L183.57099,27.3698464 L183.57099,20.6698248 L177.41099,20.6698248 L177.41099,12.3889707 L170.436323,12.3888735 L170.436667,12.3888735 Z M55.0133333,20.5068519 C50.6176667,20.5068519 47.1283333,21.7477232 45.2263333,22.8527978 L46.6182667,27.6448951 C48.3589667,26.5415632 51.1306,25.6281859 53.7549333,25.6281859 C58.0999333,25.6169589 58.8102667,28.0982995 58.8102667,29.6896886 L58.8102667,30.0660454 C49.3426,30.0517586 43.3622667,33.3456108 43.3622667,40.0597751 C43.3622667,44.1591481 46.4066,48.0008022 51.7002667,48.0008022 C54.9589333,48.0008022 57.6842667,46.6941438 59.3176,44.6005211 L59.4777567,44.6005211 C59.4777567,44.6005211 60.5593567,49.1472995 66.51809,47.4085849 C66.20505,45.5162108 66.10339,43.4985632 66.10339,41.0684984 L66.10339,31.7135362 C66.10339,25.751147 63.57129,20.5069524 55.01339,20.5069524 L55.0133333,20.5068519 Z M97.3233333,20.5068519 C92.8973333,20.5068519 90.9083333,22.7619762 89.7023333,24.6752627 L89.5975167,24.6752627 L89.5975167,21.1007114 L82.8475167,21.1007114 L82.8475167,47.4088195 L89.9581833,47.4088195 L89.9581833,31.9802032 C89.9581833,31.2569146 90.0403933,30.4920692 90.2915167,29.8266919 C90.88065,28.273307 92.3181167,26.4562378 94.6131833,26.4562378 C97.48225,26.4562378 98.82485,28.8950162 98.82485,32.4146054 L98.82485,47.4085514 L105.92785,47.4085514 L105.92785,31.7932649 C105.92785,31.1028195 106.021993,30.2711816 106.224077,29.6606995 C106.808043,27.893733 108.35771,26.4559697 110.491077,26.4559697 C113.399743,26.4559697 114.795743,28.85232 114.795743,32.9937859 L114.795743,47.4086184 L121.903743,47.4088195 L121.903743,31.9139805 C121.903743,23.7423805 117.776743,20.5069859 113.118077,20.5069859 C111.054877,20.5069859 109.42641,21.0271157 107.954077,21.9359016 C106.716477,22.6994065 105.608677,23.7842054 104.640277,25.2126184 L104.53546,25.2126184 C103.408793,22.3773751 100.76546,20.5069859 97.3221267,20.5069859 L97.3233333,20.5068519 Z M136.37,20.5068519 C131.975333,20.5068519 128.486667,21.7477232 126.583,22.8527978 L127.976867,27.6448951 C129.715867,26.5415632 132.4892,25.6281859 135.1122,25.6281859 C139.4542,25.6169589 140.1662,28.0982995 140.1662,29.6896886 L140.1662,30.0660454 C130.699867,30.0517586 124.718867,33.3456108 124.718867,40.0597751 C124.718867,44.1591481 127.764767,48.0008022 133.0612,48.0008022 C136.317267,48.0008022 139.043533,46.6941438 140.673867,44.6005211 L140.834677,44.6005211 C140.834677,44.6005211 141.916077,49.1472995 147.875677,47.4085849 C147.562177,45.5162108 147.46161,43.4985632 147.46161,41.0684984 L147.46161,31.7135362 C147.46161,25.751147 144.928843,20.5069524 136.369943,20.5069524 L136.37,20.5068519 Z M165.898667,20.5068519 C163.1758,20.5068519 160.078,22.2739524 158.777667,26.0620519 L158.5791,26.0620519 L158.5791,21.1003762 L152.1781,21.1003762 L152.1781,47.4084843 L159.4751,47.4084843 L159.4751,33.9370573 C159.4751,33.2103168 159.518927,32.5766768 159.633303,31.9956195 C160.17297,29.1737146 162.319803,27.3697492 165.40097,27.3697492 C166.246803,27.3697492 166.85217,27.4618577 167.507103,27.5569523 L167.507103,20.6695902 C166.957937,20.5580304 166.582337,20.5066039 165.899037,20.5066039 L165.898667,20.5068519 Z M59.0386667,34.7279762 L59.0386667,38.0099546 C59.0386667,38.4954314 58.9966367,38.9963243 58.8628867,39.4342789 C58.3154867,41.2570454 56.4373533,42.79736 54.0895533,42.79736 C52.1321533,42.79736 50.57722,41.6804551 50.57722,39.3176519 C50.57722,35.7035546 54.53422,34.7045168 59.0388867,34.7279762 L59.0386667,34.7279762 Z M140.395333,34.7279762 L140.395333,38.0099546 C140.395333,38.4954314 140.352427,38.9963243 140.219553,39.4342789 C139.672153,41.2570454 137.794687,42.79736 135.446887,42.79736 C133.489053,42.79736 131.933887,41.6804551 131.933887,39.3176519 C131.933887,35.7035546 135.890887,34.7045168 140.395553,34.7279762 L140.395333,34.7279762 Z" transform="translate(0.750000, 0.888108) translate(91.785495, 30.194050) scale(-1, 1) rotate(-180.000000) translate(-91.785495, -30.194050)"/><path fill="#FFC220" d="M221.813333,0.317875676 C219.529933,0.317875676 217.715,1.59990162 217.715,3.16062595 L219.101733,18.9478368 C219.254817,19.8989838 220.413667,20.6326616 221.814633,20.6326616 C223.218367,20.6308184 224.373167,19.8977773 224.529467,18.9478368 L225.9228,3.16062595 C225.9228,1.60003568 224.1028,0.31800973 221.816133,0.31800973 L221.813333,0.317875676 Z M199.215,12.981627 C198.029567,13.0099057 196.682933,13.9122638 195.826333,15.4054584 C194.680733,17.3937816 194.883733,19.6157611 196.224133,20.3952854 L210.514467,27.0862584 C211.4072,27.4200932 212.619667,26.7826863 213.321767,25.5657168 C213.321867,25.5655482 213.32167,25.5652141 213.321767,25.5650465 C214.027133,24.3420714 213.972533,22.9669784 213.22997,22.3570324 L200.323303,13.2554324 C199.988103,13.0602363 199.611037,12.9724008 199.21587,12.9818248 L199.215,12.981627 Z M244.411667,12.981627 C244.0166,12.9721997 243.6401,13.0600386 243.305533,13.2552347 L230.3972,22.3568347 C229.659033,22.9667471 229.6043,24.3419071 230.306057,25.5648488 L230.306723,25.565519 C231.011423,26.7824952 232.219957,27.4198888 233.112723,27.0860606 L247.40939,20.3954228 C248.755357,19.6158985 248.948257,17.3940196 247.810423,15.4055958 C246.949957,13.9123677 245.60109,13.0100498 244.415757,12.9817644 L244.411667,12.981627 Z M211.048333,33.8106108 C210.863463,33.8080973 210.684233,33.8368117 210.516433,33.9002863 L196.2261,40.583216 C194.885733,41.3661587 194.682733,43.588976 195.8283,45.5794106 C196.970433,47.5638128 198.9836,48.5072182 200.3243,47.7290009 L213.231967,38.6344387 C213.974633,38.0170528 214.029433,36.6423284 213.323763,35.4205598 L213.32963,35.4232409 C212.759097,34.4280571 211.849497,33.8213619 211.048363,33.810403 L211.048333,33.8106108 Z M232.584667,33.8106108 C231.784467,33.8215697 230.876667,34.4282649 230.304733,35.4234486 L230.309933,35.4207676 C229.607733,36.6425362 229.6621,38.0172605 230.400427,38.6346465 L243.30876,47.7292086 C244.64696,48.5074259 246.662093,47.5640507 247.809427,45.5796184 C248.94726,43.5891168 248.75436,41.3662995 247.408393,40.5834238 L233.11606,33.9004941 C232.94827,33.8370195 232.76946,33.8082883 232.584793,33.8108186 L232.584667,33.8106108 Z M221.811333,40.3534541 C220.412733,40.3551297 219.256533,41.0856908 219.103667,42.0343578 L217.716933,57.8208984 C217.716933,59.3842368 219.531833,60.6636486 221.815267,60.6636486 C224.102933,60.6636486 225.921267,59.3842032 225.921267,57.8208984 L224.5313,42.0343578 C224.374997,41.0856908 223.2202,40.3552638 221.816467,40.3534541 L221.811267,40.3534541 L221.811333,40.3534541 Z" transform="translate(0.750000, 0.888108) translate(221.817013, 30.490762) scale(-1, 1) rotate(-180.000000) translate(-221.817013, -30.490762)"/></g></g></g></g></g></g></svg>
\ No newline at end of file
diff --git a/docs/src/manifests/manifest.json b/docs/src/manifests/manifest.json
index ca3554aab..18ad4cd4e 100644
--- a/docs/src/manifests/manifest.json
+++ b/docs/src/manifests/manifest.json
@@ -435,26 +435,11 @@
           "editUrl": "/reference/setLogger.md"
         },
         {
-          "title": "hydration/Hydrate",
-          "path": "/reference/hydration/HydrateComp",
-          "editUrl": "/reference/hydration/HydrateComp.md"
-        },
-        {
-          "title": "hydration/useHydrate",
-          "path": "/reference/hydration/useHydrate",
-          "editUrl": "/reference/hydration/useHydrate.md"
-        },
-        {
-          "title": "hydration/hydrate",
-          "path": "/reference/hydration/hydrate",
-          "editUrl": "/reference/hydration/hydrate.md"
-        },
-        {
-          "title": "hydration/dehydrate",
-          "path": "/reference/hydration/dehydrate",
-          "editUrl": "/reference/hydration/dehydrate.md"
+          "title": "hydration",
+          "path": "/reference/hydration",
+          "editUrl": "/reference/hydration.md"
         }
       ]
     }
   ]
-}
+}
\ No newline at end of file
diff --git a/docs/src/pages/community/tkdodos-blog.md b/docs/src/pages/community/tkdodos-blog.md
index 2932bd140..61272175b 100644
--- a/docs/src/pages/community/tkdodos-blog.md
+++ b/docs/src/pages/community/tkdodos-blog.md
@@ -45,3 +45,7 @@ React Query maintainer [TkDodo](https://twitter.com/tkdodo) has a series of blog
 ## [#10: React Query as a State Manager](https://tkdodo.eu/blog/react-query-as-a-state-manager)
 
 > React Query doesn't fetch any data for you - it's a data synchronization tool that excels when used for server state. This article has everything you need to know to make React Query your single source of truth state manager for your async state. You'll learn how to let React Query do it's magic and why customizing `staleTime` might be all you need. [Read more...](https://tkdodo.eu/blog/react-query-as-a-state-manager)
+
+## [#11: React Query Error Handling](https://tkdodo.eu/blog/react-query-error-handling)
+
+> Handling errors is an integral part of working with asynchronous data, especially data fetching. We have to face it: Not all requests will be successful, and not all Promises will be fulfilled. This blog post describes various ways of coping with errors in React Query, such as the error property, using Error Boundaries or onError callbacks, so that you can prepare your application for the cases when "Something went wrong". [Read more...](https://tkdodo.eu/blog/react-query-error-handling)
diff --git a/docs/src/pages/guides/ssr.md b/docs/src/pages/guides/ssr.md
index 716915258..fecd4db5b 100644
--- a/docs/src/pages/guides/ssr.md
+++ b/docs/src/pages/guides/ssr.md
@@ -55,8 +55,7 @@ To support caching queries on the server and set up hydration:
 
 ```js
 // _app.jsx
-import { QueryClient, QueryClientProvider } from 'react-query'
-import { Hydrate } from 'react-query/hydration'
+import { Hydrate, QueryClient, QueryClientProvider } from 'react-query'
 
 export default function MyApp({ Component, pageProps }) {
   const [queryClient] = React.useState(() => new QueryClient())
@@ -79,8 +78,7 @@ Now you are ready to prefetch some data in your pages with either [`getStaticPro
 
 ```js
 // pages/posts.jsx
-import { QueryClient, useQuery } from 'react-query'
-import { dehydrate } from 'react-query/hydration'
+import { dehydrate, QueryClient, useQuery } from 'react-query';
 
 export async function getStaticProps() {
   const queryClient = new QueryClient()
@@ -126,8 +124,7 @@ This guide is at-best, a high level overview of how SSR with React Query should
 > SECURITY NOTE: Serializing data with `JSON.stringify` can put you at risk for XSS-vulnerabilities, [this blog post explains why and how to solve it](https://medium.com/node-security/the-most-common-xss-vulnerability-in-react-js-applications-2bdffbcc1fa0)
 
 ```js
-import { QueryClient, QueryClientProvider } from 'react-query'
-import { dehydrate, Hydrate } from 'react-query/hydration'
+import { dehydrate, Hydrate, QueryClient, QueryClientProvider } from 'react-query';
 
 function handleRequest (req, res) {
   const queryClient = new QueryClient()
@@ -162,8 +159,7 @@ function handleRequest (req, res) {
 - Render your app with the client provider and also **using the dehydrated state. This is extremely important! You must render both server and client using the same dehydrated state to ensure hydration on the client produces the exact same markup as the server.**
 
 ```js
-import { QueryClient, QueryClientProvider } from 'react-query'
-import { Hydrate } from 'react-query/hydration'
+import { Hydrate, QueryClient, QueryClientProvider } from 'react-query'
 
 const dehydratedState = window.__REACT_QUERY_STATE__
 
diff --git a/docs/src/pages/reference/hydration.md b/docs/src/pages/reference/hydration.md
new file mode 100644
index 000000000..ff5026db1
--- /dev/null
+++ b/docs/src/pages/reference/hydration.md
@@ -0,0 +1,121 @@
+---
+id: hydration
+title: hydration
+---
+
+## `dehydrate`
+
+`dehydrate` creates a frozen representation of a `cache` that can later be hydrated with `Hydrate`, `useHydrate`, or `hydrate`. This is useful for passing prefetched queries from server to client or persisting queries to localstorage or other persistent locations. It only includes currently successful queries by default.
+
+```js
+import { dehydrate } from 'react-query'
+
+const dehydratedState = dehydrate(queryClient, {
+  shouldDehydrateQuery,
+})
+```
+
+> Note: Since version `3.22.0` hydration utilities moved into to core. If you using lower version your should import `dehydrate` from `react-query/hydration`
+
+**Options**
+
+- `client: QueryClient`
+  - **Required**
+  - The `queryClient` that should be dehydrated
+- `options: DehydrateOptions`
+  - Optional
+  - `dehydrateMutations: boolean`
+    - Optional
+    - Whether or not to dehydrate mutations.
+  - `dehydrateQueries: boolean`
+    - Optional
+    - Whether or not to dehydrate queries.
+  - `shouldDehydrateMutation: (mutation: Mutation) => boolean`
+    - Optional
+    - This function is called for each mutation in the cache
+    - Return `true` to include this mutation in dehydration, or `false` otherwise
+    - The default version only includes paused mutations
+  - `shouldDehydrateQuery: (query: Query) => boolean`
+    - Optional
+    - This function is called for each query in the cache
+    - Return `true` to include this query in dehydration, or `false` otherwise
+    - The default version only includes successful queries, do `shouldDehydrateQuery: () => true` to include all queries
+
+**Returns**
+
+- `dehydratedState: DehydratedState`
+  - This includes everything that is needed to hydrate the `queryClient` at a later point
+  - You **should not** rely on the exact format of this response, it is not part of the public API and can change at any time
+  - This result is not in serialized form, you need to do that yourself if desired
+
+## `hydrate`
+
+`hydrate` adds a previously dehydrated state into a `cache`. If the queries included in dehydration already exist in the queryCache, `hydrate` does not overwrite them.
+
+```js
+import { hydrate } from 'react-query'
+
+hydrate(queryClient, dehydratedState, options)
+```
+
+> Note: Since version `3.22.0` hydration utilities moved into to core. If you using lower version your should import `hydrate` from `react-query/hydration`
+
+**Options**
+
+- `client: QueryClient`
+  - **Required**
+  - The `queryClient` to hydrate the state into
+- `dehydratedState: DehydratedState`
+  - **Required**
+  - The state to hydrate into the client
+- `options: HydrateOptions`
+  - Optional
+  - `defaultOptions: DefaultOptions`
+    - Optional
+    - `mutations: MutationOptions` The default mutation options to use for the hydrated mutations.
+    - `queries: QueryOptions` The default query options to use for the hydrated queries.
+
+## `useHydrate`
+
+`useHydrate` adds a previously dehydrated state into the `queryClient` that would be returned by `useQueryClient()`. If the client already contains data, the new queries will be intelligently merged based on update timestamp.
+
+```jsx
+import { useHydrate } from 'react-query'
+
+useHydrate(dehydratedState, options)
+```
+
+> Note: Since version `3.22.0` hydration utilities moved into to core. If you using lower version your should import `useHydrate` from `react-query/hydration`
+
+**Options**
+
+- `dehydratedState: DehydratedState`
+  - **Required**
+  - The state to hydrate
+- `options: HydrateOptions`
+  - Optional
+  - `defaultOptions: QueryOptions`
+    - The default query options to use for the hydrated queries.
+
+## `Hydrate`
+
+`Hydrate` wraps `useHydrate` into component. Can be useful when you need hydrate in class component or need hydrate on same level where `QueryClientProvider` rendered.
+
+```js
+import { Hydrate } from 'react-query'
+
+function App() {
+  return <Hydrate state={dehydratedState}>...</Hydrate>
+}
+```
+
+> Note: Since version `3.22.0` hydration utilities moved into to core. If you using lower version your should import `Hydrate` from `react-query/hydration`
+
+**Options**
+
+- `state: DehydratedState`
+  - The state to hydrate
+- `options: HydrateOptions`
+  - Optional
+  - `defaultOptions: QueryOptions`
+    - The default query options to use for the hydrated queries.
\ No newline at end of file
diff --git a/docs/src/pages/reference/hydration/HydrateComp.md b/docs/src/pages/reference/hydration/HydrateComp.md
deleted file mode 100644
index eb382b5b3..000000000
--- a/docs/src/pages/reference/hydration/HydrateComp.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-id: hydration/HydrateComp
-title: hydration/Hydrate
----
-
-`hydration/Hydrate` adds a previously dehydrated state into the `queryClient` that would be returned by `useQueryClient()`. If the client already contains data, the new queries will be intelligently merged based on update timestamp.
-
-```js
-import { Hydrate } from 'react-query/hydration'
-
-function App() {
-  return <Hydrate state={dehydratedState}>...</Hydrate>
-}
-```
-
-**Options**
-
-- `state: DehydratedState`
-  - The state to hydrate
-- `options: HydrateOptions`
-  - Optional
-  - `defaultOptions: QueryOptions`
-    - The default query options to use for the hydrated queries.
diff --git a/docs/src/pages/reference/hydration/dehydrate.md b/docs/src/pages/reference/hydration/dehydrate.md
deleted file mode 100644
index a77c86207..000000000
--- a/docs/src/pages/reference/hydration/dehydrate.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-id: hydration/dehydrate
-title: hydration/dehydrate
----
-
-`dehydrate` creates a frozen representation of a `cache` that can later be hydrated with `Hydrate`, `useHydrate`, or `hydrate`. This is useful for passing prefetched queries from server to client or persisting queries to localstorage or other persistent locations. It only includes currently successful queries by default.
-
-```js
-import { dehydrate } from 'react-query/hydration'
-
-const dehydratedState = dehydrate(queryClient, {
-  shouldDehydrateQuery,
-})
-```
-
-**Options**
-
-- `client: QueryClient`
-  - **Required**
-  - The `queryClient` that should be dehydrated
-- `options: DehydrateOptions`
-  - Optional
-  - `dehydrateMutations: boolean`
-    - Optional
-    - Whether or not to dehydrate mutations.
-  - `dehydrateQueries: boolean`
-    - Optional
-    - Whether or not to dehydrate queries.
-  - `shouldDehydrateMutation: (mutation: Mutation) => boolean`
-    - Optional
-    - This function is called for each mutation in the cache
-    - Return `true` to include this mutation in dehydration, or `false` otherwise
-    - The default version only includes paused mutations
-  - `shouldDehydrateQuery: (query: Query) => boolean`
-    - Optional
-    - This function is called for each query in the cache
-    - Return `true` to include this query in dehydration, or `false` otherwise
-    - The default version only includes successful queries, do `shouldDehydrateQuery: () => true` to include all queries
-
-**Returns**
-
-- `dehydratedState: DehydratedState`
-  - This includes everything that is needed to hydrate the `queryClient` at a later point
-  - You **should not** rely on the exact format of this response, it is not part of the public API and can change at any time
-  - This result is not in serialized form, you need to do that yourself if desired
diff --git a/docs/src/pages/reference/hydration/hydrate.md b/docs/src/pages/reference/hydration/hydrate.md
deleted file mode 100644
index 373189ece..000000000
--- a/docs/src/pages/reference/hydration/hydrate.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-id: hydration/hydrate
-title: hydration/hydrate
----
-
-`hydrate` adds a previously dehydrated state into a `cache`. If the queries included in dehydration already exist in the queryCache, `hydrate` does not overwrite them.
-
-```js
-import { hydrate } from 'react-query/hydration'
-
-hydrate(queryClient, dehydratedState, options)
-```
-
-**Options**
-
-- `client: QueryClient`
-  - **Required**
-  - The `queryClient` to hydrate the state into
-- `dehydratedState: DehydratedState`
-  - **Required**
-  - The state to hydrate into the client
-- `options: HydrateOptions`
-  - Optional
-  - `defaultOptions: DefaultOptions`
-    - Optional
-    - `mutations: MutationOptions` The default mutation options to use for the hydrated mutations.
-    - `queries: QueryOptions` The default query options to use for the hydrated queries.
diff --git a/docs/src/pages/reference/hydration/useHydrate.md b/docs/src/pages/reference/hydration/useHydrate.md
deleted file mode 100644
index 995b05130..000000000
--- a/docs/src/pages/reference/hydration/useHydrate.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-id: hydration/useHydrate
-title: hydration/useHydrate
----
-
-`useHydrate` adds a previously dehydrated state into the `queryClient` that would be returned by `useQueryClient()`. If the client already contains data, the new queries will be intelligently merged based on update timestamp.
-
-```jsx
-import { useHydrate } from 'react-query/hydration'
-
-useHydrate(dehydratedState, options)
-```
-
-**Options**
-
-- `dehydratedState: DehydratedState`
-  - **Required**
-  - The state to hydrate
-- `options: HydrateOptions`
-  - Optional
-  - `defaultOptions: QueryOptions`
-    - The default query options to use for the hydrated queries.
diff --git a/docs/src/pages/reference/useMutation.md b/docs/src/pages/reference/useMutation.md
index b1c9e9a74..9af167d1b 100644
--- a/docs/src/pages/reference/useMutation.md
+++ b/docs/src/pages/reference/useMutation.md
@@ -66,9 +66,11 @@ mutate(variables, {
   - This function receives a `retryAttempt` integer and the actual Error and returns the delay to apply before the next attempt in milliseconds.
   - A function like `attempt => Math.min(attempt > 1 ? 2 ** attempt * 1000 : 1000, 30 * 1000)` applies exponential backoff.
   - A function like `attempt => attempt * 1000` applies linear backoff.
-- `useErrorBoundary`
-  - Defaults to the global query config's `useErrorBoundary` value, which is `false`
-  - Set this to true if you want mutation errors to be thrown in the render phase and propagate to the nearest error boundary
+- `useErrorBoundary: undefined | boolean | (error: TError) => boolean`
+  - Defaults to the global query config's `useErrorBoundary` value, which is `undefined`
+  - Set this to `true` if you want mutation errors to be thrown in the render phase and propagate to the nearest error boundary
+  - Set this to `false` to disable the behaviour of throwing errors to the error boundary.
+  - If set to a function, it will be passed the error and should return a boolean indicating whether to show the error in an error boundary (`true`) or return the error as state (`false`)
 
 **Returns**
 
diff --git a/docs/src/pages/reference/useQuery.md b/docs/src/pages/reference/useQuery.md
index d62f8bd73..89d1e06a8 100644
--- a/docs/src/pages/reference/useQuery.md
+++ b/docs/src/pages/reference/useQuery.md
@@ -170,9 +170,11 @@ const result = useQuery({
   - Optional
   - Defaults to `true`
   - If set to `false`, structural sharing between query results will be disabled.
-- `useErrorBoundary: boolean`
-  - Defaults to the global query config's `useErrorBoundary` value, which is false
-  - Set this to true if you want errors to be thrown in the render phase and propagated to the nearest error boundary
+- `useErrorBoundary: undefined | boolean | (error: TError) => boolean`
+  - Defaults to the global query config's `useErrorBoundary` value, which is `undefined`
+  - Set this to `true` if you want errors to be thrown in the render phase and propagate to the nearest error boundary
+  - Set this to `false` to disable `suspense`'s default behaviour of throwing errors to the error boundary.
+  - If set to a function, it will be passed the error and should return a boolean indicating whether to show the error in an error boundary (`true`) or return the error as state (`false`)
 
 **Returns**
 
diff --git a/examples/nextjs/pages/_app.js b/examples/nextjs/pages/_app.js
index 6f9c832c4..6d5893081 100644
--- a/examples/nextjs/pages/_app.js
+++ b/examples/nextjs/pages/_app.js
@@ -1,6 +1,5 @@
 import React from 'react'
-import { QueryClient, QueryClientProvider } from 'react-query'
-import { Hydrate } from 'react-query/hydration'
+import { Hydrate, QueryClient, QueryClientProvider } from 'react-query'
 import { ReactQueryDevtools } from 'react-query/devtools'
 
 export default function MyApp({ Component, pageProps }) {
diff --git a/examples/nextjs/pages/index.js b/examples/nextjs/pages/index.js
index 9d5c3cd88..0879aa398 100644
--- a/examples/nextjs/pages/index.js
+++ b/examples/nextjs/pages/index.js
@@ -1,6 +1,5 @@
 import React from 'react'
-import { QueryClient } from 'react-query'
-import { dehydrate } from 'react-query/hydration'
+import { dehydrate, QueryClient } from 'react-query'
 import { Layout, Header, InfoBox, PostList } from '../components'
 import { fetchPosts } from '../hooks'
 
diff --git a/src/hydration/hydration.ts b/src/core/hydration.ts
similarity index 95%
rename from src/hydration/hydration.ts
rename to src/core/hydration.ts
index b0aa9bc9d..d10e1c83f 100644
--- a/src/hydration/hydration.ts
+++ b/src/core/hydration.ts
@@ -1,12 +1,12 @@
-import type { QueryClient } from '../core/queryClient'
-import type { Query, QueryState } from '../core/query'
+import type { QueryClient } from './queryClient'
+import type { Query, QueryState } from './query'
 import type {
   MutationKey,
   MutationOptions,
   QueryKey,
   QueryOptions,
-} from '../core/types'
-import type { Mutation, MutationState } from '../core/mutation'
+} from './types'
+import type { Mutation, MutationState } from './mutation'
 
 // TYPES
 
diff --git a/src/core/index.ts b/src/core/index.ts
index c3ecd0616..c09b2614d 100644
--- a/src/core/index.ts
+++ b/src/core/index.ts
@@ -12,8 +12,16 @@ export { focusManager } from './focusManager'
 export { onlineManager } from './onlineManager'
 export { hashQueryKey, isError } from './utils'
 export { isCancelledError } from './retryer'
+export { dehydrate, hydrate } from './hydration'
 
 // Types
 export * from './types'
 export type { Query } from './query'
 export type { Logger } from './logger'
+export type {
+  DehydrateOptions,
+  DehydratedState,
+  HydrateOptions,
+  ShouldDehydrateMutationFunction,
+  ShouldDehydrateQueryFunction,
+} from './hydration'
diff --git a/src/core/mutationObserver.ts b/src/core/mutationObserver.ts
index 836de9705..fca83665c 100644
--- a/src/core/mutationObserver.ts
+++ b/src/core/mutationObserver.ts
@@ -4,6 +4,7 @@ import type { QueryClient } from './queryClient'
 import { Subscribable } from './subscribable'
 import type {
   MutateOptions,
+  MutationObserverBaseResult,
   MutationObserverResult,
   MutationObserverOptions,
 } from './types'
@@ -129,7 +130,12 @@ export class MutationObserver<
       ? this.currentMutation.state
       : getDefaultState<TData, TError, TVariables, TContext>()
 
-    this.currentResult = {
+    const result: MutationObserverBaseResult<
+      TData,
+      TError,
+      TVariables,
+      TContext
+    > = {
       ...state,
       isLoading: state.status === 'loading',
       isSuccess: state.status === 'success',
@@ -138,6 +144,13 @@ export class MutationObserver<
       mutate: this.mutate,
       reset: this.reset,
     }
+
+    this.currentResult = result as MutationObserverResult<
+      TData,
+      TError,
+      TVariables,
+      TContext
+    >
   }
 
   private notify(options: NotifyOptions) {
diff --git a/src/core/queryClient.ts b/src/core/queryClient.ts
index 2213f4521..e61e38922 100644
--- a/src/core/queryClient.ts
+++ b/src/core/queryClient.ts
@@ -184,13 +184,13 @@ export class QueryClient {
     })
   }
 
-  resetQueries(
-    filters?: ResetQueryFilters,
+  resetQueries<TPageData = unknown>(
+    filters?: ResetQueryFilters<TPageData>,
     options?: ResetOptions
   ): Promise<void>
-  resetQueries(
+  resetQueries<TPageData = unknown>(
     queryKey?: QueryKey,
-    filters?: ResetQueryFilters,
+    filters?: ResetQueryFilters<TPageData>,
     options?: ResetOptions
   ): Promise<void>
   resetQueries(
@@ -238,13 +238,13 @@ export class QueryClient {
     return Promise.all(promises).then(noop).catch(noop)
   }
 
-  invalidateQueries(
-    filters?: InvalidateQueryFilters,
+  invalidateQueries<TPageData = unknown>(
+    filters?: InvalidateQueryFilters<TPageData>,
     options?: InvalidateOptions
   ): Promise<void>
-  invalidateQueries(
+  invalidateQueries<TPageData = unknown>(
     queryKey?: QueryKey,
-    filters?: InvalidateQueryFilters,
+    filters?: InvalidateQueryFilters<TPageData>,
     options?: InvalidateOptions
   ): Promise<void>
   invalidateQueries(
@@ -270,13 +270,13 @@ export class QueryClient {
     })
   }
 
-  refetchQueries(
-    filters?: RefetchQueryFilters,
+  refetchQueries<TPageData = unknown>(
+    filters?: RefetchQueryFilters<TPageData>,
     options?: RefetchOptions
   ): Promise<void>
-  refetchQueries(
+  refetchQueries<TPageData = unknown>(
     queryKey?: QueryKey,
-    filters?: RefetchQueryFilters,
+    filters?: RefetchQueryFilters<TPageData>,
     options?: RefetchOptions
   ): Promise<void>
   refetchQueries(
diff --git a/src/core/queryObserver.ts b/src/core/queryObserver.ts
index 3827b2cea..6415c3074 100644
--- a/src/core/queryObserver.ts
+++ b/src/core/queryObserver.ts
@@ -275,8 +275,8 @@ export class QueryObserver<
     this.client.getQueryCache().remove(this.currentQuery)
   }
 
-  refetch(
-    options?: RefetchOptions & RefetchQueryFilters<TData>
+  refetch<TPageData>(
+    options?: RefetchOptions & RefetchQueryFilters<TPageData>
   ): Promise<QueryObserverResult<TData, TError>> {
     return this.fetch({
       ...options,
diff --git a/src/core/types.ts b/src/core/types.ts
index 106ca2787..0f7603fe7 100644
--- a/src/core/types.ts
+++ b/src/core/types.ts
@@ -163,9 +163,12 @@ export interface QueryObserverOptions<
   onSettled?: (data: TData | undefined, error: TError | null) => void
   /**
    * Whether errors should be thrown instead of setting the `error` property.
+   * If set to `true` or `suspense` is `true`, all errors will be thrown to the error boundary.
+   * If set to `false` and `suspense` is `false`, errors are returned as state.
+   * If set to a function, it will be passed the error and should return a boolean indicating whether to show the error in an error boundary (`true`) or return the error as state (`false`).
    * Defaults to `false`.
    */
-  useErrorBoundary?: boolean
+  useErrorBoundary?: boolean | ((error: TError) => boolean)
   /**
    * This option can be used to transform or select a part of the data returned by the query function.
    */
@@ -236,11 +239,11 @@ export interface ResultOptions {
   throwOnError?: boolean
 }
 
-export interface RefetchPageFilters<TQueryFnData = unknown> {
+export interface RefetchPageFilters<TPageData = unknown> {
   refetchPage?: (
-    lastPage: TQueryFnData,
+    lastPage: TPageData,
     index: number,
-    allPages: TQueryFnData[]
+    allPages: TPageData[]
   ) => boolean
 }
 
@@ -248,20 +251,20 @@ export interface RefetchOptions extends ResultOptions {
   cancelRefetch?: boolean
 }
 
-export interface InvalidateQueryFilters<TQueryFnData = unknown>
+export interface InvalidateQueryFilters<TPageData = unknown>
   extends QueryFilters,
-    RefetchPageFilters<TQueryFnData> {
+    RefetchPageFilters<TPageData> {
   refetchActive?: boolean
   refetchInactive?: boolean
 }
 
-export interface RefetchQueryFilters<TQueryFnData = unknown>
+export interface RefetchQueryFilters<TPageData = unknown>
   extends QueryFilters,
-    RefetchPageFilters<TQueryFnData> {}
+    RefetchPageFilters<TPageData> {}
 
-export interface ResetQueryFilters<TQueryFnData = unknown>
+export interface ResetQueryFilters<TPageData = unknown>
   extends QueryFilters,
-    RefetchPageFilters<TQueryFnData> {}
+    RefetchPageFilters<TPageData> {}
 
 export interface InvalidateOptions {
   throwOnError?: boolean
@@ -299,8 +302,8 @@ export interface QueryObserverBaseResult<TData = unknown, TError = unknown> {
   isRefetchError: boolean
   isStale: boolean
   isSuccess: boolean
-  refetch: (
-    options?: RefetchOptions & RefetchQueryFilters<TData>
+  refetch: <TPageData>(
+    options?: RefetchOptions & RefetchQueryFilters<TPageData>
   ) => Promise<QueryObserverResult<TData, TError>>
   remove: () => void
   status: QueryStatus
@@ -527,7 +530,7 @@ export interface MutationObserverOptions<
   TVariables = void,
   TContext = unknown
 > extends MutationOptions<TData, TError, TVariables, TContext> {
-  useErrorBoundary?: boolean
+  useErrorBoundary?: boolean | ((error: TError) => boolean)
 }
 
 export interface MutateOptions<
@@ -564,7 +567,7 @@ export type MutateFunction<
   options?: MutateOptions<TData, TError, TVariables, TContext>
 ) => Promise<TData>
 
-export interface MutationObserverResult<
+export interface MutationObserverBaseResult<
   TData = unknown,
   TError = unknown,
   TVariables = void,
@@ -578,6 +581,77 @@ export interface MutationObserverResult<
   reset: () => void
 }
 
+export interface MutationObserverIdleResult<
+  TData = unknown,
+  TError = unknown,
+  TVariables = void,
+  TContext = unknown
+> extends MutationObserverBaseResult<TData, TError, TVariables, TContext> {
+  data: undefined
+  error: null
+  isError: false
+  isIdle: true
+  isLoading: false
+  isSuccess: false
+  status: 'idle'
+}
+
+export interface MutationObserverLoadingResult<
+  TData = unknown,
+  TError = unknown,
+  TVariables = void,
+  TContext = unknown
+> extends MutationObserverBaseResult<TData, TError, TVariables, TContext> {
+  data: undefined
+  error: null
+  isError: false
+  isIdle: false
+  isLoading: true
+  isSuccess: false
+  status: 'loading'
+}
+
+export interface MutationObserverErrorResult<
+  TData = unknown,
+  TError = unknown,
+  TVariables = void,
+  TContext = unknown
+> extends MutationObserverBaseResult<TData, TError, TVariables, TContext> {
+  data: undefined
+  error: TError
+  isError: true
+  isIdle: false
+  isLoading: false
+  isSuccess: false
+  status: 'error'
+}
+
+export interface MutationObserverSuccessResult<
+  TData = unknown,
+  TError = unknown,
+  TVariables = void,
+  TContext = unknown
+> extends MutationObserverBaseResult<TData, TError, TVariables, TContext> {
+  data: TData
+  error: null
+  isError: false
+  isIdle: false
+  isLoading: false
+  isSuccess: true
+  status: 'success'
+}
+
+export type MutationObserverResult<
+  TData = unknown,
+  TError = unknown,
+  TVariables = void,
+  TContext = unknown
+> =
+  | MutationObserverIdleResult<TData, TError, TVariables, TContext>
+  | MutationObserverLoadingResult<TData, TError, TVariables, TContext>
+  | MutationObserverErrorResult<TData, TError, TVariables, TContext>
+  | MutationObserverSuccessResult<TData, TError, TVariables, TContext>
+
 export interface DefaultOptions<TError = unknown> {
   queries?: QueryObserverOptions<unknown, TError>
   mutations?: MutationObserverOptions<unknown, TError, unknown, unknown>
diff --git a/src/devtools/Logo.tsx b/src/devtools/Logo.tsx
index 209cb75f8..7c175b985 100644
--- a/src/devtools/Logo.tsx
+++ b/src/devtools/Logo.tsx
@@ -11,29 +11,20 @@ export default function Logo(props: any) {
       version="1.1"
       {...props}
     >
-      <g
-        id="Page-1"
-        stroke="none"
-        strokeWidth="1"
-        fill="none"
-        fillRule="evenodd"
-      >
-        <g id="og-white" transform="translate(-33.000000, 0.000000)">
+      <g stroke="none" strokeWidth="1" fill="none" fillRule="evenodd">
+        <g transform="translate(-33.000000, 0.000000)">
           <path
             d="M72.7239712,61.3436237 C69.631224,46.362877 68.9675112,34.8727722 70.9666331,26.5293551 C72.1555965,21.5671678 74.3293088,17.5190846 77.6346064,14.5984631 C81.1241394,11.5150478 85.5360327,10.0020122 90.493257,10.0020122 C98.6712013,10.0020122 107.26826,13.7273214 116.455725,20.8044264 C120.20312,23.6910458 124.092437,27.170411 128.131651,31.2444746 C128.45314,30.8310265 128.816542,30.4410453 129.22143,30.0806152 C140.64098,19.9149716 150.255245,13.5989272 158.478408,11.1636507 C163.367899,9.715636 167.958526,9.57768202 172.138936,10.983031 C176.551631,12.4664684 180.06766,15.5329489 182.548314,19.8281091 C186.642288,26.9166735 187.721918,36.2310983 186.195595,47.7320243 C185.573451,52.4199112 184.50985,57.5263831 183.007094,63.0593153 C183.574045,63.1277086 184.142416,63.2532808 184.705041,63.4395297 C199.193932,68.2358678 209.453582,73.3937462 215.665021,79.2882839 C219.360669,82.7953831 221.773972,86.6998434 222.646365,91.0218204 C223.567176,95.5836746 222.669313,100.159332 220.191548,104.451297 C216.105211,111.529614 208.591643,117.11221 197.887587,121.534031 C193.589552,123.309539 188.726579,124.917559 183.293259,126.363748 C183.541176,126.92292 183.733521,127.516759 183.862138,128.139758 C186.954886,143.120505 187.618598,154.61061 185.619477,162.954027 C184.430513,167.916214 182.256801,171.964297 178.951503,174.884919 C175.46197,177.968334 171.050077,179.48137 166.092853,179.48137 C157.914908,179.48137 149.31785,175.756061 140.130385,168.678956 C136.343104,165.761613 132.410866,162.238839 128.325434,158.108619 C127.905075,158.765474 127.388968,159.376011 126.77857,159.919385 C115.35902,170.085028 105.744755,176.401073 97.5215915,178.836349 C92.6321009,180.284364 88.0414736,180.422318 83.8610636,179.016969 C79.4483686,177.533532 75.9323404,174.467051 73.4516862,170.171891 C69.3577116,163.083327 68.2780823,153.768902 69.8044053,142.267976 C70.449038,137.410634 71.56762,132.103898 73.1575891,126.339009 C72.5361041,126.276104 71.9120754,126.144816 71.2949591,125.940529 C56.8060684,121.144191 46.5464184,115.986312 40.3349789,110.091775 C36.6393312,106.584675 34.2260275,102.680215 33.3536352,98.3582381 C32.4328237,93.7963839 33.3306866,89.2207269 35.8084524,84.9287618 C39.8947886,77.8504443 47.4083565,72.2678481 58.1124133,67.8460273 C62.5385143,66.0176154 67.5637208,64.366822 73.1939394,62.8874674 C72.9933393,62.3969171 72.8349374,61.8811235 72.7239712,61.3436237 Z"
-            id="Path"
             fill="#002C4B"
             fillRule="nonzero"
             transform="translate(128.000000, 95.000000) scale(-1, 1) translate(-128.000000, -95.000000) "
           ></path>
           <path
             d="M113.396882,64 L142.608177,64 C144.399254,64 146.053521,64.958025 146.944933,66.5115174 L161.577138,92.0115174 C162.461464,93.5526583 162.461464,95.4473417 161.577138,96.9884826 L146.944933,122.488483 C146.053521,124.041975 144.399254,125 142.608177,125 L113.396882,125 C111.605806,125 109.951539,124.041975 109.060126,122.488483 L94.4279211,96.9884826 C93.543596,95.4473417 93.543596,93.5526583 94.4279211,92.0115174 L109.060126,66.5115174 C109.951539,64.958025 111.605806,64 113.396882,64 Z M138.987827,70.2765273 C140.779849,70.2765273 142.434839,71.2355558 143.325899,72.7903404 L154.343038,92.0138131 C155.225607,93.5537825 155.225607,95.4462175 154.343038,96.9861869 L143.325899,116.20966 C142.434839,117.764444 140.779849,118.723473 138.987827,118.723473 L117.017233,118.723473 C115.225211,118.723473 113.570221,117.764444 112.67916,116.20966 L101.662022,96.9861869 C100.779452,95.4462175 100.779452,93.5537825 101.662022,92.0138131 L112.67916,72.7903404 C113.570221,71.2355558 115.225211,70.2765273 117.017233,70.2765273 L138.987827,70.2765273 Z M135.080648,77.1414791 L120.924411,77.1414791 C119.134228,77.1414791 117.480644,78.0985567 116.5889,79.6508285 L116.5889,79.6508285 L109.489217,92.0093494 C108.603232,93.5515958 108.603232,95.4484042 109.489217,96.9906506 L109.489217,96.9906506 L116.5889,109.349172 C117.480644,110.901443 119.134228,111.858521 120.924411,111.858521 L120.924411,111.858521 L135.080648,111.858521 C136.870831,111.858521 138.524416,110.901443 139.41616,109.349172 L139.41616,109.349172 L146.515843,96.9906506 C147.401828,95.4484042 147.401828,93.5515958 146.515843,92.0093494 L146.515843,92.0093494 L139.41616,79.6508285 C138.524416,78.0985567 136.870831,77.1414791 135.080648,77.1414791 L135.080648,77.1414791 Z M131.319186,83.7122186 C133.108028,83.7122186 134.760587,84.6678753 135.652827,86.2183156 L138.983552,92.0060969 C139.87203,93.5500005 139.87203,95.4499995 138.983552,96.9939031 L135.652827,102.781684 C134.760587,104.332125 133.108028,105.287781 131.319186,105.287781 L124.685874,105.287781 C122.897032,105.287781 121.244473,104.332125 120.352233,102.781684 L117.021508,96.9939031 C116.13303,95.4499995 116.13303,93.5500005 117.021508,92.0060969 L120.352233,86.2183156 C121.244473,84.6678753 122.897032,83.7122186 124.685874,83.7122186 L131.319186,83.7122186 Z M128.003794,90.1848875 C126.459294,90.1848875 125.034382,91.0072828 124.263005,92.3424437 C123.491732,93.6774232 123.491732,95.3225768 124.263005,96.6575563 C125.034382,97.9927172 126.459294,98.8151125 128.001266,98.8151125 L128.001266,98.8151125 C129.545766,98.8151125 130.970678,97.9927172 131.742055,96.6575563 C132.513327,95.3225768 132.513327,93.6774232 131.742055,92.3424437 C130.970678,91.0072828 129.545766,90.1848875 128.003794,90.1848875 L128.003794,90.1848875 Z M93,94.5009646 L100.767764,94.5009646"
-            id="Polygon-2"
             fill="#FFD94C"
           ></path>
           <path
             d="M87.8601729,108.357758 C89.1715224,107.608286 90.8360246,108.074601 91.5779424,109.399303 L91.5779424,109.399303 L92.0525843,110.24352 C95.8563392,116.982993 99.8190116,123.380176 103.940602,129.435068 C108.807881,136.585427 114.28184,143.82411 120.362479,151.151115 C121.316878,152.30114 121.184944,154.011176 120.065686,154.997937 L120.065686,154.997937 L119.454208,155.534625 C99.3465389,173.103314 86.2778188,176.612552 80.2480482,166.062341 C74.3500652,155.742717 76.4844915,136.982888 86.6513274,109.782853 C86.876818,109.179582 87.3045861,108.675291 87.8601729,108.357758 Z M173.534177,129.041504 C174.986131,128.785177 176.375496,129.742138 176.65963,131.194242 L176.65963,131.194242 L176.812815,131.986376 C181.782365,157.995459 178.283348,171 166.315764,171 C154.609745,171 139.708724,159.909007 121.612702,137.727022 C121.211349,137.235047 120.994572,136.617371 121,135.981509 C121.013158,134.480686 122.235785,133.274651 123.730918,133.287756 L123.730918,133.287756 L124.684654,133.294531 C132.305698,133.335994 139.714387,133.071591 146.910723,132.501323 C155.409039,131.82788 164.283523,130.674607 173.534177,129.041504 Z M180.408726,73.8119663 C180.932139,72.4026903 182.508386,71.6634537 183.954581,72.149012 L183.954581,72.149012 L184.742552,72.4154854 C210.583763,81.217922 220.402356,90.8916805 214.198332,101.436761 C208.129904,111.751366 190.484347,119.260339 161.26166,123.963678 C160.613529,124.067994 159.948643,123.945969 159.382735,123.618843 C158.047025,122.846729 157.602046,121.158214 158.388848,119.847438 L158.388848,119.847438 L158.889328,119.0105 C162.877183,112.31633 166.481358,105.654262 169.701854,99.0242957 C173.50501,91.1948179 177.073967,82.7907081 180.408726,73.8119663 Z M94.7383398,66.0363218 C95.3864708,65.9320063 96.0513565,66.0540315 96.6172646,66.3811573 C97.9529754,67.153271 98.3979538,68.8417862 97.6111517,70.1525615 L97.6111517,70.1525615 L97.1106718,70.9895001 C93.1228168,77.6836699 89.5186416,84.3457379 86.2981462,90.9757043 C82.49499,98.8051821 78.9260328,107.209292 75.5912744,116.188034 C75.0678608,117.59731 73.4916142,118.336546 72.045419,117.850988 L72.045419,117.850988 L71.2574475,117.584515 C45.4162372,108.782078 35.597644,99.1083195 41.8016679,88.5632391 C47.8700957,78.2486335 65.515653,70.7396611 94.7383398,66.0363218 Z M136.545792,34.4653746 C156.653461,16.8966864 169.722181,13.3874478 175.751952,23.9376587 C181.649935,34.2572826 179.515508,53.0171122 169.348673,80.2171474 C169.123182,80.8204179 168.695414,81.324709 168.139827,81.6422422 C166.828478,82.3917144 165.163975,81.9253986 164.422058,80.6006966 L164.422058,80.6006966 L163.947416,79.7564798 C160.143661,73.0170065 156.180988,66.6198239 152.059398,60.564932 C147.192119,53.4145727 141.71816,46.1758903 135.637521,38.8488847 C134.683122,37.6988602 134.815056,35.9888243 135.934314,35.0020629 L135.934314,35.0020629 Z M90.6842361,18 C102.390255,18 117.291276,29.0909926 135.387298,51.2729777 C135.788651,51.7649527 136.005428,52.3826288 136,53.0184911 C135.986842,54.5193144 134.764215,55.7253489 133.269082,55.7122445 L133.269082,55.7122445 L132.315346,55.7054689 C124.694302,55.6640063 117.285613,55.9284091 110.089277,56.4986773 C101.590961,57.17212 92.7164767,58.325393 83.4658235,59.9584962 C82.0138691,60.2148231 80.6245044,59.2578618 80.3403697,57.805758 L80.3403697,57.805758 L80.1871846,57.0136235 C75.2176347,31.0045412 78.7166519,18 90.6842361,18 Z"
-            id="Combined-Shape"
             fill="#FF4154"
           ></path>
         </g>
diff --git a/src/devtools/devtools.tsx b/src/devtools/devtools.tsx
index ad1f3eadb..d657c4710 100644
--- a/src/devtools/devtools.tsx
+++ b/src/devtools/devtools.tsx
@@ -595,72 +595,78 @@ export const ReactQueryDevtoolsPanel = React.forwardRef(
                 flex: '1',
               }}
             >
-              {queries.map((query, i) => (
-                <div
-                  key={query.queryHash || i}
-                  role="button"
-                  aria-label={`Open query details for ${query.queryHash}`}
-                  onClick={() =>
-                    setActiveQueryHash(
-                      activeQueryHash === query.queryHash ? '' : query.queryHash
-                    )
-                  }
-                  style={{
-                    display: 'flex',
-                    borderBottom: `solid 1px ${theme.grayAlt}`,
-                    cursor: 'pointer',
-                    background:
-                      query === activeQuery
-                        ? 'rgba(255,255,255,.1)'
-                        : undefined,
-                  }}
-                >
+              {queries.map((query, i) => {
+                const isDisabled =
+                  query.getObserversCount() > 0 && !query.isActive()
+                return (
                   <div
+                    key={query.queryHash || i}
+                    role="button"
+                    aria-label={`Open query details for ${query.queryHash}`}
+                    onClick={() =>
+                      setActiveQueryHash(
+                        activeQueryHash === query.queryHash
+                          ? ''
+                          : query.queryHash
+                      )
+                    }
                     style={{
-                      flex: '0 0 auto',
-                      width: '2rem',
-                      height: '2rem',
-                      background: getQueryStatusColor(query, theme),
                       display: 'flex',
-                      alignItems: 'center',
-                      justifyContent: 'center',
-                      fontWeight: 'bold',
-                      textShadow:
-                        getQueryStatusLabel(query) === 'stale'
-                          ? '0'
-                          : '0 0 10px black',
-                      color:
-                        getQueryStatusLabel(query) === 'stale'
-                          ? 'black'
-                          : 'white',
+                      borderBottom: `solid 1px ${theme.grayAlt}`,
+                      cursor: 'pointer',
+                      background:
+                        query === activeQuery
+                          ? 'rgba(255,255,255,.1)'
+                          : undefined,
                     }}
                   >
-                    {query.getObserversCount()}
-                  </div>
-                  {query.isActive() ? null : (
                     <div
                       style={{
                         flex: '0 0 auto',
+                        width: '2rem',
                         height: '2rem',
-                        background: theme.gray,
+                        background: getQueryStatusColor(query, theme),
                         display: 'flex',
                         alignItems: 'center',
+                        justifyContent: 'center',
                         fontWeight: 'bold',
-                        padding: '0 0.5rem',
+                        textShadow:
+                          getQueryStatusLabel(query) === 'stale'
+                            ? '0'
+                            : '0 0 10px black',
+                        color:
+                          getQueryStatusLabel(query) === 'stale'
+                            ? 'black'
+                            : 'white',
                       }}
                     >
-                      disabled
+                      {query.getObserversCount()}
                     </div>
-                  )}
-                  <Code
-                    style={{
-                      padding: '.5rem',
-                    }}
-                  >
-                    {`${query.queryHash}`}
-                  </Code>
-                </div>
-              ))}
+                    {isDisabled ? (
+                      <div
+                        style={{
+                          flex: '0 0 auto',
+                          height: '2rem',
+                          background: theme.gray,
+                          display: 'flex',
+                          alignItems: 'center',
+                          fontWeight: 'bold',
+                          padding: '0 0.5rem',
+                        }}
+                      >
+                        disabled
+                      </div>
+                    ) : null}
+                    <Code
+                      style={{
+                        padding: '.5rem',
+                      }}
+                    >
+                      {`${query.queryHash}`}
+                    </Code>
+                  </div>
+                )
+              })}
             </div>
           </div>
           {activeQuery ? (
diff --git a/src/devtools/utils.ts b/src/devtools/utils.ts
index 8846440bf..06e603506 100644
--- a/src/devtools/utils.ts
+++ b/src/devtools/utils.ts
@@ -10,10 +10,10 @@ export const isServer = typeof window === 'undefined'
 export function getQueryStatusColor(query, theme) {
   return query.state.isFetching
     ? theme.active
-    : query.isStale()
-    ? theme.warning
     : !query.getObserversCount()
     ? theme.gray
+    : query.isStale()
+    ? theme.warning
     : theme.success
 }
 
diff --git a/src/hydration/index.ts b/src/hydration/index.ts
index a52521402..1c8a35e43 100644
--- a/src/hydration/index.ts
+++ b/src/hydration/index.ts
@@ -1,11 +1,15 @@
-export { dehydrate, hydrate } from './hydration'
-export { useHydrate, Hydrate } from './react'
+// This package once contained these functions, but they have now been moved
+// into the core and react packages.
+// They are re-exported here to avoid a breaking change, but this package
+// should be considered deprecated and removed in a future major version.
+export { dehydrate, hydrate, useHydrate, Hydrate } from 'react-query'
 
 // Types
 export type {
   DehydrateOptions,
   DehydratedState,
   HydrateOptions,
+  ShouldDehydrateMutationFunction,
   ShouldDehydrateQueryFunction,
-} from './hydration'
-export type { HydrateProps } from './react'
+} from '../core/hydration'
+export type { HydrateProps } from '../react/Hydrate'
diff --git a/src/hydration/react.tsx b/src/react/Hydrate.tsx
similarity index 89%
rename from src/hydration/react.tsx
rename to src/react/Hydrate.tsx
index 62fe2964f..522189740 100644
--- a/src/hydration/react.tsx
+++ b/src/react/Hydrate.tsx
@@ -1,7 +1,7 @@
 import React from 'react'
 
-import { useQueryClient } from 'react-query'
-import { hydrate, HydrateOptions } from './hydration'
+import { hydrate, HydrateOptions } from '../core'
+import { useQueryClient } from './QueryClientProvider'
 
 export function useHydrate(state: unknown, options?: HydrateOptions) {
   const queryClient = useQueryClient()
diff --git a/src/react/index.ts b/src/react/index.ts
index 512d6d8e9..e8bcdee43 100644
--- a/src/react/index.ts
+++ b/src/react/index.ts
@@ -13,8 +13,10 @@ export { useMutation } from './useMutation'
 export { useQuery } from './useQuery'
 export { useQueries } from './useQueries'
 export { useInfiniteQuery } from './useInfiniteQuery'
+export { useHydrate, Hydrate } from './Hydrate'
 
 // Types
 export * from './types'
 export type { QueryClientProviderProps } from './QueryClientProvider'
 export type { QueryErrorResetBoundaryProps } from './QueryErrorResetBoundary'
+export type { HydrateProps } from './Hydrate'
diff --git a/src/react/types.ts b/src/react/types.ts
index ef98597c4..fce406915 100644
--- a/src/react/types.ts
+++ b/src/react/types.ts
@@ -2,13 +2,13 @@ import { RetryValue, RetryDelayValue } from '../core/retryer'
 import {
   InfiniteQueryObserverOptions,
   InfiniteQueryObserverResult,
-  MutateOptions,
-  MutationStatus,
+  MutationObserverResult,
   MutationKey,
   QueryObserverOptions,
   QueryObserverResult,
   QueryKey,
   MutationFunction,
+  MutateOptions,
 } from '../core/types'
 
 export interface UseBaseQueryOptions<
@@ -96,7 +96,7 @@ export interface UseMutationOptions<
   ) => Promise<unknown> | void
   retry?: RetryValue<TError>
   retryDelay?: RetryDelayValue<TError>
-  useErrorBoundary?: boolean
+  useErrorBoundary?: boolean | ((error: TError) => boolean)
 }
 
 export type UseMutateFunction<
@@ -119,24 +119,21 @@ export type UseMutateAsyncFunction<
   options?: MutateOptions<TData, TError, TVariables, TContext>
 ) => Promise<TData>
 
-export interface UseMutationResult<
+export type UseBaseMutationResult<
   TData = unknown,
   TError = unknown,
   TVariables = unknown,
   TContext = unknown
-> {
-  context: TContext | undefined
-  data: TData | undefined
-  error: TError | null
-  failureCount: number
-  isError: boolean
-  isIdle: boolean
-  isLoading: boolean
-  isPaused: boolean
-  isSuccess: boolean
-  mutate: UseMutateFunction<TData, TError, TVariables, TContext>
-  mutateAsync: UseMutateAsyncFunction<TData, TError, TVariables, TContext>
-  reset: () => void
-  status: MutationStatus
-  variables: TVariables | undefined
-}
+> = Override<
+  MutationObserverResult<TData, TError, TVariables, TContext>,
+  { mutate: UseMutateFunction<TData, TError, TVariables, TContext> }
+> & { mutateAsync: UseMutateAsyncFunction<TData, TError, TVariables, TContext> }
+
+export type UseMutationResult<
+  TData = unknown,
+  TError = unknown,
+  TVariables = unknown,
+  TContext = unknown
+> = UseBaseMutationResult<TData, TError, TVariables, TContext>
+
+type Override<A, B> = { [K in keyof A]: K extends keyof B ? B[K] : A[K] }
diff --git a/src/react/useBaseQuery.ts b/src/react/useBaseQuery.ts
index 55e28c250..6db43cb2a 100644
--- a/src/react/useBaseQuery.ts
+++ b/src/react/useBaseQuery.ts
@@ -6,6 +6,7 @@ import { QueryObserver } from '../core/queryObserver'
 import { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'
 import { useQueryClient } from './QueryClientProvider'
 import { UseBaseQueryOptions } from './types'
+import { shouldThrowError } from './utils'
 
 export function useBaseQuery<
   TQueryFnData,
@@ -123,9 +124,13 @@ export function useBaseQuery<
 
   // Handle error boundary
   if (
-    (defaultedOptions.suspense || defaultedOptions.useErrorBoundary) &&
     result.isError &&
-    !result.isFetching
+    !result.isFetching &&
+    shouldThrowError(
+      defaultedOptions.suspense,
+      defaultedOptions.useErrorBoundary,
+      result.error
+    )
   ) {
     throw result.error
   }
diff --git a/src/react/useMutation.ts b/src/react/useMutation.ts
index a841b27d1..9262cefa9 100644
--- a/src/react/useMutation.ts
+++ b/src/react/useMutation.ts
@@ -10,6 +10,7 @@ import {
   UseMutationResult,
 } from './types'
 import { MutationFunction, MutationKey } from '../core/types'
+import { shouldThrowError } from './utils'
 
 // HOOK
 
@@ -102,7 +103,14 @@ export function useMutation<
     obsRef.current!.mutate(variables, mutateOptions).catch(noop)
   }, [])
 
-  if (currentResult.error && obsRef.current.options.useErrorBoundary) {
+  if (
+    currentResult.error &&
+    shouldThrowError(
+      undefined,
+      obsRef.current.options.useErrorBoundary,
+      currentResult.error
+    )
+  ) {
     throw currentResult.error
   }
 
diff --git a/src/react/utils.ts b/src/react/utils.ts
new file mode 100644
index 000000000..add40f1c8
--- /dev/null
+++ b/src/react/utils.ts
@@ -0,0 +1,16 @@
+export function shouldThrowError<TError>(
+  suspense: boolean | undefined,
+  _useErrorBoundary: boolean | ((err: TError) => boolean) | undefined,
+  error: TError
+): boolean {
+  // Allow useErrorBoundary function to override throwing behavior on a per-error basis
+  if (typeof _useErrorBoundary === 'function') {
+    return _useErrorBoundary(error)
+  }
+
+  // Allow useErrorBoundary to override suspense's throwing behaviour
+  if (typeof _useErrorBoundary === 'boolean') return _useErrorBoundary
+
+  // If suspense is enabled default to throwing errors
+  return !!suspense
+}


Test patch:
diff --git a/docs/src/pages/guides/testing.md b/docs/src/pages/guides/testing.md
index 470f1c0cf..f34835846 100644
--- a/docs/src/pages/guides/testing.md
+++ b/docs/src/pages/guides/testing.md
@@ -121,7 +121,7 @@ await waitFor(() => {
   return result.current.isSuccess;
 });
 
-expect(result.current).toEqual({answer: 42});
+expect(result.current.data).toEqual({answer: 42});
 ```
 
 Here we are making use of `waitFor` and waiting until our the query status indicates that the request has succeeded. This way we know that our hook has finished and should have the correct data.
diff --git a/src/hydration/tests/hydration.test.tsx b/src/core/tests/hydration.test.tsx
similarity index 99%
rename from src/hydration/tests/hydration.test.tsx
rename to src/core/tests/hydration.test.tsx
index d8564dad6..4bc3bc208 100644
--- a/src/hydration/tests/hydration.test.tsx
+++ b/src/core/tests/hydration.test.tsx
@@ -1,5 +1,6 @@
 import { mockNavigatorOnLine, sleep } from '../../react/tests/utils'
-import { QueryCache, QueryClient } from '../..'
+import { QueryCache } from '../queryCache'
+import { QueryClient } from '../queryClient'
 import { dehydrate, hydrate } from '../hydration'
 
 async function fetchData<TData>(value: TData, ms?: number): Promise<TData> {
diff --git a/src/devtools/tests/devtools.test.tsx b/src/devtools/tests/devtools.test.tsx
index a0fc60997..562608890 100644
--- a/src/devtools/tests/devtools.test.tsx
+++ b/src/devtools/tests/devtools.test.tsx
@@ -260,6 +260,43 @@ describe('ReactQueryDevtools', () => {
     expect(screen.queryByText(/disabled/i)).not.toBeInTheDocument()
   })
 
+  it('should not show a disabled label for inactive queries', async () => {
+    const { queryClient } = createQueryClient()
+
+    function Page() {
+      const { data } = useQuery('key', () => Promise.resolve('test'), {
+        enabled: false,
+      })
+
+      return (
+        <div>
+          <h1>{data}</h1>
+        </div>
+      )
+    }
+
+    function App() {
+      const [visible, setVisible] = React.useState(true)
+
+      return (
+        <div>
+          {visible ? <Page /> : null}
+          <button onClick={() => setVisible(false)}>Hide Query</button>
+        </div>
+      )
+    }
+
+    renderWithClient(queryClient, <App />, { initialIsOpen: true })
+
+    await screen.findByText(/disabled/i)
+
+    await act(async () => {
+      fireEvent.click(await screen.findByText(/hide query/i))
+    })
+
+    expect(screen.queryByText(/disabled/i)).not.toBeInTheDocument()
+  })
+
   it('should sort the queries according to the sorting filter', async () => {
     const { queryClient, queryCache } = createQueryClient()
 
diff --git a/src/hydration/tests/react.test.tsx b/src/react/tests/Hydrate.test.tsx
similarity index 96%
rename from src/hydration/tests/react.test.tsx
rename to src/react/tests/Hydrate.test.tsx
index 70a371fa3..3a2b0b2f5 100644
--- a/src/hydration/tests/react.test.tsx
+++ b/src/react/tests/Hydrate.test.tsx
@@ -1,9 +1,16 @@
 import React from 'react'
 import { render } from '@testing-library/react'
 
-import { QueryClient, QueryClientProvider, QueryCache, useQuery } from '../..'
-import { dehydrate, useHydrate, Hydrate } from '../'
-import { sleep } from '../../react/tests/utils'
+import {
+  QueryClient,
+  QueryClientProvider,
+  QueryCache,
+  useQuery,
+  dehydrate,
+  useHydrate,
+  Hydrate,
+} from '../..'
+import { sleep } from './utils'
 
 describe('React hydration', () => {
   const fetchData: (value: string) => Promise<string> = value =>
diff --git a/src/hydration/tests/ssr.test.tsx b/src/react/tests/ssr-hydration.test.tsx
similarity index 97%
rename from src/hydration/tests/ssr.test.tsx
rename to src/react/tests/ssr-hydration.test.tsx
index 4a764d59b..f855b8635 100644
--- a/src/hydration/tests/ssr.test.tsx
+++ b/src/react/tests/ssr-hydration.test.tsx
@@ -2,10 +2,16 @@ import React from 'react'
 import ReactDOM from 'react-dom'
 import ReactDOMServer from 'react-dom/server'
 
-import { useQuery, QueryClient, QueryClientProvider, QueryCache } from '../..'
-import { dehydrate, hydrate } from '../'
+import {
+  useQuery,
+  QueryClient,
+  QueryClientProvider,
+  QueryCache,
+  dehydrate,
+  hydrate,
+} from '../..'
 import * as utils from '../../core/utils'
-import { mockConsoleError, sleep } from '../../react/tests/utils'
+import { mockConsoleError, sleep } from './utils'
 
 // This monkey-patches the isServer-value from utils,
 // so that we can pretend to be in a server environment
diff --git a/src/react/tests/suspense.test.tsx b/src/react/tests/suspense.test.tsx
index 7946cf3d6..1dd470411 100644
--- a/src/react/tests/suspense.test.tsx
+++ b/src/react/tests/suspense.test.tsx
@@ -550,6 +550,185 @@ describe("useQuery's in Suspense mode", () => {
     consoleMock.mockRestore()
   })
 
+  it('should throw errors to the error boundary by default', async () => {
+    const key = queryKey()
+
+    const consoleMock = mockConsoleError()
+
+    function Page() {
+      useQuery(
+        key,
+        async () => {
+          await sleep(10)
+          throw new Error('Suspense Error a1x')
+        },
+        {
+          retry: false,
+          suspense: true,
+        }
+      )
+      return <div>rendered</div>
+    }
+
+    function App() {
+      return (
+        <ErrorBoundary
+          fallbackRender={() => (
+            <div>
+              <div>error boundary</div>
+            </div>
+          )}
+        >
+          <React.Suspense fallback="Loading...">
+            <Page />
+          </React.Suspense>
+        </ErrorBoundary>
+      )
+    }
+
+    const rendered = renderWithClient(queryClient, <App />)
+
+    await waitFor(() => rendered.getByText('Loading...'))
+    await waitFor(() => rendered.getByText('error boundary'))
+
+    consoleMock.mockRestore()
+  })
+
+  it('should not throw errors to the error boundary when useErrorBoundary: false', async () => {
+    const key = queryKey()
+
+    const consoleMock = mockConsoleError()
+
+    function Page() {
+      useQuery(
+        key,
+        async () => {
+          await sleep(10)
+          throw new Error('Suspense Error a2x')
+        },
+        {
+          retry: false,
+          suspense: true,
+          useErrorBoundary: false,
+        }
+      )
+      return <div>rendered</div>
+    }
+
+    function App() {
+      return (
+        <ErrorBoundary
+          fallbackRender={() => (
+            <div>
+              <div>error boundary</div>
+            </div>
+          )}
+        >
+          <React.Suspense fallback="Loading...">
+            <Page />
+          </React.Suspense>
+        </ErrorBoundary>
+      )
+    }
+
+    const rendered = renderWithClient(queryClient, <App />)
+
+    await waitFor(() => rendered.getByText('Loading...'))
+    await waitFor(() => rendered.getByText('rendered'))
+
+    consoleMock.mockRestore()
+  })
+
+  it('should not throw errors to the error boundary when a useErrorBoundary function returns true', async () => {
+    const key = queryKey()
+
+    const consoleMock = mockConsoleError()
+
+    function Page() {
+      useQuery(
+        key,
+        async () => {
+          await sleep(10)
+          return Promise.reject('Remote Error')
+        },
+        {
+          retry: false,
+          suspense: true,
+          useErrorBoundary: err => err !== 'Local Error',
+        }
+      )
+      return <div>rendered</div>
+    }
+
+    function App() {
+      return (
+        <ErrorBoundary
+          fallbackRender={() => (
+            <div>
+              <div>error boundary</div>
+            </div>
+          )}
+        >
+          <React.Suspense fallback="Loading...">
+            <Page />
+          </React.Suspense>
+        </ErrorBoundary>
+      )
+    }
+
+    const rendered = renderWithClient(queryClient, <App />)
+
+    await waitFor(() => rendered.getByText('Loading...'))
+    await waitFor(() => rendered.getByText('error boundary'))
+
+    consoleMock.mockRestore()
+  })
+
+  it('should not throw errors to the error boundary when a useErrorBoundary function returns false', async () => {
+    const key = queryKey()
+
+    const consoleMock = mockConsoleError()
+
+    function Page() {
+      useQuery(
+        key,
+        async () => {
+          await sleep(10)
+          return Promise.reject('Local Error')
+        },
+        {
+          retry: false,
+          suspense: true,
+          useErrorBoundary: err => err !== 'Local Error',
+        }
+      )
+      return <div>rendered</div>
+    }
+
+    function App() {
+      return (
+        <ErrorBoundary
+          fallbackRender={() => (
+            <div>
+              <div>error boundary</div>
+            </div>
+          )}
+        >
+          <React.Suspense fallback="Loading...">
+            <Page />
+          </React.Suspense>
+        </ErrorBoundary>
+      )
+    }
+
+    const rendered = renderWithClient(queryClient, <App />)
+
+    await waitFor(() => rendered.getByText('Loading...'))
+    await waitFor(() => rendered.getByText('rendered'))
+
+    consoleMock.mockRestore()
+  })
+
   it('should not call the queryFn when not enabled', async () => {
     const key = queryKey()
 
diff --git a/src/react/tests/useQuery.test.tsx b/src/react/tests/useQuery.test.tsx
index b10ffd896..12def146e 100644
--- a/src/react/tests/useQuery.test.tsx
+++ b/src/react/tests/useQuery.test.tsx
@@ -19,6 +19,7 @@ import {
   QueryFunction,
   QueryFunctionContext,
 } from '../..'
+import { ErrorBoundary } from 'react-error-boundary'
 
 describe('useQuery', () => {
   const queryCache = new QueryCache()
@@ -2552,6 +2553,114 @@ describe('useQuery', () => {
     consoleMock.mockRestore()
   })
 
+  it('should throw error if queryFn throws and useErrorBoundary is in use', async () => {
+    const key = queryKey()
+    const consoleMock = mockConsoleError()
+
+    function Page() {
+      const { status, error } = useQuery<undefined, string>(
+        key,
+        () => Promise.reject('Error test jaylen'),
+        { retry: false, useErrorBoundary: true }
+      )
+
+      return (
+        <div>
+          <h1>{status}</h1>
+          <h2>{error}</h2>
+        </div>
+      )
+    }
+
+    const rendered = renderWithClient(
+      queryClient,
+      <ErrorBoundary fallbackRender={() => <div>error boundary</div>}>
+        <Page />
+      </ErrorBoundary>
+    )
+
+    await waitFor(() => rendered.getByText('error boundary'))
+
+    consoleMock.mockRestore()
+  })
+
+  it('should set status to error instead of throwing when error should not be thrown', async () => {
+    const key = queryKey()
+    const consoleMock = mockConsoleError()
+
+    function Page() {
+      const { status, error } = useQuery<undefined, string>(
+        key,
+        () => Promise.reject('Local Error'),
+        {
+          retry: false,
+          useErrorBoundary: err => err !== 'Local Error',
+        }
+      )
+
+      return (
+        <div>
+          <h1>{status}</h1>
+          <h2>{error}</h2>
+        </div>
+      )
+    }
+
+    const rendered = renderWithClient(
+      queryClient,
+      <ErrorBoundary fallbackRender={() => <div>error boundary</div>}>
+        <Page />
+      </ErrorBoundary>
+    )
+
+    await waitFor(() => rendered.getByText('error'))
+    await waitFor(() => rendered.getByText('Local Error'))
+
+    consoleMock.mockRestore()
+  })
+
+  it('should throw error instead of setting status when error should be thrown', async () => {
+    const key = queryKey()
+    const consoleMock = mockConsoleError()
+
+    function Page() {
+      const { status, error } = useQuery<undefined, string>(
+        key,
+        () => Promise.reject('Remote Error'),
+        {
+          retry: false,
+          useErrorBoundary: err => err !== 'Local Error',
+        }
+      )
+
+      return (
+        <div>
+          <h1>{status}</h1>
+          <h2>{error}</h2>
+        </div>
+      )
+    }
+
+    const rendered = renderWithClient(
+      queryClient,
+      <ErrorBoundary
+        fallbackRender={({ error }) => (
+          <div>
+            <div>error boundary</div>
+            <div>{error}</div>
+          </div>
+        )}
+      >
+        <Page />
+      </ErrorBoundary>
+    )
+
+    await waitFor(() => rendered.getByText('error boundary'))
+    await waitFor(() => rendered.getByText('Remote Error'))
+
+    consoleMock.mockRestore()
+  })
+
   it('should always fetch if refetchOnMount is set to always', async () => {
     const key = queryKey()
     const states: UseQueryResult<string>[] = []