bknd
Version:
Lightweight Firebase/Supabase alternative built to run anywhere — incl. Next.js, React Router, Astro, Cloudflare, Bun, Node, AWS Lambda & more.
2 lines (1 loc) • 1.87 kB
JavaScript
import{config as g,App as s,Connection as l,guessMimeType as u}from"bknd";import{$console as A}from"bknd/utils";function m(t,r){let i={},{app:n,...o}=t;if(n)if(typeof n=="function"){if(!r)throw new Error("args is required when config.app is a function");i=n(r)}else i=n;return{...o,...i}}var d=new Map;async function c(t={},r,i){let n=i?.id??"app",o=d.get(n);if(!o||i?.force){let e=m(t,r);if(!e.connection||!l.isConnection(e.connection)){let p;if(l.isConnection(t.connection))p=t.connection;else{let a=(await import("bknd/adapter/sqlite")).sqlite,f=e.connection??{url:":memory:"};p=a(f),A.info(`Using ${p.name} connection`,f.url)}e.connection=p}o=s.create(e),d.set(n,o)}return o}async function w(t={},r,i){let n=await c(t,r,i);return n.isBuilt()||(t.onBuilt&&n.emgr.onEvent(s.Events.AppBuiltEvent,async()=>{await t.onBuilt?.(n)},"sync"),await t.beforeBuild?.(n),await n.build(t.buildConfig)),n}async function B({serveStatic:t,adminOptions:r,...i}={},n,o){let e=await c(i,n,o);return e.isBuilt()||(e.emgr.onEvent(s.Events.AppBuiltEvent,async()=>{if(t){let[p,a]=Array.isArray(t)?t:[g.server.assets_path+"*",t];e.modules.server.get(p,a)}await i.onBuilt?.(e),r!==!1&&e.registerAdminController(r)},"sync"),await i.beforeBuild?.(e),await e.build(i.buildConfig)),e}function x(t){let r;return async(i,n)=>{if(!r){let e=t?.manifest||(await import("bknd/dist/manifest.json")).default;r=Object.values(e).flatMap(p=>[p.file,...p.css||[]])}let o=i.req.path.substring(1);if(r.includes(o))try{let e=await import(`bknd/static/${o}?raw`).then(p=>p.default);if(e)return i.body(e,{headers:{"Content-Type":u(o),"Cache-Control":"public, max-age=31536000, immutable"}})}catch(e){return console.error("Error serving static file:",e),i.text("File not found",404)}await n()}}export{c as createAdapterApp,w as createFrameworkApp,B as createRuntimeApp,m as makeConfig,x as serveStaticViaImport};