From 7e1757b7f4e93cf0ac7700a3d7711ff1dd36c2de Mon Sep 17 00:00:00 2001 From: dswbx Date: Sat, 5 Apr 2025 18:03:58 +0200 Subject: [PATCH] fix: updated cloudflare adapter to use runtime config, aligned vite --- app/package.json | 2 +- app/src/App.ts | 5 +- app/src/adapter/aws/aws-lambda.adapter.ts | 2 +- .../cloudflare/cloudflare-workers.adapter.ts | 23 +++--- app/src/adapter/cloudflare/index.ts | 2 +- app/src/adapter/cloudflare/modes/cached.ts | 1 - app/src/adapter/cloudflare/modes/durable.ts | 3 +- app/src/adapter/cloudflare/modes/fresh.ts | 25 +------ app/src/adapter/vite/vite.adapter.ts | 70 +++++++++---------- app/src/modules/server/AdminController.tsx | 34 +++++---- 10 files changed, 77 insertions(+), 90 deletions(-) diff --git a/app/package.json b/app/package.json index a75a4d0..a87f8ff 100644 --- a/app/package.json +++ b/app/package.json @@ -3,7 +3,7 @@ "type": "module", "sideEffects": false, "bin": "./dist/cli/index.js", - "version": "0.11.0-rc.2", + "version": "0.11.0-rc.5", "description": "Lightweight Firebase/Supabase alternative built to run anywhere — incl. Next.js, React Router, Astro, Cloudflare, Bun, Node, AWS Lambda & more.", "homepage": "https://bknd.io", "repository": { diff --git a/app/src/App.ts b/app/src/App.ts index d8d147a..1e7b52a 100644 --- a/app/src/App.ts +++ b/app/src/App.ts @@ -180,7 +180,10 @@ export class App { registerAdminController(config?: AdminControllerOptions) { // register admin this.adminController = new AdminController(this, config); - this.modules.server.route(config?.basepath ?? "/", this.adminController.getController()); + this.modules.server.route( + this.adminController.basepath, + this.adminController.getController(), + ); return this; } diff --git a/app/src/adapter/aws/aws-lambda.adapter.ts b/app/src/adapter/aws/aws-lambda.adapter.ts index f73b76e..ad19047 100644 --- a/app/src/adapter/aws/aws-lambda.adapter.ts +++ b/app/src/adapter/aws/aws-lambda.adapter.ts @@ -43,7 +43,7 @@ export async function createApp( case "url": additional.adminOptions = { ...(typeof adminOptions === "object" ? adminOptions : {}), - assets_path: assets.url, + assetsPath: assets.url, }; break; default: diff --git a/app/src/adapter/cloudflare/cloudflare-workers.adapter.ts b/app/src/adapter/cloudflare/cloudflare-workers.adapter.ts index f1ac9e6..523372f 100644 --- a/app/src/adapter/cloudflare/cloudflare-workers.adapter.ts +++ b/app/src/adapter/cloudflare/cloudflare-workers.adapter.ts @@ -1,14 +1,15 @@ /// -import type { FrameworkBkndConfig } from "bknd/adapter"; +import type { RuntimeBkndConfig } from "bknd/adapter"; import { Hono } from "hono"; import { serveStatic } from "hono/cloudflare-workers"; +import { getFresh } from "./modes/fresh"; import { getCached } from "./modes/cached"; import { getDurable } from "./modes/durable"; -import { getFresh, getWarm } from "./modes/fresh"; +import type { App } from "bknd"; export type CloudflareEnv = object; -export type CloudflareBkndConfig = FrameworkBkndConfig & { +export type CloudflareBkndConfig = RuntimeBkndConfig & { mode?: "warm" | "fresh" | "cache" | "durable"; bindings?: (args: Env) => { kv?: KVNamespace; @@ -20,8 +21,6 @@ export type CloudflareBkndConfig = FrameworkBkndConfig keepAliveSeconds?: number; forceHttps?: boolean; manifest?: string; - setAdminHtml?: boolean; - html?: string; }; export type Context = { @@ -43,7 +42,7 @@ export function serve( throw new Error("manifest is required with static 'kv'"); } - if (config.manifest && config.static !== "assets") { + if (config.manifest && config.static === "kv") { const pathname = url.pathname.slice(1); const assetManifest = JSON.parse(config.manifest); if (pathname && pathname in assetManifest) { @@ -70,18 +69,24 @@ export function serve( const context = { request, env, ctx } as Context; const mode = config.mode ?? "warm"; + let app: App; switch (mode) { case "fresh": - return await getFresh(config, context); + app = await getFresh(config, context, { force: true }); + break; case "warm": - return await getWarm(config, context); + app = await getFresh(config, context); + break; case "cache": - return await getCached(config, context); + app = await getCached(config, context); + break; case "durable": return await getDurable(config, context); default: throw new Error(`Unknown mode ${mode}`); } + + return app.fetch(request, env, ctx); }, }; } diff --git a/app/src/adapter/cloudflare/index.ts b/app/src/adapter/cloudflare/index.ts index e89198e..f53f908 100644 --- a/app/src/adapter/cloudflare/index.ts +++ b/app/src/adapter/cloudflare/index.ts @@ -1,7 +1,7 @@ import { D1Connection, type D1ConnectionConfig } from "./D1Connection"; export * from "./cloudflare-workers.adapter"; -export { makeApp, getFresh, getWarm } from "./modes/fresh"; +export { makeApp, getFresh } from "./modes/fresh"; export { getCached } from "./modes/cached"; export { DurableBkndApp, getDurable } from "./modes/durable"; export { D1Connection, type D1ConnectionConfig }; diff --git a/app/src/adapter/cloudflare/modes/cached.ts b/app/src/adapter/cloudflare/modes/cached.ts index 4791124..3685f7b 100644 --- a/app/src/adapter/cloudflare/modes/cached.ts +++ b/app/src/adapter/cloudflare/modes/cached.ts @@ -40,7 +40,6 @@ export async function getCached( ); await config.beforeBuild?.(app); }, - adminOptions: { html: config.html }, }, { env, ctx, ...args }, ); diff --git a/app/src/adapter/cloudflare/modes/durable.ts b/app/src/adapter/cloudflare/modes/durable.ts index d09a006..414c197 100644 --- a/app/src/adapter/cloudflare/modes/durable.ts +++ b/app/src/adapter/cloudflare/modes/durable.ts @@ -25,9 +25,7 @@ export async function getDurable( const res = await stub.fire(ctx.request, { config: create_config, - html: config.html, keepAliveSeconds: config.keepAliveSeconds, - setAdminHtml: config.setAdminHtml, }); const headers = new Headers(res.headers); @@ -110,6 +108,7 @@ export class DurableBkndApp extends DurableObject { } async onBuilt(app: App) {} + async beforeBuild(app: App) {} protected keepAlive(seconds: number) { diff --git a/app/src/adapter/cloudflare/modes/fresh.ts b/app/src/adapter/cloudflare/modes/fresh.ts index b5730b1..d894065 100644 --- a/app/src/adapter/cloudflare/modes/fresh.ts +++ b/app/src/adapter/cloudflare/modes/fresh.ts @@ -7,22 +7,15 @@ export async function makeApp( args: Env = {} as Env, opts?: RuntimeOptions, ) { - return await createRuntimeApp( - { - ...makeConfig(config, args), - adminOptions: config.html ? { html: config.html } : undefined, - }, - args, - opts, - ); + return await createRuntimeApp(makeConfig(config, args), args, opts); } -export async function getWarm( +export async function getFresh( config: CloudflareBkndConfig, ctx: Context, opts: RuntimeOptions = {}, ) { - const app = await makeApp( + return await makeApp( { ...config, onBuilt: async (app) => { @@ -33,16 +26,4 @@ export async function getWarm( ctx.env, opts, ); - return app.fetch(ctx.request); -} - -export async function getFresh( - config: CloudflareBkndConfig, - ctx: Context, - opts: RuntimeOptions = {}, -) { - return await getWarm(config, ctx, { - ...opts, - force: true, - }); } diff --git a/app/src/adapter/vite/vite.adapter.ts b/app/src/adapter/vite/vite.adapter.ts index bb7eb59..84d7396 100644 --- a/app/src/adapter/vite/vite.adapter.ts +++ b/app/src/adapter/vite/vite.adapter.ts @@ -1,18 +1,24 @@ import { serveStatic } from "@hono/node-server/serve-static"; -import { type DevServerOptions, default as honoViteDevServer } from "@hono/vite-dev-server"; +import { + type DevServerOptions, + default as honoViteDevServer, +} from "@hono/vite-dev-server"; import type { App } from "bknd"; -import { type RuntimeBkndConfig, createRuntimeApp } from "bknd/adapter"; +import { + type RuntimeBkndConfig, + createRuntimeApp, + type FrameworkOptions, +} from "bknd/adapter"; import { registerLocalMediaAdapter } from "bknd/adapter/node"; import { devServerConfig } from "./dev-server-config"; -export type ViteBkndConfig = RuntimeBkndConfig & { - mode?: "cached" | "fresh"; - setAdminHtml?: boolean; - forceDev?: boolean | { mainPath: string }; - html?: string; -}; +export type ViteEnv = NodeJS.ProcessEnv; +export type ViteBkndConfig = RuntimeBkndConfig & {}; -export function addViteScript(html: string, addBkndContext: boolean = true) { +export function addViteScript( + html: string, + addBkndContext: boolean = true, +) { return html.replace( "", `