diff --git a/.changeset/config.json b/.changeset/config.json index 9e5d4c896..812f40006 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -5,7 +5,6 @@ "fixed": [ [ "@suspensive/react", - "@suspensive/react-query", "@suspensive/react-query-4", "@suspensive/react-query-5", "@suspensive/jotai", diff --git a/.changeset/nasty-turkeys-count.md b/.changeset/nasty-turkeys-count.md new file mode 100644 index 000000000..249f669a7 --- /dev/null +++ b/.changeset/nasty-turkeys-count.md @@ -0,0 +1,5 @@ +--- +"@suspensive/codemods": minor +--- + +feat(codemods): add migrate to v4 codemods diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 000000000..ea6e3eebf --- /dev/null +++ b/.changeset/pre.json @@ -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" + }, + "changesets": ["nasty-turkeys-count", "weak-steaks-reflect"] +} diff --git a/.changeset/weak-steaks-reflect.md b/.changeset/weak-steaks-reflect.md new file mode 100644 index 000000000..95c5349c2 --- /dev/null +++ b/.changeset/weak-steaks-reflect.md @@ -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-* diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index 019fc8747..2ef27c388 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -11,7 +11,6 @@ body: multiple: true options: - '@suspensive/react' - - '@suspensive/react-query' - '@suspensive/react-query-4' - '@suspensive/react-query-5' - '@suspensive/jotai' diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 766e43eab..1088d9b67 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -11,7 +11,6 @@ body: multiple: true options: - '@suspensive/react' - - '@suspensive/react-query' - '@suspensive/react-query-4' - '@suspensive/react-query-5' - '@suspensive/jotai' diff --git a/docs/suspensive.org/src/content/en/docs/codemods/_meta.tsx b/docs/suspensive.org/src/content/en/docs/codemods/_meta.tsx index ea5496875..b0a46d800 100644 --- a/docs/suspensive.org/src/content/en/docs/codemods/_meta.tsx +++ b/docs/suspensive.org/src/content/en/docs/codemods/_meta.tsx @@ -7,6 +7,7 @@ export default { type: 'separator', title: 'Codemods', }, + migrateToV4: { title: 'Migrate to v4' }, tanstackQueryImport: { title: 'Migrate TanStack Query imports' }, migrateQueryClientConsumerProps: { title: 'Migrate Props', diff --git a/docs/suspensive.org/src/content/en/docs/codemods/migrateToV4.mdx b/docs/suspensive.org/src/content/en/docs/codemods/migrateToV4.mdx new file mode 100644 index 000000000..719898d88 --- /dev/null +++ b/docs/suspensive.org/src/content/en/docs/codemods/migrateToV4.mdx @@ -0,0 +1,63 @@ +--- +description: 'A codemod for handling breaking changes in @suspensive/react-query v4.' +--- + +import { Callout } from '@/components' + +# Migrating to v4 + + + +- 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. + + + +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. diff --git a/docs/suspensive.org/src/content/en/docs/codemods/tanstackQueryImport.mdx b/docs/suspensive.org/src/content/en/docs/codemods/tanstackQueryImport.mdx index fb42d683a..731828fc8 100644 --- a/docs/suspensive.org/src/content/en/docs/codemods/tanstackQueryImport.mdx +++ b/docs/suspensive.org/src/content/en/docs/codemods/tanstackQueryImport.mdx @@ -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 -- 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`. -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' ``` diff --git a/docs/suspensive.org/src/content/en/docs/react-query/_meta.tsx b/docs/suspensive.org/src/content/en/docs/react-query/_meta.tsx index db2688043..06f27a3a4 100644 --- a/docs/suspensive.org/src/content/en/docs/react-query/_meta.tsx +++ b/docs/suspensive.org/src/content/en/docs/react-query/_meta.tsx @@ -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: '' }, SuspenseQueries: { title: '' }, SuspenseInfiniteQuery: { title: '' }, @@ -16,22 +18,4 @@ export default { QueriesHydration: { title: '' }, QueryClientConsumer: { title: '' }, IsFetching: { title: '' }, - 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 diff --git a/docs/suspensive.org/src/content/en/docs/react-query/infiniteQueryOptions.mdx b/docs/suspensive.org/src/content/en/docs/react-query/infiniteQueryOptions.mdx deleted file mode 100644 index 391e17a5b..000000000 --- a/docs/suspensive.org/src/content/en/docs/react-query/infiniteQueryOptions.mdx +++ /dev/null @@ -1,165 +0,0 @@ ---- -robots: noindex -description: 'Deprecated — infiniteQueryOptions is now available in TanStack Query v4.41.0+. Use the official TanStack Query version instead.' ---- - -import { Callout, Sandpack } from '@/components' - -# infiniteQueryOptions - - - -**Deprecated in @suspensive/react-query** - -This interface is now officially supported in TanStack Query v4.41.0+. Since TanStack Query has backported this interface, we are deprecating the backported version from @suspensive/react-query. Please migrate to the official TanStack Query interface: - -```diff -- import { infiniteQueryOptions } from '@suspensive/react-query' -+ import { infiniteQueryOptions } from '@tanstack/react-query' -``` - -For more details, see [TanStack Query PR #9334](https://github.com/TanStack/query/pull/9334). - - - -`infiniteQueryOptions` helps utilize queryOptions in Infinite Query. This provides similar benefits to the ones offered by [`queryOptions`](https://suspensive.org/docs/react-query/queryOptions). - -```jsx /infiniteQueryOptions/ -import { infiniteQueryOptions, useSuspenseInfiniteQuery, SuspenseInfiniteQuery } from '@suspensive/react-query' -import { useInfiniteQuery, useQueryClient } from '@tanstack/react-query' - -const postsInfiniteQueryOptions = (page) => - infiniteQueryOptions({ - queryKey: ['posts', page] as const, - queryFn: ({ - queryKey: [, page], // You can use queryKey. - }) => fetch(`https://example.com/posts?page=${page}`).then(res => res.json()), - getNextPageParam: (lastPage) => lastPage.nextPage ?? false, - }) - -// No need to create a custom query hook. -// You can directly utilize infiniteQueryOptions in useInfiniteQuery, useSuspenseInfiniteQuery, and SuspenseInfiniteQuery. -const postsQuery = useInfiniteQuery(postsInfiniteQueryOptions(1)) -const { data: posts, fetchNextPage, hasNextPage } = useSuspenseInfiniteQuery({ - ...postsInfiniteQueryOptions(1), - refetchInterval: 2000, // Extensibility is clearly expressed in usage. -}) -const Example = () => ( - - {({ data, fetchNextPage, hasNextPage }) => ( -
- {data.pages.map((page, index) => ( -
- {page.posts.map(post => ( -
{post.title}
- ))} -
- ))} - -
- )} -
-) - -// You can easily use queryKey and queryFn in queryClient's methods. -const queryClient = useQueryClient() -queryClient.refetchQueries(postsInfiniteQueryOptions(1)) -queryClient.prefetchQuery(postsInfiniteQueryOptions(1)) -queryClient.invalidateQueries(postsInfiniteQueryOptions(1)) -queryClient.fetchQuery(postsInfiniteQueryOptions(1)) -queryClient.resetQueries(postsInfiniteQueryOptions(1)) -queryClient.cancelQueries(postsInfiniteQueryOptions(1)) -``` - - - -```tsx Example.tsx active -import { Suspense } from '@suspensive/react' -import { - infiniteQueryOptions, - SuspenseInfiniteQuery, -} from '@suspensive/react-query' -import { useQueryClient } from '@tanstack/react-query' -import { getPosts } from './api' - -const postsInfiniteQueryOptions = (page) => - infiniteQueryOptions({ - queryKey: ['posts', page], - queryFn: ({ queryKey: [, page] }) => getPosts(page), - getNextPageParam: (lastPage) => lastPage.nextPage ?? false, - }) - -export const Example = () => { - const queryClient = useQueryClient() - - return ( -
- - Loading...
}> - - {({ data, fetchNextPage, hasNextPage }) => ( -
- {data.pages.map((page, index) => ( -
- {page.posts.map((post) => ( -
-

{post.title}

-

{post.body}

-
- ))} -
- ))} - -
- )} -
- - - ) -} -``` - -```tsx api.ts -type Post = { - userId: number - id: number - title: string - body: string -} - -type PostsResponse = { - posts: Post[] - nextPage: number -} - -export const getPosts = async (page: number): Promise => { - const response = await fetch( - `https://jsonplaceholder.typicode.com/posts?_page=${page}&_limit=2` - ) - - if (!response.ok) { - throw new Error('An error occurred') - } - - const data = await response.json() - const nextPage = page + 1 - - return { posts: data, nextPage } -} -``` - -
- -### Version History - -| Version | Changes | -| -------- | ----------------------------------------------------------------------------------------------------------------------------- | -| `v3.0.0` | `networkMode` has been removed. For more details, please refer to the [Migration to v3 guide](./migration/migrate-to-v3.mdx). | diff --git a/docs/suspensive.org/src/content/en/docs/react-query/installation.mdx b/docs/suspensive.org/src/content/en/docs/react-query/installation.mdx index b990dc91e..2ba03e954 100644 --- a/docs/suspensive.org/src/content/en/docs/react-query/installation.mdx +++ b/docs/suspensive.org/src/content/en/docs/react-query/installation.mdx @@ -61,7 +61,7 @@ Install the package that matches your @tanstack/react-query version. ```shell npm2yarn -npm install @suspensive/react-query@npm:@suspensive/react-query-5 @tanstack/react-query@5 +npm install @suspensive/react-query-5 @tanstack/react-query@5 ``` @@ -70,7 +70,7 @@ npm install @suspensive/react-query@npm:@suspensive/react-query-5 @tanstack/reac @tanstack/react-query v4 supports [lower version browsers](/docs/react-query/motivation#v5-drops-support-for-older-browsers) compared to v5. ```shell npm2yarn -npm install @suspensive/react-query@npm:@suspensive/react-query-4 @tanstack/react-query@4 +npm install @suspensive/react-query-4 @tanstack/react-query@4 ``` @@ -80,6 +80,35 @@ npm install @suspensive/react-query@npm:@suspensive/react-query-4 @tanstack/reac By using npm aliases, the import path remains `@suspensive/react-query` across your codebase. When upgrading your @tanstack/react-query version, you only need to change the alias in package.json — no code changes required. +Here's an example `package.json` configuration: + + + + +```json +{ + "dependencies": { + "@suspensive/react-query": "npm:@suspensive/react-query-5@latest", + "@tanstack/react-query": "^5" + } +} +``` + + + + +```json +{ + "dependencies": { + "@suspensive/react-query": "npm:@suspensive/react-query-4@latest", + "@tanstack/react-query": "^4" + } +} +``` + + + + diff --git a/docs/suspensive.org/src/content/en/docs/react-query/mutationOptions.mdx b/docs/suspensive.org/src/content/en/docs/react-query/mutationOptions.mdx index d6627654c..12a0fc011 100644 --- a/docs/suspensive.org/src/content/en/docs/react-query/mutationOptions.mdx +++ b/docs/suspensive.org/src/content/en/docs/react-query/mutationOptions.mdx @@ -18,6 +18,8 @@ This interface is now officially supported in TanStack Query v4.44.0+. Since Tan + import { mutationOptions } from '@tanstack/react-query' ``` +To migrate to the APIs provided by `@tanstack/react-query`, please use the [`tanstack-query-import`](/docs/codemods/tanstackQueryImport) Codemod. + `mutationOptions` helps you easily reuse and consistently manage option objects for Mutations. This provides similar benefits to the ones offered by [`queryOptions`](/docs/react-query/queryOptions). diff --git a/docs/suspensive.org/src/content/en/docs/react-query/queryOptions.mdx b/docs/suspensive.org/src/content/en/docs/react-query/queryOptions.mdx deleted file mode 100644 index 5077b76fc..000000000 --- a/docs/suspensive.org/src/content/en/docs/react-query/queryOptions.mdx +++ /dev/null @@ -1,138 +0,0 @@ ---- -robots: noindex -description: 'Deprecated — queryOptions is now available in TanStack Query v4.40.0+. Use the official TanStack Query version instead.' ---- - -import { Callout, Sandpack } from '@/components' - -# queryOptions - - - -**Deprecated in @suspensive/react-query** - -This interface is now officially supported in TanStack Query v4.40.0+. Since TanStack Query has backported this interface, we are deprecating the backported version from @suspensive/react-query. Please migrate to the official TanStack Query interface: - -```diff -- import { queryOptions } from '@suspensive/react-query' -+ import { queryOptions } from '@tanstack/react-query' -``` - -For more details, see [TanStack Query PR #9140](https://github.com/TanStack/query/pull/9140). - - - -Tkdodo, The maintainer of TanStack Query explains well why this interface is needed in [video explaining queryOptions in TanStack Query v5](https://youtu.be/bhE3wuB_TuA?feature=shared&t=1697). -You can also use queryOptions in TanStack Query v4. - -1. QueryKey management becomes easier by processing queryKey and queryFn together. -2. You can remove unnecessary custom query hooks. This is because they can all be used directly in `useQuery`, `useQueries` of TanStack Query v4, and `useSuspenseQuery`, `useSuspenseQueries`, and `SuspenseQuery` of Suspensive React Query. -3. TanStack Query v5 already supports queryOptions. This Suspensive React Query's `queryOptions` will make migration from TanStack Query v4 to TanStack Query v5 easier. - -```jsx /queryOptions/ -import { queryOptions, useSuspenseQuery, useSuspenseQueries, SuspenseQuery } from '@suspensive/react-query' -import { useQuery, useQueries, useQueryClient } from '@tanstack/react-query' - -const postQueryOptions = (postId) => - queryOptions({ - queryKey: ['posts', postId] as const, - queryFn: ({ - queryKey: [, postId], // You can use queryKey. - }) => fetch(`https://example.com/posts/${postId}`), - }) - -// No need to create custom query hooks. -// You can use queryOptions directly in useQuery, useQueries, useSuspenseQuery, useSuspenseQueries, SuspenseQuery. -const post1Query = useQuery(postQueryOptions(1)) -const { data: post1 } = useSuspenseQuery({ - ...postQueryOptions(1); - refetchInterval: 2000, // Extensibility is clearly expressed in usage. -}) -const [post1Query, post2Query] = useQueries({ - queries: [postQueryOptions(1), { ...postQueryOptions(2), refetchInterval: 2000 }], -}) -const [{ data: post1 }, { data: post2 }] = useSuspenseQueries({ - queries: [postQueryOptions(1), { ...postQueryOptions(2), refetchInterval: 2000 }], -}) -const Example = () => {({ data: post1 }) => <>{post1.text}} - -// You can easily use queryKey and queryFn in queryClient's methods. -const queryClient = useQueryClient() -queryClient.refetchQueries(postQueryOptions(1)) -queryClient.prefetchQuery(postQueryOptions(1)) -queryClient.invalidateQueries(postQueryOptions(1)) -queryClient.fetchQuery(postQueryOptions(1)) -queryClient.resetQueries(postQueryOptions(1)) -queryClient.cancelQueries(postQueryOptions(1)) - -``` - - - -```tsx Example.tsx active -import { Suspense } from '@suspensive/react' -import { queryOptions, SuspenseQuery } from '@suspensive/react-query' -import { useQueryClient } from '@tanstack/react-query' -import { getPost } from './api' - -const postQueryOptions = (postId: number) => - queryOptions({ - queryKey: ['posts', postId], - queryFn: () => getPost(postId), - }) - -export const Example = () => { - const queryClient = useQueryClient() - - return ( -
- - Loading...
}> - - {({ data }) => { - return ( -
-

{data.title}

-

{data.body}

-
- ) - }} -
- - - ) -} -``` - -```tsx api.ts -type Post = { - userId: number - id: number - title: string - body: string -} - -export const getPost = async (id: number): Promise => { - const response = await fetch( - `https://jsonplaceholder.typicode.com/posts/${id}` - ) - - if (!response.ok) { - throw new Error('An error occurred') - } - - const data = await response.json() - - return data -} -``` - -
- -### Version History - -| Version | Changes | -| -------- | ----------------------------------------------------------------------------------------------------------------------------- | -| `v3.0.0` | `networkMode` has been removed. For more details, please refer to the [Migration to v3 guide](./migration/migrate-to-v3.mdx). | diff --git a/docs/suspensive.org/src/content/en/docs/react-query/usePrefetchInfiniteQuery.mdx b/docs/suspensive.org/src/content/en/docs/react-query/usePrefetchInfiniteQuery.mdx deleted file mode 100644 index 7232a55b7..000000000 --- a/docs/suspensive.org/src/content/en/docs/react-query/usePrefetchInfiniteQuery.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -description: 'Prefetch infinite queries as a hook with usePrefetchInfiniteQuery. Pre-load paginated data before render.' ---- - -import { Callout, Sandpack } from '@/components' - -# usePrefetchInfiniteQuery - -The usePrefetchInfiniteQuery does not return anything, it should be used just to fire a prefetch during render, before a suspense boundary that wraps a component that uses useSuspenseInfiniteQuery. - -```jsx /usePrefetchInfiniteQuery/ -import { - usePrefetchInfiniteQuery, - useSuspenseInfiniteQuery, -} from '@suspensive/react-query' - -const PostsPage = ({ postId }) => { - usePrefetchInfiniteQuery({ - queryKey: ['posts'], - queryFn: () => getPosts(), - }) // Prefetch query before suspense boundary - - return ( - Loading...}> - - - ) -} - -export const Posts = () => { - const postsInfiniteQuery = useSuspenseInfiniteQuery({ - queryKey: ['posts'], - queryFn: () => getPosts(), - }) - - return <>... -} -``` diff --git a/docs/suspensive.org/src/content/en/docs/react-query/usePrefetchQuery.mdx b/docs/suspensive.org/src/content/en/docs/react-query/usePrefetchQuery.mdx deleted file mode 100644 index 3ffab65f3..000000000 --- a/docs/suspensive.org/src/content/en/docs/react-query/usePrefetchQuery.mdx +++ /dev/null @@ -1,94 +0,0 @@ ---- -description: 'Prefetch queries as a hook with usePrefetchQuery. Start data fetching before component render.' ---- - -import { Callout, Sandpack } from '@/components' - -# usePrefetchQuery - -The usePrefetchQuery does not return anything, it should be used just to fire a prefetch during render, before a suspense boundary that wraps a component that uses useSuspenseQuery. - -```jsx /usePrefetchQuery/ -import { usePrefetchQuery, useSuspenseQuery } from '@suspensive/react-query' - -const PostPage = ({ postId }) => { - usePrefetchQuery({ - queryKey: ['posts', postId], - queryFn: () => getPost(postId), - }) // Prefetch query before suspense boundary - - return ( - Loading...}> - - - ) -} - -export const Post = ({ postId }) => { - const { data } = useSuspenseQuery({ - queryKey: ['posts', postId], - queryFn: () => getPost(postId), - }) - - return <>... -} -``` - - - -```tsx Example.tsx active -import { Suspense } from '@suspensive/react' -import { usePrefetchQuery, useSuspenseQuery } from '@suspensive/react-query' -import { useState } from 'react' - -export const Example = () => { - const [postId, setPostId] = useState(1) - usePrefetchQuery({ - queryKey: ['posts', postId], - queryFn: () => getPost(postId), - }) - - return ( -
- - - Loading...
}> - - - - ) -} - -const Post = ({ postId }: { postId: number }) => { - const { data } = useSuspenseQuery({ - queryKey: ['posts', postId], - queryFn: () => getPost(postId), - }) - - return ( -
-

{data.title}

-

{data.body}

-
- ) -} - -const getPost = (postId: number) => - fetch(`https://jsonplaceholder.typicode.com/posts/${postId}`).then<{ - id: number - title: string - body: string - }>((res) => res.json()) -``` - -
diff --git a/docs/suspensive.org/src/content/en/docs/react-query/useSuspenseInfiniteQuery.mdx b/docs/suspensive.org/src/content/en/docs/react-query/useSuspenseInfiniteQuery.mdx deleted file mode 100644 index 4a43968eb..000000000 --- a/docs/suspensive.org/src/content/en/docs/react-query/useSuspenseInfiniteQuery.mdx +++ /dev/null @@ -1,192 +0,0 @@ ---- -robots: noindex -description: 'Deprecated — useSuspenseInfiniteQuery is now available in TanStack Query v4.40.0+. Use the official TanStack Query version instead.' ---- - -import { Callout, Sandpack } from '@/components' - -# useSuspenseInfiniteQuery - - - -**Deprecated in @suspensive/react-query** - -This hook is now officially supported in TanStack Query v4.40.0+. Since TanStack Query has backported this interface, we are deprecating the backported version from @suspensive/react-query. Please migrate to the official TanStack Query interface: - -```diff -- import { useSuspenseInfiniteQuery } from '@suspensive/react-query' -+ import { useSuspenseInfiniteQuery } from '@tanstack/react-query' -``` - -For more details, see [TanStack Query PR #9334](https://github.com/TanStack/query/pull/9334). - - - -Return type of this hook has no isLoading, isError property. because `` and `` guarantee the data from this hook. In addition, this hook's options have default suspense: true, and you can provide new options to this hook like [useInfiniteQuery](https://tanstack.com/query/v4/docs/react/reference/useInfiniteQuery) of @tanstack/react-query. - -```tsx /useSuspenseInfiniteQuery/ -import { useSuspenseInfiniteQuery } from '@suspensive/react-query' - -const Example = () => { - const query = useSuspenseInfiniteQuery({ - queryKey, - queryFn, - }) // suspense:true is default. - - // No need to do type narrowing by isSuccess. - query.data // InfiniteData -} -``` - - - -```tsx PostList.tsx active -import { useSuspenseInfiniteQuery } from '@suspensive/react-query' -import { useEffect, Fragment } from 'react' -import { getPosts } from './api' - -export const PostList = () => { - const { data, isFetchingNextPage, isFetched, hasNextPage, fetchNextPage } = - useSuspenseInfiniteQuery({ - queryKey: ['posts'], - queryFn: ({ pageParam = 1 }) => getPosts(pageParam), - getNextPageParam: (lastPage, allPages) => - lastPage.skip + lastPage.limit < lastPage.total - ? allPages.length + 1 - : undefined, - }) - - useEffect(() => { - if (!isFetchingNextPage && isFetched) { - window.scrollTo({ - top: document.body.scrollHeight, - behavior: 'smooth', - }) - } - }, [isFetchingNextPage, isFetched]) - - return ( -
-
    - {data.pages.map((page, i) => ( - - {page.data.map((post) => ( -
  1. - {post.title} -
  2. - ))} -
    - ))} -
- -
- ) -} -``` - -```tsx Example.tsx -import { Suspense } from '@suspensive/react' -import { PostList } from './PostList' - -export const Example = () => { - return ( - Loading...}> - - - ) -} -``` - -```tsx api.ts -type Post = { - userId: number - id: number - title: string - body: string -} - -export const getPosts = async ( - page: number -): Promise<{ - data: Post[] - page: number - total: number - limit: number - skip: number -}> => { - const response = await fetch( - `https://jsonplaceholder.typicode.com/posts?_page=${page}&_limit=10` - ) - - if (!response.ok) { - throw new Error('An error occurred') - } - - const data = await response.json() - - return { - data, - page, - total: 100, - limit: 10, - skip: (page - 1) * 10, - } -} -``` - -
- -### Motivation - -If you turn suspense on in @tanstack/react-query, You can use [useInfiniteQuery](https://tanstack.com/query/v4/docs/react/reference/useInfiniteQuery) with `` and ``. - -```tsx /useInfiniteQuery/ -import { useInfiniteQuery } from '@tanstack/react-query' - -const Example = () => { - const query = useInfiniteQuery({ - queryKey, - queryFn, - suspense: true, - }) - - query.data // InfiniteData | undefined - - if (query.isSuccess) { - query.data // InfiniteData - } -} -``` - -but useInfiniteQuery's return type query.data will always be fulfilled because of `` as parent of this component. - -This is why @suspensive/react-query provide **useSuspenseInfiniteQuery**. - - - -Focus on successful cases. - -Now we can focus on the component, as data fetching will always succeed. - - - -### Version History - -| Version | Changes | -| -------- | ----------------------------------------------------------------------------------------------------------------------------------------- | -| `v3.0.0` | `networkMode` has been fixed to `'always'`. For more details, please refer to the [Migration to v3 guide](./migration/migrate-to-v3.mdx). | diff --git a/docs/suspensive.org/src/content/en/docs/react-query/useSuspenseQueries.mdx b/docs/suspensive.org/src/content/en/docs/react-query/useSuspenseQueries.mdx deleted file mode 100644 index 36a73a11a..000000000 --- a/docs/suspensive.org/src/content/en/docs/react-query/useSuspenseQueries.mdx +++ /dev/null @@ -1,194 +0,0 @@ ---- -robots: noindex -description: 'Deprecated — useSuspenseQueries is now available in TanStack Query v4.40.0+. Use the official TanStack Query version instead.' ---- - -import { Callout, Sandpack } from '@/components' - -# useSuspenseQueries - - - -**Deprecated in @suspensive/react-query** - -This hook is now officially supported in TanStack Query v4.40.0+. Since TanStack Query has backported this interface, we are deprecating the backported version from @suspensive/react-query. Please migrate to the official TanStack Query interface: - -```diff -- import { useSuspenseQueries } from '@suspensive/react-query' -+ import { useSuspenseQueries } from '@tanstack/react-query' -``` - -For more details, see [TanStack Query PR #9140](https://github.com/TanStack/query/pull/9140). - - - -There is no isLoading or isError in the return type of this hook. This is because `` and `` guarantee the data of this hook. Also, in the options of this hook, suspense is set to true by default. You can use @tanstack/react-query's [useQueries](https://tanstack.com/query/v4/docs/react/reference/useQueries) for the new options you need. - -```tsx /useSuspenseQueries/ -import { useSuspenseQueries } from '@suspensive/react-query' - -const Example = () => { - const [query1, query2] = useSuspenseQueries({ - queries: [ - { queryKey: [1], queryFn }, - { queryKey: [2], queryFn }, - ], - }) // suspense: true is the default. - - // No type narrowing required with isSuccess. - query1.data // TData - query2.data // TData -} -``` - - - -```tsx Post.tsx active -import { useSuspenseQueries } from '@suspensive/react-query' -import { getPost, getComments } from './api' - -export const Post = ({ postId }: { postId: number }) => { - const [postQuery, commentQuery] = useSuspenseQueries({ - queries: [ - { queryKey: ['posts', postId], queryFn: () => getPost(postId) }, - { queryKey: ['comments', postId], queryFn: () => getComments(postId) }, - ], - }) - - return ( -
-

{postQuery.data.title}

-

{postQuery.data.body}

-

Comments

-
    - {commentQuery.data.map((comment) => ( -
  • {comment.body}
  • - ))} -
-
- ) -} -``` - -```tsx Example.tsx -import { Suspense } from '@suspensive/react' -import { useState } from 'react' -import { Post } from './Post' - -export const Example = () => { - const [postId, setPostId] = useState(1) - - return ( -
- - - Loading...
}> - -
- - ) -} -``` - -```tsx /api.ts -type Post = { - userId: number - id: number - title: string - body: string -} - -export const getPost = async (id: number): Promise => { - const response = await fetch( - `https://jsonplaceholder.typicode.com/posts/${id}` - ) - - if (!response.ok) { - throw new Error('An error occurred') - } - - const data = await response.json() - - return data -} - -type Comment = { - postId: number - id: number - name: string - email: string - body: string -} - -export const getComments = async (postId: number): Promise => { - const response = await fetch( - `https://jsonplaceholder.typicode.com/comments?postId=${postId}` - ) - - if (!response.ok) { - throw new Error('An error occurred') - } - - const data = await response.json() - - return data -} -``` - - - -### Motivation - -You can use [useQueries](https://tanstack.com/query/v4/docs/react/reference/useQueries) with `` and `` by using the suspense option of @tanstack/react-query useQueries. - -```tsx /useQueries/ -import { useQueries } from '@tanstack/react-query' - -const Example = () => { - const [query1, query2] = useQueries({ - queries: [ - { queryKey: [1], queryFn, suspense: true }, - { queryKey: [2], queryFn, suspense: true }, - ], - }) - - query1.data // TData | undefined - query2.data // TData | undefined - - if (query1.isSuccess) { - query1.data // TData - } - if (query2.isSuccess) { - query2.data // TData - } -} -``` - -The return type of useQueries (query1.data, query2.data) will always be a success case thanks to this component's parents, `` and ``. -But @tanstack/react-query doesn't express this in its TypeScript types. - -That's why @suspensive/react-query provides **useSuspenseQueries**. - - - -Focus on successful cases. - -Now we can focus only on successful cases as fetching always succeeds inside our component. - - - -### Version History - -| Version | Changes | -| -------- | ----------------------------------------------------------------------------------------------------------------------------------------- | -| `v3.0.0` | `networkMode` has been fixed to `'always'`. For more details, please refer to the [Migration to v3 guide](./migration/migrate-to-v3.mdx). | diff --git a/docs/suspensive.org/src/content/en/docs/react-query/useSuspenseQuery.mdx b/docs/suspensive.org/src/content/en/docs/react-query/useSuspenseQuery.mdx deleted file mode 100644 index 6fc403ecd..000000000 --- a/docs/suspensive.org/src/content/en/docs/react-query/useSuspenseQuery.mdx +++ /dev/null @@ -1,156 +0,0 @@ ---- -robots: noindex -description: 'Deprecated — useSuspenseQuery is now available in TanStack Query v4.40.0+. Use the official TanStack Query version instead.' ---- - -import { Callout, Sandpack } from '@/components' - -# useSuspenseQuery - - - -**Deprecated in @suspensive/react-query** - -This hook is now officially supported in TanStack Query v4.40.0+. Since TanStack Query has backported this interface, we are deprecating the backported version from @suspensive/react-query. Please migrate to the official TanStack Query interface: - -```diff -- import { useSuspenseQuery } from '@suspensive/react-query' -+ import { useSuspenseQuery } from '@tanstack/react-query' -``` - -For more details, see [TanStack Query PR #9140](https://github.com/TanStack/query/pull/9140). - - - -There is no isLoading or isError in the return type of this hook. This is because `` and `` guarantee the data of this hook. Also, in the options of this hook, suspense is set to true by default. Any new options you need can be used like @tanstack/react-query's [useQuery](https://tanstack.com/query/v4/docs/react/reference/useQuery). - -```tsx /useSuspenseQuery/ -import { useSuspenseQuery } from '@suspensive/react-query' - -const Example = () => { - const query = useSuspenseQuery({ - queryKey, - queryFn, - }) // suspense: true is the default. - - // No type narrowing required with isSuccess. - query.data // TData -} -``` - - - -```tsx Post.tsx active -import { useSuspenseQuery } from '@suspensive/react-query' -import { getPost } from './api' - -export const Post = ({ postId }: { postId: number }) => { - const { data } = useSuspenseQuery({ - queryKey: ['posts', postId], - queryFn: () => getPost(postId), - }) - - return ( -
-

{data.title}

-

{data.body}

-
- ) -} -``` - -```tsx Example.tsx -import { Suspense } from '@suspensive/react' -import { useState } from 'react' -import { Post } from './Post' - -export const Example = () => { - const [postId, setPostId] = useState(1) - - return ( -
- - - Loading...
}> - -
- - ) -} -``` - -```tsx /api.ts -type Post = { - userId: number - id: number - title: string - body: string -} - -export const getPost = async (id: number): Promise => { - const response = await fetch( - `https://jsonplaceholder.typicode.com/posts/${id}` - ) - - if (!response.ok) { - throw new Error('An error occurred') - } - - const data = await response.json() - - return data -} -``` - - - -### Motivation - -You can use [useQuery](https://tanstack.com/query/v4/docs/react/reference/useQuery) with `` and `` by using the suspense option in @tanstack/react-query. - -```tsx /useQuery/ -import { useQuery } from '@tanstack/react-query' - -const Example = () => { - const query = useQuery({ - queryKey, - queryFn, - suspense: true, - }) - - query.data // TData | undefined - - if (query.isSuccess) { - query.data // TData - } -} -``` - -The return type of useQuery (query.data) will always be a success case thanks to this component's parents, `` and ``. -But @tanstack/react-query doesn't express this in its TypeScript types. - -That's why @suspensive/react-query provides **useSuspenseQuery**. - - - -Focus on successful cases. - -Now we can focus only on successful cases as fetching always succeeds inside our component. - - - -### Version History - -| Version | Changes | -| -------- | ----------------------------------------------------------------------------------------------------------------------------------------- | -| `v3.0.0` | `networkMode` has been fixed to `'always'`. For more details, please refer to the [Migration to v3 guide](./migration/migrate-to-v3.mdx). | diff --git a/docs/suspensive.org/src/content/ko/docs/codemods/_meta.tsx b/docs/suspensive.org/src/content/ko/docs/codemods/_meta.tsx index 829f1d2b9..46c10ff30 100644 --- a/docs/suspensive.org/src/content/ko/docs/codemods/_meta.tsx +++ b/docs/suspensive.org/src/content/ko/docs/codemods/_meta.tsx @@ -7,6 +7,7 @@ export default { type: 'separator', title: 'Codemods', }, + migrateToV4: { title: 'v4로 마이그레이션' }, tanstackQueryImport: { title: 'TanStack Query로 import 경로 변경' }, migrateQueryClientConsumerProps: { title: ' Props 변환', diff --git a/docs/suspensive.org/src/content/ko/docs/codemods/migrateToV4.mdx b/docs/suspensive.org/src/content/ko/docs/codemods/migrateToV4.mdx new file mode 100644 index 000000000..f1a51ba38 --- /dev/null +++ b/docs/suspensive.org/src/content/ko/docs/codemods/migrateToV4.mdx @@ -0,0 +1,63 @@ +--- +description: '@suspensive/react-query v4의 브레이킹 체인지를 대응하는 코드모드.' +--- + +import { Callout } from '@/components' + +# v4로 마이그레이션 + + + +- `@suspensive/react-query` v3 환경에서 v4로 업데이트할 때 추천합니다. +- `package.json`을 수정하지 않습니다. 실행 후 의존성에서 `@suspensive/react-query`를 제거하고 `@suspensive/react-query-4` 또는 `@suspensive/react-query-5`가 설치되어 있는지 확인하세요. + + + +`@suspensive/react-query` v4의 코드 레벨 브레이킹 체인지는 두 가지입니다. + +1. 통합 패키지 `@suspensive/react-query`가 제거됩니다. 모든 import는 버전별 패키지 `@suspensive/react-query-4` 또는 `@suspensive/react-query-5`를 가리켜야 합니다. +2. `@tanstack/react-query`에서 제공되는 API(`queryOptions`, `mutationOptions` 등)는 `@suspensive/react-query-4, 5`에서도 제거됩니다. 이들은 `@tanstack/react-query`에서 직접 import 해야 합니다. + +```bash filename="Terminal" +npx @suspensive/codemods migrate-to-v4 . +``` + +예: + +```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' +``` + +변환 후: + +```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' +``` + +## 버전 감지 + +현재 작업 디렉토리에서 위로 올라가며 가장 가까운 `package.json`을 확인해 `@tanstack/react-query`의 v4와 v5 중 어느 버전에 의존하는지 판단합니다. 감지된 메이저 버전은 `@suspensive/react-query`를 버전별 source 로 재작성할 때 사용됩니다. + +감지에 실패한 경우 v5로 fallback 하며 경고를 출력합니다. 명시적으로 대상을 지정하려면 실행 전 `SUSPENSIVE_RQ_TARGET` 환경 변수를 `4` 또는 `5`로 설정합니다. + +```bash filename="Terminal" +SUSPENSIVE_RQ_TARGET=4 npx @suspensive/codemods migrate-to-v4 . +``` + +## 주의사항 + +- `package.json`을 수정하지 않습니다. 실행 후 의존성에서 `@suspensive/react-query`를 제거하고 `@suspensive/react-query-4` 또는 `@suspensive/react-query-5`가 설치되어 있는지 확인하세요. diff --git a/docs/suspensive.org/src/content/ko/docs/codemods/tanstackQueryImport.mdx b/docs/suspensive.org/src/content/ko/docs/codemods/tanstackQueryImport.mdx index b290d0f81..a96de308c 100644 --- a/docs/suspensive.org/src/content/ko/docs/codemods/tanstackQueryImport.mdx +++ b/docs/suspensive.org/src/content/ko/docs/codemods/tanstackQueryImport.mdx @@ -8,12 +8,13 @@ import { Callout } from '@/components' -- `@suspensive/react-query` & `@tanstack/react-query@4` 환경에서 `@tanstack/react-query@5`로 업데이트 하는 경우 추천합니다. -- `@suspensive/react-query-4@3.3.0`부터 `queryOptions`, `infiniteQueryOption`, `useSuspenseQuery`, `useSuspenseQueries`가 deprecated 되었습니다. (`@tanstack/react-query@4.40.0` 버전에서 공식적으로 `useSuspenseQuery`, `queryOptions` 지원합니다.) +- `@suspensive/react-query`, `@suspensive/react-query-4`, `@suspensive/react-query-5`에서 `@tanstack/react-query` API로 전환하고자 할 때 추천합니다. +- v4에서는 `@tanstack/react-query`에 제공되는 API들이 `@suspensive/react-query-4,5`에서 제거됩니다. `@tanstack/react-query`로 전환하고자 할 때 추천합니다. -`@suspensive/react-query`의 API 중 `@tanstack/react-query`에서 공식 제공하는 API일 경우 `deprecated`로 표시됩니다. +`@suspensive/react-query`의 API 중 `@tanstack/react-query`에서 공식 제공하는 API일 경우 `deprecated`로 표시됩니다. + 이는 `@tanstack/react-query`에 동일한 API인 Suspense Hooks와 `queryOptions`, `infiniteQueryOption`을 `@suspensive/react-query`가 제공하고 있어, 개발자가 `@tanstack/react-query`의 API를 우선적으로 사용하도록 유도하기 위함입니다. ```bash filename="Terminal" @@ -25,13 +26,18 @@ npx @suspensive/codemods tanstack-query-import . 예: ```tsx /@suspensive/ -import { queryOptions } from '@suspensive/react-query' -import { useSuspenseQuery } from '@suspensive/react-query-5' // 버전 패키지도 변환됩니다! +import { + queryOptions, + mutationOptions, + SuspenseQuery, +} from '@suspensive/react-query-5' +import { useSuspenseQuery } from '@suspensive/react-query' ``` 변환 후: ```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' ``` diff --git a/docs/suspensive.org/src/content/ko/docs/react-query/_meta.tsx b/docs/suspensive.org/src/content/ko/docs/react-query/_meta.tsx index 344458421..86a30e1cd 100644 --- a/docs/suspensive.org/src/content/ko/docs/react-query/_meta.tsx +++ b/docs/suspensive.org/src/content/ko/docs/react-query/_meta.tsx @@ -4,10 +4,12 @@ import type MetaEn from '../../../en/docs/react-query/_meta' export default { motivation: { title: '동기' }, installation: { title: '설치하기' }, + migration: { title: '마이그레이션 가이드' }, '--- API Reference': { type: 'separator', title: 'API 문서', }, + createGetQueryClient: { title: 'createGetQueryClient' }, SuspenseQuery: { title: '' }, SuspenseQueries: { title: '' }, SuspenseInfiniteQuery: { title: '' }, @@ -17,22 +19,4 @@ export default { QueriesHydration: { title: '' }, QueryClientConsumer: { title: '' }, IsFetching: { title: '' }, - 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: '더보기', - }, - migration: { title: '마이그레이션 가이드' }, } satisfies typeof MetaEn satisfies MetaRecord diff --git a/docs/suspensive.org/src/content/ko/docs/react-query/infiniteQueryOptions.mdx b/docs/suspensive.org/src/content/ko/docs/react-query/infiniteQueryOptions.mdx deleted file mode 100644 index de3e48152..000000000 --- a/docs/suspensive.org/src/content/ko/docs/react-query/infiniteQueryOptions.mdx +++ /dev/null @@ -1,164 +0,0 @@ ---- -robots: noindex ---- - -import { Callout, Sandpack } from '@/components' - -# infiniteQueryOptions - - - -**@suspensive/react-query에서 Deprecated** - -이 인터페이스는 이제 TanStack Query v4.41.0+에서 공식적으로 지원됩니다. TanStack Query에서 백포팅했으므로, @suspensive/react-query의 백포팅된 버전을 deprecated 처리합니다. 공식 TanStack Query 인터페이스로 마이그레이션하세요: - -```diff -- import { infiniteQueryOptions } from '@suspensive/react-query' -+ import { infiniteQueryOptions } from '@tanstack/react-query' -``` - -자세한 내용은 [TanStack Query PR #9334](https://github.com/TanStack/query/pull/9334)을 참고하세요. - - - -`infiniteQueryOptions`는 Infinite Query에서 queryOptions를 활용할 수 있도록 도와줍니다. 이는 [`queryOptions`](https://suspensive.org/ko/docs/react-query/queryOptions)가 사용되는 이유와 유사한 장점을 제공합니다. - -```jsx /infiniteQueryOptions/ -import { infiniteQueryOptions, useSuspenseInfiniteQuery, SuspenseInfiniteQuery } from '@suspensive/react-query' -import { useInfiniteQuery, useQueryClient } from '@tanstack/react-query' - -const postsInfiniteQueryOptions = (page) => - infiniteQueryOptions({ - queryKey: ['posts', page] as const, - queryFn: ({ - queryKey: [, page], // queryKey를 활용할 수 있습니다. - }) => fetch(`https://example.com/posts?page=${page}`).then(res => res.json()), - getNextPageParam: (lastPage) => lastPage.nextPage ?? false, - }) - -// 커스텀 쿼리 훅을 만들 필요가 없습니다. -// useInfiniteQuery, useSuspenseInfiniteQuery, SuspenseInfiniteQuery에서 직접 infiniteQueryOptions를 활용할 수 있습니다. -const postsQuery = useInfiniteQuery(postsInfiniteQueryOptions(1)) -const { data: posts, fetchNextPage, hasNextPage } = useSuspenseInfiniteQuery({ - ...postsInfiniteQueryOptions(1), - refetchInterval: 2000, // 사용처에서 확장성을 명확히 표현됩니다. -}) -const Example = () => ( - - {({ data, fetchNextPage, hasNextPage }) => ( -
- {data.pages.map((page, index) => ( -
- {page.posts.map(post => ( -
{post.title}
- ))} -
- ))} - -
- )} -
-) - -// queryClient의 메소드에서 queryKey와 queryFn을 쉽게 활용할 수 있습니다. -const queryClient = useQueryClient() -queryClient.refetchQueries(postsInfiniteQueryOptions(1)) -queryClient.prefetchQuery(postsInfiniteQueryOptions(1)) -queryClient.invalidateQueries(postsInfiniteQueryOptions(1)) -queryClient.fetchQuery(postsInfiniteQueryOptions(1)) -queryClient.resetQueries(postsInfiniteQueryOptions(1)) -queryClient.cancelQueries(postsInfiniteQueryOptions(1)) -``` - - - -```tsx Example.tsx active -import { Suspense } from '@suspensive/react' -import { - infiniteQueryOptions, - SuspenseInfiniteQuery, -} from '@suspensive/react-query' -import { useQueryClient } from '@tanstack/react-query' -import { getPosts } from './api' - -const postsInfiniteQueryOptions = (page) => - infiniteQueryOptions({ - queryKey: ['posts', page], - queryFn: ({ queryKey: [, page] }) => getPosts(page), - getNextPageParam: (lastPage) => lastPage.nextPage ?? false, - }) - -export const Example = () => { - const queryClient = useQueryClient() - - return ( -
- - Loading...
}> - - {({ data, fetchNextPage, hasNextPage }) => ( -
- {data.pages.map((page, index) => ( -
- {page.posts.map((post) => ( -
-

{post.title}

-

{post.body}

-
- ))} -
- ))} - -
- )} -
-
- - ) -} -``` - -```tsx api.ts -type Post = { - userId: number - id: number - title: string - body: string -} - -type PostsResponse = { - posts: Post[] - nextPage: number -} - -export const getPosts = async (page: number): Promise => { - const response = await fetch( - `https://jsonplaceholder.typicode.com/posts?_page=${page}&_limit=2` - ) - - if (!response.ok) { - throw new Error('An error occurred') - } - - const data = await response.json() - const nextPage = page + 1 - - return { posts: data, nextPage } -} -``` - - - -### 버전 기록 - -| Version | Changes | -| -------- | ----------------------------------------------------------------------------------------------------------------------- | -| `v3.0.0` | `networkMode`는 제거되었습니다. 자세한 내용은 [v3로 마이그레이션하기 문서](./migration/migrate-to-v3.mdx)를 참고하세요. | diff --git a/docs/suspensive.org/src/content/ko/docs/react-query/installation.mdx b/docs/suspensive.org/src/content/ko/docs/react-query/installation.mdx index c4501fd80..6b9a8576c 100644 --- a/docs/suspensive.org/src/content/ko/docs/react-query/installation.mdx +++ b/docs/suspensive.org/src/content/ko/docs/react-query/installation.mdx @@ -61,7 +61,7 @@ Suspensive 라이브러리는 모던 브라우저를 위해 최적화되었습 ```shell npm2yarn -npm install @suspensive/react-query@npm:@suspensive/react-query-5 @tanstack/react-query@5 +npm install @suspensive/react-query-5 @tanstack/react-query@5 ``` @@ -70,7 +70,7 @@ npm install @suspensive/react-query@npm:@suspensive/react-query-5 @tanstack/reac @tanstack/react-query v4는 @tanstack/react-query v5 보다 [더 낮은 버전의 브라우저를 지원](/ko/docs/react-query/motivation#v5는-구형-브라우저를-지원하지-않습니다)합니다. ```shell npm2yarn -npm install @suspensive/react-query@npm:@suspensive/react-query-4 @tanstack/react-query@4 +npm install @suspensive/react-query-4 @tanstack/react-query@4 ``` @@ -80,6 +80,35 @@ npm install @suspensive/react-query@npm:@suspensive/react-query-4 @tanstack/reac npm alias를 사용하면 코드베이스 전체에서 import 경로를 `@suspensive/react-query`로 유지할 수 있습니다. @tanstack/react-query 버전을 변경할 때 package.json의 alias만 수정하면 되며, 코드 변경이 필요하지 않습니다. +`package.json` 예시는 다음과 같습니다. + + + + +```json +{ + "dependencies": { + "@suspensive/react-query": "npm:@suspensive/react-query-5@latest", + "@tanstack/react-query": "^5" + } +} +``` + + + + +```json +{ + "dependencies": { + "@suspensive/react-query": "npm:@suspensive/react-query-4@latest", + "@tanstack/react-query": "^4" + } +} +``` + + + + diff --git a/docs/suspensive.org/src/content/ko/docs/react-query/mutationOptions.mdx b/docs/suspensive.org/src/content/ko/docs/react-query/mutationOptions.mdx index 5f267897d..84c6532d0 100644 --- a/docs/suspensive.org/src/content/ko/docs/react-query/mutationOptions.mdx +++ b/docs/suspensive.org/src/content/ko/docs/react-query/mutationOptions.mdx @@ -17,6 +17,8 @@ import { Callout, Sandpack } from '@/components' + import { mutationOptions } from '@tanstack/react-query' ``` +`@tanstack/react-query`에서 제공되는 API로 마이그레이션하려면 [`tanstack-query-import`](/docs/codemods/tanstackQueryImport) Codemod를 이용해주세요. + `mutationOptions`는 Mutation에서 옵션 객체를 쉽게 재사용하고 일관성 있게 관리할 수 있도록 도와줍니다. 이는 [`queryOptions`](/docs/react-query/queryOptions)가 사용되는 이유와 유사한 장점을 제공합니다. diff --git a/docs/suspensive.org/src/content/ko/docs/react-query/queryOptions.mdx b/docs/suspensive.org/src/content/ko/docs/react-query/queryOptions.mdx deleted file mode 100644 index aba787c25..000000000 --- a/docs/suspensive.org/src/content/ko/docs/react-query/queryOptions.mdx +++ /dev/null @@ -1,137 +0,0 @@ ---- -robots: noindex ---- - -import { Callout, Sandpack } from '@/components' - -# queryOptions - - - -**@suspensive/react-query에서 Deprecated** - -이 인터페이스는 이제 TanStack Query v4.40.0+에서 공식적으로 지원됩니다. TanStack Query에서 백포팅했으므로, @suspensive/react-query의 백포팅된 버전을 deprecated 처리합니다. 공식 TanStack Query 인터페이스로 마이그레이션하세요: - -```diff -- import { queryOptions } from '@suspensive/react-query' -+ import { queryOptions } from '@tanstack/react-query' -``` - -자세한 내용은 [TanStack Query PR #9140](https://github.com/TanStack/query/pull/9140)을 참고하세요. - - - -TanStack Query의 메인테이너 [Tkdodo의 TanStack Query v5의 queryOptions 설명 영상](https://youtu.be/bhE3wuB_TuA?feature=shared&t=1697)에서 이 interface가 필요한 이유를 잘 설명되어 있습니다. -TanStack Query v4에서도 queryOptions를 활용할 수 있습니다. - -1. queryKey와 queryFn을 묶어서 처리해 queryKey관리가 쉬워집니다. -2. 불필요한 커스텀 쿼리 훅을 제거할 수 있습니다. TanStack Query v4의 `useQuery`, `useQueries`, Suspensive React Query의 `useSuspenseQuery`, `useSuspenseQueries`, `SuspenseQuery`에 모두 직접 사용할 수 있기 때문입니다. -3. TanStack Query v5에는 이미 queryOptions가 제공되고 있기 때문에 TanStack Query v4에서 TanStack Query v5로의 마이그레이션이 쉬워집니다. - -```jsx /queryOptions/ -import { queryOptions, useSuspenseQuery, useSuspenseQueries, SuspenseQuery } from '@suspensive/react-query' -import { useQuery, useQueries, useQueryClient } from '@tanstack/react-query' - -const postQueryOptions = (postId) => - queryOptions({ - queryKey: ['posts', postId] as const, - queryFn: ({ - queryKey: [, postId], // queryKey를 활용할 수 있습니다. - }) => fetch(`https://example.com/posts/${postId}`), - }) - -// 커스텀 쿼리 훅을 만들 필요가 없습니다. -// useQuery, useQueries, useSuspenseQuery, useSuspenseQueries, SuspenseQuery에서 직접 queryOptions를 활용할 수 있습니다. -const post1Query = useQuery(postQueryOptions(1)) -const { data: post1 } = useSuspenseQuery({ - ...postQueryOptions(1), - refetchInterval: 2000, // 사용처에서 확장성을 명확히 표현됩니다. -}) -const [post1Query, post2Query] = useQueries({ - queries: [postQueryOptions(1), { ...postQueryOptions(2), refetchInterval: 2000 }], -}) -const [{ data: post1 }, { data: post2 }] = useSuspenseQueries({ - queries: [postQueryOptions(1), { ...postQueryOptions(2), refetchInterval: 2000 }], -}) -const Example = () => {({ data: post1 }) => <>{post1.text}} - -// queryClient의 메소드에서 queryKey와 queryFn을 쉽게 활용할 수 있습니다. -const queryClient = useQueryClient() -queryClient.refetchQueries(postQueryOptions(1)) -queryClient.prefetchQuery(postQueryOptions(1)) -queryClient.invalidateQueries(postQueryOptions(1)) -queryClient.fetchQuery(postQueryOptions(1)) -queryClient.resetQueries(postQueryOptions(1)) -queryClient.cancelQueries(postQueryOptions(1)) - -``` - - - -```tsx Example.tsx active -import { Suspense } from '@suspensive/react' -import { queryOptions, SuspenseQuery } from '@suspensive/react-query' -import { useQueryClient } from '@tanstack/react-query' -import { getPost } from './api' - -const postQueryOptions = (postId: number) => - queryOptions({ - queryKey: ['posts', postId], - queryFn: () => getPost(postId), - }) - -export const Example = () => { - const queryClient = useQueryClient() - - return ( -
- - Loading...
}> - - {({ data }) => { - return ( -
-

{data.title}

-

{data.body}

-
- ) - }} -
-
- - ) -} -``` - -```tsx api.ts -type Post = { - userId: number - id: number - title: string - body: string -} - -export const getPost = async (id: number): Promise => { - const response = await fetch( - `https://jsonplaceholder.typicode.com/posts/${id}` - ) - - if (!response.ok) { - throw new Error('An error occurred') - } - - const data = await response.json() - - return data -} -``` - - - -### 버전 기록 - -| Version | Changes | -| -------- | ----------------------------------------------------------------------------------------------------------------------- | -| `v3.0.0` | `networkMode`는 제거되었습니다. 자세한 내용은 [v3로 마이그레이션하기 문서](./migration/migrate-to-v3.mdx)를 참고하세요. | diff --git a/docs/suspensive.org/src/content/ko/docs/react-query/usePrefetchInfiniteQuery.mdx b/docs/suspensive.org/src/content/ko/docs/react-query/usePrefetchInfiniteQuery.mdx deleted file mode 100644 index d9dc6f887..000000000 --- a/docs/suspensive.org/src/content/ko/docs/react-query/usePrefetchInfiniteQuery.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -description: 'usePrefetchInfiniteQuery 훅으로 무한 쿼리 프리페치. 렌더 전에 페이지네이션 데이터 사전 로드.' ---- - -import { Callout, Sandpack } from '@/components' - -# usePrefetchInfiniteQuery - -usePrefetchInfiniteQuery는 아무것도 반환하지 않으며, useSuspenseInfiniteQuery를 사용하는 컴포넌트를 래핑하는 suspense boundary가 렌더 되기전에 prefetch를 발생시키는 데에 사용합니다. - -```jsx /usePrefetchInfiniteQuery/ -import { - usePrefetchInfiniteQuery, - useSuspenseInfiniteQuery, -} from '@suspensive/react-query' - -const PostsPage = ({ postId }) => { - usePrefetchInfiniteQuery({ - queryKey: ['posts'], - queryFn: () => getPosts(), - }) // suspense 경계 전에 prefetch를 발생 시키는 데에 사용합니다 - - return ( - Loading...}> - - - ) -} - -export const Posts = () => { - const postsInfiniteQuery = useSuspenseInfiniteQuery({ - queryKey: ['posts'], - queryFn: () => getPosts(), - }) - - return <>... -} -``` diff --git a/docs/suspensive.org/src/content/ko/docs/react-query/usePrefetchQuery.mdx b/docs/suspensive.org/src/content/ko/docs/react-query/usePrefetchQuery.mdx deleted file mode 100644 index 72d0aa2bd..000000000 --- a/docs/suspensive.org/src/content/ko/docs/react-query/usePrefetchQuery.mdx +++ /dev/null @@ -1,94 +0,0 @@ ---- -description: 'usePrefetchQuery 훅으로 쿼리 프리페치. 컴포넌트 렌더 전에 데이터 페칭 시작.' ---- - -import { Callout, Sandpack } from '@/components' - -# usePrefetchQuery - -usePrefetchQuery는 아무것도 반환하지 않으며, useSuspenseQuery를 사용하는 컴포넌트를 래핑하는 suspense boundary가 렌더 되기전에 prefetch를 발생시키는 데에 사용합니다. - -```jsx /usePrefetchQuery/ -import { usePrefetchQuery, useSuspenseQuery } from '@suspensive/react-query' - -const PostPage = ({ postId }) => { - usePrefetchQuery({ - queryKey: ['posts', postId], - queryFn: () => getPost(postId), - }) // suspense경계 전에 prefetch를 발생 시키는 데에 사용합니다 - - return ( - Loading...}> - - - ) -} - -export const Post = ({ postId }) => { - const { data } = useSuspenseQuery({ - queryKey: ['posts', postId], - queryFn: () => getPost(postId), - }) - - return <>... -} -``` - - - -```tsx Example.tsx active -import { Suspense } from '@suspensive/react' -import { usePrefetchQuery, useSuspenseQuery } from '@suspensive/react-query' -import { useState } from 'react' - -export const Example = () => { - const [postId, setPostId] = useState(1) - usePrefetchQuery({ - queryKey: ['posts', postId], - queryFn: () => getPost(postId), - }) // suspense경계 전에 prefetch를 발생 시키는 데에 사용합니다 - - return ( -
- - - Loading...
}> - -
- - ) -} - -const Post = ({ postId }: { postId: number }) => { - const { data } = useSuspenseQuery({ - queryKey: ['posts', postId], - queryFn: () => getPost(postId), - }) - - return ( -
-

{data.title}

-

{data.body}

-
- ) -} - -const getPost = (postId: number) => - fetch(`https://jsonplaceholder.typicode.com/posts/${postId}`).then<{ - id: number - title: string - body: string - }>((res) => res.json()) -``` - - diff --git a/docs/suspensive.org/src/content/ko/docs/react-query/useSuspenseInfiniteQuery.mdx b/docs/suspensive.org/src/content/ko/docs/react-query/useSuspenseInfiniteQuery.mdx deleted file mode 100644 index dd7729973..000000000 --- a/docs/suspensive.org/src/content/ko/docs/react-query/useSuspenseInfiniteQuery.mdx +++ /dev/null @@ -1,191 +0,0 @@ ---- -robots: noindex ---- - -import { Callout, Sandpack } from '@/components' - -# useSuspenseInfiniteQuery - - - -**@suspensive/react-query에서 Deprecated** - -이 훅은 이제 TanStack Query v4.40.0+에서 공식적으로 지원됩니다. TanStack Query에서 백포팅했으므로, @suspensive/react-query의 백포팅된 버전을 deprecated 처리합니다. 공식 TanStack Query 인터페이스로 마이그레이션하세요: - -```diff -- import { useSuspenseInfiniteQuery } from '@suspensive/react-query' -+ import { useSuspenseInfiniteQuery } from '@tanstack/react-query' -``` - -자세한 내용은 [TanStack Query PR #9334](https://github.com/TanStack/query/pull/9334)을 참고하세요. - - - -이 훅의 return 타입에는 isLoading, isError이 없습니다. ``와 ``가 이 훅의 data를 보장해주기 때문입니다. 또한, 이 훅의 options에는 기본적으로 suspense가 true입니다. 필요한 새 options는 @tanstack/react-query의 [useInfiniteQuery](https://tanstack.com/query/v4/docs/react/reference/useInfiniteQuery)처럼 사용하면 됩니다. - -```tsx /useSuspenseInfiniteQuery/ -import { useSuspenseInfiniteQuery } from '@suspensive/react-query' - -const Example = () => { - const query = useSuspenseInfiniteQuery({ - queryKey, - queryFn, - }) // suspense 옵션은 true가 기본입니다. - - // isSuccess으로 type narrowing이 필요하지 않습니다. - query.data // InfiniteData -} -``` - - - -```tsx Posts.tsx active -import { useSuspenseInfiniteQuery } from '@suspensive/react-query' -import { useEffect, Fragment } from 'react' -import { getPosts } from './api' - -export const Posts = () => { - const { data, isFetchingNextPage, isFetched, hasNextPage, fetchNextPage } = - useSuspenseInfiniteQuery({ - queryKey: ['posts'], - queryFn: ({ pageParam = 1 }) => getPosts(pageParam), - getNextPageParam: (lastPage, allPages) => - lastPage.skip + lastPage.limit < lastPage.total - ? allPages.length + 1 - : undefined, - }) - - useEffect(() => { - if (!isFetchingNextPage && isFetched) { - window.scrollTo({ - top: document.body.scrollHeight, - behavior: 'smooth', - }) - } - }, [isFetchingNextPage, isFetched]) - - return ( -
-
    - {data.pages.map((page, i) => ( - - {page.data.map((post) => ( -
  1. - {post.title} -
  2. - ))} -
    - ))} -
- -
- ) -} -``` - -```tsx Example.tsx -import { Suspense } from '@suspensive/react' -import { Posts } from './Posts' - -export const Example = () => { - return ( - Loading...}> - - - ) -} -``` - -```tsx api.ts -type Post = { - userId: number - id: number - title: string - body: string -} - -export const getPosts = async ( - page: number -): Promise<{ - data: Post[] - page: number - total: number - limit: number - skip: number -}> => { - const response = await fetch( - `https://jsonplaceholder.typicode.com/posts?_page=${page}&_limit=10` - ) - - if (!response.ok) { - throw new Error('An error occurred') - } - - const data = await response.json() - - return { - data, - page, - total: 100, - limit: 10, - skip: (page - 1) * 10, - } -} -``` - -
- -### 동기 - -@tanstack/react-query에서 suspense 옵션을 사용하면, [useInfiniteQuery](https://tanstack.com/query/v4/docs/react/reference/useInfiniteQuery)를 ``, ``와 함께 사용할 수 있습니다. - -```tsx /useInfiniteQuery/ -import { useInfiniteQuery } from '@tanstack/react-query' - -const Example = () => { - const query = useInfiniteQuery({ - queryKey, - queryFn, - suspense: true, - }) - - query.data // InfiniteData | undefined - - if (query.isSuccess) { - query.data // InfiniteData - } -} -``` - -하지만 useInfiniteQuery의 return 타입(query.data)은 이 컴포넌트의 부모인 `` 덕분에 항상 성공한 경우일 것입니다. - -이것이 @suspensive/react-query가 **useSuspenseInfiniteQuery**를 제공하는 이유입니다. - - - -성공한 케이스에 집중하세요. - -이제 우리는 컴포넌트 내부에서 fetching이 항상 성공하므로 성공한 경우에만 집중할 수 있습니다. - - - -### 버전 기록 - -| Version | Changes | -| -------- | ------------------------------------------------------------------------------------------------------------------------------------ | -| `v3.0.0` | `networkMode`는 `'always'`로 고정되었습니다. 자세한 내용은 [v3로 마이그레이션하기 문서](./migration/migrate-to-v3.mdx)를 참고하세요. | diff --git a/docs/suspensive.org/src/content/ko/docs/react-query/useSuspenseQueries.mdx b/docs/suspensive.org/src/content/ko/docs/react-query/useSuspenseQueries.mdx deleted file mode 100644 index 414751b0e..000000000 --- a/docs/suspensive.org/src/content/ko/docs/react-query/useSuspenseQueries.mdx +++ /dev/null @@ -1,193 +0,0 @@ ---- -robots: noindex ---- - -import { Callout, Sandpack } from '@/components' - -# useSuspenseQueries - - - -**@suspensive/react-query에서 Deprecated** - -이 훅은 이제 TanStack Query v4.40.0+에서 공식적으로 지원됩니다. TanStack Query에서 백포팅했으므로, @suspensive/react-query의 백포팅된 버전을 deprecated 처리합니다. 공식 TanStack Query 인터페이스로 마이그레이션하세요: - -```diff -- import { useSuspenseQueries } from '@suspensive/react-query' -+ import { useSuspenseQueries } from '@tanstack/react-query' -``` - -자세한 내용은 [TanStack Query PR #9140](https://github.com/TanStack/query/pull/9140)을 참고하세요. - - - -이 훅의 return 타입에는 isLoading, isError이 없습니다. ``와 ``가 이 훅의 data를 보장해주기 때문입니다. 또한, 이 훅의 options에는 기본적으로 suspense가 true입니다. 필요한 새 options는 @tanstack/react-query의 [useQueries](https://tanstack.com/query/v4/docs/react/reference/useQueries)처럼 사용하면 됩니다. - -```tsx /useSuspenseQueries/ -import { useSuspenseQueries } from '@suspensive/react-query' - -const Example = () => { - const [query1, query2] = useSuspenseQueries({ - queries: [ - { queryKey: [1], queryFn }, - { queryKey: [2], queryFn }, - ], - }) // suspense: true가 기본입니다. - - // isSuccess으로 type narrowing이 필요하지 않습니다. - query1.data // TData - query2.data // TData -} -``` - - - -```tsx Post.tsx active -import { useSuspenseQueries } from '@suspensive/react-query' -import { getPost, getComments } from './api' - -export const Post = ({ postId }: { postId: number }) => { - const [postQuery, commentQuery] = useSuspenseQueries({ - queries: [ - { queryKey: ['posts', postId], queryFn: () => getPost(postId) }, - { queryKey: ['comments', postId], queryFn: () => getComments(postId) }, - ], - }) - - return ( -
-

{postQuery.data.title}

-

{postQuery.data.body}

-

Comments

-
    - {commentQuery.data.map((comment) => ( -
  • {comment.body}
  • - ))} -
-
- ) -} -``` - -```tsx Example.tsx -import { Suspense } from '@suspensive/react' -import { useState } from 'react' -import { Post } from './Post' - -export const Example = () => { - const [postId, setPostId] = useState(1) - - return ( -
- - - Loading...
}> - -
- - ) -} -``` - -```tsx /api.ts -type Post = { - userId: number - id: number - title: string - body: string -} - -export const getPost = async (id: number): Promise => { - const response = await fetch( - `https://jsonplaceholder.typicode.com/posts/${id}` - ) - - if (!response.ok) { - throw new Error('An error occurred') - } - - const data = await response.json() - - return data -} - -type Comment = { - postId: number - id: number - name: string - email: string - body: string -} - -export const getComments = async (postId: number): Promise => { - const response = await fetch( - `https://jsonplaceholder.typicode.com/comments?postId=${postId}` - ) - - if (!response.ok) { - throw new Error('An error occurred') - } - - const data = await response.json() - - return data -} -``` - - - -### 동기 - -@tanstack/react-query [useQueries](https://tanstack.com/query/v4/docs/react/reference/useQueries)의 suspense 옵션을 사용하면, useQueries를 ``, ``와 함께 사용할 수 있습니다. - -```tsx /useQueries/ -import { useQueries } from '@tanstack/react-query' - -const Example = () => { - const [query1, query2] = useQueries({ - queries: [ - { queryKey: [1], queryFn, suspense: true }, - { queryKey: [2], queryFn, suspense: true }, - ], - }) - - query1.data // TData | undefined - query2.data // TData | undefined - - if (query1.isSuccess) { - query1.data // TData - } - if (query2.isSuccess) { - query2.data // TData - } -} -``` - -useQueries의 return 타입(query1.data, query2.data)은 이 컴포넌트의 부모인 ``와 `` 덕분에 항상 성공한 경우일 것입니다. -하지만 @tanstack/react-query는 타입적으로 이것을 표현하지 않습니다. - -이것이 @suspensive/react-query가 **useSuspenseQueries**를 제공하는 이유입니다. - - - -성공한 케이스에 집중하세요. - -이제 우리는 컴포넌트 내부에서 fetching이 항상 성공하므로 성공한 경우에만 집중할 수 있습니다. - - - -### 버전 기록 - -| Version | Changes | -| -------- | ------------------------------------------------------------------------------------------------------------------------------------ | -| `v3.0.0` | `networkMode`는 `'always'`로 고정되었습니다. 자세한 내용은 [v3로 마이그레이션하기 문서](./migration/migrate-to-v3.mdx)를 참고하세요. | diff --git a/docs/suspensive.org/src/content/ko/docs/react-query/useSuspenseQuery.mdx b/docs/suspensive.org/src/content/ko/docs/react-query/useSuspenseQuery.mdx deleted file mode 100644 index 0c064df76..000000000 --- a/docs/suspensive.org/src/content/ko/docs/react-query/useSuspenseQuery.mdx +++ /dev/null @@ -1,155 +0,0 @@ ---- -robots: noindex ---- - -import { Callout, Sandpack } from '@/components' - -# useSuspenseQuery - - - -**@suspensive/react-query에서 Deprecated** - -이 훅은 이제 TanStack Query v4.40.0+에서 공식적으로 지원됩니다. TanStack Query에서 백포팅했으므로, @suspensive/react-query의 백포팅된 버전을 deprecated 처리합니다. 공식 TanStack Query 인터페이스로 마이그레이션하세요: - -```diff -- import { useSuspenseQuery } from '@suspensive/react-query' -+ import { useSuspenseQuery } from '@tanstack/react-query' -``` - -자세한 내용은 [TanStack Query PR #9140](https://github.com/TanStack/query/pull/9140)을 참고하세요. - - - -이 훅의 return 타입에는 isLoading, isError이 없습니다. ``와 ``가 이 훅의 data를 보장해주기 때문입니다. 또한, 이 훅의 options에는 기본적으로 suspense가 true입니다. 필요한 새 options는 @tanstack/react-query의 [useQuery](https://tanstack.com/query/v4/docs/react/reference/useQuery)처럼 사용하면 됩니다. - -```tsx /useSuspenseQuery/ -import { useSuspenseQuery } from '@suspensive/react-query' - -const Example = () => { - const query = useSuspenseQuery({ - queryKey, - queryFn, - }) // suspense: true가 기본입니다. - - // isSuccess으로 type narrowing이 필요하지 않습니다. - query.data // TData -} -``` - - - -```tsx Post.tsx active -import { useSuspenseQuery } from '@suspensive/react-query' -import { getPost } from './api' - -export const Post = ({ postId }: { postId: number }) => { - const { data } = useSuspenseQuery({ - queryKey: ['posts', postId], - queryFn: () => getPost(postId), - }) - - return ( -
-

{data.title}

-

{data.body}

-
- ) -} -``` - -```tsx Example.tsx -import { Suspense } from '@suspensive/react' -import { useState } from 'react' -import { Post } from './Post' - -export const Example = () => { - const [postId, setPostId] = useState(1) - - return ( -
- - - Loading...
}> - -
- - ) -} -``` - -```tsx /api.ts -type Post = { - userId: number - id: number - title: string - body: string -} - -export const getPost = async (id: number): Promise => { - const response = await fetch( - `https://jsonplaceholder.typicode.com/posts/${id}` - ) - - if (!response.ok) { - throw new Error('An error occurred') - } - - const data = await response.json() - - return data -} -``` - - - -### 동기 - -@tanstack/react-query에서 suspense 옵션을 사용하면, [useQuery](https://tanstack.com/query/v4/docs/react/reference/useQuery)를 `` and ``와 함께 사용할 수 있습니다. - -```tsx /useQuery/ -import { useQuery } from '@tanstack/react-query' - -const Example = () => { - const query = useQuery({ - queryKey, - queryFn, - suspense: true, - }) - - query.data // TData | undefined - - if (query.isSuccess) { - query.data // TData - } -} -``` - -useQuery의 return 타입(query.data)은 이 컴포넌트의 부모인 ``와 `` 덕분에 항상 성공한 경우일 것입니다. -하지만 @tanstack/react-query는 타입스크립트 타입적으로 이것을 표현하지 않습니다. - -이것이 @suspensive/react-query가 **useSuspenseQuery**를 제공하는 이유입니다. - - - -성공한 케이스에 집중하세요. - -이제 우리는 컴포넌트 내부에서 fetching이 항상 성공하므로 성공한 경우에만 집중할 수 있습니다. - - - -### 버전 기록 - -| Version | Changes | -| -------- | ------------------------------------------------------------------------------------------------------------------------------------ | -| `v3.0.0` | `networkMode`는 `'always'`로 고정되었습니다. 자세한 내용은 [v3로 마이그레이션하기 문서](./migration/migrate-to-v3.mdx)를 참고하세요. | diff --git a/packages/codemods/CHANGELOG.md b/packages/codemods/CHANGELOG.md index 9c2b2771f..1c7df93c1 100644 --- a/packages/codemods/CHANGELOG.md +++ b/packages/codemods/CHANGELOG.md @@ -1,5 +1,13 @@ # @suspensive/codemods +## 4.0.0-next.1 + +### Minor Changes + +- [#1963](https://github.com/toss/suspensive/pull/1963) [`5860be2`](https://github.com/toss/suspensive/commit/5860be217a3fdb56956d510fca67e84722b87e63) Thanks [@gwansikk](https://github.com/gwansikk)! - feat(codemods): add migrate to v4 codemods + +## 4.0.0-next.0 + ## 3.21.2 ## 3.21.1 diff --git a/packages/codemods/package.json b/packages/codemods/package.json index 7d13e4088..9ef0c719d 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -1,6 +1,6 @@ { "name": "@suspensive/codemods", - "version": "3.21.2", + "version": "4.0.0-next.1", "description": "Codemods for @suspensive.", "keywords": [ "suspensive", diff --git a/packages/codemods/src/bin/transformRunner.ts b/packages/codemods/src/bin/transformRunner.ts index 966abcf97..b80962dc9 100644 --- a/packages/codemods/src/bin/transformRunner.ts +++ b/packages/codemods/src/bin/transformRunner.ts @@ -3,6 +3,10 @@ import execa from 'execa' import prompts from 'prompts' const TRANSFORMER_INQUIRER_CHOICES = [ + { + title: 'migrate-to-v4', + description: 'Migrates Suspensive v3 APIs to v4', + }, { title: 'tanstack-query-import', description: 'Migrate imports to @tanstack/react-query in @suspensive/react-query', diff --git a/packages/codemods/src/transforms/migrate-to-v4.ts b/packages/codemods/src/transforms/migrate-to-v4.ts new file mode 100644 index 000000000..07ae2c9b8 --- /dev/null +++ b/packages/codemods/src/transforms/migrate-to-v4.ts @@ -0,0 +1,177 @@ +import type { ExportSpecifier, FileInfo, ImportSpecifier } from 'jscodeshift' +import { createParserFromPath } from './utils/createParserFromPath' +import { detectTanStackVersion } from './utils/detectTanStackVersion' + +const UNVERSIONED_SOURCE = '@suspensive/react-query' +const SOURCE_PATTERN = /^@suspensive\/react-query(-\d+)?$/ +const TANSTACK_TARGET = '@tanstack/react-query' + +const TANSTACK_APIS = [ + 'useSuspenseQuery', + 'UseSuspenseQueryResult', + 'UseSuspenseQueryOptions', + 'useSuspenseQueries', + 'SuspenseQueriesResults', + 'SuspenseQueriesOptions', + 'useSuspenseInfiniteQuery', + 'UseSuspenseInfiniteQueryResult', + 'UseSuspenseInfiniteQueryOptions', + 'usePrefetchQuery', + 'usePrefetchInfiniteQuery', + 'queryOptions', + 'infiniteQueryOptions', + 'mutationOptions', +] + +const DEPRECATED_REMOVED = [ + 'SelectedInfiniteOptions', + 'UnSelectedInfiniteOptions', + 'SelectedQueryOptions', + 'UnSelectedQueryOptions', +] + +export default function transform(file: FileInfo): string { + const j = createParserFromPath(file.path) + const root = j(file.source) + const versionedTarget = `@suspensive/react-query-${detectTanStackVersion()}` + + const resolveSuspensiveTarget = (currentSource: string): string => + currentSource === UNVERSIONED_SOURCE ? versionedTarget : currentSource + + root + .find(j.ImportDeclaration, { + source: { value: (v: string) => SOURCE_PATTERN.test(v) }, + }) + .forEach((path) => { + const specifiers = path.node.specifiers ?? [] + const importKind = path.node.importKind + const currentSource = path.node.source.value as string + const suspensiveTarget = resolveSuspensiveTarget(currentSource) + + if (specifiers.length === 0) { + if (currentSource !== suspensiveTarget) { + path.node.source = j.stringLiteral(suspensiveTarget) + } + return + } + + const hasNamespaceOrDefault = specifiers.some( + (s) => s.type === 'ImportNamespaceSpecifier' || s.type === 'ImportDefaultSpecifier' + ) + if (hasNamespaceOrDefault) { + if (currentSource !== suspensiveTarget) { + path.node.source = j.stringLiteral(suspensiveTarget) + } + return + } + + const tanstackSpecifiers: ImportSpecifier[] = [] + const suspensiveSpecifiers: ImportSpecifier[] = [] + + for (const spec of specifiers) { + if (spec.type !== 'ImportSpecifier') { + continue + } + const name = spec.imported.name + if (DEPRECATED_REMOVED.includes(name)) { + continue + } + if (TANSTACK_APIS.includes(name)) { + tanstackSpecifiers.push(spec) + } else { + suspensiveSpecifiers.push(spec) + } + } + + if (tanstackSpecifiers.length === 0 && suspensiveSpecifiers.length === specifiers.length) { + if (currentSource !== suspensiveTarget) { + path.node.source = j.stringLiteral(suspensiveTarget) + } + return + } + + if (tanstackSpecifiers.length > 0) { + const tanstackDecl = j.importDeclaration(tanstackSpecifiers, j.stringLiteral(TANSTACK_TARGET)) + if (importKind === 'type') { + tanstackDecl.importKind = 'type' + } + path.insertBefore(tanstackDecl) + } + if (suspensiveSpecifiers.length > 0) { + const suspensiveDecl = j.importDeclaration(suspensiveSpecifiers, j.stringLiteral(suspensiveTarget)) + if (importKind === 'type') { + suspensiveDecl.importKind = 'type' + } + path.insertBefore(suspensiveDecl) + } + + j(path).remove() + }) + + root + .find(j.ExportNamedDeclaration, { + source: { value: (v: string) => SOURCE_PATTERN.test(v) }, + }) + .forEach((path) => { + const specifiers = path.node.specifiers + const currentSource = path.node.source?.value as string | undefined + if (!currentSource) { + return + } + const suspensiveTarget = resolveSuspensiveTarget(currentSource) + + if (!specifiers || specifiers.length === 0) { + if (currentSource !== suspensiveTarget) { + path.node.source = j.stringLiteral(suspensiveTarget) + } + return + } + + const tanstackSpecifiers: ExportSpecifier[] = [] + const suspensiveSpecifiers: ExportSpecifier[] = [] + + for (const spec of specifiers) { + const localName = spec.local?.name ?? '' + if (DEPRECATED_REMOVED.includes(localName)) { + continue + } + if (TANSTACK_APIS.includes(localName)) { + tanstackSpecifiers.push(spec) + } else { + suspensiveSpecifiers.push(spec) + } + } + + if (tanstackSpecifiers.length === 0 && suspensiveSpecifiers.length === specifiers.length) { + if (currentSource !== suspensiveTarget) { + path.node.source = j.stringLiteral(suspensiveTarget) + } + return + } + + if (tanstackSpecifiers.length > 0) { + const tanstackDecl = j.exportNamedDeclaration(null, tanstackSpecifiers, j.stringLiteral(TANSTACK_TARGET)) + path.insertBefore(tanstackDecl) + } + if (suspensiveSpecifiers.length > 0) { + const suspensiveDecl = j.exportNamedDeclaration(null, suspensiveSpecifiers, j.stringLiteral(suspensiveTarget)) + path.insertBefore(suspensiveDecl) + } + + j(path).remove() + }) + + root + .find(j.ExportAllDeclaration, { + source: { value: (v: string) => SOURCE_PATTERN.test(v) }, + }) + .forEach((path) => { + const currentSource = path.node.source.value as string + const suspensiveTarget = resolveSuspensiveTarget(currentSource) + if (currentSource !== suspensiveTarget) { + path.node.source = j.stringLiteral(suspensiveTarget) + } + }) + + return root.toSource() +} diff --git a/packages/codemods/src/transforms/tanstack-query-import.ts b/packages/codemods/src/transforms/tanstack-query-import.ts index c0b0d2ad5..fd6f11422 100644 --- a/packages/codemods/src/transforms/tanstack-query-import.ts +++ b/packages/codemods/src/transforms/tanstack-query-import.ts @@ -1,7 +1,7 @@ -import type { FileInfo } from 'jscodeshift' +import type { FileInfo, ImportDeclaration, ImportSpecifier } from 'jscodeshift' import { createParserFromPath } from './utils/createParserFromPath' -const IMPORT_TO_CHANGE = [ +const TANSTACK_APIS = [ 'useSuspenseQuery', 'UseSuspenseQueryResult', 'UseSuspenseQueryOptions', @@ -12,8 +12,10 @@ const IMPORT_TO_CHANGE = [ 'UseSuspenseInfiniteQueryResult', 'UseSuspenseInfiniteQueryOptions', 'usePrefetchQuery', + 'usePrefetchInfiniteQuery', 'queryOptions', 'infiniteQueryOptions', + 'mutationOptions', ] const REMOVE_DEPRECATED_IMPORTS = [ @@ -23,6 +25,12 @@ const REMOVE_DEPRECATED_IMPORTS = [ 'UnSelectedQueryOptions', ] +const SUSPENSIVE_SOURCE_PATTERN = /^@suspensive\/react-query(-\d+)?$/ + +function getClassificationName(specifier: ImportSpecifier): string { + return specifier.imported.name +} + export default function transform(file: FileInfo): string { const j = createParserFromPath(file.path) const root = j(file.source) @@ -30,34 +38,45 @@ export default function transform(file: FileInfo): string { root .find(j.ImportDeclaration, { source: { - value: (v: string) => /^@suspensive\/react-query(-\d+)?$/.test(v), + value: (v: string) => SUSPENSIVE_SOURCE_PATTERN.test(v), }, }) .forEach((path) => { const importSpecifiers = path.node.specifiers || [] + const importKind = path.node.importKind - const importNamesToChange = importSpecifiers.filter((specifier) => - IMPORT_TO_CHANGE.includes(specifier.local?.name ?? '') - ) - const importsNamesRemained = importSpecifiers.filter( - (specifier) => - !IMPORT_TO_CHANGE.includes(specifier.local?.name ?? '') && - !REMOVE_DEPRECATED_IMPORTS.includes(specifier.local?.name ?? '') - ) + type AnyImportSpecifier = NonNullable[number] + const importNamesToChange: ImportSpecifier[] = [] + const importsNamesRemained: AnyImportSpecifier[] = [] + + for (const specifier of importSpecifiers) { + if (specifier.type !== 'ImportSpecifier') { + importsNamesRemained.push(specifier) + continue + } + const name = getClassificationName(specifier) + if (TANSTACK_APIS.includes(name)) { + importNamesToChange.push(specifier) + } else if (!REMOVE_DEPRECATED_IMPORTS.includes(name)) { + importsNamesRemained.push(specifier) + } + } if (importNamesToChange.length > 0) { const newImportStatement = j.importDeclaration(importNamesToChange, j.stringLiteral('@tanstack/react-query')) + if (importKind === 'type') { + newImportStatement.importKind = 'type' + } path.insertBefore(newImportStatement) } if (importsNamesRemained.length > 0) { - const remainingSpecifiers = importSpecifiers.filter( - (specifier) => !IMPORT_TO_CHANGE.includes(specifier.local?.name ?? '') - ) - const suspensiveRemainImportsStatement = j.importDeclaration( - remainingSpecifiers, + importsNamesRemained, j.stringLiteral((path.node.source.value as string) || '@suspensive/react-query') ) + if (importKind === 'type') { + suspensiveRemainImportsStatement.importKind = 'type' + } path.insertBefore(suspensiveRemainImportsStatement) } @@ -65,29 +84,35 @@ export default function transform(file: FileInfo): string { }) root.find(j.ExportNamedDeclaration).forEach((path) => { - if (path.node.specifiers) { - const exportSpecifiers = path.node.specifiers - - const exportNamesToChange = exportSpecifiers.filter((specifier) => - IMPORT_TO_CHANGE.includes(specifier.local?.name ?? '') - ) - const exportNamesRemained = exportSpecifiers.filter( - (specifier) => - !IMPORT_TO_CHANGE.includes(specifier.local?.name ?? '') && - !REMOVE_DEPRECATED_IMPORTS.includes(specifier.local?.name ?? '') - ) - - if (exportNamesToChange.length > 0) { - const newExportStatement = j.exportNamedDeclaration(null, exportNamesToChange) - path.insertBefore(newExportStatement) - } - if (exportNamesRemained.length > 0) { - const remainingExportStatement = j.exportNamedDeclaration(null, exportNamesRemained) - path.insertBefore(remainingExportStatement) - } + if (!path.node.specifiers) { + return + } + const exportSpecifiers = path.node.specifiers + const originalSource = path.node.source - j(path).remove() + const exportNamesToChange = exportSpecifiers.filter((specifier) => + TANSTACK_APIS.includes(specifier.local?.name ?? '') + ) + const exportNamesRemained = exportSpecifiers.filter( + (specifier) => + !TANSTACK_APIS.includes(specifier.local?.name ?? '') && + !REMOVE_DEPRECATED_IMPORTS.includes(specifier.local?.name ?? '') + ) + + if (exportNamesToChange.length > 0) { + const targetSource = + originalSource && SUSPENSIVE_SOURCE_PATTERN.test(originalSource.value as string) + ? j.stringLiteral('@tanstack/react-query') + : originalSource + const newExportStatement = j.exportNamedDeclaration(null, exportNamesToChange, targetSource) + path.insertBefore(newExportStatement) + } + if (exportNamesRemained.length > 0) { + const remainingExportStatement = j.exportNamedDeclaration(null, exportNamesRemained, originalSource) + path.insertBefore(remainingExportStatement) } + + j(path).remove() }) REMOVE_DEPRECATED_IMPORTS.forEach((deprecatedType) => { diff --git a/packages/codemods/src/transforms/testfixtures/migrate-to-v4/migrate-to-v4.input.jsx b/packages/codemods/src/transforms/testfixtures/migrate-to-v4/migrate-to-v4.input.jsx new file mode 100644 index 000000000..105024bd3 --- /dev/null +++ b/packages/codemods/src/transforms/testfixtures/migrate-to-v4/migrate-to-v4.input.jsx @@ -0,0 +1,13 @@ +import { useSuspenseQuery, SuspenseQuery, queryOptions, IsFetching } from "@suspensive/react-query"; +import { mutationOptions, usePrefetchInfiniteQuery } from "@suspensive/react-query-5"; +import type { UseSuspenseInfiniteQueryOptions, SuspenseQueriesOptions } from "@suspensive/react-query"; +import { useSuspenseQuery as useSQ, PrefetchQuery } from "@suspensive/react-query-4"; +import { queryOptions as keepQueryOptions, PrefetchInfiniteQuery } from "@suspensive/react-query-4"; +import { SuspenseQuery as KeepSuspense } from "@suspensive/react-query-5"; +import { unknownThing, SelectedQueryOptions } from "@suspensive/react-query"; +import * as RQ from "@suspensive/react-query"; +import "@suspensive/react-query"; +import { useQuery } from "@tanstack/react-query"; +export { queryOptions, QueryClientConsumer } from "@suspensive/react-query"; +export { Mutation } from "@suspensive/react-query-4"; +export * from "@suspensive/react-query"; diff --git a/packages/codemods/src/transforms/testfixtures/migrate-to-v4/migrate-to-v4.output.jsx b/packages/codemods/src/transforms/testfixtures/migrate-to-v4/migrate-to-v4.output.jsx new file mode 100644 index 000000000..d3ceefece --- /dev/null +++ b/packages/codemods/src/transforms/testfixtures/migrate-to-v4/migrate-to-v4.output.jsx @@ -0,0 +1,17 @@ +import { useSuspenseQuery, queryOptions } from "@tanstack/react-query"; +import { SuspenseQuery, IsFetching } from "@suspensive/react-query-5"; +import { mutationOptions, usePrefetchInfiniteQuery } from "@tanstack/react-query"; +import type { UseSuspenseInfiniteQueryOptions, SuspenseQueriesOptions } from "@tanstack/react-query"; +import { PrefetchQuery } from "@suspensive/react-query-4"; +import { useSuspenseQuery as useSQ } from "@tanstack/react-query"; +import { PrefetchInfiniteQuery } from "@suspensive/react-query-4"; +import { queryOptions as keepQueryOptions } from "@tanstack/react-query"; +import { SuspenseQuery as KeepSuspense } from "@suspensive/react-query-5"; +import { unknownThing } from "@suspensive/react-query-5"; +import * as RQ from "@suspensive/react-query-5"; +import "@suspensive/react-query-5"; +import { useQuery } from "@tanstack/react-query"; +export { queryOptions } from "@tanstack/react-query"; +export { QueryClientConsumer } from "@suspensive/react-query-5"; +export { Mutation } from "@suspensive/react-query-4"; +export * from "@suspensive/react-query-5"; diff --git a/packages/codemods/src/transforms/testfixtures/tanstack-query-import/tanstack-query-import.input.jsx b/packages/codemods/src/transforms/testfixtures/tanstack-query-import/tanstack-query-import.input.jsx index 6817d93f7..5f050118a 100644 --- a/packages/codemods/src/transforms/testfixtures/tanstack-query-import/tanstack-query-import.input.jsx +++ b/packages/codemods/src/transforms/testfixtures/tanstack-query-import/tanstack-query-import.input.jsx @@ -1,2 +1,6 @@ import { queryOptions, useSuspenseQuery, UseSuspenseQueryResult, SelectedInfiniteOptions, UnSelectedInfiniteOptions, SelectedQueryOptions, UnSelectedQueryOptions } from "@suspensive/react-query"; +import { mutationOptions, usePrefetchInfiniteQuery } from "@suspensive/react-query"; +import { useSuspenseInfiniteQuery, UseSuspenseInfiniteQueryOptions, UseSuspenseInfiniteQueryResult } from "@suspensive/react-query-5"; +import { useSuspenseQueries, SuspenseQueriesOptions, SuspenseQueriesResults } from "@suspensive/react-query-4"; +import { usePrefetchQuery, infiniteQueryOptions } from "@suspensive/react-query-5"; export { queryOptions, useSuspenseQuery, UseSuspenseQueryResult, SelectedInfiniteOptions, UnSelectedInfiniteOptions, SelectedQueryOptions, UnSelectedQueryOptions } diff --git a/packages/codemods/src/transforms/testfixtures/tanstack-query-import/tanstack-query-import.output.jsx b/packages/codemods/src/transforms/testfixtures/tanstack-query-import/tanstack-query-import.output.jsx index 5878b166a..d9fe860f3 100644 --- a/packages/codemods/src/transforms/testfixtures/tanstack-query-import/tanstack-query-import.output.jsx +++ b/packages/codemods/src/transforms/testfixtures/tanstack-query-import/tanstack-query-import.output.jsx @@ -1,2 +1,10 @@ import { queryOptions, useSuspenseQuery, UseSuspenseQueryResult } from "@tanstack/react-query"; +import { mutationOptions, usePrefetchInfiniteQuery } from "@tanstack/react-query"; +import { + useSuspenseInfiniteQuery, + UseSuspenseInfiniteQueryOptions, + UseSuspenseInfiniteQueryResult, +} from "@tanstack/react-query"; +import { useSuspenseQueries, SuspenseQueriesOptions, SuspenseQueriesResults } from "@tanstack/react-query"; +import { usePrefetchQuery, infiniteQueryOptions } from "@tanstack/react-query"; export { queryOptions, useSuspenseQuery, UseSuspenseQueryResult }; diff --git a/packages/codemods/src/transforms/tests/detectTanStackVersion.test.ts b/packages/codemods/src/transforms/tests/detectTanStackVersion.test.ts new file mode 100644 index 000000000..a2350f8c4 --- /dev/null +++ b/packages/codemods/src/transforms/tests/detectTanStackVersion.test.ts @@ -0,0 +1,61 @@ +import { mkdtempSync, rmSync, writeFileSync } from 'node:fs' +import { tmpdir } from 'node:os' +import { join } from 'node:path' +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' +import { detectTanStackVersion, resetTanStackVersionCache } from '../utils/detectTanStackVersion' + +describe('detectTanStackVersion', () => { + let tmp: string + let originalEnv: string | undefined + + beforeEach(() => { + tmp = mkdtempSync(join(tmpdir(), 'detect-tanstack-')) + originalEnv = process.env.SUSPENSIVE_RQ_TARGET + delete process.env.SUSPENSIVE_RQ_TARGET + resetTanStackVersionCache() + }) + + afterEach(() => { + rmSync(tmp, { recursive: true, force: true }) + if (originalEnv === undefined) { + delete process.env.SUSPENSIVE_RQ_TARGET + } else { + process.env.SUSPENSIVE_RQ_TARGET = originalEnv + } + resetTanStackVersionCache() + }) + + it('detects v4 from caret range in dependencies', () => { + writeFileSync(join(tmp, 'package.json'), JSON.stringify({ dependencies: { '@tanstack/react-query': '^4.36.0' } })) + expect(detectTanStackVersion(tmp)).toBe(4) + }) + + it('detects v5 from caret range in dependencies', () => { + writeFileSync(join(tmp, 'package.json'), JSON.stringify({ dependencies: { '@tanstack/react-query': '^5.0.0' } })) + expect(detectTanStackVersion(tmp)).toBe(5) + }) + + it('detects from devDependencies when not in dependencies', () => { + writeFileSync(join(tmp, 'package.json'), JSON.stringify({ devDependencies: { '@tanstack/react-query': '~4.0.0' } })) + expect(detectTanStackVersion(tmp)).toBe(4) + }) + + it('detects from peerDependencies as last resort', () => { + writeFileSync(join(tmp, 'package.json'), JSON.stringify({ peerDependencies: { '@tanstack/react-query': '5.x' } })) + expect(detectTanStackVersion(tmp)).toBe(5) + }) + + it('falls back to v5 with a warning when no @tanstack/react-query found', () => { + writeFileSync(join(tmp, 'package.json'), JSON.stringify({ dependencies: {} })) + const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => undefined) + expect(detectTanStackVersion(tmp)).toBe(5) + expect(warnSpy).toHaveBeenCalledOnce() + warnSpy.mockRestore() + }) + + it('honors SUSPENSIVE_RQ_TARGET env override', () => { + writeFileSync(join(tmp, 'package.json'), JSON.stringify({ dependencies: { '@tanstack/react-query': '^5.0.0' } })) + process.env.SUSPENSIVE_RQ_TARGET = '4' + expect(detectTanStackVersion(tmp)).toBe(4) + }) +}) diff --git a/packages/codemods/src/transforms/tests/migrate-to-v4.test.ts b/packages/codemods/src/transforms/tests/migrate-to-v4.test.ts new file mode 100644 index 000000000..ed3395bec --- /dev/null +++ b/packages/codemods/src/transforms/tests/migrate-to-v4.test.ts @@ -0,0 +1,10 @@ +// @ts-expect-error - type definitions not available +import { defineInlineTest } from 'jscodeshift/dist/testUtils' +import transform from '../migrate-to-v4' +import { getTestfixtures } from '../utils/getTestfixtures' + +process.env.SUSPENSIVE_RQ_TARGET = '5' + +const { input, expectedOutput, testName } = getTestfixtures('migrate-to-v4', 'jsx') + +defineInlineTest(transform, null, input, expectedOutput, testName) diff --git a/packages/codemods/src/transforms/utils/detectTanStackVersion.spec.ts b/packages/codemods/src/transforms/utils/detectTanStackVersion.spec.ts new file mode 100644 index 000000000..17fc1ff34 --- /dev/null +++ b/packages/codemods/src/transforms/utils/detectTanStackVersion.spec.ts @@ -0,0 +1,175 @@ +import { existsSync, readFileSync } from 'node:fs' +import { join } from 'node:path' +import type { Mock } from 'vitest' +import { detectTanStackVersion, resetTanStackVersionCache } from './detectTanStackVersion' + +vi.mock('node:fs', () => ({ + existsSync: vi.fn(), + readFileSync: vi.fn(), +})) + +const mockExistsSync = existsSync as Mock +const mockReadFileSync = readFileSync as Mock + +function setupPackageJson(packages: Record>) { + mockExistsSync.mockImplementation((path: string) => path in packages) + mockReadFileSync.mockImplementation((path: string) => { + if (path in packages) return JSON.stringify(packages[path]) + throw new Error(`ENOENT: ${path}`) + }) +} + +describe('detectTanStackVersion', () => { + const originalEnv = process.env.SUSPENSIVE_RQ_TARGET + const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}) + + beforeEach(() => { + vi.clearAllMocks() + resetTanStackVersionCache() + delete process.env.SUSPENSIVE_RQ_TARGET + }) + + afterAll(() => { + if (originalEnv === undefined) { + delete process.env.SUSPENSIVE_RQ_TARGET + } else { + process.env.SUSPENSIVE_RQ_TARGET = originalEnv + } + warnSpy.mockRestore() + }) + + it('returns the SUSPENSIVE_RQ_TARGET env override when set to a valid number', () => { + process.env.SUSPENSIVE_RQ_TARGET = '4' + expect(detectTanStackVersion('/project')).toBe(4) + expect(mockExistsSync).not.toHaveBeenCalled() + }) + + it('ignores the env override when it is not a number', () => { + process.env.SUSPENSIVE_RQ_TARGET = 'not-a-number' + setupPackageJson({ + [join('/project', 'package.json')]: { + dependencies: { '@tanstack/react-query': '^5.0.0' }, + }, + }) + expect(detectTanStackVersion('/project')).toBe(5) + }) + + it('detects version from dependencies', () => { + setupPackageJson({ + [join('/project', 'package.json')]: { + dependencies: { '@tanstack/react-query': '^5.10.0' }, + }, + }) + expect(detectTanStackVersion('/project')).toBe(5) + }) + + it('detects version from devDependencies', () => { + setupPackageJson({ + [join('/project', 'package.json')]: { + devDependencies: { '@tanstack/react-query': '~4.36.1' }, + }, + }) + expect(detectTanStackVersion('/project')).toBe(4) + }) + + it('detects version from peerDependencies', () => { + setupPackageJson({ + [join('/project', 'package.json')]: { + peerDependencies: { '@tanstack/react-query': '>=3.0.0' }, + }, + }) + expect(detectTanStackVersion('/project')).toBe(3) + }) + + it('prefers dependencies over devDependencies and peerDependencies', () => { + setupPackageJson({ + [join('/project', 'package.json')]: { + dependencies: { '@tanstack/react-query': '^5.0.0' }, + devDependencies: { '@tanstack/react-query': '^4.0.0' }, + peerDependencies: { '@tanstack/react-query': '^3.0.0' }, + }, + }) + expect(detectTanStackVersion('/project')).toBe(5) + }) + + it('walks up directories to find a package.json with the dependency', () => { + setupPackageJson({ + [join('/root', 'package.json')]: { + dependencies: { '@tanstack/react-query': '^4.0.0' }, + }, + [join('/root/packages/app', 'package.json')]: { + dependencies: { react: '^18.0.0' }, + }, + }) + expect(detectTanStackVersion('/root/packages/app')).toBe(4) + }) + + it('defaults to v5 and warns when no package.json declares the dependency', () => { + mockExistsSync.mockReturnValue(false) + expect(detectTanStackVersion('/nowhere')).toBe(5) + expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining('Could not detect')) + }) + + it('defaults to v5 and warns when the range has no parseable major number', () => { + setupPackageJson({ + [join('/project', 'package.json')]: { + dependencies: { '@tanstack/react-query': 'workspace:*' }, + }, + }) + expect(detectTanStackVersion('/project')).toBe(5) + expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining('Could not parse major version')) + }) + + it('skips package.json files that fail to parse and continues walking up', () => { + mockExistsSync.mockImplementation( + (path: string) => path === join('/root/app', 'package.json') || path === join('/root', 'package.json') + ) + mockReadFileSync.mockImplementation((path: string) => { + if (path === join('/root/app', 'package.json')) return '{ invalid json' + if (path === join('/root', 'package.json')) { + return JSON.stringify({ dependencies: { '@tanstack/react-query': '^4.0.0' } }) + } + throw new Error(`ENOENT: ${path}`) + }) + expect(detectTanStackVersion('/root/app')).toBe(4) + }) + + it('caches the detected version across calls', () => { + setupPackageJson({ + [join('/project', 'package.json')]: { + dependencies: { '@tanstack/react-query': '^5.0.0' }, + }, + }) + expect(detectTanStackVersion('/project')).toBe(5) + const callCount = mockExistsSync.mock.calls.length + expect(detectTanStackVersion('/project')).toBe(5) + expect(mockExistsSync.mock.calls.length).toBe(callCount) + }) + + it('resetTanStackVersionCache forces re-detection', () => { + setupPackageJson({ + [join('/project', 'package.json')]: { + dependencies: { '@tanstack/react-query': '^5.0.0' }, + }, + }) + expect(detectTanStackVersion('/project')).toBe(5) + + resetTanStackVersionCache() + setupPackageJson({ + [join('/project', 'package.json')]: { + dependencies: { '@tanstack/react-query': '^4.0.0' }, + }, + }) + expect(detectTanStackVersion('/project')).toBe(4) + }) + + it('uses process.cwd() as the default start directory', () => { + const cwd = process.cwd() + setupPackageJson({ + [join(cwd, 'package.json')]: { + dependencies: { '@tanstack/react-query': '^5.0.0' }, + }, + }) + expect(detectTanStackVersion()).toBe(5) + }) +}) diff --git a/packages/codemods/src/transforms/utils/detectTanStackVersion.ts b/packages/codemods/src/transforms/utils/detectTanStackVersion.ts new file mode 100644 index 000000000..776867d88 --- /dev/null +++ b/packages/codemods/src/transforms/utils/detectTanStackVersion.ts @@ -0,0 +1,85 @@ +import { existsSync, readFileSync } from 'node:fs' +import { dirname, join } from 'node:path' + +const DEFAULT_VERSION = 5 + +let cachedVersion: number | undefined + +export function resetTanStackVersionCache(): void { + cachedVersion = undefined +} + +export function detectTanStackVersion(startDir: string = process.cwd()): number { + const override = Number(process.env.SUSPENSIVE_RQ_TARGET) + + if (!isNaN(override)) { + return override + } + + if (cachedVersion !== undefined) { + return cachedVersion + } + + const range = findTanStackRange(startDir) + if (range === undefined) { + console.warn(`Could not detect @tanstack/react-query version from package.json. Defaulting to v${DEFAULT_VERSION}.`) + cachedVersion = DEFAULT_VERSION + return cachedVersion + } + + const major = parseMajor(range) + if (major === undefined) { + console.warn( + `Could not parse major version from @tanstack/react-query range "${range}". Defaulting to v${DEFAULT_VERSION}.` + ) + cachedVersion = DEFAULT_VERSION + return cachedVersion + } + + cachedVersion = major + return cachedVersion +} + +function findTanStackRange(startDir: string): string | undefined { + let current = startDir + let parent = dirname(current) + + while (parent !== current) { + const pkgPath = join(current, 'package.json') + if (existsSync(pkgPath)) { + try { + const raw = readFileSync(pkgPath, 'utf8') + const pkg = JSON.parse(raw) as { + dependencies?: Record + devDependencies?: Record + peerDependencies?: Record + } + const range = + pkg.dependencies?.['@tanstack/react-query'] ?? + pkg.devDependencies?.['@tanstack/react-query'] ?? + pkg.peerDependencies?.['@tanstack/react-query'] + if (range) { + return range + } + } catch { + // ignore + } + } + + current = parent + parent = dirname(current) + } + return undefined +} + +function parseMajor(range: string): number | undefined { + const match = /(\d+)/.exec(range) + if (!match) return + + const n = Number(match[1]) + if (Number.isInteger(n)) { + return n + } + + return undefined +} diff --git a/packages/jotai/CHANGELOG.md b/packages/jotai/CHANGELOG.md index 6b246bf12..4de425e8b 100644 --- a/packages/jotai/CHANGELOG.md +++ b/packages/jotai/CHANGELOG.md @@ -1,5 +1,9 @@ # @suspensive/jotai +## 4.0.0-next.1 + +## 4.0.0-next.0 + ## 3.21.2 ## 3.21.1 diff --git a/packages/jotai/package.json b/packages/jotai/package.json index c92ec57a7..8be6ba214 100644 --- a/packages/jotai/package.json +++ b/packages/jotai/package.json @@ -1,6 +1,6 @@ { "name": "@suspensive/jotai", - "version": "3.21.2", + "version": "4.0.0-next.1", "description": "Suspensive interfaces for jotai", "keywords": [ "suspensive", diff --git a/packages/react-query-4/CHANGELOG.md b/packages/react-query-4/CHANGELOG.md index 3c3332658..e8342ab42 100644 --- a/packages/react-query-4/CHANGELOG.md +++ b/packages/react-query-4/CHANGELOG.md @@ -1,5 +1,13 @@ # @suspensive/react-query-4 +## 4.0.0-next.1 + +## 4.0.0-next.0 + +### Major Changes + +- [#1890](https://github.com/toss/suspensive/pull/1890) [`e5dcb2a`](https://github.com/toss/suspensive/commit/e5dcb2a91b1dfb1eedce7b2766b967288726a149) Thanks [@manudeli](https://github.com/manudeli)! - feat(react-query): remove @suspensive/react-query & remove unnecessary apis of @suspensive/react-query-\* + ## 3.21.2 ## 3.21.1 diff --git a/packages/react-query-4/package.json b/packages/react-query-4/package.json index eafea6355..93b631331 100644 --- a/packages/react-query-4/package.json +++ b/packages/react-query-4/package.json @@ -1,6 +1,6 @@ { "name": "@suspensive/react-query-4", - "version": "3.21.2", + "version": "4.0.0-next.1", "description": "Suspensive interfaces for @tanstack/react-query@4", "keywords": [ "suspensive", @@ -55,7 +55,7 @@ "react": "catalog:react19" }, "peerDependencies": { - "@tanstack/react-query": "*", + "@tanstack/react-query": "^4", "react": "^18 || ^19" }, "publishConfig": { diff --git a/packages/react-query-4/src/PrefetchInfiniteQuery.tsx b/packages/react-query-4/src/PrefetchInfiniteQuery.tsx index f0720e537..4a77cf987 100644 --- a/packages/react-query-4/src/PrefetchInfiniteQuery.tsx +++ b/packages/react-query-4/src/PrefetchInfiniteQuery.tsx @@ -1,6 +1,11 @@ 'use client' -import { type FetchInfiniteQueryOptions, type QueryKey } from '@tanstack/react-query' -import { usePrefetchInfiniteQuery } from './usePrefetchInfiniteQuery' + +import { + type FetchInfiniteQueryOptions, + type QueryKey, + type WithRequired, + usePrefetchInfiniteQuery, +} from '@tanstack/react-query' /** * A component that allows you to use `usePrefetchInfiniteQuery` in JSX, avoiding the limitations of React hooks. @@ -15,7 +20,7 @@ export function PrefetchInfiniteQuery< TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, ->(options: FetchInfiniteQueryOptions) { +>(options: WithRequired, 'queryKey'>) { usePrefetchInfiniteQuery(options) return <> } diff --git a/packages/react-query-4/src/PrefetchQuery.tsx b/packages/react-query-4/src/PrefetchQuery.tsx index fda2df307..1df08148a 100644 --- a/packages/react-query-4/src/PrefetchQuery.tsx +++ b/packages/react-query-4/src/PrefetchQuery.tsx @@ -1,6 +1,6 @@ 'use client' -import { type FetchQueryOptions, type QueryKey } from '@tanstack/react-query' -import { usePrefetchQuery } from './usePrefetchQuery' + +import { type FetchQueryOptions, type QueryKey, type WithRequired, usePrefetchQuery } from '@tanstack/react-query' /** * A component that allows you to use usePrefetchQuery in JSX, avoiding the limitations of React hooks. @@ -15,7 +15,7 @@ export function PrefetchQuery< TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, ->(options: FetchQueryOptions) { +>(options: WithRequired, 'queryKey'>) { usePrefetchQuery(options) return <> } diff --git a/packages/react-query-4/src/SuspenseInfiniteQuery.tsx b/packages/react-query-4/src/SuspenseInfiniteQuery.tsx index 85d183e62..73ef346dd 100644 --- a/packages/react-query-4/src/SuspenseInfiniteQuery.tsx +++ b/packages/react-query-4/src/SuspenseInfiniteQuery.tsx @@ -1,7 +1,28 @@ 'use client' -import { type QueryKey, type UseSuspenseInfiniteQueryResult, useSuspenseInfiniteQuery } from '@tanstack/react-query' + +import { + type OmitKeyof, + type QueryKey, + type UseInfiniteQueryOptions, + type UseSuspenseInfiniteQueryResult, + type WithRequired, + useSuspenseInfiniteQuery, +} from '@tanstack/react-query' import type { ReactNode } from 'react' -import { type UseSuspenseInfiniteQueryOptions } from './useSuspenseInfiniteQuery' + +type UseSuspenseInfiniteQueryOptions< + TQueryFnData = unknown, + TError = unknown, + TData = TQueryFnData, + TQueryKey extends QueryKey = QueryKey, +> = WithRequired< + OmitKeyof< + UseInfiniteQueryOptions, + 'suspense' | 'useErrorBoundary' | 'enabled' | 'placeholderData' | 'networkMode' | 'initialData' + >, + 'queryKey' +> + /** * We provide these components to clearly express what causes suspense at the same depth. * `` serves to make `useSuspenseInfiniteQuery` easier to use in jsx. diff --git a/packages/react-query-4/src/index.ts b/packages/react-query-4/src/index.ts index ae3af4609..c11e91e1f 100644 --- a/packages/react-query-4/src/index.ts +++ b/packages/react-query-4/src/index.ts @@ -1,23 +1,9 @@ export { createGetQueryClient } from './createGetQueryClient' -export { infiniteQueryOptions } from './infiniteQueryOptions' -export type { SelectedInfiniteOptions, UnSelectedInfiniteOptions } from './infiniteQueryOptions' -export { QueriesHydration } from './QueriesHydration' -export { queryOptions } from './queryOptions' -export type { SelectedQueryOptions, UnSelectedQueryOptions } from './queryOptions' -export { usePrefetchInfiniteQuery } from './usePrefetchInfiniteQuery' -export { usePrefetchQuery } from './usePrefetchQuery' -export { useSuspenseInfiniteQuery } from './useSuspenseInfiniteQuery' -export type { UseSuspenseInfiniteQueryOptions, UseSuspenseInfiniteQueryResult } from './useSuspenseInfiniteQuery' -export { useSuspenseQueries } from './useSuspenseQueries' -export type { SuspenseQueriesOptions, SuspenseQueriesResults } from './useSuspenseQueries' -export { useSuspenseQuery } from './useSuspenseQuery' -export type { UseSuspenseQueryOptions, UseSuspenseQueryResult } from './useSuspenseQuery' - export { IsFetching } from './IsFetching' export { Mutation } from './Mutation' -export { mutationOptions } from './mutationOptions' export { PrefetchInfiniteQuery } from './PrefetchInfiniteQuery' export { PrefetchQuery } from './PrefetchQuery' +export { QueriesHydration } from './QueriesHydration' export { QueryClientConsumer } from './QueryClientConsumer' export { SuspenseInfiniteQuery } from './SuspenseInfiniteQuery' export { SuspenseQueries } from './SuspenseQueries' diff --git a/packages/react-query-4/src/infiniteQueryOptions.ts b/packages/react-query-4/src/infiniteQueryOptions.ts deleted file mode 100644 index 0d39adc00..000000000 --- a/packages/react-query-4/src/infiniteQueryOptions.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { - type InfiniteData, - type OmitKeyof, - type QueryKey, - type UseInfiniteQueryOptions, - type WithRequired, - infiniteQueryOptions as original_infiniteQueryOptions, -} from '@tanstack/react-query' - -/** - * @deprecated There is no `SelectedInfiniteOptions` in \@tanstack/react-query@^4.40.0. - */ -export type SelectedInfiniteOptions< - TQueryFnData, - TError = unknown, - TData = InfiniteData, - TQueryKey extends QueryKey = QueryKey, -> = WithRequired< - OmitKeyof< - UseInfiniteQueryOptions, - | 'queryKeyHashFn' - | '_defaulted' - | 'behavior' - | 'structuralSharing' - | 'isDataEqual' - | 'onSuccess' - | 'onError' - | 'onSettled' - | 'enabled' - | 'refetchInterval' - | 'initialData' - | 'networkMode' - >, - 'queryKey' | 'queryFn' -> & { - select: (data: InfiniteData) => InfiniteData -} - -/** - * @deprecated There is no `UnSelectedInfiniteOptions` in \@tanstack/react-query@^4.40.0. - */ -export type UnSelectedInfiniteOptions< - TQueryFnData, - TError = unknown, - TData = InfiniteData, - TQueryKey extends QueryKey = QueryKey, -> = WithRequired< - OmitKeyof< - UseInfiniteQueryOptions, - | 'queryKeyHashFn' - | '_defaulted' - | 'behavior' - | 'structuralSharing' - | 'isDataEqual' - | 'onSuccess' - | 'onError' - | 'onSettled' - | 'enabled' - | 'refetchInterval' - | 'initialData' - | 'networkMode' - >, - 'queryKey' | 'queryFn' -> & { - select?: undefined -} - -/** - * This feature is officially supported in \@tanstack/react-query@^4.41.0, You can proceed with the migration. - * @deprecated Use `infiniteQueryOptions` from \@tanstack/react-query@^4.41.0 - * @example - * ```diff - * - import { infiniteQueryOptions } from '@suspensive/react-query' - * + import { infiniteQueryOptions } from '@tanstack/react-query' - * ``` - */ -export const infiniteQueryOptions = original_infiniteQueryOptions diff --git a/packages/react-query-4/src/mutationOptions.test-d.tsx b/packages/react-query-4/src/mutationOptions.test-d.tsx deleted file mode 100644 index 393aec4a0..000000000 --- a/packages/react-query-4/src/mutationOptions.test-d.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { - type UseMutateAsyncFunction, - type UseMutateFunction, - type UseMutationResult, - useMutation, -} from '@tanstack/react-query' -import { describe, expectTypeOf, it } from 'vitest' -import { Mutation } from './Mutation' -import { mutationOptions } from './mutationOptions' - -const mutationOption = mutationOptions({ - mutationFn: () => Promise.resolve(1), - onMutate: () => 'onMutation', -}) - -describe('mutationOptions', () => { - it('should be used with useMutation', () => { - const mutation = useMutation(mutationOption) - expectTypeOf(mutation).toEqualTypeOf>() - expectTypeOf(mutation.data).toEqualTypeOf() - expectTypeOf(mutation.mutate).toEqualTypeOf>() - expectTypeOf(mutation.mutateAsync).toEqualTypeOf>() - }) - it('should be used with ', () => { - ;(() => ( - - {(mutation) => { - expectTypeOf(mutation).toEqualTypeOf>() - expectTypeOf(mutation.data).toEqualTypeOf() - return <> - }} - - ))() - }) -}) diff --git a/packages/react-query-4/src/mutationOptions.tsx b/packages/react-query-4/src/mutationOptions.tsx deleted file mode 100644 index ff0a23c7e..000000000 --- a/packages/react-query-4/src/mutationOptions.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { mutationOptions as original_mutationOptions } from '@tanstack/react-query' - -/** - * This feature is officially supported in \@tanstack/react-query@^4.44.0, You can proceed with the migration. - * @deprecated Use `mutationOptions` from \@tanstack/react-query@^4.44.0 - * @example - * ```diff - * - import { mutationOptions } from '@suspensive/react-query' - * + import { mutationOptions } from '@tanstack/react-query' - * ``` - */ -export const mutationOptions = original_mutationOptions diff --git a/packages/react-query-4/src/queryOptions.ts b/packages/react-query-4/src/queryOptions.ts deleted file mode 100644 index 01cb85aa3..000000000 --- a/packages/react-query-4/src/queryOptions.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { - type OmitKeyof, - type QueryKey, - type UseQueryOptions, - type WithRequired, - queryOptions as original_queryOptions, -} from '@tanstack/react-query' - -/** - * @deprecated There is no `SelectedQueryOptions` in \@tanstack/react-query@^4.40.0. - */ -export type SelectedQueryOptions< - TQueryFnData = unknown, - TError = unknown, - TData = TQueryFnData, - TQueryKey extends QueryKey = QueryKey, -> = WithRequired< - OmitKeyof< - UseQueryOptions, - | 'getNextPageParam' - | 'getPreviousPageParam' - | 'queryKeyHashFn' - | '_defaulted' - | 'behavior' - | 'structuralSharing' - | 'isDataEqual' - | 'onSuccess' - | 'onError' - | 'onSettled' - | 'enabled' - | 'refetchInterval' - | 'initialData' - | 'networkMode' - >, - 'queryKey' | 'queryFn' -> & { - select: (data: TQueryFnData) => TData -} - -/** - * @deprecated There is no `UnSelectedQueryOptions` in \@tanstack/react-query@^4.40.0. - */ -export type UnSelectedQueryOptions< - TQueryFnData = unknown, - TError = unknown, - TData = TQueryFnData, - TQueryKey extends QueryKey = QueryKey, -> = WithRequired< - OmitKeyof< - UseQueryOptions, - | 'getNextPageParam' - | 'getPreviousPageParam' - | 'queryKeyHashFn' - | '_defaulted' - | 'behavior' - | 'structuralSharing' - | 'isDataEqual' - | 'onSuccess' - | 'onError' - | 'onSettled' - | 'enabled' - | 'refetchInterval' - | 'initialData' - | 'networkMode' - >, - 'queryKey' | 'queryFn' -> & { - select?: undefined -} - -/** - * This feature is officially supported in \@tanstack/react-query@^4.40.0, You can proceed with the migration. - * @deprecated Use `queryOptions` from \@tanstack/react-query@^4.40.0 - * @example - * ```diff - * - import { queryOptions } from '@suspensive/react-query' - * + import { queryOptions } from '@tanstack/react-query' - * ``` - */ -export const queryOptions = original_queryOptions diff --git a/packages/react-query-4/src/usePrefetchInfiniteQuery.test-d.tsx b/packages/react-query-4/src/usePrefetchInfiniteQuery.test-d.tsx deleted file mode 100644 index 7922b337d..000000000 --- a/packages/react-query-4/src/usePrefetchInfiniteQuery.test-d.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { infiniteQueryOptions } from '@tanstack/react-query' -import { queryFn, queryKey } from './test-utils' -import { usePrefetchInfiniteQuery } from './usePrefetchInfiniteQuery' - -describe('usePrefetchInfiniteQuery', () => { - it('type check', () => { - expectTypeOf(usePrefetchInfiniteQuery({ queryFn, queryKey })) - // eslint-disable-next-line @typescript-eslint/no-invalid-void-type - .toEqualTypeOf() - expectTypeOf(usePrefetchInfiniteQuery(infiniteQueryOptions({ queryFn, queryKey }))) - // eslint-disable-next-line @typescript-eslint/no-invalid-void-type - .toEqualTypeOf() - }) -}) diff --git a/packages/react-query-4/src/usePrefetchInfiniteQuery.ts b/packages/react-query-4/src/usePrefetchInfiniteQuery.ts deleted file mode 100644 index adfcedd5c..000000000 --- a/packages/react-query-4/src/usePrefetchInfiniteQuery.ts +++ /dev/null @@ -1,19 +0,0 @@ -'use client' -import { type FetchInfiniteQueryOptions, type QueryKey, useQueryClient } from '@tanstack/react-query' - -/** - * The `usePrefetchInfiniteQuery` does not return anything, it should be used just to fire a prefetch during render, before a suspense boundary that wraps a component that uses `useSuspenseInfiniteQuery`. - * @see {@link https://suspensive.org/docs/react-query/usePrefetchInfiniteQuery Suspensive Docs} - */ -export function usePrefetchInfiniteQuery< - TQueryFnData = unknown, - TError = unknown, - TData = TQueryFnData, - TQueryKey extends QueryKey = QueryKey, ->(options: FetchInfiniteQueryOptions) { - const queryClient = useQueryClient() - - if (typeof options.queryKey !== 'undefined' && !queryClient.getQueryState(options.queryKey)) { - void queryClient.prefetchInfiniteQuery(options) - } -} diff --git a/packages/react-query-4/src/usePrefetchQuery.test-d.tsx b/packages/react-query-4/src/usePrefetchQuery.test-d.tsx deleted file mode 100644 index 5555b3820..000000000 --- a/packages/react-query-4/src/usePrefetchQuery.test-d.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { queryOptions } from '@tanstack/react-query' -import { queryFn, queryKey } from './test-utils' -import { usePrefetchQuery } from './usePrefetchQuery' - -describe('usePrefetchQuery', () => { - it('type check', () => { - expectTypeOf(usePrefetchQuery({ queryFn, queryKey })) - // eslint-disable-next-line @typescript-eslint/no-invalid-void-type - .toEqualTypeOf() - expectTypeOf(usePrefetchQuery(queryOptions({ queryFn, queryKey }))) - // eslint-disable-next-line @typescript-eslint/no-invalid-void-type - .toEqualTypeOf() - }) -}) diff --git a/packages/react-query-4/src/usePrefetchQuery.ts b/packages/react-query-4/src/usePrefetchQuery.ts deleted file mode 100644 index 9b3d1eb39..000000000 --- a/packages/react-query-4/src/usePrefetchQuery.ts +++ /dev/null @@ -1,19 +0,0 @@ -'use client' -import { type FetchQueryOptions, type QueryKey, useQueryClient } from '@tanstack/react-query' - -/** - * The `usePrefetchQuery` does not return anything, it should be used just to fire a prefetch during render, before a suspense boundary that wraps a component that uses `useSuspenseQuery`. - * @see {@link https://suspensive.org/docs/react-query/usePrefetchQuery Suspensive Docs} - */ -export function usePrefetchQuery< - TQueryFnData = unknown, - TError = unknown, - TData = TQueryFnData, - TQueryKey extends QueryKey = QueryKey, ->(options: FetchQueryOptions) { - const queryClient = useQueryClient() - - if (typeof options.queryKey !== 'undefined' && !queryClient.getQueryState(options.queryKey)) { - void queryClient.prefetchQuery(options) - } -} diff --git a/packages/react-query-4/src/useSuspenseInfiniteQuery.ts b/packages/react-query-4/src/useSuspenseInfiniteQuery.ts deleted file mode 100644 index 87b9ce8cb..000000000 --- a/packages/react-query-4/src/useSuspenseInfiniteQuery.ts +++ /dev/null @@ -1,34 +0,0 @@ -'use client' -import { - type OmitKeyof, - type QueryKey, - type UseInfiniteQueryOptions, - type WithRequired, - useSuspenseInfiniteQuery as original_useSuspenseInfiniteQuery, -} from '@tanstack/react-query' - -export type { UseSuspenseInfiniteQueryResult } from '@tanstack/react-query' - -export type UseSuspenseInfiniteQueryOptions< - TQueryFnData = unknown, - TError = unknown, - TData = TQueryFnData, - TQueryKey extends QueryKey = QueryKey, -> = WithRequired< - OmitKeyof< - UseInfiniteQueryOptions, - 'suspense' | 'useErrorBoundary' | 'enabled' | 'placeholderData' | 'networkMode' | 'initialData' - >, - 'queryKey' -> - -/** - * This feature is officially supported in \@tanstack/react-query@^4.41.0, You can proceed with the migration. - * @deprecated Use `useSuspenseInfiniteQuery` from \@tanstack/react-query@^4.41.0 - * @example - * ```diff - * - import { useSuspenseInfiniteQuery } from '@suspensive/react-query' - * + import { useSuspenseInfiniteQuery } from '@tanstack/react-query' - * ``` - */ -export const useSuspenseInfiniteQuery = original_useSuspenseInfiniteQuery diff --git a/packages/react-query-4/src/useSuspenseQueries.ts b/packages/react-query-4/src/useSuspenseQueries.ts deleted file mode 100644 index e10b4f0ab..000000000 --- a/packages/react-query-4/src/useSuspenseQueries.ts +++ /dev/null @@ -1,47 +0,0 @@ -'use client' -import { - type SuspenseQueriesOptions as original_SuspenseQueriesOptions, - type SuspenseQueriesResults as original_SuspenseQueriesResults, - useSuspenseQueries as original_useSuspenseQueries, -} from '@tanstack/react-query' - -/** - * This feature is officially supported in \@tanstack/react-query@^4.40.0, You can proceed with the migration. - * @deprecated Use `SuspenseQueriesOptions` from \@tanstack/react-query@^4.40.0 - * @example - * ```diff - * - import type { SuspenseQueriesOptions } from '@suspensive/react-query' - * + import type { SuspenseQueriesOptions } from '@tanstack/react-query' - * ``` - */ -export type SuspenseQueriesOptions< - T extends Array, - TResult extends Array = [], - TDepth extends ReadonlyArray = [], -> = original_SuspenseQueriesOptions - -/** - * This feature is officially supported in \@tanstack/react-query@^4.40.0, You can proceed with the migration. - * @deprecated Use `SuspenseQueriesResults` from \@tanstack/react-query@^4.40.0 - * @example - * ```diff - * - import type { SuspenseQueriesResults } from '@suspensive/react-query' - * + import type { SuspenseQueriesResults } from '@tanstack/react-query' - * ``` - */ -export type SuspenseQueriesResults< - T extends Array, - TResult extends Array = [], - TDepth extends ReadonlyArray = [], -> = original_SuspenseQueriesResults - -/** - * This feature is officially supported in \@tanstack/react-query@^4.40.0, You can proceed with the migration. - * @deprecated Use `useSuspenseQueries` from \@tanstack/react-query@^4.40.0 - * @example - * ```diff - * - import { useSuspenseQueries } from '@suspensive/react-query' - * + import { useSuspenseQueries } from '@tanstack/react-query' - * ``` - */ -export const useSuspenseQueries = original_useSuspenseQueries diff --git a/packages/react-query-4/src/useSuspenseQuery.ts b/packages/react-query-4/src/useSuspenseQuery.ts deleted file mode 100644 index ee708fde8..000000000 --- a/packages/react-query-4/src/useSuspenseQuery.ts +++ /dev/null @@ -1,39 +0,0 @@ -'use client' -import { - type UseSuspenseQueryOptions as original_UseSuspenseQueryOptions, - type UseSuspenseQueryResult as original_UseSuspenseQueryResult, - useSuspenseQuery as original_useSuspenseQuery, -} from '@tanstack/react-query' - -/** - * This feature is officially supported in \@tanstack/react-query@^4.40.0, You can proceed with the migration. - * @deprecated Use `UseSuspenseQueryOptions` from \@tanstack/react-query@^4.40.0 - * @example - * ```diff - * - import type { UseSuspenseQueryOptions } from '@suspensive/react-query' - * + import type { UseSuspenseQueryOptions } from '@tanstack/react-query' - * ``` - */ -export type UseSuspenseQueryOptions = original_UseSuspenseQueryOptions - -/** - * This feature is officially supported in \@tanstack/react-query@^4.40.0, You can proceed with the migration. - * @deprecated Use `UseSuspenseQueryResult` from \@tanstack/react-query@^4.40.0 - * @example - * ```diff - * - import type { UseSuspenseQueryResult } from '@suspensive/react-query' - * + import type { UseSuspenseQueryResult } from '@tanstack/react-query' - * ``` - */ -export type UseSuspenseQueryResult = original_UseSuspenseQueryResult - -/** - * This feature is officially supported in \@tanstack/react-query@^4.40.0, You can proceed with the migration. - * @deprecated Use `useSuspenseQuery` from \@tanstack/react-query@^4.40.0 - * @example - * ```diff - * - import { useSuspenseQuery } from '@suspensive/react-query' - * + import { useSuspenseQuery } from '@tanstack/react-query' - * ``` - */ -export const useSuspenseQuery = original_useSuspenseQuery diff --git a/packages/react-query-5/CHANGELOG.md b/packages/react-query-5/CHANGELOG.md index 2eac26f58..6b4cd3758 100644 --- a/packages/react-query-5/CHANGELOG.md +++ b/packages/react-query-5/CHANGELOG.md @@ -1,5 +1,13 @@ # @suspensive/react-query-5 +## 4.0.0-next.1 + +## 4.0.0-next.0 + +### Major Changes + +- [#1890](https://github.com/toss/suspensive/pull/1890) [`e5dcb2a`](https://github.com/toss/suspensive/commit/e5dcb2a91b1dfb1eedce7b2766b967288726a149) Thanks [@manudeli](https://github.com/manudeli)! - feat(react-query): remove @suspensive/react-query & remove unnecessary apis of @suspensive/react-query-\* + ## 3.21.2 ## 3.21.1 diff --git a/packages/react-query-5/package.json b/packages/react-query-5/package.json index f7cccf03b..8cd82a17e 100644 --- a/packages/react-query-5/package.json +++ b/packages/react-query-5/package.json @@ -1,6 +1,6 @@ { "name": "@suspensive/react-query-5", - "version": "3.21.2", + "version": "4.0.0-next.1", "description": "Suspensive interfaces for @tanstack/react-query@5", "keywords": [ "suspensive", @@ -55,7 +55,7 @@ "react": "catalog:react19" }, "peerDependencies": { - "@tanstack/react-query": "*", + "@tanstack/react-query": "^5", "react": "^18 || ^19" }, "publishConfig": { diff --git a/packages/react-query-5/src/index.ts b/packages/react-query-5/src/index.ts index 2b7ef5e33..c11e91e1f 100644 --- a/packages/react-query-5/src/index.ts +++ b/packages/react-query-5/src/index.ts @@ -1,21 +1,9 @@ export { createGetQueryClient } from './createGetQueryClient' -export { infiniteQueryOptions } from './infiniteQueryOptions' -export { QueriesHydration } from './QueriesHydration' -export { queryOptions } from './queryOptions' -export { usePrefetchInfiniteQuery } from './usePrefetchInfiniteQuery' -export { usePrefetchQuery } from './usePrefetchQuery' -export { useSuspenseInfiniteQuery } from './useSuspenseInfiniteQuery' -export type { UseSuspenseInfiniteQueryOptions, UseSuspenseInfiniteQueryResult } from './useSuspenseInfiniteQuery' -export { useSuspenseQueries } from './useSuspenseQueries' -export type { SuspenseQueriesOptions, SuspenseQueriesResults } from './useSuspenseQueries' -export { useSuspenseQuery } from './useSuspenseQuery' -export type { UseSuspenseQueryOptions, UseSuspenseQueryResult } from './useSuspenseQuery' - export { IsFetching } from './IsFetching' export { Mutation } from './Mutation' -export { mutationOptions } from './mutationOptions' export { PrefetchInfiniteQuery } from './PrefetchInfiniteQuery' export { PrefetchQuery } from './PrefetchQuery' +export { QueriesHydration } from './QueriesHydration' export { QueryClientConsumer } from './QueryClientConsumer' export { SuspenseInfiniteQuery } from './SuspenseInfiniteQuery' export { SuspenseQueries } from './SuspenseQueries' diff --git a/packages/react-query-5/src/infiniteQueryOptions.ts b/packages/react-query-5/src/infiniteQueryOptions.ts deleted file mode 100644 index 6572743a5..000000000 --- a/packages/react-query-5/src/infiniteQueryOptions.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { infiniteQueryOptions as original_infiniteQueryOptions } from '@tanstack/react-query' - -/** - * This feature is officially supported in \@tanstack/react-query@5, You can proceed with the migration. - * @deprecated Use `infiniteQueryOptions` from \@tanstack/react-query@5 - * @example - * ```diff - * - import { infiniteQueryOptions } from '@suspensive/react-query' - * + import { infiniteQueryOptions } from '@tanstack/react-query' - * ``` - */ -export const infiniteQueryOptions = original_infiniteQueryOptions diff --git a/packages/react-query-5/src/mutationOptions.tsx b/packages/react-query-5/src/mutationOptions.tsx deleted file mode 100644 index 9d3bd77eb..000000000 --- a/packages/react-query-5/src/mutationOptions.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { mutationOptions as original_mutationOptions } from '@tanstack/react-query' - -/** - * This feature is officially supported in \@tanstack/react-query@5, You can proceed with the migration. - * @deprecated Use `mutationOptions` from \@tanstack/react-query@5 - * @example - * ```diff - * - import { mutationOptions } from '@suspensive/react-query' - * + import { mutationOptions } from '@tanstack/react-query' - * ``` - */ -export const mutationOptions = original_mutationOptions diff --git a/packages/react-query-5/src/queryOptions.ts b/packages/react-query-5/src/queryOptions.ts deleted file mode 100644 index 537af5703..000000000 --- a/packages/react-query-5/src/queryOptions.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { queryOptions as original_queryOptions } from '@tanstack/react-query' - -/** - * This feature is officially supported in \@tanstack/react-query@5, You can proceed with the migration. - * @deprecated Use `queryOptions` from \@tanstack/react-query@5 - * @example - * ```diff - * - import { queryOptions } from '@suspensive/react-query' - * + import { queryOptions } from '@tanstack/react-query' - * ``` - */ -export const queryOptions = original_queryOptions diff --git a/packages/react-query-5/src/usePrefetchInfiniteQuery.ts b/packages/react-query-5/src/usePrefetchInfiniteQuery.ts deleted file mode 100644 index d095aaab1..000000000 --- a/packages/react-query-5/src/usePrefetchInfiniteQuery.ts +++ /dev/null @@ -1,13 +0,0 @@ -'use client' -import { usePrefetchInfiniteQuery as original_usePrefetchInfiniteQuery } from '@tanstack/react-query' - -/** - * This feature is officially supported in \@tanstack/react-query@5, You can proceed with the migration. - * @deprecated Use `usePrefetchInfiniteQuery` from \@tanstack/react-query@5 - * @example - * ```diff - * - import { usePrefetchInfiniteQuery } from '@suspensive/react-query' - * + import { usePrefetchInfiniteQuery } from '@tanstack/react-query' - * ``` - */ -export const usePrefetchInfiniteQuery = original_usePrefetchInfiniteQuery diff --git a/packages/react-query-5/src/usePrefetchQuery.ts b/packages/react-query-5/src/usePrefetchQuery.ts deleted file mode 100644 index 6a374a309..000000000 --- a/packages/react-query-5/src/usePrefetchQuery.ts +++ /dev/null @@ -1,13 +0,0 @@ -'use client' -import { usePrefetchQuery as original_usePrefetchQuery } from '@tanstack/react-query' - -/** - * This feature is officially supported in \@tanstack/react-query@5, You can proceed with the migration. - * @deprecated Use `usePrefetchQuery` from \@tanstack/react-query@5 - * @example - * ```diff - * - import { usePrefetchQuery } from '@suspensive/react-query' - * + import { usePrefetchQuery } from '@tanstack/react-query' - * ``` - */ -export const usePrefetchQuery = original_usePrefetchQuery diff --git a/packages/react-query-5/src/useSuspenseInfiniteQuery.ts b/packages/react-query-5/src/useSuspenseInfiniteQuery.ts deleted file mode 100644 index c006b04c8..000000000 --- a/packages/react-query-5/src/useSuspenseInfiniteQuery.ts +++ /dev/null @@ -1,39 +0,0 @@ -'use client' -import { - type UseSuspenseInfiniteQueryOptions as original_UseSuspenseInfiniteQueryOptions, - type UseSuspenseInfiniteQueryResult as original_UseSuspenseInfiniteQueryResult, - useSuspenseInfiniteQuery as original_useSuspenseInfiniteQuery, -} from '@tanstack/react-query' - -/** - * This feature is officially supported in \@tanstack/react-query@5, You can proceed with the migration. - * @deprecated Use `UseSuspenseInfiniteQueryOptions` from \@tanstack/react-query@5 - * @example - * ```diff - * - import type { UseSuspenseInfiniteQueryOptions } from '@suspensive/react-query' - * + import type { UseSuspenseInfiniteQueryOptions } from '@tanstack/react-query' - * ``` - */ -export type UseSuspenseInfiniteQueryOptions = original_UseSuspenseInfiniteQueryOptions - -/** - * This feature is officially supported in \@tanstack/react-query@5, You can proceed with the migration. - * @deprecated Use `UseSuspenseInfiniteQueryResult` from \@tanstack/react-query@5 - * @example - * ```diff - * - import type { UseSuspenseInfiniteQueryResult } from '@suspensive/react-query' - * + import type { UseSuspenseInfiniteQueryResult } from '@tanstack/react-query' - * ``` - */ -export type UseSuspenseInfiniteQueryResult = original_UseSuspenseInfiniteQueryResult - -/** - * This feature is officially supported in \@tanstack/react-query@5, You can proceed with the migration. - * @deprecated Use `useSuspenseInfiniteQuery` from \@tanstack/react-query@5 - * @example - * ```diff - * - import { useSuspenseInfiniteQuery } from '@suspensive/react-query' - * + import { useSuspenseInfiniteQuery } from '@tanstack/react-query' - * ``` - */ -export const useSuspenseInfiniteQuery = original_useSuspenseInfiniteQuery diff --git a/packages/react-query-5/src/useSuspenseQueries.ts b/packages/react-query-5/src/useSuspenseQueries.ts deleted file mode 100644 index c586e66fd..000000000 --- a/packages/react-query-5/src/useSuspenseQueries.ts +++ /dev/null @@ -1,48 +0,0 @@ -'use client' -/* eslint-disable @typescript-eslint/no-explicit-any */ -import { - type SuspenseQueriesOptions as original_SuspenseQueriesOptions, - type SuspenseQueriesResults as original_SuspenseQueriesResults, - useSuspenseQueries as original_useSuspenseQueries, -} from '@tanstack/react-query' - -/** - * This feature is officially supported in \@tanstack/react-query@5, You can proceed with the migration. - * @deprecated Use `SuspenseQueriesOptions` from \@tanstack/react-query@5 - * @example - * ```diff - * - import type { SuspenseQueriesOptions } from '@suspensive/react-query' - * + import type { SuspenseQueriesOptions } from '@tanstack/react-query' - * ``` - */ -export type SuspenseQueriesOptions< - T extends Array, - TResults extends Array = [], - TDepth extends ReadonlyArray = [], -> = original_SuspenseQueriesOptions - -/** - * This feature is officially supported in \@tanstack/react-query@5, You can proceed with the migration. - * @deprecated Use `SuspenseQueriesResults` from \@tanstack/react-query@5 - * @example - * ```diff - * - import type { SuspenseQueriesResults } from '@suspensive/react-query' - * + import type { SuspenseQueriesResults } from '@tanstack/react-query' - * ``` - */ -export type SuspenseQueriesResults< - T extends Array, - TResults extends Array = [], - TDepth extends ReadonlyArray = [], -> = original_SuspenseQueriesResults - -/** - * This feature is officially supported in \@tanstack/react-query@5, You can proceed with the migration. - * @deprecated Use `useSuspenseQueries` from \@tanstack/react-query@5 - * @example - * ```diff - * - import { useSuspenseQueries } from '@suspensive/react-query' - * + import { useSuspenseQueries } from '@tanstack/react-query' - * ``` - */ -export const useSuspenseQueries = original_useSuspenseQueries diff --git a/packages/react-query-5/src/useSuspenseQuery.ts b/packages/react-query-5/src/useSuspenseQuery.ts deleted file mode 100644 index 7dfa1446e..000000000 --- a/packages/react-query-5/src/useSuspenseQuery.ts +++ /dev/null @@ -1,39 +0,0 @@ -'use client' -import { - type UseSuspenseQueryOptions as original_UseSuspenseQueryOptions, - type UseSuspenseQueryResult as original_UseSuspenseQueryResult, - useSuspenseQuery as original_useSuspenseQuery, -} from '@tanstack/react-query' - -/** - * This feature is officially supported in \@tanstack/react-query@5, You can proceed with the migration. - * @deprecated Use `UseSuspenseQueryOptions` from \@tanstack/react-query@5 - * @example - * ```diff - * - import type { UseSuspenseQueryOptions } from '@suspensive/react-query' - * + import type { UseSuspenseQueryOptions } from '@tanstack/react-query' - * ``` - */ -export type UseSuspenseQueryOptions = original_UseSuspenseQueryOptions - -/** - * This feature is officially supported in \@tanstack/react-query@5, You can proceed with the migration. - * @deprecated Use `UseSuspenseQueryResult` from \@tanstack/react-query@5 - * @example - * ```diff - * - import type { UseSuspenseQueryResult } from '@suspensive/react-query' - * + import type { UseSuspenseQueryResult } from '@tanstack/react-query' - * ``` - */ -export type UseSuspenseQueryResult = original_UseSuspenseQueryResult - -/** - * This feature is officially supported in \@tanstack/react-query@5, You can proceed with the migration. - * @deprecated Use `useSuspenseQuery` from \@tanstack/react-query@5 - * @example - * ```diff - * - import { useSuspenseQuery } from '@suspensive/react-query' - * + import { useSuspenseQuery } from '@tanstack/react-query' - * ``` - */ -export const useSuspenseQuery = original_useSuspenseQuery diff --git a/packages/react-query/CHANGELOG.md b/packages/react-query/CHANGELOG.md deleted file mode 100644 index 546644bc0..000000000 --- a/packages/react-query/CHANGELOG.md +++ /dev/null @@ -1,1998 +0,0 @@ -# @suspensive/react-query - -## 3.21.2 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.21.2 - - @suspensive/react-query-5@3.21.2 - -## 3.21.1 - -### Patch Changes - -- [#1961](https://github.com/toss/suspensive/pull/1961) [`f314dc0`](https://github.com/toss/suspensive/commit/f314dc0dcd4b4594693844aeab9032bdeab5ff22) Thanks [@manudeli](https://github.com/manudeli)! - chore: update package dependencies to latest versions - -- Updated dependencies [[`f314dc0`](https://github.com/toss/suspensive/commit/f314dc0dcd4b4594693844aeab9032bdeab5ff22)]: - - @suspensive/react-query-5@3.21.1 - - @suspensive/react-query-4@3.21.1 - -## 3.21.0 - -### Minor Changes - -- [#1943](https://github.com/toss/suspensive/pull/1943) [`32821ed`](https://github.com/toss/suspensive/commit/32821edc0058f4844b4c2a61ec0762cc72494cd5) Thanks [@manudeli](https://github.com/manudeli)! - chore: update @tanstack/react-query version and deprecate mutationOptions - -### Patch Changes - -- Updated dependencies [[`32821ed`](https://github.com/toss/suspensive/commit/32821edc0058f4844b4c2a61ec0762cc72494cd5)]: - - @suspensive/react-query-4@3.21.0 - - @suspensive/react-query-5@3.21.0 - -## 3.20.4 - -### Patch Changes - -- Updated dependencies [[`a019687`](https://github.com/toss/suspensive/commit/a019687dd0ed222d8cc4c3d4de44f889103cbca4)]: - - @suspensive/react-query-4@3.20.4 - - @suspensive/react-query-5@3.20.4 - -## 3.20.3 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.20.3 - - @suspensive/react-query-5@3.20.3 - -## 3.20.2 - -### Patch Changes - -- Updated dependencies [[`c58b5f6`](https://github.com/toss/suspensive/commit/c58b5f6c16f72dbaac6ecd984226a0cc4fc3d8be)]: - - @suspensive/react-query-5@3.20.2 - - @suspensive/react-query-4@3.20.2 - -## 3.20.1 - -### Patch Changes - -- [#1935](https://github.com/toss/suspensive/pull/1935) [`1041865`](https://github.com/toss/suspensive/commit/10418656384cef148da65943cdb919d7b990122c) Thanks [@manudeli](https://github.com/manudeli)! - fix(react-query): update installation instructions for clarity - -- Updated dependencies []: - - @suspensive/react-query-4@3.20.1 - - @suspensive/react-query-5@3.20.1 - -## 3.20.0 - -### Minor Changes - -- [#1927](https://github.com/toss/suspensive/pull/1927) [`34607e4`](https://github.com/toss/suspensive/commit/34607e46788aa26a62da09e8b301cb68a5de615f) Thanks [@manudeli](https://github.com/manudeli)! - feat(react-query): add timeout cancellation support to QueriesHydration - -### Patch Changes - -- Updated dependencies [[`34607e4`](https://github.com/toss/suspensive/commit/34607e46788aa26a62da09e8b301cb68a5de615f)]: - - @suspensive/react-query-4@3.20.0 - - @suspensive/react-query-5@3.20.0 - -## 3.19.6 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.19.6 - - @suspensive/react-query-5@3.19.6 - -## 3.19.5 - -### Patch Changes - -- [#1918](https://github.com/toss/suspensive/pull/1918) [`47571c4`](https://github.com/toss/suspensive/commit/47571c47877d3616a3812a8079facf08d0129269) Thanks [@manudeli](https://github.com/manudeli)! - fix(\*): remove banner option from tsdown configurations and add 'use client' directive to multiple React components - -- Updated dependencies [[`47571c4`](https://github.com/toss/suspensive/commit/47571c47877d3616a3812a8079facf08d0129269)]: - - @suspensive/react-query-4@3.19.5 - - @suspensive/react-query-5@3.19.5 - -## 3.19.4 - -### Patch Changes - -- [#1921](https://github.com/toss/suspensive/pull/1921) [`8d82753`](https://github.com/toss/suspensive/commit/8d8275349327f1bfce0659d0944a485bcb21cabb) Thanks [@manudeli](https://github.com/manudeli)! - fix(tsdown): enable unbundling option in configuration - -- Updated dependencies [[`8d82753`](https://github.com/toss/suspensive/commit/8d8275349327f1bfce0659d0944a485bcb21cabb)]: - - @suspensive/react-query-4@3.19.4 - - @suspensive/react-query-5@3.19.4 - -## 3.19.3 - -### Patch Changes - -- [#1913](https://github.com/toss/suspensive/pull/1913) [`0034bd7`](https://github.com/toss/suspensive/commit/0034bd700f16157b89b748cb668cf4a97e97b34f) Thanks [@manudeli](https://github.com/manudeli)! - fix(\*): tsdown 0.18.0 -> 0.21.3 - -- Updated dependencies [[`0034bd7`](https://github.com/toss/suspensive/commit/0034bd700f16157b89b748cb668cf4a97e97b34f)]: - - @suspensive/react-query-4@3.19.3 - - @suspensive/react-query-5@3.19.3 - -## 3.19.2 - -### Patch Changes - -- Updated dependencies [[`e7a1b88`](https://github.com/toss/suspensive/commit/e7a1b8837799ccb72cbc904f121d460aba749dbe)]: - - @suspensive/react-query-4@3.19.2 - - @suspensive/react-query-5@3.19.2 - -## 3.19.1 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.19.1 - - @suspensive/react-query-5@3.19.1 - -## 3.19.0 - -### Patch Changes - -- Updated dependencies [[`ea4faf0`](https://github.com/toss/suspensive/commit/ea4faf038c35909cc48040a89f5e1f6a504e75c3)]: - - @suspensive/react-query-4@3.19.0 - - @suspensive/react-query-5@3.19.0 - -## 3.18.0 - -### Patch Changes - -- Updated dependencies [[`8260f86`](https://github.com/toss/suspensive/commit/8260f8627967b7626a8a5e97c5e976e8e0012f63)]: - - @suspensive/react-query-4@3.18.0 - - @suspensive/react-query-5@3.18.0 - -## 3.17.3 - -### Patch Changes - -- [#1868](https://github.com/toss/suspensive/pull/1868) [`1d43e8d`](https://github.com/toss/suspensive/commit/1d43e8de9541b1f3d20d621744ecd1e8934a3a8a) Thanks [@manudeli](https://github.com/manudeli)! - chore: to resolve latest tag problem - -- Updated dependencies [[`1d43e8d`](https://github.com/toss/suspensive/commit/1d43e8de9541b1f3d20d621744ecd1e8934a3a8a)]: - - @suspensive/react-query-4@3.17.3 - - @suspensive/react-query-5@3.17.3 - -## 3.17.2 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.17.2 - - @suspensive/react-query-5@3.17.2 - -## 3.17.1 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.17.1 - - @suspensive/react-query-5@3.17.1 - -## 3.17.0 - -### Minor Changes - -- [#1848](https://github.com/toss/suspensive/pull/1848) [`7fd0f2b`](https://github.com/toss/suspensive/commit/7fd0f2be9387ea2d5c3c947dbeca711348f27bd4) Thanks [@manudeli](https://github.com/manudeli)! - feat(react-query): remove `getQueryClient` & add `createGetQueryClient` - -### Patch Changes - -- Updated dependencies [[`7fd0f2b`](https://github.com/toss/suspensive/commit/7fd0f2be9387ea2d5c3c947dbeca711348f27bd4)]: - - @suspensive/react-query-4@3.17.0 - - @suspensive/react-query-5@3.17.0 - -## 3.16.0 - -### Minor Changes - -- [#1843](https://github.com/toss/suspensive/pull/1843) [`ff45cf9`](https://github.com/toss/suspensive/commit/ff45cf938b0558ce4620a1273007b340a0db354a) Thanks [@manudeli](https://github.com/manudeli)! - feat(react-query): add getQueryClient - -### Patch Changes - -- Updated dependencies [[`ff45cf9`](https://github.com/toss/suspensive/commit/ff45cf938b0558ce4620a1273007b340a0db354a)]: - - @suspensive/react-query-4@3.16.0 - - @suspensive/react-query-5@3.16.0 - -## 3.15.1 - -### Patch Changes - -- [#1826](https://github.com/toss/suspensive/pull/1826) [`39d4343`](https://github.com/toss/suspensive/commit/39d434384afa2597fc717038dc267079b3ee6712) Thanks [@manudeli](https://github.com/manudeli)! - fix(\*): update tsdown - -- Updated dependencies [[`39d4343`](https://github.com/toss/suspensive/commit/39d434384afa2597fc717038dc267079b3ee6712), [`fca3ab9`](https://github.com/toss/suspensive/commit/fca3ab9f18c405016cef971bbe9eba1c1f9a9db3)]: - - @suspensive/react-query-4@3.15.1 - - @suspensive/react-query-5@3.15.1 - -## 3.15.0 - -### Minor Changes - -- [#1816](https://github.com/toss/suspensive/pull/1816) [`dfe0b04`](https://github.com/toss/suspensive/commit/dfe0b04d8bebc1646ae187347cdd75fbb09e2716) Thanks [@manudeli](https://github.com/manudeli)! - fix(react-query): rename QueriesHydrationBoundary → QueriesHydration - -### Patch Changes - -- Updated dependencies [[`dfe0b04`](https://github.com/toss/suspensive/commit/dfe0b04d8bebc1646ae187347cdd75fbb09e2716)]: - - @suspensive/react-query-4@3.15.0 - - @suspensive/react-query-5@3.15.0 - -## 3.14.0 - -### Minor Changes - -- [#1812](https://github.com/toss/suspensive/pull/1812) [`d0e4561`](https://github.com/toss/suspensive/commit/d0e45610a1078c9321ba7f86bcd8e3dd8c073e07) Thanks [@manudeli](https://github.com/manudeli)! - feat(react-query): add `` (formerly ``) - -### Patch Changes - -- Updated dependencies [[`d0e4561`](https://github.com/toss/suspensive/commit/d0e45610a1078c9321ba7f86bcd8e3dd8c073e07)]: - - @suspensive/react-query-4@3.14.0 - - @suspensive/react-query-5@3.14.0 - -## 3.13.0 - -### Minor Changes - -- [#1791](https://github.com/toss/suspensive/pull/1791) [`192b6c8`](https://github.com/toss/suspensive/commit/192b6c86000995afb58610a441b6d9746c66a128) Thanks [@gwansikk](https://github.com/gwansikk)! - fix(react-query): add peer react19 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.13.0 - - @suspensive/react-query-5@3.13.0 - -## 3.12.0 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.12.0 - - @suspensive/react-query-5@3.12.0 - -## 3.11.0 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.11.0 - - @suspensive/react-query-5@3.11.0 - -## 3.10.1 - -### Patch Changes - -- [#1756](https://github.com/toss/suspensive/pull/1756) [`46c7db1`](https://github.com/toss/suspensive/commit/46c7db14b4f9f8ccb0e1146524db91e719265ead) Thanks [@manudeli](https://github.com/manudeli)! - chore: update tsdown version - -- Updated dependencies [[`46c7db1`](https://github.com/toss/suspensive/commit/46c7db14b4f9f8ccb0e1146524db91e719265ead)]: - - @suspensive/react-query-4@3.10.1 - - @suspensive/react-query-5@3.10.1 - -## 3.10.0 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.10.0 - - @suspensive/react-query-5@3.10.0 - -## 3.9.1 - -### Patch Changes - -- [#1737](https://github.com/toss/suspensive/pull/1737) [`458812c`](https://github.com/toss/suspensive/commit/458812cb875356aefacba2f3ba9515a30720b57e) Thanks [@copilot-swe-agent](https://github.com/apps/copilot-swe-agent)! - feat: add npm OIDC authentication support - - This adds OIDC (OpenID Connect) authentication support for npm publishing in GitHub Actions. The implementation enables secure, tokenless publishing to npm using GitHub's OIDC tokens with provenance support. - - Key features: - - - **OIDC Authentication**: Uses GitHub Actions `id-token: write` permission for secure publishing - - **Provenance Support**: Enables npm package provenance through `NPM_CONFIG_PROVENANCE=true` - - **Backward Compatibility**: Maintains NPM_TOKEN as fallback for existing workflows - - This enhances security by reducing dependency on long-lived npm tokens while providing package provenance for better supply chain security. - -- Updated dependencies [[`458812c`](https://github.com/toss/suspensive/commit/458812cb875356aefacba2f3ba9515a30720b57e)]: - - @suspensive/react-query-4@3.9.1 - - @suspensive/react-query-5@3.9.1 - -## 3.9.0 - -### Minor Changes - -- [`7c712e1`](https://github.com/toss/suspensive/commit/7c712e1ca1a2804796c7d8f252b40f7bd7f225a6) Thanks [@manudeli](https://github.com/manudeli)! - feat(react-query): update minimum version of TanStack Query as 4.41.0 - -### Patch Changes - -- Updated dependencies [[`7c712e1`](https://github.com/toss/suspensive/commit/7c712e1ca1a2804796c7d8f252b40f7bd7f225a6)]: - - @suspensive/react-query-4@3.9.0 - - @suspensive/react-query-5@3.9.0 - -## 3.8.0 - -### Minor Changes - -- [#1726](https://github.com/toss/suspensive/pull/1726) [`c87696a`](https://github.com/toss/suspensive/commit/c87696a1bf526b27a53a4ba81f82edf50c8f8c12) Thanks [@manudeli](https://github.com/manudeli)! - feat: mark `@suspensive/react-query-5`'s `mutationOptions` as deprecated, `@suspensive/react-query-4`'s `mutationOptions` as stable - -### Patch Changes - -- Updated dependencies [[`c87696a`](https://github.com/toss/suspensive/commit/c87696a1bf526b27a53a4ba81f82edf50c8f8c12)]: - - @suspensive/react-query-5@3.8.0 - - @suspensive/react-query-4@3.8.0 - -## 3.7.0 - -### Minor Changes - -- [#1723](https://github.com/toss/suspensive/pull/1723) [`509bbcf`](https://github.com/toss/suspensive/commit/509bbcfeb8fcdb8c066d91d1589b2163e053452d) Thanks [@manudeli](https://github.com/manudeli)! - feat(react-query): add `` - -### Patch Changes - -- Updated dependencies [[`509bbcf`](https://github.com/toss/suspensive/commit/509bbcfeb8fcdb8c066d91d1589b2163e053452d)]: - - @suspensive/react-query-4@3.7.0 - - @suspensive/react-query-5@3.7.0 - -## 3.6.0 - -### Minor Changes - -- [#1678](https://github.com/toss/suspensive/pull/1678) [`b2f7f44`](https://github.com/toss/suspensive/commit/b2f7f44f69768aaf92bf20fc52e15f2b573e7664) Thanks [@gwansikk](https://github.com/gwansikk)! - chore(\*): migrate tsdown - -### Patch Changes - -- Updated dependencies [[`b2f7f44`](https://github.com/toss/suspensive/commit/b2f7f44f69768aaf92bf20fc52e15f2b573e7664)]: - - @suspensive/react-query-4@3.6.0 - - @suspensive/react-query-5@3.6.0 - -## 3.5.0 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.5.0 - - @suspensive/react-query-5@3.5.0 - -## 3.4.0 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.4.0 - - @suspensive/react-query-5@3.4.0 - -## 3.3.2 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.3.2 - - @suspensive/react-query-5@3.3.2 - -## 3.3.1 - -### Patch Changes - -- Updated dependencies [[`27bda1d`](https://github.com/toss/suspensive/commit/27bda1df5675c068e2cbb6f202b4ceb00ced4465)]: - - @suspensive/react-query-4@3.3.1 - - @suspensive/react-query-5@3.3.1 - -## 3.3.0 - -### Minor Changes - -- [#1639](https://github.com/toss/suspensive/pull/1639) [`0f20895`](https://github.com/toss/suspensive/commit/0f20895511dda9bd95dfdcacb694ff3ce456eb3f) Thanks [@manudeli](https://github.com/manudeli)! - fix(react-query): update peerDependency, @tanstack/react-query to version 4.40.0 and deprecate old options - -### Patch Changes - -- Updated dependencies [[`0f20895`](https://github.com/toss/suspensive/commit/0f20895511dda9bd95dfdcacb694ff3ce456eb3f)]: - - @suspensive/react-query-4@3.3.0 - - @suspensive/react-query-5@3.3.0 - -## 3.2.3 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.2.3 - - @suspensive/react-query-5@3.2.3 - -## 3.2.2 - -### Patch Changes - -- [#1590](https://github.com/toss/suspensive/pull/1590) [`cd72194`](https://github.com/toss/suspensive/commit/cd72194871b6b330e6b05d442a0ba1e7d52c6891) Thanks [@manudeli](https://github.com/manudeli)! - chore(\*): npm tag as latest - -- Updated dependencies [[`cd72194`](https://github.com/toss/suspensive/commit/cd72194871b6b330e6b05d442a0ba1e7d52c6891)]: - - @suspensive/react-query-4@3.2.2 - - @suspensive/react-query-5@3.2.2 - -## 3.2.1 - -### Patch Changes - -- [#1574](https://github.com/toss/suspensive/pull/1574) [`aed5a4c`](https://github.com/toss/suspensive/commit/aed5a4c63e4929ac17d9dbe5337f7d4a68eb2062) Thanks [@gwansikk](https://github.com/gwansikk)! - fix(react-query): replace wildcard exports with named exports - -- Updated dependencies []: - - @suspensive/react-query-4@3.2.1 - - @suspensive/react-query-5@3.2.1 - -## 3.2.0 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.2.0 - - @suspensive/react-query-5@3.2.0 - -## 3.1.1 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.1.1 - - @suspensive/react-query-5@3.1.1 - -## 3.1.0 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.1.0 - - @suspensive/react-query-5@3.1.0 - -## 3.0.0 - -### Major Changes - -- [#1424](https://github.com/toss/suspensive/pull/1424) [`59a809d`](https://github.com/toss/suspensive/commit/59a809d8e91e92ef7b1dd0a874d65c0707bf371e) Thanks [@manudeli](https://github.com/manudeli)! - feat(v3): remove deprecated interfaces - -### Patch Changes - -- [#1434](https://github.com/toss/suspensive/pull/1434) [`2be4348`](https://github.com/toss/suspensive/commit/2be434844157d63e16d5555fbb685c1757dd4fdf) Thanks [@manudeli](https://github.com/manudeli)! - remove peerDeps error - -- [#1479](https://github.com/toss/suspensive/pull/1479) [`ae72a0f`](https://github.com/toss/suspensive/commit/ae72a0f4a33021404ed720e37c98b70bff1af5b9) Thanks [@kangju2000](https://github.com/kangju2000)! - fix: resolve issues in JSR publish action - -- [#1497](https://github.com/toss/suspensive/pull/1497) [`e400035`](https://github.com/toss/suspensive/commit/e4000352b7d3e42f0164983cca2bcde9fd24751c) Thanks [@kangju2000](https://github.com/kangju2000)! - chore: improve JSR imports sync with consistent dependency formatting - -- [#1511](https://github.com/toss/suspensive/pull/1511) [`3f87359`](https://github.com/toss/suspensive/commit/3f873592847e40170252e04b267911dee6559c7e) Thanks [@kangju2000](https://github.com/kangju2000)! - chore(\*): remove JSR support and related files - -- [#1475](https://github.com/toss/suspensive/pull/1475) [`c44994b`](https://github.com/toss/suspensive/commit/c44994b3510d6c41ed09504cb74999a99dd99253) Thanks [@kangju2000](https://github.com/kangju2000)! - feat: add JSR support and publishing workflow - -- Updated dependencies [[`2be4348`](https://github.com/toss/suspensive/commit/2be434844157d63e16d5555fbb685c1757dd4fdf), [`59a809d`](https://github.com/toss/suspensive/commit/59a809d8e91e92ef7b1dd0a874d65c0707bf371e), [`e400035`](https://github.com/toss/suspensive/commit/e4000352b7d3e42f0164983cca2bcde9fd24751c), [`3f87359`](https://github.com/toss/suspensive/commit/3f873592847e40170252e04b267911dee6559c7e), [`c44994b`](https://github.com/toss/suspensive/commit/c44994b3510d6c41ed09504cb74999a99dd99253), [`56ae4eb`](https://github.com/toss/suspensive/commit/56ae4eb378fbdb150ecb1508a659411ce0e84bc8), [`a37dd3d`](https://github.com/toss/suspensive/commit/a37dd3dd2f10f3f997fed81147f38cdb944dbd7a), [`c78cbfd`](https://github.com/toss/suspensive/commit/c78cbfd1f2cf95720f6cb1e5963178e51b041c2b)]: - - @suspensive/react-query-4@3.0.0 - - @suspensive/react-query-5@3.0.0 - -## 3.0.0-next.19 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.0.0-next.19 - - @suspensive/react-query-5@3.0.0-next.19 - -## 3.0.0-next.18 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.0.0-next.18 - - @suspensive/react-query-5@3.0.0-next.18 - -## 3.0.0-next.17 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.0.0-next.17 - - @suspensive/react-query-5@3.0.0-next.17 - -## 3.0.0-next.16 - -### Patch Changes - -- [#1511](https://github.com/toss/suspensive/pull/1511) [`3f87359`](https://github.com/toss/suspensive/commit/3f873592847e40170252e04b267911dee6559c7e) Thanks [@kangju2000](https://github.com/kangju2000)! - chore(\*): remove JSR support and related files - -- Updated dependencies [[`3f87359`](https://github.com/toss/suspensive/commit/3f873592847e40170252e04b267911dee6559c7e), [`56ae4eb`](https://github.com/toss/suspensive/commit/56ae4eb378fbdb150ecb1508a659411ce0e84bc8)]: - - @suspensive/react-query-4@3.0.0-next.16 - - @suspensive/react-query-5@3.0.0-next.16 - -## 3.0.0-next.15 - -### Patch Changes - -- [#1497](https://github.com/toss/suspensive/pull/1497) [`e400035`](https://github.com/toss/suspensive/commit/e4000352b7d3e42f0164983cca2bcde9fd24751c) Thanks [@kangju2000](https://github.com/kangju2000)! - chore: improve JSR imports sync with consistent dependency formatting - -- Updated dependencies [[`e400035`](https://github.com/toss/suspensive/commit/e4000352b7d3e42f0164983cca2bcde9fd24751c)]: - - @suspensive/react-query-4@3.0.0-next.15 - - @suspensive/react-query-5@3.0.0-next.15 - -## 3.0.0-next.14 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.0.0-next.14 - - @suspensive/react-query-5@3.0.0-next.14 - -## 3.0.0-next.13 - -### Patch Changes - -- Updated dependencies [[`a37dd3d`](https://github.com/toss/suspensive/commit/a37dd3dd2f10f3f997fed81147f38cdb944dbd7a)]: - - @suspensive/react-query-4@3.0.0-next.13 - - @suspensive/react-query-5@3.0.0-next.13 - -## 3.0.0-next.12 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.0.0-next.12 - - @suspensive/react-query-5@3.0.0-next.12 - -## 3.0.0-next.11 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.0.0-next.11 - - @suspensive/react-query-5@3.0.0-next.11 - -## 3.0.0-next.10 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.0.0-next.10 - - @suspensive/react-query-5@3.0.0-next.10 - -## 3.0.0-next.9 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.0.0-next.9 - - @suspensive/react-query-5@3.0.0-next.9 - -## 3.0.0-next.8 - -### Patch Changes - -- [#1479](https://github.com/toss/suspensive/pull/1479) [`ae72a0f`](https://github.com/toss/suspensive/commit/ae72a0f4a33021404ed720e37c98b70bff1af5b9) Thanks [@kangju2000](https://github.com/kangju2000)! - fix: resolve issues in JSR publish action - -- Updated dependencies []: - - @suspensive/react-query-4@3.0.0-next.8 - - @suspensive/react-query-5@3.0.0-next.8 - -## 3.0.0-next.7 - -### Patch Changes - -- [#1475](https://github.com/toss/suspensive/pull/1475) [`c44994b`](https://github.com/toss/suspensive/commit/c44994b3510d6c41ed09504cb74999a99dd99253) Thanks [@kangju2000](https://github.com/kangju2000)! - feat: add JSR support and publishing workflow - -- Updated dependencies [[`c44994b`](https://github.com/toss/suspensive/commit/c44994b3510d6c41ed09504cb74999a99dd99253)]: - - @suspensive/react-query-4@3.0.0-next.7 - - @suspensive/react-query-5@3.0.0-next.7 - -## 3.0.0-next.6 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.0.0-next.6 - - @suspensive/react-query-5@3.0.0-next.6 - -## 3.0.0-next.5 - -### Patch Changes - -- Updated dependencies [[`c78cbfd`](https://github.com/toss/suspensive/commit/c78cbfd1f2cf95720f6cb1e5963178e51b041c2b)]: - - @suspensive/react-query-4@3.0.0-next.5 - - @suspensive/react-query-5@3.0.0-next.5 - -## 3.0.0-next.4 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.0.0-next.4 - - @suspensive/react-query-5@3.0.0-next.4 - -## 3.0.0-next.3 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.0.0-next.3 - - @suspensive/react-query-5@3.0.0-next.3 - -## 3.0.0-next.2 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react-query-4@3.0.0-next.2 - - @suspensive/react-query-5@3.0.0-next.2 - -## 3.0.0-next.1 - -### Patch Changes - -- [#1434](https://github.com/toss/suspensive/pull/1434) [`2be4348`](https://github.com/toss/suspensive/commit/2be434844157d63e16d5555fbb685c1757dd4fdf) Thanks [@manudeli](https://github.com/manudeli)! - remove peerDeps error - -- Updated dependencies [[`2be4348`](https://github.com/toss/suspensive/commit/2be434844157d63e16d5555fbb685c1757dd4fdf)]: - - @suspensive/react-query-4@3.0.0-next.1 - - @suspensive/react-query-5@3.0.0-next.1 - -## 3.0.0-next.0 - -### Major Changes - -- [#1424](https://github.com/toss/suspensive/pull/1424) [`59a809d`](https://github.com/toss/suspensive/commit/59a809d8e91e92ef7b1dd0a874d65c0707bf371e) Thanks [@manudeli](https://github.com/manudeli)! - feat(v3): remove deprecated interfaces - -### Patch Changes - -- Updated dependencies [[`59a809d`](https://github.com/toss/suspensive/commit/59a809d8e91e92ef7b1dd0a874d65c0707bf371e)]: - - @suspensive/react-query-4@3.0.0-next.0 - - @suspensive/react-query-5@3.0.0-next.0 - -## 2.18.14 - -### Patch Changes - -- [#1866](https://github.com/toss/suspensive/pull/1866) [`9e7fce0`](https://github.com/toss/suspensive/commit/9e7fce0193e4a3fcecb04b91de8e332107ee5d39) Thanks [@manudeli](https://github.com/manudeli)! - fix(react-query): update peer dependencies for react-query-\* packages to use wildcard version - -- Updated dependencies [[`9e7fce0`](https://github.com/toss/suspensive/commit/9e7fce0193e4a3fcecb04b91de8e332107ee5d39)]: - - @suspensive/react-query-4@2.18.14 - - @suspensive/react-query-5@2.18.14 - - @suspensive/react@2.18.14 - -## 2.18.13 - -### Patch Changes - -- Updated dependencies [[`7a920d3`](https://github.com/toss/suspensive/commit/7a920d321a6bced67c2247c87848cbc657539a0b)]: - - @suspensive/react@2.18.13 - - @suspensive/react-query-4@2.18.13 - - @suspensive/react-query-5@2.18.13 - -## 2.18.12 - -### Patch Changes - -- Updated dependencies [[`421d49d`](https://github.com/toss/suspensive/commit/421d49d6282bd375772aa898bca7b3f88b6a7ad8)]: - - @suspensive/react@2.18.12 - - @suspensive/react-query-4@2.18.12 - - @suspensive/react-query-5@2.18.12 - -## 2.18.11 - -### Patch Changes - -- Updated dependencies [[`ce3cb11`](https://github.com/toss/suspensive/commit/ce3cb110eba194c77a1348afede87a83a7005d89)]: - - @suspensive/react@2.18.11 - - @suspensive/react-query-4@2.18.11 - - @suspensive/react-query-5@2.18.11 - -## 2.18.10 - -### Patch Changes - -- [#1389](https://github.com/toss/suspensive/pull/1389) [`d381f94`](https://github.com/toss/suspensive/commit/d381f9496913f58ee5f698b04c4a90285b8df045) Thanks [@manudeli](https://github.com/manudeli)! - feat(\*): support react 19 - -- Updated dependencies [[`d381f94`](https://github.com/toss/suspensive/commit/d381f9496913f58ee5f698b04c4a90285b8df045)]: - - @suspensive/react-query-4@2.18.10 - - @suspensive/react-query-5@2.18.10 - - @suspensive/react@2.18.10 - -## 2.18.9 - -### Patch Changes - -- [#1388](https://github.com/toss/suspensive/pull/1388) [`a9bff19`](https://github.com/toss/suspensive/commit/a9bff19e25d17f5773ccafe89fbbe99255b41a0a) Thanks [@gwansikk](https://github.com/gwansikk)! - feat(react-query): add cli error handling - -- Updated dependencies []: - - @suspensive/react@2.18.9 - - @suspensive/react-query-4@2.18.9 - - @suspensive/react-query-5@2.18.9 - -## 2.18.8 - -### Patch Changes - -- [#1383](https://github.com/toss/suspensive/pull/1383) [`2c06c84`](https://github.com/toss/suspensive/commit/2c06c84263f9602b67dd79d433c48114c4e5cc83) Thanks [@gwansikk](https://github.com/gwansikk)! - refactor(react-query): improve cli utils - -- Updated dependencies []: - - @suspensive/react@2.18.8 - - @suspensive/react-query-4@2.18.8 - - @suspensive/react-query-5@2.18.8 - -## 2.18.7 - -### Patch Changes - -- [#1370](https://github.com/toss/suspensive/pull/1370) [`390e82d`](https://github.com/toss/suspensive/commit/390e82d57c30e05201d92aaad3a2bd16b9f57bfe) Thanks [@gwansikk](https://github.com/gwansikk)! - refactor(tsup): update script options - -- Updated dependencies []: - - @suspensive/react@2.18.7 - - @suspensive/react-query-4@2.18.7 - - @suspensive/react-query-5@2.18.7 - -## 2.18.6 - -### Patch Changes - -- Updated dependencies [[`30b39d9`](https://github.com/toss/suspensive/commit/30b39d9c6e8ad5cf29316eb318ecd989b8da8aa7), [`89c1cd9`](https://github.com/toss/suspensive/commit/89c1cd9028bbdf092cdda24254a56afd003c941f), [`9db2983`](https://github.com/toss/suspensive/commit/9db298363b0df84225e03e54bbbe950814c55495), [`9db2983`](https://github.com/toss/suspensive/commit/9db298363b0df84225e03e54bbbe950814c55495)]: - - @suspensive/react-query-4@2.18.6 - - @suspensive/react-query-5@2.18.6 - - @suspensive/react@2.18.6 - -## 2.18.5 - -### Patch Changes - -- Updated dependencies [[`f7252b4`](https://github.com/toss/suspensive/commit/f7252b4fb17ebada56490fb624a01eb9fe0d1f44)]: - - @suspensive/react-query-4@2.18.5 - - @suspensive/react-query-5@2.18.5 - - @suspensive/react@2.18.5 - -## 2.18.4 - -### Patch Changes - -- Updated dependencies [[`91d8ae1`](https://github.com/toss/suspensive/commit/91d8ae1d63fee54f147bca9fc54bcb086d4061cf)]: - - @suspensive/react@2.18.4 - - @suspensive/react-query-4@2.18.4 - - @suspensive/react-query-5@2.18.4 - -## 2.18.3 - -### Patch Changes - -- Updated dependencies [[`fdd120e`](https://github.com/toss/suspensive/commit/fdd120e3c6fc7e9537a927b35a2ab4be26af3f83)]: - - @suspensive/react@2.18.3 - - @suspensive/react-query-4@2.18.3 - - @suspensive/react-query-5@2.18.3 - -## 2.18.2 - -### Patch Changes - -- [#1318](https://github.com/toss/suspensive/pull/1318) [`0573fe8`](https://github.com/toss/suspensive/commit/0573fe86de0595108f4cf32ee525ac9978bafa99) Thanks [@manudeli](https://github.com/manudeli)! - test(react-query): add test case for loadModule - -- Updated dependencies []: - - @suspensive/react@2.18.2 - - @suspensive/react-query-4@2.18.2 - - @suspensive/react-query-5@2.18.2 - -## 2.18.1 - -### Patch Changes - -- Updated dependencies [[`ae8bd8b`](https://github.com/toss/suspensive/commit/ae8bd8bfa91f24c178f50958926c1d718f1f2e84)]: - - @suspensive/react@2.18.1 - - @suspensive/react-query-4@2.18.1 - - @suspensive/react-query-5@2.18.1 - -## 2.18.0 - -### Patch Changes - -- Updated dependencies [[`643f8bd`](https://github.com/toss/suspensive/commit/643f8bdbf513f9cb308e993c6a43db96da10ee94)]: - - @suspensive/react@2.18.0 - - @suspensive/react-query-4@2.18.0 - - @suspensive/react-query-5@2.18.0 - -## 2.17.4 - -### Patch Changes - -- Updated dependencies [[`1ac80e7`](https://github.com/toss/suspensive/commit/1ac80e717d427635addbe1e6dec6c22b93be8632)]: - - @suspensive/react-query-4@2.17.4 - - @suspensive/react-query-5@2.17.4 - - @suspensive/react@2.17.4 - -## 2.17.3 - -### Patch Changes - -- Updated dependencies [[`5044c94`](https://github.com/toss/suspensive/commit/5044c949ca5294ca453ba4b2983d526c8b5123d9)]: - - @suspensive/react@2.17.3 - - @suspensive/react-query-4@2.17.3 - - @suspensive/react-query-5@2.17.3 - -## 2.17.2 - -### Patch Changes - -- Updated dependencies [[`d84ee5c`](https://github.com/toss/suspensive/commit/d84ee5c4e635c5334b8d5e2c31f45b790df1a8ca)]: - - @suspensive/react@2.17.2 - - @suspensive/react-query-4@2.17.2 - - @suspensive/react-query-5@2.17.2 - -## 2.17.1 - -### Patch Changes - -- [#1272](https://github.com/toss/suspensive/pull/1272) [`89f5b5c`](https://github.com/toss/suspensive/commit/89f5b5c4d9b16bcbed77ef3e17bb1f34babe2921) Thanks [@love1ace](https://github.com/love1ace)! - docs(\*): update description of package.json - -- Updated dependencies [[`89f5b5c`](https://github.com/toss/suspensive/commit/89f5b5c4d9b16bcbed77ef3e17bb1f34babe2921)]: - - @suspensive/react-query-4@2.17.1 - - @suspensive/react-query-5@2.17.1 - - @suspensive/react@2.17.1 - - @suspensive/utils@2.17.1 - -## 2.17.0 - -### Minor Changes - -- [#1269](https://github.com/toss/suspensive/pull/1269) [`0e859c9`](https://github.com/toss/suspensive/commit/0e859c977d2e6491da376337c3ea03e726d9b614) Thanks [@gwansikk](https://github.com/gwansikk)! - feat(react-query): add `` - -### Patch Changes - -- Updated dependencies [[`0e859c9`](https://github.com/toss/suspensive/commit/0e859c977d2e6491da376337c3ea03e726d9b614)]: - - @suspensive/react-query-4@2.17.0 - - @suspensive/react-query-5@2.17.0 - - @suspensive/utils@2.17.0 - - @suspensive/react@2.17.0 - -## 2.16.1 - -### Patch Changes - -- [#1261](https://github.com/toss/suspensive/pull/1261) [`f599246`](https://github.com/toss/suspensive/commit/f599246078bf7ad4bcf3a7528245ce92d1a6472c) Thanks [@manudeli](https://github.com/manudeli)! - feat(react-query): remove experimental jsdoc of infiniteQueryOptions,`` - -- Updated dependencies [[`f599246`](https://github.com/toss/suspensive/commit/f599246078bf7ad4bcf3a7528245ce92d1a6472c)]: - - @suspensive/react-query-4@2.16.1 - - @suspensive/react-query-5@2.16.1 - - @suspensive/utils@2.16.1 - - @suspensive/react@2.16.1 - -## 2.16.0 - -### Minor Changes - -- [#1258](https://github.com/toss/suspensive/pull/1258) [`b9c8757`](https://github.com/toss/suspensive/commit/b9c87576fc19194d1e1edcf302cedc52b6d629c5) Thanks [@manudeli](https://github.com/manudeli)! - feat(react-query): add ``, `` - -### Patch Changes - -- Updated dependencies [[`b9c8757`](https://github.com/toss/suspensive/commit/b9c87576fc19194d1e1edcf302cedc52b6d629c5)]: - - @suspensive/react-query-4@2.16.0 - - @suspensive/react-query-5@2.16.0 - - @suspensive/utils@2.16.0 - - @suspensive/react@2.16.0 - -## 2.15.0 - -### Patch Changes - -- Updated dependencies [[`667f0c9`](https://github.com/toss/suspensive/commit/667f0c99581a01bd58331e6ad7337f032cdb1dd3)]: - - @suspensive/react-query-4@2.15.0 - - @suspensive/react-query-5@2.15.0 - - @suspensive/utils@2.15.0 - - @suspensive/react@2.15.0 - -## 2.14.2 - -### Patch Changes - -- Updated dependencies [[`251d17b`](https://github.com/toss/suspensive/commit/251d17bf9bfc571a273e66e5c885e7250e41fd5f)]: - - @suspensive/react-query-4@2.14.2 - - @suspensive/react-query-5@2.14.2 - - @suspensive/utils@2.14.2 - - @suspensive/react@2.14.2 - -## 2.14.1 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/utils@2.14.1 - - @suspensive/react@2.14.1 - - @suspensive/react-query-4@2.14.1 - - @suspensive/react-query-5@2.14.1 - -## 2.14.0 - -### Patch Changes - -- Updated dependencies [[`2221303`](https://github.com/toss/suspensive/commit/2221303321954e9644a741475cfeeeb0f47d0d59)]: - - @suspensive/react-query-4@2.14.0 - - @suspensive/utils@2.14.0 - - @suspensive/react@2.14.0 - - @suspensive/react-query-5@2.14.0 - -## 2.13.1 - -### Patch Changes - -- Updated dependencies [[`6bc19ae`](https://github.com/toss/suspensive/commit/6bc19ae44800416eee6873734607682c92ae89cf)]: - - @suspensive/react@2.13.1 - - @suspensive/react-query-4@2.13.1 - - @suspensive/react-query-5@2.13.1 - - @suspensive/utils@2.13.1 - -## 2.13.0 - -### Patch Changes - -- Updated dependencies []: - - @suspensive/utils@2.13.0 - - @suspensive/react@2.13.0 - - @suspensive/react-query-4@2.13.0 - - @suspensive/react-query-5@2.13.0 - -## 2.12.3 - -### Patch Changes - -- [#1198](https://github.com/toss/suspensive/pull/1198) [`2dfb918`](https://github.com/toss/suspensive/commit/2dfb9180f8e5fc42ebeba5b8b35a77d52daa8156) Thanks [@gwansikk](https://github.com/gwansikk)! - fix: display tanstack apis in status cli table - -- Updated dependencies []: - - @suspensive/utils@2.12.3 - - @suspensive/react@2.12.3 - - @suspensive/react-query-4@2.12.3 - - @suspensive/react-query-5@2.12.3 - -## 2.12.2 - -### Patch Changes - -- [#1185](https://github.com/toss/suspensive/pull/1185) [`e8ab7cd`](https://github.com/toss/suspensive/commit/e8ab7cd57af7641643a15a4a7328bd8761a69523) Thanks [@gwansikk](https://github.com/gwansikk)! - feat(react-query): clarify cli command explanations - -- Updated dependencies []: - - @suspensive/utils@2.12.2 - - @suspensive/react@2.12.2 - - @suspensive/react-query-4@2.12.2 - - @suspensive/react-query-5@2.12.2 - -## 2.12.1 - -### Patch Changes - -- [#1180](https://github.com/toss/suspensive/pull/1180) [`f79b96c`](https://github.com/toss/suspensive/commit/f79b96c728e15ebe819445cf5d1c2e33e6c96ef4) Thanks [@manudeli](https://github.com/manudeli)! - fix(\*): remove unnecessary devDeps(react-dom, @types/react-dom) - -- Updated dependencies [[`f79b96c`](https://github.com/toss/suspensive/commit/f79b96c728e15ebe819445cf5d1c2e33e6c96ef4)]: - - @suspensive/react-query-4@2.12.1 - - @suspensive/react-query-5@2.12.1 - - @suspensive/utils@2.12.1 - - @suspensive/react@2.12.1 - -## 2.12.0 - -### Patch Changes - -- Updated dependencies [[`1e5256d`](https://github.com/toss/suspensive/commit/1e5256d7ee91c77164cec0c9b14830927aa6da7d)]: - - @suspensive/react@2.12.0 - - @suspensive/react-query-4@2.12.0 - - @suspensive/react-query-5@2.12.0 - - @suspensive/utils@2.12.0 - -## 2.11.0 - -### Patch Changes - -- Updated dependencies [[`d29bf9f`](https://github.com/toss/suspensive/commit/d29bf9fa6b5331f6dada5142e5ddfcc3ec2d63fc)]: - - @suspensive/react@2.11.0 - - @suspensive/react-query-4@2.11.0 - - @suspensive/react-query-5@2.11.0 - - @suspensive/utils@2.11.0 - -## 2.10.0 - -### Patch Changes - -- [`e5ed2be`](https://github.com/toss/suspensive/commit/e5ed2be611998a8a86b33998d36b6dc5c7322b43) Thanks [@manudeli](https://github.com/manudeli)! - fix(react-query): fixed dependencies - -- Updated dependencies [[`314410e`](https://github.com/toss/suspensive/commit/314410edadee92c10727fb825f2f2666a2bcd6ea)]: - - @suspensive/react-query-5@2.10.0 - - @suspensive/utils@2.10.0 - - @suspensive/react@2.10.0 - - @suspensive/react-query-4@2.10.0 - -## 2.9.4 - -### Patch Changes - -- [#1137](https://github.com/toss/suspensive/pull/1137) [`ff91b56`](https://github.com/toss/suspensive/commit/ff91b563960132578a0fe5e6d5124ef0e5768494) Thanks [@gwansikk](https://github.com/gwansikk)! - fix(react-query): improve status table - -- Updated dependencies []: - - @suspensive/utils@2.9.4 - - @suspensive/react@2.9.4 - - @suspensive/react-query-4@2.9.4 - - @suspensive/react-query-5@2.9.4 - -## 2.9.3 - -### Patch Changes - -- [#1130](https://github.com/toss/suspensive/pull/1130) [`51f6a49`](https://github.com/toss/suspensive/commit/51f6a49a235293ec5c9dd5d15736de695861418c) Thanks [@manudeli](https://github.com/manudeli)! - fix(react-query): peerDeps @suspensive/react version - -- Updated dependencies []: - - @suspensive/utils@2.9.3 - - @suspensive/react@2.9.3 - - @suspensive/react-query-4@2.9.3 - - @suspensive/react-query-5@2.9.3 - -## 2.9.2 - -### Patch Changes - -- Updated dependencies [[`89a6528`](https://github.com/toss/suspensive/commit/89a652866699f09853f9baf74a973767f2350661)]: - - @suspensive/react@2.9.2 - - @suspensive/react-query-4@2.9.2 - - @suspensive/react-query-5@2.9.2 - - @suspensive/utils@2.9.2 - -## 2.9.1 - -### Patch Changes - -- [#1113](https://github.com/toss/suspensive/pull/1113) [`67492ac`](https://github.com/toss/suspensive/commit/67492ac47985608834d761eb25b61e619f54ff4d) Thanks [@gwansikk](https://github.com/gwansikk)! - fix(react-query): parse public apis for command `srq status`'s table from built file - -- Updated dependencies []: - - @suspensive/utils@2.9.1 - - @suspensive/react@2.9.1 - - @suspensive/react-query-4@2.9.1 - - @suspensive/react-query-5@2.9.1 - -## 2.9.0 - -### Patch Changes - -- Updated dependencies [[`f9fb719`](https://github.com/toss/suspensive/commit/f9fb719c65a8de198946ac75933a8d9130ff1ce9)]: - - @suspensive/react@2.9.0 - - @suspensive/react-query-4@2.9.0 - - @suspensive/react-query-5@2.9.0 - - @suspensive/utils@2.9.0 - -## 2.8.1 - -### Patch Changes - -- Updated dependencies [[`2326b13`](https://github.com/toss/suspensive/commit/2326b1341f167454a889953fb0bbf58449e1ca98)]: - - @suspensive/utils@2.8.1 - - @suspensive/react@2.8.1 - - @suspensive/react-query-4@2.8.1 - - @suspensive/react-query-5@2.8.1 - -## 2.8.0 - -### Minor Changes - -- [#1100](https://github.com/toss/suspensive/pull/1100) [`8dcd88f`](https://github.com/toss/suspensive/commit/8dcd88f3770e0f0276bce8d40d06020511270ced) Thanks [@gwansikk](https://github.com/gwansikk)! - feat(react-query): cli status result as table - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react@2.8.0 - - @suspensive/react-query-4@2.8.0 - - @suspensive/react-query-5@2.8.0 - -## 2.7.0 - -### Minor Changes - -- [#1095](https://github.com/toss/suspensive/pull/1095) [`fff4d7b`](https://github.com/toss/suspensive/commit/fff4d7b09cf4c2db6e069eb03f90d54d56e7d176) Thanks [@manudeli](https://github.com/manudeli)! - feat(react-query): add `` - -### Patch Changes - -- Updated dependencies [[`fff4d7b`](https://github.com/toss/suspensive/commit/fff4d7b09cf4c2db6e069eb03f90d54d56e7d176)]: - - @suspensive/react-query-4@2.7.0 - - @suspensive/react-query-5@2.7.0 - - @suspensive/react@2.7.0 - -## 2.6.2 - -### Patch Changes - -- Updated dependencies [[`6848e8d`](https://github.com/toss/suspensive/commit/6848e8df6f73b5a0029e82da3356c9c73e6b16be)]: - - @suspensive/react@2.6.2 - - @suspensive/react-query-4@2.6.2 - - @suspensive/react-query-5@2.6.2 - -## 2.6.1 - -### Patch Changes - -- Updated dependencies [[`2216377`](https://github.com/toss/suspensive/commit/221637789075d55af2efeb7201146642c6d05262)]: - - @suspensive/react@2.6.1 - - @suspensive/react-query-4@2.6.1 - - @suspensive/react-query-5@2.6.1 - -## 2.6.0 - -### Minor Changes - -- [#1044](https://github.com/toss/suspensive/pull/1044) [`ed632c9`](https://github.com/toss/suspensive/commit/ed632c94170b1b042f9da4c80408552df9f57cd2) Thanks [@gwansikk](https://github.com/gwansikk)! - feat(react-query): add infiniteQueryOptions - -### Patch Changes - -- Updated dependencies [[`ed632c9`](https://github.com/toss/suspensive/commit/ed632c94170b1b042f9da4c80408552df9f57cd2)]: - - @suspensive/react-query-4@2.6.0 - - @suspensive/react@2.6.0 - - @suspensive/react-query-5@2.6.0 - -## 2.5.1 - -### Patch Changes - -- [#1039](https://github.com/toss/suspensive/pull/1039) [`35f9f6a`](https://github.com/toss/suspensive/commit/35f9f6a36c59e144551ff40e1735cef2c3c36096) Thanks [@manudeli](https://github.com/manudeli)! - fix(react-query): remove experimental in jsdoc - -- Updated dependencies [[`35f9f6a`](https://github.com/toss/suspensive/commit/35f9f6a36c59e144551ff40e1735cef2c3c36096)]: - - @suspensive/react-query-4@2.5.1 - - @suspensive/react-query-5@2.5.1 - - @suspensive/react@2.5.1 - -## 2.5.0 - -### Patch Changes - -- Updated dependencies [[`9966b3d`](https://github.com/toss/suspensive/commit/9966b3dabe59ee66bcd40a1f9c2c064364f11cb2)]: - - @suspensive/react-query-5@2.5.0 - - @suspensive/react@2.5.0 - - @suspensive/react-query-4@2.5.0 - -## 2.4.0 - -### Minor Changes - -- [#1024](https://github.com/toss/suspensive/pull/1024) [`b29131a`](https://github.com/toss/suspensive/commit/b29131a272bc557230f6dd3d9491f7f932008383) Thanks [@gwansikk](https://github.com/gwansikk)! - feat(react-query): more descriptions for cli status - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react@2.4.0 - - @suspensive/react-query-4@2.4.0 - - @suspensive/react-query-5@2.4.0 - -## 2.3.3 - -### Patch Changes - -- [#1008](https://github.com/toss/suspensive/pull/1008) [`2309449`](https://github.com/toss/suspensive/commit/2309449c19a4335765fd2714cbc002fa3b918282) Thanks [@gwansikk](https://github.com/gwansikk)! - test(react-query): add tests for commands, switchVersion, copy, package - -- Updated dependencies []: - - @suspensive/react@2.3.3 - - @suspensive/react-query-4@2.3.3 - - @suspensive/react-query-5@2.3.3 - -## 2.3.2 - -### Patch Changes - -- Updated dependencies [[`e236070`](https://github.com/toss/suspensive/commit/e2360709eac890708ffd16f68d79495bb8cec864)]: - - @suspensive/react-query-4@2.3.2 - - @suspensive/react@2.3.2 - - @suspensive/react-query-5@2.3.2 - -## 2.3.1 - -### Patch Changes - -- [#994](https://github.com/toss/suspensive/pull/994) [`647fa47`](https://github.com/toss/suspensive/commit/647fa472314b042f2dbdd354bc0a130c1a1bd3d8) Thanks [@gwansikk](https://github.com/gwansikk)! - docs(react-query): update README.md - -- Updated dependencies []: - - @suspensive/react@2.3.1 - - @suspensive/react-query-4@2.3.1 - - @suspensive/react-query-5@2.3.1 - -## 2.3.0 - -### Minor Changes - -- [#976](https://github.com/toss/suspensive/pull/976) [`c693ee8`](https://github.com/toss/suspensive/commit/c693ee8212885e717a64f91fe30b98bbe0cb0171) Thanks [@gwansikk](https://github.com/gwansikk)! - feat(react-query): improve cli DX - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react@2.3.0 - - @suspensive/react-query-4@2.3.0 - - @suspensive/react-query-5@2.3.0 - -## 2.2.4 - -### Patch Changes - -- [#978](https://github.com/toss/suspensive/pull/978) [`09e957c`](https://github.com/toss/suspensive/commit/09e957c4e9a0d2e2a5789961f9242843922915a4) Thanks [@gwansikk](https://github.com/gwansikk)! - feat(configs): add options for scripts - -- Updated dependencies [[`09e957c`](https://github.com/toss/suspensive/commit/09e957c4e9a0d2e2a5789961f9242843922915a4)]: - - @suspensive/react@2.2.4 - - @suspensive/react-query-4@0.0.1 - - @suspensive/react-query-5@0.0.1 - -## 2.2.3 - -### Patch Changes - -- [#970](https://github.com/toss/suspensive/pull/970) [`c9815d4`](https://github.com/toss/suspensive/commit/c9815d4c5fbf7da64dd288f78ac9969f2fc6c60a) Thanks [@jungwoo3490](https://github.com/jungwoo3490)! - refactor(react-query): only TypeScript & only src, dist - -- Updated dependencies []: - - @suspensive/react@2.2.3 - - @suspensive/react-query-4@0.0.1 - - @suspensive/react-query-5@0.0.1 - -## 2.2.2 - -### Patch Changes - -- Updated dependencies [[`0051a0e`](https://github.com/toss/suspensive/commit/0051a0e19a28a8acc5749aa8891c54c0ab20844c)]: - - @suspensive/react@2.2.2 - - @suspensive/react-query-4@0.0.1 - - @suspensive/react-query-5@0.0.1 - -## 2.2.1 - -### Patch Changes - -- Updated dependencies [[`d87a482`](https://github.com/toss/suspensive/commit/d87a48289244737f368c855d6afa1e85c250d78c)]: - - @suspensive/react@2.2.1 - - @suspensive/react-query-4@0.0.1 - - @suspensive/react-query-5@0.0.1 - -## 2.2.0 - -### Minor Changes - -- [#953](https://github.com/toss/suspensive/pull/953) [`8d8a2d6`](https://github.com/toss/suspensive/commit/8d8a2d6cd8f2469ed547e00e9634ac212ed68bbe) Thanks [@gwansikk](https://github.com/gwansikk)! - feat(react-query): universal support for TanStack Query 4 and 5 - -### Patch Changes - -- [#946](https://github.com/toss/suspensive/pull/946) [`2fd8108`](https://github.com/toss/suspensive/commit/2fd8108ae7f0bd0df8ecbe8bba90e3fe8ec41bbc) Thanks [@manudeli](https://github.com/manudeli)! - feat(react-query) depend on @suspensive/react-query-4,5 to support @tanstack/react-query@4,5 at once automatically - -- Updated dependencies [[`2fd8108`](https://github.com/toss/suspensive/commit/2fd8108ae7f0bd0df8ecbe8bba90e3fe8ec41bbc)]: - - @suspensive/react-query-4@0.0.1 - - @suspensive/react-query-5@0.0.1 - - @suspensive/react@2.2.0 - -## 2.1.2-beta.1 - -### Patch Changes - -- [#953](https://github.com/toss/suspensive/pull/953) [`8d8a2d6`](https://github.com/toss/suspensive/commit/8d8a2d6cd8f2469ed547e00e9634ac212ed68bbe) Thanks [@gwansikk](https://github.com/gwansikk)! - feat(react-query): universal support for TanStack Query 4 and 5 - -- Updated dependencies []: - - @suspensive/react@2.1.2-beta.1 - - @suspensive/react-query-4@0.0.1-beta.0 - - @suspensive/react-query-5@0.0.1-beta.0 - -## 2.1.2-beta.0 - -### Patch Changes - -- [#946](https://github.com/toss/suspensive/pull/946) [`2fd8108`](https://github.com/toss/suspensive/commit/2fd8108ae7f0bd0df8ecbe8bba90e3fe8ec41bbc) Thanks [@manudeli](https://github.com/manudeli)! - feat(react-query) depend on @suspensive/react-query-4,5 to support @tanstack/react-query@4,5 at once automatically - -- Updated dependencies [[`2fd8108`](https://github.com/toss/suspensive/commit/2fd8108ae7f0bd0df8ecbe8bba90e3fe8ec41bbc)]: - - @suspensive/react-query-4@0.0.1-beta.0 - - @suspensive/react-query-5@0.0.1-beta.0 - - @suspensive/react@2.1.2-beta.0 - -## 2.1.1 - -### Patch Changes - -- [`ddfca6e`](https://github.com/toss/suspensive/commit/ddfca6ef45d365050c1a7788c1f126ae1efb98c1) Thanks [@manudeli](https://github.com/manudeli)! - chore(react-query): SuspenseQueries as public api - -- Updated dependencies []: - - @suspensive/react@2.1.1 - -## 2.1.0 - -### Minor Changes - -- [#938](https://github.com/toss/suspensive/pull/938) [`6248459`](https://github.com/toss/suspensive/commit/62484590f799e86dc93f59e2a356752690295989) Thanks [@manudeli](https://github.com/manudeli)! - feat(react-query): add SuspenseQueries - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react@2.1.0 - -## 2.0.8 - -### Patch Changes - -- Updated dependencies [[`db95088`](https://github.com/toss/suspensive/commit/db95088abf61f032f236bf9b6e7e13466d99868d)]: - - @suspensive/react@2.0.8 - -## 2.0.7 - -### Patch Changes - -- [#925](https://github.com/toss/suspensive/pull/925) [`306c94d`](https://github.com/toss/suspensive/commit/306c94d4ca3047df3f783a3307aa9fb4ccade5a8) Thanks [@manudeli](https://github.com/manudeli)! - fix(react-query): update QueryErrorBoundary's jsdoc - -- Updated dependencies []: - - @suspensive/react@2.0.7 - -## 2.0.6 - -### Patch Changes - -- [#923](https://github.com/toss/suspensive/pull/923) [`1e7fbbe`](https://github.com/toss/suspensive/commit/1e7fbbed8d2ece0090ffaa9c68ed21fbd4eb9a64) Thanks [@gwansikk](https://github.com/gwansikk)! - fix(react-query): update JSDoc for `useSuspenseQueries`, `useSuspenseInfiniteQuery` - -- Updated dependencies []: - - @suspensive/react@2.0.6 - -## 2.0.5 - -### Patch Changes - -- [#911](https://github.com/toss/suspensive/pull/911) [`c6c0640`](https://github.com/toss/suspensive/commit/c6c06400e0792d488a4284c0caeefe306f99288e) Thanks [@gwansikk](https://github.com/gwansikk)! - fix(react-query): improved TypeScript engine halt due to return type inference in useSuspenseQueries - -- [#912](https://github.com/toss/suspensive/pull/912) [`0c86892`](https://github.com/toss/suspensive/commit/0c868927ec30dc0699fd3c8753cab7ee6848f6c2) Thanks [@manudeli](https://github.com/manudeli)! - chore(\*): suspensive with toss - -- Updated dependencies [[`0c86892`](https://github.com/toss/suspensive/commit/0c868927ec30dc0699fd3c8753cab7ee6848f6c2)]: - - @suspensive/react@2.0.5 - -## 2.0.4 - -### Patch Changes - -- Updated dependencies [[`8c5844b`](https://github.com/toss/suspensive/commit/8c5844bfa64c952d126ca1465299e920a906b505)]: - - @suspensive/react@2.0.4 - -## 2.0.3 - -### Patch Changes - -- [#893](https://github.com/toss/suspensive/pull/893) [`39b4f1b`](https://github.com/toss/suspensive/commit/39b4f1b42d2e02efba7c0af3e7d5568dceb62bca) Thanks [@manudeli](https://github.com/manudeli)! - fix(react-query): easier to know constraint @tanstack/react-query v4 runtimely - -- Updated dependencies []: - - @suspensive/react@2.0.3 - -## 2.0.2 - -### Patch Changes - -- Updated dependencies [[`be1b7ee`](https://github.com/toss/suspensive/commit/be1b7eef61721c93292f6f993596bd94f4752978)]: - - @suspensive/react@2.0.2 - -## 2.0.1 - -### Patch Changes - -- [#887](https://github.com/toss/suspensive/pull/887) [`8330a6b`](https://github.com/toss/suspensive/commit/8330a6b62f922bd71dbcf5f963fe2eb1d4d9e89f) Thanks [@manudeli](https://github.com/manudeli)! - fix(react-query): fix SuspenseQuery, SuspenseInfiniteQuery's return type - -- Updated dependencies []: - - @suspensive/react@2.0.1 - -## 2.0.0 - -### Major Changes - -- [#629](https://github.com/toss/suspensive/pull/629) [`78f5bd4`](https://github.com/toss/suspensive/commit/78f5bd42068f730dc71e12719c1d60c24f1bb78f) Thanks [@manudeli](https://github.com/manudeli)! - feat(react, react-query): remove deprecated apis - -- [#401](https://github.com/toss/suspensive/pull/401) [`d06e883`](https://github.com/toss/suspensive/commit/d06e883318d412e1f410dd4820bd73eaac64966a) Thanks [@manudeli](https://github.com/manudeli)! - fix(react-query): @suspensive/react-query v2's all naming convention correctly like @tanstack/react-query v5 - -- [#629](https://github.com/toss/suspensive/pull/629) [`36d7416`](https://github.com/toss/suspensive/commit/36d74169eb6fda88b62fe7d6f71f7b319480e9ba) Thanks [@manudeli](https://github.com/manudeli)! - chore(\*): versioning last beta - -- [#631](https://github.com/toss/suspensive/pull/631) [`837ed18`](https://github.com/toss/suspensive/commit/837ed184f3257d895400669b290be470871ce46a) Thanks [@manudeli](https://github.com/manudeli)! - feat(\*): remove target react v16, v17 - -### Minor Changes - -- [#828](https://github.com/toss/suspensive/pull/828) [`7f19c76`](https://github.com/toss/suspensive/commit/7f19c76248136a91ff034dfb5c354e46272fa282) Thanks [@manudeli](https://github.com/manudeli)! - feat(react-query): add queryOptions - -- [#775](https://github.com/toss/suspensive/pull/775) [`785a51a`](https://github.com/toss/suspensive/commit/785a51a1b3e3cfaa70169a9a275d172009e6318a) Thanks [@manudeli](https://github.com/manudeli)! - feat(react-query): add SuspenseQuery, SuspenseInfiniteQuery - -### Patch Changes - -- Updated dependencies [[`ea1c4ed`](https://github.com/toss/suspensive/commit/ea1c4ed2126aac570fbeda86e0366017ca1f437f), [`78f5bd4`](https://github.com/toss/suspensive/commit/78f5bd42068f730dc71e12719c1d60c24f1bb78f), [`6a3f6f4`](https://github.com/toss/suspensive/commit/6a3f6f4abf4a1860c710224293251db9ae6b5f19), [`36d7416`](https://github.com/toss/suspensive/commit/36d74169eb6fda88b62fe7d6f71f7b319480e9ba), [`3f6171b`](https://github.com/toss/suspensive/commit/3f6171b950807d0d09f526b564a7424a7fb70fe0), [`73c0cc7`](https://github.com/toss/suspensive/commit/73c0cc714aa4f1fe611bfb118050114dc6648926), [`837ed18`](https://github.com/toss/suspensive/commit/837ed184f3257d895400669b290be470871ce46a)]: - - @suspensive/react@2.0.0 - -## 2.0.0-beta.10 - -### Major Changes - -- [#629](https://github.com/toss/suspensive/pull/629) [`36d7416`](https://github.com/toss/suspensive/commit/36d74169eb6fda88b62fe7d6f71f7b319480e9ba) Thanks [@manudeli](https://github.com/manudeli)! - chore(\*): versioning last beta - -### Patch Changes - -- Updated dependencies [[`36d7416`](https://github.com/toss/suspensive/commit/36d74169eb6fda88b62fe7d6f71f7b319480e9ba)]: - - @suspensive/react@2.0.0-beta.10 - -## 2.0.0-beta.9 - -### Minor Changes - -- [#828](https://github.com/toss/suspensive/pull/828) [`7f19c76`](https://github.com/toss/suspensive/commit/7f19c76248136a91ff034dfb5c354e46272fa282) Thanks [@manudeli](https://github.com/manudeli)! - feat(react-query): add queryOptions - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react@2.0.0-beta.9 - -## 2.0.0-beta.8 - -### Minor Changes - -- [#775](https://github.com/toss/suspensive/pull/775) [`785a51a`](https://github.com/toss/suspensive/commit/785a51a1b3e3cfaa70169a9a275d172009e6318a) Thanks [@manudeli](https://github.com/manudeli)! - feat(react-query): add SuspenseQuery, SuspenseInfiniteQuery - -### Patch Changes - -- Updated dependencies []: - - @suspensive/react@2.0.0-beta.8 - -## 2.0.0-beta.7 - -### Patch Changes - -- Updated dependencies [[`3f6171b`](https://github.com/toss/suspensive/commit/3f6171b950807d0d09f526b564a7424a7fb70fe0)]: - - @suspensive/react@2.0.0-beta.7 - -## 2.0.0-beta.6 - -### Patch Changes - -- Updated dependencies [[`2bfe301`](https://github.com/toss/suspensive/commit/2bfe301fd97e8cc9467245dde71ea052dbba409e)]: - - @suspensive/react@2.0.0-beta.6 - -## 2.0.0-beta.5 - -### Patch Changes - -- Updated dependencies [[`df78d21`](https://github.com/toss/suspensive/commit/df78d21faef478930fb6fb26d6f2eccfc148da9d)]: - - @suspensive/react@2.0.0-beta.5 - -## 2.0.0-beta.4 - -### Patch Changes - -- [#711](https://github.com/toss/suspensive/pull/711) [`30f43c2`](https://github.com/toss/suspensive/commit/30f43c2a08798be739f3892483103289fba4fe78) Thanks [@Kanary159357](https://github.com/Kanary159357)! - fix(react-query): useSuspenseQueries type error with select option - -- Updated dependencies []: - - @suspensive/react@2.0.0-beta.4 - -## 2.0.0-beta.3 - -### Patch Changes - -- Updated dependencies [[`73c0cc7`](https://github.com/toss/suspensive/commit/73c0cc714aa4f1fe611bfb118050114dc6648926)]: - - @suspensive/react@2.0.0-beta.3 - -## 2.0.0-beta.2 - -### Patch Changes - -- Updated dependencies [6a3f6f4] - - @suspensive/react@2.0.0-beta.2 - -## 2.0.0-beta.1 - -### Major Changes - -- d06e883: fix(react-query): @suspensive/react-query v2's all naming convention correctly like @tanstack/react-query v5 - -### Patch Changes - -- @suspensive/react@2.0.0-beta.1 - -## 2.0.0-beta.0 - -### Major Changes - -- 78f5bd4: feat(react, react-query): remove deprecated apis -- 837ed18: feat(\*): remove target react v16, v17 - -## 1.27.0 - -### Minor Changes - -- [#876](https://github.com/toss/suspensive/pull/876) [`52d5380`](https://github.com/toss/suspensive/commit/52d5380f3fbfc30a1c2bd048aab07e612e1791df) Thanks [@manudeli](https://github.com/manudeli)! - chore(\*): last versioning before v2 - -### Patch Changes - -- Updated dependencies [[`52d5380`](https://github.com/toss/suspensive/commit/52d5380f3fbfc30a1c2bd048aab07e612e1791df)]: - - @suspensive/react@1.27.0 - -## 1.26.7 - -### Patch Changes - -- [#826](https://github.com/toss/suspensive/pull/826) [`3f2bed2`](https://github.com/toss/suspensive/commit/3f2bed2008844c8372632c18eefef8cef6c9b839) Thanks [@manudeli](https://github.com/manudeli)! - fix(react-query): add OmitKeyof to type strictly - -- Updated dependencies []: - - @suspensive/react@1.26.7 - -## 1.26.6 - -### Patch Changes - -- Updated dependencies [[`33fe78c`](https://github.com/toss/suspensive/commit/33fe78cc2cfaae05fdd641499ac4b209e6b72130)]: - - @suspensive/react@1.26.6 - -## 1.26.5 - -### Patch Changes - -- Updated dependencies [[`df6e6d8`](https://github.com/toss/suspensive/commit/df6e6d874343ca5c3ee2a872dd2ea5484b9e36c5)]: - - @suspensive/react@1.26.5 - -## 1.26.4 - -- @suspensive/react@1.26.4 - -## 1.26.3 - -## 1.26.2 - -### Patch Changes - -- [#723](https://github.com/toss/suspensive/pull/723) [`53120da`](https://github.com/toss/suspensive/commit/53120daa0c9c3f3064d9a1d0dbbe37eae6092697) Thanks [@manudeli](https://github.com/manudeli)! - test(react-query): add test cases for hooks with select - -- [#711](https://github.com/toss/suspensive/pull/711) [`30f43c2`](https://github.com/toss/suspensive/commit/30f43c2a08798be739f3892483103289fba4fe78) Thanks [@Kanary159357](https://github.com/Kanary159357)! - fix(react-query): useSuspenseQueries type error with select option - -- Updated dependencies []: - - @suspensive/react@1.26.2 - -## 1.26.1 - -### Patch Changes - -- Updated dependencies [[`d3b7c15`](https://github.com/toss/suspensive/commit/d3b7c1526dfe900e1dd1a559a406ccdf70456737), [`d3b7c15`](https://github.com/toss/suspensive/commit/d3b7c1526dfe900e1dd1a559a406ccdf70456737)]: - - @suspensive/react@1.26.1 - -## 1.26.0 - -### Patch Changes - -- Updated dependencies [[`43bd74e`](https://github.com/toss/suspensive/commit/43bd74e080fe7487fc43f75688c65af594099ef8)]: - - @suspensive/react@1.26.0 - -## 1.25.3 - -### Patch Changes - -- Updated dependencies [af96ce0] - - @suspensive/react@1.25.3 - -## 1.25.2 - -### Patch Changes - -- Updated dependencies [a6d279e] - - @suspensive/react@1.25.2 - -## 1.25.1 - -### Patch Changes - -- Updated dependencies [37f5465] - - @suspensive/react@1.25.1 - -## 1.25.0 - -### Patch Changes - -- Updated dependencies [caed129] - - @suspensive/react@1.25.0 - -## 1.24.0 - -### Patch Changes - -- Updated dependencies [89c3283] - - @suspensive/react@1.24.0 - -## 1.23.2 - -### Patch Changes - -- 9bced99: fix(tsup): remove treeshaking, minification -- Updated dependencies [9bced99] - - @suspensive/react@1.23.2 - -## 1.23.1 - -### Patch Changes - -- Updated dependencies [c526ad3] - - @suspensive/react@1.23.1 - -## 1.23.0 - -### Patch Changes - -- Updated dependencies [e776d52] - - @suspensive/react@1.23.0 - -## 1.22.2 - -### Patch Changes - -- Updated dependencies [f56c40e] - - @suspensive/react@1.22.2 - -## 1.22.1 - -### Patch Changes - -- 3782ae8: ci(eslint): add plugin:@typescript-eslint/strict-type-checked -- Updated dependencies [3782ae8] - - @suspensive/react@1.22.1 - -## 1.22.0 - -### Minor Changes - -- d1d7d1a: feat(react): add Suspense clientOnly prop to deprecate Suspense.CSROnly, wrap.Suspense.CSROnly - -### Patch Changes - -- Updated dependencies [d1d7d1a] - - @suspensive/react@1.22.0 - -## 1.21.0 - -### Patch Changes - -- Updated dependencies [6239ebb] -- Updated dependencies [45ce93f] - - @suspensive/react@1.21.0 - -## 1.20.10 - -### Patch Changes - -- 416a85c: fix: treeshake and minify to reduce bundle size -- Updated dependencies [416a85c] - - @suspensive/react@1.20.10 - -## 1.20.9 - -### Patch Changes - -- Updated dependencies [685054a] - - @suspensive/react@1.20.9 - -## 1.20.8 - -### Patch Changes - -- 4a3e7eb: fix(tsup): add splitting to reduce bundle size dramatically -- Updated dependencies [4a3e7eb] - - @suspensive/react@1.20.8 - -## 1.20.7 - -### Patch Changes - -- b69d651: fix(tsup): add supported browsers -- Updated dependencies [b69d651] - - @suspensive/react@1.20.7 - -## 1.20.6 - -### Patch Changes - -- Updated dependencies [88c1585] - - @suspensive/react@1.20.6 - -## 1.20.5 - -### Patch Changes - -- bce7c1d: fix(react): deprecate AsyncBoundary -- Updated dependencies [b5888b2] -- Updated dependencies [bce7c1d] - - @suspensive/react@1.20.5 - -## 1.20.4 - -### Patch Changes - -- acbc787: refactor: extract unnecessary packages to root -- Updated dependencies [acbc787] - - @suspensive/react@1.20.4 - -## 1.20.3 - -### Patch Changes - -- 60f7fcc: refactor(react, react-query): remove unnecessary `as` by `Object.assign` -- Updated dependencies [60f7fcc] - - @suspensive/react@1.20.3 - -## 1.20.2 - -### Patch Changes - -- e37fbcc: chore(deps-dev): Bump @types/react from 18.2.34 to 18.2.37 -- Updated dependencies [e37fbcc] - - @suspensive/react@1.20.2 - -## 1.20.1 - -### Patch Changes - -- bfecd12: fix(react-query): remove bundledDependencies - - @suspensive/react@1.20.1 - -## 1.20.0 - -### Patch Changes - -- Updated dependencies [3f92ae8] -- Updated dependencies [4fe94af] - - @suspensive/react@1.20.0 - -## 1.19.0 - -### Patch Changes - -- Updated dependencies [f78ed7d] - - @suspensive/react@1.19.0 - -## 1.18.3 - -### Patch Changes - -- 38c1247: chore: update project's dependencies -- Updated dependencies [38c1247] - - @suspensive/react@1.18.3 - -## 1.18.2 - -### Patch Changes - -- Updated dependencies [a06c31f] - - @suspensive/react@1.18.2 - -## 1.18.1 - -### Patch Changes - -- e825f93: fix(tsup): remove entry of experimental -- Updated dependencies [e825f93] - - @suspensive/react@1.18.1 - -## 1.18.0 - -### Patch Changes - -- Updated dependencies [4ec2a19] - - @suspensive/react@1.18.0 - -## 1.17.7 - -### Patch Changes - -- 257b672: fix: add module field of package.json -- Updated dependencies [257b672] - - @suspensive/react@1.17.7 - -## 1.17.6 - -### Patch Changes - -- Updated dependencies [b962122] -- Updated dependencies [c09f52a] - - @suspensive/react@1.17.6 - -## 1.17.5 - -### Patch Changes - -- Updated dependencies [84d293a] - - @suspensive/react@1.17.5 - -## 1.17.4 - -### Patch Changes - -- Updated dependencies [70d8128] - - @suspensive/react@1.17.4 - -## 1.17.3 - -### Patch Changes - -- Updated dependencies [b908c02] - - @suspensive/react@1.17.3 - -## 1.17.2 - -### Patch Changes - -- Updated dependencies [7e01577] - - @suspensive/react@1.17.2 - -## 1.17.1 - -### Patch Changes - -- 7e423e7: docs: update jsdoc links -- Updated dependencies [7e423e7] - - @suspensive/react@1.17.1 - -## 1.17.0 - -### Patch Changes - -- Updated dependencies [8ded1b2] - - @suspensive/react@1.17.0 - -## 1.16.1 - -### Patch Changes - -- d415299: chore: remove docs in packages -- Updated dependencies [d415299] - - @suspensive/react@1.16.1 - -## 1.16.0 - -### Patch Changes - -- Updated dependencies [a711c19] - - @suspensive/react@1.16.0 - -## 1.15.5 - -### Patch Changes - -- 62c3384: chore(eslint): add no-duplicates, consistent-type-imports -- Updated dependencies [62c3384] - - @suspensive/react@1.15.5 - -## 1.15.4 - -### Patch Changes - -- Updated dependencies [ba1e1a6] - - @suspensive/react@1.15.4 - -## 1.15.3 - -### Patch Changes - -- Updated dependencies [b05b4e2] -- Updated dependencies [e1e9a6b] - - @suspensive/react@1.15.3 - -## 1.15.2 - -### Patch Changes - -- cbfbc02: docs(docusaurus): add npm2yarn plugin -- cfcafd2: docs(react): update tips as admonitions -- Updated dependencies [cbfbc02] -- Updated dependencies [cfcafd2] - - @suspensive/react@1.15.2 - -## 1.15.1 - -### Patch Changes - -- Updated dependencies [5dfdf71] -- Updated dependencies [c9bc99d] - - @suspensive/react@1.15.1 - -## 1.15.0 - -### Patch Changes - -- Updated dependencies [b431a4d] - - @suspensive/react@1.15.0 - -## 1.14.9 - -### Patch Changes - -- e823dc0: fix(react-query): correct peerDeps version - - @suspensive/react@1.14.9 - -## 1.14.8 - -## 1.14.7 - -## 1.14.6 - -## 1.14.5 - -## 1.14.4 - -## 1.14.3 - -## 1.14.2 - -### Patch Changes - -- ada618e: chore(package.json): more detail - -## 1.14.1 - -### Patch Changes - -- c5906c9: refactor(react, react-query): remove **test** directory to collocate - -## 1.14.0 - -## 1.13.0 - -## 1.12.2 - -### Patch Changes - -- 6237e94: feat(vitest): add @suspensive/vitest generating named config automatically by packageJson.name -- 6c5e097: ci(test): migrate jest to vitest - -## 1.12.1 - -### Patch Changes - -- 7109191: fix(esm): cjs to esm as default - -## 1.12.0 - -### Patch Changes - -- 8c23785: refactor(eslint, tsconfig): simply - -## 1.11.7 - -### Patch Changes - -- f23a241: fix(typescript): update version from v4 to v5 - -## 1.11.6 - -### Patch Changes - -- eb8b6a9: fix(react, react-query): remove unnecessary files by package.json's files - -## 1.11.5 - -### Patch Changes - -- resolve @suspensive/tsup error - -## 1.11.4 - -### Patch Changes - -- 80cc215: chore(bundler): migrate from rollup to tsup - -## 1.11.4-beta.0 - -### Patch Changes - -- 5b87ae4: chore(bundler): migrate from rollup to tsup -- Updated dependencies [5b87ae4] - - @suspensive/react@1.11.4-beta.0 - -## 1.11.3 - -## 1.11.2 - -## 1.11.1 - -### Patch Changes - -- 38487ab: fix(react-query): add @suspensive/react as peerDependenciesMeta - -## 1.11.0 - -## 1.10.0 - -### Minor Changes - -- 0e07b84: feat(react-query): add useSuspenseQueries - -## 1.9.6 - -## 1.9.5 - -### Patch Changes - -- 5bc846e: chore(react-query): fix LICENSE.md in @suspensive/react-query to conform MIT license of toss/slash - -## 1.9.4 - -### Patch Changes - -- c171e9f: fix(react-query): fix useSuspenseQuery, useSuspenseInfiniteQuery receive various params like original @tanstack/react-query v4 - -## 1.9.3 - -### Patch Changes - -- 6e99b89: changelog initialization diff --git a/packages/react-query/LICENSE b/packages/react-query/LICENSE deleted file mode 100644 index 69dc6a701..000000000 --- a/packages/react-query/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 Viva Republica, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/react-query/README.md b/packages/react-query/README.md deleted file mode 100644 index ff2b9264a..000000000 --- a/packages/react-query/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Introduction - -@suspensive/react-query provides components and hooks to use @tanstack/react-query's suspense option easily. - -## Installation - -Install the package that matches your @tanstack/react-query version. By using npm aliases, the import path remains `@suspensive/react-query` across your codebase. When upgrading your @tanstack/react-query version, you only need to change the alias in package.json — no code changes required. - -#### @tanstack/react-query v5 - -```shell npm2yarn -npm install @suspensive/react-query@npm:@suspensive/react-query-5 @tanstack/react-query@5 -``` - -#### @tanstack/react-query v4 - -@tanstack/react-query v4 supports [lower version browsers](https://suspensive.org/docs/react-query/motivation#v5-drops-support-for-older-browsers) compared to v5. - -```shell npm2yarn -npm install @suspensive/react-query@npm:@suspensive/react-query-4 @tanstack/react-query@4 -``` diff --git a/packages/react-query/eslint.config.mjs b/packages/react-query/eslint.config.mjs deleted file mode 100644 index 0daa8aa5b..000000000 --- a/packages/react-query/eslint.config.mjs +++ /dev/null @@ -1,15 +0,0 @@ -import path from 'path' -import { fileURLToPath } from 'url' -import { suspensiveReactTypeScriptConfig } from '@suspensive/eslint-config' - -export default [ - ...suspensiveReactTypeScriptConfig, - { - languageOptions: { - parserOptions: { - tsconfigRootDir: path.dirname(fileURLToPath(import.meta.url)), - project: './tsconfig.json', - }, - }, - }, -] diff --git a/packages/react-query/package.json b/packages/react-query/package.json deleted file mode 100644 index c7078e243..000000000 --- a/packages/react-query/package.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "name": "@suspensive/react-query", - "version": "3.21.2", - "description": "Suspensive interfaces for @tanstack/react-query", - "keywords": [ - "suspensive", - "react", - "react-query" - ], - "homepage": "https://suspensive.org", - "bugs": "https://github.com/toss/suspensive/issues", - "repository": { - "type": "git", - "url": "git+https://github.com/toss/suspensive.git", - "directory": "packages/react-query" - }, - "license": "MIT", - "author": "Jonghyeon Ko ", - "sideEffects": false, - "type": "module", - "exports": { - ".": { - "import": { - "types": "./dist/index.d.mts", - "default": "./dist/index.mjs" - }, - "require": { - "types": "./dist/index.d.cts", - "default": "./dist/index.cjs" - } - }, - "./package.json": "./package.json" - }, - "main": "dist/index.cjs", - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "bin": { - "suspensive-react-query": "dist/bin/cli.cjs", - "srq": "dist/bin/cli.cjs" - }, - "files": [ - "dist", - "src" - ], - "scripts": { - "build": "tsdown", - "ci:eslint": "eslint \"**/*.{ts,tsx,cts,mts}\"", - "ci:test": "vitest run", - "ci:type": "tsc --noEmit", - "clean": "rimraf ./dist ./coverage ./node_modules", - "postinstall": "node ./dist/bin/postinstall.cjs || echo 'please reinstall @suspensive/react-query'", - "test:ui": "vitest --ui" - }, - "dependencies": { - "@commander-js/extra-typings": "^13.0.0", - "@suspensive/react-query-4": "workspace:^3.21.2", - "@suspensive/react-query-5": "workspace:^3.21.2", - "cli-table3": "^0.6.5", - "commander": "^13.0.0" - }, - "devDependencies": { - "@suspensive/eslint-config": "workspace:*", - "@suspensive/tsconfig": "workspace:*", - "@suspensive/tsdown": "workspace:*", - "@types/react": "catalog:react19", - "react": "catalog:react19" - }, - "peerDependencies": { - "@tanstack/react-query": "^4.44.0 || ^5.82.0", - "react": "^18 || ^19" - }, - "publishConfig": { - "access": "public" - } -} diff --git a/packages/react-query/src/bin/cli.spec.ts b/packages/react-query/src/bin/cli.spec.ts deleted file mode 100644 index 1f4214908..000000000 --- a/packages/react-query/src/bin/cli.spec.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { execFileSync } from 'node:child_process' -import path from 'node:path' -import packageJson from '../../package.json' -import { getTargetSuspensiveReactQueryVersion } from './utils/package' -import { getStatusTable } from './utils/table' - -const cliPath = path.resolve(__dirname, '../../dist/bin/cli.cjs') - -describe('cli', () => { - it('should display the correct version when using the -v flag', () => { - const result = execFileSync('node', [cliPath, '-v']).toString().trim() - - expect(result).toBe(packageJson.version) - }) - - it('should display the help message when using the -h flag', () => { - const result = execFileSync('node', [cliPath, '-h']).toString() - - expect(result).toContain('Usage: @suspensive/react-query [options] [command]') - }) - - it('should display the status of the packages', () => { - const result = execFileSync('node', [cliPath, 'status']).toString() - const targetSuspensiveReactQueryVersion = getTargetSuspensiveReactQueryVersion() - if (!targetSuspensiveReactQueryVersion) { - throw new Error('Target version not found') - } - - expect(result).toContain(getStatusTable(targetSuspensiveReactQueryVersion)) - }) - - it('should switch to the specified version when using the switch command', () => { - const result = execFileSync('node', [cliPath, 'switch', '5']).toString() - - expect(result).toContain('[@suspensive/react-query] switched to version v5') - }) - - it('should fix the version to the compatible version when using the fix command', () => { - const result = execFileSync('node', [cliPath, 'fix']).toString() - - expect(result).toContain('[@suspensive/react-query] The versions are compatible.\n') - }) -}) diff --git a/packages/react-query/src/bin/cli.ts b/packages/react-query/src/bin/cli.ts deleted file mode 100755 index 346d7767c..000000000 --- a/packages/react-query/src/bin/cli.ts +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env node - -import { Command } from '@commander-js/extra-typings' -import { fixAction, statusAction, switchAction } from './utils/commands' -import { showDeprecationWarning } from './utils/deprecationWarning' -import { logger } from './utils/logger' -import { getPackageJson } from './utils/package' - -const packageJson = getPackageJson() -const program = new Command(packageJson.name).configureOutput({ - writeErr: (str) => logger.error(str.replace('error: ', '')), -}) - -program - .description(packageJson.description) - .version(packageJson.version, '-v, --version', 'Displays the currently installed version of @suspensive/react-query') - -program - .command('status') - .description('Checks compatibility with the currently used version of @tanstack/react-query') - .action(statusAction) - -program - .command('switch') - .description( - "Switch @suspensive/react-query's exports to use compatible Suspensive interfaces for @tanstack/react-query" - ) - .argument( - `@tanstack/react-query's version`, - "Switch @suspensive/react-query's exports to use compatible Suspensive interfaces for @tanstack/react-query@" - ) - .action(switchAction) - -program - .command('fix') - .description( - "Automatically switch @suspensive/react-query's exports to use compatible Suspensive interfaces for @tanstack/react-query" - ) - .action(fixAction) - -try { - program.parse(process.argv) - showDeprecationWarning() -} catch (error) { - if (error instanceof Error) { - logger.error(error.message) - } -} diff --git a/packages/react-query/src/bin/postinstall.spec.ts b/packages/react-query/src/bin/postinstall.spec.ts deleted file mode 100644 index 9a3cd6e1c..000000000 --- a/packages/react-query/src/bin/postinstall.spec.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { beforeEach, describe, expect, it, vi } from 'vitest' -import { showDeprecationWarning } from './utils/deprecationWarning' -import { getPackageJson, getTanStackReactQueryPackageJson } from './utils/package' -import { switchVersion } from './utils/switchVersion' - -vi.mock('./utils/deprecationWarning') -vi.mock('./utils/package') -vi.mock('./utils/switchVersion') - -describe('postinstall', () => { - const mockConsoleError = vi.spyOn(console, 'error') - const mockGetTanStackReactQueryPackageJson = vi.mocked(getTanStackReactQueryPackageJson) - const mockGetPackageJson = vi.mocked(getPackageJson) - const mockSwitchVersion = vi.mocked(switchVersion) - - const runPostInstall = async (version: string) => { - mockGetTanStackReactQueryPackageJson.mockReturnValue({ - name: 'tanstack-query', - version, - description: `TanStack Query v${version.split('.')[0]}`, - }) - mockGetPackageJson.mockReturnValue({ - name: '@suspensive/react-query', - version: '3.20.0', - description: 'Suspensive interfaces for @tanstack/react-query', - }) - - await import('./postinstall') - } - - beforeEach(() => { - vi.resetModules() - vi.clearAllMocks() - }) - - it('should switch to @suspensive/react-query-4 when @tanstack/react-query@^4 is installed', async () => { - await runPostInstall('4.2.3') - - expect(mockGetTanStackReactQueryPackageJson).toHaveBeenCalledTimes(1) - expect(mockSwitchVersion).toHaveBeenCalledWith(4) - expect(mockSwitchVersion).toHaveBeenCalledTimes(1) - expect(mockConsoleError).not.toHaveBeenCalled() - expect(showDeprecationWarning).toHaveBeenCalledTimes(1) - }) - - it('should switch to @suspensive/react-query-5 when @tanstack/react-query@^5 is installed', async () => { - await runPostInstall('5.2.3') - - expect(mockGetTanStackReactQueryPackageJson).toHaveBeenCalledTimes(1) - expect(mockSwitchVersion).toHaveBeenCalledWith(5) - expect(mockSwitchVersion).toHaveBeenCalledTimes(1) - expect(mockConsoleError).not.toHaveBeenCalled() - expect(showDeprecationWarning).toHaveBeenCalledTimes(1) - }) - - it('should show warning when unsupported version is installed', async () => { - await runPostInstall('3.3.4') - - expect(mockGetTanStackReactQueryPackageJson).toHaveBeenCalledTimes(1) - expect(mockSwitchVersion).not.toHaveBeenCalled() - expect(mockConsoleError).toHaveBeenCalledWith('[@suspensive/react-query]', 'version v3.3.4 is not supported.') - expect(showDeprecationWarning).toHaveBeenCalledTimes(1) - }) -}) diff --git a/packages/react-query/src/bin/postinstall.ts b/packages/react-query/src/bin/postinstall.ts deleted file mode 100644 index 51906153c..000000000 --- a/packages/react-query/src/bin/postinstall.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { showDeprecationWarning } from './utils/deprecationWarning' -import { logger } from './utils/logger' -import { getTanStackReactQueryPackageJson } from './utils/package' -import { switchVersion } from './utils/switchVersion' - -const tanstackPackageJson = getTanStackReactQueryPackageJson() - -const major = tanstackPackageJson.version.split('.')[0] - -switch (major) { - case '4': - switchVersion(4) - break - case '5': - switchVersion(5) - break - default: - logger.error(`version v${tanstackPackageJson.version} is not supported.`) - break -} - -showDeprecationWarning() diff --git a/packages/react-query/src/bin/utils/commands.spec.ts b/packages/react-query/src/bin/utils/commands.spec.ts deleted file mode 100644 index ad80cec51..000000000 --- a/packages/react-query/src/bin/utils/commands.spec.ts +++ /dev/null @@ -1,139 +0,0 @@ -import fs from 'node:fs' -import packageJson from '../../../package.json' -import { fixAction, statusAction, switchAction } from './commands' -import { - getIndexFileContent, - getPackageJson, - getSuspensiveReactQueryPackageJson, - getTanStackReactQueryAPIs, - getTanStackReactQueryPackageJson, - getTargetSuspensiveReactQueryAPIs, - getTargetSuspensiveReactQueryVersion, -} from './package' -import { switchVersion } from './switchVersion' -import { getStatusTable } from './table' - -vi.mock('node:fs', () => ({ - default: { - readFileSync: vi.fn(), - }, -})) -vi.mock('node:path') -vi.mock('./package') -vi.mock('./switchVersion') - -describe('commands', () => { - const consoleLogSpy = vi.spyOn(console, 'log').mockClear() - const consoleWarnSpy = vi.spyOn(console, 'warn').mockClear() - const consoleErrorSpy = vi.spyOn(console, 'error').mockClear() - - const mockGetPackageJson = vi.mocked(getPackageJson) - mockGetPackageJson.mockReturnValue(packageJson) - const mockGetIndexFileContent = vi.mocked(getIndexFileContent) - mockGetIndexFileContent.mockReturnValue('export * from "@suspensive/react-query-4"') - const mockGetTanStackReactQueryPackageJson = vi.mocked(getTanStackReactQueryPackageJson) - mockGetTanStackReactQueryPackageJson.mockReturnValue({ - name: 'tanstack-query', - description: '', - version: '5.0.0', - }) - const mockGetSuspensiveReactQueryPackageJson = vi.mocked(getSuspensiveReactQueryPackageJson) - mockGetSuspensiveReactQueryPackageJson.mockReturnValue({ - name: 'tanstack-query', - description: '', - version: packageJson.version, - }) - const mockGetTargetSuspensiveReactQueryAPIsMock = vi.mocked(getTargetSuspensiveReactQueryAPIs) - mockGetTargetSuspensiveReactQueryAPIsMock.mockReturnValue([]) - const mockGetTanStackReactQueryAPIsMock = vi.mocked(getTanStackReactQueryAPIs) - mockGetTanStackReactQueryAPIsMock.mockReturnValue([]) - - beforeEach(() => { - const mockGetTargetSuspensiveReactQueryVersion = vi.mocked(getTargetSuspensiveReactQueryVersion) - mockGetTargetSuspensiveReactQueryVersion.mockReturnValue('5') - - vi.resetModules() - vi.clearAllMocks() - }) - - describe('statusAction', () => { - it('should display the status correctly when versions are compatible (version 4)', () => { - const mockGetTargetSuspensiveReactQueryVersion = vi.mocked(getTargetSuspensiveReactQueryVersion) - mockGetTargetSuspensiveReactQueryVersion.mockReturnValue('4') - - statusAction() - - expect(consoleLogSpy).toHaveBeenCalledWith(getStatusTable('4')) - }) - - it('should display the status correctly when versions are compatible (version 5)', () => { - statusAction() - - expect(consoleLogSpy).toHaveBeenCalledWith(getStatusTable('5')) - }) - - it('should display incompatible versions message (suspensive 5, tanstack 4)', () => { - statusAction() - - expect(consoleLogSpy).toHaveBeenCalledWith(getStatusTable('5')) - }) - - it('should display incompatible versions message (suspensive 4, tanstack 5)', () => { - const mockGetTargetSuspensiveReactQueryVersion = vi.mocked(getTargetSuspensiveReactQueryVersion) - mockGetTargetSuspensiveReactQueryVersion.mockReturnValue('4') - - statusAction() - - expect(consoleLogSpy).toHaveBeenCalledWith(getStatusTable('4')) - }) - - it('should handle undefined versions', () => { - const mockGetTargetSuspensiveReactQueryVersion = vi.mocked(getTargetSuspensiveReactQueryVersion) - mockGetTargetSuspensiveReactQueryVersion.mockReturnValue(undefined) - - statusAction() - - expect(consoleErrorSpy).toHaveBeenCalledWith('[@suspensive/react-query]', 'The version is not found.') - }) - }) - - describe('switchAction', () => { - it('should switch to version 4', () => { - switchAction('4') - - expect(switchVersion).toHaveBeenCalledWith(4) - }) - - it('should switch to version 5', () => { - switchAction('5') - - expect(switchVersion).toHaveBeenCalledWith(5) - }) - - it('should warn about not supported version', () => { - switchAction('1') - - expect(consoleWarnSpy).toHaveBeenCalledWith('[@suspensive/react-query]', 'version v1 is not supported.') - }) - }) - - describe('fixAction', () => { - it('should not switch when versions are compatible', () => { - fixAction() - - expect(consoleLogSpy).toHaveBeenCalledWith('[@suspensive/react-query]', 'The versions are compatible.') - expect(switchVersion).not.toHaveBeenCalled() - }) - - it('should switch to version 5 when tanstack is 5', () => { - vi.mocked(fs.readFileSync).mockReturnValue(`export * from '@suspensive/react-query-4'`) - const mockGetTargetSuspensiveReactQueryVersion = vi.mocked(getTargetSuspensiveReactQueryVersion) - mockGetTargetSuspensiveReactQueryVersion.mockReturnValue('4') - - fixAction() - - expect(consoleLogSpy).toHaveBeenCalledWith('[@suspensive/react-query]', 'Switching to the compatible version...') - expect(switchVersion).toHaveBeenCalledWith(5) - }) - }) -}) diff --git a/packages/react-query/src/bin/utils/commands.ts b/packages/react-query/src/bin/utils/commands.ts deleted file mode 100644 index ce15f4fd4..000000000 --- a/packages/react-query/src/bin/utils/commands.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { logger } from './logger' -import { getTanStackReactQueryPackageJson, getTargetSuspensiveReactQueryVersion } from './package' -import { switchVersion } from './switchVersion' -import { getStatusTable } from './table' - -export function statusAction() { - const targetSuspensiveReactQueryVersion = getTargetSuspensiveReactQueryVersion() - if (!targetSuspensiveReactQueryVersion) { - logger.error('The version is not found.') - return - } - - console.log(getStatusTable(targetSuspensiveReactQueryVersion)) -} - -export function switchAction(version: string) { - if (version === '4') { - switchVersion(4) - } else if (version === '5') { - switchVersion(5) - } else { - console.warn('[@suspensive/react-query]', `version v${version} is not supported.`) - } -} - -export function fixAction() { - const tanStackReactQueryPackageJson = getTanStackReactQueryPackageJson() - const targetSuspensiveReactQueryVersion = getTargetSuspensiveReactQueryVersion() - - const tanStackReactQueryMajorVersion = tanStackReactQueryPackageJson.version.split('.')[0] - if (targetSuspensiveReactQueryVersion === tanStackReactQueryMajorVersion) { - logger.log('The versions are compatible.') - } else { - logger.log('Switching to the compatible version...') - switchVersion(Number(tanStackReactQueryMajorVersion)) - } -} diff --git a/packages/react-query/src/bin/utils/copy.spec.ts b/packages/react-query/src/bin/utils/copy.spec.ts deleted file mode 100644 index 65e75a935..000000000 --- a/packages/react-query/src/bin/utils/copy.spec.ts +++ /dev/null @@ -1,30 +0,0 @@ -import fs from 'node:fs' -import { copy } from './copy' - -describe('copy', () => { - beforeEach(() => { - vi.spyOn(fs, 'readFileSync').mockReturnValue(`export * from '@suspensive/react-query-4'`) - }) - - afterEach(() => { - vi.restoreAllMocks() - }) - - it('should return false if directory does not include dist or no files are found', () => { - vi.spyOn(fs, 'readdirSync').mockReturnValue([]) - - expect(copy(4)).toBe(false) - }) - - it('should copy and replace files with the specified version', () => { - vi.spyOn(fs, 'readdirSync').mockReturnValue(['v5', 'other'] as unknown as ReturnType) - vi.spyOn(fs, 'unlinkSync').mockReturnValue() - vi.spyOn(fs, 'writeFileSync').mockReturnValue() - - expect(copy(5)).toBe(true) - expect(fs.readdirSync).toHaveBeenCalledTimes(1) - expect(fs.readFileSync).toHaveBeenCalledTimes(1) - expect(fs.unlinkSync).toHaveBeenCalledTimes(1) - expect(fs.writeFileSync).toHaveBeenCalledTimes(1) - }) -}) diff --git a/packages/react-query/src/bin/utils/copy.ts b/packages/react-query/src/bin/utils/copy.ts deleted file mode 100644 index d33eaa11a..000000000 --- a/packages/react-query/src/bin/utils/copy.ts +++ /dev/null @@ -1,29 +0,0 @@ -import fs from 'node:fs' -import { join, resolve } from 'node:path' - -const dir = resolve(__dirname, '..') - -export function copy(version: number) { - const files = fs.readdirSync(dir) - - if (files.length === 0) { - return false - } - - for (const file of files) { - if (file.includes(`v${version}`)) { - const src = join(dir, file) - const dest = join(dir, file.replace(`v${version}`, 'index')) - const content = fs.readFileSync(src, 'utf-8') - - try { - fs.unlinkSync(dest) - } catch { - /* empty */ - } - fs.writeFileSync(dest, content, 'utf-8') - } - } - - return true -} diff --git a/packages/react-query/src/bin/utils/deprecationWarning.ts b/packages/react-query/src/bin/utils/deprecationWarning.ts deleted file mode 100644 index c942e1fc0..000000000 --- a/packages/react-query/src/bin/utils/deprecationWarning.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { logger } from './logger' -import { getPackageJson, getTanStackReactQueryPackageJson } from './package' - -export function showDeprecationWarning() { - const tanstackPackageJson = getTanStackReactQueryPackageJson() - const suspensivePackageJson = getPackageJson() - const major = tanstackPackageJson.version.split('.')[0] - - logger.warn(` - Installing @suspensive/react-query directly is deprecated. - This package will be removed in the next major version. Only @suspensive/react-query-4 and @suspensive/react-query-5 will remain. - Please use npm aliases to install the version-specific package instead: - - npm install @suspensive/react-query@npm:@suspensive/react-query-${major} @tanstack/react-query@${major} - - This keeps your import path as "@suspensive/react-query" while installing the correct package. - Your package.json will look like: - - { - "dependencies": { - "@suspensive/react-query": "npm:@suspensive/react-query-${major}@^${suspensivePackageJson.version}" - } - } - - When upgrading @tanstack/react-query, just change the alias in package.json — no code changes required. - - See: https://suspensive.org/docs/react-query/installation -`) -} diff --git a/packages/react-query/src/bin/utils/logger.spec.ts b/packages/react-query/src/bin/utils/logger.spec.ts deleted file mode 100644 index 7a319d6b2..000000000 --- a/packages/react-query/src/bin/utils/logger.spec.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { logger } from './logger' - -describe('logger', () => { - const LOG_PREFIX = '[@suspensive/react-query]' - const consoleLogSpy = vi.spyOn(console, 'log').mockClear() - const consoleErrorSpy = vi.spyOn(console, 'error').mockClear() - - beforeEach(() => { - vi.resetModules() - vi.clearAllMocks() - }) - - it('should log a message with console.log', () => { - const testMessage = 'test message' - logger.log(testMessage) - - expect(consoleLogSpy).toHaveBeenCalledWith(LOG_PREFIX, testMessage) - }) - - it('should log a error with console.warn', () => { - const testMessage = 'error message' - logger.error(testMessage) - - expect(consoleErrorSpy).toHaveBeenCalledWith(LOG_PREFIX, testMessage) - }) -}) diff --git a/packages/react-query/src/bin/utils/logger.ts b/packages/react-query/src/bin/utils/logger.ts deleted file mode 100644 index 1ce31e6bc..000000000 --- a/packages/react-query/src/bin/utils/logger.ts +++ /dev/null @@ -1,7 +0,0 @@ -const LOG_PREFIX = '[@suspensive/react-query]' - -export const logger = { - log: (message: string) => console.log(LOG_PREFIX, message), - warn: (message: string) => console.warn(LOG_PREFIX, message), - error: (message: string) => console.error(LOG_PREFIX, message), -} diff --git a/packages/react-query/src/bin/utils/package.spec.ts b/packages/react-query/src/bin/utils/package.spec.ts deleted file mode 100644 index 6e166ca40..000000000 --- a/packages/react-query/src/bin/utils/package.spec.ts +++ /dev/null @@ -1,180 +0,0 @@ -import { execFileSync } from 'node:child_process' -import path from 'node:path' -import tanStackReactQueryPackageJson from '@tanstack/react-query/package.json' -import packageJson from '../../../package.json' -import { - getIndexFileContent, - getPackageJson, - getSuspensiveReactQueryPackageJson, - getTanStackReactQueryAPIs, - getTanStackReactQueryPackageJson, - getTargetSuspensiveReactQueryAPIs, - getTargetSuspensiveReactQueryVersion, - loadModule, -} from './package' - -const cliPath = path.resolve(__dirname, '../../../dist/bin/cli.cjs') - -describe('package', () => { - describe('getPackageJson', () => { - it('should get package.json', () => { - const result = getPackageJson() - - expect(result).toBeDefined() - expect(result.name).toBe(packageJson.name) - expect(result.description).toBe(packageJson.description) - expect(result.version).toBe(packageJson.version) - }) - }) - - describe('getTanStackReactQueryPackageJson', () => { - it('should get @tanstack/react-query package.json', () => { - const result = getTanStackReactQueryPackageJson() - - expect(result).toBeDefined() - expect(result.name).toBe(tanStackReactQueryPackageJson.name) - expect(result.description).toBe(tanStackReactQueryPackageJson.description) - expect(result.version).toBe(tanStackReactQueryPackageJson.version) - }) - }) - - describe('getTargetSuspensiveReactQueryVersion', () => { - it('should get the target @suspensive/react-query-4 from the index file content', () => { - const switchResult = execFileSync('node', [cliPath, 'switch', '4']).toString() - expect(switchResult).toContain('[@suspensive/react-query] switched to version v4') - const targetSuspensiveReactQueryVersion = getTargetSuspensiveReactQueryVersion() - - expect(targetSuspensiveReactQueryVersion).toBe('4') - }) - - it('should get the target @suspensive/react-query-5 from the index file content', () => { - const switchResult = execFileSync('node', [cliPath, 'switch', '5']).toString() - expect(switchResult).toContain('[@suspensive/react-query] switched to version v5') - const targetSuspensiveReactQueryVersion = getTargetSuspensiveReactQueryVersion() - - expect(targetSuspensiveReactQueryVersion).toBe('5') - }) - }) - - describe('getTargetSuspensiveReactQueryAPIs', () => { - const version4APIs = [ - 'useSuspenseQuery', - 'useSuspenseQueries', - 'useSuspenseInfiniteQuery', - 'usePrefetchQuery', - 'usePrefetchInfiniteQuery', - 'queryOptions', - 'mutationOptions', - 'infiniteQueryOptions', - 'createGetQueryClient', - 'SuspenseQuery', - 'SuspenseQueries', - 'SuspenseInfiniteQuery', - 'QueryClientConsumer', - 'QueriesHydration', - 'PrefetchQuery', - 'PrefetchInfiniteQuery', - 'Mutation', - 'IsFetching', - ] - - const version5APIs = [ - 'useSuspenseQuery', - 'useSuspenseQueries', - 'useSuspenseInfiniteQuery', - 'usePrefetchQuery', - 'usePrefetchInfiniteQuery', - 'queryOptions', - 'mutationOptions', - 'infiniteQueryOptions', - 'createGetQueryClient', - 'SuspenseQuery', - 'SuspenseQueries', - 'SuspenseInfiniteQuery', - 'QueryClientConsumer', - 'QueriesHydration', - 'PrefetchQuery', - 'PrefetchInfiniteQuery', - 'Mutation', - 'IsFetching', - ] - - it('should get the target @suspensive/react-query version 5 APIs', () => { - const switchResult = execFileSync('node', [cliPath, 'switch', '5']).toString() - expect(switchResult).toContain('[@suspensive/react-query] switched to version v5') - - const apis = getTargetSuspensiveReactQueryAPIs() - - expect(apis).toEqual(version4APIs) - }) - - it('should get the target @suspensive/react-query version 4 APIs', () => { - const switchResult = execFileSync('node', [cliPath, 'switch', '4']).toString() - expect(switchResult).toContain('[@suspensive/react-query] switched to version v4') - - const apis = getTargetSuspensiveReactQueryAPIs() - - expect(apis).toEqual(version5APIs) - }) - }) - - describe('getSuspensiveReactQueryPackageJson', () => { - it('should get the @suspensive/react-query package.json for version 4', () => { - const result = getSuspensiveReactQueryPackageJson('4') - - expect(result).toBeDefined() - expect(result.name).toBe('@suspensive/react-query-4') - }) - - it('should get the @suspensive/react-query package.json for version 5', () => { - const result = getSuspensiveReactQueryPackageJson('5') - - expect(result).toBeDefined() - expect(result.name).toBe('@suspensive/react-query-5') - }) - - it('should get the @suspensive/react-query package.json for version 0', () => { - expect(() => getSuspensiveReactQueryPackageJson('0')).toThrow('@suspensive/react-query-0 is not found.') - }) - }) - - describe('getTanStackReactQueryAPIs', () => { - it('should return correct APIs for version 5', () => { - const apis = getTanStackReactQueryAPIs('5') - - expect(apis).toEqual([ - 'useSuspenseQuery', - 'useSuspenseQueries', - 'useSuspenseInfiniteQuery', - 'usePrefetchQuery', - 'usePrefetchInfiniteQuery', - 'queryOptions', - 'infiniteQueryOptions', - ]) - }) - - it('should return placeholder for version 4', () => { - const apis = getTanStackReactQueryAPIs('4') - - expect(apis).toEqual(['-']) - }) - - it('should throw error for missing version', () => { - expect(() => getTanStackReactQueryAPIs('')).toThrow('@tanstack/react-query version is required') - }) - }) - - describe('loadModule', () => { - it('should throw an error if the module cannot be resolved', () => { - expect(() => loadModule('unresolved-module-to-test')).toThrow('unresolved-module-to-test is not found.') - }) - }) - - describe('getIndexFileContent', () => { - it('should return the content of the index.js file', () => { - expect(() => getIndexFileContent('unresolved-module-to-test')).toThrow( - "no such file or directory, open 'unresolved-module-to-test'" - ) - }) - }) -}) diff --git a/packages/react-query/src/bin/utils/package.ts b/packages/react-query/src/bin/utils/package.ts deleted file mode 100644 index 16dc5ea17..000000000 --- a/packages/react-query/src/bin/utils/package.ts +++ /dev/null @@ -1,86 +0,0 @@ -import fs from 'node:fs' -import path from 'node:path' - -// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -export function loadModule(name: string): T { - try { - // eslint-disable-next-line @typescript-eslint/no-require-imports - return require(name) as T - } catch { - throw new Error(`${name} is not found.`) - } -} - -type PackageJson = { - name: string - description: string - version: string -} - -export function getPackageJson(): PackageJson { - return loadModule('@suspensive/react-query/package.json') -} - -export function getTanStackReactQueryPackageJson(): PackageJson { - return loadModule('@tanstack/react-query/package.json') -} - -export function getSuspensiveReactQueryPackageJson(targetVersion: string): PackageJson { - switch (targetVersion) { - case '4': - case '5': - return loadModule(`@suspensive/react-query-${targetVersion}/package.json`) - default: - throw new Error(`@suspensive/react-query-${targetVersion} is not found.`) - } -} - -export function getIndexFileContent(...paths: string[]): string { - const basePath = path.resolve(...paths, 'dist').replace(/src/, '') - - try { - return fs.readFileSync(path.join(basePath, 'index.mjs'), 'utf-8') - } catch { - throw new Error(`no such file or directory, open '${paths}'`) - } -} - -export function getTargetSuspensiveReactQueryVersion(): string | undefined { - const indexFileContent = getIndexFileContent(__dirname, '../../') - const version = new RegExp(/@suspensive\/react-query-(\d+)/).exec(indexFileContent)?.[1] - - return version -} - -export function getTargetSuspensiveReactQueryAPIs(): string[] { - const indexFileContent = getIndexFileContent(__dirname, '../../') - const modules = indexFileContent.matchAll(/from ['"](@suspensive\/react-query-\d+)['"]/g) - const results: string[] = [] - - for (const [, moduleName] of modules) { - const module = loadModule>(moduleName) - results.push(...Object.keys(module).reverse()) - } - - return results -} - -export function getTanStackReactQueryAPIs(majorVersionOfTanStackQuery: string): string[] { - switch (majorVersionOfTanStackQuery) { - case '5': - return [ - 'useSuspenseQuery', - 'useSuspenseQueries', - 'useSuspenseInfiniteQuery', - 'usePrefetchQuery', - 'usePrefetchInfiniteQuery', - 'queryOptions', - 'infiniteQueryOptions', - ] - case '4': - return ['-'] - default: { - throw new Error('@tanstack/react-query version is required') - } - } -} diff --git a/packages/react-query/src/bin/utils/switchVersion.spec.ts b/packages/react-query/src/bin/utils/switchVersion.spec.ts deleted file mode 100644 index c9177eef0..000000000 --- a/packages/react-query/src/bin/utils/switchVersion.spec.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { copy } from './copy' -import { switchVersion } from './switchVersion' - -vi.mock('./copy', () => ({ - copy: vi.fn(), -})) - -describe('switchVersion', () => { - const consoleLogSpy = vi.spyOn(console, 'log').mockClear() - const consoleErrorSpy = vi.spyOn(console, 'error').mockClear() - - beforeEach(() => { - vi.resetModules() - vi.clearAllMocks() - }) - - it('should log success message when copy function returns true', () => { - vi.mocked(copy).mockReturnValue(true) - - switchVersion(5) - - expect(consoleLogSpy).toHaveBeenCalledWith('[@suspensive/react-query]', 'switched to version v5') - expect(consoleErrorSpy).not.toHaveBeenCalled() - }) - - it('should log warning message when copy function returns false', () => { - vi.mocked(copy).mockReturnValue(false) - - switchVersion(1) - - expect(consoleErrorSpy).toHaveBeenCalledWith('[@suspensive/react-query]', 'not found version files.') - expect(consoleLogSpy).not.toHaveBeenCalled() - }) -}) diff --git a/packages/react-query/src/bin/utils/switchVersion.ts b/packages/react-query/src/bin/utils/switchVersion.ts deleted file mode 100644 index 98ad25ba2..000000000 --- a/packages/react-query/src/bin/utils/switchVersion.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { copy } from './copy' -import { logger } from './logger' - -export function switchVersion(version: number) { - const result = copy(version) - - if (result) { - logger.log(`switched to version v${version}`) - } else { - logger.error('not found version files.') - } -} diff --git a/packages/react-query/src/bin/utils/table.ts b/packages/react-query/src/bin/utils/table.ts deleted file mode 100644 index 0b396c5a3..000000000 --- a/packages/react-query/src/bin/utils/table.ts +++ /dev/null @@ -1,42 +0,0 @@ -import Table from 'cli-table3' -import { - getPackageJson, - getSuspensiveReactQueryPackageJson, - getTanStackReactQueryAPIs, - getTanStackReactQueryPackageJson, - getTargetSuspensiveReactQueryAPIs, -} from './package' - -export function getStatusTable(currentTargetVersion: string) { - const packageJson = getPackageJson() - const tanStackReactQueryPackageJson = getTanStackReactQueryPackageJson() - const tanStackReactQueryMajorVersion = tanStackReactQueryPackageJson.version.split('.')[0] - const targetSuspensiveReactQueryPackageJson = getSuspensiveReactQueryPackageJson(tanStackReactQueryMajorVersion) - const suspensiveReactQueryAPIs = getTargetSuspensiveReactQueryAPIs() - const tanStackReactQueryAPIs = getTanStackReactQueryAPIs(tanStackReactQueryMajorVersion) - const isVersionCompatible = currentTargetVersion === tanStackReactQueryMajorVersion - const statusSymbol = isVersionCompatible ? '🟢' : '❌' - - const table = new Table({ - style: { head: ['cyan'] }, - colWidths: [10, 30, 8, 36], - wordWrap: true, - }) - table.push([{ content: `${packageJson.name}@${packageJson.version}`, colSpan: 2 }, 'status', 'available interfaces']) - table.push([ - { content: 'exports from', rowSpan: 2 }, - `@suspensive/react-query-${currentTargetVersion}\n@${targetSuspensiveReactQueryPackageJson.version}`, - statusSymbol, - suspensiveReactQueryAPIs.filter((api) => !tanStackReactQueryAPIs.includes(api)).join(' '), - ]) - table.push([ - `@tanstack/react-query\n@${tanStackReactQueryPackageJson.version}`, - statusSymbol, - tanStackReactQueryAPIs.join(' '), - ]) - if (!isVersionCompatible) { - table.push([{ content: `You should \`npx srq switch ${tanStackReactQueryMajorVersion}\` to fix this`, colSpan: 4 }]) - } - - return table.toString() -} diff --git a/packages/react-query/src/index.ts b/packages/react-query/src/index.ts deleted file mode 100644 index fc808a4b4..000000000 --- a/packages/react-query/src/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -export { createGetQueryClient } from '@suspensive/react-query-4' -export { queryOptions } from '@suspensive/react-query-4' -export type { SelectedQueryOptions, UnSelectedQueryOptions } from '@suspensive/react-query-4' -export { infiniteQueryOptions } from '@suspensive/react-query-4' -export type { SelectedInfiniteOptions, UnSelectedInfiniteOptions } from '@suspensive/react-query-4' -export { useSuspenseQuery } from '@suspensive/react-query-4' -export type { UseSuspenseQueryOptions, UseSuspenseQueryResult } from '@suspensive/react-query-4' -export { useSuspenseQueries } from '@suspensive/react-query-4' -export type { SuspenseQueriesOptions, SuspenseQueriesResults } from '@suspensive/react-query-4' -export { useSuspenseInfiniteQuery } from '@suspensive/react-query-4' -export type { UseSuspenseInfiniteQueryOptions, UseSuspenseInfiniteQueryResult } from '@suspensive/react-query-4' -export { usePrefetchQuery } from '@suspensive/react-query-4' -export { usePrefetchInfiniteQuery } from '@suspensive/react-query-4' - -export { IsFetching } from '@suspensive/react-query-4' -export { SuspenseQuery } from '@suspensive/react-query-4' -export { SuspenseQueries } from '@suspensive/react-query-4' -export { SuspenseInfiniteQuery } from '@suspensive/react-query-4' -export { PrefetchQuery } from '@suspensive/react-query-4' -export { PrefetchInfiniteQuery } from '@suspensive/react-query-4' -export { Mutation } from '@suspensive/react-query-4' -export { mutationOptions } from '@suspensive/react-query-4' -export { QueryClientConsumer } from '@suspensive/react-query-4' -export { QueriesHydration } from '@suspensive/react-query-4' diff --git a/packages/react-query/src/v4.ts b/packages/react-query/src/v4.ts deleted file mode 100644 index fc808a4b4..000000000 --- a/packages/react-query/src/v4.ts +++ /dev/null @@ -1,24 +0,0 @@ -export { createGetQueryClient } from '@suspensive/react-query-4' -export { queryOptions } from '@suspensive/react-query-4' -export type { SelectedQueryOptions, UnSelectedQueryOptions } from '@suspensive/react-query-4' -export { infiniteQueryOptions } from '@suspensive/react-query-4' -export type { SelectedInfiniteOptions, UnSelectedInfiniteOptions } from '@suspensive/react-query-4' -export { useSuspenseQuery } from '@suspensive/react-query-4' -export type { UseSuspenseQueryOptions, UseSuspenseQueryResult } from '@suspensive/react-query-4' -export { useSuspenseQueries } from '@suspensive/react-query-4' -export type { SuspenseQueriesOptions, SuspenseQueriesResults } from '@suspensive/react-query-4' -export { useSuspenseInfiniteQuery } from '@suspensive/react-query-4' -export type { UseSuspenseInfiniteQueryOptions, UseSuspenseInfiniteQueryResult } from '@suspensive/react-query-4' -export { usePrefetchQuery } from '@suspensive/react-query-4' -export { usePrefetchInfiniteQuery } from '@suspensive/react-query-4' - -export { IsFetching } from '@suspensive/react-query-4' -export { SuspenseQuery } from '@suspensive/react-query-4' -export { SuspenseQueries } from '@suspensive/react-query-4' -export { SuspenseInfiniteQuery } from '@suspensive/react-query-4' -export { PrefetchQuery } from '@suspensive/react-query-4' -export { PrefetchInfiniteQuery } from '@suspensive/react-query-4' -export { Mutation } from '@suspensive/react-query-4' -export { mutationOptions } from '@suspensive/react-query-4' -export { QueryClientConsumer } from '@suspensive/react-query-4' -export { QueriesHydration } from '@suspensive/react-query-4' diff --git a/packages/react-query/src/v5.ts b/packages/react-query/src/v5.ts deleted file mode 100644 index 50a79053c..000000000 --- a/packages/react-query/src/v5.ts +++ /dev/null @@ -1,22 +0,0 @@ -export { createGetQueryClient } from '@suspensive/react-query-5' -export { queryOptions } from '@suspensive/react-query-5' -export { infiniteQueryOptions } from '@suspensive/react-query-5' -export { useSuspenseQuery } from '@suspensive/react-query-5' -export type { UseSuspenseQueryOptions, UseSuspenseQueryResult } from '@suspensive/react-query-5' -export { useSuspenseQueries } from '@suspensive/react-query-5' -export type { SuspenseQueriesOptions, SuspenseQueriesResults } from '@suspensive/react-query-5' -export { useSuspenseInfiniteQuery } from '@suspensive/react-query-5' -export type { UseSuspenseInfiniteQueryOptions, UseSuspenseInfiniteQueryResult } from '@suspensive/react-query-5' -export { usePrefetchQuery } from '@suspensive/react-query-5' -export { usePrefetchInfiniteQuery } from '@suspensive/react-query-5' - -export { IsFetching } from '@suspensive/react-query-5' -export { SuspenseQuery } from '@suspensive/react-query-5' -export { SuspenseQueries } from '@suspensive/react-query-5' -export { SuspenseInfiniteQuery } from '@suspensive/react-query-5' -export { PrefetchQuery } from '@suspensive/react-query-5' -export { PrefetchInfiniteQuery } from '@suspensive/react-query-5' -export { Mutation } from '@suspensive/react-query-5' -export { mutationOptions } from '@suspensive/react-query-5' -export { QueryClientConsumer } from '@suspensive/react-query-5' -export { QueriesHydration } from '@suspensive/react-query-5' diff --git a/packages/react-query/tsconfig.json b/packages/react-query/tsconfig.json deleted file mode 100644 index b7f9106c1..000000000 --- a/packages/react-query/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "@suspensive/tsconfig/react-library.json", - "include": ["."], - "compilerOptions": { - "types": ["@testing-library/jest-dom/vitest", "vitest/globals"] - } -} diff --git a/packages/react-query/tsdown.config.ts b/packages/react-query/tsdown.config.ts deleted file mode 100644 index f9a217081..000000000 --- a/packages/react-query/tsdown.config.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { options, scriptOptions } from '@suspensive/tsdown' -import { defineConfig } from 'tsdown' - -export default defineConfig([options, scriptOptions]) diff --git a/packages/react-query/vitest.config.ts b/packages/react-query/vitest.config.ts deleted file mode 100644 index 227523d56..000000000 --- a/packages/react-query/vitest.config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { defineConfig } from 'vitest/config' -import packageJson from './package.json' - -export default defineConfig({ - test: { - name: packageJson.name, - dir: './src', - environment: 'jsdom', - globals: true, - setupFiles: './vitest.setup.ts', - coverage: { enabled: true, provider: 'istanbul' }, - typecheck: { enabled: true }, - }, -}) diff --git a/packages/react-query/vitest.setup.ts b/packages/react-query/vitest.setup.ts deleted file mode 100644 index 5eee12b55..000000000 --- a/packages/react-query/vitest.setup.ts +++ /dev/null @@ -1,6 +0,0 @@ -import '@testing-library/jest-dom/vitest' -import { cleanup } from '@testing-library/react' - -afterEach(() => { - cleanup() -}) diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index 95159f431..05d6235dd 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -1,5 +1,9 @@ # @suspensive/react +## 4.0.0-next.1 + +## 4.0.0-next.0 + ## 3.21.2 ### Patch Changes diff --git a/packages/react/package.json b/packages/react/package.json index d4feb2367..923633a72 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@suspensive/react", - "version": "3.21.2", + "version": "4.0.0-next.1", "description": "Suspensive interfaces for react", "keywords": [ "suspensive", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 48396f4d7..66309709f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -506,43 +506,6 @@ importers: specifier: 'catalog:' version: 6.1.1(react@19.2.6) - packages/react-query: - dependencies: - '@commander-js/extra-typings': - specifier: ^13.0.0 - version: 13.1.0(commander@13.1.0) - '@suspensive/react-query-4': - specifier: workspace:^3.21.2 - version: link:../react-query-4 - '@suspensive/react-query-5': - specifier: workspace:^3.21.2 - version: link:../react-query-5 - '@tanstack/react-query': - specifier: ^4.44.0 || ^5.82.0 - version: 5.100.10(react@19.2.6) - cli-table3: - specifier: ^0.6.5 - version: 0.6.5 - commander: - specifier: ^13.0.0 - version: 13.1.0 - devDependencies: - '@suspensive/eslint-config': - specifier: workspace:* - version: link:../../configs/eslint-config - '@suspensive/tsconfig': - specifier: workspace:* - version: link:../../configs/tsconfig - '@suspensive/tsdown': - specifier: workspace:* - version: link:../../configs/tsdown - '@types/react': - specifier: catalog:react19 - version: 19.2.14 - react: - specifier: catalog:react19 - version: 19.2.6 - packages/react-query-4: devDependencies: '@suspensive/eslint-config': @@ -1515,10 +1478,6 @@ packages: react: ^16.8.0 || ^17 || ^18 || ^19 react-dom: ^16.8.0 || ^17 || ^18 || ^19 - '@colors/colors@1.5.0': - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} - '@commander-js/extra-typings@13.1.0': resolution: {integrity: sha512-q5P52BYb1hwVWE6dtID7VvuJWrlfbCv4klj7BjUUOqMz4jbSZD4C9fJ9lRjL2jnBGTg+gDDlaXN51rkWcLk4fg==} peerDependencies: @@ -1790,9 +1749,6 @@ packages: '@emnapi/runtime@1.10.0': resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} - '@emnapi/runtime@1.7.1': - resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} - '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} @@ -4487,10 +4443,6 @@ packages: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} - cli-table3@0.6.5: - resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} - engines: {node: 10.* || >= 12.*} - cli-table@0.3.11: resolution: {integrity: sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==} engines: {node: '>= 0.2.0'} @@ -6241,10 +6193,6 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} - hasBin: true - jiti@2.7.0: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true @@ -7459,10 +7407,6 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.13: - resolution: {integrity: sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.5.14: resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} engines: {node: ^10 || ^12 || >=14} @@ -11317,9 +11261,6 @@ snapshots: react-dom: 19.2.6(react@19.2.6) react-is: 17.0.2 - '@colors/colors@1.5.0': - optional: true - '@commander-js/extra-typings@13.1.0(commander@13.1.0)': dependencies: commander: 13.1.0 @@ -11577,11 +11518,6 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.7.1': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/wasi-threads@1.2.1': dependencies: tslib: 2.8.1 @@ -11743,7 +11679,7 @@ snapshots: eslint: 9.39.2(jiti@2.7.0) ts-pattern: 5.9.0 typescript: 5.9.2 - zod: 4.3.6 + zod: 4.4.3 transitivePeerDependencies: - supports-color @@ -11950,7 +11886,7 @@ snapshots: '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.7.1 + '@emnapi/runtime': 1.10.0 optional: true '@img/sharp-win32-arm64@0.34.5': @@ -13035,7 +12971,7 @@ snapshots: dependencies: '@jridgewell/remapping': 2.3.5 enhanced-resolve: 5.21.3 - jiti: 2.6.1 + jiti: 2.7.0 lightningcss: 1.32.0 magic-string: 0.30.21 source-map-js: 1.2.1 @@ -13097,7 +13033,7 @@ snapshots: '@alloc/quick-lru': 5.2.0 '@tailwindcss/node': 4.3.0 '@tailwindcss/oxide': 4.3.0 - postcss: 8.5.13 + postcss: 8.5.14 tailwindcss: 4.3.0 '@tanstack/query-core@4.44.0': {} @@ -13596,7 +13532,7 @@ snapshots: '@typescript-eslint/visitor-keys': 8.57.0 debug: 4.4.3 minimatch: 10.2.4 - semver: 7.7.3 + semver: 7.7.4 tinyglobby: 0.2.15 ts-api-utils: 2.4.0(typescript@5.9.2) typescript: 5.9.2 @@ -14344,12 +14280,6 @@ snapshots: dependencies: restore-cursor: 5.1.0 - cli-table3@0.6.5: - dependencies: - string-width: 4.2.3 - optionalDependencies: - '@colors/colors': 1.5.0 - cli-table@0.3.11: dependencies: colors: 1.0.3 @@ -16499,8 +16429,6 @@ snapshots: supports-color: 8.1.1 optional: true - jiti@2.6.1: {} - jiti@2.7.0: {} jotai@2.14.0(@babel/core@7.29.0)(@babel/template@7.28.6)(@types/react@19.2.14)(react@19.2.6): @@ -18285,12 +18213,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.13: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - postcss@8.5.14: dependencies: nanoid: 3.3.11