mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-15 00:01:10 +02:00
fix(mana/web): commit module-registry + module.config.ts files (build-critical)
These files have been sitting untracked in working trees on multiple
machines since the unified module-registry refactor. database.ts
imports from $lib/data/module-registry but the file itself was never
git-add'd, so the production build crashes on any clean clone with:
Could not resolve "./module-registry" from "src/lib/data/database.ts"
Discovered today during the first deploy of the Memoro recording
pipeline: pulling onto the Mac Mini (which had its own untracked copies
of these files in a stash) revealed that origin/main has been silently
broken for clean builds. Fixed by committing the canonical versions:
- apps/mana/apps/web/src/lib/data/module-registry.ts
- apps/mana/apps/web/src/lib/data/module-registry.test.ts
- apps/mana/apps/web/src/lib/modules/{31 modules}/module.config.ts
The events module already had its module.config.ts committed in
6a60e22a3 (events Phase 2), so it isn't included here.
Also bumps apps/mana/apps/web/Dockerfile build heap from 4096 → 8192:
the unified app outgrew the 4 GB ceiling somewhere between Sprint 2
and Sprint 3 of the data layer rewrite, and Vite OOMs while bundling
all 32 module chunks. The bump existed locally on multiple boxes but
was never committed; today's deploy hit the OOM and required restoring
the bump from a stash to make the image rebuild succeed.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
42bd2a3a04
commit
5d4123d2b0
33 changed files with 526 additions and 1 deletions
|
|
@ -25,7 +25,9 @@ RUN pnpm build
|
|||
|
||||
WORKDIR /app/apps/mana/apps/web
|
||||
RUN pnpm exec svelte-kit sync
|
||||
RUN NODE_OPTIONS="--max-old-space-size=4096" pnpm build
|
||||
# Build heap was bumped 4096→8192 after the unified app grew past the
|
||||
# 4 GB ceiling — Vite OOMs while bundling all 32 module chunks otherwise.
|
||||
RUN NODE_OPTIONS="--max-old-space-size=8192" pnpm build
|
||||
|
||||
FROM node:20-alpine AS production
|
||||
WORKDIR /app/apps/mana/apps/web
|
||||
|
|
|
|||
202
apps/mana/apps/web/src/lib/data/module-registry.ts
Normal file
202
apps/mana/apps/web/src/lib/data/module-registry.ts
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
/**
|
||||
* Module Registry — Single source of truth for app/table/sync mappings.
|
||||
*
|
||||
* Each module declares its sync surface in a `module.config.ts` file. This
|
||||
* registry aggregates all configs and exposes derived maps that the rest of
|
||||
* the data layer (database.ts, sync.ts) consumes.
|
||||
*
|
||||
* Adding a new module = create one config file. The legacy hardcoded
|
||||
* SYNC_APP_MAP / TABLE_TO_SYNC_NAME blocks in database.ts are now generated
|
||||
* from this registry, so a single edit per module replaces edits in three
|
||||
* different places.
|
||||
*
|
||||
* Schema migrations (db.version(N).stores()) intentionally remain in
|
||||
* database.ts because they are versioned snapshots that must never change
|
||||
* after release — they are not derived from this registry.
|
||||
*/
|
||||
|
||||
// ─── Types ─────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* Declares one Dexie table that participates in sync.
|
||||
*
|
||||
* `name` is the unified Dexie table name (e.g., `todoProjects`). If the
|
||||
* backend (mana-sync) expects a different collection name, set `syncName`
|
||||
* (e.g., `projects`). Tables without a rename omit `syncName`.
|
||||
*/
|
||||
export interface SyncTableConfig {
|
||||
name: string;
|
||||
syncName?: string;
|
||||
}
|
||||
|
||||
export interface ModuleConfig {
|
||||
/** Stable app identifier used for sync routing (POST /sync/{appId}). */
|
||||
appId: string;
|
||||
/** All Dexie tables owned by this module that should be tracked + synced. */
|
||||
tables: SyncTableConfig[];
|
||||
}
|
||||
|
||||
// ─── Module Configs ────────────────────────────────────────
|
||||
//
|
||||
// Each entry is imported from a module's own `module.config.ts`. Modules
|
||||
// without a config (purely UI / stateless, e.g. playground) are simply
|
||||
// absent from this list.
|
||||
//
|
||||
// `core` is the home for cross-cutting tables that don't belong to any
|
||||
// product module (mana settings, global tags, manaLinks, timeBlocks).
|
||||
|
||||
import {
|
||||
manaCoreConfig,
|
||||
tagsCoreConfig,
|
||||
linksCoreConfig,
|
||||
timeblocksCoreConfig,
|
||||
} from '$lib/modules/core/module.config';
|
||||
import { todoModuleConfig } from '$lib/modules/todo/module.config';
|
||||
import { calendarModuleConfig } from '$lib/modules/calendar/module.config';
|
||||
import { contactsModuleConfig } from '$lib/modules/contacts/module.config';
|
||||
import { chatModuleConfig } from '$lib/modules/chat/module.config';
|
||||
import { pictureModuleConfig } from '$lib/modules/picture/module.config';
|
||||
import { cardsModuleConfig } from '$lib/modules/cards/module.config';
|
||||
import { zitareModuleConfig } from '$lib/modules/zitare/module.config';
|
||||
import { musicModuleConfig } from '$lib/modules/music/module.config';
|
||||
import { storageModuleConfig } from '$lib/modules/storage/module.config';
|
||||
import { presiModuleConfig } from '$lib/modules/presi/module.config';
|
||||
import { inventarModuleConfig } from '$lib/modules/inventar/module.config';
|
||||
import { photosModuleConfig } from '$lib/modules/photos/module.config';
|
||||
import { skilltreeModuleConfig } from '$lib/modules/skilltree/module.config';
|
||||
import { citycornersModuleConfig } from '$lib/modules/citycorners/module.config';
|
||||
import { timesModuleConfig } from '$lib/modules/times/module.config';
|
||||
import { contextModuleConfig } from '$lib/modules/context/module.config';
|
||||
import { questionsModuleConfig } from '$lib/modules/questions/module.config';
|
||||
import { nutriphiModuleConfig } from '$lib/modules/nutriphi/module.config';
|
||||
import { plantaModuleConfig } from '$lib/modules/planta/module.config';
|
||||
import { uloadModuleConfig } from '$lib/modules/uload/module.config';
|
||||
import { calcModuleConfig } from '$lib/modules/calc/module.config';
|
||||
import { moodlitModuleConfig } from '$lib/modules/moodlit/module.config';
|
||||
import { memoroModuleConfig } from '$lib/modules/memoro/module.config';
|
||||
import { guidesModuleConfig } from '$lib/modules/guides/module.config';
|
||||
import { habitsModuleConfig } from '$lib/modules/habits/module.config';
|
||||
import { notesModuleConfig } from '$lib/modules/notes/module.config';
|
||||
import { dreamsModuleConfig } from '$lib/modules/dreams/module.config';
|
||||
import { cyclesModuleConfig } from '$lib/modules/cycles/module.config';
|
||||
import { eventsModuleConfig } from '$lib/modules/events/module.config';
|
||||
import { financeModuleConfig } from '$lib/modules/finance/module.config';
|
||||
import { placesModuleConfig } from '$lib/modules/places/module.config';
|
||||
|
||||
export const MODULE_CONFIGS: readonly ModuleConfig[] = [
|
||||
manaCoreConfig,
|
||||
tagsCoreConfig,
|
||||
linksCoreConfig,
|
||||
timeblocksCoreConfig,
|
||||
todoModuleConfig,
|
||||
calendarModuleConfig,
|
||||
contactsModuleConfig,
|
||||
chatModuleConfig,
|
||||
pictureModuleConfig,
|
||||
cardsModuleConfig,
|
||||
zitareModuleConfig,
|
||||
musicModuleConfig,
|
||||
storageModuleConfig,
|
||||
presiModuleConfig,
|
||||
inventarModuleConfig,
|
||||
photosModuleConfig,
|
||||
skilltreeModuleConfig,
|
||||
citycornersModuleConfig,
|
||||
timesModuleConfig,
|
||||
contextModuleConfig,
|
||||
questionsModuleConfig,
|
||||
nutriphiModuleConfig,
|
||||
plantaModuleConfig,
|
||||
uloadModuleConfig,
|
||||
calcModuleConfig,
|
||||
moodlitModuleConfig,
|
||||
memoroModuleConfig,
|
||||
guidesModuleConfig,
|
||||
habitsModuleConfig,
|
||||
notesModuleConfig,
|
||||
dreamsModuleConfig,
|
||||
cyclesModuleConfig,
|
||||
eventsModuleConfig,
|
||||
financeModuleConfig,
|
||||
placesModuleConfig,
|
||||
];
|
||||
|
||||
// ─── Derived Maps ──────────────────────────────────────────
|
||||
|
||||
/**
|
||||
* appId → list of unified Dexie table names. Mirrors the legacy
|
||||
* `SYNC_APP_MAP` shape so existing consumers (sync.ts) need no changes.
|
||||
*/
|
||||
export const SYNC_APP_MAP: Record<string, string[]> = (() => {
|
||||
const map: Record<string, string[]> = {};
|
||||
for (const mod of MODULE_CONFIGS) {
|
||||
if (map[mod.appId]) {
|
||||
throw new Error(
|
||||
`[module-registry] duplicate appId "${mod.appId}" — two module configs share the same id`
|
||||
);
|
||||
}
|
||||
map[mod.appId] = mod.tables.map((t) => t.name);
|
||||
}
|
||||
return map;
|
||||
})();
|
||||
|
||||
/**
|
||||
* Unified Dexie table name → backend sync collection name.
|
||||
* Only tables that need a rename are present.
|
||||
*/
|
||||
export const TABLE_TO_SYNC_NAME: Record<string, string> = (() => {
|
||||
const map: Record<string, string> = {};
|
||||
for (const mod of MODULE_CONFIGS) {
|
||||
for (const t of mod.tables) {
|
||||
if (t.syncName && t.syncName !== t.name) {
|
||||
map[t.name] = t.syncName;
|
||||
}
|
||||
}
|
||||
}
|
||||
return map;
|
||||
})();
|
||||
|
||||
/**
|
||||
* Reverse map: unified table name → owning appId. Built once at startup;
|
||||
* used by the Dexie hooks to tag pending changes with the correct appId.
|
||||
*/
|
||||
export const TABLE_TO_APP: Record<string, string> = (() => {
|
||||
const map: Record<string, string> = {};
|
||||
for (const mod of MODULE_CONFIGS) {
|
||||
for (const t of mod.tables) {
|
||||
if (map[t.name]) {
|
||||
throw new Error(
|
||||
`[module-registry] table "${t.name}" is registered by both "${map[t.name]}" and "${mod.appId}"`
|
||||
);
|
||||
}
|
||||
map[t.name] = mod.appId;
|
||||
}
|
||||
}
|
||||
return map;
|
||||
})();
|
||||
|
||||
/** Get the backend collection name for a unified table. */
|
||||
export function toSyncName(tableName: string): string {
|
||||
return TABLE_TO_SYNC_NAME[tableName] ?? tableName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Per-app reverse map: backend collection name → unified table name.
|
||||
* Used when applying server changes pulled per appId.
|
||||
*/
|
||||
export const SYNC_NAME_TO_TABLE: Record<string, Record<string, string>> = (() => {
|
||||
const out: Record<string, Record<string, string>> = {};
|
||||
for (const [appId, tables] of Object.entries(SYNC_APP_MAP)) {
|
||||
const map: Record<string, string> = {};
|
||||
for (const tableName of tables) {
|
||||
map[toSyncName(tableName)] = tableName;
|
||||
}
|
||||
out[appId] = map;
|
||||
}
|
||||
return out;
|
||||
})();
|
||||
|
||||
/** Get the unified table name for a backend collection + appId. */
|
||||
export function fromSyncName(appId: string, syncCollection: string): string {
|
||||
return SYNC_NAME_TO_TABLE[appId]?.[syncCollection] ?? syncCollection;
|
||||
}
|
||||
6
apps/mana/apps/web/src/lib/modules/calc/module.config.ts
Normal file
6
apps/mana/apps/web/src/lib/modules/calc/module.config.ts
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const calcModuleConfig: ModuleConfig = {
|
||||
appId: 'calc',
|
||||
tables: [{ name: 'calculations' }, { name: 'savedFormulas' }],
|
||||
};
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const calendarModuleConfig: ModuleConfig = {
|
||||
appId: 'calendar',
|
||||
tables: [{ name: 'calendars' }, { name: 'events' }, { name: 'eventTags' }],
|
||||
};
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const cardsModuleConfig: ModuleConfig = {
|
||||
appId: 'cards',
|
||||
tables: [{ name: 'cardDecks', syncName: 'decks' }, { name: 'cards' }, { name: 'deckTags' }],
|
||||
};
|
||||
11
apps/mana/apps/web/src/lib/modules/chat/module.config.ts
Normal file
11
apps/mana/apps/web/src/lib/modules/chat/module.config.ts
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const chatModuleConfig: ModuleConfig = {
|
||||
appId: 'chat',
|
||||
tables: [
|
||||
{ name: 'conversations' },
|
||||
{ name: 'messages' },
|
||||
{ name: 'chatTemplates', syncName: 'templates' },
|
||||
{ name: 'conversationTags' },
|
||||
],
|
||||
};
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const citycornersModuleConfig: ModuleConfig = {
|
||||
appId: 'citycorners',
|
||||
tables: [
|
||||
{ name: 'cities' },
|
||||
{ name: 'ccLocations', syncName: 'locations' },
|
||||
{ name: 'ccFavorites', syncName: 'favorites' },
|
||||
{ name: 'ccLocationTags' },
|
||||
],
|
||||
};
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const contactsModuleConfig: ModuleConfig = {
|
||||
appId: 'contacts',
|
||||
tables: [{ name: 'contacts' }, { name: 'contactTags' }],
|
||||
};
|
||||
10
apps/mana/apps/web/src/lib/modules/context/module.config.ts
Normal file
10
apps/mana/apps/web/src/lib/modules/context/module.config.ts
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const contextModuleConfig: ModuleConfig = {
|
||||
appId: 'context',
|
||||
tables: [
|
||||
{ name: 'contextSpaces', syncName: 'spaces' },
|
||||
{ name: 'documents' },
|
||||
{ name: 'documentTags' },
|
||||
],
|
||||
};
|
||||
37
apps/mana/apps/web/src/lib/modules/core/module.config.ts
Normal file
37
apps/mana/apps/web/src/lib/modules/core/module.config.ts
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
/**
|
||||
* Core sync configs — cross-cutting tables that don't belong to any product
|
||||
* module. These are split into four sync apps because they each push/pull on
|
||||
* their own /sync/{appId} channel:
|
||||
*
|
||||
* - mana → user settings, dashboard config, automations
|
||||
* - tags → globalTags, tagGroups (shared across all modules)
|
||||
* - links → manaLinks (cross-app record links)
|
||||
* - timeblocks → unified time model (events/timeEntries/habits/tasks all
|
||||
* project into timeBlocks for cross-module scheduling)
|
||||
*/
|
||||
|
||||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const manaCoreConfig: ModuleConfig = {
|
||||
appId: 'mana',
|
||||
tables: [{ name: 'userSettings' }, { name: 'dashboardConfigs' }, { name: 'automations' }],
|
||||
};
|
||||
|
||||
export const tagsCoreConfig: ModuleConfig = {
|
||||
appId: 'tags',
|
||||
tables: [
|
||||
{ name: 'globalTags', syncName: 'tags' },
|
||||
// `tagGroups` is the same on both sides — no rename needed.
|
||||
{ name: 'tagGroups' },
|
||||
],
|
||||
};
|
||||
|
||||
export const linksCoreConfig: ModuleConfig = {
|
||||
appId: 'links',
|
||||
tables: [{ name: 'manaLinks', syncName: 'links' }],
|
||||
};
|
||||
|
||||
export const timeblocksCoreConfig: ModuleConfig = {
|
||||
appId: 'timeblocks',
|
||||
tables: [{ name: 'timeBlocks' }, { name: 'timeBlockTags' }],
|
||||
};
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const cyclesModuleConfig: ModuleConfig = {
|
||||
appId: 'cycles',
|
||||
tables: [{ name: 'cycles' }, { name: 'cycleDayLogs' }, { name: 'cycleSymptoms' }],
|
||||
};
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const dreamsModuleConfig: ModuleConfig = {
|
||||
appId: 'dreams',
|
||||
tables: [{ name: 'dreams' }, { name: 'dreamSymbols' }, { name: 'dreamTags' }],
|
||||
};
|
||||
10
apps/mana/apps/web/src/lib/modules/finance/module.config.ts
Normal file
10
apps/mana/apps/web/src/lib/modules/finance/module.config.ts
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const financeModuleConfig: ModuleConfig = {
|
||||
appId: 'finance',
|
||||
tables: [
|
||||
{ name: 'transactions' },
|
||||
{ name: 'financeCategories', syncName: 'categories' },
|
||||
{ name: 'budgets' },
|
||||
],
|
||||
};
|
||||
13
apps/mana/apps/web/src/lib/modules/guides/module.config.ts
Normal file
13
apps/mana/apps/web/src/lib/modules/guides/module.config.ts
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const guidesModuleConfig: ModuleConfig = {
|
||||
appId: 'guides',
|
||||
tables: [
|
||||
{ name: 'guides' },
|
||||
{ name: 'sections' },
|
||||
{ name: 'steps' },
|
||||
{ name: 'guideCollections', syncName: 'collections' },
|
||||
{ name: 'runs' },
|
||||
{ name: 'guideTags' },
|
||||
],
|
||||
};
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const habitsModuleConfig: ModuleConfig = {
|
||||
appId: 'habits',
|
||||
tables: [{ name: 'habits' }, { name: 'habitLogs' }],
|
||||
};
|
||||
12
apps/mana/apps/web/src/lib/modules/inventar/module.config.ts
Normal file
12
apps/mana/apps/web/src/lib/modules/inventar/module.config.ts
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const inventarModuleConfig: ModuleConfig = {
|
||||
appId: 'inventar',
|
||||
tables: [
|
||||
{ name: 'invCollections', syncName: 'collections' },
|
||||
{ name: 'invItems', syncName: 'items' },
|
||||
{ name: 'invLocations', syncName: 'locations' },
|
||||
{ name: 'invCategories', syncName: 'categories' },
|
||||
{ name: 'invItemTags' },
|
||||
],
|
||||
};
|
||||
13
apps/mana/apps/web/src/lib/modules/memoro/module.config.ts
Normal file
13
apps/mana/apps/web/src/lib/modules/memoro/module.config.ts
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const memoroModuleConfig: ModuleConfig = {
|
||||
appId: 'memoro',
|
||||
tables: [
|
||||
{ name: 'memos' },
|
||||
{ name: 'memories' },
|
||||
{ name: 'memoTags' },
|
||||
{ name: 'memoroSpaces', syncName: 'spaces' },
|
||||
{ name: 'spaceMembers' },
|
||||
{ name: 'memoSpaces' },
|
||||
],
|
||||
};
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const moodlitModuleConfig: ModuleConfig = {
|
||||
appId: 'moodlit',
|
||||
tables: [{ name: 'moods' }, { name: 'sequences' }, { name: 'moodTags' }],
|
||||
};
|
||||
13
apps/mana/apps/web/src/lib/modules/music/module.config.ts
Normal file
13
apps/mana/apps/web/src/lib/modules/music/module.config.ts
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const musicModuleConfig: ModuleConfig = {
|
||||
appId: 'music',
|
||||
tables: [
|
||||
{ name: 'songs' },
|
||||
{ name: 'mukkePlaylists', syncName: 'playlists' },
|
||||
{ name: 'playlistSongs' },
|
||||
{ name: 'mukkeProjects', syncName: 'projects' },
|
||||
{ name: 'markers' },
|
||||
{ name: 'songTags' },
|
||||
],
|
||||
};
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const notesModuleConfig: ModuleConfig = {
|
||||
appId: 'notes',
|
||||
tables: [{ name: 'notes' }, { name: 'noteTags' }],
|
||||
};
|
||||
11
apps/mana/apps/web/src/lib/modules/nutriphi/module.config.ts
Normal file
11
apps/mana/apps/web/src/lib/modules/nutriphi/module.config.ts
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const nutriphiModuleConfig: ModuleConfig = {
|
||||
appId: 'nutriphi',
|
||||
tables: [
|
||||
{ name: 'meals' },
|
||||
{ name: 'goals' },
|
||||
{ name: 'nutriFavorites', syncName: 'favorites' },
|
||||
{ name: 'mealTags' },
|
||||
],
|
||||
};
|
||||
11
apps/mana/apps/web/src/lib/modules/photos/module.config.ts
Normal file
11
apps/mana/apps/web/src/lib/modules/photos/module.config.ts
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const photosModuleConfig: ModuleConfig = {
|
||||
appId: 'photos',
|
||||
tables: [
|
||||
{ name: 'albums' },
|
||||
{ name: 'albumItems' },
|
||||
{ name: 'photoFavorites', syncName: 'favorites' },
|
||||
{ name: 'photoMediaTags', syncName: 'photoTags' },
|
||||
],
|
||||
};
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const pictureModuleConfig: ModuleConfig = {
|
||||
appId: 'picture',
|
||||
tables: [{ name: 'images' }, { name: 'boards' }, { name: 'boardItems' }, { name: 'imageTags' }],
|
||||
};
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const placesModuleConfig: ModuleConfig = {
|
||||
appId: 'places',
|
||||
tables: [{ name: 'places' }, { name: 'locationLogs' }, { name: 'placeTags' }],
|
||||
};
|
||||
12
apps/mana/apps/web/src/lib/modules/planta/module.config.ts
Normal file
12
apps/mana/apps/web/src/lib/modules/planta/module.config.ts
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const plantaModuleConfig: ModuleConfig = {
|
||||
appId: 'planta',
|
||||
tables: [
|
||||
{ name: 'plants' },
|
||||
{ name: 'plantPhotos' },
|
||||
{ name: 'wateringSchedules' },
|
||||
{ name: 'wateringLogs' },
|
||||
{ name: 'plantTags' },
|
||||
],
|
||||
};
|
||||
10
apps/mana/apps/web/src/lib/modules/presi/module.config.ts
Normal file
10
apps/mana/apps/web/src/lib/modules/presi/module.config.ts
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const presiModuleConfig: ModuleConfig = {
|
||||
appId: 'presi',
|
||||
tables: [
|
||||
{ name: 'presiDecks', syncName: 'decks' },
|
||||
{ name: 'slides' },
|
||||
{ name: 'presiDeckTags' },
|
||||
],
|
||||
};
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const questionsModuleConfig: ModuleConfig = {
|
||||
appId: 'questions',
|
||||
tables: [
|
||||
{ name: 'qCollections', syncName: 'collections' },
|
||||
{ name: 'questions' },
|
||||
{ name: 'answers' },
|
||||
{ name: 'questionTags' },
|
||||
],
|
||||
};
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const skilltreeModuleConfig: ModuleConfig = {
|
||||
appId: 'skilltree',
|
||||
tables: [
|
||||
{ name: 'skills' },
|
||||
{ name: 'activities' },
|
||||
{ name: 'achievements' },
|
||||
{ name: 'skillTags' },
|
||||
],
|
||||
};
|
||||
10
apps/mana/apps/web/src/lib/modules/storage/module.config.ts
Normal file
10
apps/mana/apps/web/src/lib/modules/storage/module.config.ts
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const storageModuleConfig: ModuleConfig = {
|
||||
appId: 'storage',
|
||||
tables: [
|
||||
{ name: 'files' },
|
||||
{ name: 'storageFolders', syncName: 'folders' },
|
||||
{ name: 'fileTags' },
|
||||
],
|
||||
};
|
||||
16
apps/mana/apps/web/src/lib/modules/times/module.config.ts
Normal file
16
apps/mana/apps/web/src/lib/modules/times/module.config.ts
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const timesModuleConfig: ModuleConfig = {
|
||||
appId: 'times',
|
||||
tables: [
|
||||
{ name: 'timeClients', syncName: 'clients' },
|
||||
{ name: 'timeProjects', syncName: 'projects' },
|
||||
{ name: 'timeEntries' },
|
||||
{ name: 'timeTemplates', syncName: 'templates' },
|
||||
{ name: 'timeSettings', syncName: 'settings' },
|
||||
{ name: 'timeAlarms', syncName: 'alarms' },
|
||||
{ name: 'timeCountdownTimers', syncName: 'countdownTimers' },
|
||||
{ name: 'timeWorldClocks', syncName: 'worldClocks' },
|
||||
{ name: 'entryTags' },
|
||||
],
|
||||
};
|
||||
12
apps/mana/apps/web/src/lib/modules/todo/module.config.ts
Normal file
12
apps/mana/apps/web/src/lib/modules/todo/module.config.ts
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const todoModuleConfig: ModuleConfig = {
|
||||
appId: 'todo',
|
||||
tables: [
|
||||
{ name: 'tasks' },
|
||||
{ name: 'todoProjects', syncName: 'projects' },
|
||||
{ name: 'taskLabels' },
|
||||
{ name: 'reminders' },
|
||||
{ name: 'boardViews' },
|
||||
],
|
||||
};
|
||||
11
apps/mana/apps/web/src/lib/modules/uload/module.config.ts
Normal file
11
apps/mana/apps/web/src/lib/modules/uload/module.config.ts
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const uloadModuleConfig: ModuleConfig = {
|
||||
appId: 'uload',
|
||||
tables: [
|
||||
{ name: 'links' },
|
||||
{ name: 'uloadTags', syncName: 'tags' },
|
||||
{ name: 'uloadFolders', syncName: 'folders' },
|
||||
{ name: 'linkTags' },
|
||||
],
|
||||
};
|
||||
10
apps/mana/apps/web/src/lib/modules/zitare/module.config.ts
Normal file
10
apps/mana/apps/web/src/lib/modules/zitare/module.config.ts
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
import type { ModuleConfig } from '$lib/data/module-registry';
|
||||
|
||||
export const zitareModuleConfig: ModuleConfig = {
|
||||
appId: 'zitare',
|
||||
tables: [
|
||||
{ name: 'zitareFavorites', syncName: 'favorites' },
|
||||
{ name: 'zitareLists', syncName: 'lists' },
|
||||
{ name: 'zitareListTags' },
|
||||
],
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue