@fiyuu/runtime 0.4.7 → 0.5.0

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.
Files changed (62) hide show
  1. package/package.json +18 -4
  2. package/LICENSE +0 -674
  3. package/dist/bundler.d.ts +0 -10
  4. package/dist/bundler.d.ts.map +0 -1
  5. package/dist/bundler.js +0 -125
  6. package/dist/bundler.js.map +0 -1
  7. package/dist/cli.d.ts +0 -3
  8. package/dist/cli.d.ts.map +0 -1
  9. package/dist/cli.js +0 -26
  10. package/dist/cli.js.map +0 -1
  11. package/dist/client-runtime.d.ts +0 -16
  12. package/dist/client-runtime.d.ts.map +0 -1
  13. package/dist/client-runtime.js +0 -528
  14. package/dist/client-runtime.js.map +0 -1
  15. package/dist/index.d.ts +0 -5
  16. package/dist/index.d.ts.map +0 -1
  17. package/dist/index.js +0 -5
  18. package/dist/index.js.map +0 -1
  19. package/dist/inspector.d.ts +0 -39
  20. package/dist/inspector.d.ts.map +0 -1
  21. package/dist/inspector.js +0 -262
  22. package/dist/inspector.js.map +0 -1
  23. package/dist/server-devtools.d.ts +0 -14
  24. package/dist/server-devtools.d.ts.map +0 -1
  25. package/dist/server-devtools.js +0 -123
  26. package/dist/server-devtools.js.map +0 -1
  27. package/dist/server-loader.d.ts +0 -27
  28. package/dist/server-loader.d.ts.map +0 -1
  29. package/dist/server-loader.js +0 -217
  30. package/dist/server-loader.js.map +0 -1
  31. package/dist/server-middleware.d.ts +0 -8
  32. package/dist/server-middleware.d.ts.map +0 -1
  33. package/dist/server-middleware.js +0 -50
  34. package/dist/server-middleware.js.map +0 -1
  35. package/dist/server-renderer.d.ts +0 -42
  36. package/dist/server-renderer.d.ts.map +0 -1
  37. package/dist/server-renderer.js +0 -255
  38. package/dist/server-renderer.js.map +0 -1
  39. package/dist/server-router.d.ts +0 -15
  40. package/dist/server-router.d.ts.map +0 -1
  41. package/dist/server-router.js +0 -68
  42. package/dist/server-router.js.map +0 -1
  43. package/dist/server-types.d.ts +0 -170
  44. package/dist/server-types.d.ts.map +0 -1
  45. package/dist/server-types.js +0 -6
  46. package/dist/server-types.js.map +0 -1
  47. package/dist/server-utils.d.ts +0 -17
  48. package/dist/server-utils.d.ts.map +0 -1
  49. package/dist/server-utils.js +0 -103
  50. package/dist/server-utils.js.map +0 -1
  51. package/dist/server-websocket.d.ts +0 -8
  52. package/dist/server-websocket.d.ts.map +0 -1
  53. package/dist/server-websocket.js +0 -56
  54. package/dist/server-websocket.js.map +0 -1
  55. package/dist/server.d.ts +0 -69
  56. package/dist/server.d.ts.map +0 -1
  57. package/dist/server.js +0 -849
  58. package/dist/server.js.map +0 -1
  59. package/dist/service.d.ts +0 -29
  60. package/dist/service.d.ts.map +0 -1
  61. package/dist/service.js +0 -72
  62. package/dist/service.js.map +0 -1
@@ -1,217 +0,0 @@
1
- /**
2
- * Module loading, layout stacking, meta merging, query caching,
3
- * and GEA component rendering for the Fiyuu runtime server.
4
- */
5
- import { existsSync, mkdirSync, statSync } from "node:fs";
6
- import path from "node:path";
7
- import { pathToFileURL } from "node:url";
8
- import { buildSync } from "esbuild";
9
- import { QUERY_CACHE_MAX_ENTRIES, QUERY_CACHE_SWEEP_INTERVAL_MS } from "./server-router.js";
10
- // ── TypeScript compilation cache ──────────────────────────────────────────────
11
- const tsxCacheDir = path.join(process.cwd(), ".fiyuu", "dev", "tsx-cache");
12
- const tsxCache = new Map();
13
- function getCompiledPath(originalPath) {
14
- const hash = Buffer.from(originalPath).toString("base64").replace(/[^a-zA-Z0-9]/g, "").slice(0, 16);
15
- return path.join(tsxCacheDir, `${hash}.js`);
16
- }
17
- function compileTsxFile(tsxPath) {
18
- const compiledPath = getCompiledPath(tsxPath);
19
- // Check cache
20
- const cached = tsxCache.get(tsxPath);
21
- if (cached && cached === compiledPath) {
22
- try {
23
- const tsxStat = statSync(tsxPath);
24
- const jsStat = statSync(compiledPath);
25
- if (jsStat.mtimeMs >= tsxStat.mtimeMs) {
26
- return compiledPath;
27
- }
28
- }
29
- catch {
30
- // Cache miss, recompile
31
- }
32
- }
33
- // Ensure cache directory exists
34
- mkdirSync(tsxCacheDir, { recursive: true });
35
- // Compile with esbuild
36
- const result = buildSync({
37
- entryPoints: [tsxPath],
38
- bundle: false,
39
- format: "esm",
40
- platform: "node",
41
- target: "node18",
42
- jsx: "automatic",
43
- jsxImportSource: "@geajs/core",
44
- outfile: compiledPath,
45
- sourcemap: false,
46
- });
47
- if (result.errors.length > 0) {
48
- throw new Error(`Failed to compile ${tsxPath}: ${result.errors.map(e => e.text).join(", ")}`);
49
- }
50
- tsxCache.set(tsxPath, compiledPath);
51
- return compiledPath;
52
- }
53
- // ── Dynamic module import ─────────────────────────────────────────────────────
54
- export async function importModule(modulePath, mode, serverDirectory) {
55
- // In production mode, use compiled .js files from server directory
56
- let resolvedPath = modulePath;
57
- if (mode === "start" && serverDirectory) {
58
- // Convert .ts/.tsx to .js and map to server directory
59
- const relativePath = path.relative(process.cwd(), modulePath);
60
- if (relativePath.startsWith("app/")) {
61
- const jsPath = relativePath.replace(/\.tsx?$/, ".js");
62
- resolvedPath = path.join(serverDirectory, jsPath.replace(/^app\//, ""));
63
- }
64
- }
65
- else if (mode === "dev" && (modulePath.endsWith(".tsx") || modulePath.endsWith(".ts"))) {
66
- // In dev mode, compile .tsx/.ts files on the fly
67
- resolvedPath = compileTsxFile(modulePath);
68
- }
69
- const fileUrl = pathToFileURL(resolvedPath).href;
70
- try {
71
- return await import(mode === "dev" ? `${fileUrl}?t=${Date.now()}` : fileUrl);
72
- }
73
- catch (err) {
74
- const message = err instanceof Error ? err.message : String(err);
75
- const shortPath = modulePath.replace(process.cwd(), ".");
76
- let hint = "";
77
- if (message.includes("Cannot find package") || message.includes("ERR_MODULE_NOT_FOUND")) {
78
- const match = message.match(/Cannot find (?:package|module) '([^']+)'/);
79
- const missing = match ? match[1] : "a dependency";
80
- hint = `\n → Missing package: "${missing}". Run \`npm install\` in the project root.`;
81
- }
82
- else if (message.includes("SyntaxError") || message.includes("Unexpected token")) {
83
- hint = `\n → Syntax error in ${shortPath}. Check for typos or invalid TypeScript.`;
84
- }
85
- else if (message.includes("ERR_INVALID_URL")) {
86
- hint = `\n → Invalid file path: ${shortPath}`;
87
- }
88
- const enhanced = new Error(`Failed to load module: ${shortPath}\n ${message}${hint}`);
89
- enhanced.stack = err instanceof Error ? err.stack : undefined;
90
- throw enhanced;
91
- }
92
- }
93
- // ── API route resolution ──────────────────────────────────────────────────────
94
- export function resolveApiRouteModule(appDirectory, pathname) {
95
- const relativePath = pathname.replace(/^\//, "");
96
- const normalizedRoot = path.resolve(appDirectory) + path.sep;
97
- const directModule = path.resolve(appDirectory, relativePath, "route.ts");
98
- if (!directModule.startsWith(normalizedRoot))
99
- return null; // path traversal guard
100
- if (existsSync(directModule))
101
- return directModule;
102
- const rootModule = path.resolve(appDirectory, relativePath + ".ts");
103
- if (!rootModule.startsWith(normalizedRoot))
104
- return null; // path traversal guard
105
- return existsSync(rootModule) ? rootModule : null;
106
- }
107
- // ── Meta loading & merging ────────────────────────────────────────────────────
108
- export async function loadMetaFile(filePath, mode, serverDirectory) {
109
- if (!existsSync(filePath)) {
110
- return { intent: "" };
111
- }
112
- const module = (await importModule(filePath, mode, serverDirectory));
113
- return module.default ?? { intent: "" };
114
- }
115
- export async function loadLayoutMeta(directory, mode, serverDirectory) {
116
- return loadMetaFile(path.join(directory, "layout.meta.ts"), mode, serverDirectory);
117
- }
118
- export function mergeMetaDefinitions(...definitions) {
119
- return definitions.reduce((current, item) => ({
120
- ...current,
121
- ...item,
122
- seo: {
123
- ...current.seo,
124
- ...item.seo,
125
- },
126
- }), { intent: "" });
127
- }
128
- // ── Layout stack loading ──────────────────────────────────────────────────────
129
- export async function loadLayoutStack(appDirectory, feature, mode, serverDirectory) {
130
- const parts = feature.feature ? feature.feature.split("/") : [];
131
- const directories = [appDirectory];
132
- for (let index = 0; index < parts.length; index += 1) {
133
- directories.push(path.join(appDirectory, ...parts.slice(0, index + 1)));
134
- }
135
- const stack = [];
136
- for (const directory of directories) {
137
- const layoutFile = path.join(directory, "layout.tsx");
138
- const metaFile = path.join(directory, "layout.meta.ts");
139
- if (existsSync(layoutFile)) {
140
- const module = (await importModule(layoutFile, mode, serverDirectory));
141
- if (module.default) {
142
- stack.push({ component: module.default, meta: await loadMetaFile(metaFile, mode, serverDirectory) });
143
- }
144
- }
145
- }
146
- return stack;
147
- }
148
- export async function loadFeatureMeta(feature, mode, serverDirectory) {
149
- return feature.files["meta.ts"]
150
- ? loadMetaFile(feature.files["meta.ts"], mode, serverDirectory)
151
- : { intent: feature.intent ?? "" };
152
- }
153
- // ── Cached layout stack (production only) ────────────────────────────────────
154
- export async function getCachedLayoutStack(state, appDirectory, feature, mode) {
155
- const cached = state.layoutStackCache.get(feature.route);
156
- if (cached)
157
- return cached;
158
- const layoutStack = await loadLayoutStack(appDirectory, feature, mode, state.serverDirectory);
159
- state.layoutStackCache.set(feature.route, layoutStack);
160
- return layoutStack;
161
- }
162
- export async function getCachedMergedMeta(state, feature, layoutStack, mode) {
163
- const cached = state.mergedMetaCache.get(feature.route);
164
- if (cached)
165
- return cached;
166
- let featureMeta = state.featureMetaCache.get(feature.route);
167
- if (!featureMeta) {
168
- featureMeta = await loadFeatureMeta(feature, mode, state.serverDirectory);
169
- state.featureMetaCache.set(feature.route, featureMeta);
170
- }
171
- const merged = mergeMetaDefinitions(...layoutStack.map((item) => item.meta), featureMeta);
172
- state.mergedMetaCache.set(feature.route, merged);
173
- return merged;
174
- }
175
- // ── Query cache ───────────────────────────────────────────────────────────────
176
- export function pruneQueryCache(state, now) {
177
- if (now - state.queryCacheLastPruneAt < QUERY_CACHE_SWEEP_INTERVAL_MS &&
178
- state.queryCache.size < QUERY_CACHE_MAX_ENTRIES) {
179
- return;
180
- }
181
- state.queryCacheLastPruneAt = now;
182
- for (const [key, entry] of state.queryCache) {
183
- if (entry.expiresAt <= now) {
184
- state.queryCache.delete(key);
185
- }
186
- }
187
- if (state.queryCache.size <= QUERY_CACHE_MAX_ENTRIES)
188
- return;
189
- const survivors = [...state.queryCache.entries()].sort((left, right) => left[1].expiresAt - right[1].expiresAt);
190
- const overflowCount = survivors.length - QUERY_CACHE_MAX_ENTRIES;
191
- for (let index = 0; index < overflowCount; index += 1) {
192
- state.queryCache.delete(survivors[index][0]);
193
- }
194
- }
195
- // ── GEA component rendering ───────────────────────────────────────────────────
196
- const geaComponentModeCache = new WeakMap();
197
- export function renderGeaComponent(component, props) {
198
- if (typeof component !== "function") {
199
- throw new Error("Route module default export must be a Gea component class or function.");
200
- }
201
- const candidate = component;
202
- const componentKey = candidate;
203
- const cachedMode = geaComponentModeCache.get(componentKey);
204
- const mode = cachedMode ?? (typeof candidate.prototype?.template === "function" ? "class" : "function");
205
- if (!cachedMode) {
206
- geaComponentModeCache.set(componentKey, mode);
207
- }
208
- if (mode === "class") {
209
- const instance = new candidate(props);
210
- if (typeof instance.template === "function") {
211
- return String(instance.template(instance.props ?? props));
212
- }
213
- return String(instance.toString());
214
- }
215
- return String(candidate(props));
216
- }
217
- //# sourceMappingURL=server-loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server-loader.js","sourceRoot":"","sources":["../../../../packages/runtime/src/server-loader.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Middleware runner for the Fiyuu runtime server.
3
- * Loads the app-level middleware.ts module and chains handlers.
4
- */
5
- import type { IncomingMessage } from "node:http";
6
- import type { MiddlewareResult, StartServerOptions } from "./server-types.js";
7
- export declare function runMiddleware(options: StartServerOptions, url: URL, request: IncomingMessage, mode: "dev" | "start", stateWarnings?: string[], requestId?: string, serverDirectory?: string): Promise<MiddlewareResult | undefined>;
8
- //# sourceMappingURL=server-middleware.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server-middleware.d.ts","sourceRoot":"","sources":["../../../../packages/runtime/src/server-middleware.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAIV,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAG3B,wBAAsB,aAAa,CACjC,OAAO,EAAE,kBAAkB,EAC3B,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,KAAK,GAAG,OAAO,EACrB,aAAa,GAAE,MAAM,EAAO,EAC5B,SAAS,SAAK,EACd,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CA8CvC"}
@@ -1,50 +0,0 @@
1
- /**
2
- * Middleware runner for the Fiyuu runtime server.
3
- * Loads the app-level middleware.ts module and chains handlers.
4
- */
5
- import { existsSync } from "node:fs";
6
- import path from "node:path";
7
- import { importModule } from "./server-loader.js";
8
- export async function runMiddleware(options, url, request, mode, stateWarnings = [], requestId = "", serverDirectory) {
9
- if (options.config?.middleware?.enabled === false) {
10
- return undefined;
11
- }
12
- const middlewarePath = path.join(options.appDirectory, "middleware.ts");
13
- if (!existsSync(middlewarePath)) {
14
- return undefined;
15
- }
16
- const module = (await importModule(middlewarePath, mode, serverDirectory));
17
- const handlers = Array.isArray(module.middleware)
18
- ? module.middleware
19
- : module.middleware
20
- ? [module.middleware]
21
- : [];
22
- const context = {
23
- request,
24
- url,
25
- responseHeaders: {},
26
- requestId,
27
- warnings: stateWarnings,
28
- };
29
- let shortCircuit;
30
- let index = -1;
31
- async function dispatch(position) {
32
- if (position <= index) {
33
- throw new Error("Middleware next() called multiple times.");
34
- }
35
- index = position;
36
- const handler = handlers[position];
37
- if (!handler)
38
- return;
39
- const result = await handler(context, async () => dispatch(position + 1));
40
- if (result?.headers) {
41
- Object.assign(context.responseHeaders, result.headers);
42
- }
43
- if (result?.response) {
44
- shortCircuit = result.response;
45
- }
46
- }
47
- await dispatch(0);
48
- return { headers: context.responseHeaders, response: shortCircuit };
49
- }
50
- //# sourceMappingURL=server-middleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server-middleware.js","sourceRoot":"","sources":["../../../../packages/runtime/src/server-middleware.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAS7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAA2B,EAC3B,GAAQ,EACR,OAAwB,EACxB,IAAqB,EACrB,gBAA0B,EAAE,EAC5B,SAAS,GAAG,EAAE,EACd,eAAwB;IAExB,IAAI,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,KAAK,KAAK,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IACxE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,MAAM,YAAY,CAAC,cAAc,EAAE,IAAI,EAAE,eAAe,CAAC,CAAqB,CAAC;IAC/F,MAAM,QAAQ,GAAwB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;QACpE,CAAC,CAAC,MAAM,CAAC,UAAU;QACnB,CAAC,CAAC,MAAM,CAAC,UAAU;YACjB,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;YACrB,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,OAAO,GAAsB;QACjC,OAAO;QACP,GAAG;QACH,eAAe,EAAE,EAAE;QACnB,SAAS;QACT,QAAQ,EAAE,aAAa;KACxB,CAAC;IACF,IAAI,YAA0C,CAAC;IAC/C,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IAEf,KAAK,UAAU,QAAQ,CAAC,QAAgB;QACtC,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QACD,KAAK,GAAG,QAAQ,CAAC;QACjB,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1E,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,MAAM,EAAE,QAAQ,EAAE,CAAC;YACrB,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClB,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACtE,CAAC"}
@@ -1,42 +0,0 @@
1
- /**
2
- * HTML document rendering, status pages, and response helpers
3
- * for the Fiyuu runtime server.
4
- */
5
- import type { ServerResponse } from "node:http";
6
- import type { MetaDefinition, RenderMode } from "@fiyuu/core";
7
- import type { StatusPageInput } from "./server-types.js";
8
- export declare function renderDocument(input: {
9
- body: string;
10
- data: unknown;
11
- route: string;
12
- intent: string;
13
- render: RenderMode;
14
- clientPath: string | null;
15
- liveReload: boolean;
16
- warnings: string[];
17
- renderTimeMs: number;
18
- developerTools: boolean;
19
- requestId: string;
20
- meta: MetaDefinition;
21
- websocketPath: string;
22
- }): string;
23
- export declare function getStatusTone(statusCode: number): {
24
- background: string;
25
- border: string;
26
- accent: string;
27
- accentSoft: string;
28
- emoji: string;
29
- label: string;
30
- };
31
- export declare function renderStatusPage(input: StatusPageInput): string;
32
- export declare function sendDocumentStatusPage(response: ServerResponse, input: StatusPageInput): void;
33
- export declare function renderStartupMessage(mode: "dev" | "start", url: string, actualPort: number, preferredPort: number, websocketUrl?: string, features?: {
34
- db?: boolean;
35
- realtime?: boolean;
36
- services?: string[];
37
- routes?: number;
38
- }): string;
39
- export declare function serveClientAsset(response: ServerResponse, assetPath: string): Promise<void>;
40
- export declare function serveClientRuntime(response: ServerResponse, websocketPath: string): void;
41
- export declare function attachLiveReload(response: ServerResponse, liveClients: Set<ServerResponse>): void;
42
- //# sourceMappingURL=server-renderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server-renderer.d.ts","sourceRoot":"","sources":["../../../../packages/runtime/src/server-renderer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIzD,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,cAAc,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,MAAM,CAwDT;AAID,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAiDA;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CA8D/D;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAO7F;AAID,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,KAAK,GAAG,OAAO,EACrB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE;IAAE,EAAE,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACpF,MAAM,CA2CR;AAID,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASjG;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAKxF;AAID,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,CAAC,cAAc,CAAC,GAAG,IAAI,CAWjG"}
@@ -1,255 +0,0 @@
1
- /**
2
- * HTML document rendering, status pages, and response helpers
3
- * for the Fiyuu runtime server.
4
- */
5
- import { createReadStream, existsSync } from "node:fs";
6
- import { buildClientRuntime } from "./client-runtime.js";
7
- import { escapeHtml, sendText, serialize } from "./server-utils.js";
8
- import { renderUnifiedToolsScript } from "./server-devtools.js";
9
- // ── Document rendering ────────────────────────────────────────────────────────
10
- export function renderDocument(input) {
11
- const liveReloadScript = input.liveReload
12
- ? `<script type="module">const events=new EventSource('/__fiyuu/live');events.onmessage=(event)=>{if(event.data==='reload'){location.reload();}};</script>`
13
- : "";
14
- const liveErrorDebuggerScript = input.liveReload
15
- ? `<script type="module">(function(){const host=document.createElement('aside');host.style.cssText='position:fixed;left:12px;top:12px;z-index:10000;max-width:min(560px,calc(100vw - 24px));background:#2a1717;color:#ffe9e9;border:1px solid #7f3e3e;border-radius:12px;padding:10px 12px;font:12px/1.45 ui-monospace,monospace;white-space:pre-wrap;display:none';const title=document.createElement('div');title.style.cssText='font-weight:700;margin-bottom:6px';title.textContent='Fiyuu Live Error';const body=document.createElement('div');const close=document.createElement('button');close.textContent='dismiss';close.style.cssText='margin-top:8px;border:1px solid #9f5b5b;background:transparent;color:#ffe9e9;border-radius:999px;padding:2px 8px;cursor:pointer';close.addEventListener('click',()=>{host.style.display='none';});host.append(title,body,close);function show(message){body.textContent=message;host.style.display='block';if(!host.isConnected)document.body.appendChild(host);}window.addEventListener('error',(event)=>{const stack=event.error&&event.error.stack?event.error.stack:'';show(String(event.message||'Unknown runtime error')+(stack?'\n\n'+stack:''));});window.addEventListener('unhandledrejection',(event)=>{const reason=event.reason instanceof Error?(event.reason.stack||event.reason.message):String(event.reason||'Unhandled promise rejection');show(reason);});})();</script>`
16
- : "";
17
- const runtimeScript = `<script defer src="/__fiyuu/runtime.js"></script>`;
18
- const clientScript = input.clientPath ? `<script type="module" src="${input.clientPath}"></script>` : "";
19
- const unifiedToolsScript = input.liveReload && input.developerTools ? renderUnifiedToolsScript(input) : "";
20
- return `<!doctype html>
21
- <html lang="en" data-render-mode="${input.render}">
22
- <head>
23
- <meta charset="utf-8" />
24
- <meta name="viewport" content="width=device-width, initial-scale=1" />
25
- <title>${escapeHtml(input.meta.seo?.title ?? input.meta.title ?? "Fiyuu")}</title>
26
- <meta name="description" content="${escapeHtml(input.meta.seo?.description ?? (input.intent || "Fiyuu application"))}" />
27
- <script>
28
- // Theme detection runs before anything else to prevent flash of wrong theme.
29
- (function(){
30
- try {
31
- var saved = localStorage.getItem('fiyuu-theme');
32
- var prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
33
- var isDark = saved === 'dark' || (!saved && prefersDark);
34
- document.documentElement.classList.toggle('dark', isDark);
35
- document.documentElement.setAttribute('data-theme', isDark ? 'dark' : 'light');
36
- } catch(e) {}
37
- })();
38
- </script>
39
- <script src="https://cdn.tailwindcss.com"></script>
40
- <script>
41
- // Tailwind CDN config must be set after the script loads.
42
- if (typeof tailwind !== 'undefined') {
43
- tailwind.config = { darkMode: 'class' };
44
- }
45
- </script>
46
- <style>
47
- *, *::before, *::after { box-sizing: border-box; }
48
- :root { color-scheme: light; }
49
- html.dark { color-scheme: dark; }
50
- body { margin: 0; font-family: ui-sans-serif, system-ui, sans-serif; background: #f7f8f5; color: #172018; }
51
- html.dark body { background: #111513; color: #f0f5ee; }
52
- #app { min-height: 100vh; }
53
- </style>
54
- </head>
55
- <body>
56
- <div id="app">${input.body}</div>
57
- <script>window.__FIYUU_DATA__=${serialize(input.data)};window.__FIYUU_ROUTE__=${JSON.stringify(input.route)};window.__FIYUU_INTENT__=${JSON.stringify(input.intent)};window.__FIYUU_RENDER__=${JSON.stringify(input.render)};window.__FIYUU_WS_PATH__=${JSON.stringify(input.websocketPath)};</script>
58
- ${runtimeScript}
59
- ${clientScript}
60
- ${unifiedToolsScript}
61
- ${liveErrorDebuggerScript}
62
- ${liveReloadScript}
63
- </body>
64
- </html>`;
65
- }
66
- // ── Status page rendering ─────────────────────────────────────────────────────
67
- export function getStatusTone(statusCode) {
68
- if (statusCode >= 500) {
69
- return {
70
- background: "#f2dfd5",
71
- border: "rgba(151, 73, 45, .22)",
72
- accent: "#97492d",
73
- accentSoft: "rgba(151, 73, 45, .20)",
74
- emoji: "!",
75
- label: "Server Error",
76
- };
77
- }
78
- if (statusCode === 404) {
79
- return {
80
- background: "#e4ebdf",
81
- border: "rgba(58, 98, 75, .22)",
82
- accent: "#3a624b",
83
- accentSoft: "rgba(58, 98, 75, .18)",
84
- emoji: "?",
85
- label: "Not Found",
86
- };
87
- }
88
- if (statusCode === 403) {
89
- return {
90
- background: "#e4dde8",
91
- border: "rgba(98, 58, 120, .22)",
92
- accent: "#6b3e82",
93
- accentSoft: "rgba(98, 58, 120, .18)",
94
- emoji: "x",
95
- label: "Forbidden",
96
- };
97
- }
98
- if (statusCode === 401) {
99
- return {
100
- background: "#e0e4eb",
101
- border: "rgba(58, 75, 120, .22)",
102
- accent: "#3a4b78",
103
- accentSoft: "rgba(58, 75, 120, .18)",
104
- emoji: "o",
105
- label: "Unauthorized",
106
- };
107
- }
108
- return {
109
- background: "#e8e2d4",
110
- border: "rgba(105, 88, 52, .22)",
111
- accent: "#695834",
112
- accentSoft: "rgba(105, 88, 52, .18)",
113
- emoji: "~",
114
- label: "Error",
115
- };
116
- }
117
- export function renderStatusPage(input) {
118
- const tone = getStatusTone(input.statusCode);
119
- const badges = [
120
- `HTTP ${input.statusCode}`,
121
- input.method ? `Method ${input.method}` : "",
122
- input.route ? `Route ${input.route}` : "",
123
- ]
124
- .filter(Boolean)
125
- .map((item) => `<span class="badge">${escapeHtml(item)}</span>`)
126
- .join("");
127
- const hints = (input.hints ?? []).map((item) => `<li>${escapeHtml(item)}</li>`).join("");
128
- const diagnostics = (input.diagnostics ?? [])
129
- .map((item) => `<li><code>${escapeHtml(item)}</code></li>`)
130
- .join("");
131
- const requestMeta = input.requestId
132
- ? `<p class="meta">Request ID: <code>${escapeHtml(input.requestId)}</code></p>`
133
- : "";
134
- return `<!doctype html>
135
- <html lang="en">
136
- <head>
137
- <meta charset="utf-8" />
138
- <meta name="viewport" content="width=device-width, initial-scale=1" />
139
- <title>${escapeHtml(`${input.statusCode} ${input.title} - Fiyuu`)}</title>
140
- <style>
141
- :root {
142
- color-scheme: light;
143
- --bg: ${tone.background};
144
- --panel: rgba(255,255,255,.76);
145
- --border: ${tone.border};
146
- --text: #18211d;
147
- --muted: rgba(24,33,29,.62);
148
- --accent: ${tone.accent};
149
- --accent-soft: ${tone.accentSoft};
150
- --code-bg: rgba(24,33,29,.06);
151
- }
152
- *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
153
- body { background: var(--bg); color: var(--text); font: 14px/1.6 ui-sans-serif, system-ui, sans-serif; min-height: 100dvh; display: flex; align-items: center; justify-content: center; padding: 24px; }
154
- .card { background: var(--panel); border: 1px solid var(--border); border-radius: 20px; padding: 32px 36px; max-width: 600px; width: 100%; backdrop-filter: blur(12px); box-shadow: 0 8px 32px rgba(0,0,0,.06); }
155
- .badge { display: inline-flex; padding: 3px 10px; border-radius: 999px; background: var(--accent-soft); color: var(--accent); font: 600 11px/1.5 ui-monospace, monospace; margin-right: 6px; }
156
- h1 { font-size: 22px; font-weight: 700; margin: 14px 0 8px; }
157
- .summary { color: var(--muted); margin-bottom: 16px; }
158
- .detail { background: var(--code-bg); border-radius: 10px; padding: 12px 14px; font: 13px/1.5 ui-monospace, monospace; margin-bottom: 18px; white-space: pre-wrap; word-break: break-word; }
159
- h2 { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: .06em; color: var(--muted); margin: 18px 0 8px; }
160
- ul { padding-left: 18px; }
161
- li { margin-top: 6px; }
162
- code { background: var(--code-bg); border-radius: 4px; padding: 1px 5px; font-family: ui-monospace, monospace; font-size: .9em; }
163
- .meta { font-size: 12px; color: var(--muted); margin-top: 20px; }
164
- </style>
165
- </head>
166
- <body>
167
- <div class="card">
168
- <div>${badges}</div>
169
- <h1>${escapeHtml(input.title)}</h1>
170
- <p class="summary">${escapeHtml(input.summary)}</p>
171
- ${input.detail ? `<pre class="detail">${escapeHtml(input.detail)}</pre>` : ""}
172
- ${hints ? `<h2>Suggestions</h2><ul>${hints}</ul>` : ""}
173
- ${diagnostics ? `<h2>Diagnostics</h2><ul>${diagnostics}</ul>` : ""}
174
- ${requestMeta}
175
- </div>
176
- </body>
177
- </html>`;
178
- }
179
- export function sendDocumentStatusPage(response, input) {
180
- response.statusCode = input.statusCode;
181
- response.setHeader("content-type", "text/html; charset=utf-8");
182
- if (input.requestId) {
183
- response.setHeader("x-fiyuu-request-id", input.requestId);
184
- }
185
- response.end(renderStatusPage(input));
186
- }
187
- // ── Startup message ───────────────────────────────────────────────────────────
188
- export function renderStartupMessage(mode, url, actualPort, preferredPort, websocketUrl, features) {
189
- const isDev = mode === "dev";
190
- const modeLabel = isDev ? "Development" : "Production";
191
- const lines = [
192
- "",
193
- ` Fiyuu v0.3.0 - ${modeLabel} Server`,
194
- "",
195
- ` URL: ${url}`,
196
- ];
197
- if (actualPort !== preferredPort) {
198
- lines.push(` Port: ${actualPort} (${preferredPort} was busy)`);
199
- }
200
- if (isDev) {
201
- lines.push(` Live Reload: active`);
202
- }
203
- if (websocketUrl) {
204
- lines.push(` WebSocket: ${websocketUrl.replace(`:${preferredPort}`, `:${actualPort}`)}`);
205
- }
206
- if (features) {
207
- if (features.routes !== undefined) {
208
- lines.push(` Routes: ${features.routes} registered`);
209
- }
210
- if (features.db) {
211
- lines.push(` Database: F1 DB (active)`);
212
- }
213
- if (features.realtime) {
214
- lines.push(` Realtime: enabled`);
215
- }
216
- if (features.services?.length) {
217
- lines.push(` Services: ${features.services.join(", ")}`);
218
- }
219
- }
220
- lines.push("");
221
- lines.push(` Ready in ${isDev ? "dev" : "production"} mode.`);
222
- lines.push("");
223
- return lines.join("\n");
224
- }
225
- // ── Static asset serving ──────────────────────────────────────────────────────
226
- export async function serveClientAsset(response, assetPath) {
227
- if (!existsSync(assetPath)) {
228
- sendText(response, 404, `Missing client asset ${assetPath}`);
229
- return;
230
- }
231
- response.statusCode = 200;
232
- response.setHeader("content-type", "text/javascript; charset=utf-8");
233
- response.setHeader("cache-control", "public, max-age=31536000, immutable");
234
- createReadStream(assetPath).pipe(response);
235
- }
236
- export function serveClientRuntime(response, websocketPath) {
237
- response.statusCode = 200;
238
- response.setHeader("content-type", "text/javascript; charset=utf-8");
239
- response.setHeader("cache-control", "public, max-age=300");
240
- response.end(buildClientRuntime(websocketPath));
241
- }
242
- // ── Live reload SSE ───────────────────────────────────────────────────────────
243
- export function attachLiveReload(response, liveClients) {
244
- response.writeHead(200, {
245
- "cache-control": "no-cache",
246
- connection: "keep-alive",
247
- "content-type": "text/event-stream",
248
- });
249
- response.write(`data: ready\n\n`);
250
- liveClients.add(response);
251
- response.on("close", () => {
252
- liveClients.delete(response);
253
- });
254
- }
255
- //# sourceMappingURL=server-renderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server-renderer.js","sourceRoot":"","sources":["../../../../packages/runtime/src/server-renderer.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- /**
2
- * Dynamic route matching for the Fiyuu runtime server.
3
- * Builds a RouteIndex from FeatureRecords and matches incoming pathnames.
4
- */
5
- import type { FeatureRecord } from "@fiyuu/core";
6
- import type { RouteIndex, RouteMatch } from "./server-types.js";
7
- export declare const QUERY_CACHE_SWEEP_INTERVAL_MS = 15000;
8
- export declare const QUERY_CACHE_MAX_ENTRIES = 2000;
9
- export declare function buildRouteRegex(route: string): {
10
- regex: RegExp;
11
- paramNames: string[];
12
- };
13
- export declare function buildRouteIndex(features: FeatureRecord[]): RouteIndex;
14
- export declare function matchRoute(routeIndex: RouteIndex, pathname: string): RouteMatch | null;
15
- //# sourceMappingURL=server-router.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server-router.d.ts","sourceRoot":"","sources":["../../../../packages/runtime/src/server-router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAuB,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAErF,eAAO,MAAM,6BAA6B,QAAS,CAAC;AACpD,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAE7C,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAsBtF;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,UAAU,CAsBrE;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAiBtF"}