Skip to content

Instantly share code, notes, and snippets.

View david-plugge's full-sized avatar

David Plugge david-plugge

View GitHub Profile
@david-plugge
david-plugge / route.ts
Last active August 24, 2024 14:59
Sveltekit typesafe routes
import { resolveRoute } from '$app/paths';
import type RouteMetadata from '$lib/../../.svelte-kit/types/route_meta_data.json';
type RouteMetadata = typeof RouteMetadata;
// eslint-disable-next-line @typescript-eslint/ban-types
type Prettify<T> = { [K in keyof T]: T[K] } & {};
type ParseParam<T extends string> = T extends `...${infer Name}` ? Name : T;
type ParseParams<T extends string> = T extends `${infer A}[[${infer Param}]]${infer B}`
? ParseParams<A> & { [K in ParseParam<Param>]?: string } & ParseParams<B>
@david-plugge
david-plugge / lucide-svelte-optimizer.ts
Last active March 11, 2024 11:25
Lucide svelte optimizer vite plugin
function lucideSvelteImportOptimizer(): Plugin {
return {
name: 'vite-plugin-lucide-svelte-optimizer',
transform(code, id) {
const ms = new MagicString(code, { filename: id });
ms.replace(
/([ \t]*)import\s+\{(.*?)\}\s+from\s+['"]lucide-svelte['"];?/g,
(match, whitespace: string, importNames: string) => {
const hasSemi = match.endsWith(';');
@david-plugge
david-plugge / +server.ts
Last active December 22, 2022 10:20
SvelteKit SSE
import { sse } from '$lib';
import type { RequestHandler } from './$types';
export const GET: RequestHandler = async () => {
return sse<number>(async ({ write, onClose }) => {
const id = setInterval(() => {
write({ data: Date.now() });
}, 1000);
onClose(() => {