UNPKG

svelte-adapter-bun

Version:

Adapter for SvelteKit apps that generates a standalone Bun.js server.

6 lines (4 loc) 2.25 kB
// @bun import{readFileSync as E,writeFileSync as G}from"fs";import{fileURLToPath as N}from"url";import{rolldown as O}from"rolldown";var Q=N(new URL("./files",import.meta.url).href);function V(B={}){let{out:q="build",precompress:C=!0,envPrefix:I="",serveAssets:J=!0}=B;return{name:"svelte-adapter-bun",async adapt(j){let z=j.getBuildDirectory("adapter-bun");if(j.rimraf(q),j.rimraf(z),j.mkdirp(z),j.log.minor("Copying assets"),j.writeClient(`${q}/client${j.config.kit.paths.base}`),j.writePrerendered(`${q}/prerendered${j.config.kit.paths.base}`),C)j.log.minor("Compressing assets"),await Promise.all([j.compress(`${q}/client`),j.compress(`${q}/prerendered`)]);j.log.minor("Building server"),j.writeServer(z),G(`${z}/manifest.js`,[`export const manifest = ${j.generateManifest({relativePath:"./"})};`,`export const prerendered = new Set(${JSON.stringify(j.prerendered.paths)});`,`export const base = ${JSON.stringify(j.config.kit.paths.base)};`].join(` `));let K=JSON.parse(E("package.json","utf-8")),D={index:`${z}/index.js`,manifest:`${z}/manifest.js`};if(j.hasServerInstrumentationFile?.())D["instrumentation.server"]=`${z}/instrumentation.server.js`;if(await(await O({input:D,external:[...Object.keys(K.dependencies||{}).map((M)=>new RegExp(`^${M}(\\/.*)?$`)),/^node:/]})).write({dir:`${q}/server`,format:"esm",sourcemap:!0,chunkFileNames:"chunks/[name]-[hash].js"}),await X(`${q}/server/index.js`),j.copy(Q,q,{replace:{ENV:"./env.js",HANDLER:"./handler.js",MANIFEST:"./server/manifest.js",SERVER:"./server/index.js",ENV_PREFIX:JSON.stringify(I),BUILD_OPTIONS:JSON.stringify({serveAssets:J})}}),j.hasServerInstrumentationFile?.())j.instrument?.({entrypoint:`${q}/index.js`,instrumentation:`${q}/server/instrumentation.server.js`,module:{exports:["path","host","port","server"]}})},supports:{read:()=>!0,instrumentation:()=>!0}}}async function X(B){let C=E(B,"utf-8").replace(/(const (.*?) = await get_hooks\(\);)\s+(this\.#options\.hooks\s+=\s+{)/,"$1$3websocket: $2.websocket || null,").replace(/(async function get_hooks\(\) {)/,"$1let websocket;").replace(/(\({handle,)((.|\s)*?return {)/,"$1websocket,$2websocket,").replace(/(async init\({ env, read }\) {)/,`websocket() {return this.#options.hooks.websocket} $1`);G(B,C)}export{V as default};