@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/index.d.ts +4 -0
- package/package.json +1 -1
- package/skgo-adapter/entry.js +8 -8
- package/skgo-adapter/env.js +4 -0
- package/skgo-adapter/prerender.d.ts +4 -0
- package/skgo-adapter/prerender.js +915 -795
- package/skgo-adapter.js +28 -6
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
|
-
|
|
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?.
|
|
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
|
};
|