UNPKG

sveltekit-lambda-adapter

Version:
66 lines (65 loc) 2.54 kB
import fs from "node:fs"; import { fileURLToPath } from "node:url"; const __dirname = fileURLToPath(new URL(".", import.meta.url)); import { build } from "esbuild"; import * as path from "path"; import { cp, rm, } from "fs/promises"; import { existsSync } from "node:fs"; async function bundleApp() { await rm(path.join("build"), { recursive: true, force: true }); await build({ entryPoints: [path.join("out", "server", "lambda-handler", "index.js")], bundle: true, platform: "node", target: ["esnext"], format: "esm", outExtension: { ".js": ".mjs", }, banner: { js: [ `import { createRequire as topLevelCreateRequire } from 'module';`, `const require = topLevelCreateRequire(import.meta.url);`, ].join(""), }, outdir: path.join("build"), }); if (existsSync(path.join("out", "prerendered"))) { await cp(path.join("out", "prerendered"), path.join("build", "prerendered"), { recursive: true, }); } else { console.log("No Prerendered Directory found."); } console.log("BUILD SUCEEDED!"); } function adapter() { const adapter = { name: "sachtak-adapter", async adapt(builder) { const out = path.join("out"); const clientDir = path.join(out, "client"); const serverDir = path.join(out, "server"); const prerenderedDir = path.join(out, "prerendered"); // Cleanup output folder builder.rimraf(out); // builder.mkdirp(clientDir); // builder.mkdirp(serverDir); // builder.mkdirp(prerenderedDir); // Create static output builder.log.minor("Copying assets..."); builder.writeClient(clientDir); const prerenderedFiles = builder.writePrerendered(prerenderedDir); // Create Lambda function builder.log.minor("Generating server function..."); builder.writeServer(serverDir); // copy over handler files in server handler folder builder.copy(path.join(__dirname, "handler"), path.join(serverDir, "lambda-handler")); // save a list of files in server handler folder fs.writeFileSync(path.join(serverDir, "lambda-handler", "prerendered-file-list.js"), `export default ${JSON.stringify(prerenderedFiles)}`); }, }; return adapter; } export { adapter, bundleApp };