Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: react-query-next-experimental package #5598

Merged
merged 32 commits into from
Jul 14, 2023
Merged

feat: react-query-next-experimental package #5598

merged 32 commits into from
Jul 14, 2023

Conversation

TkDodo
Copy link
Collaborator

@TkDodo TkDodo commented Jun 17, 2023

No description provided.

@vercel
Copy link

vercel bot commented Jun 17, 2023

The latest updates on your projects. Learn more about Vercel for Git ↗︎

1 Ignored Deployment
Name Status Preview Comments Updated (UTC)
query ⬜️ Ignored (Inspect) Jul 14, 2023 8:10am

@nx-cloud
Copy link

nx-cloud bot commented Jun 17, 2023

☁️ Nx Cloud Report

CI is running for commit 5bf15c2.

📂 Click to track the progress, see the status, the terminal output, and the build insights.


Sent with 💌 from NxCloud.

@TkDodo
Copy link
Collaborator Author

TkDodo commented Jun 17, 2023

@juliusmarminge @KATT @Ephem I put up a draft PR with a new experimental package for v5 that contains the lib code from the poc: https://github.com/trpc/use-client-stream-hydration/tree/main/src/app/lib

@TkDodo
Copy link
Collaborator Author

TkDodo commented Jun 17, 2023

@Ephem there seems to be a build error related to the rollup plugin preserve-directives:

> rollup --config rollup.config.js


./src/index.ts → ./build/lib, ./build/lib...
[!] (plugin preserve-directives) SyntaxError: Unexpected token (43:9)
src/ReactQueryStreamedHydration.tsx (43:9)

Tbh, I just copied the rollup config from other packages, where it works fine ... 🤔


return () => {
// Cleanup after unmount
win[id] = {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should probably be changed to an empty array instead

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

okay: a83ca67

const stream: Array<Serialized<TShape>> = win[id] ?? []

if (!Array.isArray(stream)) {
throw new Error(`${id} seem to have been registered twice`)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this check should be removed, it's pointless

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removed: 9ce9513

@codesandbox-ci
Copy link

codesandbox-ci bot commented Jun 19, 2023

This pull request is automatically built and testable in CodeSandbox.

To see build info of the built libraries, click here or the icon next to each commit SHA.

Latest deployment of this branch, based on commit 5bf15c2:

Sandbox Source
@tanstack/query-example-react-basic-typescript Configuration
@tanstack/query-example-solid-basic-typescript Configuration
@tanstack/query-example-svelte-basic Configuration
@tanstack/query-example-vue-basic Configuration

@codecov-commenter
Copy link

codecov-commenter commented Jun 19, 2023

Codecov Report

Patch and project coverage have no change.

Comparison is base (f57cebe) 89.03% compared to head (2d45542) 89.03%.

❗ Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.

Additional details and impacted files
@@           Coverage Diff           @@
##            alpha    #5598   +/-   ##
=======================================
  Coverage   89.03%   89.03%           
=======================================
  Files          72       72           
  Lines        2390     2390           
  Branches      622      622           
=======================================
  Hits         2128     2128           
  Misses        216      216           
  Partials       46       46           

☔ View full report in Codecov by Sentry.
📢 Do you have feedback about the report comment? Let us know in this issue.

@TkDodo TkDodo marked this pull request as ready for review June 19, 2023 10:47
@TkDodo
Copy link
Collaborator Author

TkDodo commented Jun 19, 2023

@KATT I think this would be ready to ship. The example is not yet working because the package it depends on (the new one) doesn't exist yet on npm. The plan is to release this, then make a follow-up PR that adds the dependency.

Copy link
Collaborator

@Ephem Ephem left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work on this! I left a few comments, but I think the big one is probably the hydrating in useEffect one, I have a feeling there are timing based issues there that can lead to hydration mismatches. Just doing it in render like we currently do elsewhere isn't great either of course so 🤷.

And of course the whole how this encourages fetch-in-render and client waterfalls over fetch-and-render, but I've talked that one to death already. 😄

// Register cache consumer
const winStream: Array<Serialized<TShape>> = win[id] ?? []

onEntries(...winStream)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the only time anything hydrates, right? Can we always do that in an effect? Is the effect for an entry always guaranteed to run before React hydrates the corresponding DOM? Imagine for example if this provider and a section that has a query flushes to the stream at the same time, will the effect have a chance to run before that section is hydrated by React then? If not, there will be hydration mismatches.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the only time anything hydrates, right?

Yes

Can we always do that in an effect? Is the effect for an entry always guaranteed to run before React hydrates the corresponding DOM? Imagine for example if this provider and a section that has a query flushes to the stream at the same time, will the effect have a chance to run before that section is hydrated by React then? If not, there will be hydration mismatches.

I am not entirely sure to be honest. All of this stuff is experimental

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not entirely sure to be honest. All of this stuff is experimental

Me neither and oh yeah, no worries, that's why I'm trying to think this through. 😃

Okay, so I looked at this closer and realized that it's only the first time this happens in an effect, after that, window[id].push() calls it directly when the script is evaluated which should always be before hydrating that Suspense boundary.

So we could still theoretically have the problem that this effect hasn't run before the first Suspense boundary hydrates right (unless effects for previous boundaries are guaranteed to run before hydration of child boundary)?

But at least, after that, right now the hydration happens before hydrating the Suspense boundary that is streaming in. Since this only happens on SSR/first page load, it should be pretty unlikely that we stream in a query that is already in the cache, at least with some NEW data. Even if we do, I think it's fine in this case (but wont be for the <HydrateBoundary> case since that will run on page navigations too).

Comment on lines 61 to 67
query.state.status !== 'pending'

// passedKeys.add(query.queryHash);
return shouldDehydrate
},
})
trackedKeys.clear()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not a 100% on how the internals work here, so I'll ask. Is the added event triggered when the query is added to the cache, even if it doesn't have data? That's why we check if it's pending here, so we don't dehydrate pending queries?

IF there are pending queries, they will still get cleared by trackedKeys.clear() even though they haven't dehydrated, but, when data comes in a new update event will be triggered and they will get re-added as a trackedKey and flushed next time?

I guess the case where this could happen is if you prefetch a query inside of render but don't await it in the same Suspense boundary or something like that?

/**
* We need to track which queries were added/updated during the render
*/
const [trackedKeys] = React.useState(() => new Set<string>())
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What happens if there are already queries in the cache, for example is some queries have been seeded/prefetched/are currently being prefetched (pending)? Are you then supposed to seed the browser RQ cache yourself too by having a <Hydrate> above these new providers in the tree (not possible for pending queries), or should this Set be initialised with any existing queries?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think they would be hydrated automatically, too. Given that the ReactQueryStreamedHydration is very high up your component tree, it would subscribe very early to the QueryCache, so it would also track those queries.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What @TkDodo said, if you do something that changes the react query client cache, we'll subscribe to it and flush it next chance we get

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But what if you prime the cache before the rendering pass? Like if you await some data in a Server Component (maybe you need to generate metadata anyway), or you have some existing mechanism of prefetching that prefetches before rendering?

@TkDodo TkDodo requested a review from KATT June 27, 2023 09:42
Comment on lines 51 to 54
return (
trackedKeys.has(query.queryHash) &&
query.state.status !== 'pending'
)
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

instead of checking for pending here, I think we should merge with the defaultShouldDehydrateQuery function, which only dehydrates successful queries.

without extra transformers like superjson, errors couldn't be serialized otherwise.

if necessary, we need to expose dehydrateOptions (as well as hydrate options maybe?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm thinking maybe like this?
9d67d8b

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

and make sure we fall back to the defaultShouldDehydrate function, which only dehydrates successful queries
console.log('fetching', url)
const res: string = await (
await fetch(url, {
cache: 'no-store',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need this no-store-directive even if it's a client component?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I dont think it does anything on the client

# Conflicts:
#	pnpm-lock.yaml
@TkDodo TkDodo merged commit 1a12a6a into alpha Jul 14, 2023
@TkDodo TkDodo deleted the feature/suspense branch July 14, 2023 08:25
TkDodo added a commit that referenced this pull request Jul 24, 2023
* release: v5.0.0-alpha.11

* refactor(core): unify hydration options (#5131)

* refactor: unify hydration options

* docs: update hydration docs

* migration guide

* refactor: use shouldDehydrate... syntax

* Update docs/react/guides/migrating-to-v5.md

Co-authored-by: Fredrik Höglund <[email protected]>

* Apply suggestions from code review

* chore: fix tests

* chore: fix tests

* Update docs/react/reference/hydration.md

---------

Co-authored-by: Fredrik Höglund <[email protected]>

* release: v5.0.0-alpha.12

* release: v5.0.0-alpha.13

* chore: remove unused devDependencies (#5211)

* refactor(react-query-devtools): move devtools components in files (#5150)

* refactor(react-query-devtools): move QueryStatusCount header to subdirectory

* refactor(react-query-devtools): move QueryRow to subdirectory

* refactor(react-query-devtools): move ActiveQuery to subdirectory

* refactor(react-query-devtools): move Cache Panel to subdirectory

* lint

* refactor: add display names

* fix: typo

* release: v5.0.0-alpha.14

* fix(solid-query): SSR fixes - Inconsistent state (#5093)

* fix(solid-query): do not call unsubscribe on the server

* fix(solid-query): prefer val from queryResource if

it is available there

* chore: add hydration debugger to solid ssr example

* bump minimum solid-js version

* chore: pnpm i

* chore: fix rollup babel typings

Result of this change upstream that types the “targets” property -> https://github.com/DefinitelyTyped/DefinitelyTyped/pull/63927/files#diff-a4da813bfdc10bbb7d4d9ee9b811309e7e2a16c0484b9a334752db84be4b0f31

Signed-off-by: marbemac <[email protected]>

* replace void 0

Signed-off-by: marbemac <[email protected]>

* chore: remove uncessary onMount

Signed-off-by: marbemac <[email protected]>

* chore: skip this onComputed on first render

Signed-off-by: marbemac <[email protected]>

* fix: copy state properties over for ssr hydration

Signed-off-by: marbemac <[email protected]>

---------

Signed-off-by: marbemac <[email protected]>

* release: v5.0.0-alpha.15

* fix(solid-query): Fix non hydrating queries (#5229)

* release: v5.0.0-alpha.16

* release: v5.0.0-alpha.17

* docs(react): fix typo in TypeScript.md (#5239)

Signed-off-by: Eng Zer Jun <[email protected]>

* fix: do not mutate input (#5240)

* fix: do not mutate input

params passed to function from consumers should be treated as readonly and thus shouldn't be modified

* test: remove unexpected `exact` props from find methods

---------

Co-authored-by: Damian Osipiuk <[email protected]>

* release: v5.0.0-alpha.18

* docs: update migrating-to-v5 (#5274)

I think the rocket emoji is causing a visual bug too but since I edited this through GitHub's UI, I couldn't confirm.

* fix(query-core): correct placeholderData prevData value with select fn (#5227)

* fix(query-core): correct placeholderData prevData

* fix(query-core): preserves correct prevQueryResult

This commit preserves the correct previous result between rerenders.

* test(react-query): Test with placeholder & select

* fix(query-core): Add lastDefinedQueryData property

* fix(query-core): Remove console.log

* fix(query-core): Add react-query test

* release: v5.0.0-alpha.19

* feat(solid-query): Add `reconcile` option (#5287)

* feat(solid-query): Add `reconcile` option

* feat(solid-query): Add `reconcile` callback test

* release: v5.0.0-alpha.20

* chore: adapt tests to v5 syntax after merge

* feat: remove callbacks from QueryObserver (#5282)

* feat: remove callbacks from QueryObserver

types are passing now

* test: remove some more callback related tests

* docs: migration guide for removed callbacks

* chore: fix broken lock file

* chore: remove unused variables

those were only needed on main for keepPreviousData, which doesn't exist anymore

* release: v5.0.0-alpha.21

* fix(solid-query): Remove unserializable values (#5326)

* release: v5.0.0-alpha.22

* feat: rename throwErrors to throwOnError (#5318)

* feat: rename throwErrors to throwOnError

to be aligned with the options we already have on imperative methods, like `invalidateQueries`

* docs: fix outdated code reference

* chore: rename type

* fix: let the refetchInterval function also return undefined

and fall back to false if it does

* release: v5.0.0-alpha.23

* docs: remove duplicated `isInitialLoading` (#5327)

* fix: make sure codemods are included in react-query (#5340)

* chore: fix pr pipeline (#5345)

* chore: remove unneeded script

* chore: fix syntax error after merging

* Empty-Commit

* chore: update to node18 to hopefully fix CI issues

see: vitest-dev/vitest#1191 (comment)

* chore: don't throw error if build dir already exists

* release: v5.0.0-alpha.24

* feat: queryOptions helper function (#5153)

* feat: queryOptions helper function

so that we can define and share options outside of useQuery, but still get the type inference

* docs: queryOptions

* docs: remove reference to onError

* docs: update migration guide

* release: v5.0.0-alpha.25

* chore: remove createStore option (#5352)

having the option to customize the internal store sound nice, but the problem is that the store holds Query instances, not data. So, the setter is only called once, not on every data update. This makes it relatively useless - every time we thought we could leverage createStore, it fell short of our requirements because of this.

The better way is usually to subscribe to the QueryCache directly

* docs: remove callbacks from useQuery

* fix(core): make sure refetching multiple queries imperatively works offline (#5249)

* fix(core): make sure refetching multiple queries imperatively works offline

* test: add another test for different networkMode

* fix: always catch promises even if we don't return them because we are offline

* release: v5.0.0-alpha.26

* chore: svelte-query tests, validatePackages changes

* feat(devtools): Add framework agnostic devtools (#5347)

* feat(devtools): Add framework agnostic devtools draft

* Fix test

* Move query-devtools build before react-query-devtools

* Fix dimensions bug & add isInitialOpen props

* Fix isOpen state

* Add devtools cutom errorTypes option

* Add explicit close button

* Add keyboard focus for tooltips

* Add query-core to query-devtools peerDependencies

* Update pnpm lock file

* Add overflow hidden to hide filters on top view

* Revert overflow hidden - causing other issues

* Update documentation

* Fix validate-packages script

---------

Co-authored-by: Dominik Dorfmeister <[email protected]>

* fix(query-devtools): Add query-core to devDependencies (#5360)

* fix(query-devtools): Add query-core to devDependencies

* Fix pnpm-lock.yaml

* release: v5.0.0-alpha.27

* feat(solid-query): `queryOptions` helper for solid-query (#5355)

* feat: queryOptions helper for solid-query

* add tests

* fix imports

* release: v5.0.0-alpha.28

* feat(svelte-query-devtools): Svelte Adapter for new Devtools (#5362)

* Implement working devtools component

* Fix pnpm-lock.yaml

* Update workspace config

* Always a prettier error

* Fix eslint error

* Fix test:types

* Add svelte-query to deps

* Use esm-env to block loading in prod

* Remove example changes

* Simpler export

* Allow dynamically editing props

* Run prettier

* fix(devtools): Update ESM export extension (#5364)

* fix(devtools): Update ESM export extension

* Update Svelte devtools types error

* Fix svelte-query-devtools types error

* release: v5.0.0-alpha.29

* feat(devtools): Make queryclient reactive (#5366)

* release: v5.0.0-alpha.30

* Revert changes to svelte-query build

* fix(svelte-query-devtools): Fix tsconfig paths

* fix(svelte-query-devtools): Fix issue parsing JSX (#5372)

* feat(query-core): Add previousQuery to placeholderFn (#5358)

* feat(query-core): Add previousQuery to placeholderFn

* Add query-core and react-query tests

* Remove unused query type

---------

Co-authored-by: Dominik Dorfmeister <[email protected]>

* release: v5.0.0-alpha.31

* docs: Update dependent-queries.md (#5391)

I believe `isLoading` has been renamed to `isPending`

* refactor: unwrap listeners

* chore: relax eslint for tests

* release: v5.0.0-alpha.32

* docs: new docs for placeholderData

* feat(useQueries): combine (#5219)

* attempt at adding combine on observer level (doesn't work)

* feat(useQueries): combine

adapt getOptimisticResult to return both the result array and a combined result getter

* feat(useQueries): combine

make sure combinedResult stays in sync with result

* feat(vue-query): combine results for useQueries hook

* Add new options to svelte-query

* Add new options to solid-query

* fix: enable property tracking for useQueries

* fix: move property tracking to react layer

* chore: remove logging

* chore: remove unnecessary type assertion

* test: tests for combined data

* docs: combine

---------

Co-authored-by: Damian Osipiuk <[email protected]>
Co-authored-by: Lachlan Collins <[email protected]>
Co-authored-by: Aryan Deora <[email protected]>

* docs: combine

* chore: setup fallback base to origin/main

if we trigger a release manually via github, this value might not be filled

* release: v5.0.0-alpha.34

* docs: update installation

* chore: Improve eslint/tsconfig setup in svelte packages (#5438)

* fix(types): fix TError generic on queryOptions

* release: v5.0.0-alpha.35

* release: v5.0.0-alpha.36

* chore: Bump eslint version to 8.34.0 (#5439)

* feat(svelte-query): Simplify types (#5442)

* release: v5.0.0-alpha.37

* chore: Update dev dependencies (#5466)

* chore: Replace cp with cpy-cli (#5441)

Co-authored-by: Dominik Dorfmeister <[email protected]>

* fix: Update typescript-eslint (#5467)

* release: v5.0.0-alpha.38

* chore: More package updates (#5468)

* chore: Link examples to workspace packages (#5469)

* feat(svelte-query): Switch to moduleResolution bundler (#5471)

* fix: Downgrade chalk to v4 (#5472)

* release: v5.0.0-alpha.39

* docs: change Hydrate->HydrationBoundary (#5455)

* updated docs on SSR
Hydrate -> HydrationBoundary

* docs(ssr): change Hydrate->HydrationBoundary

change Hydrate->HydrationBoundary to remove deprecated component

* docs(ssr): rename all Hydrate->HydrationBoundary

rename all Hydrate instances ->HydrationBoundary for consistency

* feat(react-query-persist-client): await onuccess (#5473)

* fix: have `onSuccess` return a promise too so that we can await it

that way, invalidation or mutations that run in onSuccess will still keep isRestoring to be false, which avoids race conditions

* test: test for awaiting onSuccess

* docs: onSuccess

* release: v5.0.0-alpha.40

* release: v5.0.0-alpha.41

* chore: Regenerate alpha lockfile (#5477)

* docs(solid-query): Fix API signature in overview.md (#5470)

* docs(svelte-query): Add svelte-query-devtools to examples (#5478)

* chore: Clean-up eslint config (#5481)

* chore: More eslint improvements (#5482)

* feat: Convert rollup config to ESM (#5484)

* chore: Migrate scripts to ESM (#5486)

* feat: Split rollup config for Nx caching (#5487)

* fix: Fix CJS/ESM issue with @commitlint/parse

I can't believe these issues still exist, see evanw/esbuild#1719

* chore: Update prettier, eslint, rollup, scripts (#5490)

* chore: Fix prettierignore

* release: v5.0.0-alpha.42

* fix: Update @commitlint/parse (#5491)

See conventional-changelog/commitlint#3614

* release: v5.0.0-alpha.43

* chore: Add eslint-plugin-compat (#5495)

* Fix workspace links

* Add eslint-plugin-compat

* Update nx.json

* fix: Improve workspace tsconfig (#5497)

* release: v5.0.0-alpha.44

* fix: Move deps/devDeps/peerDeps to appropriate location (#5498)

* chore: Extend base tsconfig for svelte packages (#5501)

* release: v5.0.0-alpha.45

* chore: Make test:types have no Nx output (#5500)

* feat: Remove svelte field from package.json (#5504)

* release: v5.0.0-alpha.46

* feat: Add explicit package.json `type` field (#5505)

* release: v5.0.0-alpha.47

* chore: Fix nx affected (#5509)

* fix: Fix ESLint warnings (#5510)

* release: v5.0.0-alpha.48

* chore: Update to Nx 16.3.1 (#5514)

* chore: Update to nx 16.3.1

* Update pnpm-lock.yaml

* chore: Update Nx cloud workflow (#5515)

* feat: Drop legacy webpack v4 support (#5507)

* release: v5.0.0-alpha.49

* feat: Remove UMD build output (#5517)

* release: v5.0.0-alpha.50

* chore: Rework rollup externals (#5519)

* feat: Refactor package exports (#5520)

* chore: Remove publint error temporarily

* release: v5.0.0-alpha.51

* fix: Publint error in solid-query (#5522)

* release: v5.0.0-alpha.52

* fix: Simplify exports in solidjs packages (#5523)

* release: v5.0.0-alpha.53

* chore: Improve Nx task separation (#5524)

* Fix ci workflow

nx run-many doesn't use --base

* feat(query-devtools): Lazyload Query Devtools Core (#5527)

* release: v5.0.0-alpha.54

* fix(query-devtools): Broken package.json exports (#5528)

* Make publint throw errors

* Rewrite CJS files to use .cjs extension

* Add concurrency option to PR workflow

* Fix export extensions

* release: v5.0.0-alpha.55

* chore: Re-enable Nx Distributed Task Execution (#5518)

* fix(query-devtools): inform onlineManager when offline mode is simulated (#5534)

* release: v5.0.0-alpha.56

* docs: make returning a promise for optimistic updates more explicit (#5485)

* fix(codemod): do not mark the `buildMessage` method as private (#5546)

* fix(codemod): do not mark the `buildMessage` method as private

It might fail because of the lack of support.

* chore(codemod): add missing `filePath` parameter to the docblock

* release: v5.0.0-alpha.57

* fix(query-devtools): Fix getSidedProp bug (#5551)

* release: v5.0.0-alpha.58

* chore: Update publish script (#5559)

* fix(query-devtools): Add chunkFileNames option (#5560)

* release: v5.0.0-alpha.59

* fix: Change `svelte-package` output directory (#5561)

* release: v5.0.0-alpha.60

* release: v5.0.0-alpha.61

* chore: try to stabilize test

* fix(solid-query): Use rollup-preset-solid (#5565)

* release: v5.0.0-alpha.62

* feat: Add legacy rollup builds (#5570)

* release: v5.0.0-alpha.63

* docs: Add `"private": true` to examples (#5578)

* release: v5.0.0-alpha.64

* fix(useIsMutating): fix vue warning (#5453)

onScopeDispose() is called when there is no active effect scope to be associated with

* release: v5.0.0-alpha.65

* feat(infiniteQuery): allow prefetching arbitrary amounts of pages (#5440)

* refactor: combine fetching first page with refetching

as it's the same condition

* feat(infiniteQuery): allow prefetching arbitrary amounts of pages

* test prefetching

* fix: make sure that pages and getNextPageParam are passed in tandem to (pre)fetchInfiniteQuery

* docs: prefetching

* chore: try to stabilize test

* docs: migration guide

* release: v5.0.0-alpha.66

* refactor: move queryOptions to its own file (#5480)

* refactor: remove 'use client' from non-components

* refactor: move queryOptions to its own file

where we don't have a 'use client' directive, because we can call this function on the server as well

* Revert "refactor: remove 'use client' from non-components"

This reverts commit 8ecac66.

* refactor: rename isRestoring file

* chore: fix import

* release: v5.0.0-alpha.67

* fix: Update eslint-plugin-query build config (#5601)

* fix: Use pnpm workspace protocol (#5600)

* release: v5.0.0-alpha.68

* chore: Use nx watch command (#5605)

* fix(solid-query): revert package.json typo (#5615)

* release: v5.0.0-alpha.69

* release: v5.0.0-alpha.70

* release: v5.0.0-alpha.71

* chore: Fix Nx parallelisation for vue-query tests (#5635)

Co-authored-by: Dominik Dorfmeister <[email protected]>

* fix(devtools): padding for action buttons (#5608)

global `button` styles would otherwise affect buttons

* release: v5.0.0-alpha.72

* feat: Support Svelte v4 (#5659)

* feat: Support svelte v4

* Downgrade @testing-library/svelte

* Upgrade @testing-library/svelte to 4.0.3

* Refactor onMount dynamic import

* release: v5.0.0-alpha.73

* fix(eslint-plugin-query): Use tsup to generate types (#5666)

* release: v5.0.0-alpha.74

* fix: Skip queryClient context lookup if client passed directly (#5669)

* release: v5.0.0-alpha.75

* feat: Accept all svelte stores as options (#5672)

* refactor: Accept stores other than writable

* Cleanup Readable type import

* Add tests

* Stricter isSvelteStore check

* Update docs

* Fix input bind

* Add testing-library cleanup

* release: v5.0.0-alpha.76

* fix(svelte-query): Fix staleTime reactivity bug (#5682)

* release: v5.0.0-alpha.77

* chore(svelte-query): Update reactivity docs and tests (#5683)

* fix(query-devtools): Bundle all dependencies (#5684)

* release: v5.0.0-alpha.78

* release: v5.0.0-alpha.79

* feat: react-query-next-experimental package (#5598)

* chore: fix a copy-paste error

* chore: bootstrap package

* chore: setup package

* chore: allow passing with no tests

* fix: remove 'use client' from index bundle

* chore: cleanup copy/paste error

* chore: fix prettier

* refactor: replace ref with direct props access

* fix: do not write to refs during render

* refactor: inline function into useEffect to avoid useCallback

* fix: eslint no-shadow

* refactor: namespace id

* refactor: removed pointless check

* fix: set to empty array on cleanup

* fix: adapt for v5 changes

* chore: fix build

* docs: add streaming example

* chore: fix outdated lockfile

* chore: fix prettier

* refactor: remove isSubscribed ref

* refactor: re-arrange comment

* chore: remove comments

* chore: fix broken lock file

* feat: allow customization of hydrate / dehydrate options

and make sure we fall back to the defaultShouldDehydrate function, which only dehydrates successful queries

* release: v5.0.0-alpha.80

* docs: fix nextjs-streaming example

* fix(core) : sync Observer 'current' properties when optimistic reading occurs (#5611)

* fix-5538 : sync Observer 'current' properties when optimistic reading occurs

* Flip test on currentResult with placeholderData's order & add test

* Fix tests using the same queryKey

* remove options.placeHolderData from deciding whether to assign observer current properties, use equalitycheck on v5

* maybe fix for vue reactivity cbs

* test(vue-query): test persister with useQuery

* Force line terminator to \\n on codemods tests

* Revert " Force line terminator to \\n on codemods tests"

This reverts commit 6f0a469.

---------

Co-authored-by: Dominik Dorfmeister <[email protected]>
Co-authored-by: Damian Osipiuk <[email protected]>

* chore: Force line terminator to \\n on codemods tests (#5664)

Co-authored-by: Dominik Dorfmeister <[email protected]>

* chore: stabilize a flaky test

* release: v5.0.0-alpha.81

* docs: remove devtools from example

because they currently don't work

* fix(query-devtools): Force publish package (#5715)

* release: v5.0.0-alpha.82

* docs: re-enable devtools

* fix: Update dev dependencies (#5718)

* release: v5.0.0-alpha.83

* chore: Add vite to root package.json (#5722)

* refactor: Add new eslint sorting from main (#5723)

* release: v5.0.0-alpha.84

* chore: Update vite and vitest (#5724)

* chore: Remove eslint-plugin-compat (#5732)

* feat: include meta in query and mutation hydration (#5733)

* feat: include `meta` in query and mutation hydration

* test: tests for meta hydration

* chore: stabilize a flaky test

* chore: stabilize another flaky test

* release: v5.0.0-alpha.85

* fix(onlineManager): always initialize with `online: true` (#5714)

* fix(onlineManager): always initialize with `online: true`

instead of relying on navigator.onLine, because that indicator is broken AF in chrome

https://bugs.chromium.org/p/chromium/issues/list?q=navigator.online

* docs: document subscribe methods

* docs

* test: fix types in tests

setting to undefined is now illegal, so we have to reset to `true`, which is the default now

* fix(tests): switch from mocking navigator.onLine to mocking onlineManager.isOnline

* fix: offline toggle in devtools

it should now be enough to set online to true / false, without firing the event, because we always set & respect that value. we don't override the event handler, so real online / offline events might interfere here

* chore: fix tests

with the implementation of onlineManager, where we default to `true`, we need an explicit `'offline'` event to get it to false; otherwise, switching back to true doesn't change the state, so subscribers are not informed

* chore: prettier write

* chore: fix eslint

* chore: delete an old, flaky test that doesn't test much

* release: v5.0.0-alpha.86

* docs: use bundlejs for bundle-size

* docs: fix link

* feat: Replace rollup with tsup/esbuild (#5597)

Co-authored-by: Dominik Dorfmeister <[email protected]>
Co-authored-by: Aryan Deora <[email protected]>

* release: v5.0.0-alpha.87

* chore: Simplify tsconfig (#5745)

* fix: Simplify devDependencies (#5747)

* fix: Fix tsconfig "include" setting (#5750)

* release: v5.0.0-alpha.88

* docs: fix potential typo (#5748)

* fix potential typo

* Update docs/react/guides/queries.md

---------

Co-authored-by: Dominik Dorfmeister <[email protected]>

* fix: Add missing extensions to ESM imports (#5751)

* chore: Bundler integration tests (#5756)

* Add react-cra5 test

* Add react-cra4 test

* Add react-vite test

* Add svelte-vite test

* Add solid-vite test

* Run prettier

* Rename script to test:bundle

* Add vue-vite test

* Run prettier

* fix(query-devtools): Fix Devtools Build Issues (#5768)

* release: v5.0.0-alpha.89

* feat(codemod): add codemod that renames the `Hydrate` component usages to `HydrationBoundary` usages (#5761)

* feat(codemod): add codemod that renames the `cacheTime` and `useErrorBoundary` object properties and TypeScript property signatures (#5765)

* feat(react-query): useSuspenseQuery (#5739)

* feat: useSuspenseQuery

* feat: infiniteQueryOptions

* fix: add exports

* feat: useSuspenseInfiniteQuery

* feat: initialData overloads for useInfiniteQuery

* fix: types

* chore: stabilize test

we sometimes get failureCount: 2, but it doesn't matter here (timing issue)

* fix: types for useSuspenseQuery (#5755)

* docs: suspense

* docs: api reference

* docs: useSuspenseQuery in examples

* fix: types for useSuspenseInfiniteQuery (#5766)

---------

Co-authored-by: Jonghyeon Ko <[email protected]>

* release: v5.0.0-alpha.90

* chore: fix prettier

* chore: fix tests

* release: v5.0.0-alpha.91

---------

Signed-off-by: marbemac <[email protected]>
Signed-off-by: Eng Zer Jun <[email protected]>
Co-authored-by: Tanner Linsley <[email protected]>
Co-authored-by: Fredrik Höglund <[email protected]>
Co-authored-by: Gabriel Pichot <[email protected]>
Co-authored-by: Marc MacLeod <[email protected]>
Co-authored-by: Aryan Deora <[email protected]>
Co-authored-by: Eng Zer Jun <[email protected]>
Co-authored-by: Damian Osipiuk <[email protected]>
Co-authored-by: Arthur Denner <[email protected]>
Co-authored-by: Ilya <[email protected]>
Co-authored-by: Lachlan Collins <[email protected]>
Co-authored-by: OrJDev <[email protected]>
Co-authored-by: Enguerrand des Vaux <[email protected]>
Co-authored-by: Dennis kinuthia <[email protected]>
Co-authored-by: Yuji Sugiura <[email protected]>
Co-authored-by: Yaroslav Lapin <[email protected]>
Co-authored-by: Balázs Máté Petró <[email protected]>
Co-authored-by: Aleksandr Semenov <[email protected]>
Co-authored-by: Matthew Salsamendi <[email protected]>
Co-authored-by: Speros Kokenes <[email protected]>
Co-authored-by: EL AYADI Mohamed <[email protected]>
Co-authored-by: Dale Seo <[email protected]>
Co-authored-by: Jonghyeon Ko <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants