@skgo/sveltekit-adapter 0.12.0 → 0.13.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skgo/sveltekit-adapter",
3
- "version": "0.12.0",
3
+ "version": "0.13.1",
4
4
  "description": "SvelteKit adapter for skgo: builds a frontend that a Go binary renders and answers",
5
5
  "keywords": [
6
6
  "adapter",
@@ -18,7 +18,7 @@
18
18
  // host binding is the only path by which a value can reach the engine.
19
19
  //
20
20
  // Everything this file does not name is kit's, by `export *`: `read`,
21
- // `getRequestEvent`, `prerender` and `requested` come from kit's own module,
21
+ // `getRequestEvent` and `requested` come from kit's own module,
22
22
  // and an export kit adds arrives without an edit here. An explicit export
23
23
  // below shadows the star, which is how the four substitutions take effect.
24
24
  import * as real from 'skgo:kit/remote';
@@ -62,6 +62,14 @@ export function query(validate_or_fn, maybe_fn) {
62
62
  return wrapper;
63
63
  }
64
64
 
65
+ export function prerender(validate_or_fn, maybe_fn, options) {
66
+ const fn = (arg) => host(wrapper.__.id, stringify_remote_arg(arg));
67
+ const wrapper = typeof maybe_fn === 'function'
68
+ ? real.prerender(validate_or_fn, fn, options)
69
+ : real.prerender(fn, maybe_fn);
70
+ return wrapper;
71
+ }
72
+
65
73
  /**
66
74
  * Calls Go once for a whole batch. Kit's own enqueue has already collected
67
75
  * every call made to this function in one macrotask and deduplicated them by
package/skgo-adapter.js CHANGED
@@ -84,6 +84,7 @@ export default function skgo({ out = 'build', precompress = true } = {}) {
84
84
  let prerenderRoot;
85
85
  let prerenderBuild;
86
86
  let unflatten;
87
+ let stringify;
87
88
  let transportDecoders = {};
88
89
  async function buildPrerenderBinary() {
89
90
  if (!prerenderBuild) {
@@ -92,11 +93,11 @@ export default function skgo({ out = 'build', precompress = true } = {}) {
92
93
  if (!generated.prerender) throw new Error('skgo: generated prerender command is missing');
93
94
  prerenderRoot = resolve(process.cwd(), generated.prerender.root);
94
95
  const dir = mkdtempSync(join(tmpdir(), 'skgo-prerender-'));
95
- prerenderBinary = join(dir, 'loads');
96
+ prerenderBinary = join(dir, 'build');
96
97
  await runPrerenderCommand('go', ['build', '-o', prerenderBinary, generated.prerender.package], prerenderRoot);
97
98
  process.on('exit', () => rmSync(dir, { recursive: true, force: true }));
98
99
  const fromKit = createRequire(realpathSync(join(process.cwd(), 'node_modules/@sveltejs/kit/package.json')));
99
- ({ unflatten } = await import(pathToFileURL(fromKit.resolve('devalue')).href));
100
+ ({ unflatten, stringify } = await import(pathToFileURL(fromKit.resolve('devalue')).href));
100
101
  const hooks = join(process.cwd(), '.svelte-kit/output/server/entries/hooks.universal.js');
101
102
  if (existsSync(hooks)) {
102
103
  const { transport = {} } = await import(pathToFileURL(hooks).href);
@@ -122,6 +123,7 @@ export default function skgo({ out = 'build', precompress = true } = {}) {
122
123
  headers.cookie = [cookies.map(({ name, value }) => `${encodeURIComponent(name)}=${encodeURIComponent(value)}`).join('; ')];
123
124
  }
124
125
  const request = {
126
+ kind: 'load',
125
127
  module,
126
128
  url: event.url.href,
127
129
  routeId: event.route.id,
@@ -165,6 +167,17 @@ export default function skgo({ out = 'build', precompress = true } = {}) {
165
167
  }
166
168
  }
167
169
  return answer;
170
+ },
171
+ async skgoPrerenderRemote(module, name, arg, event) {
172
+ await buildPrerenderBinary();
173
+ const payload = arg === undefined ? '' : Buffer.from(stringify(arg)).toString('base64url');
174
+ const request = {
175
+ kind: 'remote', module, name, payload, url: event.url.href,
176
+ headers: Object.fromEntries([...event.request.headers].map(([key, value]) => [key, [value]]))
177
+ };
178
+ const raw = await runPrerenderCommand(prerenderBinary, [], prerenderRoot, JSON.stringify(request));
179
+ const answer = JSON.parse(raw);
180
+ return unflatten(JSON.parse(answer.data), transportDecoders)._;
168
181
  }
169
182
  })
170
183
  };
@@ -194,8 +207,10 @@ export default function skgo({ out = 'build', precompress = true } = {}) {
194
207
  checkRemoteIds(`${out}/client`, generated.remotes, hashes);
195
208
 
196
209
  builder.writePrerendered(`${out}/prerendered`);
197
- for (const file of walk(`${out}/prerendered`)) {
198
- if (file.endsWith('.html')) authorizePrerenderedScripts(file);
210
+ if (existsSync(`${out}/prerendered`)) {
211
+ for (const file of walk(`${out}/prerendered`)) {
212
+ if (file.endsWith('.html')) authorizePrerenderedScripts(file);
213
+ }
199
214
  }
200
215
  const prerendered = readPrerendered(builder);
201
216
  // The SPA shell is still emitted: it is what a page whose branch turns
@@ -228,7 +243,7 @@ export default function skgo({ out = 'build', precompress = true } = {}) {
228
243
  // `precompress: true` default.
229
244
  if (precompress) {
230
245
  await builder.compress(`${out}/client`);
231
- await builder.compress(`${out}/prerendered`);
246
+ if (existsSync(`${out}/prerendered`)) await builder.compress(`${out}/prerendered`);
232
247
  }
233
248
 
234
249
  // `builder` has no writeJson in kit 3.0.0-next.27 (it existed on the