@nexus_js/server 0.6.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.
- package/LICENSE +21 -0
- package/README.md +17 -0
- package/dist/actions.d.ts +158 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +396 -0
- package/dist/actions.js.map +1 -0
- package/dist/context.d.ts +41 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +68 -0
- package/dist/context.js.map +1 -0
- package/dist/csrf.d.ts +56 -0
- package/dist/csrf.d.ts.map +1 -0
- package/dist/csrf.js +153 -0
- package/dist/csrf.js.map +1 -0
- package/dist/dev-assets.d.ts +31 -0
- package/dist/dev-assets.d.ts.map +1 -0
- package/dist/dev-assets.js +198 -0
- package/dist/dev-assets.js.map +1 -0
- package/dist/error-boundary.d.ts +87 -0
- package/dist/error-boundary.d.ts.map +1 -0
- package/dist/error-boundary.js +181 -0
- package/dist/error-boundary.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +277 -0
- package/dist/index.js.map +1 -0
- package/dist/load-module.d.ts +26 -0
- package/dist/load-module.d.ts.map +1 -0
- package/dist/load-module.js +288 -0
- package/dist/load-module.js.map +1 -0
- package/dist/logger.d.ts +63 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +158 -0
- package/dist/logger.js.map +1 -0
- package/dist/navigate.d.ts +21 -0
- package/dist/navigate.d.ts.map +1 -0
- package/dist/navigate.js +45 -0
- package/dist/navigate.js.map +1 -0
- package/dist/rate-limit.d.ts +71 -0
- package/dist/rate-limit.d.ts.map +1 -0
- package/dist/rate-limit.js +136 -0
- package/dist/rate-limit.js.map +1 -0
- package/dist/renderer.d.ts +92 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +386 -0
- package/dist/renderer.js.map +1 -0
- package/dist/streaming.d.ts +98 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +216 -0
- package/dist/streaming.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Load route modules in dev (compile .nx → .mjs) and prod (pre-built .js under .nexus/output).
|
|
3
|
+
*/
|
|
4
|
+
import { compile } from '@nexus_js/compiler';
|
|
5
|
+
import { buildRouteManifest } from '@nexus_js/router';
|
|
6
|
+
import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
|
|
7
|
+
import { mkdir, readdir, readFile, stat, unlink, writeFile } from 'node:fs/promises';
|
|
8
|
+
import { dirname, join, relative } from 'node:path';
|
|
9
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
10
|
+
/** Map manifest pattern to the same path segment used by `nexus build`. */
|
|
11
|
+
function patternToOutputSegment(pattern) {
|
|
12
|
+
if (pattern === '/')
|
|
13
|
+
return 'index';
|
|
14
|
+
return pattern.replace(/^\//, '');
|
|
15
|
+
}
|
|
16
|
+
function compiledServerPath(appRoot, pattern) {
|
|
17
|
+
const outDir = join(appRoot, '.nexus', 'output');
|
|
18
|
+
return join(outDir, patternToOutputSegment(pattern)) + '.js';
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Resolve @nexus_js/compiler dist entry + fingerprint. `require.resolve('…/package.json')` fails
|
|
22
|
+
* because package.json is not exported — use `import.meta.resolve` from this module instead.
|
|
23
|
+
*/
|
|
24
|
+
/** Newest mtime among `dist/*.js` so codegen-only edits invalidate the dev-server cache. */
|
|
25
|
+
function maxMtimeMsCompilerDist(distDir) {
|
|
26
|
+
let max = 0;
|
|
27
|
+
try {
|
|
28
|
+
for (const name of readdirSync(distDir)) {
|
|
29
|
+
if (!name.endsWith('.js'))
|
|
30
|
+
continue;
|
|
31
|
+
max = Math.max(max, statSync(join(distDir, name)).mtimeMs);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return 0;
|
|
36
|
+
}
|
|
37
|
+
return max;
|
|
38
|
+
}
|
|
39
|
+
function compilerDistMeta() {
|
|
40
|
+
try {
|
|
41
|
+
const entry = fileURLToPath(import.meta.resolve('@nexus_js/compiler', import.meta.url));
|
|
42
|
+
const distDir = dirname(entry);
|
|
43
|
+
const mtimeMs = Math.max(statSync(entry).mtimeMs, maxMtimeMsCompilerDist(distDir));
|
|
44
|
+
const pkgDir = dirname(distDir);
|
|
45
|
+
const version = JSON.parse(readFileSync(join(pkgDir, 'package.json'), 'utf-8'));
|
|
46
|
+
const v = (version.version ?? '0').replace(/[^\w.]/g, '_');
|
|
47
|
+
const fingerprint = `${v}_${Math.floor(mtimeMs)}`;
|
|
48
|
+
return { entry, mtimeMs, fingerprint };
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function devServerCachePath(appRoot, nxPath, fingerprint) {
|
|
55
|
+
const rel = relative(appRoot, nxPath);
|
|
56
|
+
const safe = rel.replace(/[^a-zA-Z0-9._/-]/g, '_');
|
|
57
|
+
return join(appRoot, '.nexus', 'dev-server', fingerprint, safe + '.mjs');
|
|
58
|
+
}
|
|
59
|
+
function actionsSidecarPath(serverPath) {
|
|
60
|
+
return serverPath.replace(/\.mjs$/u, '.actions.mjs').replace(/\.js$/u, '.actions.js');
|
|
61
|
+
}
|
|
62
|
+
/** Auto-import app `$lib` helpers used inside generated action bodies (sidecar has no imports from .nx). */
|
|
63
|
+
function actionsImportPreamble(appRoot, actionsCode) {
|
|
64
|
+
const rules = [
|
|
65
|
+
{ needle: 'appendMessage', rel: 'src/lib/chat-room.js', name: 'appendMessage' },
|
|
66
|
+
{ needle: 'validateFlowPayload', rel: 'src/lib/validate-flow.js', name: 'validateFlowPayload' },
|
|
67
|
+
];
|
|
68
|
+
const byFile = new Map();
|
|
69
|
+
for (const { needle, rel, name } of rules) {
|
|
70
|
+
if (!actionsCode.includes(needle))
|
|
71
|
+
continue;
|
|
72
|
+
const abs = join(appRoot, rel);
|
|
73
|
+
if (!existsSync(abs))
|
|
74
|
+
continue;
|
|
75
|
+
let set = byFile.get(abs);
|
|
76
|
+
if (!set) {
|
|
77
|
+
set = new Set();
|
|
78
|
+
byFile.set(abs, set);
|
|
79
|
+
}
|
|
80
|
+
set.add(name);
|
|
81
|
+
}
|
|
82
|
+
const lines = [];
|
|
83
|
+
for (const [abs, set] of byFile) {
|
|
84
|
+
const names = [...set].sort().join(', ');
|
|
85
|
+
lines.push(`import { ${names} } from ${JSON.stringify(pathToFileURL(abs).href)};\n`);
|
|
86
|
+
}
|
|
87
|
+
return lines.join('');
|
|
88
|
+
}
|
|
89
|
+
async function writeActionsSidecar(appRoot, serverOutPath, actionsModule) {
|
|
90
|
+
const p = actionsSidecarPath(serverOutPath);
|
|
91
|
+
const code = actionsImportPreamble(appRoot, actionsModule) + actionsModule;
|
|
92
|
+
await writeFile(p, code, 'utf-8');
|
|
93
|
+
}
|
|
94
|
+
/** Max mtime under `src/lib/*.{js,mjs,cjs}` so edits to shared action deps bust ESM cache. */
|
|
95
|
+
async function maxSrcLibMtime(appRoot) {
|
|
96
|
+
const libDir = join(appRoot, 'src', 'lib');
|
|
97
|
+
let max = 0;
|
|
98
|
+
try {
|
|
99
|
+
const entries = await readdir(libDir, { withFileTypes: true });
|
|
100
|
+
for (const e of entries) {
|
|
101
|
+
if (!e.isFile())
|
|
102
|
+
continue;
|
|
103
|
+
if (!/\.(m?js|cjs)$/iu.test(e.name))
|
|
104
|
+
continue;
|
|
105
|
+
max = Math.max(max, (await stat(join(libDir, e.name))).mtimeMs);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return 0;
|
|
110
|
+
}
|
|
111
|
+
return max;
|
|
112
|
+
}
|
|
113
|
+
async function collectFilesRecursive(dir, match) {
|
|
114
|
+
const out = [];
|
|
115
|
+
async function walk(d) {
|
|
116
|
+
let entries;
|
|
117
|
+
try {
|
|
118
|
+
entries = await readdir(d, { withFileTypes: true });
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
for (const e of entries) {
|
|
124
|
+
const p = join(d, e.name);
|
|
125
|
+
if (e.isDirectory())
|
|
126
|
+
await walk(p);
|
|
127
|
+
else if (match(e.name))
|
|
128
|
+
out.push(p);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
await walk(dir);
|
|
132
|
+
return out;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Re-import every `*.actions.mjs` under `.nexus/dev-server` so `registerAction` picks up
|
|
136
|
+
* code changes (including edits to files imported from the sidecar, e.g. `$lib/chat-room.js`).
|
|
137
|
+
* Called from `server.reload()` when the CLI file watcher fires.
|
|
138
|
+
*/
|
|
139
|
+
/**
|
|
140
|
+
* Loads every route module once so generated `*.actions.*` sidecars run `registerAction`
|
|
141
|
+
* before any HTTP request. Dev: compiles each `.nx` route; prod: imports `*.actions.js` from `.nexus/output`.
|
|
142
|
+
*/
|
|
143
|
+
export async function preloadRegisteredServerActions(appRoot, dev) {
|
|
144
|
+
if (dev) {
|
|
145
|
+
const routesDir = join(appRoot, 'src', 'routes');
|
|
146
|
+
const manifest = await buildRouteManifest(routesDir);
|
|
147
|
+
const seen = new Set();
|
|
148
|
+
for (const route of manifest.routes) {
|
|
149
|
+
if (!route.filepath.endsWith('.nx'))
|
|
150
|
+
continue;
|
|
151
|
+
if (seen.has(route.filepath))
|
|
152
|
+
continue;
|
|
153
|
+
seen.add(route.filepath);
|
|
154
|
+
try {
|
|
155
|
+
await loadRouteModule(route.filepath, { dev: true, appRoot, pattern: route.pattern });
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
console.error(`[Nexus] Failed to preload server actions for ${route.filepath}:`, err);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
await reimportDevActionSidecars(appRoot);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const outDir = join(appRoot, '.nexus', 'output');
|
|
165
|
+
let files = [];
|
|
166
|
+
try {
|
|
167
|
+
files = await collectFilesRecursive(outDir, (n) => n.endsWith('.actions.js'));
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
for (const p of files) {
|
|
173
|
+
try {
|
|
174
|
+
const st = await stat(p);
|
|
175
|
+
await import(`${pathToFileURL(p).href}?t=${st.mtimeMs}`);
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
console.error(`[Nexus] Failed to import server actions sidecar (${p}):`, err);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
export async function reimportDevActionSidecars(appRoot) {
|
|
183
|
+
const root = join(appRoot, '.nexus', 'dev-server');
|
|
184
|
+
let files = [];
|
|
185
|
+
try {
|
|
186
|
+
files = await collectFilesRecursive(root, (n) => n.endsWith('.actions.mjs'));
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
const libM = await maxSrcLibMtime(appRoot);
|
|
192
|
+
for (const p of files) {
|
|
193
|
+
try {
|
|
194
|
+
const st = await stat(p);
|
|
195
|
+
await import(`${pathToFileURL(p).href}?t=${st.mtimeMs}_${libM}`);
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
console.error(`[Nexus] Failed to re-import actions (${p}):`, err);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
async function importActionsSidecar(serverOutPath, appRoot, dev) {
|
|
203
|
+
const p = actionsSidecarPath(serverOutPath);
|
|
204
|
+
try {
|
|
205
|
+
await stat(p);
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
try {
|
|
211
|
+
const st = await stat(p);
|
|
212
|
+
const libM = dev ? await maxSrcLibMtime(appRoot) : 0;
|
|
213
|
+
const bust = dev ? `${st.mtimeMs}_${libM}` : `${st.mtimeMs}`;
|
|
214
|
+
await import(`${pathToFileURL(p).href}?t=${bust}`);
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
console.error(`[Nexus] Failed to import server actions sidecar (${p}):`, err);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Dynamic import for `.ts`/`.js` routes, compiled `.nx` in dev, or built `.js` in production.
|
|
222
|
+
*/
|
|
223
|
+
export async function loadRouteModule(filepath, options) {
|
|
224
|
+
if (filepath.endsWith('.ts') || filepath.endsWith('.js') || filepath.endsWith('.mjs')) {
|
|
225
|
+
return import(pathToFileURL(filepath).href);
|
|
226
|
+
}
|
|
227
|
+
if (!filepath.endsWith('.nx')) {
|
|
228
|
+
throw new Error(`[Nexus] Unsupported route module: ${filepath}`);
|
|
229
|
+
}
|
|
230
|
+
const { dev, appRoot, pattern } = options;
|
|
231
|
+
if (!dev) {
|
|
232
|
+
const outFile = compiledServerPath(appRoot, pattern);
|
|
233
|
+
try {
|
|
234
|
+
await stat(outFile);
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
throw new Error(`[Nexus] No compiled server module for "${pattern}" (${filepath}). Run \`nexus build\` first.`);
|
|
238
|
+
}
|
|
239
|
+
const mod = await import(pathToFileURL(outFile).href);
|
|
240
|
+
await importActionsSidecar(outFile, appRoot, false);
|
|
241
|
+
return mod;
|
|
242
|
+
}
|
|
243
|
+
const nxStat = await stat(filepath);
|
|
244
|
+
const cc = compilerDistMeta();
|
|
245
|
+
const fingerprint = cc?.fingerprint ?? 'unknown';
|
|
246
|
+
const outPath = devServerCachePath(appRoot, filepath, fingerprint);
|
|
247
|
+
let needsCompile = true;
|
|
248
|
+
try {
|
|
249
|
+
const outStat = await stat(outPath);
|
|
250
|
+
needsCompile =
|
|
251
|
+
outStat.mtimeMs < nxStat.mtimeMs ||
|
|
252
|
+
(cc !== null && outStat.mtimeMs < cc.mtimeMs);
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
needsCompile = true;
|
|
256
|
+
}
|
|
257
|
+
if (needsCompile) {
|
|
258
|
+
const source = await readFile(filepath, 'utf-8');
|
|
259
|
+
const result = compile(source, filepath, {
|
|
260
|
+
mode: 'server',
|
|
261
|
+
dev: true,
|
|
262
|
+
ssr: true,
|
|
263
|
+
emitIslandManifest: true,
|
|
264
|
+
target: 'node',
|
|
265
|
+
appRoot,
|
|
266
|
+
});
|
|
267
|
+
await mkdir(dirname(outPath), { recursive: true });
|
|
268
|
+
await writeFile(outPath, result.serverCode, 'utf-8');
|
|
269
|
+
const ap = actionsSidecarPath(outPath);
|
|
270
|
+
if (result.actionsModule) {
|
|
271
|
+
await writeActionsSidecar(appRoot, outPath, result.actionsModule);
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
try {
|
|
275
|
+
await unlink(ap);
|
|
276
|
+
}
|
|
277
|
+
catch {
|
|
278
|
+
/* none */
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
await importActionsSidecar(outPath, appRoot, true);
|
|
283
|
+
const outStatForUrl = await stat(outPath);
|
|
284
|
+
const cacheBust = Math.max(nxStat.mtimeMs, outStatForUrl.mtimeMs, cc !== null ? cc.mtimeMs : 0);
|
|
285
|
+
const url = `${pathToFileURL(outPath).href}?t=${cacheBust}`;
|
|
286
|
+
return import(url);
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=load-module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-module.js","sourceRoot":"","sources":["../src/load-module.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nexus Server Logger — terminal observability for SSR, Actions, HMR.
|
|
3
|
+
*
|
|
4
|
+
* Symbol key:
|
|
5
|
+
* ○ Static / immutable (CDN-cached forever)
|
|
6
|
+
* ◑ PPR / SWR (partially cached, stale-while-revalidate)
|
|
7
|
+
* λ Dynamic (no CDN cache, server-rendered per request)
|
|
8
|
+
* ~ Streaming (Suspense, can't cache)
|
|
9
|
+
* ▲ Server Action (mutation)
|
|
10
|
+
* ✖ Error (any 4xx/5xx)
|
|
11
|
+
*/
|
|
12
|
+
export type CacheStrategy = 'static-immutable' | 'swr' | 'dynamic-no-store' | 'streaming-no-store' | 'private-no-store';
|
|
13
|
+
export type RouteSymbol = 'static' | 'ppr' | 'dynamic' | 'streaming' | 'error';
|
|
14
|
+
export interface RouteLogEntry {
|
|
15
|
+
method: string;
|
|
16
|
+
path: string;
|
|
17
|
+
status: number;
|
|
18
|
+
duration: number;
|
|
19
|
+
cacheStrategy?: CacheStrategy | string;
|
|
20
|
+
/** Number of <nexus-island> markers found in the rendered HTML */
|
|
21
|
+
islandCount?: number;
|
|
22
|
+
errorMessage?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface ActionLogEntry {
|
|
25
|
+
name: string;
|
|
26
|
+
duration: number;
|
|
27
|
+
status: 'success' | 'error' | 'cancelled' | 'rejected' | 'queued';
|
|
28
|
+
islandId?: string;
|
|
29
|
+
raceStrategy?: string;
|
|
30
|
+
errorMessage?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface HmrLogEntry {
|
|
33
|
+
filename: string;
|
|
34
|
+
event: string;
|
|
35
|
+
}
|
|
36
|
+
export declare const nexusLogger: {
|
|
37
|
+
/**
|
|
38
|
+
* Logs an SSR route render to the terminal.
|
|
39
|
+
* Called by @nexus_js/server after each page response.
|
|
40
|
+
*/
|
|
41
|
+
route(entry: RouteLogEntry): void;
|
|
42
|
+
/**
|
|
43
|
+
* Logs a Server Action invocation.
|
|
44
|
+
* Called by @nexus_js/server/actions after each action resolves/rejects.
|
|
45
|
+
*/
|
|
46
|
+
action(entry: ActionLogEntry): void;
|
|
47
|
+
/**
|
|
48
|
+
* Logs a file-change event from the dev-mode watcher.
|
|
49
|
+
*/
|
|
50
|
+
hmr(entry: HmrLogEntry): void;
|
|
51
|
+
/**
|
|
52
|
+
* Startup banner. Printed by the CLI after the server port is bound.
|
|
53
|
+
* The server itself does NOT call this — the CLI (or host) controls when/whether to print.
|
|
54
|
+
*/
|
|
55
|
+
banner(opts: {
|
|
56
|
+
port: number;
|
|
57
|
+
version: string;
|
|
58
|
+
elapsed: number;
|
|
59
|
+
dev: boolean;
|
|
60
|
+
}): void;
|
|
61
|
+
};
|
|
62
|
+
export type { RouteLogEntry as NexusRouteLog, ActionLogEntry as NexusActionLog };
|
|
63
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,MAAM,MAAM,aAAa,GACrB,kBAAkB,GAClB,KAAK,GACL,kBAAkB,GAClB,oBAAoB,GACpB,kBAAkB,CAAC;AAEvB,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAE/E,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAS,MAAM,CAAC;IACtB,IAAI,EAAW,MAAM,CAAC;IACtB,MAAM,EAAS,MAAM,CAAC;IACtB,QAAQ,EAAO,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;IACvC,kEAAkE;IAClE,WAAW,CAAC,EAAG,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAW,MAAM,CAAC;IACtB,QAAQ,EAAO,MAAM,CAAC;IACtB,MAAM,EAAS,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAC;IACzE,QAAQ,CAAC,EAAM,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAK,MAAM,CAAC;CAClB;AA+CD,eAAO,MAAM,WAAW;IACtB;;;OAGG;iBACU,aAAa,GAAG,IAAI;IA0BjC;;;OAGG;kBACW,cAAc,GAAG,IAAI;IA+BnC;;OAEG;eACQ,WAAW,GAAG,IAAI;IAW7B;;;OAGG;iBACU;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;CAuBrF,CAAC;AAGF,YAAY,EAAE,aAAa,IAAI,aAAa,EAAE,cAAc,IAAI,cAAc,EAAE,CAAC"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nexus Server Logger — terminal observability for SSR, Actions, HMR.
|
|
3
|
+
*
|
|
4
|
+
* Symbol key:
|
|
5
|
+
* ○ Static / immutable (CDN-cached forever)
|
|
6
|
+
* ◑ PPR / SWR (partially cached, stale-while-revalidate)
|
|
7
|
+
* λ Dynamic (no CDN cache, server-rendered per request)
|
|
8
|
+
* ~ Streaming (Suspense, can't cache)
|
|
9
|
+
* ▲ Server Action (mutation)
|
|
10
|
+
* ✖ Error (any 4xx/5xx)
|
|
11
|
+
*/
|
|
12
|
+
// ── ANSI palette ──────────────────────────────────────────────────────────────
|
|
13
|
+
const c = {
|
|
14
|
+
reset: '\x1b[0m', bold: '\x1b[1m', dim: '\x1b[2m',
|
|
15
|
+
red: '\x1b[31m', green: '\x1b[32m', yellow: '\x1b[33m',
|
|
16
|
+
blue: '\x1b[34m', mag: '\x1b[35m', cyan: '\x1b[36m',
|
|
17
|
+
gray: '\x1b[90m', white: '\x1b[97m',
|
|
18
|
+
};
|
|
19
|
+
// ── Internal helpers ──────────────────────────────────────────────────────────
|
|
20
|
+
function now() {
|
|
21
|
+
return new Date().toLocaleTimeString('en', { hour12: false });
|
|
22
|
+
}
|
|
23
|
+
function routeSymbol(entry) {
|
|
24
|
+
if (entry.status >= 500 || entry.status === 0)
|
|
25
|
+
return `${c.red}✖${c.reset}`;
|
|
26
|
+
if (entry.status >= 400)
|
|
27
|
+
return `${c.yellow}✖${c.reset}`;
|
|
28
|
+
switch (entry.cacheStrategy) {
|
|
29
|
+
case 'static-immutable': return `${c.green}○${c.reset}`;
|
|
30
|
+
case 'swr': return `${c.cyan}◑${c.reset}`;
|
|
31
|
+
case 'streaming-no-store': return `${c.mag}~${c.reset}`;
|
|
32
|
+
case 'private-no-store': return `${c.gray}λ${c.reset}`;
|
|
33
|
+
default: return `${c.yellow}λ${c.reset}`;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function cacheTag(strategy) {
|
|
37
|
+
if (!strategy)
|
|
38
|
+
return '';
|
|
39
|
+
const tags = {
|
|
40
|
+
'static-immutable': `${c.green}[Static ∞]${c.reset}`,
|
|
41
|
+
'swr': `${c.cyan}[SWR]${c.reset}`,
|
|
42
|
+
'dynamic-no-store': `${c.yellow}[Dynamic]${c.reset}`,
|
|
43
|
+
'streaming-no-store': `${c.mag}[Stream]${c.reset}`,
|
|
44
|
+
'private-no-store': `${c.gray}[Private]${c.reset}`,
|
|
45
|
+
};
|
|
46
|
+
return ' ' + (tags[strategy] ?? `${c.gray}[${strategy}]${c.reset}`);
|
|
47
|
+
}
|
|
48
|
+
function durationColor(ms) {
|
|
49
|
+
if (ms < 50)
|
|
50
|
+
return c.green;
|
|
51
|
+
if (ms < 300)
|
|
52
|
+
return c.yellow;
|
|
53
|
+
return c.red;
|
|
54
|
+
}
|
|
55
|
+
function actionStatusColor(status) {
|
|
56
|
+
switch (status) {
|
|
57
|
+
case 'success': return c.green;
|
|
58
|
+
case 'cancelled': return c.yellow;
|
|
59
|
+
case 'queued': return c.cyan;
|
|
60
|
+
default: return c.red;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// ── Exported logger ───────────────────────────────────────────────────────────
|
|
64
|
+
export const nexusLogger = {
|
|
65
|
+
/**
|
|
66
|
+
* Logs an SSR route render to the terminal.
|
|
67
|
+
* Called by @nexus_js/server after each page response.
|
|
68
|
+
*/
|
|
69
|
+
route(entry) {
|
|
70
|
+
const sym = routeSymbol(entry);
|
|
71
|
+
const mCol = entry.method === 'GET' ? c.cyan : c.mag;
|
|
72
|
+
const sCol = entry.status >= 500 ? c.red : entry.status >= 400 ? c.yellow : c.green;
|
|
73
|
+
const tCol = durationColor(entry.duration);
|
|
74
|
+
const islands = typeof entry.islandCount === 'number' && entry.islandCount > 0
|
|
75
|
+
? ` ${c.dim}${entry.islandCount} island${entry.islandCount !== 1 ? 's' : ''}${c.reset}`
|
|
76
|
+
: '';
|
|
77
|
+
const errTag = entry.errorMessage
|
|
78
|
+
? ` ${c.red}${entry.errorMessage.slice(0, 60)}${c.reset}`
|
|
79
|
+
: '';
|
|
80
|
+
process.stdout.write(` ${sym} ` +
|
|
81
|
+
`${c.gray}${now()}${c.reset}` +
|
|
82
|
+
` ${mCol}${entry.method.padEnd(4)}${c.reset}` +
|
|
83
|
+
` ${entry.path.padEnd(38)}` +
|
|
84
|
+
` ${sCol}${entry.status}${c.reset}` +
|
|
85
|
+
` ${tCol}${entry.duration}ms${c.reset}` +
|
|
86
|
+
cacheTag(entry.cacheStrategy) +
|
|
87
|
+
islands +
|
|
88
|
+
errTag +
|
|
89
|
+
'\n');
|
|
90
|
+
},
|
|
91
|
+
/**
|
|
92
|
+
* Logs a Server Action invocation.
|
|
93
|
+
* Called by @nexus_js/server/actions after each action resolves/rejects.
|
|
94
|
+
*/
|
|
95
|
+
action(entry) {
|
|
96
|
+
const sCol = actionStatusColor(entry.status);
|
|
97
|
+
const sym = entry.status === 'success'
|
|
98
|
+
? `${c.green}▲${c.reset}`
|
|
99
|
+
: entry.status === 'cancelled' || entry.status === 'queued'
|
|
100
|
+
? `${c.yellow}▲${c.reset}`
|
|
101
|
+
: `${c.red}▲${c.reset}`;
|
|
102
|
+
const raceTag = entry.raceStrategy
|
|
103
|
+
? ` ${c.dim}[race:${entry.raceStrategy}]${c.reset}`
|
|
104
|
+
: '';
|
|
105
|
+
const islandTag = entry.islandId
|
|
106
|
+
? ` ${c.gray}↳ ${entry.islandId}${c.reset}`
|
|
107
|
+
: '';
|
|
108
|
+
const errTag = entry.errorMessage
|
|
109
|
+
? ` ${c.red}${entry.errorMessage.slice(0, 60)}${c.reset}`
|
|
110
|
+
: '';
|
|
111
|
+
process.stdout.write(` ${sym} ` +
|
|
112
|
+
`${c.gray}${now()}${c.reset}` +
|
|
113
|
+
` ${c.mag}${c.bold}ACTION${c.reset}` +
|
|
114
|
+
` ${c.white}${entry.name.padEnd(32)}${c.reset}` +
|
|
115
|
+
` ${sCol}${entry.status.toUpperCase().padEnd(10)}${c.reset}` +
|
|
116
|
+
` ${c.dim}+${entry.duration}ms${c.reset}` +
|
|
117
|
+
raceTag +
|
|
118
|
+
islandTag +
|
|
119
|
+
errTag +
|
|
120
|
+
'\n');
|
|
121
|
+
},
|
|
122
|
+
/**
|
|
123
|
+
* Logs a file-change event from the dev-mode watcher.
|
|
124
|
+
*/
|
|
125
|
+
hmr(entry) {
|
|
126
|
+
process.stdout.write(` ${c.mag}◈${c.reset}` +
|
|
127
|
+
` ${c.gray}${now()}${c.reset}` +
|
|
128
|
+
` ${c.mag}[HMR]${c.reset}` +
|
|
129
|
+
` ${c.cyan}${entry.filename}${c.reset}` +
|
|
130
|
+
` ${c.dim}${entry.event} — routes reloaded${c.reset}` +
|
|
131
|
+
'\n');
|
|
132
|
+
},
|
|
133
|
+
/**
|
|
134
|
+
* Startup banner. Printed by the CLI after the server port is bound.
|
|
135
|
+
* The server itself does NOT call this — the CLI (or host) controls when/whether to print.
|
|
136
|
+
*/
|
|
137
|
+
banner(opts) {
|
|
138
|
+
if (process.stdout.isTTY)
|
|
139
|
+
process.stdout.write('\x1b[2J\x1b[H');
|
|
140
|
+
const env = opts.dev ? `${c.yellow}dev${c.reset}` : `${c.green}production${c.reset}`;
|
|
141
|
+
const ready = `${c.green}ready in ${opts.elapsed}ms${c.reset}`;
|
|
142
|
+
console.log(`\n ${c.mag}${c.bold}◆ NEXUS${c.reset} ${c.dim}v${opts.version}${c.reset}` +
|
|
143
|
+
` ${env} ${ready}\n` +
|
|
144
|
+
`\n ${c.green}➜${c.reset} ${c.bold}Local${c.reset} ${c.cyan}http://localhost:${opts.port}/${c.reset}` +
|
|
145
|
+
(opts.dev
|
|
146
|
+
? `\n ${c.green}➜${c.reset} ${c.bold}Studio${c.reset} ${c.cyan}http://localhost:7822/${c.reset} ${c.dim}nexus studio${c.reset}`
|
|
147
|
+
: '') +
|
|
148
|
+
`\n\n Symbol key:` +
|
|
149
|
+
` ${c.green}○${c.reset} static ` +
|
|
150
|
+
`${c.cyan}◑${c.reset} SWR ` +
|
|
151
|
+
`${c.yellow}λ${c.reset} dynamic ` +
|
|
152
|
+
`${c.mag}~${c.reset} stream ` +
|
|
153
|
+
`${c.green}▲${c.reset} action ` +
|
|
154
|
+
`${c.red}✖${c.reset} error` +
|
|
155
|
+
`\n\n ${c.dim}press Ctrl+C to stop${c.reset}\n`);
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nexus Navigation Server Handler
|
|
3
|
+
*
|
|
4
|
+
* Responds to /_nexus/navigate?path=... requests from the client router.
|
|
5
|
+
* Returns a JSON payload with the new page's HTML and metadata,
|
|
6
|
+
* optimized for the DOM morphing algorithm.
|
|
7
|
+
*/
|
|
8
|
+
import type { RouteManifest } from '@nexus_js/router';
|
|
9
|
+
import type { RenderOptions } from './renderer.js';
|
|
10
|
+
export interface NavigationPayload {
|
|
11
|
+
html: string;
|
|
12
|
+
headHTML: string;
|
|
13
|
+
islandManifest: Array<{
|
|
14
|
+
id: string;
|
|
15
|
+
componentPath: string;
|
|
16
|
+
strategy: string;
|
|
17
|
+
}>;
|
|
18
|
+
timestamp: number;
|
|
19
|
+
}
|
|
20
|
+
export declare function handleNavigationRequest(request: Request, manifest: RouteManifest, renderOpts: RenderOptions): Promise<Response>;
|
|
21
|
+
//# sourceMappingURL=navigate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigate.d.ts","sourceRoot":"","sources":["../src/navigate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/E,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,aAAa,GACxB,OAAO,CAAC,QAAQ,CAAC,CAgDnB"}
|
package/dist/navigate.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nexus Navigation Server Handler
|
|
3
|
+
*
|
|
4
|
+
* Responds to /_nexus/navigate?path=... requests from the client router.
|
|
5
|
+
* Returns a JSON payload with the new page's HTML and metadata,
|
|
6
|
+
* optimized for the DOM morphing algorithm.
|
|
7
|
+
*/
|
|
8
|
+
import { matchRoute } from '@nexus_js/router';
|
|
9
|
+
import { createContext } from './context.js';
|
|
10
|
+
import { renderRoute } from './renderer.js';
|
|
11
|
+
export async function handleNavigationRequest(request, manifest, renderOpts) {
|
|
12
|
+
const url = new URL(request.url);
|
|
13
|
+
const path = url.searchParams.get('path') ?? '/';
|
|
14
|
+
const matched = matchRoute(path, manifest);
|
|
15
|
+
if (!matched) {
|
|
16
|
+
return new Response(JSON.stringify({ error: 'Route not found', path }), { status: 404, headers: { 'content-type': 'application/json' } });
|
|
17
|
+
}
|
|
18
|
+
// Create a mock request for the target path
|
|
19
|
+
const targetRequest = new Request(new URL(path, request.url).href, { headers: request.headers });
|
|
20
|
+
const ctx = createContext(targetRequest, matched.params);
|
|
21
|
+
try {
|
|
22
|
+
const result = await renderRoute(matched, ctx, renderOpts);
|
|
23
|
+
// Extract <head> content from the full HTML
|
|
24
|
+
const headMatch = /<head>([\s\S]*?)<\/head>/i.exec(result.html);
|
|
25
|
+
const bodyMatch = /<body[^>]*>([\s\S]*?)<\/body>/i.exec(result.html);
|
|
26
|
+
const payload = {
|
|
27
|
+
html: bodyMatch?.[1]?.trim() ?? result.html,
|
|
28
|
+
headHTML: headMatch?.[1]?.trim() ?? '',
|
|
29
|
+
islandManifest: [],
|
|
30
|
+
timestamp: Date.now(),
|
|
31
|
+
};
|
|
32
|
+
return new Response(JSON.stringify(payload), {
|
|
33
|
+
status: 200,
|
|
34
|
+
headers: {
|
|
35
|
+
'content-type': 'application/json',
|
|
36
|
+
'cache-control': 'no-store',
|
|
37
|
+
'x-nexus-navigate': '1',
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
return new Response(JSON.stringify({ error: err instanceof Error ? err.message : String(err) }), { status: 500, headers: { 'content-type': 'application/json' } });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=navigate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigate.js","sourceRoot":"","sources":["../src/navigate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAU5C,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAgB,EAChB,QAAuB,EACvB,UAAyB;IAEzB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;IAEjD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAE3C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,EAClD,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,CACjE,CAAC;IACJ,CAAC;IAED,4CAA4C;IAC5C,MAAM,aAAa,GAAG,IAAI,OAAO,CAC/B,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAC/B,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAC7B,CAAC;IACF,MAAM,GAAG,GAAG,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAE3D,4CAA4C;QAC5C,MAAM,SAAS,GAAG,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,gCAAgC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAErE,MAAM,OAAO,GAAsB;YACjC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI;YAC3C,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;YACtC,cAAc,EAAE,EAAE;YAClB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;YAC3C,MAAM,EAAE,GAAG;YACX,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU;gBAC3B,kBAAkB,EAAE,GAAG;aACxB;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAC3E,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,CACjE,CAAC;IACJ,CAAC;AACH,CAAC"}
|