diff options
-rw-r--r-- | docs/rfcs/README.md | 10 | ||||
-rw-r--r-- | docs/rfcs/bun-app.tsx | 18 |
2 files changed, 26 insertions, 2 deletions
diff --git a/docs/rfcs/README.md b/docs/rfcs/README.md index 284ceaf3a..42360635c 100644 --- a/docs/rfcs/README.md +++ b/docs/rfcs/README.md @@ -16,3 +16,13 @@ The spec for bundler configuration object is defined in [`bun-build-config.ts`][ A class for orchestrating builds & HTTP. This class is a layer that sits on top of the `Bun.build` and `Bun.serve`, intended primarily for use by framework authors. - `class` [`Bun.App`][./bun-app.ts]: other possible names: `Bun.Builder`, `Bun.Engine`, `Bun.Framework` + +High-level: an `App` consists of a set of _bundlers_ and _routers_. During build/serve, Bun will: + +- iterate over all routers +- each router specifies a bundler configuration (the `build` key) and an `entrypoint`/`dir` + - if dir, all files in entrypoint are considered entrypoints +- everything is bundled +- the built results are served over HTTP + - each router has a route `prefix` from which its build assets are served + - for "mode: handler", the handler is loaded and called instead of served as a static asset diff --git a/docs/rfcs/bun-app.tsx b/docs/rfcs/bun-app.tsx index c8926253d..92e7bef41 100644 --- a/docs/rfcs/bun-app.tsx +++ b/docs/rfcs/bun-app.tsx @@ -1,13 +1,27 @@ import { FileSystemRouter, MatchedRoute, ServeOptions, Server } from "bun"; -import { BuildManifest, BuildConfig, BundlerConfig } from "./bun-build-config"; +import { BuildManifest, BuildConfig } from "./bun-build-config"; import { BuildResult } from "./bun-build"; interface AppConfig { - configs: Array<BuildConfig & { name: string }>; + configs: Array<Omit<BuildConfig, "entrypoints"> & { name: string }>; routers: Array<AppServeRouter>; } +/** + * + * Bun.App + * + * On build/serve: + * - iterate over all routers + * - each router specifies either an `entrypoint`/`dir` & build config + * - if dir, all files in entrypoint are considered entrypoints + * - everything is built + * - the built results are served over HTTP + * - each router has a route `prefix` from which its build assets are served + * - for "mode: handler", the handler is loaded and called instead of served as a static asset + */ + type AppServeRouter = | { // handler mode |