aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/rfcs/README.md10
-rw-r--r--docs/rfcs/bun-app.tsx18
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