UNPKG

alinea

Version:
67 lines (65 loc) 2.32 kB
import { PLazy } from "../../chunks/chunk-IKINPSS5.js"; import "../../chunks/chunk-NZLE2WMY.js"; // src/adapter/next/handler.ts import { createBackend } from "alinea/backend/api/CreateBackend"; import { createHandler as createCoreHandler } from "alinea/backend/Handler"; import { generatedSource } from "alinea/backend/store/GeneratedSource"; import { JWTPreviews } from "alinea/backend/util/JWTPreviews"; import { CloudRemote } from "alinea/cloud/CloudRemote"; import { LocalDB } from "alinea/core/db/LocalDB"; import { NextCMS } from "./cms.js"; import { requestContext } from "./context.js"; var handlers = /* @__PURE__ */ new WeakMap(); function createHandler(input) { const options = input instanceof NextCMS ? { cms: input } : input; const remote = options.remote ?? (options.backend ? createBackend(options.cms.config, options.backend) : (context) => new CloudRemote(context, options.cms)); if (handlers.has(options.cms)) return handlers.get(options.cms); const config = options.cms.config; const db = PLazy.from(async () => { const source = await generatedSource; const db2 = new LocalDB(config, source); await db2.sync(); return db2; }); const handleBackend = createCoreHandler({ ...options, remote, db }); const handle = async (request) => { try { const context = await requestContext(config); const previews = new JWTPreviews(context.apiKey); const { searchParams } = new URL(request.url); const previewToken = searchParams.get("preview"); if (previewToken) { const { draftMode } = await import("next/headers"); const { url } = await previews.verify(previewToken); const source = new URL(request.url); if (source.hostname === "0.0.0.0") source.hostname = "localhost"; const location = new URL(url, source.origin); const dm = await draftMode(); dm.enable(); return new Response("Redirecting...", { status: 302, headers: { location: String(location) } }); } return await handleBackend(request, context); } catch (error) { console.error(error); return new Response("Internal server error", { status: 500 }); } }; handlers.set(options.cms, handle); return handle; } export { createHandler };