@sveltejs/kit
Version:
SvelteKit is the fastest way to build Svelte apps
81 lines (70 loc) • 2.29 kB
JavaScript
import { set_building, set_prerendering } from '#app/env/server';
import { enable_verbose_errors } from '../../messages/internal/shared.js';
import { set_assets } from '../app/paths/internal/server.js';
import { set_fix_stack_trace, set_manifest, set_read_implementation } from './internal.js';
/**
* Sets the module-level state the runtime reads, then loads the runtime. Everything that
* evaluates user code, the env config included, sits behind this import
* @param {import('types').ServerConfigureOptions} opts
* @returns {Promise<import('types').ServerInstance>}
*/
export async function configure({
building,
prerendering,
manifest,
read,
assets,
fix_stack_trace,
env
}) {
if (building) {
set_building();
enable_verbose_errors();
}
if (prerendering) set_prerendering();
if (manifest) set_manifest(manifest);
if (read) set_read_implementation(read);
if (assets !== undefined) set_assets(assets);
if (fix_stack_trace) set_fix_stack_trace(fix_stack_trace);
const instance = await import('./instance.js');
if (env) instance.set_env(env);
return instance;
}
/**
* The `server` object adapters receive from `builder.generateServerInstance`
* @param {import('types').SSRManifest} manifest
* @returns {import('@sveltejs/kit').Server}
*/
export function create_server(manifest) {
/** @type {import('types').ServerInstance} */
let server;
return {
// adapters get to set `env` and `read`, nothing else
init: async ({ env, read }) => {
server = await configure({ manifest, env, read });
await server.init();
},
/** @type {import('types').ServerInstance['respond']} */
respond: (request, options) => server.respond(request, options)
};
}
/** @deprecated use the `server` written by `builder.generateServerInstance`, or `configure` */
export class Server {
#server;
/** @param {import('types').SSRManifest} manifest */
constructor(manifest) {
this.#server = create_server(manifest);
}
/** @param {import('@sveltejs/kit').ServerInitOptions} opts */
init(opts) {
return this.#server.init(opts);
}
/**
* @param {Request} request
* @param {import('types').InternalRequestOptions} options
*/
respond(request, options) {
return this.#server.respond(request, options);
}
}
export { format_response } from './internal.js';