@sveltejs/kit
Version:
SvelteKit is the fastest way to build Svelte apps
49 lines (40 loc) • 1.37 kB
JavaScript
import { readFileSync } from 'node:fs';
import { join } from 'node:path';
import { pathToFileURL } from 'node:url';
import { forked } from '../../utils/fork.js';
import * as e from '../../messages/build-errors.js';
export default forked(import.meta.url, generate_fallback);
/**
* @param {{
* manifest_path: string;
* env: Record<string, string>
* out_dir: string;
* origin: string;
* assets: string;
* }} opts
*/
async function generate_fallback({ manifest_path, env, out_dir, origin, assets }) {
const server_root = join(out_dir, 'output');
/** @type {import('types').ServerModule} */
const { configure } = await import(pathToFileURL(`${server_root}/server/index.js`).href);
/** @type {import('types').SSRManifest} */
const manifest = (await import(pathToFileURL(manifest_path).href)).manifest;
const { init, respond } = await configure({ building: true, manifest, env });
await init();
const response = await respond(new Request(origin + '/[fallback]'), {
getClientAddress: () => {
e.prerender_client_address();
},
prerendering: {
fallback: true,
dependencies: new Map(),
remote_responses: new Map(),
resolved_route_ids: new Set()
},
read: (file) => readFileSync(join(assets, file))
});
if (response.ok) {
return await response.text();
}
e.prerender_fallback_failed(undefined, { stackless: true });
}