import fs from "node:fs"; function assert(condition, message) { if (!condition) throw new Error(message); } const page = fs.readFileSync( new URL( "../src/features/calendar/CalendarPage.tsx", import.meta.url, ), "utf8", ); const views = fs.readFileSync( new URL( "../src/features/calendar/CalendarViews.tsx", import.meta.url, ), "utf8", ); const model = fs.readFileSync( new URL( "../src/features/calendar/calendarViewModel.ts", import.meta.url, ), "utf8", ); const collectionDialogs = fs.readFileSync( new URL( "../src/features/calendar/CalendarCollectionDialogs.tsx", import.meta.url, ), "utf8", ); const eventDialog = fs.readFileSync( new URL( "../src/features/calendar/CalendarEventDialog.tsx", import.meta.url, ), "utf8", ); assert( page.includes('from "./CalendarViews"'), "CalendarPage must compose the focused calendar view components", ); assert( !page.includes("function CalendarWeekRows("), "CalendarPage must not own month/continuous rendering", ); assert( !page.includes("function CalendarTimeGrid("), "CalendarPage must not own time-grid rendering", ); assert( views.includes("export function CalendarWeekRows(") && views.includes("export function CalendarTimeGrid("), "CalendarViews must own both view families", ); assert( model.includes("export function layoutTimedEventsForDay(") && model.includes("export function continuousVirtualWindow("), "calendar layout and virtualization must remain independently testable", ); assert( !page.includes("function CalendarCollectionDialog(") && !page.includes("function CalendarEventDialog("), "CalendarPage must not own source or event form dialogs", ); assert( collectionDialogs.includes( "export function CalendarCollectionDialog(", ) && eventDialog.includes("export function CalendarEventDialog("), "calendar dialogs must remain focused components", ); console.log("Calendar page decomposition checks passed.");