Logo VelaStack

Enable content negotiation

Content Negotiation with Accept header

$ vela enable content-negotiation
src/lib/negotiate.ts
import { createNegotiation } from "sveltekit-negotiate";

export const { handle, reroute, negotiate, Negotiate } = createNegotiation({
  "text/markdown": { extension: ".md" },
  "application/json": { extension: ".json" },
});
src/routes/(public)/negotiate/+page.server.ts
import { negotiate } from "$lib/negotiate";

export const load = async ({ locals }) => {
  const message = "Hello, content negotiation!";

  return {
    message,
    ...negotiate(locals, {
      "text/markdown": () => `# ${message}`,
    }),
  };
};
src/routes/(public)/negotiate/+page.svelte
<script lang="ts">
  let { data } = $props();
</script>

<section data-role="content">
  <h1 class="text-2xl font-bold">{data.message}</h1>
</section>
src/routes/(public)/negotiate/+page.ts
import { definePageMetaTags } from "svelte-meta-tags";

export const load = async ({ parent, data }) => {
  await parent();

  const { pageMetaTags } = definePageMetaTags({
    title: "Negotiate",
  });

  return { ...data, pageMetaTags };
};