From 7e8b357bbb5325518b442dbe5b2cafec1a82f5a7 Mon Sep 17 00:00:00 2001 From: dswbx Date: Fri, 9 Jan 2026 13:11:01 +0100 Subject: [PATCH] add support for `/admin` route in backend handler and enable asset copying updated `hooks.server.ts` to handle `/admin` routes and prevent fallback for 404 responses. added `adminBasepath` config to match backend paths. introduced assets copying step via `postinstall` script and included `robots.txt` and `favicon.ico` under `static`. --- examples/sveltekit/.gitignore | 2 ++ examples/sveltekit/bknd.config.ts | 4 ++++ examples/sveltekit/package.json | 3 ++- examples/sveltekit/src/hooks.server.ts | 8 ++++++-- examples/sveltekit/static/favicon.ico | Bin 0 -> 15086 bytes examples/sveltekit/static/robots.txt | 3 +++ 6 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 examples/sveltekit/static/favicon.ico create mode 100644 examples/sveltekit/static/robots.txt diff --git a/examples/sveltekit/.gitignore b/examples/sveltekit/.gitignore index a9edab4..1380082 100644 --- a/examples/sveltekit/.gitignore +++ b/examples/sveltekit/.gitignore @@ -9,3 +9,5 @@ node_modules vite.config.js.timestamp-* vite.config.ts.timestamp-* *.db +static/manifest.json +static/assets \ No newline at end of file diff --git a/examples/sveltekit/bknd.config.ts b/examples/sveltekit/bknd.config.ts index ad1b9d3..d36c862 100644 --- a/examples/sveltekit/bknd.config.ts +++ b/examples/sveltekit/bknd.config.ts @@ -35,6 +35,10 @@ export default { }, }, }, + adminOptions: { + // this path must be the same as in `hooks.server.ts` + adminBasepath: "/admin" + }, options: { seed: async (ctx) => { await ctx.app.module.auth.createUser({ diff --git a/examples/sveltekit/package.json b/examples/sveltekit/package.json index 9bab319..53fbf94 100644 --- a/examples/sveltekit/package.json +++ b/examples/sveltekit/package.json @@ -5,7 +5,8 @@ "scripts": { "dev": "vite dev", "build": "vite build", - "preview": "vite preview" + "preview": "vite preview", + "postinstall": "node node_modules/.bin/bknd copy-assets --out static" }, "devDependencies": { "@sveltejs/adapter-auto": "^7.0.0", diff --git a/examples/sveltekit/src/hooks.server.ts b/examples/sveltekit/src/hooks.server.ts index 1f4b055..66f3ef4 100644 --- a/examples/sveltekit/src/hooks.server.ts +++ b/examples/sveltekit/src/hooks.server.ts @@ -7,8 +7,12 @@ const bkndHandler = serve(config, env); export const handle: Handle = async ({ event, resolve }) => { // Handle bknd API requests - if (event.url.pathname.startsWith("/api/")) { - return bkndHandler(event); + const pathname = event.url.pathname; + if (pathname.startsWith("/api/") || pathname.startsWith("/admin")) { + const res = await bkndHandler(event); + if (res.status !== 404) { + return res; + } } return resolve(event); diff --git a/examples/sveltekit/static/favicon.ico b/examples/sveltekit/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c1a946d533a71c15e51fc4cade87289ca467b57d GIT binary patch literal 15086 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