@skgo/sveltekit-adapter 0.18.0 → 0.22.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/skgo-adapter.js CHANGED
@@ -17,8 +17,8 @@ import { pathToFileURL } from 'node:url';
17
17
  import {
18
18
  createPrerenderOwner,
19
19
  installPrerenderFailureBoundary,
20
- joinFailedPrerenderOwner,
21
20
  remoteFunction,
21
+ remoteEndpoint,
22
22
  remoteLoad
23
23
  } from './skgo-adapter/prerender.js';
24
24
  import { gojaDevEnvironment, gojaDevUnchangedFiles, gojaEnvironment, goEnvironmentValues, nodeTable, SSR_TARGET } from './skgo-adapter/env.js';
@@ -59,10 +59,10 @@ const KIT_COMPONENTS = join(
59
59
  * serve a frontend that was built from a different set of Go functions than it
60
60
  * answers.
61
61
  *
62
- * @param {{ out?: string, precompress?: boolean }} [options]
62
+ * @param {{ out?: string, precompress?: boolean, prerenderPackage?: string }} [options]
63
63
  * @returns {import('@sveltejs/kit').Adapter}
64
64
  */
65
- export default function skgo({ out = 'build', precompress = true } = {}) {
65
+ export default function skgo({ out = 'build', precompress = true, prerenderPackage } = {}) {
66
66
  // The engine's bundle is a fourth environment of kit's own build. Kit reads
67
67
  // `vite.plugins.post` while it assembles its config, long before `adapt`
68
68
  // runs, so the plugin that declares the environment has to exist here; the
@@ -74,14 +74,23 @@ export default function skgo({ out = 'build', precompress = true } = {}) {
74
74
  name: 'skgo-prerender-main-owner',
75
75
  apply: 'build',
76
76
  configResolved(config) {
77
- prerenderOwner = createPrerenderOwner(process.cwd());
77
+ prerenderOwner = createPrerenderOwner(process.cwd(), prerenderPackage);
78
78
  installPrerenderFailureBoundary(config, prerenderOwner);
79
79
  },
80
+ // Kit captures its app environment in config/configResolved. Vite awaits
81
+ // all of those before this hook; publication here cannot enter that snapshot.
82
+ buildApp: {
83
+ order: 'pre',
84
+ async handler() {
85
+ await prerenderOwner?.prepare();
86
+ prerenderOwner?.publish();
87
+ }
88
+ },
80
89
  buildEnd(error) {
81
90
  if (error && prerenderOwner) return prerenderOwner.fail(error);
82
91
  },
83
92
  async closeBundle() {
84
- await joinFailedPrerenderOwner(prerenderOwner);
93
+ if (prerenderOwner?.closing) await prerenderOwner.cleanup();
85
94
  }
86
95
  };
87
96
 
@@ -90,6 +99,7 @@ export default function skgo({ out = 'build', precompress = true } = {}) {
90
99
  emulate() {
91
100
  return {
92
101
  platform: () => ({
102
+ skgoPrerenderEndpoint(event) { return remoteEndpoint(event); },
93
103
  async skgoPrerenderLoad(module, source, event) {
94
104
  return remoteLoad(module, source, event);
95
105
  },
@@ -107,6 +117,7 @@ export default function skgo({ out = 'build', precompress = true } = {}) {
107
117
  // states its own `apply`, so only one of them is ever live.
108
118
  vite: { plugins: { pre: [prerenderOwnerPlugin], post: [environment.plugin, goja.plugin, gojaDevEnvironment(), gojaDevUnchangedFiles({ out })] } },
109
119
  async adapt(builder) {
120
+ let failure;
110
121
  try {
111
122
  rmSync(out, { force: true, recursive: true });
112
123
 
@@ -120,6 +131,9 @@ export default function skgo({ out = 'build', precompress = true } = {}) {
120
131
  checkServerLoads(allServerIds, generated.loads, generated.actions);
121
132
 
122
133
  const endpoints = checkEndpoints(builder, generated.endpoints);
134
+ const prerenderedEndpoints = Object.fromEntries(builder.routes
135
+ .filter((route) => route.prerender === true && endpoints.has(route.id))
136
+ .map((route) => [route.id, endpoints.get(route.id)]));
123
137
 
124
138
  builder.writeClient(`${out}/client`);
125
139
  checkRemoteIds(`${out}/client`, generated.remotes, hashes);
@@ -186,6 +200,7 @@ export default function skgo({ out = 'build', precompress = true } = {}) {
186
200
  // records in the node module it builds.
187
201
  nodes: serverIds,
188
202
  loads: generated.loads,
203
+ prerenderedEndpoints,
189
204
  actions: [...new Set(generated.actions)].sort(),
190
205
  ssr: describeSSR(builder, kit, nodes),
191
206
  routes: kit._.routes.map((/** @type {any} */ route) => ({
@@ -242,8 +257,15 @@ export default function skgo({ out = 'build', precompress = true } = {}) {
242
257
  write(`${out}/.gitkeep`, '');
243
258
 
244
259
  builder.log.minor(`skgo: wrote ${out}/`);
260
+ } catch (error) {
261
+ failure = error;
262
+ throw error;
245
263
  } finally {
246
- await prerenderOwner?.cleanup();
264
+ if (failure) await prerenderOwner?.fail(failure);
265
+ else {
266
+ await prerenderOwner?.cleanup();
267
+ if (prerenderOwner?.failed) throw prerenderOwner.failed;
268
+ }
247
269
  }
248
270
  }
249
271
  };