diff --git a/app/build.ts b/app/build.ts index 3c37c6e..ebbf33a 100644 --- a/app/build.ts +++ b/app/build.ts @@ -173,7 +173,6 @@ function baseConfig(adapter: string): tsup.Options { ], metafile: true, splitting: false, - treeshake: true, onSuccess: async () => { delayTypes(); } diff --git a/app/src/adapter/astro/astro.adapter.ts b/app/src/adapter/astro/astro.adapter.ts index e8cb58a..a4886c4 100644 --- a/app/src/adapter/astro/astro.adapter.ts +++ b/app/src/adapter/astro/astro.adapter.ts @@ -1,5 +1,5 @@ -import { type FrameworkBkndConfig, createFrameworkApp } from "adapter"; import { Api, type ApiOptions, type App } from "bknd"; +import { type FrameworkBkndConfig, createFrameworkApp } from "bknd/adapter"; export type AstroBkndConfig = FrameworkBkndConfig; diff --git a/app/src/adapter/astro/index.ts b/app/src/adapter/astro/index.ts index d5010a5..818174e 100644 --- a/app/src/adapter/astro/index.ts +++ b/app/src/adapter/astro/index.ts @@ -1 +1,2 @@ export * from "./astro.adapter"; +export { registerLocalMediaAdapter } from "bknd/adapter/node"; diff --git a/app/src/adapter/bun/bun.adapter.ts b/app/src/adapter/bun/bun.adapter.ts index 390ac3a..05eec3c 100644 --- a/app/src/adapter/bun/bun.adapter.ts +++ b/app/src/adapter/bun/bun.adapter.ts @@ -2,10 +2,11 @@ import path from "node:path"; import type { App } from "bknd"; +import { type RuntimeBkndConfig, createRuntimeApp } from "bknd/adapter"; +import { registerLocalMediaAdapter } from "bknd/adapter/node"; +import { config } from "bknd/core"; import type { ServeOptions } from "bun"; -import { config } from "core"; import { serveStatic } from "hono/bun"; -import { type RuntimeBkndConfig, createRuntimeApp } from "../index"; let app: App; @@ -15,9 +16,9 @@ export async function createApp({ distPath, ...config }: RuntimeBkndConfig = {}) const root = path.resolve(distPath ?? "./node_modules/bknd/dist", "static"); if (!app) { + registerLocalMediaAdapter(); app = await createRuntimeApp({ ...config, - registerLocalMedia: true, serveStatic: serveStatic({ root }) }); } diff --git a/app/src/adapter/cloudflare/cloudflare-workers.adapter.ts b/app/src/adapter/cloudflare/cloudflare-workers.adapter.ts index e666cf6..3a4044b 100644 --- a/app/src/adapter/cloudflare/cloudflare-workers.adapter.ts +++ b/app/src/adapter/cloudflare/cloudflare-workers.adapter.ts @@ -1,6 +1,6 @@ +import type { FrameworkBkndConfig } from "bknd/adapter"; import { Hono } from "hono"; import { serveStatic } from "hono/cloudflare-workers"; -import type { FrameworkBkndConfig } from "../index"; import { getCached } from "./modes/cached"; import { getDurable } from "./modes/durable"; import { getFresh, getWarm } from "./modes/fresh"; diff --git a/app/src/adapter/cloudflare/modes/cached.ts b/app/src/adapter/cloudflare/modes/cached.ts index 2c04f51..a367e5d 100644 --- a/app/src/adapter/cloudflare/modes/cached.ts +++ b/app/src/adapter/cloudflare/modes/cached.ts @@ -1,5 +1,5 @@ -import { createRuntimeApp } from "adapter"; import { App } from "bknd"; +import { createRuntimeApp } from "bknd/adapter"; import type { CloudflareBkndConfig, Context } from "../index"; export async function getCached(config: CloudflareBkndConfig, { env, ctx, ...args }: Context) { diff --git a/app/src/adapter/cloudflare/modes/durable.ts b/app/src/adapter/cloudflare/modes/durable.ts index 4c7233b..bd58f85 100644 --- a/app/src/adapter/cloudflare/modes/durable.ts +++ b/app/src/adapter/cloudflare/modes/durable.ts @@ -1,7 +1,7 @@ import { DurableObject } from "cloudflare:workers"; -import { createRuntimeApp, makeConfig } from "adapter"; -import type { CloudflareBkndConfig, Context } from "adapter/cloudflare"; import type { App, CreateAppConfig } from "bknd"; +import { createRuntimeApp, makeConfig } from "bknd/adapter"; +import type { CloudflareBkndConfig, Context } from "../index"; export async function getDurable(config: CloudflareBkndConfig, ctx: Context) { const { dobj } = config.bindings?.(ctx.env)!; diff --git a/app/src/adapter/cloudflare/modes/fresh.ts b/app/src/adapter/cloudflare/modes/fresh.ts index 30272bf..ef40987 100644 --- a/app/src/adapter/cloudflare/modes/fresh.ts +++ b/app/src/adapter/cloudflare/modes/fresh.ts @@ -1,5 +1,5 @@ -import { createRuntimeApp } from "adapter"; import type { App } from "bknd"; +import { createRuntimeApp } from "bknd/adapter"; import type { CloudflareBkndConfig, Context } from "../index"; export async function makeApp(config: CloudflareBkndConfig, ctx: Context) { diff --git a/app/src/adapter/index.ts b/app/src/adapter/index.ts index 492f55e..1c48f8b 100644 --- a/app/src/adapter/index.ts +++ b/app/src/adapter/index.ts @@ -1,8 +1,6 @@ -import type { IncomingMessage } from "node:http"; -import { App, type CreateAppConfig, registries } from "bknd"; -import { config as $config } from "core"; +import { App, type CreateAppConfig } from "bknd"; +import { config as $config } from "bknd/core"; import type { MiddlewareHandler } from "hono"; -import { StorageLocalAdapter } from "media/storage/adapters/StorageLocalAdapter"; import type { AdminControllerOptions } from "modules/server/AdminController"; export type BkndConfig = CreateAppConfig & { @@ -18,34 +16,6 @@ export type RuntimeBkndConfig = BkndConfig & { distPath?: string; }; -export function nodeRequestToRequest(req: IncomingMessage): Request { - let protocol = "http"; - try { - protocol = req.headers["x-forwarded-proto"] as string; - } catch (e) {} - const host = req.headers.host; - const url = `${protocol}://${host}${req.url}`; - const headers = new Headers(); - - for (const [key, value] of Object.entries(req.headers)) { - if (Array.isArray(value)) { - headers.append(key, value.join(", ")); - } else if (value) { - headers.append(key, value); - } - } - - const method = req.method || "GET"; - return new Request(url, { - method, - headers - }); -} - -export function registerLocalMediaAdapter() { - registries.media.register("local", StorageLocalAdapter); -} - export function makeConfig(config: BkndConfig, args?: Args): CreateAppConfig { let additionalConfig: CreateAppConfig = {}; if ("app" in config && config.app) { @@ -87,20 +57,14 @@ export async function createFrameworkApp( export async function createRuntimeApp( { serveStatic, - registerLocalMedia, adminOptions, ...config }: RuntimeBkndConfig & { serveStatic?: MiddlewareHandler | [string, MiddlewareHandler]; - registerLocalMedia?: boolean; adminOptions?: AdminControllerOptions | false; }, env?: Env ): Promise { - if (registerLocalMedia) { - registerLocalMediaAdapter(); - } - const app = App.create(makeConfig(config, env)); app.emgr.onEvent( diff --git a/app/src/adapter/nextjs/index.ts b/app/src/adapter/nextjs/index.ts index 957fa9e..e691401 100644 --- a/app/src/adapter/nextjs/index.ts +++ b/app/src/adapter/nextjs/index.ts @@ -1 +1,2 @@ export * from "./nextjs.adapter"; +export { registerLocalMediaAdapter } from "bknd/adapter/node"; diff --git a/app/src/adapter/nextjs/nextjs.adapter.ts b/app/src/adapter/nextjs/nextjs.adapter.ts index 7e30d26..7310727 100644 --- a/app/src/adapter/nextjs/nextjs.adapter.ts +++ b/app/src/adapter/nextjs/nextjs.adapter.ts @@ -1,6 +1,7 @@ import type { IncomingMessage, ServerResponse } from "node:http"; import { Api, type App } from "bknd"; -import { type FrameworkBkndConfig, createFrameworkApp, nodeRequestToRequest } from "../index"; +import { type FrameworkBkndConfig, createFrameworkApp } from "bknd/adapter"; +import { nodeRequestToRequest } from "bknd/adapter/node"; export type NextjsBkndConfig = FrameworkBkndConfig & { cleanSearch?: string[]; diff --git a/app/src/adapter/node/index.ts b/app/src/adapter/node/index.ts index bc5b7e5..41c6aaf 100644 --- a/app/src/adapter/node/index.ts +++ b/app/src/adapter/node/index.ts @@ -1,6 +1,37 @@ -export * from "./node.adapter"; -export { - StorageLocalAdapter, - type LocalAdapterConfig +import type { IncomingMessage } from "node:http"; +import { registries } from "bknd"; +import { + type LocalAdapterConfig, + StorageLocalAdapter } from "../../media/storage/adapters/StorageLocalAdapter"; -export { registerLocalMediaAdapter } from "../index"; + +export * from "./node.adapter"; +export { StorageLocalAdapter, type LocalAdapterConfig }; + +export function nodeRequestToRequest(req: IncomingMessage): Request { + let protocol = "http"; + try { + protocol = req.headers["x-forwarded-proto"] as string; + } catch (e) {} + const host = req.headers.host; + const url = `${protocol}://${host}${req.url}`; + const headers = new Headers(); + + for (const [key, value] of Object.entries(req.headers)) { + if (Array.isArray(value)) { + headers.append(key, value.join(", ")); + } else if (value) { + headers.append(key, value); + } + } + + const method = req.method || "GET"; + return new Request(url, { + method, + headers + }); +} + +export function registerLocalMediaAdapter() { + registries.media.register("local", StorageLocalAdapter); +} diff --git a/app/src/adapter/node/node.adapter.ts b/app/src/adapter/node/node.adapter.ts index 4f98466..326ab92 100644 --- a/app/src/adapter/node/node.adapter.ts +++ b/app/src/adapter/node/node.adapter.ts @@ -1,9 +1,10 @@ import path from "node:path"; import { serve as honoServe } from "@hono/node-server"; import { serveStatic } from "@hono/node-server/serve-static"; +import { registerLocalMediaAdapter } from "adapter/node/index"; import type { App } from "bknd"; -import { config as $config } from "core"; -import { type RuntimeBkndConfig, createRuntimeApp } from "../index"; +import { type RuntimeBkndConfig, createRuntimeApp } from "bknd/adapter"; +import { config as $config } from "bknd/core"; export type NodeBkndConfig = RuntimeBkndConfig & { port?: number; @@ -37,9 +38,9 @@ export function serve({ hostname, fetch: async (req: Request) => { if (!app) { + registerLocalMediaAdapter(); app = await createRuntimeApp({ ...config, - registerLocalMedia: true, serveStatic: serveStatic({ root }) }); } diff --git a/app/src/adapter/remix/index.ts b/app/src/adapter/remix/index.ts index e02c2c0..6c9f7db 100644 --- a/app/src/adapter/remix/index.ts +++ b/app/src/adapter/remix/index.ts @@ -1,2 +1,3 @@ export * from "./remix.adapter"; export * from "./AdminPage"; +export { registerLocalMediaAdapter } from "bknd/adapter/node"; diff --git a/app/src/adapter/remix/remix.adapter.ts b/app/src/adapter/remix/remix.adapter.ts index 2a267f2..22470bb 100644 --- a/app/src/adapter/remix/remix.adapter.ts +++ b/app/src/adapter/remix/remix.adapter.ts @@ -1,5 +1,5 @@ -import { type FrameworkBkndConfig, createFrameworkApp } from "adapter"; import type { App } from "bknd"; +import { type FrameworkBkndConfig, createFrameworkApp } from "bknd/adapter"; import { Api } from "bknd/client"; export type RemixBkndConfig = FrameworkBkndConfig; diff --git a/app/src/adapter/vite/index.ts b/app/src/adapter/vite/index.ts index 832bcde..0519488 100644 --- a/app/src/adapter/vite/index.ts +++ b/app/src/adapter/vite/index.ts @@ -1 +1,2 @@ export * from "./vite.adapter"; +export { registerLocalMediaAdapter } from "bknd/adapter/node"; diff --git a/app/src/adapter/vite/vite.adapter.ts b/app/src/adapter/vite/vite.adapter.ts index c8cb43d..dee0603 100644 --- a/app/src/adapter/vite/vite.adapter.ts +++ b/app/src/adapter/vite/vite.adapter.ts @@ -1,7 +1,8 @@ import { serveStatic } from "@hono/node-server/serve-static"; import { type DevServerOptions, default as honoViteDevServer } from "@hono/vite-dev-server"; -import { type RuntimeBkndConfig, createRuntimeApp } from "adapter"; import type { App } from "bknd"; +import { type RuntimeBkndConfig, createRuntimeApp } from "bknd/adapter"; +import { registerLocalMediaAdapter } from "bknd/adapter/node"; import { devServerConfig } from "./dev-server-config"; export type ViteBkndConfig = RuntimeBkndConfig & { @@ -28,10 +29,10 @@ ${addBkndContext ? "" : ""} } async function createApp(config: ViteBkndConfig = {}, env?: any) { + registerLocalMediaAdapter(); return await createRuntimeApp( { ...config, - registerLocalMedia: true, adminOptions: config.setAdminHtml === false ? undefined diff --git a/examples/astro/src/pages/api/[...api].ts b/examples/astro/src/pages/api/[...api].ts index 82d3c4e..e42c3dc 100644 --- a/examples/astro/src/pages/api/[...api].ts +++ b/examples/astro/src/pages/api/[...api].ts @@ -1,7 +1,6 @@ import type { APIContext } from "astro"; import { App } from "bknd"; -import { serve } from "bknd/adapter/astro"; -import { registerLocalMediaAdapter } from "bknd/adapter/node"; +import { registerLocalMediaAdapter, serve } from "bknd/adapter/astro"; import { boolean, em, entity, text } from "bknd/data"; import { secureRandomString } from "bknd/utils"; diff --git a/examples/remix/app/routes/api.$.ts b/examples/remix/app/routes/api.$.ts index 6bd0452..881ac60 100644 --- a/examples/remix/app/routes/api.$.ts +++ b/examples/remix/app/routes/api.$.ts @@ -1,6 +1,5 @@ import { App } from "bknd"; -import { registerLocalMediaAdapter } from "bknd/adapter/node"; -import { serve } from "bknd/adapter/remix"; +import { registerLocalMediaAdapter, serve } from "bknd/adapter/remix"; import { boolean, em, entity, text } from "bknd/data"; import { secureRandomString } from "bknd/utils";