From df7402942383c45d0bf4c431ca5e7ad6de8f7472 Mon Sep 17 00:00:00 2001 From: Till JS Date: Fri, 3 Apr 2026 13:42:31 +0200 Subject: [PATCH] =?UTF-8?q?fix(manacore/web):=20fix=20cross-module=20drop?= =?UTF-8?q?=20=E2=80=94=20sync=20entity=20registration,=20lazy=20store=20i?= =?UTF-8?q?mports?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Entity registration was async (dynamic imports) so acceptedDropTypes was always empty when $derived first evaluated. Now entities register synchronously at import time. Store imports (Dexie, etc.) are deferred to createItem() call time to avoid circular dependencies. Co-Authored-By: Claude Opus 4.6 (1M context) --- apps/manacore/apps/web/src/lib/entities/index.ts | 14 +++++++------- .../apps/web/src/lib/modules/calendar/entity.ts | 6 ++++-- .../apps/web/src/lib/modules/todo/entity.ts | 3 ++- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/apps/manacore/apps/web/src/lib/entities/index.ts b/apps/manacore/apps/web/src/lib/entities/index.ts index b679b508b..0b1c6668c 100644 --- a/apps/manacore/apps/web/src/lib/entities/index.ts +++ b/apps/manacore/apps/web/src/lib/entities/index.ts @@ -11,13 +11,13 @@ export { getAllEntities, } from './registry'; -// Lazy entity registration — avoids circular imports at module load time. -let registered = false; +// Register module entities eagerly — these are lightweight descriptor files +// with no heavy dependencies (stores are only called at drop time, not import time). +import '$lib/modules/todo/entity'; +import '$lib/modules/calendar/entity'; +import '$lib/modules/contacts/entity'; +// Re-export for consumers that previously used lazy registration export function ensureEntitiesRegistered(): void { - if (registered) return; - registered = true; - import('$lib/modules/todo/entity'); - import('$lib/modules/calendar/entity'); - import('$lib/modules/contacts/entity'); + // No-op — entities are now registered at import time } diff --git a/apps/manacore/apps/web/src/lib/modules/calendar/entity.ts b/apps/manacore/apps/web/src/lib/modules/calendar/entity.ts index 48a4abfcb..047986356 100644 --- a/apps/manacore/apps/web/src/lib/modules/calendar/entity.ts +++ b/apps/manacore/apps/web/src/lib/modules/calendar/entity.ts @@ -1,6 +1,4 @@ import { registerEntity } from '$lib/entities/registry'; -import { eventsStore } from './stores/events.svelte'; -import { db } from '$lib/data/database'; import type { EntityDescriptor } from '$lib/entities/types'; const calendarEntity: EntityDescriptor = { @@ -48,6 +46,10 @@ const calendarEntity: EntityDescriptor = { }, createItem: async (data) => { + // Lazy imports to avoid circular dependency at registration time + const { db } = await import('$lib/data/database'); + const { eventsStore } = await import('./stores/events.svelte'); + const calendars = await db.table('calendars').toArray(); const defaultCal = calendars.find((c: Record) => !c.deletedAt); const calendarId = (defaultCal?.id as string) ?? 'default'; diff --git a/apps/manacore/apps/web/src/lib/modules/todo/entity.ts b/apps/manacore/apps/web/src/lib/modules/todo/entity.ts index 8462dd469..ebf53d210 100644 --- a/apps/manacore/apps/web/src/lib/modules/todo/entity.ts +++ b/apps/manacore/apps/web/src/lib/modules/todo/entity.ts @@ -1,5 +1,4 @@ import { registerEntity } from '$lib/entities/registry'; -import { tasksStore } from './stores/tasks.svelte'; import type { EntityDescriptor } from '$lib/entities/types'; const todoEntity: EntityDescriptor = { @@ -27,6 +26,8 @@ const todoEntity: EntityDescriptor = { }, createItem: async (data) => { + // Lazy import to avoid circular dependency at registration time + const { tasksStore } = await import('./stores/tasks.svelte'); const task = await tasksStore.createTask( data as { title: string; dueDate?: string; description?: string } );