diff --git a/eslint.config.js b/eslint.config.js index 98d195e26c..14e90f0ed7 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -38,6 +38,7 @@ export default [ '@typescript-eslint/ban-types': 'off', '@typescript-eslint/no-empty-function': 'off', 'no-case-declarations': 'off', + 'prefer-const': 'off', }, }, ] diff --git a/examples/svelte/auto-refetching/package.json b/examples/svelte/auto-refetching/package.json index 4bea516f39..f3678c8814 100644 --- a/examples/svelte/auto-refetching/package.json +++ b/examples/svelte/auto-refetching/package.json @@ -15,8 +15,8 @@ "devDependencies": { "@sveltejs/adapter-auto": "^3.2.2", "@sveltejs/kit": "^2.5.18", - "@sveltejs/vite-plugin-svelte": "^3.1.1", - "svelte": "^4.2.18", + "@sveltejs/vite-plugin-svelte": "^4.0.0-next.4", + "svelte": "5.0.0-next.192", "svelte-check": "^3.8.4", "typescript": "5.3.3", "vite": "^5.3.5" diff --git a/examples/svelte/auto-refetching/src/routes/+layout.svelte b/examples/svelte/auto-refetching/src/routes/+layout.svelte index ef60a2f559..4b170dc01e 100644 --- a/examples/svelte/auto-refetching/src/routes/+layout.svelte +++ b/examples/svelte/auto-refetching/src/routes/+layout.svelte @@ -4,6 +4,8 @@ import { QueryClientProvider, QueryClient } from '@tanstack/svelte-query' import { SvelteQueryDevtools } from '@tanstack/svelte-query-devtools' + const { children } = $props() + const queryClient = new QueryClient({ defaultOptions: { queries: { @@ -15,7 +17,7 @@
- + {@render children()}
diff --git a/examples/svelte/auto-refetching/src/routes/+page.svelte b/examples/svelte/auto-refetching/src/routes/+page.svelte index e9d5c21d5d..c0cb2f056d 100644 --- a/examples/svelte/auto-refetching/src/routes/+page.svelte +++ b/examples/svelte/auto-refetching/src/routes/+page.svelte @@ -12,7 +12,7 @@ const endpoint = 'http://localhost:5173/api/data' - $: todos = createQuery<{ items: string[] }>({ + const todos = createQuery<{ items: string[] }>({ queryKey: ['refetch'], queryFn: async () => await fetch(endpoint).then((r) => r.json()), // Refetch the data every second @@ -49,8 +49,8 @@ margin-left:.5rem; width:.75rem; height:.75rem; - background: {$todos.isFetching ? 'green' : 'transparent'}; - transition:: {!$todos.isFetching ? 'all .3s ease' : 'none'}; + background: {todos.isFetching ? 'green' : 'transparent'}; + transition:: {!todos.isFetching ? 'all .3s ease' : 'none'}; border-radius: 100%; transform: 'scale(2)" > @@ -58,10 +58,10 @@

Todo List

{ + onsubmit={(e) => { e.preventDefault() e.stopPropagation() - $addMutation.mutate(value, { + addMutation.mutate(value, { onSuccess: () => (value = ''), }) }} @@ -69,26 +69,24 @@
-{#if $todos.isPending} +{#if todos.isPending} Loading... {/if} -{#if $todos.error} +{#if todos.error} An error has occurred: - {$todos.error.message} + {todos.error.message} {/if} -{#if $todos.isSuccess} +{#if todos.isSuccess}
- +
{/if} -{#if $todos.isFetching} +{#if todos.isFetching}
'Background Updating...' : ' '
diff --git a/examples/svelte/basic/package.json b/examples/svelte/basic/package.json index b730d206d0..89e2271d29 100644 --- a/examples/svelte/basic/package.json +++ b/examples/svelte/basic/package.json @@ -17,8 +17,8 @@ "devDependencies": { "@sveltejs/adapter-auto": "^3.2.2", "@sveltejs/kit": "^2.5.18", - "@sveltejs/vite-plugin-svelte": "^3.1.1", - "svelte": "^4.2.18", + "@sveltejs/vite-plugin-svelte": "^4.0.0-next.4", + "svelte": "5.0.0-next.192", "svelte-check": "^3.8.4", "typescript": "5.3.3", "vite": "^5.3.5" diff --git a/examples/svelte/basic/src/lib/Post.svelte b/examples/svelte/basic/src/lib/Post.svelte index 56472ce68f..4450ffe490 100644 --- a/examples/svelte/basic/src/lib/Post.svelte +++ b/examples/svelte/basic/src/lib/Post.svelte @@ -3,7 +3,7 @@ import { getPostById } from './data' import type { Post } from './types' - export let postId: number + const { postId }: { postId: number } = $props() const post = createQuery({ queryKey: ['post', postId], @@ -15,17 +15,17 @@
Back
- {#if !postId || $post.isPending} + {#if !postId || post.isPending} Loading... {/if} - {#if $post.error} - Error: {$post.error.message} + {#if post.error} + Error: {post.error.message} {/if} - {#if $post.isSuccess} -

{$post.data.title}

+ {#if post.isSuccess} +

{post.data.title}

-

{$post.data.body}

+

{post.data.body}

-
{$post.isFetching ? 'Background Updating...' : ' '}
+
{post.isFetching ? 'Background Updating...' : ' '}
{/if} diff --git a/examples/svelte/basic/src/lib/Posts.svelte b/examples/svelte/basic/src/lib/Posts.svelte index c4f2f2c642..354ab8b1f6 100644 --- a/examples/svelte/basic/src/lib/Posts.svelte +++ b/examples/svelte/basic/src/lib/Posts.svelte @@ -17,13 +17,13 @@
- {#if $posts.status === 'pending'} + {#if posts.status === 'pending'} Loading... - {:else if $posts.status === 'error'} - Error: {$posts.error.message} + {:else if posts.status === 'error'} + Error: {posts.error.message} {:else}
    - {#each $posts.data as post} + {#each posts.data as post}
- {#if $posts.isFetching} + {#if posts.isFetching}
Background Updating...
diff --git a/examples/svelte/basic/src/routes/+layout.svelte b/examples/svelte/basic/src/routes/+layout.svelte index da5d841b0b..2cb76cd097 100644 --- a/examples/svelte/basic/src/routes/+layout.svelte +++ b/examples/svelte/basic/src/routes/+layout.svelte @@ -6,6 +6,8 @@ import { PersistQueryClientProvider } from '@tanstack/svelte-query-persist-client' import { createSyncStoragePersister } from '@tanstack/query-sync-storage-persister' + const { children } = $props() + const queryClient = new QueryClient({ defaultOptions: { queries: { @@ -21,7 +23,7 @@
- + {@render children()}
diff --git a/examples/svelte/basic/src/routes/[postId]/+page.svelte b/examples/svelte/basic/src/routes/[postId]/+page.svelte index b68acc0bc0..2400baac2a 100644 --- a/examples/svelte/basic/src/routes/[postId]/+page.svelte +++ b/examples/svelte/basic/src/routes/[postId]/+page.svelte @@ -1,8 +1,7 @@ diff --git a/examples/svelte/load-more-infinite-scroll/package.json b/examples/svelte/load-more-infinite-scroll/package.json index b386307f62..57c7c4d058 100644 --- a/examples/svelte/load-more-infinite-scroll/package.json +++ b/examples/svelte/load-more-infinite-scroll/package.json @@ -15,8 +15,8 @@ "devDependencies": { "@sveltejs/adapter-auto": "^3.2.2", "@sveltejs/kit": "^2.5.18", - "@sveltejs/vite-plugin-svelte": "^3.1.1", - "svelte": "^4.2.18", + "@sveltejs/vite-plugin-svelte": "^4.0.0-next.4", + "svelte": "5.0.0-next.192", "svelte-check": "^3.8.4", "typescript": "5.3.3", "vite": "^5.3.5" diff --git a/examples/svelte/load-more-infinite-scroll/src/lib/LoadMore.svelte b/examples/svelte/load-more-infinite-scroll/src/lib/LoadMore.svelte index 79c602e672..0b51a97a6b 100644 --- a/examples/svelte/load-more-infinite-scroll/src/lib/LoadMore.svelte +++ b/examples/svelte/load-more-infinite-scroll/src/lib/LoadMore.svelte @@ -23,15 +23,15 @@ }) -{#if $query.isPending} +{#if query.isPending} Loading... {/if} -{#if $query.error} - Error: {$query.error.message} +{#if query.error} + Error: {query.error.message} {/if} -{#if $query.isSuccess} +{#if query.isSuccess}
- {#each $query.data.pages as { results }} + {#each query.data.pages as { results }} {#each results as planet}
@@ -44,12 +44,12 @@
diff --git a/examples/svelte/load-more-infinite-scroll/src/routes/+layout.svelte b/examples/svelte/load-more-infinite-scroll/src/routes/+layout.svelte index ef60a2f559..4b170dc01e 100644 --- a/examples/svelte/load-more-infinite-scroll/src/routes/+layout.svelte +++ b/examples/svelte/load-more-infinite-scroll/src/routes/+layout.svelte @@ -4,6 +4,8 @@ import { QueryClientProvider, QueryClient } from '@tanstack/svelte-query' import { SvelteQueryDevtools } from '@tanstack/svelte-query-devtools' + const { children } = $props() + const queryClient = new QueryClient({ defaultOptions: { queries: { @@ -15,7 +17,7 @@
- + {@render children()}
diff --git a/examples/svelte/optimistic-updates/package.json b/examples/svelte/optimistic-updates/package.json index 0312f5ae87..2df67be710 100644 --- a/examples/svelte/optimistic-updates/package.json +++ b/examples/svelte/optimistic-updates/package.json @@ -15,8 +15,8 @@ "devDependencies": { "@sveltejs/adapter-auto": "^3.2.2", "@sveltejs/kit": "^2.5.18", - "@sveltejs/vite-plugin-svelte": "^3.1.1", - "svelte": "^4.2.18", + "@sveltejs/vite-plugin-svelte": "^4.0.0-next.4", + "svelte": "5.0.0-next.192", "svelte-check": "^3.8.4", "typescript": "5.3.3", "vite": "^5.3.5" diff --git a/examples/svelte/optimistic-updates/src/routes/+layout.svelte b/examples/svelte/optimistic-updates/src/routes/+layout.svelte index ef60a2f559..4b170dc01e 100644 --- a/examples/svelte/optimistic-updates/src/routes/+layout.svelte +++ b/examples/svelte/optimistic-updates/src/routes/+layout.svelte @@ -4,6 +4,8 @@ import { QueryClientProvider, QueryClient } from '@tanstack/svelte-query' import { SvelteQueryDevtools } from '@tanstack/svelte-query-devtools' + const { children } = $props() + const queryClient = new QueryClient({ defaultOptions: { queries: { @@ -15,7 +17,7 @@
- + {@render children()}
diff --git a/examples/svelte/optimistic-updates/src/routes/+page.svelte b/examples/svelte/optimistic-updates/src/routes/+page.svelte index af8738ffcc..ccfba333ef 100644 --- a/examples/svelte/optimistic-updates/src/routes/+page.svelte +++ b/examples/svelte/optimistic-updates/src/routes/+page.svelte @@ -87,36 +87,36 @@

{ + onsubmit={(e) => { e.preventDefault() e.stopPropagation() - $addTodoMutation.mutate(text) + addTodoMutation.mutate(text) }} >
- +
-{#if $todos.isPending} +{#if todos.isPending} Loading... {/if} -{#if $todos.error} +{#if todos.error} An error has occurred: - {$todos.error.message} + {todos.error.message} {/if} -{#if $todos.isSuccess} +{#if todos.isSuccess}
- Updated At: {new Date($todos.data.ts).toLocaleTimeString()} + Updated At: {new Date(todos.data.ts).toLocaleTimeString()}
    - {#each $todos.data.items as todo} + {#each todos.data.items as todo}
  • {todo.text}
  • {/each}
{/if} -{#if $todos.isFetching} +{#if todos.isFetching}
'Background Updating...' : ' '
diff --git a/examples/svelte/playground/package.json b/examples/svelte/playground/package.json index 5e92175295..83f13abf62 100644 --- a/examples/svelte/playground/package.json +++ b/examples/svelte/playground/package.json @@ -15,8 +15,8 @@ "devDependencies": { "@sveltejs/adapter-auto": "^3.2.2", "@sveltejs/kit": "^2.5.18", - "@sveltejs/vite-plugin-svelte": "^3.1.1", - "svelte": "^4.2.18", + "@sveltejs/vite-plugin-svelte": "^4.0.0-next.4", + "svelte": "5.0.0-next.192", "svelte-check": "^3.8.4", "typescript": "5.3.3", "vite": "^5.3.5" diff --git a/examples/svelte/playground/src/routes/+layout.svelte b/examples/svelte/playground/src/routes/+layout.svelte index 1b9267032c..76c2d0d277 100644 --- a/examples/svelte/playground/src/routes/+layout.svelte +++ b/examples/svelte/playground/src/routes/+layout.svelte @@ -4,6 +4,8 @@ import { QueryClientProvider, QueryClient } from '@tanstack/svelte-query' import { SvelteQueryDevtools } from '@tanstack/svelte-query-devtools' + const { children } = $props() + const queryClient = new QueryClient({ defaultOptions: { queries: { @@ -19,7 +21,7 @@
- + {@render children()}
diff --git a/examples/svelte/playground/src/routes/AddTodo.svelte b/examples/svelte/playground/src/routes/AddTodo.svelte index 97015c4e29..5a56cdee2e 100644 --- a/examples/svelte/playground/src/routes/AddTodo.svelte +++ b/examples/svelte/playground/src/routes/AddTodo.svelte @@ -45,7 +45,7 @@
@@ -25,7 +25,7 @@ {/each} Editing Todo + Editing Todo "{$query.data.name}" (#{$editingIndex}) {/if}
@@ -107,7 +107,7 @@ Loading... (Attempt: {$query.failureCount + 1}) {:else if $query.error} - Error! + Error! {:else if todo}
- +
{$saveMutation.status === 'pending' diff --git a/examples/svelte/playground/src/routes/TodosList.svelte b/examples/svelte/playground/src/routes/TodosList.svelte index fbbb883421..c02d3cc0f7 100644 --- a/examples/svelte/playground/src/routes/TodosList.svelte +++ b/examples/svelte/playground/src/routes/TodosList.svelte @@ -51,7 +51,7 @@ Error: {$query.error.message}
- +
{:else}
    @@ -59,7 +59,7 @@ {#each $query.data as todo}
  • {todo.name}{' '} - +
  • {/each} {/if} diff --git a/examples/svelte/simple/package.json b/examples/svelte/simple/package.json index a6dc36fa66..c56ca00a6d 100644 --- a/examples/svelte/simple/package.json +++ b/examples/svelte/simple/package.json @@ -13,9 +13,9 @@ "@tanstack/svelte-query-devtools": "^5.51.15" }, "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^3.1.1", + "@sveltejs/vite-plugin-svelte": "^4.0.0-next.4", "@tsconfig/svelte": "^5.0.4", - "svelte": "^4.2.18", + "svelte": "5.0.0-next.192", "svelte-check": "^3.8.4", "typescript": "5.3.3", "vite": "^5.3.5" diff --git a/examples/svelte/simple/src/lib/Simple.svelte b/examples/svelte/simple/src/lib/Simple.svelte index 6b044dc321..9577198f5b 100644 --- a/examples/svelte/simple/src/lib/Simple.svelte +++ b/examples/svelte/simple/src/lib/Simple.svelte @@ -21,20 +21,20 @@

    Simple

    - {#if $query.isPending} + {#if query.isPending} Loading... {/if} - {#if $query.error} + {#if query.error} An error has occurred: - {$query.error.message} + {query.error.message} {/if} - {#if $query.isSuccess} + {#if query.isSuccess}
    -

    {$query.data.full_name}

    -

    {$query.data.description}

    - 👀 {$query.data.subscribers_count}{' '} - ✨ {$query.data.stargazers_count}{' '} - 🍴 {$query.data.forks_count} +

    {query.data.full_name}

    +

    {query.data.description}

    + 👀 {query.data.subscribers_count}{' '} + ✨ {query.data.stargazers_count}{' '} + 🍴 {query.data.forks_count}
    {/if}
    diff --git a/examples/svelte/ssr/package.json b/examples/svelte/ssr/package.json index bb9eefc09e..ffbb58fc12 100644 --- a/examples/svelte/ssr/package.json +++ b/examples/svelte/ssr/package.json @@ -15,8 +15,8 @@ "devDependencies": { "@sveltejs/adapter-auto": "^3.2.2", "@sveltejs/kit": "^2.5.18", - "@sveltejs/vite-plugin-svelte": "^3.1.1", - "svelte": "^4.2.18", + "@sveltejs/vite-plugin-svelte": "^4.0.0-next.4", + "svelte": "5.0.0-next.192", "svelte-check": "^3.8.4", "typescript": "5.3.3", "vite": "^5.3.5" diff --git a/examples/svelte/ssr/src/lib/Post.svelte b/examples/svelte/ssr/src/lib/Post.svelte index 0de658b6dd..9f6c886d49 100644 --- a/examples/svelte/ssr/src/lib/Post.svelte +++ b/examples/svelte/ssr/src/lib/Post.svelte @@ -3,7 +3,7 @@ import { api } from './api' import type { Post } from './types' - export let postId: number + const { postId }: { postId: number } = $props() const post = createQuery({ queryKey: ['post', postId], @@ -15,17 +15,17 @@
    - {#if !postId || $post.isPending} + {#if !postId || post.isPending} Loading... {/if} - {#if $post.error} - Error: {$post.error.message} + {#if post.error} + Error: {post.error.message} {/if} - {#if $post.isSuccess} -

    {$post.data.title}

    + {#if post.isSuccess} +

    {post.data.title}

    -

    {$post.data.body}

    +

    {post.data.body}

    -
    {$post.isFetching ? 'Background Updating...' : ' '}
    +
    {post.isFetching ? 'Background Updating...' : ' '}
    {/if}
    diff --git a/examples/svelte/ssr/src/lib/Posts.svelte b/examples/svelte/ssr/src/lib/Posts.svelte index 7457dfd49b..38ff753da7 100644 --- a/examples/svelte/ssr/src/lib/Posts.svelte +++ b/examples/svelte/ssr/src/lib/Posts.svelte @@ -17,13 +17,13 @@
    - {#if $posts.status === 'pending'} + {#if posts.status === 'pending'} Loading... - {:else if $posts.status === 'error'} - Error: {$posts.error.message} + {:else if posts.status === 'error'} + Error: {posts.error.message} {:else}
      - {#each $posts.data as post} + {#each posts.data as post}
    - {#if $posts.isFetching} + {#if posts.isFetching}
    Background Updating...
    diff --git a/examples/svelte/ssr/src/routes/+layout.svelte b/examples/svelte/ssr/src/routes/+layout.svelte index d639174e3f..0b02447853 100644 --- a/examples/svelte/ssr/src/routes/+layout.svelte +++ b/examples/svelte/ssr/src/routes/+layout.svelte @@ -2,14 +2,13 @@ import '../app.css' import { QueryClientProvider } from '@tanstack/svelte-query' import { SvelteQueryDevtools } from '@tanstack/svelte-query-devtools' - import type { PageData } from './$types' - export let data: PageData + const { data, children } = $props()
    - + {@render children()}
    diff --git a/examples/svelte/ssr/src/routes/+layout.ts b/examples/svelte/ssr/src/routes/+layout.ts index 0d38c02919..5104825207 100644 --- a/examples/svelte/ssr/src/routes/+layout.ts +++ b/examples/svelte/ssr/src/routes/+layout.ts @@ -2,7 +2,7 @@ import { browser } from '$app/environment' import { QueryClient } from '@tanstack/svelte-query' import type { LayoutLoad } from './$types' -export const load: LayoutLoad = async () => { +export const load: LayoutLoad = () => { const queryClient = new QueryClient({ defaultOptions: { queries: { diff --git a/examples/svelte/ssr/src/routes/[postId]/+page.svelte b/examples/svelte/ssr/src/routes/[postId]/+page.svelte index b68acc0bc0..2400baac2a 100644 --- a/examples/svelte/ssr/src/routes/[postId]/+page.svelte +++ b/examples/svelte/ssr/src/routes/[postId]/+page.svelte @@ -1,8 +1,7 @@ diff --git a/examples/svelte/star-wars/package.json b/examples/svelte/star-wars/package.json index 78d9e55273..a1e84e3c75 100644 --- a/examples/svelte/star-wars/package.json +++ b/examples/svelte/star-wars/package.json @@ -15,10 +15,10 @@ "devDependencies": { "@sveltejs/adapter-auto": "^3.2.2", "@sveltejs/kit": "^2.5.18", - "@sveltejs/vite-plugin-svelte": "^3.1.1", + "@sveltejs/vite-plugin-svelte": "^4.0.0-next.4", "autoprefixer": "^10.4.19", "postcss": "^8.4.40", - "svelte": "^4.2.18", + "svelte": "5.0.0-next.192", "svelte-check": "^3.8.4", "tailwindcss": "^3.4.7", "typescript": "5.3.3", diff --git a/examples/svelte/star-wars/src/routes/+layout.svelte b/examples/svelte/star-wars/src/routes/+layout.svelte index d11124d6fe..5f2bf488e9 100644 --- a/examples/svelte/star-wars/src/routes/+layout.svelte +++ b/examples/svelte/star-wars/src/routes/+layout.svelte @@ -4,6 +4,8 @@ import { QueryClientProvider, QueryClient } from '@tanstack/svelte-query' import { SvelteQueryDevtools } from '@tanstack/svelte-query-devtools' + const { children } = $props() + const queryClient = new QueryClient({ defaultOptions: { queries: { @@ -25,6 +27,6 @@
    Films Characters - + {@render children()} diff --git a/examples/svelte/star-wars/src/routes/characters/+page.svelte b/examples/svelte/star-wars/src/routes/characters/+page.svelte index 0fef65bd7a..4bd81ba07e 100644 --- a/examples/svelte/star-wars/src/routes/characters/+page.svelte +++ b/examples/svelte/star-wars/src/routes/characters/+page.svelte @@ -12,18 +12,18 @@ }) -{#if $query.status === 'pending'} +{#if query.status === 'pending'}

    Loading...

    {/if} -{#if $query.status === 'error'} +{#if query.status === 'error'}

    Error :(

    {/if} -{#if $query.status === 'success'} +{#if query.status === 'success'}

    Characters

    - {#each $query.data.results as person} + {#each query.data.results as person} {@const personUrlParts = person.url.split('/').filter(Boolean)} {@const personId = personUrlParts[personUrlParts.length - 1]}
    diff --git a/examples/svelte/star-wars/src/routes/characters/[characterId]/+page.svelte b/examples/svelte/star-wars/src/routes/characters/[characterId]/+page.svelte index 6743ccbcb5..e887ba454e 100644 --- a/examples/svelte/star-wars/src/routes/characters/[characterId]/+page.svelte +++ b/examples/svelte/star-wars/src/routes/characters/[characterId]/+page.svelte @@ -2,9 +2,8 @@ import { createQuery } from '@tanstack/svelte-query' import Homeworld from './Homeworld.svelte' import Film from './Film.svelte' - import type { PageData } from './$types' - export let data: PageData + let { data } = $props() const getCharacter = async () => { const res = await fetch( @@ -19,19 +18,19 @@ }) -{#if $query.status === 'pending'} +{#if query.status === 'pending'}

    Loading...

    {/if} -{#if $query.status === 'error'} +{#if query.status === 'error'}

    Error :(

    {/if} -{#if $query.status === 'success'} - {@const homeworldUrlParts = $query.data.homeworld.split('/').filter(Boolean)} +{#if query.status === 'success'} + {@const homeworldUrlParts = query.data.homeworld.split('/').filter(Boolean)} {@const homeworldId = homeworldUrlParts[homeworldUrlParts.length - 1]}
    -

    {$query.data.name}

    +

    {query.data.name}

    @@ -42,23 +41,23 @@ - + - + - + - + - + @@ -68,7 +67,7 @@
    Born{$query.data.birth_year}{query.data.birth_year}
    Eyes{$query.data.eye_color}{query.data.eye_color}
    Hair{$query.data.hair_color}{query.data.hair_color}
    Height{$query.data.height}{query.data.height}
    Mass{$query.data.mass}{query.data.mass}
    Homeworld

    Films

    - {#each $query.data.films as film} + {#each query.data.films as film} {@const filmUrlParts = film.split('/').filter(Boolean)} {@const filmId = filmUrlParts[filmUrlParts.length - 1]} diff --git a/examples/svelte/star-wars/src/routes/characters/[characterId]/Film.svelte b/examples/svelte/star-wars/src/routes/characters/[characterId]/Film.svelte index 7c0210d8d5..a08ed25a6a 100644 --- a/examples/svelte/star-wars/src/routes/characters/[characterId]/Film.svelte +++ b/examples/svelte/star-wars/src/routes/characters/[characterId]/Film.svelte @@ -1,7 +1,7 @@ -{#if $query.status === 'success'} +{#if query.status === 'success'} {/if} diff --git a/examples/svelte/star-wars/src/routes/characters/[characterId]/Homeworld.svelte b/examples/svelte/star-wars/src/routes/characters/[characterId]/Homeworld.svelte index d931b8cc19..384318fd62 100644 --- a/examples/svelte/star-wars/src/routes/characters/[characterId]/Homeworld.svelte +++ b/examples/svelte/star-wars/src/routes/characters/[characterId]/Homeworld.svelte @@ -1,7 +1,7 @@ -{#if $query.status === 'success'} +{#if query.status === 'success'} - {$query.data.name} + {query.data.name} {/if} diff --git a/examples/svelte/star-wars/src/routes/films/+page.svelte b/examples/svelte/star-wars/src/routes/films/+page.svelte index adb251e0d2..ccca60b894 100644 --- a/examples/svelte/star-wars/src/routes/films/+page.svelte +++ b/examples/svelte/star-wars/src/routes/films/+page.svelte @@ -12,18 +12,18 @@ }) -{#if $query.status === 'pending'} +{#if query.status === 'pending'}

    Loading...

    {/if} -{#if $query.status === 'error'} +{#if query.status === 'error'}

    Error :(

    {/if} -{#if $query.status === 'success'} +{#if query.status === 'success'}

    Films

    - {#each $query.data.results as film} + {#each query.data.results as film} {@const filmUrlParts = film.url.split('/').filter(Boolean)} {@const filmId = filmUrlParts[filmUrlParts.length - 1]}
    diff --git a/examples/svelte/star-wars/src/routes/films/[filmId]/+page.svelte b/examples/svelte/star-wars/src/routes/films/[filmId]/+page.svelte index 5342487a6e..1f8d55537f 100644 --- a/examples/svelte/star-wars/src/routes/films/[filmId]/+page.svelte +++ b/examples/svelte/star-wars/src/routes/films/[filmId]/+page.svelte @@ -1,9 +1,8 @@ -{#if $query.status === 'pending'} +{#if query.status === 'pending'}

    Loading...

    {/if} -{#if $query.status === 'error'} +{#if query.status === 'error'}

    Error :(

    {/if} -{#if $query.status === 'success'} +{#if query.status === 'success'}
    -

    {$query.data.title}

    -

    {$query.data.opening_crawl}

    +

    {query.data.title}

    +

    {query.data.opening_crawl}


    Characters

    - {#each $query.data.characters as character} + {#each query.data.characters as character} {@const characterUrlParts = character.split('/').filter(Boolean)} {@const characterId = characterUrlParts[characterUrlParts.length - 1]} diff --git a/examples/svelte/star-wars/src/routes/films/[filmId]/Character.svelte b/examples/svelte/star-wars/src/routes/films/[filmId]/Character.svelte index b4827ccdf9..88c5d6b5d2 100644 --- a/examples/svelte/star-wars/src/routes/films/[filmId]/Character.svelte +++ b/examples/svelte/star-wars/src/routes/films/[filmId]/Character.svelte @@ -1,7 +1,7 @@ -{#if $query.status === 'success'} +{#if query.status === 'success'} {/if} diff --git a/examples/svelte/svelte-melt/.gitignore b/examples/svelte/svelte-melt/.gitignore new file mode 100644 index 0000000000..6635cf5542 --- /dev/null +++ b/examples/svelte/svelte-melt/.gitignore @@ -0,0 +1,10 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example +vite.config.js.timestamp-* +vite.config.ts.timestamp-* diff --git a/examples/svelte/svelte-melt/README.md b/examples/svelte/svelte-melt/README.md new file mode 100644 index 0000000000..5ce676612e --- /dev/null +++ b/examples/svelte/svelte-melt/README.md @@ -0,0 +1,38 @@ +# create-svelte + +Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/main/packages/create-svelte). + +## Creating a project + +If you're seeing this, you've probably already done this step. Congrats! + +```bash +# create a new project in the current directory +npm create svelte@latest + +# create a new project in my-app +npm create svelte@latest my-app +``` + +## Developing + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: + +```bash +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open +``` + +## Building + +To create a production version of your app: + +```bash +npm run build +``` + +You can preview the production build with `npm run preview`. + +> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment. diff --git a/examples/svelte/svelte-melt/package.json b/examples/svelte/svelte-melt/package.json new file mode 100644 index 0000000000..65d614c43e --- /dev/null +++ b/examples/svelte/svelte-melt/package.json @@ -0,0 +1,29 @@ +{ + "name": "svelte-melt", + "private": true, + "type": "module", + "scripts": { + "dev": "vite dev --port 3000", + "build": "vite build", + "preview": "vite preview", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "lint": "prettier --check . && eslint .", + "format": "prettier --write ." + }, + "dependencies": { + "@tanstack/query-sync-storage-persister": "^5.51.1", + "@tanstack/svelte-query": "^5.51.1", + "@tanstack/svelte-query-devtools": "^5.51.1", + "@tanstack/svelte-query-persist-client": "^5.51.1" + }, + "devDependencies": { + "@sveltejs/adapter-auto": "^3.2.2", + "@sveltejs/kit": "^2.5.18", + "@sveltejs/vite-plugin-svelte": "^4.0.0-next.4", + "svelte": "5.0.0-next.192", + "svelte-check": "^3.8.4", + "typescript": "5.3.3", + "vite": "^5.3.3" + } +} diff --git a/examples/svelte/svelte-melt/src/app.d.ts b/examples/svelte/svelte-melt/src/app.d.ts new file mode 100644 index 0000000000..367926a580 --- /dev/null +++ b/examples/svelte/svelte-melt/src/app.d.ts @@ -0,0 +1,13 @@ +// See https://kit.svelte.dev/docs/types#app +// for information about these interfaces +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface PageState {} + // interface Platform {} + } +} + +export {} diff --git a/examples/svelte/svelte-melt/src/app.html b/examples/svelte/svelte-melt/src/app.html new file mode 100644 index 0000000000..84ffad1665 --- /dev/null +++ b/examples/svelte/svelte-melt/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %sveltekit.head% + + +
    %sveltekit.body%
    + + diff --git a/examples/svelte/svelte-melt/src/routes/+layout.svelte b/examples/svelte/svelte-melt/src/routes/+layout.svelte new file mode 100644 index 0000000000..9fdebff85f --- /dev/null +++ b/examples/svelte/svelte-melt/src/routes/+layout.svelte @@ -0,0 +1,39 @@ + + + + +
    + {@render children()} +
    +
    diff --git a/examples/svelte/svelte-melt/src/routes/+page.svelte b/examples/svelte/svelte-melt/src/routes/+page.svelte new file mode 100644 index 0000000000..a0568538e8 --- /dev/null +++ b/examples/svelte/svelte-melt/src/routes/+page.svelte @@ -0,0 +1,31 @@ + + +isReTORING:{isRes()} + + + diff --git a/examples/svelte/svelte-melt/src/routes/+page.ts b/examples/svelte/svelte-melt/src/routes/+page.ts new file mode 100644 index 0000000000..977abb90f4 --- /dev/null +++ b/examples/svelte/svelte-melt/src/routes/+page.ts @@ -0,0 +1,2 @@ +export const ssr = false +export const csr = true diff --git a/examples/svelte/svelte-melt/src/routes/CreateQueries.svelte b/examples/svelte/svelte-melt/src/routes/CreateQueries.svelte new file mode 100644 index 0000000000..7b8338af55 --- /dev/null +++ b/examples/svelte/svelte-melt/src/routes/CreateQueries.svelte @@ -0,0 +1,25 @@ + + +{JSON.stringify(combinedQueries)} diff --git a/examples/svelte/svelte-melt/src/routes/cacheUpdate.svelte b/examples/svelte/svelte-melt/src/routes/cacheUpdate.svelte new file mode 100644 index 0000000000..509ba26ff2 --- /dev/null +++ b/examples/svelte/svelte-melt/src/routes/cacheUpdate.svelte @@ -0,0 +1,77 @@ + + + + +{data.fetchStatus} +{data.isLoading} +{data.isFetching} +{data.isRefetching} + + +{bookFilterStore.paginate.page} +
    {JSON.stringify(data.data, null, 1)}
    +{#each data?.data ?? [] as item} +
    {item.title}
    +{/each} diff --git a/examples/svelte/svelte-melt/src/routes/derivedQuery.svelte b/examples/svelte/svelte-melt/src/routes/derivedQuery.svelte new file mode 100644 index 0000000000..0775006704 --- /dev/null +++ b/examples/svelte/svelte-melt/src/routes/derivedQuery.svelte @@ -0,0 +1,68 @@ + + +

    testing derived query with list

    + +isFetching {isFetching()} +isMutating {isMutating()} + +{data.fetchStatus} +{data.isLoading} +{data.isFetching} +{data.isRefetching} + + +{bookFilterStore.paginate.page} +{p.derived_state} +{#each data?.data ?? [] as item} +
    {item.title}
    +{/each} diff --git a/examples/svelte/svelte-melt/src/routes/external.svelte.ts b/examples/svelte/svelte-melt/src/routes/external.svelte.ts new file mode 100644 index 0000000000..5cae384af7 --- /dev/null +++ b/examples/svelte/svelte-melt/src/routes/external.svelte.ts @@ -0,0 +1,11 @@ +import { createQuery } from '@tanstack/svelte-query' +export function useSvelteExtensionQuery(props) { + const enabled = $derived({ + queryKey: ['sv-externel', props], + queryFn: () => { + return Date.now() + }, + enabled: () => props.paginate.page > 0, + }) + return createQuery(enabled) +} diff --git a/examples/svelte/svelte-melt/src/routes/external.ts b/examples/svelte/svelte-melt/src/routes/external.ts new file mode 100644 index 0000000000..d318d314e1 --- /dev/null +++ b/examples/svelte/svelte-melt/src/routes/external.ts @@ -0,0 +1,11 @@ +import { createQuery } from '@tanstack/svelte-query' + +export function useQuery(props) { + return createQuery({ + queryKey: ['eternal', props], + queryFn: () => { + return Date.now() + }, + enabled: props.paginate.page > 0, + }) +} diff --git a/examples/svelte/svelte-melt/src/routes/paginate.svelte b/examples/svelte/svelte-melt/src/routes/paginate.svelte new file mode 100644 index 0000000000..fe632aac79 --- /dev/null +++ b/examples/svelte/svelte-melt/src/routes/paginate.svelte @@ -0,0 +1,64 @@ + + +

    testing create query with list

    + +{data.fetchStatus} +{data.isLoading} +{data.isFetching} +{data.isRefetching} + + +{bookFilterStore.paginate.page} +{#each data?.data ?? [] as item} +
    {item.title}
    +{/each} + + diff --git a/examples/svelte/svelte-melt/src/routes/queries.svelte b/examples/svelte/svelte-melt/src/routes/queries.svelte new file mode 100644 index 0000000000..0139637378 --- /dev/null +++ b/examples/svelte/svelte-melt/src/routes/queries.svelte @@ -0,0 +1,769 @@ + + + + +
    +

    Create Queries

    +

    + QueryOptions: {JSON.stringify([ + { queryFn: () => 1, queryKey: keys }, + { queryFn: () => 2, queryKey: ['aa'] }, + ])} +

    + + + +
    Result: {JSON.stringify(data)}
    +
    +
    Data: {JSON.stringify(data.data)}
    +
    +
    isError: {JSON.stringify(data)}
    +
    + +C +
    {JSON.stringify(dat1, null, 3)}
    diff --git a/examples/svelte/svelte-melt/src/routes/store.svelte.ts b/examples/svelte/svelte-melt/src/routes/store.svelte.ts new file mode 100644 index 0000000000..f34ebeb186 --- /dev/null +++ b/examples/svelte/svelte-melt/src/routes/store.svelte.ts @@ -0,0 +1,19 @@ +const init = { + paginate: { + page: 1, + asc: false, + orderWith: 'like_count', + start: 0, + end: 10, + size: 12, + totalSize: 20, + }, + filter: { + tags: [], + category: 'fiction', + updated_at: 'yesterday', + created_at: 'last 300 days', + }, + search: {}, +} +export const bookFilterStore = $state({ ...init }) diff --git a/examples/svelte/svelte-melt/src/routes/test.svelte b/examples/svelte/svelte-melt/src/routes/test.svelte new file mode 100644 index 0000000000..1c5afacbd2 --- /dev/null +++ b/examples/svelte/svelte-melt/src/routes/test.svelte @@ -0,0 +1,793 @@ + + +
    +
    +

    Create Query

    + +

    + Cases for different type of query key +
    +
      +
    • String key:{createQueryKey}
    • +
    • arr Key{createQueryKeyDeep}
    • +
    • Object Key{JSON.stringify(createQueryKeyDeepArr)}
    • +
    +

    + + + + + +
    Result: {JSON.stringify(data.data, null, 3)}
    +
    +
    Data: {JSON.stringify(data.data)}
    +
    +
    isError: {data.isError}
    +
    fetchStatus: {data.fetchStatus}
    + +
    + +
    + +
    +

    mutation

    + +
    diff --git a/examples/svelte/svelte-melt/static/favicon.png b/examples/svelte/svelte-melt/static/favicon.png new file mode 100644 index 0000000000..825b9e65af Binary files /dev/null and b/examples/svelte/svelte-melt/static/favicon.png differ diff --git a/examples/svelte/svelte-melt/svelte.config.js b/examples/svelte/svelte-melt/svelte.config.js new file mode 100644 index 0000000000..6acad8bac2 --- /dev/null +++ b/examples/svelte/svelte-melt/svelte.config.js @@ -0,0 +1,18 @@ +import adapter from '@sveltejs/adapter-auto' +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte' + +/** @type {import('@sveltejs/kit').Config} */ +const config = { + // Consult https://kit.svelte.dev/docs/integrations#preprocessors + // for more information about preprocessors + preprocess: vitePreprocess(), + + kit: { + // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. + // If your environment is not supported or you settled on a specific environment, switch out the adapter. + // See https://kit.svelte.dev/docs/adapters for more information about adapters. + adapter: adapter(), + }, +} + +export default config diff --git a/examples/svelte/svelte-melt/tsconfig.json b/examples/svelte/svelte-melt/tsconfig.json new file mode 100644 index 0000000000..34aadc0285 --- /dev/null +++ b/examples/svelte/svelte-melt/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "./.svelte-kit/tsconfig.json", + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "moduleResolution": "bundler" + } + // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias + // + // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes + // from the referenced tsconfig.json - TypeScript does not merge them in +} diff --git a/examples/svelte/svelte-melt/vite.config.ts b/examples/svelte/svelte-melt/vite.config.ts new file mode 100644 index 0000000000..dd1b8b7fa1 --- /dev/null +++ b/examples/svelte/svelte-melt/vite.config.ts @@ -0,0 +1,6 @@ +import { sveltekit } from '@sveltejs/kit/vite' +import { defineConfig } from 'vite' + +export default defineConfig({ + plugins: [sveltekit()], +}) diff --git a/integrations/svelte-vite/package.json b/integrations/svelte-vite/package.json index c8c9e3975e..a62720d492 100644 --- a/integrations/svelte-vite/package.json +++ b/integrations/svelte-vite/package.json @@ -6,10 +6,10 @@ "build": "vite build" }, "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^3.1.1", + "@sveltejs/vite-plugin-svelte": "^4.0.0-next.4", "@tanstack/svelte-query": "workspace:*", "@tanstack/svelte-query-devtools": "workspace:*", - "svelte": "^4.2.18", + "svelte": "5.0.0-next.192", "vite": "^5.3.5" } } diff --git a/packages/svelte-query-devtools/package.json b/packages/svelte-query-devtools/package.json index 43c8ac12f5..eba622384f 100644 --- a/packages/svelte-query-devtools/package.json +++ b/packages/svelte-query-devtools/package.json @@ -43,14 +43,14 @@ }, "devDependencies": { "@sveltejs/package": "^2.3.2", - "@sveltejs/vite-plugin-svelte": "^3.1.1", + "@sveltejs/vite-plugin-svelte": "^4.0.0-next.4", "@tanstack/svelte-query": "workspace:*", "eslint-plugin-svelte": "^2.43.0", - "svelte": "^4.2.18", + "svelte": "5.0.0-next.192", "svelte-check": "^3.8.4" }, "peerDependencies": { "@tanstack/svelte-query": "workspace:^", - "svelte": "^3.54.0 || ^4.0.0 || ^5.0.0-next.0" + "svelte": "^5.0.0-next.105" } } diff --git a/packages/svelte-query-devtools/src/Devtools.svelte b/packages/svelte-query-devtools/src/Devtools.svelte index 654a4f7f1c..b29e30d261 100644 --- a/packages/svelte-query-devtools/src/Devtools.svelte +++ b/packages/svelte-query-devtools/src/Devtools.svelte @@ -10,13 +10,50 @@ TanstackQueryDevtools, } from '@tanstack/query-devtools' - export let initialIsOpen = false - export let buttonPosition: DevtoolsButtonPosition = 'bottom-right' - export let position: DevtoolsPosition = 'bottom' - export let client: QueryClient = useQueryClient() - export let errorTypes: Array = [] - export let styleNonce: string | undefined = undefined - export let shadowDOMTarget: ShadowRoot | undefined = undefined + interface DevtoolsOptions { + /** + * Set this true if you want the dev tools to default to being open + */ + initialIsOpen?: boolean + /** + * The position of the TanStack Query logo to open and close the devtools panel. + * 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' + * Defaults to 'bottom-right'. + */ + buttonPosition?: DevtoolsButtonPosition + /** + * The position of the TanStack Query devtools panel. + * 'top' | 'bottom' | 'left' | 'right' + * Defaults to 'bottom'. + */ + position?: DevtoolsPosition + /** + * Custom instance of QueryClient + */ + client?: QueryClient + /** + * Use this so you can define custom errors that can be shown in the devtools. + */ + errorTypes?: Array + /** + * Use this to pass a nonce to the style tag that is added to the document head. This is useful if you are using a Content Security Policy (CSP) nonce to allow inline styles. + */ + styleNonce?: string + /** + * Use this so you can attach the devtool's styles to specific element in the DOM. + */ + shadowDOMTarget?: ShadowRoot + } + + let { + initialIsOpen = false, + buttonPosition = 'bottom-right', + position = 'bottom', + client = useQueryClient(), + errorTypes = [], + styleNonce = undefined, + shadowDOMTarget = undefined, + }: DevtoolsOptions = $props() let ref: HTMLDivElement let devtools: TanstackQueryDevtools | undefined @@ -41,20 +78,24 @@ devtools.mount(ref) }) + return () => devtools?.unmount() + }) - return () => { - devtools?.unmount() - } + $effect(() => { + devtools?.setButtonPosition(buttonPosition) }) - } - $: { - if (devtools) { - devtools.setButtonPosition(buttonPosition) - devtools.setPosition(position) - devtools.setInitialIsOpen(initialIsOpen) - devtools.setErrorTypes(errorTypes) - } + $effect(() => { + devtools?.setPosition(position) + }) + + $effect(() => { + devtools?.setInitialIsOpen(initialIsOpen) + }) + + $effect(() => { + devtools?.setErrorTypes(errorTypes) + }) } diff --git a/packages/svelte-query-persist-client/package.json b/packages/svelte-query-persist-client/package.json index 7da5a823de..49e08bf233 100644 --- a/packages/svelte-query-persist-client/package.json +++ b/packages/svelte-query-persist-client/package.json @@ -45,15 +45,15 @@ }, "devDependencies": { "@sveltejs/package": "^2.3.2", - "@sveltejs/vite-plugin-svelte": "^3.1.1", + "@sveltejs/vite-plugin-svelte": "^4.0.0-next.4", "@tanstack/svelte-query": "workspace:*", "@testing-library/svelte": "^5.2.1", "eslint-plugin-svelte": "^2.43.0", - "svelte": "^4.2.18", + "svelte": "5.0.0-next.192", "svelte-check": "^3.8.4" }, "peerDependencies": { "@tanstack/svelte-query": "workspace:^", - "svelte": "^3.54.0 || ^4.0.0 || ^5.0.0-next.0" + "svelte": "^5.0.0-next.105" } } diff --git a/packages/svelte-query-persist-client/src/PersistQueryClientProvider.svelte b/packages/svelte-query-persist-client/src/PersistQueryClientProvider.svelte index 5f5e04ada7..abe6ec471c 100644 --- a/packages/svelte-query-persist-client/src/PersistQueryClientProvider.svelte +++ b/packages/svelte-query-persist-client/src/PersistQueryClientProvider.svelte @@ -1,43 +1,51 @@ - - + + {@render children()} diff --git a/packages/svelte-query-persist-client/tests/AwaitOnSuccess/AwaitOnSuccess.svelte b/packages/svelte-query-persist-client/tests/AwaitOnSuccess/AwaitOnSuccess.svelte index 2a7501660e..b9ccb7377f 100644 --- a/packages/svelte-query-persist-client/tests/AwaitOnSuccess/AwaitOnSuccess.svelte +++ b/packages/svelte-query-persist-client/tests/AwaitOnSuccess/AwaitOnSuccess.svelte @@ -1,20 +1,19 @@ -
    {$query.data}
    -
    fetchStatus: {$query.fetchStatus}
    +
    {query.data}
    +
    fetchStatus: {query.fetchStatus}
    diff --git a/packages/svelte-query-persist-client/tests/AwaitOnSuccess/Provider.svelte b/packages/svelte-query-persist-client/tests/AwaitOnSuccess/Provider.svelte index c3087ac2fa..7d1201e0da 100644 --- a/packages/svelte-query-persist-client/tests/AwaitOnSuccess/Provider.svelte +++ b/packages/svelte-query-persist-client/tests/AwaitOnSuccess/Provider.svelte @@ -3,12 +3,15 @@ import AwaitOnSuccess from './AwaitOnSuccess.svelte' import type { OmitKeyof, QueryClient } from '@tanstack/svelte-query' import type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core' - import type { Writable } from 'svelte/store' - export let queryClient: QueryClient - export let persistOptions: OmitKeyof - export let onSuccess: () => Promise - export let states: Writable> + interface Props { + queryClient: QueryClient + persistOptions: OmitKeyof + onSuccess: () => Promise + states: Array + } + + let { queryClient, persistOptions, onSuccess, states }: Props = $props() diff --git a/packages/svelte-query-persist-client/tests/FreshData/FreshData.svelte b/packages/svelte-query-persist-client/tests/FreshData/FreshData.svelte index fd46ffb5b6..0284becb09 100644 --- a/packages/svelte-query-persist-client/tests/FreshData/FreshData.svelte +++ b/packages/svelte-query-persist-client/tests/FreshData/FreshData.svelte @@ -1,16 +1,21 @@ -
    data: {$query.data ?? 'undefined'}
    -
    fetchStatus: {$query.fetchStatus}
    +
    data: {query.data ?? 'undefined'}
    +
    fetchStatus: {query.fetchStatus}
    diff --git a/packages/svelte-query-persist-client/tests/FreshData/Provider.svelte b/packages/svelte-query-persist-client/tests/FreshData/Provider.svelte index 75a9c1aefa..eb52193738 100644 --- a/packages/svelte-query-persist-client/tests/FreshData/Provider.svelte +++ b/packages/svelte-query-persist-client/tests/FreshData/Provider.svelte @@ -3,13 +3,16 @@ import FreshData from './FreshData.svelte' import type { OmitKeyof, QueryClient } from '@tanstack/svelte-query' import type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core' - import type { Writable } from 'svelte/store' - import type { StatusResult } from '../utils.js' + import type { StatusResult } from '../utils.svelte' - export let queryClient: QueryClient - export let persistOptions: OmitKeyof - export let states: Writable>> - export let fetched: Writable + interface Props { + queryClient: QueryClient + persistOptions: OmitKeyof + states: { value: Array> } + fetched: boolean + } + + let { queryClient, persistOptions, states, fetched }: Props = $props() diff --git a/packages/svelte-query-persist-client/tests/InitialData/InitialData.svelte b/packages/svelte-query-persist-client/tests/InitialData/InitialData.svelte index 900c7f37cd..25695e07fc 100644 --- a/packages/svelte-query-persist-client/tests/InitialData/InitialData.svelte +++ b/packages/svelte-query-persist-client/tests/InitialData/InitialData.svelte @@ -1,10 +1,10 @@ -
    {$query.data}
    -
    fetchStatus: {$query.fetchStatus}
    +
    {query.data}
    +
    fetchStatus: {query.fetchStatus}
    diff --git a/packages/svelte-query-persist-client/tests/InitialData/Provider.svelte b/packages/svelte-query-persist-client/tests/InitialData/Provider.svelte index e5e17f712e..d18b79aea3 100644 --- a/packages/svelte-query-persist-client/tests/InitialData/Provider.svelte +++ b/packages/svelte-query-persist-client/tests/InitialData/Provider.svelte @@ -3,12 +3,15 @@ import InitialData from './InitialData.svelte' import type { OmitKeyof, QueryClient } from '@tanstack/svelte-query' import type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core' - import type { Writable } from 'svelte/store' - import type { StatusResult } from '../utils.js' + import type { StatusResult } from '../utils.svelte' - export let queryClient: QueryClient - export let persistOptions: OmitKeyof - export let states: Writable>> + interface Props { + queryClient: QueryClient + persistOptions: OmitKeyof + states: { value: Array> } + } + + let { queryClient, persistOptions, states }: Props = $props() diff --git a/packages/svelte-query-persist-client/tests/OnSuccess/OnSuccess.svelte b/packages/svelte-query-persist-client/tests/OnSuccess/OnSuccess.svelte index efd321ca8b..c07fee7267 100644 --- a/packages/svelte-query-persist-client/tests/OnSuccess/OnSuccess.svelte +++ b/packages/svelte-query-persist-client/tests/OnSuccess/OnSuccess.svelte @@ -1,6 +1,6 @@ -
    {$query.data}
    -
    fetchStatus: {$query.fetchStatus}
    +
    {query.data}
    +
    fetchStatus: {query.fetchStatus}
    diff --git a/packages/svelte-query-persist-client/tests/OnSuccess/Provider.svelte b/packages/svelte-query-persist-client/tests/OnSuccess/Provider.svelte index c0d2792771..0b280ca570 100644 --- a/packages/svelte-query-persist-client/tests/OnSuccess/Provider.svelte +++ b/packages/svelte-query-persist-client/tests/OnSuccess/Provider.svelte @@ -4,9 +4,13 @@ import type { OmitKeyof, QueryClient } from '@tanstack/svelte-query' import type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core' - export let queryClient: QueryClient - export let persistOptions: OmitKeyof - export let onSuccess: () => void + interface Props { + queryClient: QueryClient + persistOptions: OmitKeyof + onSuccess: () => void + } + + let { queryClient, persistOptions, onSuccess }: Props = $props() diff --git a/packages/svelte-query-persist-client/tests/PersistQueryClientProvider.test.ts b/packages/svelte-query-persist-client/tests/PersistQueryClientProvider.svelte.test.ts similarity index 79% rename from packages/svelte-query-persist-client/tests/PersistQueryClientProvider.test.ts rename to packages/svelte-query-persist-client/tests/PersistQueryClientProvider.svelte.test.ts index 86b99cce90..e89387e474 100644 --- a/packages/svelte-query-persist-client/tests/PersistQueryClientProvider.test.ts +++ b/packages/svelte-query-persist-client/tests/PersistQueryClientProvider.svelte.test.ts @@ -1,7 +1,6 @@ import { render, waitFor } from '@testing-library/svelte' import { describe, expect, test, vi } from 'vitest' import { persistQueryClientSave } from '@tanstack/query-persist-client-core' -import { get, writable } from 'svelte/store' import AwaitOnSuccess from './AwaitOnSuccess/Provider.svelte' import FreshData from './FreshData/Provider.svelte' import OnSuccess from './OnSuccess/Provider.svelte' @@ -9,14 +8,13 @@ import InitialData from './InitialData/Provider.svelte' import RemoveCache from './RemoveCache/Provider.svelte' import RestoreCache from './RestoreCache/Provider.svelte' import UseQueries from './UseQueries/Provider.svelte' -import { createQueryClient, sleep } from './utils.js' +import { createQueryClient, ref, sleep } from './utils.svelte' import type { PersistedClient, Persister, } from '@tanstack/query-persist-client-core' -import type { Writable } from 'svelte/store' -import type { StatusResult } from './utils.js' +import type { StatusResult } from './utils.svelte' const createMockPersister = (): Persister => { let storedState: PersistedClient | undefined @@ -56,7 +54,7 @@ const createMockErrorPersister = ( describe('PersistQueryClientProvider', () => { test('restores cache from persister', async () => { - const statesStore: Writable>> = writable([]) + let states = ref>>([]) const queryClient = createQueryClient() await queryClient.prefetchQuery({ @@ -74,7 +72,7 @@ describe('PersistQueryClientProvider', () => { props: { queryClient, persistOptions: { persister }, - states: statesStore, + states, }, }) @@ -82,36 +80,35 @@ describe('PersistQueryClientProvider', () => { await waitFor(() => rendered.getByText('hydrated')) await waitFor(() => rendered.getByText('fetched')) - const states = get(statesStore) - expect(states).toHaveLength(4) + expect(states.value).toHaveLength(3) - expect(states[0]).toMatchObject({ + expect(states.value[0]).toMatchObject({ status: 'pending', fetchStatus: 'idle', data: undefined, }) - expect(states[1]).toMatchObject({ + expect(states.value[1]).toMatchObject({ status: 'success', fetchStatus: 'fetching', data: 'hydrated', }) - expect(states[2]).toMatchObject({ + expect(states.value[2]).toMatchObject({ status: 'success', - fetchStatus: 'fetching', - data: 'hydrated', + fetchStatus: 'idle', + data: 'fetched', }) - expect(states[3]).toMatchObject({ + /* expect(states[3]).toMatchObject({ status: 'success', fetchStatus: 'idle', data: 'fetched', - }) + }) */ }) test('should also put useQueries into idle state', async () => { - const statesStore: Writable>> = writable([]) + let states = ref>>([]) const queryClient = createQueryClient() await queryClient.prefetchQuery({ @@ -129,7 +126,7 @@ describe('PersistQueryClientProvider', () => { props: { queryClient, persistOptions: { persister }, - states: statesStore, + states, }, }) @@ -137,29 +134,21 @@ describe('PersistQueryClientProvider', () => { await waitFor(() => rendered.getByText('hydrated')) await waitFor(() => rendered.getByText('fetched')) - const states = get(statesStore) - - expect(states).toHaveLength(4) + expect(states.value).toHaveLength(3) - expect(states[0]).toMatchObject({ + expect(states.value[0]).toMatchObject({ status: 'pending', fetchStatus: 'idle', data: undefined, }) - expect(states[1]).toMatchObject({ + expect(states.value[1]).toMatchObject({ status: 'success', fetchStatus: 'fetching', data: 'hydrated', }) - expect(states[2]).toMatchObject({ - status: 'success', - fetchStatus: 'fetching', - data: 'hydrated', - }) - - expect(states[3]).toMatchObject({ + expect(states.value[2]).toMatchObject({ status: 'success', fetchStatus: 'idle', data: 'fetched', @@ -167,7 +156,7 @@ describe('PersistQueryClientProvider', () => { }) test('should show initialData while restoring', async () => { - const statesStore: Writable>> = writable([]) + let states = ref>>([]) const queryClient = createQueryClient() await queryClient.prefetchQuery({ @@ -185,7 +174,7 @@ describe('PersistQueryClientProvider', () => { props: { queryClient, persistOptions: { persister }, - states: statesStore, + states, }, }) @@ -193,28 +182,27 @@ describe('PersistQueryClientProvider', () => { await waitFor(() => rendered.getByText('hydrated')) await waitFor(() => rendered.getByText('fetched')) - const states = get(statesStore) - expect(states).toHaveLength(4) + expect(states.value).toHaveLength(3) - expect(states[0]).toMatchObject({ + expect(states.value[0]).toMatchObject({ status: 'success', fetchStatus: 'idle', data: 'initial', }) - expect(states[1]).toMatchObject({ + expect(states.value[1]).toMatchObject({ status: 'success', fetchStatus: 'fetching', data: 'hydrated', }) - expect(states[2]).toMatchObject({ + /* expect(states[2]).toMatchObject({ status: 'success', fetchStatus: 'fetching', data: 'hydrated', - }) + }) */ - expect(states[3]).toMatchObject({ + expect(states.value[2]).toMatchObject({ status: 'success', fetchStatus: 'idle', data: 'fetched', @@ -222,7 +210,7 @@ describe('PersistQueryClientProvider', () => { }) test('should not refetch after restoring when data is fresh', async () => { - const statesStore: Writable>> = writable([]) + let states = ref>>([]) const queryClient = createQueryClient() await queryClient.prefetchQuery({ @@ -236,13 +224,13 @@ describe('PersistQueryClientProvider', () => { queryClient.clear() - const fetched = writable(false) + const fetched = $state(false) const rendered = render(FreshData, { props: { queryClient, persistOptions: { persister }, - states: statesStore, + states, fetched, }, }) @@ -250,18 +238,17 @@ describe('PersistQueryClientProvider', () => { await waitFor(() => rendered.getByText('data: undefined')) await waitFor(() => rendered.getByText('data: hydrated')) - const states = get(statesStore) - expect(states).toHaveLength(2) + expect(fetched).toBe(false) - expect(get(fetched)).toBe(false) + expect(states.value).toHaveLength(2) - expect(states[0]).toMatchObject({ + expect(states.value[0]).toMatchObject({ status: 'pending', fetchStatus: 'idle', data: undefined, }) - expect(states[1]).toMatchObject({ + expect(states.value[1]).toMatchObject({ status: 'success', fetchStatus: 'idle', data: 'hydrated', @@ -311,17 +298,17 @@ describe('PersistQueryClientProvider', () => { queryClient.clear() - const statesStore: Writable> = writable([]) + let states: Array = $state([]) const rendered = render(AwaitOnSuccess, { props: { queryClient, persistOptions: { persister }, - states: statesStore, + states, onSuccess: async () => { - statesStore.update((s) => [...s, 'onSuccess']) - await sleep(20) - statesStore.update((s) => [...s, 'onSuccess done']) + states.push('onSuccess') + await sleep(5) + states.push('onSuccess done') }, }, }) @@ -329,8 +316,6 @@ describe('PersistQueryClientProvider', () => { await waitFor(() => rendered.getByText('hydrated')) await waitFor(() => rendered.getByText('fetched')) - const states = get(statesStore) - expect(states).toEqual([ 'onSuccess', 'onSuccess done', diff --git a/packages/svelte-query-persist-client/tests/RemoveCache/Provider.svelte b/packages/svelte-query-persist-client/tests/RemoveCache/Provider.svelte index 8738e99bd5..32e3430c4d 100644 --- a/packages/svelte-query-persist-client/tests/RemoveCache/Provider.svelte +++ b/packages/svelte-query-persist-client/tests/RemoveCache/Provider.svelte @@ -4,8 +4,12 @@ import type { OmitKeyof, QueryClient } from '@tanstack/svelte-query' import type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core' - export let queryClient: QueryClient - export let persistOptions: OmitKeyof + interface Props { + queryClient: QueryClient + persistOptions: OmitKeyof + } + + let { queryClient, persistOptions }: Props = $props() diff --git a/packages/svelte-query-persist-client/tests/RemoveCache/RemoveCache.svelte b/packages/svelte-query-persist-client/tests/RemoveCache/RemoveCache.svelte index efd321ca8b..c07fee7267 100644 --- a/packages/svelte-query-persist-client/tests/RemoveCache/RemoveCache.svelte +++ b/packages/svelte-query-persist-client/tests/RemoveCache/RemoveCache.svelte @@ -1,6 +1,6 @@ -
    {$query.data}
    -
    fetchStatus: {$query.fetchStatus}
    +
    {query.data}
    +
    fetchStatus: {query.fetchStatus}
    diff --git a/packages/svelte-query-persist-client/tests/RestoreCache/Provider.svelte b/packages/svelte-query-persist-client/tests/RestoreCache/Provider.svelte index 531aae8c3f..c300d5010a 100644 --- a/packages/svelte-query-persist-client/tests/RestoreCache/Provider.svelte +++ b/packages/svelte-query-persist-client/tests/RestoreCache/Provider.svelte @@ -3,12 +3,15 @@ import RestoreCache from './RestoreCache.svelte' import type { OmitKeyof, QueryClient } from '@tanstack/svelte-query' import type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core' - import type { Writable } from 'svelte/store' - import type { StatusResult } from '../utils.js' + import type { StatusResult } from '../utils.svelte' - export let queryClient: QueryClient - export let persistOptions: OmitKeyof - export let states: Writable>> + interface Props { + queryClient: QueryClient + persistOptions: OmitKeyof + states: { value: Array> } + } + + let { queryClient, persistOptions, states }: Props = $props() diff --git a/packages/svelte-query-persist-client/tests/RestoreCache/RestoreCache.svelte b/packages/svelte-query-persist-client/tests/RestoreCache/RestoreCache.svelte index 15b3a92df9..e7e04e3900 100644 --- a/packages/svelte-query-persist-client/tests/RestoreCache/RestoreCache.svelte +++ b/packages/svelte-query-persist-client/tests/RestoreCache/RestoreCache.svelte @@ -1,10 +1,10 @@ -
    {$query.data}
    -
    fetchStatus: {$query.fetchStatus}
    +
    {query.data}
    +
    fetchStatus: {query.fetchStatus}
    diff --git a/packages/svelte-query-persist-client/tests/UseQueries/Provider.svelte b/packages/svelte-query-persist-client/tests/UseQueries/Provider.svelte index 56429b7d81..41a743b5f1 100644 --- a/packages/svelte-query-persist-client/tests/UseQueries/Provider.svelte +++ b/packages/svelte-query-persist-client/tests/UseQueries/Provider.svelte @@ -3,12 +3,15 @@ import UseQueries from './UseQueries.svelte' import type { OmitKeyof, QueryClient } from '@tanstack/svelte-query' import type { PersistQueryClientOptions } from '@tanstack/query-persist-client-core' - import type { Writable } from 'svelte/store' - import type { StatusResult } from '../utils.js' + import type { StatusResult } from '../utils.svelte' - export let queryClient: QueryClient - export let persistOptions: OmitKeyof - export let states: Writable>> + interface Props { + queryClient: QueryClient + persistOptions: OmitKeyof + states: { value: Array> } + } + + let { queryClient, persistOptions, states }: Props = $props() diff --git a/packages/svelte-query-persist-client/tests/UseQueries/UseQueries.svelte b/packages/svelte-query-persist-client/tests/UseQueries/UseQueries.svelte index 75ec9dc4e3..50170142ae 100644 --- a/packages/svelte-query-persist-client/tests/UseQueries/UseQueries.svelte +++ b/packages/svelte-query-persist-client/tests/UseQueries/UseQueries.svelte @@ -1,10 +1,10 @@ -
    {$queries[0].data}
    -
    fetchStatus: {$queries[0].fetchStatus}
    +
    {queries[0].data}
    +
    fetchStatus: {queries[0].fetchStatus}
    diff --git a/packages/svelte-query-persist-client/tests/utils.ts b/packages/svelte-query-persist-client/tests/utils.svelte.ts similarity index 72% rename from packages/svelte-query-persist-client/tests/utils.ts rename to packages/svelte-query-persist-client/tests/utils.svelte.ts index b246d49a35..8e59db6139 100644 --- a/packages/svelte-query-persist-client/tests/utils.ts +++ b/packages/svelte-query-persist-client/tests/utils.svelte.ts @@ -17,3 +17,16 @@ export type StatusResult = { fetchStatus: string data: T | undefined } + +export function ref(initial: T) { + let value = $state(initial) + + return { + get value() { + return value + }, + set value(newValue) { + value = newValue + }, + } +} diff --git a/packages/svelte-query/package.json b/packages/svelte-query/package.json index d78a62c2c1..3999255ced 100644 --- a/packages/svelte-query/package.json +++ b/packages/svelte-query/package.json @@ -45,13 +45,13 @@ }, "devDependencies": { "@sveltejs/package": "^2.3.2", - "@sveltejs/vite-plugin-svelte": "^3.1.1", + "@sveltejs/vite-plugin-svelte": "^4.0.0-next.4", "@testing-library/svelte": "^5.2.1", "eslint-plugin-svelte": "^2.43.0", - "svelte": "^4.2.18", + "svelte": "5.0.0-next.192", "svelte-check": "^3.8.4" }, "peerDependencies": { - "svelte": "^3.54.0 || ^4.0.0 || ^5.0.0-next.0" + "svelte": "^5.0.0-next.105" } } diff --git a/packages/svelte-query/src/HydrationBoundary.svelte b/packages/svelte-query/src/HydrationBoundary.svelte index 330984311f..2550fa656d 100644 --- a/packages/svelte-query/src/HydrationBoundary.svelte +++ b/packages/svelte-query/src/HydrationBoundary.svelte @@ -1,16 +1,27 @@ - +{@render children()} diff --git a/packages/svelte-query/src/QueryClientProvider.svelte b/packages/svelte-query/src/QueryClientProvider.svelte index 9f43e49093..c45aa5d809 100644 --- a/packages/svelte-query/src/QueryClientProvider.svelte +++ b/packages/svelte-query/src/QueryClientProvider.svelte @@ -1,9 +1,11 @@ - +{@render children()} diff --git a/packages/svelte-query/src/context.ts b/packages/svelte-query/src/context.ts index 962451b232..0676181f57 100644 --- a/packages/svelte-query/src/context.ts +++ b/packages/svelte-query/src/context.ts @@ -1,7 +1,5 @@ import { getContext, setContext } from 'svelte' -import { readable } from 'svelte/store' import type { QueryClient } from '@tanstack/query-core' -import type { Readable } from 'svelte/store' const _contextKey = '$$_queryClient' @@ -25,18 +23,18 @@ export const setQueryClientContext = (client: QueryClient): void => { const _isRestoringContextKey = '$$_isRestoring' /** Retrieves a `isRestoring` from Svelte's context */ -export const getIsRestoringContext = (): Readable => { +export const getIsRestoringContext = (): (() => boolean) => { try { - const isRestoring = getContext | undefined>( + const isRestoring = getContext<(() => boolean) | undefined>( _isRestoringContextKey, ) - return isRestoring ? isRestoring : readable(false) + return isRestoring ?? (() => false) } catch (error) { - return readable(false) + return () => false } } /** Sets a `isRestoring` on Svelte's context */ -export const setIsRestoringContext = (isRestoring: Readable): void => { +export const setIsRestoringContext = (isRestoring: () => boolean): void => { setContext(_isRestoringContextKey, isRestoring) } diff --git a/packages/svelte-query/src/createBaseQuery.svelte.ts b/packages/svelte-query/src/createBaseQuery.svelte.ts new file mode 100644 index 0000000000..f5427bd664 --- /dev/null +++ b/packages/svelte-query/src/createBaseQuery.svelte.ts @@ -0,0 +1,117 @@ +import { notifyManager } from '@tanstack/query-core' +import { untrack } from 'svelte' +import { useIsRestoring } from './useIsRestoring' +import { useQueryClient } from './useQueryClient' +import type { CreateBaseQueryOptions, CreateBaseQueryResult } from './types' +import type { + QueryClient, + QueryKey, + QueryObserver, + QueryObserverResult, +} from '@tanstack/query-core' + +export function createBaseQuery< + TQueryFnData, + TError, + TData, + TQueryData, + TQueryKey extends QueryKey, +>( + options: CreateBaseQueryOptions< + TQueryFnData, + TError, + TData, + TQueryData, + TQueryKey + >, + Observer: typeof QueryObserver, + queryClient?: QueryClient, +): CreateBaseQueryResult { + /** Load query client */ + const client = useQueryClient(queryClient) + const isRestoring = useIsRestoring() + const optionsStore = typeof options !== 'function' ? () => options : options + + /** Creates a store that has the default options applied */ + function updateOptions() { + const key = optionsStore().queryKey + const keyFn = typeof key === 'function' ? key : () => key // allow query-key and enable to be a function + const queryKey: TQueryKey = $state.snapshot(keyFn()) as any // remove proxy prevent reactive query in devTools + let tempEnable = optionsStore().enabled + const defaultedOptions = client.defaultQueryOptions({ + ...optionsStore(), + queryKey: queryKey, + enabled: typeof tempEnable == 'function' ? tempEnable() : tempEnable, + }) + defaultedOptions._optimisticResults = 'optimistic' + if (isRestoring()) { + defaultedOptions._optimisticResults = 'isRestoring' + } + + defaultedOptions.structuralSharing = false + + return defaultedOptions + } + + const defaultedOptionsStore = updateOptions + /** Creates the observer */ + const observer = new Observer< + TQueryFnData, + TError, + TData, + TQueryData, + TQueryKey + >(client, defaultedOptionsStore()) + + const result = $state>( + observer.getOptimisticResult(defaultedOptionsStore()), + ) + + function upResult(r: QueryObserverResult) { + Object.assign(result, r) + } + + $effect(() => { + let un = () => undefined + if (!isRestoring()) { + { + // @ts-expect-error + un = observer.subscribe((v) => { + notifyManager.batchCalls(() => { + const temp = observer.getOptimisticResult(defaultedOptionsStore()) + upResult(temp) + })() + }) + } + } + + observer.updateResult() + return () => { + un() + } + }) + + /** Subscribe to changes in result and defaultedOptionsStore */ + $effect.pre(() => { + observer.setOptions(defaultedOptionsStore(), { listeners: false }) + upResult(observer.getOptimisticResult(defaultedOptionsStore())) + // result = observer.getOptimisticResult(defaultedOptionsStore()) //prevent lag , somehow observer.subscribe does not return + }) + + const final_ = $state({ value: result }) + + // update result + $effect(() => { + // svelte does not need this with it is proxy state and fine-grained reactivity? + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (result !== null) + untrack(() => { + const v = !defaultedOptionsStore().notifyOnChangeProps + ? observer.trackResult(result) + : result + + final_.value = Object.assign(final_.value, v) + }) + }) + return final_.value +} diff --git a/packages/svelte-query/src/createBaseQuery.ts b/packages/svelte-query/src/createBaseQuery.ts deleted file mode 100644 index 3b33485905..0000000000 --- a/packages/svelte-query/src/createBaseQuery.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { derived, get, readable } from 'svelte/store' -import { notifyManager } from '@tanstack/query-core' -import { useIsRestoring } from './useIsRestoring.js' -import { useQueryClient } from './useQueryClient.js' -import { isSvelteStore } from './utils.js' -import type { - QueryClient, - QueryKey, - QueryObserver, - QueryObserverResult, -} from '@tanstack/query-core' -import type { - CreateBaseQueryOptions, - CreateBaseQueryResult, - StoreOrVal, -} from './types.js' - -export function createBaseQuery< - TQueryFnData, - TError, - TData, - TQueryData, - TQueryKey extends QueryKey, ->( - options: StoreOrVal< - CreateBaseQueryOptions - >, - Observer: typeof QueryObserver, - queryClient?: QueryClient, -): CreateBaseQueryResult { - /** Load query client */ - const client = useQueryClient(queryClient) - const isRestoring = useIsRestoring() - /** Converts options to a svelte store if not already a store object */ - const optionsStore = isSvelteStore(options) ? options : readable(options) - - /** Creates a store that has the default options applied */ - const defaultedOptionsStore = derived( - [optionsStore, isRestoring], - ([$optionsStore, $isRestoring]) => { - const defaultedOptions = client.defaultQueryOptions($optionsStore) - defaultedOptions._optimisticResults = $isRestoring - ? 'isRestoring' - : 'optimistic' - return defaultedOptions - }, - ) - - /** Creates the observer */ - const observer = new Observer< - TQueryFnData, - TError, - TData, - TQueryData, - TQueryKey - >(client, get(defaultedOptionsStore)) - - defaultedOptionsStore.subscribe(($defaultedOptions) => { - // Do not notify on updates because of changes in the options because - // these changes should already be reflected in the optimistic result. - observer.setOptions($defaultedOptions, { listeners: false }) - }) - - const result = derived< - typeof isRestoring, - QueryObserverResult - >(isRestoring, ($isRestoring, set) => { - const unsubscribe = $isRestoring - ? () => undefined - : observer.subscribe(notifyManager.batchCalls(set)) - observer.updateResult() - return unsubscribe - }) - - /** Subscribe to changes in result and defaultedOptionsStore */ - const { subscribe } = derived( - [result, defaultedOptionsStore], - ([$result, $defaultedOptionsStore]) => { - $result = observer.getOptimisticResult($defaultedOptionsStore) - return !$defaultedOptionsStore.notifyOnChangeProps - ? observer.trackResult($result) - : $result - }, - ) - - return { subscribe } -} diff --git a/packages/svelte-query/src/createInfiniteQuery.ts b/packages/svelte-query/src/createInfiniteQuery.ts index 7137800298..7cd72b7aec 100644 --- a/packages/svelte-query/src/createInfiniteQuery.ts +++ b/packages/svelte-query/src/createInfiniteQuery.ts @@ -1,5 +1,5 @@ import { InfiniteQueryObserver } from '@tanstack/query-core' -import { createBaseQuery } from './createBaseQuery.js' +import { createBaseQuery } from './createBaseQuery.svelte' import type { DefaultError, InfiniteData, @@ -10,8 +10,7 @@ import type { import type { CreateInfiniteQueryOptions, CreateInfiniteQueryResult, - StoreOrVal, -} from './types.js' +} from './types' export function createInfiniteQuery< TQueryFnData, @@ -20,15 +19,13 @@ export function createInfiniteQuery< TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, >( - options: StoreOrVal< - CreateInfiniteQueryOptions< - TQueryFnData, - TError, - TData, - TQueryFnData, - TQueryKey, - TPageParam - > + options: CreateInfiniteQueryOptions< + TQueryFnData, + TError, + TData, + TQueryFnData, + TQueryKey, + TPageParam >, queryClient?: QueryClient, ): CreateInfiniteQueryResult { diff --git a/packages/svelte-query/src/createMutation.svelte.ts b/packages/svelte-query/src/createMutation.svelte.ts new file mode 100644 index 0000000000..b3b221ed1a --- /dev/null +++ b/packages/svelte-query/src/createMutation.svelte.ts @@ -0,0 +1,64 @@ +import { onDestroy } from 'svelte' + +import { MutationObserver, notifyManager } from '@tanstack/query-core' +import { useQueryClient } from './useQueryClient' +import type { + CreateMutateFunction, + CreateMutationOptions, + CreateMutationResult, +} from './types' + +import type { DefaultError, QueryClient } from '@tanstack/query-core' + +export function createMutation< + TData = unknown, + TError = DefaultError, + TVariables = void, + TContext = unknown, +>( + options: CreateMutationOptions, + queryClient?: QueryClient, +): CreateMutationResult { + const client = useQueryClient(queryClient) + + const observer = $derived( + new MutationObserver(client, options), + ) + const mutate = $state< + CreateMutateFunction + >((variables, mutateOptions) => { + observer.mutate(variables, mutateOptions).catch(noop) + }) + + $effect.pre(() => { + observer.setOptions(options) + }) + + const result = $state(observer.getCurrentResult()) + + const un = observer.subscribe((val) => { + notifyManager.batchCalls(() => { + Object.assign(result, val) + + // result = val + })() + }) + onDestroy(() => { + un() + }) + // @ts-expect-error + return new Proxy(result, { + get: (_, prop) => { + const r = { + ...result, + mutate, + mutateAsync: result.mutate, + } + if (prop == 'value') return r + // @ts-expect-error + return r[prop] + }, + }) +} + +function noop() {} diff --git a/packages/svelte-query/src/createMutation.ts b/packages/svelte-query/src/createMutation.ts deleted file mode 100644 index 96198c3c1f..0000000000 --- a/packages/svelte-query/src/createMutation.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { derived, get, readable } from 'svelte/store' -import { MutationObserver, notifyManager } from '@tanstack/query-core' -import { useQueryClient } from './useQueryClient.js' -import { isSvelteStore, noop } from './utils.js' -import type { - CreateMutateFunction, - CreateMutationOptions, - CreateMutationResult, - StoreOrVal, -} from './types.js' -import type { DefaultError, QueryClient } from '@tanstack/query-core' - -export function createMutation< - TData = unknown, - TError = DefaultError, - TVariables = void, - TContext = unknown, ->( - options: StoreOrVal< - CreateMutationOptions - >, - queryClient?: QueryClient, -): CreateMutationResult { - const client = useQueryClient(queryClient) - - const optionsStore = isSvelteStore(options) ? options : readable(options) - - const observer = new MutationObserver( - client, - get(optionsStore), - ) - let mutate: CreateMutateFunction - - optionsStore.subscribe(($options) => { - mutate = (variables, mutateOptions) => { - observer.mutate(variables, mutateOptions).catch(noop) - } - observer.setOptions($options) - }) - - const result = readable(observer.getCurrentResult(), (set) => { - return observer.subscribe(notifyManager.batchCalls((val) => set(val))) - }) - - const { subscribe } = derived(result, ($result) => ({ - ...$result, - mutate, - mutateAsync: $result.mutate, - })) - - return { subscribe } -} diff --git a/packages/svelte-query/src/createQueries.ts b/packages/svelte-query/src/createQueries.svelte.ts similarity index 83% rename from packages/svelte-query/src/createQueries.ts rename to packages/svelte-query/src/createQueries.svelte.ts index f648ab62e7..f46d9dd258 100644 --- a/packages/svelte-query/src/createQueries.ts +++ b/packages/svelte-query/src/createQueries.svelte.ts @@ -1,10 +1,8 @@ +import { untrack } from 'svelte' import { QueriesObserver, notifyManager } from '@tanstack/query-core' -import { derived, get, readable } from 'svelte/store' -import { useIsRestoring } from './useIsRestoring.js' -import { useQueryClient } from './useQueryClient.js' -import { isSvelteStore } from './utils.js' -import type { Readable } from 'svelte/store' -import type { StoreOrVal } from './types.js' +import { useIsRestoring } from './useIsRestoring' +import { useQueryClient } from './useQueryClient' +import type { FnOrVal } from '.' import type { DefaultError, DefinedQueryObserverResult, @@ -121,7 +119,7 @@ type GetCreateQueryResult = unknown extends TError ? DefaultError : TError > : // Fallback - QueryObserverResult + never /** * QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param @@ -210,68 +208,71 @@ export function createQueries< queries, ...options }: { - queries: StoreOrVal<[...QueriesOptions]> + queries: FnOrVal<[...QueriesOptions]> combine?: (result: QueriesResults) => TCombinedResult }, queryClient?: QueryClient, -): Readable { +): TCombinedResult { const client = useQueryClient(queryClient) const isRestoring = useIsRestoring() - const queriesStore = isSvelteStore(queries) ? queries : readable(queries) - - const defaultedQueriesStore = derived( - [queriesStore, isRestoring], - ([$queries, $isRestoring]) => { - return $queries.map((opts) => { - const defaultedOptions = client.defaultQueryOptions( - opts as QueryObserverOptions, - ) - // Make sure the results are already in fetching state before subscribing or updating options - defaultedOptions._optimisticResults = $isRestoring - ? 'isRestoring' - : 'optimistic' - return defaultedOptions - }) - }, + const queriesStore = $derived( + typeof queries != 'function' ? () => queries : queries, ) + + const defaultedQueriesStore = $derived(() => { + return queriesStore().map((opts) => { + const defaultedOptions = client.defaultQueryOptions(opts) + // Make sure the results are already in fetching state before subscribing or updating options + defaultedOptions._optimisticResults = isRestoring() + ? 'isRestoring' + : 'optimistic' + return defaultedOptions as QueryObserverOptions + }) + }) const observer = new QueriesObserver( client, - get(defaultedQueriesStore), + defaultedQueriesStore(), options as QueriesObserverOptions, ) - - defaultedQueriesStore.subscribe(($defaultedQueries) => { + const [_, getCombinedResult, trackResult] = $derived( + observer.getOptimisticResult( + defaultedQueriesStore(), + (options as QueriesObserverOptions).combine, + ), + ) + $effect(() => { // Do not notify on updates because of changes in the options because // these changes should already be reflected in the optimistic result. observer.setQueries( - $defaultedQueries, + defaultedQueriesStore(), options as QueriesObserverOptions, { listeners: false }, ) }) - const result = derived([isRestoring], ([$isRestoring], set) => { - const unsubscribe = $isRestoring - ? () => undefined - : observer.subscribe(notifyManager.batchCalls(set)) + let result = $state(getCombinedResult(trackResult())) - return () => unsubscribe() - }) + $effect(() => { + if (isRestoring()) { + return () => null + } + untrack(() => { + // @ts-expect-error + Object.assign(result, getCombinedResult(trackResult())) + }) - const { subscribe } = derived( - [result, defaultedQueriesStore], - // @ts-expect-error svelte-check thinks this is unused - ([$result, $defaultedQueriesStore]) => { - const [rawResult, combineResult, trackResult] = - observer.getOptimisticResult( - $defaultedQueriesStore, + return observer.subscribe((_result) => { + notifyManager.batchCalls(() => { + const res = observer.getOptimisticResult( + defaultedQueriesStore(), (options as QueriesObserverOptions).combine, ) - $result = rawResult - return combineResult(trackResult()) - }, - ) + // @ts-expect-error + Object.assign(result, res[1](res[2]())) + })() + }) + }) - return { subscribe } + return result } diff --git a/packages/svelte-query/src/createQuery.ts b/packages/svelte-query/src/createQuery.ts index 51a43c274c..03444c9dd5 100644 --- a/packages/svelte-query/src/createQuery.ts +++ b/packages/svelte-query/src/createQuery.ts @@ -1,12 +1,11 @@ import { QueryObserver } from '@tanstack/query-core' -import { createBaseQuery } from './createBaseQuery.js' +import { createBaseQuery } from './createBaseQuery.svelte' import type { DefaultError, QueryClient, QueryKey } from '@tanstack/query-core' import type { CreateQueryOptions, CreateQueryResult, DefinedCreateQueryResult, - StoreOrVal, -} from './types.js' +} from './types' import type { DefinedInitialDataOptions, UndefinedInitialDataOptions, @@ -18,9 +17,7 @@ export function createQuery< TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, >( - options: StoreOrVal< - DefinedInitialDataOptions - >, + options: DefinedInitialDataOptions, queryClient?: QueryClient, ): DefinedCreateQueryResult @@ -30,9 +27,7 @@ export function createQuery< TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, >( - options: StoreOrVal< - UndefinedInitialDataOptions - >, + options: UndefinedInitialDataOptions, queryClient?: QueryClient, ): CreateQueryResult @@ -42,14 +37,12 @@ export function createQuery< TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, >( - options: StoreOrVal< - CreateQueryOptions - >, + options: CreateQueryOptions, queryClient?: QueryClient, ): CreateQueryResult export function createQuery( - options: StoreOrVal, + options: CreateQueryOptions, queryClient?: QueryClient, ) { return createBaseQuery(options, QueryObserver, queryClient) diff --git a/packages/svelte-query/src/index.ts b/packages/svelte-query/src/index.ts index 735cd89f59..ca399cbd47 100644 --- a/packages/svelte-query/src/index.ts +++ b/packages/svelte-query/src/index.ts @@ -7,22 +7,22 @@ export * from '@tanstack/query-core' export * from './types.js' export * from './context.js' -export { createQuery } from './createQuery.js' -export type { QueriesResults, QueriesOptions } from './createQueries.js' +export { createQuery } from './createQuery' +export type { QueriesResults, QueriesOptions } from './createQueries.svelte' export type { DefinedInitialDataOptions, UndefinedInitialDataOptions, -} from './queryOptions.js' -export { queryOptions } from './queryOptions.js' -export { createQueries } from './createQueries.js' -export { createInfiniteQuery } from './createInfiniteQuery.js' -export { infiniteQueryOptions } from './infiniteQueryOptions.js' -export { createMutation } from './createMutation.js' -export { useMutationState } from './useMutationState.js' -export { useQueryClient } from './useQueryClient.js' -export { useIsFetching } from './useIsFetching.js' -export { useIsMutating } from './useIsMutating.js' -export { useIsRestoring } from './useIsRestoring.js' -export { useHydrate } from './useHydrate.js' +} from './queryOptions' +export { queryOptions } from './queryOptions' +export { createQueries } from './createQueries.svelte' +export { createInfiniteQuery } from './createInfiniteQuery' +export { infiniteQueryOptions } from './infiniteQueryOptions' +export { createMutation } from './createMutation.svelte' +export { useMutationState } from './useMutationState.svelte' +export { useQueryClient } from './useQueryClient' +export { useIsFetching } from './useIsFetching.svelte' +export { useIsMutating } from './useIsMutating.svelte' +export { useIsRestoring } from './useIsRestoring' +export { useHydrate } from './useHydrate' export { default as HydrationBoundary } from './HydrationBoundary.svelte' export { default as QueryClientProvider } from './QueryClientProvider.svelte' diff --git a/packages/svelte-query/src/types.ts b/packages/svelte-query/src/types.ts index 4fd8bdb271..42d2c751a0 100644 --- a/packages/svelte-query/src/types.ts +++ b/packages/svelte-query/src/types.ts @@ -1,3 +1,4 @@ +import type { Snippet } from 'svelte' import type { DefaultError, DefinedQueryObserverResult, @@ -9,15 +10,13 @@ import type { MutationObserverOptions, MutationObserverResult, MutationState, - OmitKeyof, + QueryClient, QueryKey, QueryObserverOptions, QueryObserverResult, } from '@tanstack/query-core' -import type { Readable } from 'svelte/store' -/** Allows a type to be either the base object or a store of that object */ -export type StoreOrVal = T | Readable +export type FnOrVal = (() => T) | T // can be a fn that returns reactive statement or $state or $derived deep states /** Options for createBaseQuery */ export type CreateBaseQueryOptions< @@ -26,13 +25,18 @@ export type CreateBaseQueryOptions< TData = TQueryFnData, TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, -> = QueryObserverOptions +> = FnOrVal< + Omit< + QueryObserverOptions, + 'queryKey' | 'enabled' + > & { enabled?: FnOrVal; queryKey: FnOrVal } +> /** Result from createBaseQuery */ export type CreateBaseQueryResult< TData = unknown, TError = DefaultError, -> = Readable> +> = QueryObserverResult /** Options for createQuery */ export type CreateQueryOptions< @@ -56,26 +60,31 @@ export type CreateInfiniteQueryOptions< TQueryData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, -> = InfiniteQueryObserverOptions< - TQueryFnData, - TError, - TData, - TQueryData, - TQueryKey, - TPageParam +> = FnOrVal< + Omit< + InfiniteQueryObserverOptions< + TQueryFnData, + TError, + TData, + TQueryData, + TQueryKey, + TPageParam + >, + 'queryKey' | 'enabled' + > & { enabled?: FnOrVal; queryKey: FnOrVal } > /** Result from createInfiniteQuery */ export type CreateInfiniteQueryResult< TData = unknown, TError = DefaultError, -> = Readable> +> = InfiniteQueryObserverResult /** Options for createBaseQuery with initialData */ export type DefinedCreateBaseQueryResult< TData = unknown, TError = DefaultError, -> = Readable> +> = DefinedQueryObserverResult /** Options for createQuery with initialData */ export type DefinedCreateQueryResult< @@ -89,9 +98,9 @@ export type CreateMutationOptions< TError = DefaultError, TVariables = void, TContext = unknown, -> = OmitKeyof< +> = Omit< MutationObserverOptions, - '_defaulted' + '_defaulted' | 'variables' > export type CreateMutateFunction< @@ -128,7 +137,7 @@ export type CreateMutationResult< TError = DefaultError, TVariables = unknown, TContext = unknown, -> = Readable> +> = CreateBaseMutationResult type Override = { [AKey in keyof TTargetA]: AKey extends keyof TTargetB @@ -143,3 +152,8 @@ export type MutationStateOptions = { mutation: Mutation, ) => TResult } + +export type QueryClientProviderProps = { + client: QueryClient + children: Snippet +} diff --git a/packages/svelte-query/src/useIsFetching.svelte.ts b/packages/svelte-query/src/useIsFetching.svelte.ts new file mode 100644 index 0000000000..c15527e43a --- /dev/null +++ b/packages/svelte-query/src/useIsFetching.svelte.ts @@ -0,0 +1,23 @@ +import { onDestroy } from 'svelte' +import { useQueryClient } from './useQueryClient' +import type { QueryClient, QueryFilters } from '@tanstack/query-core' + +export function useIsFetching( + filters?: QueryFilters, + queryClient?: QueryClient, +): () => number { + const client = useQueryClient(queryClient) + const queryCache = client.getQueryCache() + + const init = client.isFetching(filters) + let isFetching = $state(init) + $effect(() => { + const unsubscribe = queryCache.subscribe(() => { + isFetching = client.isFetching(filters) + }) + + onDestroy(unsubscribe) + }) + + return () => isFetching +} diff --git a/packages/svelte-query/src/useIsFetching.ts b/packages/svelte-query/src/useIsFetching.ts deleted file mode 100644 index 729dea9412..0000000000 --- a/packages/svelte-query/src/useIsFetching.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { - type QueryClient, - type QueryFilters, - notifyManager, -} from '@tanstack/query-core' -import { readable } from 'svelte/store' -import { useQueryClient } from './useQueryClient.js' -import type { Readable } from 'svelte/store' - -export function useIsFetching( - filters?: QueryFilters, - queryClient?: QueryClient, -): Readable { - const client = useQueryClient(queryClient) - const cache = client.getQueryCache() - // isFetching is the prev value initialized on mount * - let isFetching = client.isFetching(filters) - - const { subscribe } = readable(isFetching, (set) => { - return cache.subscribe( - notifyManager.batchCalls(() => { - const newIsFetching = client.isFetching(filters) - if (isFetching !== newIsFetching) { - // * and update with each change - isFetching = newIsFetching - set(isFetching) - } - }), - ) - }) - - return { subscribe } -} diff --git a/packages/svelte-query/src/useIsMutating.ts b/packages/svelte-query/src/useIsMutating.svelte.ts similarity index 60% rename from packages/svelte-query/src/useIsMutating.ts rename to packages/svelte-query/src/useIsMutating.svelte.ts index e2495ab596..b7c75bbcf0 100644 --- a/packages/svelte-query/src/useIsMutating.ts +++ b/packages/svelte-query/src/useIsMutating.svelte.ts @@ -1,33 +1,29 @@ -import { - type MutationFilters, - type QueryClient, - notifyManager, -} from '@tanstack/query-core' -import { readable } from 'svelte/store' -import { useQueryClient } from './useQueryClient.js' -import type { Readable } from 'svelte/store' +import { notifyManager } from '@tanstack/query-core' +import { useQueryClient } from './useQueryClient' +import type { MutationFilters, QueryClient } from '@tanstack/query-core' export function useIsMutating( filters?: MutationFilters, queryClient?: QueryClient, -): Readable { +): () => number { const client = useQueryClient(queryClient) const cache = client.getMutationCache() // isMutating is the prev value initialized on mount * let isMutating = client.isMutating(filters) - const { subscribe } = readable(isMutating, (set) => { + const num = $state({ isMutating }) + $effect(() => { return cache.subscribe( notifyManager.batchCalls(() => { const newIisMutating = client.isMutating(filters) if (isMutating !== newIisMutating) { // * and update with each change isMutating = newIisMutating - set(isMutating) + num.isMutating = isMutating } }), ) }) - return { subscribe } + return () => num.isMutating } diff --git a/packages/svelte-query/src/useIsRestoring.ts b/packages/svelte-query/src/useIsRestoring.ts index c22d8af402..22b9cb9a3b 100644 --- a/packages/svelte-query/src/useIsRestoring.ts +++ b/packages/svelte-query/src/useIsRestoring.ts @@ -1,6 +1,5 @@ -import { getIsRestoringContext } from './context.js' -import type { Readable } from 'svelte/store' +import { getIsRestoringContext } from './context' -export function useIsRestoring(): Readable { +export function useIsRestoring(): () => boolean { return getIsRestoringContext() } diff --git a/packages/svelte-query/src/useMutationState.svelte.ts b/packages/svelte-query/src/useMutationState.svelte.ts new file mode 100644 index 0000000000..cfa96f0269 --- /dev/null +++ b/packages/svelte-query/src/useMutationState.svelte.ts @@ -0,0 +1,56 @@ +import { replaceEqualDeep } from '@tanstack/query-core' +import { useQueryClient } from './useQueryClient' +import type { + MutationCache, + MutationState, + QueryClient, +} from '@tanstack/query-core' +import type { MutationStateOptions } from './types' + +function getResult( + mutationCache: MutationCache, + options: MutationStateOptions, +): Array { + return mutationCache + .findAll(options.filters) + .map( + (mutation): TResult => + (options.select ? options.select(mutation) : mutation.state) as TResult, + ) +} + +export function useMutationState( + options: MutationStateOptions = {}, + queryClient?: QueryClient, +): Array { + const mutationCache = useQueryClient(queryClient).getMutationCache() + const result = $state(getResult(mutationCache, options)) + + $effect(() => { + const unsubscribe = mutationCache.subscribe(() => { + const nextResult = replaceEqualDeep( + result, + getResult(mutationCache, options), + ) + if (result !== nextResult) { + Object.assign(result, nextResult) + } + }) + + return unsubscribe + }) + + /* $effect(() => { + mutationCache.subscribe(() => { + const nextResult = replaceEqualDeep( + result.current, + getResult(mutationCache, optionsRef), + ) + if (result.current !== nextResult) { + result = nextResult + //notifyManager.schedule(onStoreChange) + } + }) + }) */ + return result +} diff --git a/packages/svelte-query/src/useMutationState.ts b/packages/svelte-query/src/useMutationState.ts deleted file mode 100644 index 0367eee5db..0000000000 --- a/packages/svelte-query/src/useMutationState.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { readable } from 'svelte/store' -import { notifyManager, replaceEqualDeep } from '@tanstack/query-core' -import { useQueryClient } from './useQueryClient.js' -import type { - MutationCache, - MutationState, - QueryClient, -} from '@tanstack/query-core' -import type { Readable } from 'svelte/store' -import type { MutationStateOptions } from './types.js' - -function getResult( - mutationCache: MutationCache, - options: MutationStateOptions, -): Array { - return mutationCache - .findAll(options.filters) - .map( - (mutation): TResult => - (options.select ? options.select(mutation) : mutation.state) as TResult, - ) -} - -export function useMutationState( - options: MutationStateOptions = {}, - queryClient?: QueryClient, -): Readable> { - const client = useQueryClient(queryClient) - const mutationCache = client.getMutationCache() - - let result = getResult(mutationCache, options) - - const { subscribe } = readable(result, (set) => { - return mutationCache.subscribe( - notifyManager.batchCalls(() => { - const nextResult = replaceEqualDeep( - result, - getResult(mutationCache, options), - ) - if (result !== nextResult) { - result = nextResult - set(result) - } - }), - ) - }) - - return { subscribe } -} diff --git a/packages/svelte-query/src/utils.ts b/packages/svelte-query/src/utils.ts deleted file mode 100644 index 3ecc2ed8b3..0000000000 --- a/packages/svelte-query/src/utils.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { Readable } from 'svelte/store' -import type { StoreOrVal } from './types.js' - -export function isSvelteStore( - obj: StoreOrVal, -): obj is Readable { - return 'subscribe' in obj && typeof obj.subscribe === 'function' -} - -export function noop() {} diff --git a/packages/svelte-query/tests/QueryClientProvider/ChildComponent.svelte b/packages/svelte-query/tests/QueryClientProvider/ChildComponent.svelte index 0c5a062945..003f7f9e2f 100644 --- a/packages/svelte-query/tests/QueryClientProvider/ChildComponent.svelte +++ b/packages/svelte-query/tests/QueryClientProvider/ChildComponent.svelte @@ -1,6 +1,6 @@ -
    Data: {$query.data ?? 'undefined'}
    +
    Data: {query.data ?? 'undefined'}
    diff --git a/packages/svelte-query/tests/QueryClientProvider/ParentComponent.svelte b/packages/svelte-query/tests/QueryClientProvider/ParentComponent.svelte index dc2440ef94..28411fd5ed 100644 --- a/packages/svelte-query/tests/QueryClientProvider/ParentComponent.svelte +++ b/packages/svelte-query/tests/QueryClientProvider/ParentComponent.svelte @@ -4,7 +4,7 @@ import ChildComponent from './ChildComponent.svelte' import type { QueryCache } from '@tanstack/query-core' - export let queryCache: QueryCache + let { queryCache }: { queryCache: QueryCache } = $props() const queryClient = new QueryClient({ queryCache }) diff --git a/packages/svelte-query/tests/createInfiniteQuery/BaseExample.svelte b/packages/svelte-query/tests/createInfiniteQuery/BaseExample.svelte index ce33e17b90..df42f1fe09 100644 --- a/packages/svelte-query/tests/createInfiniteQuery/BaseExample.svelte +++ b/packages/svelte-query/tests/createInfiniteQuery/BaseExample.svelte @@ -1,24 +1,30 @@ -
    Status: {$query.status}
    +
    Status: {query.status}
    diff --git a/packages/svelte-query/tests/createInfiniteQuery/SelectExample.svelte b/packages/svelte-query/tests/createInfiniteQuery/SelectExample.svelte index c96a483842..9fc7a7db16 100644 --- a/packages/svelte-query/tests/createInfiniteQuery/SelectExample.svelte +++ b/packages/svelte-query/tests/createInfiniteQuery/SelectExample.svelte @@ -1,10 +1,10 @@ -
    {$query.data?.pages.join(',')}
    +
    {query.data?.pages.join(',')}
    diff --git a/packages/svelte-query/tests/createInfiniteQuery/createInfiniteQuery.test.ts b/packages/svelte-query/tests/createInfiniteQuery/createInfiniteQuery.test.ts index b05763b279..88a02b75fe 100644 --- a/packages/svelte-query/tests/createInfiniteQuery/createInfiniteQuery.test.ts +++ b/packages/svelte-query/tests/createInfiniteQuery/createInfiniteQuery.test.ts @@ -1,18 +1,17 @@ import { describe, expect, test } from 'vitest' import { render, waitFor } from '@testing-library/svelte' -import { get, writable } from 'svelte/store' +import { ref } from '../utils.svelte' import BaseExample from './BaseExample.svelte' import SelectExample from './SelectExample.svelte' -import type { Writable } from 'svelte/store' import type { QueryObserverResult } from '@tanstack/query-core' describe('createInfiniteQuery', () => { test('Return the correct states for a successful query', async () => { - const statesStore: Writable> = writable([]) + let states = ref>([]) const rendered = render(BaseExample, { props: { - states: statesStore, + states, }, }) @@ -20,11 +19,9 @@ describe('createInfiniteQuery', () => { expect(rendered.queryByText('Status: success')).toBeInTheDocument() }) - const states = get(statesStore) + expect(states.value).toHaveLength(2) - expect(states).toHaveLength(2) - - expect(states[0]).toEqual({ + expect(states.value[0]).toEqual({ data: undefined, dataUpdatedAt: 0, error: null, @@ -59,7 +56,7 @@ describe('createInfiniteQuery', () => { fetchStatus: 'fetching', }) - expect(states[1]).toEqual({ + expect(states.value[1]).toEqual({ data: { pages: [0], pageParams: [0] }, dataUpdatedAt: expect.any(Number), error: null, @@ -96,11 +93,11 @@ describe('createInfiniteQuery', () => { }) test('Select a part of the data', async () => { - const statesStore: Writable> = writable([]) + let states = ref>([]) const rendered = render(SelectExample, { props: { - states: statesStore, + states, }, }) @@ -108,16 +105,14 @@ describe('createInfiniteQuery', () => { expect(rendered.queryByText('count: 1')).toBeInTheDocument() }) - const states = get(statesStore) - - expect(states).toHaveLength(2) + expect(states.value).toHaveLength(2) - expect(states[0]).toMatchObject({ + expect(states.value[0]).toMatchObject({ data: undefined, isSuccess: false, }) - expect(states[1]).toMatchObject({ + expect(states.value[1]).toMatchObject({ data: { pages: ['count: 1'] }, isSuccess: true, }) diff --git a/packages/svelte-query/tests/createMutation/FailureExample.svelte b/packages/svelte-query/tests/createMutation/FailureExample.svelte index 2c8a8a2c1b..7b5491cae8 100644 --- a/packages/svelte-query/tests/createMutation/FailureExample.svelte +++ b/packages/svelte-query/tests/createMutation/FailureExample.svelte @@ -1,13 +1,13 @@ - + -
    Data: {$mutation.data?.count}
    -
    Status: {$mutation.status}
    -
    Failure Count: {$mutation.failureCount}
    -
    Failure Reason: {$mutation.failureReason}
    +
    Data: {mutation.data?.count ?? 'undefined'}
    +
    Status: {mutation.status}
    +
    Failure Count: {mutation.failureCount}
    +
    Failure Reason: {mutation.failureReason ?? 'undefined'}
    diff --git a/packages/svelte-query/tests/createMutation/OnSuccessExample.svelte b/packages/svelte-query/tests/createMutation/OnSuccessExample.svelte index 7f338ede5d..02e7fd11f5 100644 --- a/packages/svelte-query/tests/createMutation/OnSuccessExample.svelte +++ b/packages/svelte-query/tests/createMutation/OnSuccessExample.svelte @@ -22,6 +22,6 @@ }) - +
    Count: {$count}
    diff --git a/packages/svelte-query/tests/createMutation/ResetExample.svelte b/packages/svelte-query/tests/createMutation/ResetExample.svelte index cc8216e84f..0f7b7f8a80 100644 --- a/packages/svelte-query/tests/createMutation/ResetExample.svelte +++ b/packages/svelte-query/tests/createMutation/ResetExample.svelte @@ -14,7 +14,7 @@ }) - - + + -
    Error: {$mutation.error?.message}
    +
    Error: {mutation.error?.message ?? 'undefined'}
    diff --git a/packages/svelte-query/tests/createMutation/createMutation.test.ts b/packages/svelte-query/tests/createMutation/createMutation.test.ts index d120655e31..5d05805c38 100644 --- a/packages/svelte-query/tests/createMutation/createMutation.test.ts +++ b/packages/svelte-query/tests/createMutation/createMutation.test.ts @@ -1,6 +1,6 @@ import { describe, expect, test, vi } from 'vitest' import { fireEvent, render, waitFor } from '@testing-library/svelte' -import { sleep } from '../utils.js' +import { sleep } from '../utils.svelte' import ResetExample from './ResetExample.svelte' import OnSuccessExample from './OnSuccessExample.svelte' import FailureExample from './FailureExample.svelte' @@ -103,6 +103,6 @@ describe('createMutation', () => { await waitFor(() => rendered.getByText('Status: success')) await waitFor(() => rendered.getByText('Data: 2')) await waitFor(() => rendered.getByText('Failure Count: 0')) - await waitFor(() => rendered.getByText('Failure Reason: null')) + await waitFor(() => rendered.getByText('Failure Reason: undefined')) }) }) diff --git a/packages/svelte-query/tests/createQueries/BaseExample.svelte b/packages/svelte-query/tests/createQueries/BaseExample.svelte index b9b5ae7c47..15962b21c4 100644 --- a/packages/svelte-query/tests/createQueries/BaseExample.svelte +++ b/packages/svelte-query/tests/createQueries/BaseExample.svelte @@ -1,17 +1,26 @@ -{#each $queries as query, index} +{#each queries as query, index}
    Status {index + 1}: {query.status}
    Data {index + 1}: {query.data}
    {/each} diff --git a/packages/svelte-query/tests/createQueries/CombineExample.svelte b/packages/svelte-query/tests/createQueries/CombineExample.svelte index c8fa73696c..e2e7af0d2f 100644 --- a/packages/svelte-query/tests/createQueries/CombineExample.svelte +++ b/packages/svelte-query/tests/createQueries/CombineExample.svelte @@ -1,6 +1,6 @@ -
    isPending: {$queries.isPending}
    -
    Data: {$queries.data ?? 'undefined'}
    +
    isPending: {queries.isPending}
    +
    Data: {queries.data ?? 'undefined'}
    diff --git a/packages/svelte-query/tests/createQueries/createQueries.test-d.ts b/packages/svelte-query/tests/createQueries/createQueries.test-d.ts index 36f4db2b20..fd7087dace 100644 --- a/packages/svelte-query/tests/createQueries/createQueries.test-d.ts +++ b/packages/svelte-query/tests/createQueries/createQueries.test-d.ts @@ -1,9 +1,8 @@ import { describe, expectTypeOf, test } from 'vitest' -import { get } from 'svelte/store' import { skipToken } from '@tanstack/query-core' import { createQueries, queryOptions } from '../../src/index.js' -import type { OmitKeyof, QueryObserverResult } from '@tanstack/query-core' -import type { CreateQueryOptions } from '../../src/index.js' +import type { QueryObserverResult } from '@tanstack/query-core' +import type { CreateQueryOptions } from '../../src/index' describe('createQueries', () => { test('TData should be defined when passed through queryOptions', () => { @@ -20,7 +19,7 @@ describe('createQueries', () => { }) const queryResults = createQueries({ queries: [options] }) - const data = get(queryResults)[0].data + const data = queryResults[0].data expectTypeOf(data).toEqualTypeOf<{ wow: boolean }>() }) @@ -28,9 +27,7 @@ describe('createQueries', () => { test('Allow custom hooks using UseQueryOptions', () => { type Data = string - const useCustomQueries = ( - options?: OmitKeyof, 'queryKey' | 'queryFn'>, - ) => { + const useCustomQueries = (options?: CreateQueryOptions) => { return createQueries({ queries: [ { @@ -43,7 +40,7 @@ describe('createQueries', () => { } const query = useCustomQueries() - const data = get(query)[0].data + const data = query[0].data expectTypeOf(data).toEqualTypeOf() }) @@ -58,7 +55,7 @@ describe('createQueries', () => { ], }) - const firstResult = get(queryResults)[0] + const firstResult = queryResults[0] expectTypeOf(firstResult).toEqualTypeOf< QueryObserverResult diff --git a/packages/svelte-query/tests/createQueries/createQueries.test.ts b/packages/svelte-query/tests/createQueries/createQueries.test.ts index c8efa1f08d..5f1ffa21dd 100644 --- a/packages/svelte-query/tests/createQueries/createQueries.test.ts +++ b/packages/svelte-query/tests/createQueries/createQueries.test.ts @@ -1,7 +1,7 @@ import { describe, expect, test } from 'vitest' import { render, waitFor } from '@testing-library/svelte' import { QueryClient } from '@tanstack/query-core' -import { sleep } from '../utils.js' +import { sleep } from '../utils.svelte' import BaseExample from './BaseExample.svelte' import CombineExample from './CombineExample.svelte' diff --git a/packages/svelte-query/tests/createQuery/BaseExample.svelte b/packages/svelte-query/tests/createQuery/BaseExample.svelte index d7a824c26b..6acd5c2599 100644 --- a/packages/svelte-query/tests/createQuery/BaseExample.svelte +++ b/packages/svelte-query/tests/createQuery/BaseExample.svelte @@ -1,18 +1,29 @@ -
    Status: {$query.status}
    -
    Failure Count: {$query.failureCount}
    -
    Data: {$query.data ?? 'undefined'}
    +
    Status: {query.status}
    +
    Failure Count: {query.failureCount}
    +
    Data: {query.data ?? 'undefined'}
    diff --git a/packages/svelte-query/tests/createQuery/DisabledExample.svelte b/packages/svelte-query/tests/createQuery/DisabledExample.svelte index 3d50a2d73c..1a5f804995 100644 --- a/packages/svelte-query/tests/createQuery/DisabledExample.svelte +++ b/packages/svelte-query/tests/createQuery/DisabledExample.svelte @@ -1,31 +1,39 @@ - + -
    Data: {$query.data ?? 'undefined'}
    -
    Count: {$count}
    +
    Data: {query.data ?? 'undefined'}
    +
    Count: {count}
    diff --git a/packages/svelte-query/tests/createQuery/PlaceholderData.svelte b/packages/svelte-query/tests/createQuery/PlaceholderData.svelte index 5b9737e731..e119195841 100644 --- a/packages/svelte-query/tests/createQuery/PlaceholderData.svelte +++ b/packages/svelte-query/tests/createQuery/PlaceholderData.svelte @@ -1,30 +1,36 @@ - + -
    Status: {$query.status}
    -
    Data: {$query.data ?? 'undefined'}
    +
    Status: {query.status}
    +
    Data: {query.data ?? 'undefined'}
    diff --git a/packages/svelte-query/tests/createQuery/RefetchExample.svelte b/packages/svelte-query/tests/createQuery/RefetchExample.svelte index 8a4adb4b5f..989c29a606 100644 --- a/packages/svelte-query/tests/createQuery/RefetchExample.svelte +++ b/packages/svelte-query/tests/createQuery/RefetchExample.svelte @@ -1,32 +1,39 @@ - - + -
    Data: {$query.data ?? 'undefined'}
    +
    Data: {query.data ?? 'undefined'}
    diff --git a/packages/svelte-query/tests/createQuery/createQuery.test.ts b/packages/svelte-query/tests/createQuery/createQuery.svelte.test.ts similarity index 77% rename from packages/svelte-query/tests/createQuery/createQuery.test.ts rename to packages/svelte-query/tests/createQuery/createQuery.svelte.test.ts index 11b09fd69c..b1e38f2b2a 100644 --- a/packages/svelte-query/tests/createQuery/createQuery.test.ts +++ b/packages/svelte-query/tests/createQuery/createQuery.svelte.test.ts @@ -1,18 +1,16 @@ import { describe, expect, test } from 'vitest' import { fireEvent, render, waitFor } from '@testing-library/svelte' -import { derived, get, writable } from 'svelte/store' import { QueryClient } from '@tanstack/query-core' -import { sleep } from '../utils.js' +import { ref, sleep } from '../utils.svelte' import BaseExample from './BaseExample.svelte' import DisabledExample from './DisabledExample.svelte' import PlaceholderData from './PlaceholderData.svelte' import RefetchExample from './RefetchExample.svelte' -import type { Writable } from 'svelte/store' import type { QueryObserverResult } from '@tanstack/query-core' describe('createQuery', () => { test('Return the correct states for a successful query', async () => { - const statesStore: Writable> = writable([]) + let states = ref>([]) const options = { queryKey: ['test'], @@ -26,7 +24,7 @@ describe('createQuery', () => { props: { options, queryClient: new QueryClient(), - states: statesStore, + states, }, }) @@ -34,11 +32,9 @@ describe('createQuery', () => { expect(rendered.queryByText('Status: success')).toBeInTheDocument() }) - const states = get(statesStore) + expect(states.value).toHaveLength(2) - expect(states).toHaveLength(2) - - expect(states[0]).toMatchObject({ + expect(states.value[0]).toMatchObject({ data: undefined, dataUpdatedAt: 0, error: null, @@ -65,7 +61,7 @@ describe('createQuery', () => { fetchStatus: 'fetching', }) - expect(states[1]).toMatchObject({ + expect(states.value[1]).toMatchObject({ data: 'Success', dataUpdatedAt: expect.any(Number), error: null, @@ -94,7 +90,7 @@ describe('createQuery', () => { }) test('Return the correct states for an unsuccessful query', async () => { - const statesStore: Writable> = writable([]) + let states = ref>([]) const options = { queryKey: ['test'], @@ -107,17 +103,15 @@ describe('createQuery', () => { props: { options, queryClient: new QueryClient(), - states: statesStore, + states, }, }) await waitFor(() => rendered.getByText('Status: error')) - const states = get(statesStore) - - expect(states).toHaveLength(3) + expect(states.value).toHaveLength(3) - expect(states[0]).toMatchObject({ + expect(states.value[0]).toMatchObject({ data: undefined, dataUpdatedAt: 0, error: null, @@ -144,7 +138,7 @@ describe('createQuery', () => { fetchStatus: 'fetching', }) - expect(states[1]).toMatchObject({ + expect(states.value[1]).toMatchObject({ data: undefined, dataUpdatedAt: 0, error: null, @@ -171,7 +165,7 @@ describe('createQuery', () => { fetchStatus: 'fetching', }) - expect(states[2]).toMatchObject({ + expect(states.value[2]).toMatchObject({ data: undefined, dataUpdatedAt: 0, error: new Error('Rejected'), @@ -200,9 +194,9 @@ describe('createQuery', () => { }) test('Accept a writable store for options', async () => { - const statesStore: Writable> = writable([]) + let states = ref>([]) - const optionsStore = writable({ + const optionsStore = $state({ queryKey: ['test'], queryFn: async () => { await sleep(5) @@ -214,7 +208,7 @@ describe('createQuery', () => { props: { options: optionsStore, queryClient: new QueryClient(), - states: statesStore, + states, }, }) @@ -224,12 +218,12 @@ describe('createQuery', () => { }) test('Accept a derived store for options', async () => { - const statesStore: Writable> = writable([]) + let states = ref>([]) - const writableStore = writable('test') + const writableStore = $state('test') - const derivedStore = derived(writableStore, ($store) => ({ - queryKey: [$store], + const derivedStore = $derived(() => ({ + queryKey: [writableStore], queryFn: async () => { await sleep(5) return 'Success' @@ -240,7 +234,7 @@ describe('createQuery', () => { props: { options: derivedStore, queryClient: new QueryClient(), - states: statesStore, + states, }, }) @@ -250,17 +244,17 @@ describe('createQuery', () => { }) test('Ensure reactivity when queryClient defaults are set', async () => { - const statesStore: Writable> = writable([]) + let states = ref>([]) - const writableStore = writable(1) + let writableStore = $state(1) - const derivedStore = derived(writableStore, ($store) => ({ - queryKey: [$store], + const derivedStore = $derived({ + queryKey: () => [writableStore], queryFn: async () => { await sleep(5) - return $store + return writableStore }, - })) + }) const rendered = render(BaseExample, { props: { @@ -268,7 +262,7 @@ describe('createQuery', () => { queryClient: new QueryClient({ defaultOptions: { queries: { staleTime: 60 * 1000 } }, }), - states: statesStore, + states, }, }) @@ -277,14 +271,14 @@ describe('createQuery', () => { expect(rendered.queryByText('Data: 2')).not.toBeInTheDocument() }) - writableStore.set(2) + writableStore = 2 await waitFor(() => { expect(rendered.queryByText('Data: 1')).not.toBeInTheDocument() expect(rendered.queryByText('Data: 2')).toBeInTheDocument() }) - writableStore.set(1) + writableStore = 1 await waitFor(() => { expect(rendered.queryByText('Data: 1')).toBeInTheDocument() @@ -293,12 +287,12 @@ describe('createQuery', () => { }) test('Keep previous data when placeholderData is set', async () => { - const statesStore: Writable> = writable([]) + let states = ref>([]) const rendered = render(PlaceholderData, { props: { queryClient: new QueryClient(), - states: statesStore, + states, }, }) @@ -308,12 +302,10 @@ describe('createQuery', () => { await waitFor(() => rendered.getByText('Data: 1')) - const states = get(statesStore) - - expect(states).toHaveLength(4) + expect(states.value).toHaveLength(4) // Initial - expect(states[0]).toMatchObject({ + expect(states.value[0]).toMatchObject({ data: undefined, isFetching: true, isSuccess: false, @@ -321,7 +313,7 @@ describe('createQuery', () => { }) // Fetched - expect(states[1]).toMatchObject({ + expect(states.value[1]).toMatchObject({ data: 0, isFetching: false, isSuccess: true, @@ -329,7 +321,7 @@ describe('createQuery', () => { }) // Set state - expect(states[2]).toMatchObject({ + expect(states.value[2]).toMatchObject({ data: 0, isFetching: true, isSuccess: true, @@ -337,7 +329,7 @@ describe('createQuery', () => { }) // New data - expect(states[3]).toMatchObject({ + expect(states.value[3]).toMatchObject({ data: 1, isFetching: false, isSuccess: true, @@ -346,11 +338,11 @@ describe('createQuery', () => { }) test('Should not fetch when switching to a disabled query', async () => { - const statesStore: Writable> = writable([]) + let states = ref>([]) const rendered = render(DisabledExample, { props: { - states: statesStore, + states, }, }) @@ -359,30 +351,28 @@ describe('createQuery', () => { fireEvent.click(rendered.getByRole('button', { name: /Increment/i })) await waitFor(() => { - rendered.getByText('Count: 1') - rendered.getByText('Data: undefined') + rendered.getByText('Count: 0') + rendered.getByText('Data: 0') }) - const states = get(statesStore) - - expect(states).toHaveLength(3) + expect(states.value).toHaveLength(3) // Fetch query - expect(states[0]).toMatchObject({ + expect(states.value[0]).toMatchObject({ data: undefined, isFetching: true, isSuccess: false, }) // Fetched query - expect(states[1]).toMatchObject({ + expect(states.value[1]).toMatchObject({ data: 0, isFetching: false, isSuccess: true, }) // Switch to disabled query - expect(states[2]).toMatchObject({ + expect(states.value[2]).toMatchObject({ data: undefined, isFetching: false, isSuccess: false, @@ -390,11 +380,11 @@ describe('createQuery', () => { }) test('Create a new query when refetching a removed query', async () => { - const statesStore: Writable> = writable([]) + let states = ref>([]) const rendered = render(RefetchExample, { props: { - states: statesStore, + states, }, }) @@ -406,16 +396,14 @@ describe('createQuery', () => { fireEvent.click(rendered.getByRole('button', { name: /Refetch/i })) await waitFor(() => rendered.getByText('Data: 2')) - const states = get(statesStore) - - expect(states.length).toBe(4) + expect(states.value).toHaveLength(4) // Initial - expect(states[0]).toMatchObject({ data: undefined, dataUpdatedAt: 0 }) + expect(states.value[0]).toMatchObject({ data: undefined, dataUpdatedAt: 0 }) // Fetched - expect(states[1]).toMatchObject({ data: 1 }) + expect(states.value[1]).toMatchObject({ data: 1 }) // Switch - expect(states[2]).toMatchObject({ data: undefined, dataUpdatedAt: 0 }) + expect(states.value[2]).toMatchObject({ data: undefined, dataUpdatedAt: 0 }) // Fetched - expect(states[3]).toMatchObject({ data: 2 }) + expect(states.value[3]).toMatchObject({ data: 2 }) }) }) diff --git a/packages/svelte-query/tests/createQuery/createQuery.test-d.ts b/packages/svelte-query/tests/createQuery/createQuery.test-d.ts index 6560008022..578bf99c9b 100644 --- a/packages/svelte-query/tests/createQuery/createQuery.test-d.ts +++ b/packages/svelte-query/tests/createQuery/createQuery.test-d.ts @@ -1,8 +1,6 @@ import { describe, expectTypeOf, test } from 'vitest' -import { get } from 'svelte/store' -import { createQuery, queryOptions } from '../../src/index.js' -import type { OmitKeyof } from '@tanstack/query-core' -import type { CreateQueryOptions } from '../../src/index.js' +import { createQuery, queryOptions } from '../../src/index' +import type { CreateQueryOptions } from '../../src/index' describe('createQuery', () => { test('TData should always be defined when initialData is provided as an object', () => { @@ -12,7 +10,7 @@ describe('createQuery', () => { initialData: { wow: true }, }) - expectTypeOf(get(query).data).toEqualTypeOf<{ wow: boolean }>() + expectTypeOf(query.data).toEqualTypeOf<{ wow: boolean }>() }) test('TData should be defined when passed through queryOptions', () => { @@ -29,7 +27,7 @@ describe('createQuery', () => { }) const query = createQuery(options) - expectTypeOf(get(query).data).toEqualTypeOf<{ wow: boolean }>() + expectTypeOf(query.data).toEqualTypeOf<{ wow: boolean }>() }) test('TData should have undefined in the union when initialData is NOT provided', () => { @@ -42,15 +40,13 @@ describe('createQuery', () => { }, }) - expectTypeOf(get(query).data).toEqualTypeOf<{ wow: boolean } | undefined>() + expectTypeOf(query.data).toEqualTypeOf<{ wow: boolean } | undefined>() }) test('Allow custom hooks using CreateQueryOptions', () => { type Data = string - const useCustomQuery = ( - options?: OmitKeyof, 'queryKey' | 'queryFn'>, - ) => { + const useCustomQuery = (options?: CreateQueryOptions) => { return createQuery({ ...options, queryKey: ['todos-key'], @@ -60,6 +56,6 @@ describe('createQuery', () => { const query = useCustomQuery() - expectTypeOf(get(query).data).toEqualTypeOf() + expectTypeOf(query.data).toEqualTypeOf() }) }) diff --git a/packages/svelte-query/tests/infiniteQueryOptions/infiniteQueryOptions.test-d.ts b/packages/svelte-query/tests/infiniteQueryOptions/infiniteQueryOptions.test-d.ts index 45f98dd085..1621d1539a 100644 --- a/packages/svelte-query/tests/infiniteQueryOptions/infiniteQueryOptions.test-d.ts +++ b/packages/svelte-query/tests/infiniteQueryOptions/infiniteQueryOptions.test-d.ts @@ -1,5 +1,4 @@ import { describe, expectTypeOf, test } from 'vitest' -import { get } from 'svelte/store' import { QueryClient } from '@tanstack/query-core' import { createInfiniteQuery, infiniteQueryOptions } from '../../src/index.js' import type { InfiniteData } from '@tanstack/query-core' @@ -40,7 +39,7 @@ describe('queryOptions', () => { const query = createInfiniteQuery(options) // known issue: type of pageParams is unknown when returned from useInfiniteQuery - expectTypeOf(get(query).data).toEqualTypeOf< + expectTypeOf(query.data).toEqualTypeOf< InfiniteData | undefined >() }) diff --git a/packages/svelte-query/tests/queryOptions/queryOptions.test-d.ts b/packages/svelte-query/tests/queryOptions/queryOptions.test-d.ts index cfe46e2af7..02a46c7d10 100644 --- a/packages/svelte-query/tests/queryOptions/queryOptions.test-d.ts +++ b/packages/svelte-query/tests/queryOptions/queryOptions.test-d.ts @@ -1,5 +1,4 @@ import { describe, expectTypeOf, test } from 'vitest' -import { get } from 'svelte/store' import { QueriesObserver, QueryClient, @@ -50,7 +49,7 @@ describe('queryOptions', () => { queries: [options], }) - expectTypeOf(get(queries)[0].data).toEqualTypeOf() + expectTypeOf(queries[0].data).toEqualTypeOf() }) test('Should tag the queryKey with the result type of the QueryFn', () => { diff --git a/packages/svelte-query/tests/useIsFetching/BaseExample.svelte b/packages/svelte-query/tests/useIsFetching/BaseExample.svelte index 0e0919bef1..6847e54c0f 100644 --- a/packages/svelte-query/tests/useIsFetching/BaseExample.svelte +++ b/packages/svelte-query/tests/useIsFetching/BaseExample.svelte @@ -1,27 +1,27 @@ - + -
    isFetching: {$isFetching}
    -
    Data: {$query.data ?? 'undefined'}
    +
    isFetching: {isFetching()}
    +
    Data: {query.data ?? 'undefined'}
    diff --git a/packages/svelte-query/tests/useIsFetching/useIsFetching.test.ts b/packages/svelte-query/tests/useIsFetching/useIsFetching.test.ts index 7ca6ca6322..6420dfdfd3 100644 --- a/packages/svelte-query/tests/useIsFetching/useIsFetching.test.ts +++ b/packages/svelte-query/tests/useIsFetching/useIsFetching.test.ts @@ -1,5 +1,5 @@ import { describe, test } from 'vitest' -import { fireEvent, render } from '@testing-library/svelte' +import { fireEvent, render, waitFor } from '@testing-library/svelte' import BaseExample from './BaseExample.svelte' describe('useIsFetching', () => { @@ -8,7 +8,10 @@ describe('useIsFetching', () => { await rendered.findByText('isFetching: 0') fireEvent.click(rendered.getByRole('button', { name: /setReady/i })) - await rendered.findByText('isFetching: 1') - await rendered.findByText('isFetching: 0') + + waitFor(async () => { + await rendered.findByText('isFetching: 1') + await rendered.findByText('isFetching: 0') + }) }) }) diff --git a/packages/svelte-query/tests/useIsMutating/BaseExample.svelte b/packages/svelte-query/tests/useIsMutating/BaseExample.svelte index b144393de4..b2d71d8760 100644 --- a/packages/svelte-query/tests/useIsMutating/BaseExample.svelte +++ b/packages/svelte-query/tests/useIsMutating/BaseExample.svelte @@ -1,7 +1,8 @@ - + -
    isMutating: {$isMutating}
    +
    isMutating: {isMutating()}
    diff --git a/packages/svelte-query/tests/useMutationState/BaseExample.svelte b/packages/svelte-query/tests/useMutationState/BaseExample.svelte index ce85130099..beb4e6adab 100644 --- a/packages/svelte-query/tests/useMutationState/BaseExample.svelte +++ b/packages/svelte-query/tests/useMutationState/BaseExample.svelte @@ -1,18 +1,22 @@
    {JSON.stringify(statuses)}
    - - diff --git a/packages/svelte-query/tests/utils.svelte.ts b/packages/svelte-query/tests/utils.svelte.ts new file mode 100644 index 0000000000..c31dde0389 --- /dev/null +++ b/packages/svelte-query/tests/utils.svelte.ts @@ -0,0 +1,18 @@ +export function sleep(timeout: number): Promise { + return new Promise((resolve, _reject) => { + setTimeout(resolve, timeout) + }) +} + +export function ref(initial: T) { + let value = $state(initial) + + return { + get value() { + return value + }, + set value(newValue) { + value = newValue + }, + } +} diff --git a/packages/svelte-query/tests/utils.ts b/packages/svelte-query/tests/utils.ts deleted file mode 100644 index 1a3a619a22..0000000000 --- a/packages/svelte-query/tests/utils.ts +++ /dev/null @@ -1,5 +0,0 @@ -export function sleep(timeout: number): Promise { - return new Promise((resolve, _reject) => { - setTimeout(resolve, timeout) - }) -} diff --git a/packages/svelte-query/vite.config.ts b/packages/svelte-query/vite.config.ts index 3f68d52480..873c5976e7 100644 --- a/packages/svelte-query/vite.config.ts +++ b/packages/svelte-query/vite.config.ts @@ -11,8 +11,12 @@ export default defineConfig({ watch: false, environment: 'jsdom', setupFiles: ['./tests/test-setup.ts'], - coverage: { enabled: true, provider: 'istanbul', include: ['src/**/*'] }, + coverage: { enabled: false, provider: 'istanbul', include: ['src/**/*'] }, typecheck: { enabled: true }, - restoreMocks: true, + alias: { + // This is needed for svelte-5 support + // https://github.com/testing-library/svelte-testing-library?tab=readme-ov-file#svelte-5-support + '@testing-library/svelte': '@testing-library/svelte/svelte5', + }, }, }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9c267a71c..a23a526418 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -77,7 +77,7 @@ importers: version: 3.3.3 prettier-plugin-svelte: specifier: ^3.2.6 - version: 3.2.6(prettier@3.3.3)(svelte@4.2.18) + version: 3.2.6(prettier@3.3.3)(svelte@5.0.0-next.192) publint: specifier: ^0.2.9 version: 0.2.9 @@ -1273,19 +1273,19 @@ importers: devDependencies: '@sveltejs/adapter-auto': specifier: ^3.2.2 - version: 3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))) + version: 3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))) '@sveltejs/kit': specifier: ^2.5.18 - version: 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + version: 2.5.18(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) '@sveltejs/vite-plugin-svelte': - specifier: ^3.1.1 - version: 3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + specifier: ^4.0.0-next.4 + version: 4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) svelte: - specifier: ^4.2.18 - version: 4.2.18 + specifier: 5.0.0-next.192 + version: 5.0.0-next.192 svelte-check: specifier: ^3.8.4 - version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@4.2.18) + version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@5.0.0-next.192) typescript: specifier: 5.3.3 version: 5.3.3 @@ -1310,19 +1310,19 @@ importers: devDependencies: '@sveltejs/adapter-auto': specifier: ^3.2.2 - version: 3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))) + version: 3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))) '@sveltejs/kit': specifier: ^2.5.18 - version: 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + version: 2.5.18(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) '@sveltejs/vite-plugin-svelte': - specifier: ^3.1.1 - version: 3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + specifier: ^4.0.0-next.4 + version: 4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) svelte: - specifier: ^4.2.18 - version: 4.2.18 + specifier: 5.0.0-next.192 + version: 5.0.0-next.192 svelte-check: specifier: ^3.8.4 - version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@4.2.18) + version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@5.0.0-next.192) typescript: specifier: 5.3.3 version: 5.3.3 @@ -1341,19 +1341,19 @@ importers: devDependencies: '@sveltejs/adapter-auto': specifier: ^3.2.2 - version: 3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))) + version: 3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))) '@sveltejs/kit': specifier: ^2.5.18 - version: 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + version: 2.5.18(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) '@sveltejs/vite-plugin-svelte': - specifier: ^3.1.1 - version: 3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + specifier: ^4.0.0-next.4 + version: 4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) svelte: - specifier: ^4.2.18 - version: 4.2.18 + specifier: 5.0.0-next.192 + version: 5.0.0-next.192 svelte-check: specifier: ^3.8.4 - version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@4.2.18) + version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@5.0.0-next.192) typescript: specifier: 5.3.3 version: 5.3.3 @@ -1372,19 +1372,19 @@ importers: devDependencies: '@sveltejs/adapter-auto': specifier: ^3.2.2 - version: 3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))) + version: 3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))) '@sveltejs/kit': specifier: ^2.5.18 - version: 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + version: 2.5.18(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) '@sveltejs/vite-plugin-svelte': - specifier: ^3.1.1 - version: 3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + specifier: ^4.0.0-next.4 + version: 4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) svelte: - specifier: ^4.2.18 - version: 4.2.18 + specifier: 5.0.0-next.192 + version: 5.0.0-next.192 svelte-check: specifier: ^3.8.4 - version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@4.2.18) + version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@5.0.0-next.192) typescript: specifier: 5.3.3 version: 5.3.3 @@ -1403,19 +1403,19 @@ importers: devDependencies: '@sveltejs/adapter-auto': specifier: ^3.2.2 - version: 3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))) + version: 3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))) '@sveltejs/kit': specifier: ^2.5.18 - version: 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + version: 2.5.18(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) '@sveltejs/vite-plugin-svelte': - specifier: ^3.1.1 - version: 3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + specifier: ^4.0.0-next.4 + version: 4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) svelte: - specifier: ^4.2.18 - version: 4.2.18 + specifier: 5.0.0-next.192 + version: 5.0.0-next.192 svelte-check: specifier: ^3.8.4 - version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@4.2.18) + version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@5.0.0-next.192) typescript: specifier: 5.3.3 version: 5.3.3 @@ -1433,17 +1433,17 @@ importers: version: link:../../../packages/svelte-query-devtools devDependencies: '@sveltejs/vite-plugin-svelte': - specifier: ^3.1.1 - version: 3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + specifier: ^4.0.0-next.4 + version: 4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) '@tsconfig/svelte': specifier: ^5.0.4 version: 5.0.4 svelte: - specifier: ^4.2.18 - version: 4.2.18 + specifier: 5.0.0-next.192 + version: 5.0.0-next.192 svelte-check: specifier: ^3.8.4 - version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@4.2.18) + version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@5.0.0-next.192) typescript: specifier: 5.3.3 version: 5.3.3 @@ -1462,19 +1462,19 @@ importers: devDependencies: '@sveltejs/adapter-auto': specifier: ^3.2.2 - version: 3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))) + version: 3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))) '@sveltejs/kit': specifier: ^2.5.18 - version: 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + version: 2.5.18(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) '@sveltejs/vite-plugin-svelte': - specifier: ^3.1.1 - version: 3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + specifier: ^4.0.0-next.4 + version: 4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) svelte: - specifier: ^4.2.18 - version: 4.2.18 + specifier: 5.0.0-next.192 + version: 5.0.0-next.192 svelte-check: specifier: ^3.8.4 - version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@4.2.18) + version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@5.0.0-next.192) typescript: specifier: 5.3.3 version: 5.3.3 @@ -1493,13 +1493,13 @@ importers: devDependencies: '@sveltejs/adapter-auto': specifier: ^3.2.2 - version: 3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))) + version: 3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))) '@sveltejs/kit': specifier: ^2.5.18 - version: 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + version: 2.5.18(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) '@sveltejs/vite-plugin-svelte': - specifier: ^3.1.1 - version: 3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + specifier: ^4.0.0-next.4 + version: 4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) autoprefixer: specifier: ^10.4.19 version: 10.4.19(postcss@8.4.40) @@ -1507,11 +1507,11 @@ importers: specifier: ^8.4.40 version: 8.4.40 svelte: - specifier: ^4.2.18 - version: 4.2.18 + specifier: 5.0.0-next.192 + version: 5.0.0-next.192 svelte-check: specifier: ^3.8.4 - version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@4.2.18) + version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@5.0.0-next.192) tailwindcss: specifier: ^3.4.7 version: 3.4.7 @@ -1522,6 +1522,43 @@ importers: specifier: ^5.3.5 version: 5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3) + examples/svelte/svelte-melt: + dependencies: + '@tanstack/query-sync-storage-persister': + specifier: ^5.51.1 + version: link:../../../packages/query-sync-storage-persister + '@tanstack/svelte-query': + specifier: ^5.51.1 + version: link:../../../packages/svelte-query + '@tanstack/svelte-query-devtools': + specifier: ^5.51.1 + version: link:../../../packages/svelte-query-devtools + '@tanstack/svelte-query-persist-client': + specifier: ^5.51.1 + version: link:../../../packages/svelte-query-persist-client + devDependencies: + '@sveltejs/adapter-auto': + specifier: ^3.2.2 + version: 3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))) + '@sveltejs/kit': + specifier: ^2.5.18 + version: 2.5.18(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + '@sveltejs/vite-plugin-svelte': + specifier: ^4.0.0-next.4 + version: 4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + svelte: + specifier: 5.0.0-next.192 + version: 5.0.0-next.192 + svelte-check: + specifier: ^3.8.4 + version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@5.0.0-next.192) + typescript: + specifier: 5.3.3 + version: 5.3.3 + vite: + specifier: ^5.3.3 + version: 5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3) + examples/vue/basic: dependencies: '@tanstack/vue-query': @@ -1804,8 +1841,8 @@ importers: integrations/svelte-vite: devDependencies: '@sveltejs/vite-plugin-svelte': - specifier: ^3.1.1 - version: 3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + specifier: ^4.0.0-next.4 + version: 4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) '@tanstack/svelte-query': specifier: workspace:* version: link:../../packages/svelte-query @@ -1813,8 +1850,8 @@ importers: specifier: workspace:* version: link:../../packages/svelte-query-devtools svelte: - specifier: ^4.2.18 - version: 4.2.18 + specifier: 5.0.0-next.192 + version: 5.0.0-next.192 vite: specifier: ^5.3.5 version: 5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3) @@ -2163,22 +2200,22 @@ importers: devDependencies: '@sveltejs/package': specifier: ^2.3.2 - version: 2.3.2(svelte@4.2.18)(typescript@5.4.2) + version: 2.3.2(svelte@5.0.0-next.192)(typescript@5.4.2) '@sveltejs/vite-plugin-svelte': - specifier: ^3.1.1 - version: 3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + specifier: ^4.0.0-next.4 + version: 4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) '@testing-library/svelte': specifier: ^5.2.1 - version: 5.2.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))(vitest@2.0.4(@types/node@20.14.13)(jsdom@24.1.1)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + version: 5.2.1(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))(vitest@2.0.4(@types/node@20.14.13)(jsdom@24.1.1)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) eslint-plugin-svelte: specifier: ^2.43.0 - version: 2.43.0(eslint@8.57.0)(svelte@4.2.18) + version: 2.43.0(eslint@8.57.0)(svelte@5.0.0-next.192) svelte: - specifier: ^4.2.18 - version: 4.2.18 + specifier: 5.0.0-next.192 + version: 5.0.0-next.192 svelte-check: specifier: ^3.8.4 - version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@4.2.18) + version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@5.0.0-next.192) packages/svelte-query-devtools: dependencies: @@ -2191,22 +2228,22 @@ importers: devDependencies: '@sveltejs/package': specifier: ^2.3.2 - version: 2.3.2(svelte@4.2.18)(typescript@5.4.2) + version: 2.3.2(svelte@5.0.0-next.192)(typescript@5.4.2) '@sveltejs/vite-plugin-svelte': - specifier: ^3.1.1 - version: 3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + specifier: ^4.0.0-next.4 + version: 4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) '@tanstack/svelte-query': specifier: workspace:* version: link:../svelte-query eslint-plugin-svelte: specifier: ^2.43.0 - version: 2.43.0(eslint@8.57.0)(svelte@4.2.18) + version: 2.43.0(eslint@8.57.0)(svelte@5.0.0-next.192) svelte: - specifier: ^4.2.18 - version: 4.2.18 + specifier: 5.0.0-next.192 + version: 5.0.0-next.192 svelte-check: specifier: ^3.8.4 - version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@4.2.18) + version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@5.0.0-next.192) packages/svelte-query-persist-client: dependencies: @@ -2216,25 +2253,25 @@ importers: devDependencies: '@sveltejs/package': specifier: ^2.3.2 - version: 2.3.2(svelte@4.2.18)(typescript@5.4.2) + version: 2.3.2(svelte@5.0.0-next.192)(typescript@5.4.2) '@sveltejs/vite-plugin-svelte': - specifier: ^3.1.1 - version: 3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + specifier: ^4.0.0-next.4 + version: 4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) '@tanstack/svelte-query': specifier: workspace:* version: link:../svelte-query '@testing-library/svelte': specifier: ^5.2.1 - version: 5.2.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))(vitest@2.0.4(@types/node@20.14.13)(jsdom@24.1.1)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + version: 5.2.1(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))(vitest@2.0.4(@types/node@20.14.13)(jsdom@24.1.1)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) eslint-plugin-svelte: specifier: ^2.43.0 - version: 2.43.0(eslint@8.57.0)(svelte@4.2.18) + version: 2.43.0(eslint@8.57.0)(svelte@5.0.0-next.192) svelte: - specifier: ^4.2.18 - version: 4.2.18 + specifier: 5.0.0-next.192 + version: 5.0.0-next.192 svelte-check: specifier: ^3.8.4 - version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@4.2.18) + version: 3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@5.0.0-next.192) packages/vue-query: dependencies: @@ -5916,19 +5953,19 @@ packages: peerDependencies: svelte: ^3.44.0 || ^4.0.0 || ^5.0.0-next.1 - '@sveltejs/vite-plugin-svelte-inspector@2.1.0': - resolution: {integrity: sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==} - engines: {node: ^18.0.0 || >=20} + '@sveltejs/vite-plugin-svelte-inspector@3.0.0-next.3': + resolution: {integrity: sha512-kuGJ2CZ5lAw3gKF8Kw0AfKtUJWbwdlDHY14K413B0MCyrzvQvsKTorwmwZcky0+QqY6RnVIZ/5FttB9bQmkLXg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} peerDependencies: - '@sveltejs/vite-plugin-svelte': ^3.0.0 - svelte: ^4.0.0 || ^5.0.0-next.0 + '@sveltejs/vite-plugin-svelte': ^4.0.0-next.0||^4.0.0 + svelte: ^5.0.0-next.96 || ^5.0.0 vite: ^5.0.0 - '@sveltejs/vite-plugin-svelte@3.1.1': - resolution: {integrity: sha512-rimpFEAboBBHIlzISibg94iP09k/KYdHgVhJlcsTfn7KMBhc70jFX/GRWkRdFCc2fdnk+4+Bdfej23cMDnJS6A==} - engines: {node: ^18.0.0 || >=20} + '@sveltejs/vite-plugin-svelte@4.0.0-next.5': + resolution: {integrity: sha512-FBPD9Ahvcgdiy/ft1mbPZt7KjK//r96/1alkgb37qPGTNVcvaTqwvDIrfx9RHQ7JLLf3UdnBQYj/MrdKqIT9uw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} peerDependencies: - svelte: ^4.0.0 || ^5.0.0-next.0 + svelte: ^5.0.0-next.96 || ^5.0.0 vite: ^5.0.0 '@svgr/babel-plugin-add-jsx-attribute@5.4.0': @@ -7762,9 +7799,6 @@ packages: code-block-writer@12.0.0: resolution: {integrity: sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==} - code-red@1.0.4: - resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} - collection-visit@1.0.0: resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} engines: {node: '>=0.10.0'} @@ -8255,10 +8289,6 @@ packages: resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} engines: {node: '>=8.0.0'} - css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - css-vendor@2.0.8: resolution: {integrity: sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==} @@ -9137,6 +9167,9 @@ packages: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} + esrap@1.2.2: + resolution: {integrity: sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==} + esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -11467,9 +11500,6 @@ packages: mdn-data@2.0.14: resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} - mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - mdn-data@2.0.4: resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} @@ -12655,9 +12685,6 @@ packages: performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - periscopic@3.1.0: - resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} - picocolors@0.2.1: resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} @@ -15292,12 +15319,6 @@ packages: svelte: optional: true - svelte-hmr@0.16.0: - resolution: {integrity: sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==} - engines: {node: ^12.20 || ^14.13.1 || >= 16} - peerDependencies: - svelte: ^3.19.0 || ^4.0.0 - svelte-preprocess@5.1.4: resolution: {integrity: sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA==} engines: {node: '>= 16.0.0'} @@ -15341,9 +15362,9 @@ packages: svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 typescript: ^4.9.4 || ^5.0.0 - svelte@4.2.18: - resolution: {integrity: sha512-d0FdzYIiAePqRJEb90WlJDkjUEx42xhivxN8muUBmfZnP+tzUgz12DJ2hRJi8sIHCME7jeK1PTMgKPSfTd8JrA==} - engines: {node: '>=16'} + svelte@5.0.0-next.192: + resolution: {integrity: sha512-UgjiqTCsEWyQ157x5YNbmx859vBVFfznKaxuiMCPqHS3HRZ1iqTsSyO3LI/4BHjqPrtxwrOn1Z63VwoJkYBBDA==} + engines: {node: '>=18'} svg-parser@2.0.4: resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} @@ -17066,6 +17087,9 @@ packages: engines: {node: '>=8.0.0'} hasBin: true + zimmerframe@1.1.2: + resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} + zip-stream@6.0.1: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} @@ -22123,14 +22147,14 @@ snapshots: magic-string: 0.25.9 string.prototype.matchall: 4.0.11 - '@sveltejs/adapter-auto@3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))': + '@sveltejs/adapter-auto@3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))': dependencies: - '@sveltejs/kit': 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + '@sveltejs/kit': 2.5.18(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) import-meta-resolve: 4.1.0 - '@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))': + '@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))': dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + '@sveltejs/vite-plugin-svelte': 4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) '@types/cookie': 0.6.0 cookie: 0.6.0 devalue: 5.0.0 @@ -22142,39 +22166,38 @@ snapshots: sade: 1.8.1 set-cookie-parser: 2.6.0 sirv: 2.0.4 - svelte: 4.2.18 + svelte: 5.0.0-next.192 tiny-glob: 0.2.9 vite: 5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3) - '@sveltejs/package@2.3.2(svelte@4.2.18)(typescript@5.4.2)': + '@sveltejs/package@2.3.2(svelte@5.0.0-next.192)(typescript@5.4.2)': dependencies: chokidar: 3.6.0 kleur: 4.1.5 sade: 1.8.1 semver: 7.6.3 - svelte: 4.2.18 - svelte2tsx: 0.7.13(svelte@4.2.18)(typescript@5.4.2) + svelte: 5.0.0-next.192 + svelte2tsx: 0.7.13(svelte@5.0.0-next.192)(typescript@5.4.2) transitivePeerDependencies: - typescript - '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))': + '@sveltejs/vite-plugin-svelte-inspector@3.0.0-next.3(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))': dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + '@sveltejs/vite-plugin-svelte': 4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) debug: 4.3.6(supports-color@6.1.0) - svelte: 4.2.18 + svelte: 5.0.0-next.192 vite: 5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))': + '@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) + '@sveltejs/vite-plugin-svelte-inspector': 3.0.0-next.3(@sveltejs/vite-plugin-svelte@4.0.0-next.5(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)))(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) debug: 4.3.6(supports-color@6.1.0) deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.10 - svelte: 4.2.18 - svelte-hmr: 0.16.0(svelte@4.2.18) + svelte: 5.0.0-next.192 vite: 5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3) vitefu: 0.2.5(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3)) transitivePeerDependencies: @@ -22340,10 +22363,10 @@ snapshots: '@types/react': types-react@19.0.0-rc.1 '@types/react-dom': types-react-dom@19.0.0-rc.1 - '@testing-library/svelte@5.2.1(svelte@4.2.18)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))(vitest@2.0.4(@types/node@20.14.13)(jsdom@24.1.1)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))': + '@testing-library/svelte@5.2.1(svelte@5.0.0-next.192)(vite@5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))(vitest@2.0.4(@types/node@20.14.13)(jsdom@24.1.1)(less@4.2.0)(sass@1.77.8)(terser@5.31.3))': dependencies: '@testing-library/dom': 10.4.0 - svelte: 4.2.18 + svelte: 5.0.0-next.192 optionalDependencies: vite: 5.3.5(@types/node@20.14.13)(less@4.2.0)(sass@1.77.8)(terser@5.31.3) vitest: 2.0.4(@types/node@20.14.13)(jsdom@24.1.1)(less@4.2.0)(sass@1.77.8)(terser@5.31.3) @@ -24656,14 +24679,6 @@ snapshots: code-block-writer@12.0.0: {} - code-red@1.0.4: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - '@types/estree': 1.0.5 - acorn: 8.12.1 - estree-walker: 3.0.3 - periscopic: 3.1.0 - collection-visit@1.0.0: dependencies: map-visit: 1.0.0 @@ -25230,11 +25245,6 @@ snapshots: mdn-data: 2.0.14 source-map: 0.6.1 - css-tree@2.3.1: - dependencies: - mdn-data: 2.0.30 - source-map-js: 1.2.0 - css-vendor@2.0.8: dependencies: '@babel/runtime': 7.25.0 @@ -26255,7 +26265,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-svelte@2.43.0(eslint@8.57.0)(svelte@4.2.18): + eslint-plugin-svelte@2.43.0(eslint@8.57.0)(svelte@5.0.0-next.192): dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@jridgewell/sourcemap-codec': 1.5.0 @@ -26268,9 +26278,9 @@ snapshots: postcss-safe-parser: 6.0.0(postcss@8.4.40) postcss-selector-parser: 6.1.1 semver: 7.6.3 - svelte-eslint-parser: 0.41.0(svelte@4.2.18) + svelte-eslint-parser: 0.41.0(svelte@5.0.0-next.192) optionalDependencies: - svelte: 4.2.18 + svelte: 5.0.0-next.192 transitivePeerDependencies: - ts-node @@ -26400,6 +26410,11 @@ snapshots: dependencies: estraverse: 5.3.0 + esrap@1.2.2: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + '@types/estree': 1.0.5 + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 @@ -29189,8 +29204,6 @@ snapshots: mdn-data@2.0.14: {} - mdn-data@2.0.30: {} - mdn-data@2.0.4: {} mdurl@2.0.0: {} @@ -30896,12 +30909,6 @@ snapshots: performance-now@2.1.0: {} - periscopic@3.1.0: - dependencies: - '@types/estree': 1.0.5 - estree-walker: 3.0.3 - is-reference: 3.0.2 - picocolors@0.2.1: {} picocolors@1.0.1: {} @@ -31879,10 +31886,10 @@ snapshots: prepend-http@1.0.4: {} - prettier-plugin-svelte@3.2.6(prettier@3.3.3)(svelte@4.2.18): + prettier-plugin-svelte@3.2.6(prettier@3.3.3)(svelte@5.0.0-next.192): dependencies: prettier: 3.3.3 - svelte: 4.2.18 + svelte: 5.0.0-next.192 prettier@2.8.8: optional: true @@ -34032,14 +34039,14 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@4.2.18): + svelte-check@3.8.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@5.0.0-next.192): dependencies: '@jridgewell/trace-mapping': 0.3.25 chokidar: 3.6.0 picocolors: 1.0.1 sade: 1.8.1 - svelte: 4.2.18 - svelte-preprocess: 5.1.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@4.2.18)(typescript@5.3.3) + svelte: 5.0.0-next.192 + svelte-preprocess: 5.1.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@5.0.0-next.192)(typescript@5.3.3) typescript: 5.3.3 transitivePeerDependencies: - '@babel/core' @@ -34052,7 +34059,7 @@ snapshots: - stylus - sugarss - svelte-eslint-parser@0.41.0(svelte@4.2.18): + svelte-eslint-parser@0.41.0(svelte@5.0.0-next.192): dependencies: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 @@ -34060,20 +34067,16 @@ snapshots: postcss: 8.4.40 postcss-scss: 4.0.9(postcss@8.4.40) optionalDependencies: - svelte: 4.2.18 + svelte: 5.0.0-next.192 - svelte-hmr@0.16.0(svelte@4.2.18): - dependencies: - svelte: 4.2.18 - - svelte-preprocess@5.1.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@4.2.18)(typescript@5.3.3): + svelte-preprocess@5.1.4(@babel/core@7.24.9)(less@4.2.0)(postcss-load-config@4.0.2(postcss@8.4.40))(postcss@8.4.40)(sass@1.77.8)(svelte@5.0.0-next.192)(typescript@5.3.3): dependencies: '@types/pug': 2.0.10 detect-indent: 6.1.0 magic-string: 0.30.10 sorcery: 0.11.1 strip-indent: 3.0.0 - svelte: 4.2.18 + svelte: 5.0.0-next.192 optionalDependencies: '@babel/core': 7.24.9 less: 4.2.0 @@ -34082,29 +34085,28 @@ snapshots: sass: 1.77.8 typescript: 5.3.3 - svelte2tsx@0.7.13(svelte@4.2.18)(typescript@5.4.2): + svelte2tsx@0.7.13(svelte@5.0.0-next.192)(typescript@5.4.2): dependencies: dedent-js: 1.0.1 pascal-case: 3.1.2 - svelte: 4.2.18 + svelte: 5.0.0-next.192 typescript: 5.4.2 - svelte@4.2.18: + svelte@5.0.0-next.192: dependencies: '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 '@types/estree': 1.0.5 acorn: 8.12.1 + acorn-typescript: 1.4.13(acorn@8.12.1) aria-query: 5.3.0 axobject-query: 4.1.0 - code-red: 1.0.4 - css-tree: 2.3.1 - estree-walker: 3.0.3 + esm-env: 1.0.0 + esrap: 1.2.2 is-reference: 3.0.2 locate-character: 3.0.0 magic-string: 0.30.10 - periscopic: 3.1.0 + zimmerframe: 1.1.2 svg-parser@2.0.4: {} @@ -36264,6 +36266,8 @@ snapshots: optionalDependencies: commander: 9.5.0 + zimmerframe@1.1.2: {} + zip-stream@6.0.1: dependencies: archiver-utils: 5.0.2