Skip to content
Draft

v4 #1888

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .changeset/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
"fixed": [
[
"@suspensive/react",
"@suspensive/react-query",
"@suspensive/react-query-4",
"@suspensive/react-query-5",
"@suspensive/jotai",
Expand Down
5 changes: 5 additions & 0 deletions .changeset/nasty-turkeys-count.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@suspensive/codemods": minor
---

feat(codemods): add migrate to v4 codemods
21 changes: 21 additions & 0 deletions .changeset/pre.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"mode": "pre",
"tag": "next",
"initialVersions": {
"@suspensive/eslint-config": "0.0.1",
"@suspensive/tsconfig": "0.0.0-development",
"@suspensive/tsdown": "0.0.0",
"@suspensive/suspensive.org": "0.0.0",
"@suspensive/next-streaming-react-query": "0.0.0",
"@suspensive/visualization": "0.0.0",
"@suspensive/vite-react-18-suspense-prerender-siblings-problem": "0.0.0",
"@suspensive/codemods": "3.18.0",
"@suspensive/jotai": "3.18.0",
"@suspensive/next": "0.0.5",
"@suspensive/react": "3.18.0",
"@suspensive/react-query": "3.18.0",
"@suspensive/react-query-4": "3.18.0",
"@suspensive/react-query-5": "3.18.0"
Comment on lines +12 to +18
},
"changesets": ["nasty-turkeys-count", "weak-steaks-reflect"]
}
6 changes: 6 additions & 0 deletions .changeset/weak-steaks-reflect.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@suspensive/react-query-4": major
"@suspensive/react-query-5": major
---

feat(react-query): remove @suspensive/react-query & remove unnecessary apis of @suspensive/react-query-*
1 change: 0 additions & 1 deletion .github/ISSUE_TEMPLATE/bug.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ body:
multiple: true
options:
- '@suspensive/react'
- '@suspensive/react-query'
- '@suspensive/react-query-4'
- '@suspensive/react-query-5'
- '@suspensive/jotai'
Expand Down
1 change: 0 additions & 1 deletion .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ body:
multiple: true
options:
- '@suspensive/react'
- '@suspensive/react-query'
- '@suspensive/react-query-4'
- '@suspensive/react-query-5'
- '@suspensive/jotai'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ export default {
type: 'separator',
title: 'Codemods',
},
migrateToV4: { title: 'Migrate to v4' },
tanstackQueryImport: { title: 'Migrate TanStack Query imports' },
migrateQueryClientConsumerProps: {
title: 'Migrate <QueryClientConsumer/> Props',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
---
description: 'A codemod for handling breaking changes in @suspensive/react-query v4.'
---

import { Callout } from '@/components'

# Migrating to v4

<Callout type='info'>

- Recommended when updating from `@suspensive/react-query` v3 to v4.
- This codemod does not modify `package.json`. After running it, remove `@suspensive/react-query` from your dependencies and make sure `@suspensive/react-query-4` or `@suspensive/react-query-5` is installed.

</Callout>

There are two code-level breaking changes in `@suspensive/react-query` v4:

1. The unified package `@suspensive/react-query` has been removed. All imports must point to the version-specific package `@suspensive/react-query-4` or `@suspensive/react-query-5`.
2. APIs provided by `@tanstack/react-query` (such as `queryOptions`, `mutationOptions`, etc.) are also removed from `@suspensive/react-query-4, 5`. These must be imported directly from `@tanstack/react-query`.

```bash filename="Terminal"
npx @suspensive/codemods migrate-to-v4 .
```

For example:

```tsx /@suspensive/react-query/ /@suspensive/react-query-5/
import {
useSuspenseQuery,
SuspenseQuery,
queryOptions,
IsFetching,
} from '@suspensive/react-query'
import { queryOptions, PrefetchQuery } from '@suspensive/react-query-5'
import * as RQ from '@suspensive/react-query'
export { queryOptions, QueryClientConsumer } from '@suspensive/react-query'
```

Transforms into:

```tsx /@tanstack/react-query/ /@suspensive/react-query-5/
import { useSuspenseQuery, queryOptions } from '@tanstack/react-query'
import { SuspenseQuery, IsFetching } from '@suspensive/react-query-5'
import { queryOptions } from '@tanstack/react-query'
import { PrefetchQuery } from '@suspensive/react-query-5'
import * as RQ from '@suspensive/react-query-5'
export { queryOptions } from '@tanstack/react-query'
export { QueryClientConsumer } from '@suspensive/react-query-5'
```

## Version detection

Starting from the current working directory and walking upward, the codemod locates the nearest `package.json` to determine whether the project depends on v4 or v5 of `@tanstack/react-query`. The detected major version is used when rewriting `@suspensive/react-query` to its version-specific source.

If detection fails, the codemod falls back to v5 and prints a warning. To specify the target explicitly, set the `SUSPENSIVE_RQ_TARGET` environment variable to `4` or `5` before running:

```bash filename="Terminal"
SUSPENSIVE_RQ_TARGET=4 npx @suspensive/codemods migrate-to-v4 .
```

## Notes

- This codemod does not modify `package.json`. After running it, remove `@suspensive/react-query` from your dependencies and make sure `@suspensive/react-query-4` or `@suspensive/react-query-5` is installed.
Original file line number Diff line number Diff line change
Expand Up @@ -4,34 +4,40 @@ description: 'Codemod to update @suspensive/react-query imports to match TanStac

import { Callout } from '@/components'

# Migrate TanStack Query imports
# Change import paths to TanStack Query

<Callout type='info'>

- We recommend upgrading to `@tanstack/react-query@5` when using `@suspensive/react-query` with `@tanstack/react-query@4`.
- Starting from `@suspensive/react-query-4@3.3.0`, `queryOptions`, `infiniteQueryOption`, `useSuspenseQuery`, and `useSuspenseQueries` have been deprecated. (`@tanstack/react-query@4.40.0` officially supports `useSuspenseQuery` and `queryOptions`.)
- Recommended when you want to switch from `@suspensive/react-query`, `@suspensive/react-query-4`, or `@suspensive/react-query-5` to the `@tanstack/react-query` API.
- In v4, APIs provided by `@tanstack/react-query` will be removed from `@suspensive/react-query-4,5`. Recommended when you want to switch to `@tanstack/react-query`.

</Callout>

Any API in `@suspensive/react-query` that is officially provided by `@tanstack/react-query` will be marked as `deprecated`.
This is because `@suspensive/react-query` offers the same APIs such as Suspense Hooks and `queryOptions`/`infiniteQueryOption`, and we want to encourage developers to use the official `@tanstack/react-query` APIs first.
Among the APIs in `@suspensive/react-query`, those officially provided by `@tanstack/react-query` are marked as `deprecated`.

This is because `@suspensive/react-query` provides the same APIs as `@tanstack/react-query`, such as Suspense Hooks, `queryOptions`, and `infiniteQueryOption`, and the goal is to encourage developers to use the `@tanstack/react-query` APIs first.

```bash filename="Terminal"
npx @suspensive/codemods tanstack-query-import .
```

This codemod automatically transforms import paths from `@suspensive/react-query` to `@tanstack/react-query`.
You can automatically convert import paths from `@suspensive/react-query` to `@tanstack/react-query`.

For example:

```tsx /@suspensive/
import { queryOptions } from '@suspensive/react-query'
import { useSuspenseQuery } from '@suspensive/react-query-5' // The versioned package is also transformed!
import {
queryOptions,
mutationOptions,
SuspenseQuery,
} from '@suspensive/react-query-5'
import { useSuspenseQuery } from '@suspensive/react-query'
```

Transforms into:

```tsx /@tanstack/
import { queryOptions } from '@tanstack/react-query'
import { queryOptions, mutationOptions } from '@tanstack/react-query'
import { SuspenseQuery } from '@suspensive/react-query-5'
import { useSuspenseQuery } from '@tanstack/react-query'
```
20 changes: 2 additions & 18 deletions docs/suspensive.org/src/content/en/docs/react-query/_meta.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@ import type { MetaRecord } from 'nextra'
export default {
motivation: { title: 'Motivation' },
installation: { title: 'Installation' },
migration: { title: 'Migration guide' },
'--- API Reference': {
type: 'separator',
title: 'API Reference',
},
createGetQueryClient: { title: 'createGetQueryClient' },
SuspenseQuery: { title: '<SuspenseQuery/>' },
SuspenseQueries: { title: '<SuspenseQueries/>' },
SuspenseInfiniteQuery: { title: '<SuspenseInfiniteQuery/>' },
Expand All @@ -16,22 +18,4 @@ export default {
QueriesHydration: { title: '<QueriesHydration/>' },
QueryClientConsumer: { title: '<QueryClientConsumer/>' },
IsFetching: { title: '<IsFetching/>' },
createGetQueryClient: { title: 'createGetQueryClient' },
usePrefetchQuery: { title: 'usePrefetchQuery' },
usePrefetchInfiniteQuery: { title: 'usePrefetchInfiniteQuery' },
'--- Deprecated': {
type: 'separator',
title: 'Deprecated',
},
queryOptions: { title: 'queryOptions' },
mutationOptions: { title: 'mutationOptions' },
infiniteQueryOptions: { title: 'infiniteQueryOptions' },
useSuspenseQuery: { title: 'useSuspenseQuery' },
useSuspenseQueries: { title: 'useSuspenseQueries' },
useSuspenseInfiniteQuery: { title: 'useSuspenseInfiniteQuery' },
'--- More': {
type: 'separator',
title: 'More',
},
migration: { title: 'Migration Guide' },
} satisfies MetaRecord

This file was deleted.

Loading
Loading