@textjs/app 0.0.0-stage → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -2
- package/bin/text.js +29 -0
- package/bin/text.ts +13 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/cli/build.d.ts +39 -0
- package/dist/cli/build.d.ts.map +1 -0
- package/dist/cli/build.js +157 -0
- package/dist/cli/build.js.map +1 -0
- package/dist/cli/config.d.ts +22 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +73 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/dev.d.ts +12 -0
- package/dist/cli/dev.d.ts.map +1 -0
- package/dist/cli/dev.js +49 -0
- package/dist/cli/dev.js.map +1 -0
- package/dist/cli/index.d.ts +26 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +192 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/run.d.ts +31 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +111 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/start.d.ts +14 -0
- package/dist/cli/start.d.ts.map +1 -0
- package/dist/cli/start.js +183 -0
- package/dist/cli/start.js.map +1 -0
- package/dist/cli/ui.d.ts +35 -0
- package/dist/cli/ui.d.ts.map +1 -0
- package/dist/cli/ui.js +73 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/client.d.ts +34 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +93 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +143 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +28 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +44 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +26 -0
- package/dist/context.js.map +1 -0
- package/dist/dev-errors.d.ts +68 -0
- package/dist/dev-errors.d.ts.map +1 -0
- package/dist/dev-errors.js +121 -0
- package/dist/dev-errors.js.map +1 -0
- package/dist/devtools.d.ts +64 -0
- package/dist/devtools.d.ts.map +1 -0
- package/dist/devtools.js +186 -0
- package/dist/devtools.js.map +1 -0
- package/dist/frame-mirror.d.ts +19 -0
- package/dist/frame-mirror.d.ts.map +1 -0
- package/dist/frame-mirror.js +141 -0
- package/dist/frame-mirror.js.map +1 -0
- package/dist/frame-protocol.d.ts +175 -0
- package/dist/frame-protocol.d.ts.map +1 -0
- package/dist/frame-protocol.js +369 -0
- package/dist/frame-protocol.js.map +1 -0
- package/dist/history.d.ts +54 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +152 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/link.d.ts +32 -0
- package/dist/link.d.ts.map +1 -0
- package/dist/link.js +54 -0
- package/dist/link.js.map +1 -0
- package/dist/live-player.d.ts +83 -0
- package/dist/live-player.d.ts.map +1 -0
- package/dist/live-player.js +413 -0
- package/dist/live-player.js.map +1 -0
- package/dist/live-protocol.d.ts +132 -0
- package/dist/live-protocol.d.ts.map +1 -0
- package/dist/live-protocol.js +278 -0
- package/dist/live-protocol.js.map +1 -0
- package/dist/live-stub.d.ts +10 -0
- package/dist/live-stub.d.ts.map +1 -0
- package/dist/live-stub.js +32 -0
- package/dist/live-stub.js.map +1 -0
- package/dist/mcp/cli.d.ts +22 -0
- package/dist/mcp/cli.d.ts.map +1 -0
- package/dist/mcp/cli.js +177 -0
- package/dist/mcp/cli.js.map +1 -0
- package/dist/mcp/frame.d.ts +58 -0
- package/dist/mcp/frame.d.ts.map +1 -0
- package/dist/mcp/frame.js +169 -0
- package/dist/mcp/frame.js.map +1 -0
- package/dist/mcp/index.d.ts +15 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +15 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/inspect.d.ts +95 -0
- package/dist/mcp/inspect.d.ts.map +1 -0
- package/dist/mcp/inspect.js +386 -0
- package/dist/mcp/inspect.js.map +1 -0
- package/dist/mcp/keys.d.ts +20 -0
- package/dist/mcp/keys.d.ts.map +1 -0
- package/dist/mcp/keys.js +87 -0
- package/dist/mcp/keys.js.map +1 -0
- package/dist/mcp/logs.d.ts +63 -0
- package/dist/mcp/logs.d.ts.map +1 -0
- package/dist/mcp/logs.js +217 -0
- package/dist/mcp/logs.js.map +1 -0
- package/dist/mcp/server.d.ts +64 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +485 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/session.d.ts +230 -0
- package/dist/mcp/session.d.ts.map +1 -0
- package/dist/mcp/session.js +742 -0
- package/dist/mcp/session.js.map +1 -0
- package/dist/navigation-errors.d.ts +28 -0
- package/dist/navigation-errors.d.ts.map +1 -0
- package/dist/navigation-errors.js +43 -0
- package/dist/navigation-errors.js.map +1 -0
- package/dist/navigation.d.ts +21 -0
- package/dist/navigation.d.ts.map +1 -0
- package/dist/navigation.js +33 -0
- package/dist/navigation.js.map +1 -0
- package/dist/router.d.ts +76 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +296 -0
- package/dist/router.js.map +1 -0
- package/dist/routing.d.ts +101 -0
- package/dist/routing.d.ts.map +1 -0
- package/dist/routing.js +286 -0
- package/dist/routing.js.map +1 -0
- package/dist/server/adapters/build-step.d.ts +34 -0
- package/dist/server/adapters/build-step.d.ts.map +1 -0
- package/dist/server/adapters/build-step.js +112 -0
- package/dist/server/adapters/build-step.js.map +1 -0
- package/dist/server/adapters/bun.d.ts +8 -0
- package/dist/server/adapters/bun.d.ts.map +1 -0
- package/dist/server/adapters/bun.js +89 -0
- package/dist/server/adapters/bun.js.map +1 -0
- package/dist/server/adapters/bundle.d.ts +21 -0
- package/dist/server/adapters/bundle.d.ts.map +1 -0
- package/dist/server/adapters/bundle.js +86 -0
- package/dist/server/adapters/bundle.js.map +1 -0
- package/dist/server/adapters/cloudflare.d.ts +29 -0
- package/dist/server/adapters/cloudflare.d.ts.map +1 -0
- package/dist/server/adapters/cloudflare.js +105 -0
- package/dist/server/adapters/cloudflare.js.map +1 -0
- package/dist/server/adapters/index.d.ts +10 -0
- package/dist/server/adapters/index.d.ts.map +1 -0
- package/dist/server/adapters/index.js +24 -0
- package/dist/server/adapters/index.js.map +1 -0
- package/dist/server/adapters/runtime-node.d.ts +16 -0
- package/dist/server/adapters/runtime-node.d.ts.map +1 -0
- package/dist/server/adapters/runtime-node.js +29 -0
- package/dist/server/adapters/runtime-node.js.map +1 -0
- package/dist/server/adapters/runtime.d.ts +42 -0
- package/dist/server/adapters/runtime.d.ts.map +1 -0
- package/dist/server/adapters/runtime.js +115 -0
- package/dist/server/adapters/runtime.js.map +1 -0
- package/dist/server/adapters/shared.d.ts +66 -0
- package/dist/server/adapters/shared.d.ts.map +1 -0
- package/dist/server/adapters/shared.js +124 -0
- package/dist/server/adapters/shared.js.map +1 -0
- package/dist/server/adapters/static.d.ts +9 -0
- package/dist/server/adapters/static.d.ts.map +1 -0
- package/dist/server/adapters/static.js +70 -0
- package/dist/server/adapters/static.js.map +1 -0
- package/dist/server/adapters/vercel.d.ts +43 -0
- package/dist/server/adapters/vercel.d.ts.map +1 -0
- package/dist/server/adapters/vercel.js +119 -0
- package/dist/server/adapters/vercel.js.map +1 -0
- package/dist/server/bun-jsx.d.ts +18 -0
- package/dist/server/bun-jsx.d.ts.map +1 -0
- package/dist/server/bun-jsx.js +56 -0
- package/dist/server/bun-jsx.js.map +1 -0
- package/dist/server/cache-route.d.ts +38 -0
- package/dist/server/cache-route.d.ts.map +1 -0
- package/dist/server/cache-route.js +109 -0
- package/dist/server/cache-route.js.map +1 -0
- package/dist/server/cache.d.ts +131 -0
- package/dist/server/cache.d.ts.map +1 -0
- package/dist/server/cache.js +409 -0
- package/dist/server/cache.js.map +1 -0
- package/dist/server/frames.d.ts +45 -0
- package/dist/server/frames.d.ts.map +1 -0
- package/dist/server/frames.js +294 -0
- package/dist/server/frames.js.map +1 -0
- package/dist/server/http.d.ts +80 -0
- package/dist/server/http.d.ts.map +1 -0
- package/dist/server/http.js +453 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server/jsx-dev-runtime.d.ts +5 -0
- package/dist/server/jsx-dev-runtime.d.ts.map +1 -0
- package/dist/server/jsx-dev-runtime.js +6 -0
- package/dist/server/jsx-dev-runtime.js.map +1 -0
- package/dist/server/jsx-runtime.d.ts +10 -0
- package/dist/server/jsx-runtime.d.ts.map +1 -0
- package/dist/server/jsx-runtime.js +11 -0
- package/dist/server/jsx-runtime.js.map +1 -0
- package/dist/server/live-app.d.ts +87 -0
- package/dist/server/live-app.d.ts.map +1 -0
- package/dist/server/live-app.js +307 -0
- package/dist/server/live-app.js.map +1 -0
- package/dist/server/live-build.d.ts +70 -0
- package/dist/server/live-build.d.ts.map +1 -0
- package/dist/server/live-build.js +222 -0
- package/dist/server/live-build.js.map +1 -0
- package/dist/server/live-dev.d.ts +62 -0
- package/dist/server/live-dev.d.ts.map +1 -0
- package/dist/server/live-dev.js +313 -0
- package/dist/server/live-dev.js.map +1 -0
- package/dist/server/live-manifest.d.ts +23 -0
- package/dist/server/live-manifest.d.ts.map +1 -0
- package/dist/server/live-manifest.js +7 -0
- package/dist/server/live-manifest.js.map +1 -0
- package/dist/server/live-prod.d.ts +30 -0
- package/dist/server/live-prod.d.ts.map +1 -0
- package/dist/server/live-prod.js +97 -0
- package/dist/server/live-prod.js.map +1 -0
- package/dist/server/live-routes.d.ts +72 -0
- package/dist/server/live-routes.d.ts.map +1 -0
- package/dist/server/live-routes.js +274 -0
- package/dist/server/live-routes.js.map +1 -0
- package/dist/server/live-web.d.ts +16 -0
- package/dist/server/live-web.d.ts.map +1 -0
- package/dist/server/live-web.js +159 -0
- package/dist/server/live-web.js.map +1 -0
- package/dist/server/live.d.ts +138 -0
- package/dist/server/live.d.ts.map +1 -0
- package/dist/server/live.js +542 -0
- package/dist/server/live.js.map +1 -0
- package/dist/server/middleware-node.d.ts +48 -0
- package/dist/server/middleware-node.d.ts.map +1 -0
- package/dist/server/middleware-node.js +167 -0
- package/dist/server/middleware-node.js.map +1 -0
- package/dist/server/middleware-runtime.d.ts +97 -0
- package/dist/server/middleware-runtime.d.ts.map +1 -0
- package/dist/server/middleware-runtime.js +447 -0
- package/dist/server/middleware-runtime.js.map +1 -0
- package/dist/server/middleware.d.ts +145 -0
- package/dist/server/middleware.d.ts.map +1 -0
- package/dist/server/middleware.js +365 -0
- package/dist/server/middleware.js.map +1 -0
- package/dist/server/ppr.d.ts +22 -0
- package/dist/server/ppr.d.ts.map +1 -0
- package/dist/server/ppr.js +58 -0
- package/dist/server/ppr.js.map +1 -0
- package/dist/server/scan.d.ts +48 -0
- package/dist/server/scan.d.ts.map +1 -0
- package/dist/server/scan.js +161 -0
- package/dist/server/scan.js.map +1 -0
- package/dist/server/server-components.d.ts +65 -0
- package/dist/server/server-components.d.ts.map +1 -0
- package/dist/server/server-components.js +215 -0
- package/dist/server/server-components.js.map +1 -0
- package/dist/terminal.d.ts +5 -0
- package/dist/terminal.d.ts.map +1 -0
- package/dist/terminal.js +5 -0
- package/dist/terminal.js.map +1 -0
- package/dist/testing.d.ts +5 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +5 -0
- package/dist/testing.js.map +1 -0
- package/dist/vite-plugin.d.ts +51 -0
- package/dist/vite-plugin.d.ts.map +1 -0
- package/dist/vite-plugin.js +403 -0
- package/dist/vite-plugin.js.map +1 -0
- package/package.json +130 -4
- package/src/cli/build.ts +182 -0
- package/src/cli/config.ts +72 -0
- package/src/cli/dev.ts +54 -0
- package/src/cli/index.ts +185 -0
- package/src/cli/run.ts +124 -0
- package/src/cli/start.ts +194 -0
- package/src/cli/ui.ts +93 -0
- package/src/client.tsx +122 -0
- package/src/config.ts +155 -0
- package/src/context.ts +69 -0
- package/src/dev-errors.ts +167 -0
- package/src/devtools.tsx +419 -0
- package/src/frame-mirror.ts +145 -0
- package/src/frame-protocol.ts +435 -0
- package/src/history.ts +201 -0
- package/src/index.ts +9 -0
- package/src/link.tsx +108 -0
- package/src/live-player.ts +449 -0
- package/src/live-protocol.ts +317 -0
- package/src/live-stub.tsx +32 -0
- package/src/mcp/cli.ts +188 -0
- package/src/mcp/frame.ts +224 -0
- package/src/mcp/index.ts +15 -0
- package/src/mcp/inspect.ts +445 -0
- package/src/mcp/keys.ts +86 -0
- package/src/mcp/logs.ts +225 -0
- package/src/mcp/server.ts +595 -0
- package/src/mcp/session.ts +821 -0
- package/src/navigation-errors.ts +60 -0
- package/src/navigation.ts +44 -0
- package/src/router.tsx +497 -0
- package/src/routing.ts +344 -0
- package/src/server/adapters/build-step.ts +135 -0
- package/src/server/adapters/bun.ts +92 -0
- package/src/server/adapters/bundle.ts +97 -0
- package/src/server/adapters/cloudflare.ts +111 -0
- package/src/server/adapters/index.ts +29 -0
- package/src/server/adapters/runtime-node.ts +34 -0
- package/src/server/adapters/runtime.ts +145 -0
- package/src/server/adapters/shared.ts +159 -0
- package/src/server/adapters/static.ts +68 -0
- package/src/server/adapters/vercel.ts +149 -0
- package/src/server/bun-jsx.ts +65 -0
- package/src/server/cache-route.ts +139 -0
- package/src/server/cache.ts +498 -0
- package/src/server/frames.ts +326 -0
- package/src/server/http.ts +467 -0
- package/src/server/jsx-dev-runtime.ts +9 -0
- package/src/server/jsx-runtime.ts +13 -0
- package/src/server/live-app.tsx +374 -0
- package/src/server/live-build.ts +258 -0
- package/src/server/live-dev.ts +357 -0
- package/src/server/live-manifest.ts +25 -0
- package/src/server/live-prod.ts +120 -0
- package/src/server/live-routes.ts +298 -0
- package/src/server/live-web.ts +170 -0
- package/src/server/live.ts +551 -0
- package/src/server/middleware-node.ts +168 -0
- package/src/server/middleware-runtime.ts +478 -0
- package/src/server/middleware.ts +451 -0
- package/src/server/ppr.ts +62 -0
- package/src/server/scan.ts +190 -0
- package/src/server/server-components.ts +224 -0
- package/src/terminal.ts +5 -0
- package/src/testing.ts +5 -0
- package/src/vite-plugin.ts +413 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { createReadStream, existsSync, readFileSync, statSync } from "node:fs";
|
|
2
|
+
import { createServer } from "node:http";
|
|
3
|
+
import { extname, join, normalize, resolve, sep } from "node:path";
|
|
4
|
+
import { pathToFileURL } from "node:url";
|
|
5
|
+
import { BRAND_MARK, txError, txMessage } from "@textjs/core";
|
|
6
|
+
import { normalizeBasePath } from "../config.js";
|
|
7
|
+
import { matchApiRoute } from "../server/scan.js";
|
|
8
|
+
import { loadLiveProduction } from "../server/live-prod.js";
|
|
9
|
+
import { applyRewrites, compileRewrite, isAllowedHost, isValidHostHeader, normalizeRequestTarget, proxyRequest, requestOrigin, sendWebResponse, toWebRequest } from "../server/http.js";
|
|
10
|
+
import { loadServerRuntime } from "../server/adapters/runtime-node.js";
|
|
11
|
+
import { runRouteHandlerWithCache } from "../server/cache-route.js";
|
|
12
|
+
import { runNodeMiddleware } from "../server/middleware-node.js";
|
|
13
|
+
import { META_DIR } from "./build.js";
|
|
14
|
+
import { loadTextConfig } from "./config.js";
|
|
15
|
+
import { banner, color, fail, ok } from "./ui.js";
|
|
16
|
+
const MIME = {
|
|
17
|
+
".html": "text/html; charset=utf-8",
|
|
18
|
+
".js": "text/javascript; charset=utf-8",
|
|
19
|
+
".mjs": "text/javascript; charset=utf-8",
|
|
20
|
+
".css": "text/css; charset=utf-8",
|
|
21
|
+
".json": "application/json; charset=utf-8",
|
|
22
|
+
".svg": "image/svg+xml",
|
|
23
|
+
".png": "image/png",
|
|
24
|
+
".jpg": "image/jpeg",
|
|
25
|
+
".ico": "image/x-icon",
|
|
26
|
+
".wasm": "application/wasm",
|
|
27
|
+
".txt": "text/plain; charset=utf-8",
|
|
28
|
+
".woff2": "font/woff2",
|
|
29
|
+
".map": "application/json; charset=utf-8",
|
|
30
|
+
};
|
|
31
|
+
export async function startProductionServer(opts) {
|
|
32
|
+
const started = performance.now();
|
|
33
|
+
const log = opts.log ?? true;
|
|
34
|
+
const { config } = await loadTextConfig(opts.root, "serve", "production");
|
|
35
|
+
const outDir = resolve(opts.root, config.outDir ?? "dist");
|
|
36
|
+
const indexFile = join(outDir, "index.html");
|
|
37
|
+
if (!existsSync(indexFile)) {
|
|
38
|
+
throw txError("TX017", config.outDir ?? "dist");
|
|
39
|
+
}
|
|
40
|
+
const basePath = normalizeBasePath(config.basePath);
|
|
41
|
+
const rewrites = (typeof config.rewrites === "function" ? await config.rewrites() : (config.rewrites ?? [])).map(compileRewrite);
|
|
42
|
+
const proxies = Object.entries(config.proxy ?? {}).map(([prefix, v]) => [prefix, typeof v === "string" ? { target: v } : v]);
|
|
43
|
+
const apiFile = join(outDir, META_DIR, "server", "api.mjs");
|
|
44
|
+
const api = existsSync(apiFile) ? (await import(pathToFileURL(apiFile).href)) : null;
|
|
45
|
+
const indexHtml = readFileSync(indexFile);
|
|
46
|
+
// `middleware.ts` and `cacheHandler` (bundled by `text build`).
|
|
47
|
+
const runtime = await loadServerRuntime(outDir);
|
|
48
|
+
// Prerendered console shells (PPR) and server-rendered routes (`runtime = "server"`).
|
|
49
|
+
const live = await loadLiveProduction(outDir, {
|
|
50
|
+
log: log ? (m) => console.log(color.gray(m)) : undefined,
|
|
51
|
+
onError: (e) => console.error(fail(e instanceof Error ? (e.stack ?? e.message) : String(e))),
|
|
52
|
+
middleware: runtime?.middleware,
|
|
53
|
+
trustProxy: config.server?.trustProxy ?? process.env.TRUST_PROXY === "1",
|
|
54
|
+
origin: config.server?.origin ?? process.env.TEXTJS_ORIGIN,
|
|
55
|
+
});
|
|
56
|
+
const port = opts.port ?? 3000;
|
|
57
|
+
// Loopback only unless `--host` is passed explicitly.
|
|
58
|
+
const host = opts.host ?? "127.0.0.1";
|
|
59
|
+
const loopback = host === "127.0.0.1" || host === "localhost" || host === "::1" || host === "[::1]";
|
|
60
|
+
const originOptions = {
|
|
61
|
+
origin: config.server?.origin ?? process.env.TEXTJS_ORIGIN,
|
|
62
|
+
trustProxy: config.server?.trustProxy ?? process.env.TRUST_PROXY === "1",
|
|
63
|
+
};
|
|
64
|
+
// DNS rebinding: a loopback-bound server only answers loopback / IP / allowed host names.
|
|
65
|
+
const allowedHosts = config.server?.allowedHosts ?? [];
|
|
66
|
+
const notFound = (res) => {
|
|
67
|
+
res.statusCode = 404;
|
|
68
|
+
res.setHeader("Content-Type", "text/plain; charset=utf-8");
|
|
69
|
+
res.end("404 | This page could not be found.");
|
|
70
|
+
};
|
|
71
|
+
const server = createServer((req, res) => {
|
|
72
|
+
const t0 = performance.now();
|
|
73
|
+
const done = () => {
|
|
74
|
+
if (log)
|
|
75
|
+
console.log(color.gray(` ${req.method} ${(req.url ?? "/").split("?")[0]} ${res.statusCode} in ${Math.round(performance.now() - t0)}ms`));
|
|
76
|
+
};
|
|
77
|
+
void (async () => {
|
|
78
|
+
if (loopback ? !isAllowedHost(req.headers.host, allowedHosts) : !isValidHostHeader(req.headers.host)) {
|
|
79
|
+
res.statusCode = loopback ? 403 : 400;
|
|
80
|
+
res.setHeader("Content-Type", "text/plain; charset=utf-8");
|
|
81
|
+
res.end(loopback ? `${BRAND_MARK} ${txMessage("TX028", JSON.stringify((req.headers.host ?? "").replace(/:\d+$/, "")), "server.allowedHosts")}` : "400 | Bad Request");
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
req.url = normalizeRequestTarget(req.url);
|
|
85
|
+
const origin = requestOrigin(req, originOptions);
|
|
86
|
+
let url = req.url;
|
|
87
|
+
if (basePath) {
|
|
88
|
+
if (url === basePath || url.startsWith(`${basePath}/`) || url.startsWith(`${basePath}?`))
|
|
89
|
+
url = url.slice(basePath.length) || "/";
|
|
90
|
+
else
|
|
91
|
+
return notFound(res);
|
|
92
|
+
}
|
|
93
|
+
if (runtime?.middleware) {
|
|
94
|
+
const next = await runNodeMiddleware(runtime.middleware, req, res, { basePath, origin });
|
|
95
|
+
if (next === null)
|
|
96
|
+
return;
|
|
97
|
+
url = next;
|
|
98
|
+
}
|
|
99
|
+
const rewritten = rewrites.length > 0 ? applyRewrites(rewrites, url) : null;
|
|
100
|
+
if (rewritten) {
|
|
101
|
+
if (/^[a-z]+:\/\//i.test(rewritten))
|
|
102
|
+
return proxyRequest(req, res, rewritten, origin);
|
|
103
|
+
url = rewritten;
|
|
104
|
+
}
|
|
105
|
+
for (const [prefix, target] of proxies) {
|
|
106
|
+
if (url.startsWith(prefix)) {
|
|
107
|
+
const path = target.rewrite ? target.rewrite(url) : url;
|
|
108
|
+
return proxyRequest(req, res, new URL(path, target.target).href, origin);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (live && (await live.handle(req, res, url)))
|
|
112
|
+
return;
|
|
113
|
+
let pathname;
|
|
114
|
+
try {
|
|
115
|
+
pathname = decodeURIComponent(url.split("?")[0] ?? "/");
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
res.statusCode = 400;
|
|
119
|
+
return res.end("400 | Bad Request");
|
|
120
|
+
}
|
|
121
|
+
if (api) {
|
|
122
|
+
const m = matchApiRoute(api.manifest, pathname);
|
|
123
|
+
const mod = m ? api.handlers[m.file] : undefined;
|
|
124
|
+
if (m && mod) {
|
|
125
|
+
const request = toWebRequest(Object.assign(req, { url }), origin, res);
|
|
126
|
+
return sendWebResponse(res, await runRouteHandlerWithCache(mod, request, { params: m.params, pattern: m.pattern, pathname }), request.method);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (req.method !== "GET" && req.method !== "HEAD") {
|
|
130
|
+
res.statusCode = 405;
|
|
131
|
+
return res.end();
|
|
132
|
+
}
|
|
133
|
+
const filePath = normalize(join(outDir, pathname));
|
|
134
|
+
const inside = filePath === outDir || filePath.startsWith(outDir + sep);
|
|
135
|
+
const hidden = pathname.split(/[/\\]/).some((p) => p.startsWith(".") && p.length > 1);
|
|
136
|
+
if (inside && !hidden && existsSync(filePath) && statSync(filePath).isFile()) {
|
|
137
|
+
res.statusCode = 200;
|
|
138
|
+
res.setHeader("Content-Type", MIME[extname(filePath)] ?? "application/octet-stream");
|
|
139
|
+
res.setHeader("Cache-Control", pathname.startsWith("/assets/") ? "public, max-age=31536000, immutable" : "public, max-age=0, must-revalidate");
|
|
140
|
+
if (req.method === "HEAD")
|
|
141
|
+
return res.end();
|
|
142
|
+
createReadStream(filePath).pipe(res);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const last = pathname.split("/").pop() ?? "";
|
|
146
|
+
if (last.includes(".") || hidden)
|
|
147
|
+
return notFound(res);
|
|
148
|
+
res.statusCode = 200;
|
|
149
|
+
res.setHeader("Content-Type", MIME[".html"]);
|
|
150
|
+
res.setHeader("Cache-Control", "public, max-age=0, must-revalidate");
|
|
151
|
+
res.end(req.method === "HEAD" ? undefined : indexHtml);
|
|
152
|
+
})()
|
|
153
|
+
.catch((error) => {
|
|
154
|
+
if (log)
|
|
155
|
+
console.error(fail(error instanceof Error ? (error.stack ?? error.message) : String(error)));
|
|
156
|
+
if (!res.headersSent)
|
|
157
|
+
res.statusCode = 500;
|
|
158
|
+
res.end();
|
|
159
|
+
})
|
|
160
|
+
.finally(done);
|
|
161
|
+
});
|
|
162
|
+
await new Promise((resolveListen, reject) => {
|
|
163
|
+
server.once("error", reject);
|
|
164
|
+
server.listen(port, host, () => resolveListen());
|
|
165
|
+
});
|
|
166
|
+
const addr = server.address();
|
|
167
|
+
const url = `http://${host === "0.0.0.0" || host === "127.0.0.1" ? "localhost" : host}:${addr.port}${basePath}`;
|
|
168
|
+
if (log) {
|
|
169
|
+
console.log(`\n${banner([["Local", color.cyan(url)]])}\n`);
|
|
170
|
+
console.log(ok("Starting..."));
|
|
171
|
+
console.log(ok(`Ready in ${Math.round(performance.now() - started)}ms`));
|
|
172
|
+
console.log("");
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
server,
|
|
176
|
+
url,
|
|
177
|
+
close: () => new Promise((r) => {
|
|
178
|
+
live?.close();
|
|
179
|
+
server.close(() => r());
|
|
180
|
+
}),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/cli/start.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/ui.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { FlatRoute } from "../routing.js";
|
|
2
|
+
export declare const color: {
|
|
3
|
+
bold: (s: string) => string;
|
|
4
|
+
dim: (s: string) => string;
|
|
5
|
+
red: (s: string) => string;
|
|
6
|
+
green: (s: string) => string;
|
|
7
|
+
yellow: (s: string) => string;
|
|
8
|
+
cyan: (s: string) => string;
|
|
9
|
+
magenta: (s: string) => string;
|
|
10
|
+
gray: (s: string) => string;
|
|
11
|
+
};
|
|
12
|
+
export declare function stripAnsi(s: string): string;
|
|
13
|
+
export declare function brand(): string;
|
|
14
|
+
export declare function banner(lines: Array<[string, string]>): string;
|
|
15
|
+
export declare const ok: (msg: string) => string;
|
|
16
|
+
export declare const fail: (msg: string) => string;
|
|
17
|
+
export declare const info: (msg: string) => string;
|
|
18
|
+
export interface SummaryRoute {
|
|
19
|
+
pattern: string;
|
|
20
|
+
dynamic: boolean;
|
|
21
|
+
target: string;
|
|
22
|
+
/** `export const runtime = "server"`. */
|
|
23
|
+
server?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/** The Next.js-style route summary table printed by `text build`. */
|
|
26
|
+
export declare function routeTable(routes: readonly SummaryRoute[]): string;
|
|
27
|
+
export declare const LEGEND: string;
|
|
28
|
+
/** Appended to {@link LEGEND} when the app has server-rendered routes. */
|
|
29
|
+
export declare const SERVER_LEGEND = "\u25C7 (Server) rendered on the server, streamed as frames";
|
|
30
|
+
export declare function summarize(pages: readonly FlatRoute[], api: ReadonlyArray<{
|
|
31
|
+
pattern: string;
|
|
32
|
+
}>, serverPatterns?: ReadonlySet<string>): SummaryRoute[];
|
|
33
|
+
export declare function formatBytes(n: number): string;
|
|
34
|
+
export declare function devtoolsHint(): string;
|
|
35
|
+
//# sourceMappingURL=ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAc5C,eAAO,MAAM,KAAK;cAHZ,MAAM,KAAG,MAAM;aAAf,MAAM,KAAG,MAAM;aAAf,MAAM,KAAG,MAAM;eAAf,MAAM,KAAG,MAAM;gBAAf,MAAM,KAAG,MAAM;cAAf,MAAM,KAAG,MAAM;iBAAf,MAAM,KAAG,MAAM;cAAf,MAAM,KAAG,MAAM;CAYpB,CAAC;AAEF,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,KAAK,IAAI,MAAM,CAE9B;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAI7D;AAED,eAAO,MAAM,EAAE,GAAI,KAAK,MAAM,KAAG,MAAuC,CAAC;AACzE,eAAO,MAAM,IAAI,GAAI,KAAK,MAAM,KAAG,MAAqC,CAAC;AACzE,eAAO,MAAM,IAAI,GAAI,KAAK,MAAM,KAAG,MAAsC,CAAC;AAE1E,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAKD,qEAAqE;AACrE,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,CAUlE;AAED,eAAO,MAAM,MAAM,QAAqH,CAAC;AACzI,0EAA0E;AAC1E,eAAO,MAAM,aAAa,kEAA6D,CAAC;AAExF,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,GAAG,EAAE,aAAa,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,cAAc,GAAE,WAAW,CAAC,MAAM,CAAa,GAAG,YAAY,EAAE,CAU/J;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,wBAAgB,YAAY,IAAI,MAAM,CAGrC"}
|
package/dist/cli/ui.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { BRAND_MARK, ENGINE_NAME, VERSION } from "@textjs/core";
|
|
2
|
+
const enabled = () => {
|
|
3
|
+
if (typeof process === "undefined")
|
|
4
|
+
return false;
|
|
5
|
+
if (process.env.NO_COLOR !== undefined && process.env.NO_COLOR !== "")
|
|
6
|
+
return false;
|
|
7
|
+
if (process.env.FORCE_COLOR !== undefined && process.env.FORCE_COLOR !== "0")
|
|
8
|
+
return true;
|
|
9
|
+
return Boolean(process.stdout && process.stdout.isTTY);
|
|
10
|
+
};
|
|
11
|
+
const wrap = (open, close) => (s) => enabled() ? `\x1b[${open}m${s}\x1b[${close}m` : s;
|
|
12
|
+
export const color = {
|
|
13
|
+
bold: wrap(1, 22),
|
|
14
|
+
dim: wrap(2, 22),
|
|
15
|
+
red: wrap(31, 39),
|
|
16
|
+
green: wrap(32, 39),
|
|
17
|
+
yellow: wrap(33, 39),
|
|
18
|
+
cyan: wrap(36, 39),
|
|
19
|
+
magenta: wrap(35, 39),
|
|
20
|
+
gray: wrap(90, 39),
|
|
21
|
+
};
|
|
22
|
+
export function stripAnsi(s) {
|
|
23
|
+
return s.replace(/\x1b\[[0-9;]*m/g, "");
|
|
24
|
+
}
|
|
25
|
+
export function brand() {
|
|
26
|
+
return `${color.bold(`${BRAND_MARK} Text.js ${VERSION}`)} ${color.dim(`(${ENGINE_NAME})`)}`;
|
|
27
|
+
}
|
|
28
|
+
export function banner(lines) {
|
|
29
|
+
const out = [` ${brand()}`];
|
|
30
|
+
for (const [k, v] of lines)
|
|
31
|
+
out.push(` - ${`${k}:`.padEnd(14)}${v}`);
|
|
32
|
+
return out.join("\n");
|
|
33
|
+
}
|
|
34
|
+
export const ok = (msg) => ` ${color.green("✓")} ${msg}`;
|
|
35
|
+
export const fail = (msg) => ` ${color.red("⨯")} ${msg}`;
|
|
36
|
+
export const info = (msg) => ` ${color.gray("○")} ${msg}`;
|
|
37
|
+
const ROUTE_COL = 37;
|
|
38
|
+
const TYPE_COL = 11;
|
|
39
|
+
/** The Next.js-style route summary table printed by `text build`. */
|
|
40
|
+
export function routeTable(routes) {
|
|
41
|
+
const lines = [`${color.bold("Route (app)".padEnd(ROUTE_COL + 4))}${color.bold("Type".padEnd(TYPE_COL))}${color.bold("Target")}`];
|
|
42
|
+
routes.forEach((r, i) => {
|
|
43
|
+
const corner = routes.length === 1 ? "─" : i === 0 ? "┌" : i === routes.length - 1 ? "└" : "├";
|
|
44
|
+
const sym = r.server ? "◇" : r.dynamic ? "ƒ" : "○";
|
|
45
|
+
const pattern = r.pattern.length > ROUTE_COL - 1 ? `${r.pattern.slice(0, ROUTE_COL - 2)}…` : r.pattern;
|
|
46
|
+
const type = r.server ? "Server" : r.dynamic ? "Dynamic" : "Static";
|
|
47
|
+
lines.push(`${color.gray(corner)} ${sym} ${pattern.padEnd(ROUTE_COL)}${type.padEnd(TYPE_COL)}${color.gray(r.target)}`);
|
|
48
|
+
});
|
|
49
|
+
return lines.join("\n");
|
|
50
|
+
}
|
|
51
|
+
export const LEGEND = ["○ (Static) prerendered as static console cells", "ƒ (Dynamic) on-demand console reconciliation"].join("\n");
|
|
52
|
+
/** Appended to {@link LEGEND} when the app has server-rendered routes. */
|
|
53
|
+
export const SERVER_LEGEND = "◇ (Server) rendered on the server, streamed as frames";
|
|
54
|
+
export function summarize(pages, api, serverPatterns = new Set()) {
|
|
55
|
+
const out = pages.map((p) => serverPatterns.has(p.pattern) ? { pattern: p.pattern, dynamic: true, server: true, target: "frame player (SSE)" } : { pattern: p.pattern, dynamic: p.dynamic, target: "console.log (%c)" });
|
|
56
|
+
if (!out.some((r) => r.pattern === "/_not-found")) {
|
|
57
|
+
const nf = { pattern: "/_not-found", dynamic: false, target: "console.log (%c)" };
|
|
58
|
+
out.splice(out[0]?.pattern === "/" ? 1 : 0, 0, nf);
|
|
59
|
+
}
|
|
60
|
+
for (const a of api)
|
|
61
|
+
out.push({ pattern: a.pattern, dynamic: true, target: "Route Handler" });
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
export function formatBytes(n) {
|
|
65
|
+
if (n < 1000)
|
|
66
|
+
return `${n} B`;
|
|
67
|
+
return `${(n / 1000).toFixed(1)} kB`;
|
|
68
|
+
}
|
|
69
|
+
export function devtoolsHint() {
|
|
70
|
+
const keys = process.platform === "darwin" ? "⌘⌥J" : "Ctrl+Shift+J";
|
|
71
|
+
return info(`Open DevTools Console (${keys}) to view your app`);
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@textjs/app/client` — browser bootstrap used by the virtual entry that `text dev`
|
|
3
|
+
* and `text build` generate: mounts the console root, the App Router, the
|
|
4
|
+
* Dev Overlay and the DOM `<FocusPad>`.
|
|
5
|
+
*/
|
|
6
|
+
import { type ConsoleRoot } from "@textjs/react";
|
|
7
|
+
import { type ClientConfig } from "./config.js";
|
|
8
|
+
import { type HotContextLike } from "./devtools.js";
|
|
9
|
+
import { type RouterHistory } from "./history.js";
|
|
10
|
+
import type { RouteManifest } from "./routing.js";
|
|
11
|
+
export interface BootOptions {
|
|
12
|
+
routes: RouteManifest;
|
|
13
|
+
config?: Partial<ClientConfig>;
|
|
14
|
+
/** `import.meta.env.DEV`. */
|
|
15
|
+
dev?: boolean;
|
|
16
|
+
/** `import.meta.hot`. */
|
|
17
|
+
hot?: HotContextLike;
|
|
18
|
+
/** Element (or id) for the DOM `<FocusPad>` (default `#__textjs`, created when missing). */
|
|
19
|
+
container?: HTMLElement | string;
|
|
20
|
+
}
|
|
21
|
+
export interface TextApp {
|
|
22
|
+
root: ConsoleRoot;
|
|
23
|
+
history: RouterHistory;
|
|
24
|
+
/** Swap the route manifest (HMR when route files change). */
|
|
25
|
+
updateRoutes(routes: RouteManifest): void;
|
|
26
|
+
}
|
|
27
|
+
declare global {
|
|
28
|
+
interface Window {
|
|
29
|
+
__TEXTJS_APP__?: TextApp;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** Boot a Text.js app into `console.log`. */
|
|
33
|
+
export declare function bootTextApp(options: BootOptions): Promise<TextApp>;
|
|
34
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAEpE,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAyE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAExH,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAGrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,6BAA6B;IAC7B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,yBAAyB;IACzB,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB,6DAA6D;IAC7D,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;CAC3C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B;CACF;AAcD,6CAA6C;AAC7C,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAkExE"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@textjs/app/client` — browser bootstrap used by the virtual entry that `text dev`
|
|
3
|
+
* and `text build` generate: mounts the console root, the App Router, the
|
|
4
|
+
* Dev Overlay and the DOM `<FocusPad>`.
|
|
5
|
+
*/
|
|
6
|
+
import { createElement } from "react";
|
|
7
|
+
import { createRoot } from "react-dom/client";
|
|
8
|
+
import { createConsoleRoot } from "@textjs/react";
|
|
9
|
+
import { FocusPad } from "@textjs/react/dom";
|
|
10
|
+
import { toClientConfig } from "./config.js";
|
|
11
|
+
import { connectViteHmr, devErrors, installGlobalErrorHandlers, TextDevOverlay } from "./devtools.js";
|
|
12
|
+
import { connectFrameMirror } from "./frame-mirror.js";
|
|
13
|
+
import { createBrowserHistory } from "./history.js";
|
|
14
|
+
import { isNavigationError } from "./navigation-errors.js";
|
|
15
|
+
import { AppRouter } from "./router.js";
|
|
16
|
+
function resolveContainer(container) {
|
|
17
|
+
if (container instanceof HTMLElement)
|
|
18
|
+
return container;
|
|
19
|
+
const id = typeof container === "string" ? container : "__textjs";
|
|
20
|
+
let el = document.getElementById(id);
|
|
21
|
+
if (!el) {
|
|
22
|
+
el = document.createElement("div");
|
|
23
|
+
el.id = id;
|
|
24
|
+
document.body.appendChild(el);
|
|
25
|
+
}
|
|
26
|
+
return el;
|
|
27
|
+
}
|
|
28
|
+
/** Boot a Text.js app into `console.log`. */
|
|
29
|
+
export async function bootTextApp(options) {
|
|
30
|
+
const config = { ...toClientConfig({}), ...options.config };
|
|
31
|
+
const dev = options.dev ?? false;
|
|
32
|
+
const vp = config.viewport ?? {};
|
|
33
|
+
const seen = new WeakSet();
|
|
34
|
+
const root = await createConsoleRoot({
|
|
35
|
+
// Follows the docked DevTools console by default; width × height is the
|
|
36
|
+
// size used when it can't be measured (undocked DevTools) or when `responsive: false`.
|
|
37
|
+
width: vp.width ?? 120,
|
|
38
|
+
height: vp.height ?? 36,
|
|
39
|
+
responsive: vp.responsive ?? true,
|
|
40
|
+
theme: vp.theme,
|
|
41
|
+
// A prerendered shell (PPR) already cleared the console: append below it.
|
|
42
|
+
initialClear: typeof window === "undefined" || window.__TEXTJS_SHELL__ !== 1,
|
|
43
|
+
// …and its clear opened DevTools' post-clear pacing window.
|
|
44
|
+
previousFrameAt: typeof window === "undefined" ? undefined : window.__TEXTJS_SHELL_AT__,
|
|
45
|
+
onCaughtError: (error) => {
|
|
46
|
+
if (isNavigationError(error))
|
|
47
|
+
return;
|
|
48
|
+
if (typeof error === "object" && error !== null) {
|
|
49
|
+
if (seen.has(error))
|
|
50
|
+
return;
|
|
51
|
+
seen.add(error);
|
|
52
|
+
}
|
|
53
|
+
console.error(error);
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
const history = createBrowserHistory({ basePath: config.basePath });
|
|
57
|
+
const render = (routes) => {
|
|
58
|
+
root.render(createElement(AppRouter, {
|
|
59
|
+
routes,
|
|
60
|
+
history,
|
|
61
|
+
theme: vp.theme,
|
|
62
|
+
defaultTitle: config.title || undefined,
|
|
63
|
+
errorStore: dev ? devErrors : null,
|
|
64
|
+
devOverlay: dev && config.devIndicators ? createElement(TextDevOverlay) : null,
|
|
65
|
+
}));
|
|
66
|
+
};
|
|
67
|
+
render(options.routes);
|
|
68
|
+
if (typeof document !== "undefined") {
|
|
69
|
+
if (!document.title && config.title)
|
|
70
|
+
document.title = config.title;
|
|
71
|
+
const el = resolveContainer(options.container);
|
|
72
|
+
createRoot(el).render(createElement(FocusPad, {
|
|
73
|
+
root,
|
|
74
|
+
title: config.title || undefined,
|
|
75
|
+
hints: config.hints,
|
|
76
|
+
action: config.action,
|
|
77
|
+
showMirrorDefault: config.showMirrorDefault,
|
|
78
|
+
style: { width: "min(960px, calc(100vw - 48px))", minHeight: "min(640px, calc(100vh - 48px))", boxSizing: "border-box" },
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
if (dev) {
|
|
82
|
+
if (options.hot)
|
|
83
|
+
connectViteHmr(options.hot);
|
|
84
|
+
if (options.hot && typeof options.hot.send === "function")
|
|
85
|
+
connectFrameMirror(root, options.hot, history);
|
|
86
|
+
installGlobalErrorHandlers();
|
|
87
|
+
}
|
|
88
|
+
const app = { root, history, updateRoutes: render };
|
|
89
|
+
if (typeof window !== "undefined")
|
|
90
|
+
window.__TEXTJS_APP__ = app;
|
|
91
|
+
return app;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.tsx"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `text.config.ts` and route `metadata` types.
|
|
3
|
+
*
|
|
4
|
+
* This module is imported by browser code, so Vite / Node types are referenced
|
|
5
|
+
* structurally and never imported at runtime.
|
|
6
|
+
*/
|
|
7
|
+
import type { ThemeName } from "@textjs/react";
|
|
8
|
+
export interface ViewportConfig {
|
|
9
|
+
/** Grid width in cells when fixed, or when docked DevTools can't be measured (default `120`). */
|
|
10
|
+
width?: number;
|
|
11
|
+
/** Grid height in cells when fixed, or when docked DevTools can't be measured (default `36`). */
|
|
12
|
+
height?: number;
|
|
13
|
+
/** Follow the docked DevTools console size (default `true`); `false` pins `width × height`. */
|
|
14
|
+
responsive?: boolean;
|
|
15
|
+
/** Initial theme preset (default `"geistDark"`). */
|
|
16
|
+
theme?: ThemeName;
|
|
17
|
+
}
|
|
18
|
+
export interface Rewrite {
|
|
19
|
+
/** Path pattern: `/docs/:slug`, `/blog/:path*`. */
|
|
20
|
+
source: string;
|
|
21
|
+
/** Internal path or absolute URL (proxied). */
|
|
22
|
+
destination: string;
|
|
23
|
+
}
|
|
24
|
+
export interface ProxyTarget {
|
|
25
|
+
target: string;
|
|
26
|
+
changeOrigin?: boolean;
|
|
27
|
+
ws?: boolean;
|
|
28
|
+
rewrite?: (path: string) => string;
|
|
29
|
+
secure?: boolean;
|
|
30
|
+
headers?: Record<string, string>;
|
|
31
|
+
}
|
|
32
|
+
/** The subset of Vite's dev server the `configureServer` hook relies on. */
|
|
33
|
+
export interface TextDevServer {
|
|
34
|
+
middlewares: {
|
|
35
|
+
use(...args: unknown[]): unknown;
|
|
36
|
+
};
|
|
37
|
+
config: {
|
|
38
|
+
root: string;
|
|
39
|
+
server: {
|
|
40
|
+
port?: number;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
[key: string]: unknown;
|
|
44
|
+
}
|
|
45
|
+
export interface TextConfig {
|
|
46
|
+
/** Console grid defaults. */
|
|
47
|
+
viewport?: ViewportConfig;
|
|
48
|
+
/** Mount the in-console Dev Overlay (the `[▼]` pill, its inspector and the Redbox) in development (default `true`). */
|
|
49
|
+
devIndicators?: boolean;
|
|
50
|
+
/** Open the FocusPad's inline console preview by default (default `false`). */
|
|
51
|
+
showMirrorDefault?: boolean;
|
|
52
|
+
/** Build output directory (default `"dist"`). */
|
|
53
|
+
outDir?: string;
|
|
54
|
+
/** App Router directory relative to the project root (default `"app"`). */
|
|
55
|
+
appDir?: string;
|
|
56
|
+
/** Mount the app under a sub-path, e.g. `"/console"`. */
|
|
57
|
+
basePath?: string;
|
|
58
|
+
/** Title shown in the FocusPad and as the default `document.title`. */
|
|
59
|
+
title?: string;
|
|
60
|
+
/** The two or three keys worth pressing, shown on the page's FocusPad, e.g. `[{ keys: "↑ ↓", label: "count" }]`. */
|
|
61
|
+
hints?: Array<{
|
|
62
|
+
keys: string;
|
|
63
|
+
label: string;
|
|
64
|
+
}>;
|
|
65
|
+
/** What to do first, shown as "Then click here and …" (default: `press <first hint>`). */
|
|
66
|
+
action?: string;
|
|
67
|
+
/** Dev / start server proxy rules, keyed by path prefix. */
|
|
68
|
+
proxy?: Record<string, string | ProxyTarget>;
|
|
69
|
+
/** Rewrites applied before routing. External destinations are proxied. */
|
|
70
|
+
rewrites?: Rewrite[] | (() => Rewrite[] | Promise<Rewrite[]>);
|
|
71
|
+
/** Extend the Vite dev server (custom middleware, local service discovery, …). */
|
|
72
|
+
configureServer?: (server: TextDevServer) => void | (() => void) | Promise<void | (() => void)>;
|
|
73
|
+
/** Module (relative to the root) default-exporting a `CacheStore` for `@textjs/app/cache`. */
|
|
74
|
+
cacheHandler?: string;
|
|
75
|
+
/** Escape hatch merged into the generated Vite config. */
|
|
76
|
+
vite?: Record<string, unknown>;
|
|
77
|
+
/**
|
|
78
|
+
* Partial Prerendering: `text build` renders each static route's first frame
|
|
79
|
+
* (with `<Suspense>` fallbacks for dynamic holes) into its HTML so the console
|
|
80
|
+
* paints before JavaScript loads (default `true`).
|
|
81
|
+
*/
|
|
82
|
+
ppr?: boolean;
|
|
83
|
+
/** Server-rendered routes (`export const runtime = "server"`). */
|
|
84
|
+
live?: LiveConfig;
|
|
85
|
+
/** `text start` request handling: public origin, reverse proxies and allowed hosts. */
|
|
86
|
+
server?: ServerConfig;
|
|
87
|
+
}
|
|
88
|
+
export interface ServerConfig {
|
|
89
|
+
/**
|
|
90
|
+
* The public origin (`https://console.example.com`). When set, `request.url`
|
|
91
|
+
* always uses it instead of the `Host` header. Also `TEXTJS_ORIGIN`.
|
|
92
|
+
*/
|
|
93
|
+
origin?: string;
|
|
94
|
+
/**
|
|
95
|
+
* Trust `X-Forwarded-Host` / `X-Forwarded-Proto` from a reverse proxy in
|
|
96
|
+
* front of `text start` (default `false`; also `TRUST_PROXY=1`).
|
|
97
|
+
*/
|
|
98
|
+
trustProxy?: boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Extra `Host` names `text start` answers when bound to loopback (default:
|
|
101
|
+
* `localhost`, `*.localhost` and IP addresses). `true` disables the check.
|
|
102
|
+
* A leading `.` allows subdomains.
|
|
103
|
+
*/
|
|
104
|
+
allowedHosts?: string[] | true;
|
|
105
|
+
}
|
|
106
|
+
export interface LiveConfig {
|
|
107
|
+
/** Concurrent sessions per server process (default `256`). */
|
|
108
|
+
maxSessions?: number;
|
|
109
|
+
/** How long a disconnected tab's session waits to be resumed, in ms (default `30000`). */
|
|
110
|
+
reconnectGraceMs?: number;
|
|
111
|
+
}
|
|
112
|
+
/** Type-safe `text.config.ts` helper. */
|
|
113
|
+
export declare function defineConfig(config: TextConfig): TextConfig;
|
|
114
|
+
export interface MetadataTitleTemplate {
|
|
115
|
+
default: string;
|
|
116
|
+
template?: string;
|
|
117
|
+
absolute?: string;
|
|
118
|
+
}
|
|
119
|
+
export interface Metadata {
|
|
120
|
+
title?: string | MetadataTitleTemplate | {
|
|
121
|
+
absolute: string;
|
|
122
|
+
default?: string;
|
|
123
|
+
template?: string;
|
|
124
|
+
};
|
|
125
|
+
description?: string;
|
|
126
|
+
[key: string]: unknown;
|
|
127
|
+
}
|
|
128
|
+
/** Client-safe configuration serialized into the browser bundle. */
|
|
129
|
+
export interface ClientConfig {
|
|
130
|
+
viewport: ViewportConfig;
|
|
131
|
+
devIndicators: boolean;
|
|
132
|
+
showMirrorDefault: boolean;
|
|
133
|
+
basePath: string;
|
|
134
|
+
title: string;
|
|
135
|
+
hints?: Array<{
|
|
136
|
+
keys: string;
|
|
137
|
+
label: string;
|
|
138
|
+
}>;
|
|
139
|
+
action?: string;
|
|
140
|
+
}
|
|
141
|
+
export declare function toClientConfig(config: TextConfig): ClientConfig;
|
|
142
|
+
export declare function normalizeBasePath(basePath: string | undefined): string;
|
|
143
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `text.config.ts` and route `metadata` types.
|
|
3
|
+
*
|
|
4
|
+
* This module is imported by browser code, so Vite / Node types are referenced
|
|
5
|
+
* structurally and never imported at runtime.
|
|
6
|
+
*/
|
|
7
|
+
/** Type-safe `text.config.ts` helper. */
|
|
8
|
+
export function defineConfig(config) {
|
|
9
|
+
return config;
|
|
10
|
+
}
|
|
11
|
+
export function toClientConfig(config) {
|
|
12
|
+
return {
|
|
13
|
+
viewport: { ...config.viewport },
|
|
14
|
+
devIndicators: config.devIndicators ?? true,
|
|
15
|
+
showMirrorDefault: config.showMirrorDefault ?? false,
|
|
16
|
+
basePath: normalizeBasePath(config.basePath),
|
|
17
|
+
title: config.title ?? "",
|
|
18
|
+
...(config.hints ? { hints: config.hints.map((h) => ({ keys: h.keys, label: h.label })) } : {}),
|
|
19
|
+
...(config.action ? { action: config.action } : {}),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function normalizeBasePath(basePath) {
|
|
23
|
+
if (!basePath || basePath === "/")
|
|
24
|
+
return "";
|
|
25
|
+
const withSlash = basePath.startsWith("/") ? basePath : `/${basePath}`;
|
|
26
|
+
return withSlash.replace(/\/+$/, "");
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=config.js.map
|