@skgo/sveltekit-adapter 0.15.0 → 0.16.1
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/package.json +2 -2
- package/skgo-adapter.js +20 -10
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skgo/sveltekit-adapter",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.1",
|
|
4
4
|
"description": "SvelteKit adapter for skgo: builds a frontend that a Go binary renders and answers",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"adapter",
|
|
@@ -40,6 +40,6 @@
|
|
|
40
40
|
"skgo-adapter/prerender-csp.js"
|
|
41
41
|
],
|
|
42
42
|
"peerDependencies": {
|
|
43
|
-
"@sveltejs/kit": "^3.0.0
|
|
43
|
+
"@sveltejs/kit": "^3.0.0"
|
|
44
44
|
}
|
|
45
45
|
}
|
package/skgo-adapter.js
CHANGED
|
@@ -113,7 +113,7 @@ export default function skgo({ out = 'build', precompress = true } = {}) {
|
|
|
113
113
|
emulate() {
|
|
114
114
|
return {
|
|
115
115
|
platform: () => ({
|
|
116
|
-
async skgoPrerenderLoad(module, event) {
|
|
116
|
+
async skgoPrerenderLoad(module, source, event) {
|
|
117
117
|
await buildPrerenderBinary();
|
|
118
118
|
const headers = Object.fromEntries(
|
|
119
119
|
[...event.request.headers].map(([name, value]) => [name, [value]])
|
|
@@ -133,6 +133,11 @@ export default function skgo({ out = 'build', precompress = true } = {}) {
|
|
|
133
133
|
};
|
|
134
134
|
const raw = await runPrerenderCommand(prerenderBinary, [], prerenderRoot, JSON.stringify(request));
|
|
135
135
|
const answer = JSON.parse(raw);
|
|
136
|
+
if (typeof answer.failure === 'string') {
|
|
137
|
+
throw new Error(
|
|
138
|
+
`skgo: Go load failed during prerender: route ID ${event.route.id}, path ${event.url.pathname}, source ${source}: ${answer.failure}`
|
|
139
|
+
);
|
|
140
|
+
}
|
|
136
141
|
for (const [name, values] of Object.entries(answer.headers ?? {})) {
|
|
137
142
|
event.setHeaders({ [name]: values.join(', ') });
|
|
138
143
|
}
|
|
@@ -404,7 +409,7 @@ function writeAppManifest(file, manifest) {
|
|
|
404
409
|
/**
|
|
405
410
|
* Kit's own server manifest, as an object *and* as text. Kit 3 generates a
|
|
406
411
|
* complete server-instance module instead of returning manifest source. We
|
|
407
|
-
* remove its eager
|
|
412
|
+
* remove its eager create_server import and call and export the manifest it
|
|
408
413
|
* wrote; every remaining import sits inside a lazy thunk, so importing the
|
|
409
414
|
* result resolves nothing and runs no application code. The source is worth
|
|
410
415
|
* keeping because those thunks carry information the imported object has
|
|
@@ -413,22 +418,27 @@ function writeAppManifest(file, manifest) {
|
|
|
413
418
|
* @param {import('@sveltejs/kit').Builder} builder
|
|
414
419
|
* @returns {Promise<{ manifest: any, source: string }>}
|
|
415
420
|
*/
|
|
416
|
-
async function readKitManifest(builder) {
|
|
421
|
+
export async function readKitManifest(builder) {
|
|
417
422
|
const dir = builder.getBuildDirectory('skgo');
|
|
418
423
|
const file = join(dir, 'kit-manifest.js');
|
|
419
424
|
mkdirSync(dir, { recursive: true });
|
|
420
425
|
builder.generateServerInstance(file);
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
if (
|
|
426
|
+
const original = readFileSync(file, 'utf8');
|
|
427
|
+
// Kit 3's builder writes this wrapper around its lazy manifest. Strip both
|
|
428
|
+
// sides before importing it: importing Kit's server would execute its module
|
|
429
|
+
// graph, while this read should only discover what the Go binary must serve.
|
|
430
|
+
const serverImport = /^import \{ create_server \} from '[^']+';\n/;
|
|
431
|
+
const serverCall = /\nexport const server = create_server\(manifest\);\n?$/;
|
|
432
|
+
if (!serverImport.test(original) || !serverCall.test(original) ||
|
|
433
|
+
!original.replace(serverImport, '').startsWith('const manifest = ')) {
|
|
428
434
|
throw new Error(
|
|
429
435
|
'skgo: kit generated a server instance in an unknown shape; refusing to guess where its manifest is'
|
|
430
436
|
);
|
|
431
437
|
}
|
|
438
|
+
const source = original
|
|
439
|
+
.replace(serverImport, '')
|
|
440
|
+
.replace(/^const manifest = /, 'export const manifest = ')
|
|
441
|
+
.replace(serverCall, '\n');
|
|
432
442
|
writeFileSync(file, source);
|
|
433
443
|
try {
|
|
434
444
|
// The cache buster matters: `vp build` can run twice in one process.
|