@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.
Files changed (2) hide show
  1. package/package.json +2 -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.15.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-next.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 Server import and constructor and export the manifest it
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
- let source = readFileSync(file, 'utf8');
422
- const original = source;
423
- source = source
424
- .replace(/^import \{ Server \} from '[^']+';\n/, '')
425
- .replace(/^const manifest = /m, 'export const manifest = ')
426
- .replace(/\nexport const server = new Server\(manifest\);\n?$/, '\n');
427
- if (source === original || !source.includes('export const manifest = ')) {
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.