Skip to content

Commit

Permalink
WIP: Svelte 5 adapter (#6981)
Browse files Browse the repository at this point in the history
docs(svelte-5-adapter): force runes mode for all examples (#7800)

* docs(examples): force runes mode for all examples

* Fix simple example mounting

* Fix type
feat(svelte-5-adapter): require options to be passed as function (#7804)

* fix(svelte-5-adapter): Require options to be passed as function

* More fixes

* More fixes

* Update examples

fix(svelte-5-adapter): function for `createMutation` options (#7805)

* fix(svelte-5-adapter): require function for createMutation options

* Fix type errors
refactor(svelte-5-adapter): simplify createBaseQuery (#7808)

* refactor: simplify createBaseQuery

* Don't take snapshot of queryKey
chore(svelte-5-adapter): tidy-up functions (#7809)

* chore(svelte-5-adapter): tidy-up functions

* Fix types

* Update svelte

Fix import extensions

chore: ignore state_snapshot_uncloneable in tests
  • Loading branch information
zhihengGet authored and lachlancollins committed Aug 2, 2024
1 parent 0f6a1d5 commit 0cd7069
Show file tree
Hide file tree
Showing 124 changed files with 1,474 additions and 1,320 deletions.
1 change: 1 addition & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export default [
'@typescript-eslint/ban-types': 'off',
'@typescript-eslint/no-empty-function': 'off',
'no-case-declarations': 'off',
'prefer-const': 'off',
},
},
]
4 changes: 2 additions & 2 deletions examples/svelte/auto-refetching/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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.5",
"svelte": "^5.0.0-next.204",
"svelte-check": "^3.8.4",
"typescript": "5.3.3",
"vite": "^5.3.5"
Expand Down
4 changes: 3 additions & 1 deletion examples/svelte/auto-refetching/src/routes/+layout.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -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: {
Expand All @@ -15,7 +17,7 @@

<QueryClientProvider client={queryClient}>
<main>
<slot />
{@render children()}
</main>
<SvelteQueryDevtools />
</QueryClientProvider>
40 changes: 19 additions & 21 deletions examples/svelte/auto-refetching/src/routes/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,30 @@
createMutation,
} from '@tanstack/svelte-query'
let intervalMs = 1000
let value = ''
let intervalMs = $state(1000)
let value = $state<string>('')
const client = useQueryClient()
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
refetchInterval: intervalMs,
})
}))
const addMutation = createMutation({
const addMutation = createMutation(() => ({
mutationFn: (value: string) =>
fetch(`${endpoint}?add=${value}`).then((r) => r.json()),
onSuccess: () => client.invalidateQueries({ queryKey: ['refetch'] }),
})
}))
const clearMutation = createMutation({
const clearMutation = createMutation(() => ({
mutationFn: () => fetch(`${endpoint}?clear=1`).then((r) => r.json()),
onSuccess: () => client.invalidateQueries({ queryKey: ['refetch'] }),
})
}))
</script>

<h1>Auto Refetch with stale-time set to 1s</h1>
Expand All @@ -49,46 +49,44 @@
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)"
></span>
</div>
</label>
<h2>Todo List</h2>
<form
on:submit={(e) => {
onsubmit={(e) => {
e.preventDefault()
e.stopPropagation()
$addMutation.mutate(value, {
addMutation.mutate(value, {
onSuccess: () => (value = ''),
})
}}
>
<input placeholder="enter something" bind:value />
</form>

{#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}
<ul>
{#each $todos.data.items as item}
{#each todos.data.items as item}
<li>{item}</li>
{/each}
</ul>
<div>
<button on:click={() => $clearMutation.mutate(undefined)}>
Clear All
</button>
<button onclick={() => clearMutation.mutate(undefined)}> Clear All </button>
</div>
{/if}
{#if $todos.isFetching}
{#if todos.isFetching}
<div style="color:darkgreen; font-weight:700">
'Background Updating...' : ' '
</div>
Expand Down
6 changes: 3 additions & 3 deletions examples/svelte/auto-refetching/svelte.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'

/** @type {import('@sveltejs/kit').Config} */
const config = {
// Consult https://github.com/sveltejs/svelte-preprocess
// for more information about preprocessors
preprocess: vitePreprocess(),

kit: {
adapter: adapter(),
},
compilerOptions: {
runes: true,
},
}

export default config
4 changes: 2 additions & 2 deletions examples/svelte/basic/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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.5",
"svelte": "^5.0.0-next.204",
"svelte-check": "^3.8.4",
"typescript": "5.3.3",
"vite": "^5.3.5"
Expand Down
20 changes: 10 additions & 10 deletions examples/svelte/basic/src/lib/Post.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,29 @@
import { getPostById } from './data'
import type { Post } from './types'
export let postId: number
const { postId }: { postId: number } = $props()
const post = createQuery<Post>({
const post = createQuery<Post>(() => ({
queryKey: ['post', postId],
queryFn: () => getPostById(postId),
})
}))
</script>

<div>
<div>
<a class="button" href="/"> Back </a>
</div>
{#if !postId || $post.isPending}
{#if !postId || post.isPending}
<span>Loading...</span>
{/if}
{#if $post.error}
<span>Error: {$post.error.message}</span>
{#if post.error}
<span>Error: {post.error.message}</span>
{/if}
{#if $post.isSuccess}
<h1>{$post.data.title}</h1>
{#if post.isSuccess}
<h1>{post.data.title}</h1>
<div>
<p>{$post.data.body}</p>
<p>{post.data.body}</p>
</div>
<div>{$post.isFetching ? 'Background Updating...' : ' '}</div>
<div>{post.isFetching ? 'Background Updating...' : ' '}</div>
{/if}
</div>
14 changes: 7 additions & 7 deletions examples/svelte/basic/src/lib/Posts.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,21 @@
const posts = createQuery<
{ id: number; title: string; body: string }[],
Error
>({
>(() => ({
queryKey: ['posts', limit],
queryFn: () => getPosts(limit),
})
}))
</script>

<div>
<div>
{#if $posts.status === 'pending'}
{#if posts.status === 'pending'}
<span>Loading...</span>
{:else if $posts.status === 'error'}
<span>Error: {$posts.error.message}</span>
{:else if posts.status === 'error'}
<span>Error: {posts.error.message}</span>
{:else}
<ul>
{#each $posts.data as post}
{#each posts.data as post}
<article>
<a
href={`/${post.id}`}
Expand All @@ -38,7 +38,7 @@
</article>
{/each}
</ul>
{#if $posts.isFetching}
{#if posts.isFetching}
<div style="color:darkgreen; font-weight:700">
Background Updating...
</div>
Expand Down
4 changes: 3 additions & 1 deletion examples/svelte/basic/src/routes/+layout.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -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: {
Expand All @@ -21,7 +23,7 @@

<PersistQueryClientProvider client={queryClient} persistOptions={{ persister }}>
<main>
<slot />
{@render children()}
</main>
<SvelteQueryDevtools />
</PersistQueryClientProvider>
3 changes: 1 addition & 2 deletions examples/svelte/basic/src/routes/[postId]/+page.svelte
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
<script lang="ts">
import Post from '$lib/Post.svelte'
import type { PageData } from './$types'
export let data: PageData
const { data } = $props()
</script>

<Post postId={data.postId} />
6 changes: 3 additions & 3 deletions examples/svelte/basic/svelte.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'

/** @type {import('@sveltejs/kit').Config} */
const config = {
// Consult https://github.com/sveltejs/svelte-preprocess
// for more information about preprocessors
preprocess: vitePreprocess(),

kit: {
adapter: adapter(),
},
compilerOptions: {
runes: true,
},
}

export default config
4 changes: 2 additions & 2 deletions examples/svelte/load-more-infinite-scroll/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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.5",
"svelte": "^5.0.0-next.204",
"svelte-check": "^3.8.4",
"typescript": "5.3.3",
"vite": "^5.3.5"
Expand Down
10 changes: 5 additions & 5 deletions examples/svelte/load-more-infinite-scroll/src/app.css
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ main {
text-align: center;
}

button {
.button {
border-radius: 8px;
border: 1px solid transparent;
padding: 0.6em 1.2em;
Expand All @@ -59,11 +59,11 @@ button {
cursor: pointer;
transition: border-color 0.25s;
}
button:hover {
.button:hover {
border-color: #646cff;
}
button:focus,
button:focus-visible {
.button:focus,
.button:focus-visible {
outline: 4px auto -webkit-focus-ring-color;
}

Expand All @@ -75,7 +75,7 @@ button:focus-visible {
a:hover {
color: #747bff;
}
button {
.button {
background-color: #f9f9f9;
}
}
22 changes: 11 additions & 11 deletions examples/svelte/load-more-infinite-scroll/src/lib/LoadMore.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
const fetchPlanets = async ({ pageParam = 1 }) =>
await fetch(`${endPoint}/planets/?page=${pageParam}`).then((r) => r.json())
const query = createInfiniteQuery({
const query = createInfiniteQuery(() => ({
queryKey: ['planets'],
queryFn: ({ pageParam }) => fetchPlanets({ pageParam }),
initialPageParam: 1,
Expand All @@ -20,18 +20,18 @@
}
return undefined
},
})
}))
</script>

{#if $query.isPending}
{#if query.isPending}
Loading...
{/if}
{#if $query.error}
<span>Error: {$query.error.message}</span>
{#if query.error}
<span>Error: {query.error.message}</span>
{/if}
{#if $query.isSuccess}
{#if query.isSuccess}
<div>
{#each $query.data.pages as { results }}
{#each query.data.pages as { results }}
{#each results as planet}
<div class="card">
<div class="card-body">
Expand All @@ -44,12 +44,12 @@
</div>
<div>
<button
on:click={() => $query.fetchNextPage()}
disabled={!$query.hasNextPage || $query.isFetchingNextPage}
onclick={() => query.fetchNextPage()}
disabled={!query.hasNextPage || query.isFetchingNextPage}
>
{#if $query.isFetching}
{#if query.isFetching}
Loading more...
{:else if $query.hasNextPage}
{:else if query.hasNextPage}
Load More
{:else}Nothing more to load{/if}
</button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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: {
Expand All @@ -15,7 +17,7 @@

<QueryClientProvider client={queryClient}>
<main>
<slot />
{@render children()}
</main>
<SvelteQueryDevtools />
</QueryClientProvider>
Loading

0 comments on commit 0cd7069

Please sign in to comment.