@absolutejs/absolute 0.19.0-beta.216 → 0.19.0-beta.218
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/.absolutejs/vue-tsc.tsbuildinfo +1 -1
- package/dist/{Image-7r6nfts6.vue → Image-y5bdvj57.vue} +0 -11
- package/dist/angular/index.js +173 -9
- package/dist/angular/index.js.map +6 -5
- package/dist/build.js +468 -154
- package/dist/build.js.map +13 -11
- package/dist/index.js +540 -208
- package/dist/index.js.map +15 -13
- package/dist/react/index.js +175 -2
- package/dist/react/index.js.map +6 -4
- package/dist/src/build/scanConventions.d.ts +5 -0
- package/dist/src/core/build.d.ts +8 -1
- package/dist/src/core/devBuild.d.ts +1 -0
- package/dist/src/utils/resolveConvention.d.ts +13 -0
- package/dist/svelte/index.js +175 -2
- package/dist/svelte/index.js.map +6 -4
- package/dist/types/conventions.d.ts +20 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/vue/components/Image.vue +0 -11
- package/dist/vue/components/index.js +1 -1
- package/dist/vue/index.js +175 -2
- package/dist/vue/index.js.map +6 -4
- package/package.json +1 -1
- package/types/conventions.ts +24 -0
- package/types/globals.d.ts +1 -0
- package/types/index.ts +1 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type ConventionKind = 'error' | 'loading' | 'not-found';
|
|
2
|
+
export type PageConventions = {
|
|
3
|
+
error?: string;
|
|
4
|
+
loading?: string;
|
|
5
|
+
};
|
|
6
|
+
export type FrameworkConventions = {
|
|
7
|
+
error?: string;
|
|
8
|
+
loading?: string;
|
|
9
|
+
notFound?: string;
|
|
10
|
+
};
|
|
11
|
+
export type FrameworkConventionEntry = {
|
|
12
|
+
defaults?: FrameworkConventions;
|
|
13
|
+
pages?: Record<string, PageConventions>;
|
|
14
|
+
};
|
|
15
|
+
export type ConventionsMap = {
|
|
16
|
+
react?: FrameworkConventionEntry;
|
|
17
|
+
svelte?: FrameworkConventionEntry;
|
|
18
|
+
vue?: FrameworkConventionEntry;
|
|
19
|
+
angular?: FrameworkConventionEntry;
|
|
20
|
+
};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -133,17 +133,6 @@ const handleError = (e: Event) => {
|
|
|
133
133
|
</script>
|
|
134
134
|
|
|
135
135
|
<template>
|
|
136
|
-
<Teleport to="head" v-if="priority">
|
|
137
|
-
<link
|
|
138
|
-
rel="preload"
|
|
139
|
-
as="image"
|
|
140
|
-
:href="resolvedSrc"
|
|
141
|
-
:imagesrcset="srcSet"
|
|
142
|
-
:imagesizes="resolvedSizes"
|
|
143
|
-
:crossorigin="crossOrigin"
|
|
144
|
-
/>
|
|
145
|
-
</Teleport>
|
|
146
|
-
|
|
147
136
|
<span
|
|
148
137
|
v-if="fill"
|
|
149
138
|
style="
|
|
@@ -65,7 +65,7 @@ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
|
65
65
|
var __require = import.meta.require;
|
|
66
66
|
|
|
67
67
|
// src/vue/components/Image.vue
|
|
68
|
-
var Image_default = "../../Image-
|
|
68
|
+
var Image_default = "../../Image-y5bdvj57.vue";
|
|
69
69
|
export {
|
|
70
70
|
Image_default as Image
|
|
71
71
|
};
|
package/dist/vue/index.js
CHANGED
|
@@ -116,6 +116,173 @@ body{min-height:100vh;background:linear-gradient(135deg,rgba(15,23,42,0.98) 0%,r
|
|
|
116
116
|
</html>`;
|
|
117
117
|
};
|
|
118
118
|
|
|
119
|
+
// src/utils/stringModifiers.ts
|
|
120
|
+
var normalizeSlug = (str) => str.trim().replace(/\s+/g, "-").replace(/[^A-Za-z0-9\-_]+/g, "").replace(/[-_]{2,}/g, "-"), toKebab = (str) => normalizeSlug(str).replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), toPascal = (str) => {
|
|
121
|
+
if (!str.includes("-") && !str.includes("_")) {
|
|
122
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
123
|
+
}
|
|
124
|
+
return normalizeSlug(str).split(/[-_]/).filter(Boolean).map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1).toLowerCase()).join("");
|
|
125
|
+
}, toScreamingSnake = (str) => str.replace(/([a-z0-9])([A-Z])/g, "$1_$2").toUpperCase();
|
|
126
|
+
|
|
127
|
+
// src/utils/resolveConvention.ts
|
|
128
|
+
import { basename } from "path";
|
|
129
|
+
var conventionsMap, setConventions = (map) => {
|
|
130
|
+
conventionsMap = map;
|
|
131
|
+
}, resolveErrorConventionPath = (framework, pageName) => {
|
|
132
|
+
const fw = conventionsMap[framework];
|
|
133
|
+
if (!fw)
|
|
134
|
+
return;
|
|
135
|
+
return fw.pages?.[pageName]?.error ?? fw.defaults?.error;
|
|
136
|
+
}, resolveNotFoundConventionPath = (framework) => conventionsMap[framework]?.defaults?.notFound, derivePageName = (pagePath) => {
|
|
137
|
+
const base = basename(pagePath);
|
|
138
|
+
const dotIndex = base.indexOf(".");
|
|
139
|
+
const name = dotIndex > 0 ? base.slice(0, dotIndex) : base;
|
|
140
|
+
return toPascal(name);
|
|
141
|
+
}, isDev = () => true, buildErrorProps = (error) => {
|
|
142
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
143
|
+
const stack = isDev() && error instanceof Error ? error.stack : undefined;
|
|
144
|
+
return { error: { message, stack } };
|
|
145
|
+
}, renderConventionError = async (framework, pageName, error) => {
|
|
146
|
+
const conventionPath = resolveErrorConventionPath(framework, pageName);
|
|
147
|
+
if (!conventionPath)
|
|
148
|
+
return null;
|
|
149
|
+
const errorProps = buildErrorProps(error);
|
|
150
|
+
try {
|
|
151
|
+
if (framework === "react") {
|
|
152
|
+
const { createElement } = await import("react");
|
|
153
|
+
const { renderToReadableStream } = await import("react-dom/server");
|
|
154
|
+
const mod = await import(conventionPath);
|
|
155
|
+
const firstKey = Object.keys(mod)[0];
|
|
156
|
+
const ErrorComponent = mod.default ?? (firstKey ? mod[firstKey] : undefined);
|
|
157
|
+
const element = createElement(ErrorComponent, errorProps);
|
|
158
|
+
const stream = await renderToReadableStream(element);
|
|
159
|
+
return new Response(stream, {
|
|
160
|
+
headers: { "Content-Type": "text/html" },
|
|
161
|
+
status: 500
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
if (framework === "svelte") {
|
|
165
|
+
const { render } = await import("svelte/server");
|
|
166
|
+
const mod = await import(conventionPath);
|
|
167
|
+
const ErrorComponent = mod.default;
|
|
168
|
+
const { head, body } = render(ErrorComponent, {
|
|
169
|
+
props: errorProps
|
|
170
|
+
});
|
|
171
|
+
const html = `<!DOCTYPE html><html><head>${head}</head><body>${body}</body></html>`;
|
|
172
|
+
return new Response(html, {
|
|
173
|
+
headers: { "Content-Type": "text/html" },
|
|
174
|
+
status: 500
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
if (framework === "vue") {
|
|
178
|
+
const { createSSRApp, h } = await import("vue");
|
|
179
|
+
const { renderToString } = await import("vue/server-renderer");
|
|
180
|
+
const mod = await import(conventionPath);
|
|
181
|
+
const ErrorComponent = mod.default;
|
|
182
|
+
const app = createSSRApp({
|
|
183
|
+
render: () => h(ErrorComponent, errorProps)
|
|
184
|
+
});
|
|
185
|
+
const body = await renderToString(app);
|
|
186
|
+
const html = `<!DOCTYPE html><html><head></head><body><div id="root">${body}</div></body></html>`;
|
|
187
|
+
return new Response(html, {
|
|
188
|
+
headers: { "Content-Type": "text/html" },
|
|
189
|
+
status: 500
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
if (framework === "angular") {
|
|
193
|
+
const mod = await import(conventionPath);
|
|
194
|
+
const renderError = mod.default ?? mod.renderError;
|
|
195
|
+
if (typeof renderError === "function") {
|
|
196
|
+
const html = renderError(errorProps);
|
|
197
|
+
return new Response(html, {
|
|
198
|
+
headers: { "Content-Type": "text/html" },
|
|
199
|
+
status: 500
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
} catch (renderError) {
|
|
204
|
+
console.error(`[SSR] Failed to render ${framework} convention error page:`, renderError);
|
|
205
|
+
}
|
|
206
|
+
return null;
|
|
207
|
+
}, renderConventionNotFound = async (framework) => {
|
|
208
|
+
const conventionPath = resolveNotFoundConventionPath(framework);
|
|
209
|
+
if (!conventionPath)
|
|
210
|
+
return null;
|
|
211
|
+
try {
|
|
212
|
+
if (framework === "react") {
|
|
213
|
+
const { createElement } = await import("react");
|
|
214
|
+
const { renderToReadableStream } = await import("react-dom/server");
|
|
215
|
+
const mod = await import(conventionPath);
|
|
216
|
+
const nfKey = Object.keys(mod)[0];
|
|
217
|
+
const NotFoundComponent = mod.default ?? (nfKey ? mod[nfKey] : undefined);
|
|
218
|
+
const element = createElement(NotFoundComponent);
|
|
219
|
+
const stream = await renderToReadableStream(element);
|
|
220
|
+
return new Response(stream, {
|
|
221
|
+
headers: { "Content-Type": "text/html" },
|
|
222
|
+
status: 404
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
if (framework === "svelte") {
|
|
226
|
+
const { render } = await import("svelte/server");
|
|
227
|
+
const mod = await import(conventionPath);
|
|
228
|
+
const NotFoundComponent = mod.default;
|
|
229
|
+
const { head, body } = render(NotFoundComponent);
|
|
230
|
+
const html = `<!DOCTYPE html><html><head>${head}</head><body>${body}</body></html>`;
|
|
231
|
+
return new Response(html, {
|
|
232
|
+
headers: { "Content-Type": "text/html" },
|
|
233
|
+
status: 404
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
if (framework === "vue") {
|
|
237
|
+
const { createSSRApp, h } = await import("vue");
|
|
238
|
+
const { renderToString } = await import("vue/server-renderer");
|
|
239
|
+
const mod = await import(conventionPath);
|
|
240
|
+
const NotFoundComponent = mod.default;
|
|
241
|
+
const app = createSSRApp({
|
|
242
|
+
render: () => h(NotFoundComponent)
|
|
243
|
+
});
|
|
244
|
+
const body = await renderToString(app);
|
|
245
|
+
const html = `<!DOCTYPE html><html><head></head><body><div id="root">${body}</div></body></html>`;
|
|
246
|
+
return new Response(html, {
|
|
247
|
+
headers: { "Content-Type": "text/html" },
|
|
248
|
+
status: 404
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
if (framework === "angular") {
|
|
252
|
+
const mod = await import(conventionPath);
|
|
253
|
+
const renderNotFound = mod.default ?? mod.renderNotFound;
|
|
254
|
+
if (typeof renderNotFound === "function") {
|
|
255
|
+
const html = renderNotFound();
|
|
256
|
+
return new Response(html, {
|
|
257
|
+
headers: { "Content-Type": "text/html" },
|
|
258
|
+
status: 404
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
} catch (renderError) {
|
|
263
|
+
console.error(`[SSR] Failed to render ${framework} convention not-found page:`, renderError);
|
|
264
|
+
}
|
|
265
|
+
return null;
|
|
266
|
+
}, NOT_FOUND_PRIORITY, renderFirstNotFound = async () => {
|
|
267
|
+
for (const framework of NOT_FOUND_PRIORITY) {
|
|
268
|
+
if (!conventionsMap[framework]?.defaults?.notFound)
|
|
269
|
+
continue;
|
|
270
|
+
const response = await renderConventionNotFound(framework);
|
|
271
|
+
if (response)
|
|
272
|
+
return response;
|
|
273
|
+
}
|
|
274
|
+
return null;
|
|
275
|
+
};
|
|
276
|
+
var init_resolveConvention = __esm(() => {
|
|
277
|
+
conventionsMap = {};
|
|
278
|
+
NOT_FOUND_PRIORITY = [
|
|
279
|
+
"react",
|
|
280
|
+
"svelte",
|
|
281
|
+
"vue",
|
|
282
|
+
"angular"
|
|
283
|
+
];
|
|
284
|
+
});
|
|
285
|
+
|
|
119
286
|
// src/vue/pageHandler.ts
|
|
120
287
|
var ssrDirty = false, buildDirtyResponse = (headTag, indexPath, maybeProps) => {
|
|
121
288
|
const propsScript = `window.__INITIAL_PROPS__=${JSON.stringify(maybeProps ?? {})};`;
|
|
@@ -154,6 +321,10 @@ var ssrDirty = false, buildDirtyResponse = (headTag, indexPath, maybeProps) => {
|
|
|
154
321
|
});
|
|
155
322
|
} catch (error) {
|
|
156
323
|
console.error("[SSR] Vue render error:", error);
|
|
324
|
+
const pageName = derivePageName(pagePath);
|
|
325
|
+
const conventionResponse = await renderConventionError("vue", pageName, error);
|
|
326
|
+
if (conventionResponse)
|
|
327
|
+
return conventionResponse;
|
|
157
328
|
return new Response(ssrErrorPage("vue", error), {
|
|
158
329
|
headers: { "Content-Type": "text/html" },
|
|
159
330
|
status: 500
|
|
@@ -162,7 +333,9 @@ var ssrDirty = false, buildDirtyResponse = (headTag, indexPath, maybeProps) => {
|
|
|
162
333
|
}, invalidateVueSsrCache = () => {
|
|
163
334
|
ssrDirty = true;
|
|
164
335
|
};
|
|
165
|
-
var init_pageHandler = () => {
|
|
336
|
+
var init_pageHandler = __esm(() => {
|
|
337
|
+
init_resolveConvention();
|
|
338
|
+
});
|
|
166
339
|
|
|
167
340
|
// src/vue/index.ts
|
|
168
341
|
init_pageHandler();
|
|
@@ -170,5 +343,5 @@ export {
|
|
|
170
343
|
handleVuePageRequest
|
|
171
344
|
};
|
|
172
345
|
|
|
173
|
-
//# debugId=
|
|
346
|
+
//# debugId=1398B318DC93032064756E2164756E21
|
|
174
347
|
//# sourceMappingURL=index.js.map
|
package/dist/vue/index.js.map
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/utils/ssrErrorPage.ts", "../src/vue/pageHandler.ts", "../src/vue/index.ts"],
|
|
3
|
+
"sources": ["../src/utils/ssrErrorPage.ts", "../src/utils/stringModifiers.ts", "../src/utils/resolveConvention.ts", "../src/vue/pageHandler.ts", "../src/vue/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"export const ssrErrorPage = (framework: string, error: unknown) => {\n\tconst frameworkColors: Record<string, string> = {\n\t\tangular: '#dd0031',\n\t\thtml: '#e34c26',\n\t\thtmx: '#1a365d',\n\t\treact: '#61dafb',\n\t\tsvelte: '#ff3e00',\n\t\tvue: '#42b883'\n\t};\n\n\tconst accent = frameworkColors[framework] ?? '#94a3b8';\n\tconst label = framework.charAt(0).toUpperCase() + framework.slice(1);\n\tconst message = error instanceof Error ? error.message : String(error);\n\n\treturn `<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>SSR Error - AbsoluteJS</title>\n<style>\n*{margin:0;padding:0;box-sizing:border-box}\nbody{min-height:100vh;background:linear-gradient(135deg,rgba(15,23,42,0.98) 0%,rgba(30,41,59,0.98) 100%);color:#e2e8f0;font-family:\"JetBrains Mono\",\"Fira Code\",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:14px;line-height:1.6;display:flex;align-items:flex-start;justify-content:center;padding:32px}\n.card{max-width:720px;width:100%;background:rgba(30,41,59,0.6);border:1px solid rgba(71,85,105,0.5);border-radius:16px;box-shadow:0 25px 50px -12px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.05);overflow:hidden}\n.header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 24px;background:rgba(15,23,42,0.5);border-bottom:1px solid rgba(71,85,105,0.4)}\n.brand{font-weight:700;font-size:20px;color:#fff;letter-spacing:-0.02em}\n.badge{padding:5px 10px;border-radius:8px;font-size:12px;font-weight:600;background:${accent};color:#fff;opacity:0.95;box-shadow:0 2px 4px rgba(0,0,0,0.2)}\n.kind{color:#94a3b8;font-size:13px;font-weight:500}\n.content{padding:24px}\n.label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:#94a3b8;margin-bottom:8px}\n.message{margin:0;padding:16px 20px;background:rgba(239,68,68,0.12);border:1px solid rgba(239,68,68,0.25);border-radius:10px;overflow-x:auto;white-space:pre-wrap;word-break:break-word;color:#fca5a5;font-size:13px;line-height:1.5}\n.hint{margin-top:20px;padding:12px 20px;background:rgba(71,85,105,0.3);border-radius:10px;border:1px solid rgba(71,85,105,0.4);color:#cbd5e1;font-size:13px}\n</style>\n</head>\n<body>\n<div class=\"card\">\n<div class=\"header\">\n<div style=\"display:flex;align-items:center;gap:12px\">\n<span class=\"brand\">AbsoluteJS</span>\n<span class=\"badge\">${label}</span>\n</div>\n<span class=\"kind\">Server Render Error</span>\n</div>\n<div class=\"content\">\n<div class=\"label\">What went wrong</div>\n<pre class=\"message\">${message.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')}</pre>\n<div class=\"hint\">A component threw during server-side rendering. Check the terminal for the full stack trace.</div>\n</div>\n</div>\n</body>\n</html>`;\n};\n",
|
|
6
|
-
"
|
|
6
|
+
"const normalizeSlug = (str: string) =>\n\tstr\n\t\t.trim()\n\t\t.replace(/\\s+/g, '-')\n\t\t.replace(/[^A-Za-z0-9\\-_]+/g, '')\n\t\t.replace(/[-_]{2,}/g, '-');\n\nexport const toKebab = (str: string) =>\n\tnormalizeSlug(str)\n\t\t.replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n\t\t.toLowerCase();\nexport const toPascal = (str: string) => {\n\tif (!str.includes('-') && !str.includes('_')) {\n\t\treturn str.charAt(0).toUpperCase() + str.slice(1);\n\t}\n\n\treturn normalizeSlug(str)\n\t\t.split(/[-_]/)\n\t\t.filter(Boolean)\n\t\t.map(\n\t\t\t(segment) =>\n\t\t\t\tsegment.charAt(0).toUpperCase() + segment.slice(1).toLowerCase()\n\t\t)\n\t\t.join('');\n};\nexport const toScreamingSnake = (str: string) =>\n\tstr.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n",
|
|
7
|
+
"import { basename } from 'node:path';\nimport type { ConventionsMap } from '../../types/conventions';\nimport { toPascal } from './stringModifiers';\n\nlet conventionsMap: ConventionsMap = {};\n\nexport const setConventions = (map: ConventionsMap) => {\n\tconventionsMap = map;\n};\n\nexport const getConventions = () => conventionsMap;\n\nexport const resolveErrorConventionPath = (\n\tframework: keyof ConventionsMap,\n\tpageName: string\n) => {\n\tconst fw = conventionsMap[framework];\n\tif (!fw) return undefined;\n\n\treturn fw.pages?.[pageName]?.error ?? fw.defaults?.error;\n};\n\nexport const resolveNotFoundConventionPath = (\n\tframework: keyof ConventionsMap\n) => conventionsMap[framework]?.defaults?.notFound;\n\n/**\n * Derive a PascalCase page name from a compiled server path.\n * Example: \"/build/svelte/pages/SvelteExample.abc123.js\" → \"SvelteExample\"\n */\nexport const derivePageName = (pagePath: string) => {\n\tconst base = basename(pagePath);\n\t// Strip hash and extension: \"SvelteExample.abc123.js\" → \"SvelteExample\"\n\tconst dotIndex = base.indexOf('.');\n\tconst name = dotIndex > 0 ? base.slice(0, dotIndex) : base;\n\n\treturn toPascal(name);\n};\n\nconst isDev = () => process.env.NODE_ENV === 'development';\n\nconst buildErrorProps = (error: unknown) => {\n\tconst message = error instanceof Error ? error.message : String(error);\n\tconst stack = isDev() && error instanceof Error ? error.stack : undefined;\n\n\treturn { error: { message, stack } };\n};\n\nexport const renderConventionError = async (\n\tframework: keyof ConventionsMap,\n\tpageName: string,\n\terror: unknown\n) => {\n\tconst conventionPath = resolveErrorConventionPath(framework, pageName);\n\tif (!conventionPath) return null;\n\n\tconst errorProps = buildErrorProps(error);\n\n\ttry {\n\t\tif (framework === 'react') {\n\t\t\tconst { createElement } = await import('react');\n\t\t\tconst { renderToReadableStream } = await import(\n\t\t\t\t'react-dom/server'\n\t\t\t);\n\t\t\tconst mod = await import(conventionPath);\n\t\t\tconst firstKey = Object.keys(mod)[0];\n\t\t\tconst ErrorComponent = mod.default ?? (firstKey ? mod[firstKey] : undefined);\n\t\t\tconst element = createElement(ErrorComponent, errorProps);\n\t\t\tconst stream = await renderToReadableStream(element);\n\n\t\t\treturn new Response(stream, {\n\t\t\t\theaders: { 'Content-Type': 'text/html' },\n\t\t\t\tstatus: 500\n\t\t\t});\n\t\t}\n\n\t\tif (framework === 'svelte') {\n\t\t\tconst { render } = await import('svelte/server');\n\t\t\tconst mod = await import(conventionPath);\n\t\t\tconst ErrorComponent = mod.default;\n\t\t\tconst { head, body } = render(ErrorComponent, {\n\t\t\t\tprops: errorProps\n\t\t\t});\n\t\t\tconst html = `<!DOCTYPE html><html><head>${head}</head><body>${body}</body></html>`;\n\n\t\t\treturn new Response(html, {\n\t\t\t\theaders: { 'Content-Type': 'text/html' },\n\t\t\t\tstatus: 500\n\t\t\t});\n\t\t}\n\n\t\tif (framework === 'vue') {\n\t\t\tconst { createSSRApp, h } = await import('vue');\n\t\t\tconst { renderToString } = await import('vue/server-renderer');\n\t\t\tconst mod = await import(conventionPath);\n\t\t\tconst ErrorComponent = mod.default;\n\t\t\tconst app = createSSRApp({\n\t\t\t\trender: () => h(ErrorComponent, errorProps)\n\t\t\t});\n\t\t\tconst body = await renderToString(app);\n\t\t\tconst html = `<!DOCTYPE html><html><head></head><body><div id=\"root\">${body}</div></body></html>`;\n\n\t\t\treturn new Response(html, {\n\t\t\t\theaders: { 'Content-Type': 'text/html' },\n\t\t\t\tstatus: 500\n\t\t\t});\n\t\t}\n\n\t\tif (framework === 'angular') {\n\t\t\t// Angular error pages are rendered as plain HTML templates\n\t\t\t// since the full Angular SSR pipeline is too heavy for error pages\n\t\t\tconst mod = await import(conventionPath);\n\t\t\tconst renderError = mod.default ?? mod.renderError;\n\t\t\tif (typeof renderError === 'function') {\n\t\t\t\tconst html = renderError(errorProps);\n\n\t\t\t\treturn new Response(html, {\n\t\t\t\t\theaders: { 'Content-Type': 'text/html' },\n\t\t\t\t\tstatus: 500\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t} catch (renderError) {\n\t\tconsole.error(\n\t\t\t`[SSR] Failed to render ${framework} convention error page:`,\n\t\t\trenderError\n\t\t);\n\t}\n\n\treturn null;\n};\n\nexport const renderConventionNotFound = async (\n\tframework: keyof ConventionsMap\n) => {\n\tconst conventionPath = resolveNotFoundConventionPath(framework);\n\tif (!conventionPath) return null;\n\n\ttry {\n\t\tif (framework === 'react') {\n\t\t\tconst { createElement } = await import('react');\n\t\t\tconst { renderToReadableStream } = await import(\n\t\t\t\t'react-dom/server'\n\t\t\t);\n\t\t\tconst mod = await import(conventionPath);\n\t\t\tconst nfKey = Object.keys(mod)[0];\n\t\t\tconst NotFoundComponent =\n\t\t\t\tmod.default ?? (nfKey ? mod[nfKey] : undefined);\n\t\t\tconst element = createElement(NotFoundComponent);\n\t\t\tconst stream = await renderToReadableStream(element);\n\n\t\t\treturn new Response(stream, {\n\t\t\t\theaders: { 'Content-Type': 'text/html' },\n\t\t\t\tstatus: 404\n\t\t\t});\n\t\t}\n\n\t\tif (framework === 'svelte') {\n\t\t\tconst { render } = await import('svelte/server');\n\t\t\tconst mod = await import(conventionPath);\n\t\t\tconst NotFoundComponent = mod.default;\n\t\t\tconst { head, body } = render(NotFoundComponent);\n\t\t\tconst html = `<!DOCTYPE html><html><head>${head}</head><body>${body}</body></html>`;\n\n\t\t\treturn new Response(html, {\n\t\t\t\theaders: { 'Content-Type': 'text/html' },\n\t\t\t\tstatus: 404\n\t\t\t});\n\t\t}\n\n\t\tif (framework === 'vue') {\n\t\t\tconst { createSSRApp, h } = await import('vue');\n\t\t\tconst { renderToString } = await import('vue/server-renderer');\n\t\t\tconst mod = await import(conventionPath);\n\t\t\tconst NotFoundComponent = mod.default;\n\t\t\tconst app = createSSRApp({\n\t\t\t\trender: () => h(NotFoundComponent)\n\t\t\t});\n\t\t\tconst body = await renderToString(app);\n\t\t\tconst html = `<!DOCTYPE html><html><head></head><body><div id=\"root\">${body}</div></body></html>`;\n\n\t\t\treturn new Response(html, {\n\t\t\t\theaders: { 'Content-Type': 'text/html' },\n\t\t\t\tstatus: 404\n\t\t\t});\n\t\t}\n\n\t\tif (framework === 'angular') {\n\t\t\tconst mod = await import(conventionPath);\n\t\t\tconst renderNotFound = mod.default ?? mod.renderNotFound;\n\t\t\tif (typeof renderNotFound === 'function') {\n\t\t\t\tconst html = renderNotFound();\n\n\t\t\t\treturn new Response(html, {\n\t\t\t\t\theaders: { 'Content-Type': 'text/html' },\n\t\t\t\t\tstatus: 404\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t} catch (renderError) {\n\t\tconsole.error(\n\t\t\t`[SSR] Failed to render ${framework} convention not-found page:`,\n\t\t\trenderError\n\t\t);\n\t}\n\n\treturn null;\n};\n\nconst NOT_FOUND_PRIORITY: (keyof ConventionsMap)[] = [\n\t'react',\n\t'svelte',\n\t'vue',\n\t'angular'\n];\n\nexport const renderFirstNotFound = async () => {\n\tfor (const framework of NOT_FOUND_PRIORITY) {\n\t\tif (!conventionsMap[framework]?.defaults?.notFound) continue;\n\t\tconst response = await renderConventionNotFound(framework);\n\t\tif (response) return response;\n\t}\n\n\treturn null;\n};\n",
|
|
8
|
+
"import type { Component as VueComponent } from 'vue';\nimport { ssrErrorPage } from '../utils/ssrErrorPage';\nimport {\n\tderivePageName,\n\trenderConventionError\n} from '../utils/resolveConvention';\n\nlet ssrDirty = false;\n\nconst buildDirtyResponse = (\n\theadTag: string,\n\tindexPath: string,\n\tmaybeProps: Record<string, unknown> | undefined\n) => {\n\tconst propsScript = `window.__INITIAL_PROPS__=${JSON.stringify(maybeProps ?? {})};`;\n\tconst dirtyFlag = 'window.__SSR_DIRTY__=true;';\n\tconst html =\n\t\t`<!DOCTYPE html><html>${headTag}<body><div id=\"root\"></div>` +\n\t\t`<script>${propsScript}${dirtyFlag}</script>` +\n\t\t`<script type=\"module\" src=\"${indexPath}\"></script>` +\n\t\t`</body></html>`;\n\n\treturn new Response(html, {\n\t\theaders: { 'Content-Type': 'text/html' }\n\t});\n};\n\nexport const handleVuePageRequest = async <\n\tProps extends Record<string, unknown> = Record<never, never>\n>(\n\t_PageComponent: VueComponent<Props>,\n\tpagePath: string,\n\tindexPath: string,\n\theadTag: `<head>${string}</head>` = '<head></head>',\n\t...props: keyof Props extends never ? [] : [props: NoInfer<Props>]\n) => {\n\tconst [maybeProps] = props;\n\n\tif (ssrDirty) {\n\t\treturn buildDirtyResponse(headTag, indexPath, maybeProps);\n\t}\n\n\ttry {\n\t\tconst { default: ImportedPageComponent } = await import(pagePath);\n\t\tconst { createSSRApp, h } = await import('vue');\n\t\tconst { renderToWebStream } = await import('vue/server-renderer');\n\n\t\tconst app = createSSRApp({\n\t\t\trender: () => h(ImportedPageComponent, maybeProps ?? null)\n\t\t});\n\n\t\tconst bodyStream = renderToWebStream(app);\n\n\t\tconst head = `<!DOCTYPE html><html>${headTag}<body><div id=\"root\">`;\n\t\tconst tail = `</div><script>window.__INITIAL_PROPS__=${JSON.stringify(\n\t\t\tmaybeProps ?? {}\n\t\t)}</script><script type=\"module\" src=\"${indexPath}\"></script></body></html>`;\n\n\t\tconst stream = new ReadableStream({\n\t\t\tstart(controller) {\n\t\t\t\tcontroller.enqueue(head);\n\t\t\t\tconst reader = bodyStream.getReader();\n\t\t\t\tconst pumpLoop = () => {\n\t\t\t\t\treader\n\t\t\t\t\t\t.read()\n\t\t\t\t\t\t.then(({ done, value }) =>\n\t\t\t\t\t\t\tdone\n\t\t\t\t\t\t\t\t? (controller.enqueue(tail), controller.close())\n\t\t\t\t\t\t\t\t: (controller.enqueue(value), pumpLoop())\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.catch((err) => controller.error(err));\n\t\t\t\t};\n\t\t\t\tpumpLoop();\n\t\t\t}\n\t\t});\n\n\t\treturn new Response(stream, {\n\t\t\theaders: { 'Content-Type': 'text/html' }\n\t\t});\n\t} catch (error) {\n\t\tconsole.error('[SSR] Vue render error:', error);\n\n\t\tconst pageName = derivePageName(pagePath);\n\t\tconst conventionResponse = await renderConventionError(\n\t\t\t'vue',\n\t\t\tpageName,\n\t\t\terror\n\t\t);\n\t\tif (conventionResponse) return conventionResponse;\n\n\t\treturn new Response(ssrErrorPage('vue', error), {\n\t\t\theaders: { 'Content-Type': 'text/html' },\n\t\t\tstatus: 500\n\t\t});\n\t}\n};\n\nexport const invalidateVueSsrCache = () => {\n\tssrDirty = true;\n};\n",
|
|
7
9
|
"export { handleVuePageRequest } from './pageHandler';\n"
|
|
8
10
|
],
|
|
9
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAa,eAAe,CAAC,WAAmB,UAAmB;AAAA,EAClE,MAAM,kBAA0C;AAAA,IAC/C,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,EACN;AAAA,EAEA,MAAM,SAAS,gBAAgB,cAAc;AAAA,EAC7C,MAAM,QAAQ,UAAU,OAAO,CAAC,EAAE,YAAY,IAAI,UAAU,MAAM,CAAC;AAAA,EACnE,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,EAErE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sFAY8E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAahE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAMC,QAAQ,QAAQ,MAAM,OAAO,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;
|
|
10
|
-
"debugId": "
|
|
11
|
+
"mappings": "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",
|
|
12
|
+
"debugId": "1398B318DC93032064756E2164756E21",
|
|
11
13
|
"names": []
|
|
12
14
|
}
|
package/package.json
CHANGED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type ConventionKind = 'error' | 'loading' | 'not-found';
|
|
2
|
+
|
|
3
|
+
export type PageConventions = {
|
|
4
|
+
error?: string;
|
|
5
|
+
loading?: string;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export type FrameworkConventions = {
|
|
9
|
+
error?: string;
|
|
10
|
+
loading?: string;
|
|
11
|
+
notFound?: string;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export type FrameworkConventionEntry = {
|
|
15
|
+
defaults?: FrameworkConventions;
|
|
16
|
+
pages?: Record<string, PageConventions>;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export type ConventionsMap = {
|
|
20
|
+
react?: FrameworkConventionEntry;
|
|
21
|
+
svelte?: FrameworkConventionEntry;
|
|
22
|
+
vue?: FrameworkConventionEntry;
|
|
23
|
+
angular?: FrameworkConventionEntry;
|
|
24
|
+
};
|
package/types/globals.d.ts
CHANGED