feat: add SvelteKit adapter

Add framework adapter for SvelteKit with:
- `getApp()` - get bknd app instance
- `serve()` - request handler for hooks.server.ts

Usage in hooks.server.ts:
```typescript
import { serve } from "bknd/adapter/sveltekit";
import config from "../bknd.config";

const bkndHandler = serve(config);

export const handle = async ({ event, resolve }) => {
  if (event.url.pathname.startsWith("/api/")) {
    return bkndHandler(event);
  }
  return resolve(event);
};
```

Includes:
- Adapter implementation (app/src/adapter/sveltekit/)
- Test suite
- Working example (examples/sveltekit/)
- Package exports and types
This commit is contained in:
Szymon Rączka
2025-12-26 16:55:10 +01:00
parent 81f3914e7f
commit 90b4de7093
16 changed files with 260 additions and 0 deletions

View File

@@ -308,6 +308,11 @@ async function buildAdapters() {
platform: "node",
}),
tsup.build({
...baseConfig("sveltekit"),
platform: "node",
}),
tsup.build({
...baseConfig("node"),
platform: "node",

View File

@@ -253,6 +253,11 @@
"import": "./dist/adapter/astro/index.js",
"require": "./dist/adapter/astro/index.js"
},
"./adapter/sveltekit": {
"types": "./dist/types/adapter/sveltekit/index.d.ts",
"import": "./dist/adapter/sveltekit/index.js",
"require": "./dist/adapter/sveltekit/index.js"
},
"./adapter/aws": {
"types": "./dist/types/adapter/aws/index.d.ts",
"import": "./dist/adapter/aws/index.js",
@@ -280,6 +285,7 @@
"adapter/react-router": ["./dist/types/adapter/react-router/index.d.ts"],
"adapter/bun": ["./dist/types/adapter/bun/index.d.ts"],
"adapter/node": ["./dist/types/adapter/node/index.d.ts"],
"adapter/sveltekit": ["./dist/types/adapter/sveltekit/index.d.ts"],
"adapter/sqlite": ["./dist/types/adapter/sqlite/edge.d.ts"]
}
},
@@ -309,6 +315,8 @@
"remix",
"react-router",
"astro",
"sveltekit",
"svelte",
"bun",
"node"
]

View File

@@ -0,0 +1 @@
export * from "./sveltekit.adapter";

View File

@@ -0,0 +1,15 @@
import { afterAll, beforeAll, describe } from "bun:test";
import * as sveltekit from "./sveltekit.adapter";
import { disableConsoleLog, enableConsoleLog } from "core/utils";
import { adapterTestSuite } from "adapter/adapter-test-suite";
import { bunTestRunner } from "adapter/bun/test";
beforeAll(disableConsoleLog);
afterAll(enableConsoleLog);
describe("sveltekit adapter", () => {
adapterTestSuite(bunTestRunner, {
makeApp: sveltekit.getApp,
makeHandler: (c, a) => (request: Request) => sveltekit.serve(c, a)({ request }),
});
});

View File

@@ -0,0 +1,23 @@
import { type FrameworkBkndConfig, createFrameworkApp } from "bknd/adapter";
type SvelteKitEnv = NodeJS.ProcessEnv;
type TSvelteKit = {
request: Request;
};
export type SvelteKitBkndConfig<Env = SvelteKitEnv> = FrameworkBkndConfig<Env>;
export async function getApp<Env = SvelteKitEnv>(
config: SvelteKitBkndConfig<Env> = {},
args: Env = process.env as Env,
) {
return await createFrameworkApp(config, args);
}
export function serve<Env = SvelteKitEnv>(
config: SvelteKitBkndConfig<Env> = {},
args: Env = process.env as Env,
) {
return async (fnArgs: TSvelteKit) => {
return (await getApp(config, args)).fetch(fnArgs.request);
};
}