## Demo: data-loading ### DataLoading.svelte ```svelte {#if pokemon}
{:else}

No Pokémon found for "{id}".

{/if}
``` ### PokemonSelector.svelte ```svelte
``` ### PokemonHeader.svelte ```svelte

{isServer ? 'SERVER' : 'BROWSER'} | {isDev ? 'DEV' : 'PROD'}

{name}
#{String(id).padStart(3, '0')}

{name}

``` ### PokemonMeta.svelte ```svelte
{#each types as t (t)} {t} {/each}
Height {(height / 10).toFixed(1)} m
Weight {(weight / 10).toFixed(1)} kg
Base XP {baseXp}
Abilities {abilities.join(', ')}
``` ### PokemonStats.svelte ```svelte

Base Stats

{#each filtered as s (s.name)}
{s.name} {s.value}
{/each}
``` ### routes.ts ```ts import { Mochi, fail, redirect } from 'mochi-framework'; import type { MochiRouteValue } from 'mochi-framework'; export const routes: Record = { '/demos/data-loading': (req: Request) => Response.redirect(new URL('/demos/data-loading/pikachu', req.url), 302), '/demos/data-loading/:id': Mochi.page('./src/demos/data-loading/DataLoading.svelte', { actions: { default: async ({ formData }) => { const pokemon = String(formData.get('pokemon') ?? '') .trim() .toLowerCase(); if (!pokemon) { return fail(400, { error: 'Pokemon required' }); } return redirect(303, `/demos/data-loading/${encodeURIComponent(pokemon)}`); }, }, }), }; ``` ### cache.ts ```ts import { MochiCache } from 'mochi-framework'; export const pokemonCache = new MochiCache({ minTimeToStale: 10_000, maxTimeToLive: 300_000, }); ``` ### index.ts ```ts import { Mochi, logger } from 'mochi-framework'; await Mochi.serve({ port: 3333, development: process.env.MODE === 'development', routes: { '/': Mochi.page('./src/Home.svelte'), }, }); logger.info('Server running at http://localhost:3333'); ```