@@ -40,6 +40,55 @@ function preloadCriticalChunks(): Plugin {
4040// auto-mount slug. Override with VITE_BASE_PATH only if deploying standalone.
4141const basePath = process . env . VITE_BASE_PATH || '/console/' ;
4242
43+ // On Vercel/CI we skip the compression and visualizer plugins because the
44+ // Vercel CDN handles gzip/brotli automatically and bundle analysis is not
45+ // needed during CI builds. This reduces peak memory by ~1.5 GB.
46+ //
47+ // Workspace src/ aliases are kept in ALL environments (dev + CI) so that
48+ // plugin side-effect imports (ComponentRegistry.register) resolve correctly.
49+ // Without them, Vite would import pre-built dist/ bundles where the
50+ // singleton ComponentRegistry can get duplicated across chunks, causing
51+ // "Unknown component type" errors at runtime.
52+ const isCI = ! ! ( process . env . VERCEL || process . env . CI ) ;
53+
54+ // Workspace src/ aliases — gives instant HMR in dev and ensures correct
55+ // side-effect resolution (plugin registrations) in production builds.
56+ const workspaceAliases : Record < string , string > = {
57+ '@object-ui/components' : path . resolve ( __dirname , '../../packages/components/src' ) ,
58+ '@object-ui/core' : path . resolve ( __dirname , '../../packages/core/src' ) ,
59+ '@object-ui/fields' : path . resolve ( __dirname , '../../packages/fields/src' ) ,
60+ '@object-ui/layout' : path . resolve ( __dirname , '../../packages/layout/src' ) ,
61+ '@object-ui/plugin-dashboard' : path . resolve ( __dirname , '../../packages/plugin-dashboard/src' ) ,
62+ '@object-ui/plugin-report' : path . resolve ( __dirname , '../../packages/plugin-report/src' ) ,
63+ '@object-ui/plugin-form' : path . resolve ( __dirname , '../../packages/plugin-form/src' ) ,
64+ '@object-ui/plugin-grid' : path . resolve ( __dirname , '../../packages/plugin-grid/src' ) ,
65+ '@object-ui/react' : path . resolve ( __dirname , '../../packages/react/src' ) ,
66+ '@object-ui/types' : path . resolve ( __dirname , '../../packages/types/src' ) ,
67+ '@object-ui/data-objectstack' : path . resolve ( __dirname , '../../packages/data-objectstack/src' ) ,
68+ '@object-ui/auth' : path . resolve ( __dirname , '../../packages/auth/src' ) ,
69+ '@object-ui/permissions' : path . resolve ( __dirname , '../../packages/permissions/src' ) ,
70+ '@object-ui/collaboration' : path . resolve ( __dirname , '../../packages/collaboration/src' ) ,
71+ '@object-ui/tenant' : path . resolve ( __dirname , '../../packages/tenant/src' ) ,
72+ '@object-ui/i18n' : path . resolve ( __dirname , '../../packages/i18n/src' ) ,
73+ '@object-ui/mobile' : path . resolve ( __dirname , '../../packages/mobile/src' ) ,
74+
75+ // Plugin Aliases
76+ '@object-ui/plugin-aggrid' : path . resolve ( __dirname , '../../packages/plugin-aggrid/src' ) ,
77+ '@object-ui/plugin-calendar' : path . resolve ( __dirname , '../../packages/plugin-calendar/src' ) ,
78+ '@object-ui/plugin-charts' : path . resolve ( __dirname , '../../packages/plugin-charts/src' ) ,
79+ '@object-ui/plugin-chatbot' : path . resolve ( __dirname , '../../packages/plugin-chatbot/src' ) ,
80+ '@object-ui/plugin-detail' : path . resolve ( __dirname , '../../packages/plugin-detail/src' ) ,
81+ '@object-ui/plugin-editor' : path . resolve ( __dirname , '../../packages/plugin-editor/src' ) ,
82+ '@object-ui/plugin-gantt' : path . resolve ( __dirname , '../../packages/plugin-gantt/src' ) ,
83+ '@object-ui/plugin-kanban' : path . resolve ( __dirname , '../../packages/plugin-kanban/src' ) ,
84+ '@object-ui/plugin-list' : path . resolve ( __dirname , '../../packages/plugin-list/src' ) ,
85+ '@object-ui/plugin-map' : path . resolve ( __dirname , '../../packages/plugin-map/src' ) ,
86+ '@object-ui/plugin-markdown' : path . resolve ( __dirname , '../../packages/plugin-markdown/src' ) ,
87+ '@object-ui/plugin-timeline' : path . resolve ( __dirname , '../../packages/plugin-timeline/src' ) ,
88+ '@object-ui/plugin-view' : path . resolve ( __dirname , '../../packages/plugin-view/src' ) ,
89+ '@object-ui/plugin-designer' : path . resolve ( __dirname , '../../packages/plugin-designer/src' ) ,
90+ } ;
91+
4392// https://vitejs.dev/config/
4493export default defineConfig ( {
4594 base : basePath ,
@@ -54,63 +103,30 @@ export default defineConfig({
54103 react ( ) ,
55104 // Inject <link rel="modulepreload"> for critical chunks
56105 preloadCriticalChunks ( ) ,
57- // Gzip compression for production assets
58- compression ( {
59- algorithm : 'gzip' ,
60- exclude : [ / \. ( b r ) $ / , / \. ( g z ) $ / ] ,
61- threshold : 1024 ,
62- } ) ,
63- // Brotli compression for modern browsers
64- compression ( {
65- algorithm : 'brotliCompress' ,
66- exclude : [ / \. ( b r ) $ / , / \. ( g z ) $ / ] ,
67- threshold : 1024 ,
68- } ) ,
69- // Bundle analysis (generates stats.html in dist/)
70- visualizer ( {
71- filename : 'dist/stats.html' ,
72- gzipSize : true ,
73- brotliSize : true ,
74- open : false ,
75- } ) ,
106+ // Gzip/Brotli compression & bundle visualizer are skipped on Vercel/CI to
107+ // reduce memory usage — Vercel's CDN compresses assets automatically.
108+ ...( ! isCI ? [
109+ compression ( {
110+ algorithm : 'gzip' ,
111+ exclude : [ / \. ( b r ) $ / , / \. ( g z ) $ / ] ,
112+ threshold : 1024 ,
113+ } ) ,
114+ compression ( {
115+ algorithm : 'brotliCompress' ,
116+ exclude : [ / \. ( b r ) $ / , / \. ( g z ) $ / ] ,
117+ threshold : 1024 ,
118+ } ) ,
119+ visualizer ( {
120+ filename : 'dist/stats.html' ,
121+ gzipSize : true ,
122+ brotliSize : true ,
123+ open : false ,
124+ } ) ,
125+ ] : [ ] ) ,
76126 ] ,
77127 resolve : {
78128 extensions : [ '.mjs' , '.js' , '.mts' , '.ts' , '.jsx' , '.tsx' , '.json' ] ,
79- alias : {
80- '@object-ui/components' : path . resolve ( __dirname , '../../packages/components/src' ) ,
81- '@object-ui/core' : path . resolve ( __dirname , '../../packages/core/src' ) ,
82- '@object-ui/fields' : path . resolve ( __dirname , '../../packages/fields/src' ) ,
83- '@object-ui/layout' : path . resolve ( __dirname , '../../packages/layout/src' ) ,
84- '@object-ui/plugin-dashboard' : path . resolve ( __dirname , '../../packages/plugin-dashboard/src' ) ,
85- '@object-ui/plugin-report' : path . resolve ( __dirname , '../../packages/plugin-report/src' ) ,
86- '@object-ui/plugin-form' : path . resolve ( __dirname , '../../packages/plugin-form/src' ) ,
87- '@object-ui/plugin-grid' : path . resolve ( __dirname , '../../packages/plugin-grid/src' ) ,
88- '@object-ui/react' : path . resolve ( __dirname , '../../packages/react/src' ) ,
89- '@object-ui/types' : path . resolve ( __dirname , '../../packages/types/src' ) ,
90- '@object-ui/data-objectstack' : path . resolve ( __dirname , '../../packages/data-objectstack/src' ) ,
91- '@object-ui/auth' : path . resolve ( __dirname , '../../packages/auth/src' ) ,
92- '@object-ui/permissions' : path . resolve ( __dirname , '../../packages/permissions/src' ) ,
93- '@object-ui/collaboration' : path . resolve ( __dirname , '../../packages/collaboration/src' ) ,
94- '@object-ui/tenant' : path . resolve ( __dirname , '../../packages/tenant/src' ) ,
95- '@object-ui/i18n' : path . resolve ( __dirname , '../../packages/i18n/src' ) ,
96-
97- // Missing Plugin Aliases
98- '@object-ui/plugin-aggrid' : path . resolve ( __dirname , '../../packages/plugin-aggrid/src' ) ,
99- '@object-ui/plugin-calendar' : path . resolve ( __dirname , '../../packages/plugin-calendar/src' ) ,
100- '@object-ui/plugin-charts' : path . resolve ( __dirname , '../../packages/plugin-charts/src' ) ,
101- '@object-ui/plugin-chatbot' : path . resolve ( __dirname , '../../packages/plugin-chatbot/src' ) ,
102- '@object-ui/plugin-detail' : path . resolve ( __dirname , '../../packages/plugin-detail/src' ) ,
103- '@object-ui/plugin-editor' : path . resolve ( __dirname , '../../packages/plugin-editor/src' ) ,
104- '@object-ui/plugin-gantt' : path . resolve ( __dirname , '../../packages/plugin-gantt/src' ) ,
105- '@object-ui/plugin-kanban' : path . resolve ( __dirname , '../../packages/plugin-kanban/src' ) ,
106- '@object-ui/plugin-list' : path . resolve ( __dirname , '../../packages/plugin-list/src' ) ,
107- '@object-ui/plugin-map' : path . resolve ( __dirname , '../../packages/plugin-map/src' ) ,
108- '@object-ui/plugin-markdown' : path . resolve ( __dirname , '../../packages/plugin-markdown/src' ) ,
109- '@object-ui/plugin-timeline' : path . resolve ( __dirname , '../../packages/plugin-timeline/src' ) ,
110- '@object-ui/plugin-view' : path . resolve ( __dirname , '../../packages/plugin-view/src' ) ,
111-
112-
113- } ,
129+ alias : workspaceAliases ,
114130 } ,
115131 optimizeDeps : {
116132 include : [
0 commit comments