mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-17 15:29:41 +02:00
Pre-launch audit found 4 packages with zero workspace consumers
that were leftover from before the consolidation:
- @mana/cards-database (1475 LOC)
Pre-consolidation flashcard backend with its own Docker Compose
and Drizzle config. Replaced by the cards module in the unified
Mana app: apps/mana/apps/web/src/lib/modules/cards/. Now uses
Dexie + mana-sync against mana_platform.
- @mana/shared-api-client (1110 LOC)
Generic Go-style {data, error} REST client. Only reference left
was a string entry in shared-vite-config's noExternal list (not
a real import).
- @mana/shared-errors (1791 LOC)
NestJS-coupled exception filter package from before the Hono
migration. The Hono replacement (serviceErrorHandler in
@mana/shared-hono) ships in a separate commit. Result<T,E> +
ErrorCode enum bits had no consumers and weren't worth saving
standalone — if a need emerges they can grow organically.
- @mana/shared-splitscreen (694 LOC)
Side-by-side panel layout components. No code consumers; only
referenced from shared-vite-config noExternal and an old design
doc. The unified Mana app uses its own workbench scenes for
multi-pane layouts.
Verified zero code consumers via grep across .ts/.svelte/.json
before deletion. apps/api type-check stays at 0 errors after the
sweep, mana-auth tests still 19/19 passing.
Also clean packages/shared-vite-config/src/index.ts noExternal
list while we're here: drop the two deleted entries plus 8 ghost
packages (shared-feedback-ui/-service/-types, shared-help-ui/
-types/-content, shared-profile-ui, shared-subscription-ui) that
were referenced by name but never existed in packages/. List goes
from 22 → 12 entries.
Net: ~5070 LOC + workspace declarations removed.
Tracked as item #29 in docs/REFACTORING_AUDIT_2026_04.md.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
146 lines
3.8 KiB
TypeScript
146 lines
3.8 KiB
TypeScript
/**
|
|
* Shared Vite Configuration for Mana Web Apps
|
|
* Provides consistent SSR and optimization settings.
|
|
*/
|
|
|
|
import { execSync } from 'child_process';
|
|
import type { UserConfig, UserConfigExport } from 'vite';
|
|
|
|
/**
|
|
* Common Mana shared packages that need SSR configuration.
|
|
* These packages contain Svelte 5 runes or other client-side state.
|
|
*/
|
|
export const MANA_SHARED_PACKAGES = [
|
|
'@mana/shared-icons',
|
|
'@mana/shared-ui',
|
|
'@mana/shared-tailwind',
|
|
'@mana/shared-theme',
|
|
'@mana/shared-theme-ui',
|
|
'@mana/shared-auth',
|
|
'@mana/shared-auth-ui',
|
|
'@mana/shared-branding',
|
|
'@mana/shared-i18n',
|
|
'@mana/shared-utils',
|
|
'@mana/shared-tags',
|
|
'@mana/shared-stores',
|
|
] as const;
|
|
|
|
/**
|
|
* Get build-time defines for version tracking.
|
|
* Injects __BUILD_HASH__ and __BUILD_TIME__ as compile-time constants.
|
|
*/
|
|
export function getBuildDefines(): Record<string, string> {
|
|
let commitHash = 'dev';
|
|
try {
|
|
commitHash = execSync('git rev-parse --short HEAD').toString().trim();
|
|
} catch {
|
|
// fallback if not in a git repo
|
|
}
|
|
const buildTime = new Date().toISOString();
|
|
return {
|
|
__BUILD_HASH__: JSON.stringify(commitHash),
|
|
__BUILD_TIME__: JSON.stringify(buildTime),
|
|
};
|
|
}
|
|
|
|
export interface ViteConfigOptions {
|
|
/** Server port */
|
|
port: number;
|
|
/** Additional packages to include in noExternal (e.g., app-specific shared packages) */
|
|
additionalPackages?: string[];
|
|
/** Additional packages to exclude from optimization */
|
|
additionalExcludes?: string[];
|
|
/** Override default shared packages (if you need a subset) */
|
|
sharedPackages?: string[];
|
|
}
|
|
|
|
/**
|
|
* Get the SSR noExternal configuration for Mana apps.
|
|
*/
|
|
export function getSsrNoExternal(additionalPackages: string[] = []): string[] {
|
|
return [...MANA_SHARED_PACKAGES, ...additionalPackages];
|
|
}
|
|
|
|
/**
|
|
* Get the optimizeDeps exclude configuration for Mana apps.
|
|
*/
|
|
export function getOptimizeDepsExclude(additionalExcludes: string[] = []): string[] {
|
|
return [...MANA_SHARED_PACKAGES, ...additionalExcludes];
|
|
}
|
|
|
|
/**
|
|
* Create a base Vite configuration for Mana SvelteKit apps.
|
|
* Merge this with your app-specific configuration.
|
|
*/
|
|
export function createViteConfig(options: ViteConfigOptions): Partial<UserConfig> {
|
|
const { port, additionalPackages = [], additionalExcludes = [] } = options;
|
|
|
|
const packages = options.sharedPackages || [...MANA_SHARED_PACKAGES];
|
|
const noExternal = [...packages, ...additionalPackages];
|
|
const exclude = [...packages, ...additionalExcludes];
|
|
|
|
return {
|
|
server: {
|
|
port,
|
|
strictPort: true,
|
|
},
|
|
ssr: {
|
|
noExternal,
|
|
},
|
|
optimizeDeps: {
|
|
exclude,
|
|
},
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Merge base config with app-specific plugins and settings.
|
|
* Use this in your vite.config.ts:
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* import { sveltekit } from '@sveltejs/kit/vite';
|
|
* import tailwindcss from '@tailwindcss/vite';
|
|
* import { defineConfig } from 'vite';
|
|
* import { createViteConfig, mergeViteConfig } from '@mana/shared-vite-config';
|
|
*
|
|
* const baseConfig = createViteConfig({
|
|
* port: 5174,
|
|
* additionalPackages: ['@chat/shared'],
|
|
* });
|
|
*
|
|
* export default defineConfig(mergeViteConfig(baseConfig, {
|
|
* plugins: [tailwindcss(), sveltekit()],
|
|
* }));
|
|
* ```
|
|
*/
|
|
export function mergeViteConfig(
|
|
baseConfig: Partial<UserConfig>,
|
|
appConfig: Partial<UserConfig>
|
|
): UserConfigExport {
|
|
return {
|
|
...baseConfig,
|
|
...appConfig,
|
|
server: {
|
|
...baseConfig.server,
|
|
...appConfig.server,
|
|
},
|
|
ssr: {
|
|
...baseConfig.ssr,
|
|
...appConfig.ssr,
|
|
noExternal: [
|
|
...((baseConfig.ssr?.noExternal as string[]) || []),
|
|
...((appConfig.ssr?.noExternal as string[]) || []),
|
|
],
|
|
},
|
|
optimizeDeps: {
|
|
...baseConfig.optimizeDeps,
|
|
...appConfig.optimizeDeps,
|
|
exclude: [
|
|
...(baseConfig.optimizeDeps?.exclude || []),
|
|
...(appConfig.optimizeDeps?.exclude || []),
|
|
],
|
|
},
|
|
plugins: [...(baseConfig.plugins || []), ...(appConfig.plugins || [])],
|
|
};
|
|
}
|