From 4f93c7d996732de4bc19e7acf2d4ce803cba88b6 Mon Sep 17 00:00:00 2001 From: Thomas Hallock Date: Tue, 4 Nov 2025 08:54:57 -0600 Subject: [PATCH] fix(web): use dynamic import for react-dom/server in API route MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Next.js bundler flags react-dom/server imports even in API routes during static analysis. Using dynamic import (await import()) ensures it only loads at runtime on the server. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- apps/web/src/app/api/create/calendar/generate/route.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/web/src/app/api/create/calendar/generate/route.ts b/apps/web/src/app/api/create/calendar/generate/route.ts index e9924516..161161d5 100644 --- a/apps/web/src/app/api/create/calendar/generate/route.ts +++ b/apps/web/src/app/api/create/calendar/generate/route.ts @@ -3,7 +3,6 @@ import { writeFileSync, readFileSync, mkdirSync, rmSync } from 'fs' import { tmpdir } from 'os' import { join } from 'path' import { execSync } from 'child_process' -import { renderToStaticMarkup } from 'react-dom/server' import { generateMonthlyTypst, generateDailyTypst, getDaysInMonth } from '../utils/typstGenerator' import type { AbacusConfig } from '@soroban/abacus-react' import { generateCalendarComposite } from '@/../../scripts/generateCalendarComposite' @@ -21,6 +20,9 @@ export async function POST(request: NextRequest) { let tempDir: string | null = null try { + // Dynamic import to avoid Next.js bundler issues with react-dom/server + const { renderToStaticMarkup } = await import('react-dom/server') + const body: CalendarRequest = await request.json() const { month, year, format, paperSize, abacusConfig } = body