create-fluxstack 1.10.1 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dockerignore +1 -2
- package/Dockerfile +8 -8
- package/LLMD/INDEX.md +64 -0
- package/LLMD/MAINTENANCE.md +197 -0
- package/LLMD/MIGRATION.md +156 -0
- package/LLMD/config/.gitkeep +1 -0
- package/LLMD/config/declarative-system.md +268 -0
- package/LLMD/config/environment-vars.md +327 -0
- package/LLMD/config/runtime-reload.md +401 -0
- package/LLMD/core/.gitkeep +1 -0
- package/LLMD/core/build-system.md +599 -0
- package/LLMD/core/framework-lifecycle.md +229 -0
- package/LLMD/core/plugin-system.md +451 -0
- package/LLMD/patterns/.gitkeep +1 -0
- package/LLMD/patterns/anti-patterns.md +297 -0
- package/LLMD/patterns/project-structure.md +264 -0
- package/LLMD/patterns/type-safety.md +440 -0
- package/LLMD/reference/.gitkeep +1 -0
- package/LLMD/reference/cli-commands.md +250 -0
- package/LLMD/reference/plugin-hooks.md +357 -0
- package/LLMD/reference/routing.md +39 -0
- package/LLMD/reference/troubleshooting.md +364 -0
- package/LLMD/resources/.gitkeep +1 -0
- package/LLMD/resources/controllers.md +465 -0
- package/LLMD/resources/live-components.md +703 -0
- package/LLMD/resources/live-rooms.md +482 -0
- package/LLMD/resources/live-upload.md +130 -0
- package/LLMD/resources/plugins-external.md +617 -0
- package/LLMD/resources/routes-eden.md +254 -0
- package/README.md +37 -17
- package/app/client/index.html +0 -1
- package/app/client/src/App.tsx +107 -150
- package/app/client/src/components/AppLayout.tsx +68 -0
- package/app/client/src/components/BackButton.tsx +13 -0
- package/app/client/src/components/DemoPage.tsx +20 -0
- package/app/client/src/components/LiveUploadWidget.tsx +204 -0
- package/app/client/src/lib/eden-api.ts +85 -60
- package/app/client/src/live/ChatDemo.tsx +107 -0
- package/app/client/src/live/CounterDemo.tsx +206 -0
- package/app/client/src/live/FormDemo.tsx +119 -0
- package/app/client/src/live/RoomChatDemo.tsx +242 -0
- package/app/client/src/live/UploadDemo.tsx +21 -0
- package/app/client/src/main.tsx +4 -1
- package/app/client/src/pages/ApiTestPage.tsx +108 -0
- package/app/client/src/pages/HomePage.tsx +76 -0
- package/app/server/app.ts +1 -4
- package/app/server/controllers/users.controller.ts +36 -44
- package/app/server/index.ts +25 -35
- package/app/server/live/LiveChat.ts +77 -0
- package/app/server/live/LiveCounter.ts +67 -0
- package/app/server/live/LiveForm.ts +63 -0
- package/app/server/live/LiveLocalCounter.ts +32 -0
- package/app/server/live/LiveRoomChat.ts +285 -0
- package/app/server/live/LiveUpload.ts +81 -0
- package/app/server/routes/index.ts +3 -1
- package/app/server/routes/room.routes.ts +117 -0
- package/app/server/routes/users.routes.ts +35 -27
- package/app/shared/types/index.ts +14 -2
- package/config/app.config.ts +2 -62
- package/config/client.config.ts +2 -95
- package/config/database.config.ts +2 -99
- package/config/fluxstack.config.ts +25 -45
- package/config/index.ts +57 -38
- package/config/monitoring.config.ts +2 -114
- package/config/plugins.config.ts +2 -80
- package/config/server.config.ts +2 -68
- package/config/services.config.ts +2 -130
- package/config/system/app.config.ts +29 -0
- package/config/system/build.config.ts +49 -0
- package/config/system/client.config.ts +68 -0
- package/config/system/database.config.ts +17 -0
- package/config/system/fluxstack.config.ts +114 -0
- package/config/{logger.config.ts → system/logger.config.ts} +3 -1
- package/config/system/monitoring.config.ts +114 -0
- package/config/system/plugins.config.ts +84 -0
- package/config/{runtime.config.ts → system/runtime.config.ts} +1 -1
- package/config/system/server.config.ts +68 -0
- package/config/system/services.config.ts +46 -0
- package/config/{system.config.ts → system/system.config.ts} +1 -1
- package/core/build/flux-plugins-generator.ts +325 -325
- package/core/build/index.ts +39 -27
- package/core/build/live-components-generator.ts +3 -3
- package/core/build/optimizer.ts +235 -235
- package/core/cli/command-registry.ts +6 -4
- package/core/cli/commands/build.ts +79 -0
- package/core/cli/commands/create.ts +54 -0
- package/core/cli/commands/dev.ts +101 -0
- package/core/cli/commands/help.ts +34 -0
- package/core/cli/commands/index.ts +34 -0
- package/core/cli/commands/make-plugin.ts +90 -0
- package/core/cli/commands/plugin-add.ts +197 -0
- package/core/cli/commands/plugin-deps.ts +2 -2
- package/core/cli/commands/plugin-list.ts +208 -0
- package/core/cli/commands/plugin-remove.ts +170 -0
- package/core/cli/generators/component.ts +769 -769
- package/core/cli/generators/controller.ts +1 -1
- package/core/cli/generators/index.ts +146 -146
- package/core/cli/generators/interactive.ts +227 -227
- package/core/cli/generators/plugin.ts +2 -2
- package/core/cli/generators/prompts.ts +82 -82
- package/core/cli/generators/route.ts +6 -6
- package/core/cli/generators/service.ts +2 -2
- package/core/cli/generators/template-engine.ts +4 -3
- package/core/cli/generators/types.ts +2 -2
- package/core/cli/generators/utils.ts +191 -191
- package/core/cli/index.ts +115 -686
- package/core/cli/plugin-discovery.ts +2 -2
- package/core/client/LiveComponentsProvider.tsx +60 -8
- package/core/client/api/eden.ts +183 -0
- package/core/client/api/index.ts +11 -0
- package/core/client/components/Live.tsx +104 -0
- package/core/client/fluxstack.ts +1 -9
- package/core/client/hooks/AdaptiveChunkSizer.ts +215 -215
- package/core/client/hooks/state-validator.ts +1 -1
- package/core/client/hooks/useAuth.ts +48 -48
- package/core/client/hooks/useChunkedUpload.ts +85 -35
- package/core/client/hooks/useLiveChunkedUpload.ts +87 -0
- package/core/client/hooks/useLiveComponent.ts +800 -0
- package/core/client/hooks/useLiveUpload.ts +71 -0
- package/core/client/hooks/useRoom.ts +409 -0
- package/core/client/hooks/useRoomProxy.ts +382 -0
- package/core/client/index.ts +17 -68
- package/core/client/standalone-entry.ts +8 -0
- package/core/client/standalone.ts +74 -53
- package/core/client/state/createStore.ts +192 -192
- package/core/client/state/index.ts +14 -14
- package/core/config/index.ts +70 -291
- package/core/config/schema.ts +42 -723
- package/core/framework/client.ts +131 -131
- package/core/framework/index.ts +7 -7
- package/core/framework/server.ts +47 -40
- package/core/framework/types.ts +2 -2
- package/core/index.ts +23 -4
- package/core/live/ComponentRegistry.ts +3 -3
- package/core/live/types.ts +77 -0
- package/core/plugins/built-in/index.ts +134 -134
- package/core/plugins/built-in/live-components/commands/create-live-component.ts +242 -1066
- package/core/plugins/built-in/live-components/index.ts +1 -1
- package/core/plugins/built-in/monitoring/index.ts +111 -47
- package/core/plugins/built-in/static/index.ts +1 -1
- package/core/plugins/built-in/swagger/index.ts +68 -265
- package/core/plugins/built-in/vite/index.ts +85 -185
- package/core/plugins/built-in/vite/vite-dev.ts +10 -16
- package/core/plugins/config.ts +9 -7
- package/core/plugins/dependency-manager.ts +31 -1
- package/core/plugins/discovery.ts +19 -7
- package/core/plugins/executor.ts +2 -2
- package/core/plugins/index.ts +203 -203
- package/core/plugins/manager.ts +27 -39
- package/core/plugins/module-resolver.ts +19 -8
- package/core/plugins/registry.ts +255 -19
- package/core/plugins/types.ts +20 -53
- package/core/server/framework.ts +66 -43
- package/core/server/index.ts +15 -15
- package/core/server/live/ComponentRegistry.ts +78 -71
- package/core/server/live/FileUploadManager.ts +23 -10
- package/core/server/live/LiveComponentPerformanceMonitor.ts +1 -1
- package/core/server/live/LiveRoomManager.ts +261 -0
- package/core/server/live/RoomEventBus.ts +234 -0
- package/core/server/live/RoomStateManager.ts +172 -0
- package/core/server/live/StateSignature.ts +643 -643
- package/core/server/live/WebSocketConnectionManager.ts +30 -19
- package/core/server/live/auto-generated-components.ts +21 -9
- package/core/server/live/index.ts +14 -0
- package/core/server/live/websocket-plugin.ts +214 -67
- package/core/server/middleware/elysia-helpers.ts +7 -2
- package/core/server/middleware/errorHandling.ts +1 -1
- package/core/server/middleware/index.ts +31 -31
- package/core/server/plugins/database.ts +180 -180
- package/core/server/plugins/static-files-plugin.ts +69 -69
- package/core/server/plugins/swagger.ts +1 -1
- package/core/server/rooms/RoomBroadcaster.ts +357 -0
- package/core/server/rooms/RoomSystem.ts +463 -0
- package/core/server/rooms/index.ts +13 -0
- package/core/server/services/BaseService.ts +1 -1
- package/core/server/services/ServiceContainer.ts +1 -1
- package/core/server/services/index.ts +8 -8
- package/core/templates/create-project.ts +12 -12
- package/core/testing/index.ts +9 -9
- package/core/testing/setup.ts +73 -73
- package/core/types/api.ts +168 -168
- package/core/types/build.ts +219 -219
- package/core/types/config.ts +56 -26
- package/core/types/index.ts +4 -4
- package/core/types/plugin.ts +107 -107
- package/core/types/types.ts +353 -14
- package/core/utils/build-logger.ts +324 -324
- package/core/utils/config-schema.ts +480 -480
- package/core/utils/env.ts +2 -8
- package/core/utils/errors/codes.ts +114 -114
- package/core/utils/errors/handlers.ts +36 -1
- package/core/utils/errors/index.ts +49 -5
- package/core/utils/errors/middleware.ts +113 -113
- package/core/utils/helpers.ts +6 -16
- package/core/utils/index.ts +17 -17
- package/core/utils/logger/colors.ts +114 -114
- package/core/utils/logger/config.ts +13 -9
- package/core/utils/logger/formatter.ts +82 -82
- package/core/utils/logger/group-logger.ts +101 -101
- package/core/utils/logger/index.ts +6 -1
- package/core/utils/logger/stack-trace.ts +3 -1
- package/core/utils/logger/startup-banner.ts +82 -82
- package/core/utils/logger/winston-logger.ts +152 -152
- package/core/utils/monitoring/index.ts +211 -211
- package/core/utils/sync-version.ts +66 -66
- package/core/utils/version.ts +1 -1
- package/create-fluxstack.ts +8 -7
- package/package.json +12 -13
- package/plugins/crypto-auth/cli/make-protected-route.command.ts +1 -1
- package/plugins/crypto-auth/client/CryptoAuthClient.ts +302 -302
- package/plugins/crypto-auth/client/components/index.ts +11 -11
- package/plugins/crypto-auth/client/index.ts +11 -11
- package/plugins/crypto-auth/config/index.ts +1 -1
- package/plugins/crypto-auth/index.ts +4 -4
- package/plugins/crypto-auth/package.json +65 -65
- package/plugins/crypto-auth/server/AuthMiddleware.ts +1 -1
- package/plugins/crypto-auth/server/CryptoAuthService.ts +185 -185
- package/plugins/crypto-auth/server/index.ts +21 -21
- package/plugins/crypto-auth/server/middlewares/cryptoAuthAdmin.ts +3 -3
- package/plugins/crypto-auth/server/middlewares/cryptoAuthOptional.ts +1 -1
- package/plugins/crypto-auth/server/middlewares/cryptoAuthPermissions.ts +2 -2
- package/plugins/crypto-auth/server/middlewares/cryptoAuthRequired.ts +2 -2
- package/plugins/crypto-auth/server/middlewares/helpers.ts +1 -1
- package/plugins/crypto-auth/server/middlewares/index.ts +22 -22
- package/tsconfig.api-strict.json +16 -0
- package/tsconfig.json +48 -52
- package/{app/client/tsconfig.node.json → tsconfig.node.json} +25 -25
- package/types/global.d.ts +29 -29
- package/types/vitest.d.ts +8 -8
- package/vite.config.ts +38 -62
- package/vitest.config.live.ts +10 -9
- package/vitest.config.ts +29 -17
- package/app/client/README.md +0 -69
- package/app/client/SIMPLIFICATION.md +0 -140
- package/app/client/frontend-only.ts +0 -12
- package/app/client/src/live/FileUploadExample.tsx +0 -359
- package/app/client/src/live/MinimalLiveClock.tsx +0 -47
- package/app/client/src/live/QuickUploadTest.tsx +0 -193
- package/app/client/tsconfig.app.json +0 -45
- package/app/client/tsconfig.json +0 -7
- package/app/client/zustand-setup.md +0 -65
- package/app/server/backend-only.ts +0 -18
- package/app/server/live/LiveClockComponent.ts +0 -215
- package/app/server/live/LiveFileUploadComponent.ts +0 -77
- package/app/server/routes/env-test.ts +0 -110
- package/core/client/hooks/index.ts +0 -7
- package/core/client/hooks/useHybridLiveComponent.ts +0 -685
- package/core/client/hooks/useTypedLiveComponent.ts +0 -133
- package/core/client/hooks/useWebSocket.ts +0 -361
- package/core/config/env.ts +0 -546
- package/core/config/loader.ts +0 -522
- package/core/config/runtime-config.ts +0 -327
- package/core/config/validator.ts +0 -540
- package/core/server/backend-entry.ts +0 -51
- package/core/server/standalone.ts +0 -106
- package/core/utils/regenerate-files.ts +0 -69
- package/fluxstack.config.ts +0 -354
|
@@ -0,0 +1,599 @@
|
|
|
1
|
+
# Build System
|
|
2
|
+
|
|
3
|
+
**Version:** 1.11.0 | **Updated:** 2025-02-08
|
|
4
|
+
|
|
5
|
+
## Quick Facts
|
|
6
|
+
|
|
7
|
+
- Builder class: `FluxStackBuilder` in `core/build/index.ts`
|
|
8
|
+
- Dev command: `bun run dev` (hot reload with `--watch`)
|
|
9
|
+
- Build command: `bun run build` (production optimized)
|
|
10
|
+
- Modes: Full-stack, Frontend-only, Backend-only
|
|
11
|
+
- Bundler: Bun native bundler
|
|
12
|
+
- Frontend: Vite for React development
|
|
13
|
+
- Docker: Multi-stage production images
|
|
14
|
+
|
|
15
|
+
## Development Mode
|
|
16
|
+
|
|
17
|
+
### Full-Stack Development
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
bun run dev
|
|
21
|
+
# or
|
|
22
|
+
bun run core/cli/index.ts dev
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**What Happens**:
|
|
26
|
+
1. Spawns `bun --watch app/server/index.ts`
|
|
27
|
+
2. Bun watches for file changes (hot reload)
|
|
28
|
+
3. Server starts on `BACKEND_PORT` (default: 3000)
|
|
29
|
+
4. Vite plugin starts frontend on `VITE_PORT` (default: 5173)
|
|
30
|
+
5. Backend proxies frontend requests to Vite
|
|
31
|
+
|
|
32
|
+
**Environment Variables**:
|
|
33
|
+
```bash
|
|
34
|
+
FLUXSTACK_MODE=full-stack
|
|
35
|
+
BACKEND_PORT=3000
|
|
36
|
+
FRONTEND_PORT=5173
|
|
37
|
+
NODE_ENV=development
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**File Watching**:
|
|
41
|
+
- Bun's `--watch` flag monitors all imported files
|
|
42
|
+
- Changes trigger automatic restart
|
|
43
|
+
- Fast reload (< 1 second typically)
|
|
44
|
+
- Preserves process state where possible
|
|
45
|
+
|
|
46
|
+
### Frontend-Only Mode
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
bun run dev --frontend-only
|
|
50
|
+
# or
|
|
51
|
+
bun run dev:frontend
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**What Happens**:
|
|
55
|
+
1. Spawns `bun --watch core/client/standalone-entry.ts`
|
|
56
|
+
2. Starts Vite dev server only
|
|
57
|
+
3. No backend server running
|
|
58
|
+
4. Useful for UI development
|
|
59
|
+
|
|
60
|
+
**Use Cases**:
|
|
61
|
+
- Pure frontend development
|
|
62
|
+
- Working with mock data
|
|
63
|
+
- UI component development
|
|
64
|
+
- Faster startup when backend not needed
|
|
65
|
+
|
|
66
|
+
### Backend-Only Mode
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
bun run dev --backend-only
|
|
70
|
+
# or
|
|
71
|
+
bun run dev:backend
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**What Happens**:
|
|
75
|
+
1. Spawns `bun --watch app/server/index.ts`
|
|
76
|
+
2. Starts Elysia server only
|
|
77
|
+
3. No Vite dev server
|
|
78
|
+
4. Vite plugin disabled
|
|
79
|
+
|
|
80
|
+
**Environment Variables**:
|
|
81
|
+
```bash
|
|
82
|
+
FLUXSTACK_MODE=backend-only
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Use Cases**:
|
|
86
|
+
- API development
|
|
87
|
+
- Testing backend logic
|
|
88
|
+
- Working with external frontend
|
|
89
|
+
- Faster startup when frontend not needed
|
|
90
|
+
|
|
91
|
+
### Custom Ports
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
bun run dev --port 4000 --frontend-port 8080
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Production Build
|
|
98
|
+
|
|
99
|
+
### Full Build
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
bun run build
|
|
103
|
+
# or
|
|
104
|
+
cross-env NODE_ENV=production bun run core/cli/index.ts build
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Build Process**:
|
|
108
|
+
|
|
109
|
+
```mermaid
|
|
110
|
+
graph TD
|
|
111
|
+
A[Start Build] --> B[Load Plugins]
|
|
112
|
+
B --> C[Execute onBeforeBuild hooks]
|
|
113
|
+
C --> D[Run Pre-build Checks]
|
|
114
|
+
D --> E[Validate Configuration]
|
|
115
|
+
E --> F{Clean Output?}
|
|
116
|
+
F -->|Yes| G[Clean dist/]
|
|
117
|
+
F -->|No| H[Execute onBuild hooks]
|
|
118
|
+
G --> H
|
|
119
|
+
H --> I[Build Client - Vite]
|
|
120
|
+
I --> J[Build Server - Bun]
|
|
121
|
+
J --> K{Build Success?}
|
|
122
|
+
K -->|No| L[Execute onBuildError hooks]
|
|
123
|
+
K -->|Yes| M[Process Assets]
|
|
124
|
+
M --> N[Execute onBuildAsset hooks]
|
|
125
|
+
N --> O{Optimize?}
|
|
126
|
+
O -->|Yes| P[Run Optimizer]
|
|
127
|
+
O -->|No| Q[Create Docker Files]
|
|
128
|
+
P --> Q
|
|
129
|
+
Q --> R[Generate Build Manifest]
|
|
130
|
+
R --> S[Execute onBuildComplete hooks]
|
|
131
|
+
S --> T[Print Build Summary]
|
|
132
|
+
L --> U[Return Build Error]
|
|
133
|
+
T --> V[Return Build Success]
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Output Structure**:
|
|
137
|
+
```
|
|
138
|
+
dist/
|
|
139
|
+
├── client/ # Vite build output
|
|
140
|
+
│ ├── assets/ # JS, CSS, images
|
|
141
|
+
│ ├── index.html # Entry HTML
|
|
142
|
+
│ └── ...
|
|
143
|
+
├── index.js # Bundled server
|
|
144
|
+
├── package.json # Dependencies for Docker
|
|
145
|
+
├── .env # Production environment
|
|
146
|
+
├── Dockerfile # Production Docker image
|
|
147
|
+
├── docker-compose.yml # Docker Compose config
|
|
148
|
+
└── .dockerignore # Docker ignore rules
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Frontend-Only Build
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
bun run build --frontend-only
|
|
155
|
+
# or
|
|
156
|
+
bun run build:frontend
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**What Happens**:
|
|
160
|
+
1. Runs Vite build only
|
|
161
|
+
2. Outputs to `dist/client/`
|
|
162
|
+
3. Optimized for production (minified, tree-shaken)
|
|
163
|
+
4. No server bundle created
|
|
164
|
+
|
|
165
|
+
**Use Cases**:
|
|
166
|
+
- Static site deployment
|
|
167
|
+
- CDN hosting
|
|
168
|
+
- Separate frontend deployment
|
|
169
|
+
|
|
170
|
+
### Backend-Only Build
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
bun run build --backend-only
|
|
174
|
+
# or
|
|
175
|
+
bun run build:backend
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**What Happens**:
|
|
179
|
+
1. Runs Bun bundler only
|
|
180
|
+
2. Bundles `app/server/index.ts` to `dist/index.js`
|
|
181
|
+
3. No frontend build
|
|
182
|
+
4. Includes all server dependencies
|
|
183
|
+
|
|
184
|
+
**Use Cases**:
|
|
185
|
+
- API-only deployment
|
|
186
|
+
- Microservice deployment
|
|
187
|
+
- Separate backend deployment
|
|
188
|
+
|
|
189
|
+
## Build Configuration
|
|
190
|
+
|
|
191
|
+
### Build Options
|
|
192
|
+
|
|
193
|
+
From `config/system/build.config.ts`:
|
|
194
|
+
|
|
195
|
+
```typescript
|
|
196
|
+
{
|
|
197
|
+
target: 'bun', // Build target (bun, node)
|
|
198
|
+
outDir: 'dist', // Output directory
|
|
199
|
+
mode: 'production', // Build mode
|
|
200
|
+
sourceMaps: false, // Generate source maps
|
|
201
|
+
minify: true, // Minify output
|
|
202
|
+
clean: true, // Clean output before build
|
|
203
|
+
optimize: true, // Run optimizer
|
|
204
|
+
external: [] // External dependencies
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Client Build Options
|
|
209
|
+
|
|
210
|
+
From `config/system/client.config.ts`:
|
|
211
|
+
|
|
212
|
+
```typescript
|
|
213
|
+
{
|
|
214
|
+
outDir: 'dist/client', // Client output directory
|
|
215
|
+
sourceMaps: false, // Generate source maps
|
|
216
|
+
minify: true, // Minify output
|
|
217
|
+
treeshake: true, // Remove unused code
|
|
218
|
+
compress: true // Compress assets
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### Optimization Options
|
|
223
|
+
|
|
224
|
+
From `config/system/optimization.config.ts`:
|
|
225
|
+
|
|
226
|
+
```typescript
|
|
227
|
+
{
|
|
228
|
+
minify: true, // Minify JS/CSS
|
|
229
|
+
treeshake: true, // Remove dead code
|
|
230
|
+
compress: true, // Compress output
|
|
231
|
+
removeUnusedCSS: false, // Remove unused CSS
|
|
232
|
+
optimizeImages: false, // Optimize images
|
|
233
|
+
bundleAnalyzer: false // Generate bundle analysis
|
|
234
|
+
}
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
## Bundler
|
|
238
|
+
|
|
239
|
+
### Bun Bundler
|
|
240
|
+
|
|
241
|
+
**Features**:
|
|
242
|
+
- Native Bun bundler (fast)
|
|
243
|
+
- Supports TypeScript natively
|
|
244
|
+
- Tree-shaking enabled
|
|
245
|
+
- Minification built-in
|
|
246
|
+
- Source maps optional
|
|
247
|
+
|
|
248
|
+
**Server Bundling**:
|
|
249
|
+
```typescript
|
|
250
|
+
await bundler.bundleServer("app/server/index.ts")
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
**Output**:
|
|
254
|
+
- Single `dist/index.js` file
|
|
255
|
+
- All dependencies bundled
|
|
256
|
+
- External packages excluded (if configured)
|
|
257
|
+
|
|
258
|
+
### Vite Bundler
|
|
259
|
+
|
|
260
|
+
**Features**:
|
|
261
|
+
- React Fast Refresh
|
|
262
|
+
- Hot Module Replacement (HMR)
|
|
263
|
+
- CSS preprocessing
|
|
264
|
+
- Asset optimization
|
|
265
|
+
- Code splitting
|
|
266
|
+
|
|
267
|
+
**Client Bundling**:
|
|
268
|
+
```typescript
|
|
269
|
+
await bundler.bundleClient({
|
|
270
|
+
env: {
|
|
271
|
+
VITE_BUILD_OUTDIR: 'dist/client',
|
|
272
|
+
VITE_BUILD_SOURCEMAPS: 'false'
|
|
273
|
+
}
|
|
274
|
+
})
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
**Output**:
|
|
278
|
+
- `dist/client/index.html`
|
|
279
|
+
- `dist/client/assets/*.js` (code-split chunks)
|
|
280
|
+
- `dist/client/assets/*.css`
|
|
281
|
+
- Optimized images and fonts
|
|
282
|
+
|
|
283
|
+
## Optimizer
|
|
284
|
+
|
|
285
|
+
### Optimization Process
|
|
286
|
+
|
|
287
|
+
When `optimize: true`:
|
|
288
|
+
|
|
289
|
+
1. **Minification**: Compress JS/CSS
|
|
290
|
+
2. **Tree-shaking**: Remove unused code
|
|
291
|
+
3. **Compression**: Gzip/Brotli compression
|
|
292
|
+
4. **CSS Optimization**: Remove unused CSS (if enabled)
|
|
293
|
+
5. **Image Optimization**: Compress images (if enabled)
|
|
294
|
+
|
|
295
|
+
**Metrics Tracked**:
|
|
296
|
+
```typescript
|
|
297
|
+
{
|
|
298
|
+
originalSize: number, // Size before optimization
|
|
299
|
+
optimizedSize: number, // Size after optimization
|
|
300
|
+
compressionRatio: number, // Percentage saved
|
|
301
|
+
duration: number // Time taken
|
|
302
|
+
}
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
## Docker Configuration
|
|
306
|
+
|
|
307
|
+
### Dockerfile
|
|
308
|
+
|
|
309
|
+
Generated in `dist/Dockerfile`:
|
|
310
|
+
|
|
311
|
+
```dockerfile
|
|
312
|
+
FROM oven/bun:1.3-alpine AS production
|
|
313
|
+
|
|
314
|
+
WORKDIR /app
|
|
315
|
+
|
|
316
|
+
# Copy package.json first for better caching
|
|
317
|
+
COPY package.json ./
|
|
318
|
+
|
|
319
|
+
# Install dependencies
|
|
320
|
+
RUN bun install --frozen-lockfile
|
|
321
|
+
|
|
322
|
+
# Copy built application
|
|
323
|
+
COPY . .
|
|
324
|
+
|
|
325
|
+
# Create non-root user
|
|
326
|
+
RUN addgroup -g 1001 -S fluxstack && \
|
|
327
|
+
adduser -S fluxstack -u 1001
|
|
328
|
+
|
|
329
|
+
# Set permissions
|
|
330
|
+
RUN chown -R fluxstack:fluxstack /app
|
|
331
|
+
USER fluxstack
|
|
332
|
+
|
|
333
|
+
# Environment variables
|
|
334
|
+
ENV NODE_ENV=production
|
|
335
|
+
ENV PORT=3000
|
|
336
|
+
|
|
337
|
+
# Health check
|
|
338
|
+
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
|
339
|
+
CMD bun run -e "fetch('http://localhost:3000/api/health').then(r => r.ok ? process.exit(0) : process.exit(1))" || exit 1
|
|
340
|
+
|
|
341
|
+
# Expose port
|
|
342
|
+
EXPOSE 3000
|
|
343
|
+
|
|
344
|
+
# Start the application
|
|
345
|
+
CMD ["bun", "run", "index.js"]
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
**Features**:
|
|
349
|
+
- Multi-stage build (production only)
|
|
350
|
+
- Alpine Linux (small image size)
|
|
351
|
+
- Non-root user (security)
|
|
352
|
+
- Health check (container orchestration)
|
|
353
|
+
- Frozen lockfile (reproducible builds)
|
|
354
|
+
|
|
355
|
+
### docker-compose.yml
|
|
356
|
+
|
|
357
|
+
Generated in `dist/docker-compose.yml`:
|
|
358
|
+
|
|
359
|
+
```yaml
|
|
360
|
+
version: '3.8'
|
|
361
|
+
|
|
362
|
+
services:
|
|
363
|
+
fluxstack:
|
|
364
|
+
build: .
|
|
365
|
+
ports:
|
|
366
|
+
- "3000:3000"
|
|
367
|
+
environment:
|
|
368
|
+
- NODE_ENV=production
|
|
369
|
+
- PORT=3000
|
|
370
|
+
restart: unless-stopped
|
|
371
|
+
healthcheck:
|
|
372
|
+
test: ["CMD", "bun", "run", "-e", "fetch('http://localhost:3000/api/health').then(r => r.ok ? process.exit(0) : process.exit(1))"]
|
|
373
|
+
interval: 30s
|
|
374
|
+
timeout: 3s
|
|
375
|
+
retries: 3
|
|
376
|
+
deploy:
|
|
377
|
+
resources:
|
|
378
|
+
limits:
|
|
379
|
+
memory: 512M
|
|
380
|
+
reservations:
|
|
381
|
+
memory: 256M
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
**Features**:
|
|
385
|
+
- Resource limits (memory)
|
|
386
|
+
- Health checks
|
|
387
|
+
- Restart policy
|
|
388
|
+
- Port mapping
|
|
389
|
+
|
|
390
|
+
### .dockerignore
|
|
391
|
+
|
|
392
|
+
Generated in `dist/.dockerignore`:
|
|
393
|
+
|
|
394
|
+
```
|
|
395
|
+
node_modules
|
|
396
|
+
.git
|
|
397
|
+
.gitignore
|
|
398
|
+
README.md
|
|
399
|
+
.env.local
|
|
400
|
+
.env.*.local
|
|
401
|
+
*.log
|
|
402
|
+
coverage
|
|
403
|
+
.vscode
|
|
404
|
+
.idea
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
**Purpose**: Reduce Docker context size and build time
|
|
408
|
+
|
|
409
|
+
## Build Hooks
|
|
410
|
+
|
|
411
|
+
Plugins can hook into build process:
|
|
412
|
+
|
|
413
|
+
### onBeforeBuild
|
|
414
|
+
|
|
415
|
+
Execute before build starts:
|
|
416
|
+
```typescript
|
|
417
|
+
onBeforeBuild: async (context: BuildContext) => {
|
|
418
|
+
// Validate environment
|
|
419
|
+
// Generate code
|
|
420
|
+
// Clean directories
|
|
421
|
+
}
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
### onBuild
|
|
425
|
+
|
|
426
|
+
Execute during build:
|
|
427
|
+
```typescript
|
|
428
|
+
onBuild: async (context: BuildContext) => {
|
|
429
|
+
// Custom build steps
|
|
430
|
+
// Generate assets
|
|
431
|
+
// Transform code
|
|
432
|
+
}
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
### onBuildAsset
|
|
436
|
+
|
|
437
|
+
Execute for each built asset:
|
|
438
|
+
```typescript
|
|
439
|
+
onBuildAsset: async (context: BuildAssetContext) => {
|
|
440
|
+
// context.assetPath - file path
|
|
441
|
+
// context.assetType - 'js' | 'css' | 'html' | 'image' | 'font' | 'other'
|
|
442
|
+
// context.size - file size
|
|
443
|
+
|
|
444
|
+
// Optimize asset
|
|
445
|
+
// Upload to CDN
|
|
446
|
+
// Generate metadata
|
|
447
|
+
}
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
### onBuildComplete
|
|
451
|
+
|
|
452
|
+
Execute after successful build:
|
|
453
|
+
```typescript
|
|
454
|
+
onBuildComplete: async (context: BuildContext) => {
|
|
455
|
+
// Upload artifacts
|
|
456
|
+
// Send notifications
|
|
457
|
+
// Update deployment
|
|
458
|
+
}
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
### onBuildError
|
|
462
|
+
|
|
463
|
+
Execute on build failure:
|
|
464
|
+
```typescript
|
|
465
|
+
onBuildError: async (context: BuildErrorContext) => {
|
|
466
|
+
// context.error - the error
|
|
467
|
+
// context.file - file that caused error (if known)
|
|
468
|
+
// context.line - line number (if known)
|
|
469
|
+
|
|
470
|
+
// Log error
|
|
471
|
+
// Send alert
|
|
472
|
+
// Cleanup
|
|
473
|
+
}
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
## Build Manifest
|
|
477
|
+
|
|
478
|
+
Generated in `dist/manifest.json`:
|
|
479
|
+
|
|
480
|
+
```json
|
|
481
|
+
{
|
|
482
|
+
"version": "1.11.0",
|
|
483
|
+
"timestamp": "2025-02-08T12:00:00.000Z",
|
|
484
|
+
"target": "bun",
|
|
485
|
+
"mode": "production",
|
|
486
|
+
"client": {
|
|
487
|
+
"entryPoints": [],
|
|
488
|
+
"chunks": [],
|
|
489
|
+
"assets": ["index.html", "assets/index-abc123.js"],
|
|
490
|
+
"publicPath": "/"
|
|
491
|
+
},
|
|
492
|
+
"server": {
|
|
493
|
+
"entryPoint": "index.js",
|
|
494
|
+
"dependencies": [],
|
|
495
|
+
"externals": []
|
|
496
|
+
},
|
|
497
|
+
"optimization": {
|
|
498
|
+
"minified": true,
|
|
499
|
+
"treeshaken": true,
|
|
500
|
+
"compressed": true,
|
|
501
|
+
"originalSize": 1048576,
|
|
502
|
+
"optimizedSize": 524288,
|
|
503
|
+
"compressionRatio": 50.0
|
|
504
|
+
},
|
|
505
|
+
"metrics": {
|
|
506
|
+
"buildTime": 5000,
|
|
507
|
+
"bundleTime": 3000,
|
|
508
|
+
"optimizationTime": 1000,
|
|
509
|
+
"totalSize": 524288,
|
|
510
|
+
"gzippedSize": 262144,
|
|
511
|
+
"chunkCount": 5,
|
|
512
|
+
"assetCount": 10
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
## Pre-build Checks
|
|
518
|
+
|
|
519
|
+
Automatic checks before build:
|
|
520
|
+
|
|
521
|
+
1. **Version Sync**: Sync version across package.json files
|
|
522
|
+
2. **Configuration Validation**: Ensure valid build config
|
|
523
|
+
3. **Dependency Check**: Verify all dependencies installed
|
|
524
|
+
|
|
525
|
+
## Build Summary
|
|
526
|
+
|
|
527
|
+
After successful build, displays:
|
|
528
|
+
|
|
529
|
+
```
|
|
530
|
+
✓ Build Completed Successfully
|
|
531
|
+
|
|
532
|
+
Build Time: 5.2s
|
|
533
|
+
Output Directory: dist
|
|
534
|
+
Client Assets: 10
|
|
535
|
+
Total Size: 512 KB
|
|
536
|
+
Compression: 50.00%
|
|
537
|
+
Docker Ready: ✓
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
## Deployment
|
|
541
|
+
|
|
542
|
+
### Docker Deployment
|
|
543
|
+
|
|
544
|
+
```bash
|
|
545
|
+
cd dist
|
|
546
|
+
docker build -t fluxstack-app .
|
|
547
|
+
docker run -p 3000:3000 fluxstack-app
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
Or with Docker Compose:
|
|
551
|
+
```bash
|
|
552
|
+
cd dist
|
|
553
|
+
docker-compose up -d
|
|
554
|
+
```
|
|
555
|
+
|
|
556
|
+
### Direct Deployment
|
|
557
|
+
|
|
558
|
+
```bash
|
|
559
|
+
cd dist
|
|
560
|
+
bun install --production
|
|
561
|
+
bun run index.js
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
## Performance Tips
|
|
565
|
+
|
|
566
|
+
1. **Use --frontend-only**: Faster builds when backend unchanged
|
|
567
|
+
2. **Use --backend-only**: Faster builds when frontend unchanged
|
|
568
|
+
3. **Disable Source Maps**: Faster production builds
|
|
569
|
+
4. **Enable Optimization**: Smaller bundle sizes
|
|
570
|
+
5. **Use Docker**: Consistent deployment environment
|
|
571
|
+
|
|
572
|
+
## Troubleshooting
|
|
573
|
+
|
|
574
|
+
### Build Fails
|
|
575
|
+
|
|
576
|
+
- Check `onBuildError` hook logs
|
|
577
|
+
- Verify all dependencies installed
|
|
578
|
+
- Check TypeScript errors
|
|
579
|
+
- Validate configuration
|
|
580
|
+
|
|
581
|
+
### Large Bundle Size
|
|
582
|
+
|
|
583
|
+
- Enable tree-shaking
|
|
584
|
+
- Check for duplicate dependencies
|
|
585
|
+
- Use bundle analyzer
|
|
586
|
+
- Externalize large dependencies
|
|
587
|
+
|
|
588
|
+
### Slow Builds
|
|
589
|
+
|
|
590
|
+
- Disable source maps
|
|
591
|
+
- Use incremental builds
|
|
592
|
+
- Check plugin hooks (may be slow)
|
|
593
|
+
- Reduce optimization level
|
|
594
|
+
|
|
595
|
+
## Related
|
|
596
|
+
|
|
597
|
+
- [Framework Lifecycle](./framework-lifecycle.md) - Build hooks integration
|
|
598
|
+
- [Plugin System](./plugin-system.md) - Build hook details
|
|
599
|
+
- [CLI Commands](../reference/cli-commands.md) - Build command options
|