@cmj/juice 0.6.0 → 0.6.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/dist/compiler/diagnostics.d.ts +63 -0
- package/dist/compiler/diagnostics.d.ts.map +1 -0
- package/dist/compiler/diagnostics.js +142 -0
- package/dist/compiler/diagnostics.js.map +1 -0
- package/dist/compiler/plugin.d.ts.map +1 -1
- package/dist/compiler/plugin.js +160 -13
- package/dist/compiler/plugin.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route entry shape accepted by diagnostics.
|
|
3
|
+
* Wider than DiscoveredRoute to accept readonly layouts from plugin.ts.
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
interface DiagnosticRouteEntry {
|
|
7
|
+
readonly moduleId: string;
|
|
8
|
+
readonly layouts?: readonly string[];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A diagnostic warning about a likely route file naming mistake.
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export interface RouteDiagnostic {
|
|
15
|
+
/** Relative path to the route file (e.g. 'product.tsx') */
|
|
16
|
+
readonly file: string;
|
|
17
|
+
/** Current URL pattern (static) */
|
|
18
|
+
readonly currentPattern: string;
|
|
19
|
+
/** Suggested URL pattern (dynamic) */
|
|
20
|
+
readonly suggestedPattern: string;
|
|
21
|
+
/** Suggested filename with brackets */
|
|
22
|
+
readonly suggestedFile: string;
|
|
23
|
+
/** Param names referenced in the component source */
|
|
24
|
+
readonly referencedParams: readonly string[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Scan a route module's source code for references to dynamic params.
|
|
28
|
+
*
|
|
29
|
+
* Uses lightweight regex analysis — not a full AST parse. This is
|
|
30
|
+
* intentional: we're looking for *likely* param usage to emit helpful
|
|
31
|
+
* diagnostics, not enforcing correctness.
|
|
32
|
+
*
|
|
33
|
+
* @param source - The source code of the route module.
|
|
34
|
+
* @returns Array of unique param names referenced (e.g. `['id', 'slug']`).
|
|
35
|
+
*
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
export declare function _scanParamsUsage(source: string): string[];
|
|
39
|
+
/**
|
|
40
|
+
* Cross-reference discovered routes with their source code to find
|
|
41
|
+
* files that reference dynamic params but use static filenames.
|
|
42
|
+
*
|
|
43
|
+
* For each static route (no `:param` segments), reads the source file
|
|
44
|
+
* and checks for `params.xxx` usage. If found, emits a diagnostic
|
|
45
|
+
* suggesting the correct filename with `[param]` brackets.
|
|
46
|
+
*
|
|
47
|
+
* @param routes - The discovered route map from `_discoverRoutes`.
|
|
48
|
+
* @param projectRoot - Absolute path to the project root.
|
|
49
|
+
* @returns Array of diagnostics (empty if no mismatches found).
|
|
50
|
+
*
|
|
51
|
+
* @internal
|
|
52
|
+
*/
|
|
53
|
+
export declare function _diagnoseRouteMismatches(routes: Record<string, DiagnosticRouteEntry>, projectRoot: string): RouteDiagnostic[];
|
|
54
|
+
/**
|
|
55
|
+
* Format a diagnostic into a human-readable warning string.
|
|
56
|
+
*
|
|
57
|
+
* Follows the Juice error convention: WHAT, WHY, HOW TO FIX.
|
|
58
|
+
*
|
|
59
|
+
* @internal
|
|
60
|
+
*/
|
|
61
|
+
export declare function _formatDiagnostic(diag: RouteDiagnostic): string;
|
|
62
|
+
export {};
|
|
63
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/compiler/diagnostics.ts"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,sCAAsC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,uCAAuC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AA6BD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAyBzD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAC5C,WAAW,EAAE,MAAM,GAClB,eAAe,EAAE,CA8CnB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAW/D"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
// ─────────────────────────────────────────────────────────────────
|
|
2
|
+
// @cmj/juice — Route Diagnostics
|
|
3
|
+
//
|
|
4
|
+
// Detects common file-naming mistakes in route discovery and emits
|
|
5
|
+
// empathic warnings with WHAT, WHY, and HOW TO FIX.
|
|
6
|
+
//
|
|
7
|
+
// This module is pure — no side effects, deterministic output.
|
|
8
|
+
// ─────────────────────────────────────────────────────────────────
|
|
9
|
+
import { readFileSync } from 'node:fs';
|
|
10
|
+
import { join, basename, dirname } from 'node:path';
|
|
11
|
+
// ── Regex patterns for params usage detection ──────────────────
|
|
12
|
+
/**
|
|
13
|
+
* Matches `params.xxx` dot-access patterns.
|
|
14
|
+
* Captures the param name after the dot.
|
|
15
|
+
*
|
|
16
|
+
* Examples:
|
|
17
|
+
* params.id → 'id'
|
|
18
|
+
* params.slug → 'slug'
|
|
19
|
+
* params?.id → 'id'
|
|
20
|
+
*
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
const PARAMS_DOT_ACCESS = /params\??\.(\w+)/g;
|
|
24
|
+
/**
|
|
25
|
+
* Matches destructuring from `params` on a single line:
|
|
26
|
+
* const { id } = params
|
|
27
|
+
* const { id, slug } = params
|
|
28
|
+
* let { id } = params
|
|
29
|
+
*
|
|
30
|
+
* Created fresh for each line to avoid lastIndex issues.
|
|
31
|
+
*
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
const PARAMS_DESTRUCTURE_LINE = /\{\s*([^}]+)\}\s*=\s*params\b/;
|
|
35
|
+
/**
|
|
36
|
+
* Scan a route module's source code for references to dynamic params.
|
|
37
|
+
*
|
|
38
|
+
* Uses lightweight regex analysis — not a full AST parse. This is
|
|
39
|
+
* intentional: we're looking for *likely* param usage to emit helpful
|
|
40
|
+
* diagnostics, not enforcing correctness.
|
|
41
|
+
*
|
|
42
|
+
* @param source - The source code of the route module.
|
|
43
|
+
* @returns Array of unique param names referenced (e.g. `['id', 'slug']`).
|
|
44
|
+
*
|
|
45
|
+
* @internal
|
|
46
|
+
*/
|
|
47
|
+
export function _scanParamsUsage(source) {
|
|
48
|
+
const found = new Set();
|
|
49
|
+
// 1. Dot-access: params.id, params?.slug
|
|
50
|
+
for (const match of source.matchAll(PARAMS_DOT_ACCESS)) {
|
|
51
|
+
if (match[1])
|
|
52
|
+
found.add(match[1]);
|
|
53
|
+
}
|
|
54
|
+
// 2. Destructuring: const { id, slug } = params
|
|
55
|
+
// Process line-by-line to prevent cross-line false positives
|
|
56
|
+
// (e.g., `function Page({ params }) {` merging with later lines)
|
|
57
|
+
for (const line of source.split('\n')) {
|
|
58
|
+
const match = PARAMS_DESTRUCTURE_LINE.exec(line);
|
|
59
|
+
if (match?.[1]) {
|
|
60
|
+
for (const part of match[1].split(',')) {
|
|
61
|
+
const trimmed = part.trim();
|
|
62
|
+
const propName = trimmed.split(':')[0].trim();
|
|
63
|
+
if (propName && /^\w+$/.test(propName)) {
|
|
64
|
+
found.add(propName);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return [...found];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Cross-reference discovered routes with their source code to find
|
|
73
|
+
* files that reference dynamic params but use static filenames.
|
|
74
|
+
*
|
|
75
|
+
* For each static route (no `:param` segments), reads the source file
|
|
76
|
+
* and checks for `params.xxx` usage. If found, emits a diagnostic
|
|
77
|
+
* suggesting the correct filename with `[param]` brackets.
|
|
78
|
+
*
|
|
79
|
+
* @param routes - The discovered route map from `_discoverRoutes`.
|
|
80
|
+
* @param projectRoot - Absolute path to the project root.
|
|
81
|
+
* @returns Array of diagnostics (empty if no mismatches found).
|
|
82
|
+
*
|
|
83
|
+
* @internal
|
|
84
|
+
*/
|
|
85
|
+
export function _diagnoseRouteMismatches(routes, projectRoot) {
|
|
86
|
+
const diagnostics = [];
|
|
87
|
+
for (const [pattern, entry] of Object.entries(routes)) {
|
|
88
|
+
// Skip routes that already have dynamic segments — they're fine
|
|
89
|
+
if (pattern.includes(':'))
|
|
90
|
+
continue;
|
|
91
|
+
// Resolve the module path and read source
|
|
92
|
+
const modulePath = entry.moduleId.replace(/^\.\//, '');
|
|
93
|
+
const absolutePath = join(projectRoot, modulePath);
|
|
94
|
+
let source;
|
|
95
|
+
try {
|
|
96
|
+
source = readFileSync(absolutePath, 'utf-8');
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
continue; // File unreadable — skip silently
|
|
100
|
+
}
|
|
101
|
+
const referencedParams = _scanParamsUsage(source);
|
|
102
|
+
if (referencedParams.length === 0)
|
|
103
|
+
continue;
|
|
104
|
+
// Build the suggested filename with [param] brackets
|
|
105
|
+
const fileName = basename(modulePath);
|
|
106
|
+
const ext = fileName.match(/\.[jt]sx?$/)?.[0] ?? '.tsx';
|
|
107
|
+
const baseName = fileName.replace(/\.[jt]sx?$/, '');
|
|
108
|
+
const dir = dirname(modulePath);
|
|
109
|
+
// Build suggested filename: product → product.[id]
|
|
110
|
+
const paramBrackets = referencedParams.map(p => `[${p}]`).join('.');
|
|
111
|
+
const suggestedBaseName = `${baseName}.${paramBrackets}`;
|
|
112
|
+
const suggestedFile = `${dir}/${suggestedBaseName}${ext}`;
|
|
113
|
+
// Build suggested URL pattern: /product → /product/:id
|
|
114
|
+
const paramSegments = referencedParams.map(p => `:${p}`).join('/');
|
|
115
|
+
const suggestedPattern = `${pattern}/${paramSegments}`;
|
|
116
|
+
diagnostics.push({
|
|
117
|
+
file: modulePath,
|
|
118
|
+
currentPattern: pattern,
|
|
119
|
+
suggestedPattern,
|
|
120
|
+
suggestedFile,
|
|
121
|
+
referencedParams,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
return diagnostics;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Format a diagnostic into a human-readable warning string.
|
|
128
|
+
*
|
|
129
|
+
* Follows the Juice error convention: WHAT, WHY, HOW TO FIX.
|
|
130
|
+
*
|
|
131
|
+
* @internal
|
|
132
|
+
*/
|
|
133
|
+
export function _formatDiagnostic(diag) {
|
|
134
|
+
const paramList = diag.referencedParams.join(', ');
|
|
135
|
+
const paramRefs = diag.referencedParams.map(p => `params.${p}`).join(', ');
|
|
136
|
+
return (`[juice] ⚠ Route "${basename(diag.file)}" maps to "${diag.currentPattern}" (static).\n` +
|
|
137
|
+
` Your component references ${paramRefs} which suggests a dynamic route.\n` +
|
|
138
|
+
` Did you mean: ${basename(diag.suggestedFile)} → ${diag.suggestedPattern}\n` +
|
|
139
|
+
` Rename the file to enable dynamic params:\n` +
|
|
140
|
+
` mv ${diag.file} ${diag.suggestedFile}`);
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/compiler/diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/compiler/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/compiler/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA2BrD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,GAAG,CA0gB/D"}
|
package/dist/compiler/plugin.js
CHANGED
|
@@ -33,6 +33,7 @@ import { ClientModuleRegistry } from './registry.js';
|
|
|
33
33
|
import { ServerActionRegistry } from './server-action-registry.js';
|
|
34
34
|
import { _discoverRoutes } from './discover.js';
|
|
35
35
|
import { _generateRouteTypes } from './dts.js';
|
|
36
|
+
import { _diagnoseRouteMismatches, _formatDiagnostic } from './diagnostics.js';
|
|
36
37
|
/**
|
|
37
38
|
* Virtual module prefix used to serve proxy modules for `'use client'`
|
|
38
39
|
* components during the server build.
|
|
@@ -112,6 +113,10 @@ export default function juice(options) {
|
|
|
112
113
|
routes = discovered;
|
|
113
114
|
}
|
|
114
115
|
}
|
|
116
|
+
// Emit empathic warnings for likely misnamed route files
|
|
117
|
+
if (routes) {
|
|
118
|
+
_emitRouteDiagnostics(config.root, routes);
|
|
119
|
+
}
|
|
115
120
|
// Emit typed route params — juice-env.d.ts
|
|
116
121
|
if (routes) {
|
|
117
122
|
_emitRouteTypes(config.root, routes);
|
|
@@ -131,6 +136,7 @@ export default function juice(options) {
|
|
|
131
136
|
if (discovered) {
|
|
132
137
|
routes = discovered;
|
|
133
138
|
_emitRouteTypes(config.root, routes);
|
|
139
|
+
_emitRouteDiagnostics(config.root, routes);
|
|
134
140
|
}
|
|
135
141
|
}
|
|
136
142
|
});
|
|
@@ -140,6 +146,7 @@ export default function juice(options) {
|
|
|
140
146
|
if (discovered) {
|
|
141
147
|
routes = discovered;
|
|
142
148
|
_emitRouteTypes(config.root, routes);
|
|
149
|
+
_emitRouteDiagnostics(config.root, routes);
|
|
143
150
|
}
|
|
144
151
|
}
|
|
145
152
|
});
|
|
@@ -155,23 +162,36 @@ export default function juice(options) {
|
|
|
155
162
|
) {
|
|
156
163
|
return next();
|
|
157
164
|
}
|
|
158
|
-
// Match against configured routes
|
|
165
|
+
// Match against configured routes using URLPattern for
|
|
166
|
+
// dynamic segment extraction (parity with production router)
|
|
159
167
|
if (!routes)
|
|
160
168
|
return next();
|
|
161
|
-
|
|
162
|
-
let
|
|
163
|
-
for (const [pattern, entry] of
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
169
|
+
let matchedEntry = null;
|
|
170
|
+
let params = {};
|
|
171
|
+
for (const [pattern, entry] of Object.entries(routes)) {
|
|
172
|
+
try {
|
|
173
|
+
const urlPattern = new URLPattern({ pathname: pattern });
|
|
174
|
+
const result = urlPattern.exec(`http://localhost${pathname}`);
|
|
175
|
+
if (result) {
|
|
176
|
+
matchedEntry = entry;
|
|
177
|
+
params = (result.pathname.groups ?? {});
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
// Fallback to exact match for patterns URLPattern can't handle
|
|
183
|
+
if (pattern === pathname) {
|
|
184
|
+
matchedEntry = entry;
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
167
187
|
}
|
|
168
188
|
}
|
|
169
|
-
if (!
|
|
189
|
+
if (!matchedEntry)
|
|
170
190
|
return next();
|
|
171
191
|
try {
|
|
172
192
|
// Load the route module through Vite's SSR module loader.
|
|
173
193
|
// This gives us HMR — Vite invalidates + reloads on file change.
|
|
174
|
-
const mod = await server.ssrLoadModule(
|
|
194
|
+
const mod = await server.ssrLoadModule(matchedEntry.moduleId);
|
|
175
195
|
const Component = mod.default;
|
|
176
196
|
if (!Component) {
|
|
177
197
|
return next();
|
|
@@ -181,8 +201,69 @@ export default function juice(options) {
|
|
|
181
201
|
// ssrLoadModule for HMR, but React doesn't need HMR.
|
|
182
202
|
const React = await import('react');
|
|
183
203
|
const ReactDOM = await import('react-dom/server');
|
|
184
|
-
//
|
|
185
|
-
const
|
|
204
|
+
// Build props matching the production render pipeline
|
|
205
|
+
const url = new URL(pathname, `http://${req.headers.host ?? 'localhost'}`);
|
|
206
|
+
const searchParams = Object.fromEntries(url.searchParams.entries());
|
|
207
|
+
// Create the page element with params and searchParams
|
|
208
|
+
let element = React.createElement(Component, { params, searchParams });
|
|
209
|
+
// ── Wrap in layout chain (root → leaf) ────────────────
|
|
210
|
+
// Matches render.ts: iterate in reverse so leaf wraps page,
|
|
211
|
+
// then parent wraps that, etc.
|
|
212
|
+
if (matchedEntry.layouts && matchedEntry.layouts.length > 0) {
|
|
213
|
+
// Build a synthetic Request for layout props
|
|
214
|
+
const request = new Request(url.href, {
|
|
215
|
+
method: req.method,
|
|
216
|
+
headers: req.headers,
|
|
217
|
+
});
|
|
218
|
+
for (let i = matchedEntry.layouts.length - 1; i >= 0; i--) {
|
|
219
|
+
const layoutMod = await server.ssrLoadModule(matchedEntry.layouts[i]);
|
|
220
|
+
const Layout = layoutMod.default;
|
|
221
|
+
if (typeof Layout === 'function') {
|
|
222
|
+
element = React.createElement(Layout, { request }, element);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// ── Render with onError callback (matches render.ts) ────
|
|
227
|
+
// Track thrown Response objects from React's onError callback.
|
|
228
|
+
// React's onError fires asynchronously during streaming — we
|
|
229
|
+
// store the thrown Response and check after awaiting the stream.
|
|
230
|
+
let thrownResponse = null;
|
|
231
|
+
const stream = await ReactDOM.renderToReadableStream(element, {
|
|
232
|
+
onError(error) {
|
|
233
|
+
// React calls this for errors during streaming.
|
|
234
|
+
// If it's a thrown Response, capture it — don't log.
|
|
235
|
+
if (error instanceof Response) {
|
|
236
|
+
thrownResponse = error;
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
// Real errors — log for the developer
|
|
240
|
+
console.error('[juice/dev]', error);
|
|
241
|
+
},
|
|
242
|
+
});
|
|
243
|
+
// Wait for ALL Suspense boundaries to resolve. This ensures
|
|
244
|
+
// thrown Responses from async components are caught before we
|
|
245
|
+
// commit to a status code. Matches render.ts production behavior.
|
|
246
|
+
await stream.allReady;
|
|
247
|
+
// ── Check for thrown Response ──────────────────────────────
|
|
248
|
+
// If a component threw `new Response(body, { status: 404 })`,
|
|
249
|
+
// the onError callback captured it. Forward it to the client
|
|
250
|
+
// with proper status code and empathic logging.
|
|
251
|
+
if (thrownResponse) {
|
|
252
|
+
const status = thrownResponse.status;
|
|
253
|
+
const body = await thrownResponse.text().catch(() => '');
|
|
254
|
+
console.warn(`[juice/dev] Route "${matchedEntry.moduleId}" threw Response(${status}) for ${pathname}` +
|
|
255
|
+
(body ? `\n Body: ${body.slice(0, 200)}` : ''));
|
|
256
|
+
res.statusCode = status;
|
|
257
|
+
res.setHeader('Content-Type', 'text/html; charset=utf-8');
|
|
258
|
+
res.end(`<!DOCTYPE html><html><head><title>${status}</title>` +
|
|
259
|
+
`<script type="module" src="/@vite/client"></script></head>` +
|
|
260
|
+
`<body style="font-family:system-ui;padding:2rem;background:#1a1a2e;color:#e0e0e0">` +
|
|
261
|
+
`<h1 style="color:#ff6b6b">${status}</h1>` +
|
|
262
|
+
`${body ? `<p>${_escapeHtml(body)}</p>` : '<p>The route component threw a Response with no body.</p>'}` +
|
|
263
|
+
`<p style="color:#888;margin-top:1rem">Route: <code>${_escapeHtml(matchedEntry.moduleId)}</code></p>` +
|
|
264
|
+
`</body></html>`);
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
186
267
|
// Collect the full HTML so we can inject the Vite HMR client
|
|
187
268
|
const reader = stream.getReader();
|
|
188
269
|
const decoder = new TextDecoder();
|
|
@@ -206,8 +287,47 @@ export default function juice(options) {
|
|
|
206
287
|
res.end(html);
|
|
207
288
|
}
|
|
208
289
|
catch (e) {
|
|
209
|
-
|
|
210
|
-
|
|
290
|
+
// ── Handle `throw new Response()` from route components ──
|
|
291
|
+
// This is a legitimate control flow pattern (e.g., 404 not found).
|
|
292
|
+
// Forward the Response status/body directly to the client.
|
|
293
|
+
if (e instanceof Response) {
|
|
294
|
+
const status = e.status;
|
|
295
|
+
const body = await e.text().catch(() => '');
|
|
296
|
+
console.warn(`[juice/dev] Route "${matchedEntry.moduleId}" threw Response(${status}) for ${pathname}` +
|
|
297
|
+
(body ? `\n Body: ${body.slice(0, 200)}` : ''));
|
|
298
|
+
res.statusCode = status;
|
|
299
|
+
res.setHeader('Content-Type', 'text/html; charset=utf-8');
|
|
300
|
+
res.end(`<!DOCTYPE html><html><head><title>${status}</title>` +
|
|
301
|
+
`<script type="module" src="/@vite/client"></script></head>` +
|
|
302
|
+
`<body><h1>${status}</h1>${body ? `<p>${_escapeHtml(body)}</p>` : ''}</body></html>`);
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
// ── Handle real errors with empathic diagnostics ──────────
|
|
306
|
+
const err = e instanceof Error ? e : new Error(String(e));
|
|
307
|
+
server.ssrFixStacktrace(err);
|
|
308
|
+
const moduleId = matchedEntry.moduleId;
|
|
309
|
+
const message = err.message || String(e);
|
|
310
|
+
// Log empathic error: WHAT, WHY, HOW TO FIX
|
|
311
|
+
console.error(`[juice/dev] ❌ SSR render failed for ${pathname}\n` +
|
|
312
|
+
` Route: ${moduleId}\n` +
|
|
313
|
+
` Error: ${message}\n` +
|
|
314
|
+
(err.stack ? ` Stack: ${err.stack.split('\n').slice(1, 4).join('\n ')}\n` : '') +
|
|
315
|
+
`\n Try:\n` +
|
|
316
|
+
` • Check that "${moduleId}" exists and exports a default component.\n` +
|
|
317
|
+
` • If the file uses bracket params (e.g., [id]), ensure Vite can resolve it.\n` +
|
|
318
|
+
` • Check the component for runtime errors (null access, missing imports).`);
|
|
319
|
+
// Return a visible error page instead of a silent empty 404
|
|
320
|
+
res.statusCode = 500;
|
|
321
|
+
res.setHeader('Content-Type', 'text/html; charset=utf-8');
|
|
322
|
+
res.end(`<!DOCTYPE html><html><head><title>SSR Error</title>` +
|
|
323
|
+
`<script type="module" src="/@vite/client"></script></head>` +
|
|
324
|
+
`<body style="font-family:system-ui;padding:2rem;background:#1a1a2e;color:#e0e0e0">` +
|
|
325
|
+
`<h1 style="color:#ff6b6b">❌ SSR Render Error</h1>` +
|
|
326
|
+
`<p><strong>Route:</strong> <code>${_escapeHtml(moduleId)}</code></p>` +
|
|
327
|
+
`<p><strong>URL:</strong> <code>${_escapeHtml(pathname)}</code></p>` +
|
|
328
|
+
`<pre style="background:#16213e;padding:1rem;border-radius:8px;overflow-x:auto;color:#ff6b6b">${_escapeHtml(message)}</pre>` +
|
|
329
|
+
`<p style="color:#888">Check your terminal for the full stack trace.</p>` +
|
|
330
|
+
`</body></html>`);
|
|
211
331
|
}
|
|
212
332
|
});
|
|
213
333
|
},
|
|
@@ -401,4 +521,31 @@ function _emitRouteTypes(projectRoot, routes) {
|
|
|
401
521
|
// Non-fatal — don't break the build if DTS generation fails
|
|
402
522
|
}
|
|
403
523
|
}
|
|
524
|
+
/**
|
|
525
|
+
* Run route diagnostics and emit empathic warnings for likely misnamed files.
|
|
526
|
+
* Non-fatal — never breaks the build or dev server.
|
|
527
|
+
* @internal
|
|
528
|
+
*/
|
|
529
|
+
function _emitRouteDiagnostics(projectRoot, routes) {
|
|
530
|
+
try {
|
|
531
|
+
const diagnostics = _diagnoseRouteMismatches(routes, projectRoot);
|
|
532
|
+
for (const diag of diagnostics) {
|
|
533
|
+
console.warn(_formatDiagnostic(diag));
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
catch {
|
|
537
|
+
// Non-fatal — diagnostics should never crash the dev server
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
/**
|
|
541
|
+
* Escape HTML special characters to prevent XSS in error pages.
|
|
542
|
+
* @internal
|
|
543
|
+
*/
|
|
544
|
+
function _escapeHtml(str) {
|
|
545
|
+
return str
|
|
546
|
+
.replace(/&/g, '&')
|
|
547
|
+
.replace(/</g, '<')
|
|
548
|
+
.replace(/>/g, '>')
|
|
549
|
+
.replace(/"/g, '"');
|
|
550
|
+
}
|
|
404
551
|
//# sourceMappingURL=plugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/compiler/plugin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/compiler/plugin.ts"],"names":[],"mappings":"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"}
|