SvelteKit
Using Telefunc with SvelteKit.
1. Install
npm install telefuncpnpm add telefuncbun add telefuncyarn add telefunc2. Vite plugin
// vite.config.js
import { sveltekit } from '@sveltejs/kit/vite'
import { telefunc } from 'telefunc/vite'
import { defineConfig } from 'vite'
export default defineConfig({
plugins: [sveltekit(), telefunc()]
})// vite.config.ts
import { sveltekit } from '@sveltejs/kit/vite'
import { telefunc } from 'telefunc/vite'
import { defineConfig } from 'vite'
export default defineConfig({
plugins: [sveltekit(), telefunc()],
})3. Server integration
// src/routes/_telefunc/+server.js
// Environment: server
import { telefunc } from 'telefunc'
const handler = async (event) => {
const httpResponse = await telefunc({ request: event.request })
return new Response(httpResponse.body, {
headers: new Headers({ 'content-type': httpResponse.contentType }),
status: httpResponse.statusCode
})
}
export { handler as GET, handler as POST }// src/routes/_telefunc/+server.ts
// Environment: server
import { telefunc } from 'telefunc'
import type { RequestHandler } from './$types'
const handler: RequestHandler = async (event) => {
const httpResponse = await telefunc({ request: event.request })
return new Response(httpResponse.body, {
headers: new Headers({ 'content-type': httpResponse.contentType }),
status: httpResponse.statusCode,
})
}
export { handler as GET, handler as POST }4. Create a telefunction
Create your first telefunction, for example:
// src/routes/Counter.telefunc.js
// Environment: server
export async function onIncrement(diff) {
database.value += diff
return database.value
}// src/routes/Counter.telefunc.ts
// Environment: server
export async function onIncrement(diff: number) {
database.value += diff
return database.value
}
.telefunc.tsfiles are always server-only, regardless of where they are located. You don't need$lib/serveror.server.
Call it from the client:
<!-- src/routes/Counter.svelte -->
<!-- Environment: client -->
<script lang="ts">
import { onIncrement } from './Counter.telefunc'
let count = 0
</script>
<button on:click={async () => { count = await onIncrement(+1) }}>+1</button>
<span>{count}</span>To pass contextual information (e.g. the logged-in user) to your telefunctions, see API >
getContext().
Example
/examples/svelte-kitInitial Data
For fetching the initial data of pages (SSR data) use SvelteKit's built-in data fetching mechanism instead of Telefunc.
For example, you can use SvelteKit's load function in a +page.server.js file to fetch initial data directly from a database, see SvelteKit Docs > Loading data > Universal vs server.
You can still use Telefunc for fetching data but only after the initial rendering of the page, for example for pagination or infinite scroll.
In case you're curious: you cannot use Telefunc for server-side rendered (SSR) data because only the framework can pass SSR data from the server to the client-side (which is needed for hydration). This is common to all SSR frameworks like SvelteKit.