create-fluxstack 1.9.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.
Files changed (259) hide show
  1. package/.dockerignore +1 -2
  2. package/Dockerfile +8 -8
  3. package/LIVE_COMPONENTS_REVIEW.md +781 -0
  4. package/LLMD/INDEX.md +64 -0
  5. package/LLMD/MAINTENANCE.md +197 -0
  6. package/LLMD/MIGRATION.md +156 -0
  7. package/LLMD/config/.gitkeep +1 -0
  8. package/LLMD/config/declarative-system.md +268 -0
  9. package/LLMD/config/environment-vars.md +327 -0
  10. package/LLMD/config/runtime-reload.md +401 -0
  11. package/LLMD/core/.gitkeep +1 -0
  12. package/LLMD/core/build-system.md +599 -0
  13. package/LLMD/core/framework-lifecycle.md +229 -0
  14. package/LLMD/core/plugin-system.md +451 -0
  15. package/LLMD/patterns/.gitkeep +1 -0
  16. package/LLMD/patterns/anti-patterns.md +297 -0
  17. package/LLMD/patterns/project-structure.md +264 -0
  18. package/LLMD/patterns/type-safety.md +440 -0
  19. package/LLMD/reference/.gitkeep +1 -0
  20. package/LLMD/reference/cli-commands.md +250 -0
  21. package/LLMD/reference/plugin-hooks.md +357 -0
  22. package/LLMD/reference/routing.md +39 -0
  23. package/LLMD/reference/troubleshooting.md +364 -0
  24. package/LLMD/resources/.gitkeep +1 -0
  25. package/LLMD/resources/controllers.md +465 -0
  26. package/LLMD/resources/live-components.md +703 -0
  27. package/LLMD/resources/live-rooms.md +482 -0
  28. package/LLMD/resources/live-upload.md +130 -0
  29. package/LLMD/resources/plugins-external.md +617 -0
  30. package/LLMD/resources/routes-eden.md +254 -0
  31. package/README.md +37 -17
  32. package/app/client/index.html +0 -1
  33. package/app/client/src/App.tsx +109 -156
  34. package/app/client/src/components/AppLayout.tsx +68 -0
  35. package/app/client/src/components/BackButton.tsx +13 -0
  36. package/app/client/src/components/DemoPage.tsx +20 -0
  37. package/app/client/src/components/LiveUploadWidget.tsx +204 -0
  38. package/app/client/src/lib/eden-api.ts +85 -65
  39. package/app/client/src/live/ChatDemo.tsx +107 -0
  40. package/app/client/src/live/CounterDemo.tsx +206 -0
  41. package/app/client/src/live/FormDemo.tsx +119 -0
  42. package/app/client/src/live/RoomChatDemo.tsx +242 -0
  43. package/app/client/src/live/UploadDemo.tsx +21 -0
  44. package/app/client/src/main.tsx +13 -10
  45. package/app/client/src/pages/ApiTestPage.tsx +108 -0
  46. package/app/client/src/pages/HomePage.tsx +76 -0
  47. package/app/client/src/vite-env.d.ts +1 -1
  48. package/app/server/app.ts +1 -4
  49. package/app/server/controllers/users.controller.ts +36 -44
  50. package/app/server/index.ts +24 -107
  51. package/app/server/live/LiveChat.ts +77 -0
  52. package/app/server/live/LiveCounter.ts +67 -0
  53. package/app/server/live/LiveForm.ts +63 -0
  54. package/app/server/live/LiveLocalCounter.ts +32 -0
  55. package/app/server/live/LiveRoomChat.ts +285 -0
  56. package/app/server/live/LiveUpload.ts +81 -0
  57. package/app/server/live/register-components.ts +19 -19
  58. package/app/server/routes/index.ts +3 -1
  59. package/app/server/routes/room.routes.ts +117 -0
  60. package/app/server/routes/users.routes.ts +35 -27
  61. package/app/shared/types/index.ts +14 -2
  62. package/config/app.config.ts +2 -62
  63. package/config/client.config.ts +2 -95
  64. package/config/database.config.ts +2 -99
  65. package/config/fluxstack.config.ts +25 -45
  66. package/config/index.ts +57 -38
  67. package/config/monitoring.config.ts +2 -114
  68. package/config/plugins.config.ts +2 -80
  69. package/config/server.config.ts +2 -68
  70. package/config/services.config.ts +2 -130
  71. package/config/system/app.config.ts +29 -0
  72. package/config/system/build.config.ts +49 -0
  73. package/config/system/client.config.ts +68 -0
  74. package/config/system/database.config.ts +17 -0
  75. package/config/system/fluxstack.config.ts +114 -0
  76. package/config/{logger.config.ts → system/logger.config.ts} +3 -1
  77. package/config/system/monitoring.config.ts +114 -0
  78. package/config/system/plugins.config.ts +84 -0
  79. package/config/{runtime.config.ts → system/runtime.config.ts} +1 -1
  80. package/config/system/server.config.ts +68 -0
  81. package/config/system/services.config.ts +46 -0
  82. package/config/{system.config.ts → system/system.config.ts} +1 -1
  83. package/core/build/bundler.ts +4 -1
  84. package/core/build/flux-plugins-generator.ts +325 -325
  85. package/core/build/index.ts +159 -27
  86. package/core/build/live-components-generator.ts +70 -3
  87. package/core/build/optimizer.ts +235 -235
  88. package/core/cli/command-registry.ts +6 -4
  89. package/core/cli/commands/build.ts +79 -0
  90. package/core/cli/commands/create.ts +54 -0
  91. package/core/cli/commands/dev.ts +101 -0
  92. package/core/cli/commands/help.ts +34 -0
  93. package/core/cli/commands/index.ts +34 -0
  94. package/core/cli/commands/make-plugin.ts +90 -0
  95. package/core/cli/commands/plugin-add.ts +197 -0
  96. package/core/cli/commands/plugin-deps.ts +2 -2
  97. package/core/cli/commands/plugin-list.ts +208 -0
  98. package/core/cli/commands/plugin-remove.ts +170 -0
  99. package/core/cli/generators/component.ts +769 -769
  100. package/core/cli/generators/controller.ts +1 -1
  101. package/core/cli/generators/index.ts +146 -146
  102. package/core/cli/generators/interactive.ts +227 -227
  103. package/core/cli/generators/plugin.ts +2 -2
  104. package/core/cli/generators/prompts.ts +82 -82
  105. package/core/cli/generators/route.ts +6 -6
  106. package/core/cli/generators/service.ts +2 -2
  107. package/core/cli/generators/template-engine.ts +4 -3
  108. package/core/cli/generators/types.ts +2 -2
  109. package/core/cli/generators/utils.ts +191 -191
  110. package/core/cli/index.ts +115 -558
  111. package/core/cli/plugin-discovery.ts +2 -2
  112. package/core/client/LiveComponentsProvider.tsx +63 -17
  113. package/core/client/api/eden.ts +183 -0
  114. package/core/client/api/index.ts +11 -0
  115. package/core/client/components/Live.tsx +104 -0
  116. package/core/client/fluxstack.ts +1 -9
  117. package/core/client/hooks/AdaptiveChunkSizer.ts +215 -0
  118. package/core/client/hooks/state-validator.ts +1 -1
  119. package/core/client/hooks/useAuth.ts +48 -48
  120. package/core/client/hooks/useChunkedUpload.ts +170 -69
  121. package/core/client/hooks/useLiveChunkedUpload.ts +87 -0
  122. package/core/client/hooks/useLiveComponent.ts +800 -0
  123. package/core/client/hooks/useLiveUpload.ts +71 -0
  124. package/core/client/hooks/useRoom.ts +409 -0
  125. package/core/client/hooks/useRoomProxy.ts +382 -0
  126. package/core/client/index.ts +18 -51
  127. package/core/client/standalone-entry.ts +8 -0
  128. package/core/client/standalone.ts +74 -53
  129. package/core/client/state/createStore.ts +192 -192
  130. package/core/client/state/index.ts +14 -14
  131. package/core/config/index.ts +70 -291
  132. package/core/config/schema.ts +42 -723
  133. package/core/framework/client.ts +131 -131
  134. package/core/framework/index.ts +7 -7
  135. package/core/framework/server.ts +227 -47
  136. package/core/framework/types.ts +2 -2
  137. package/core/index.ts +23 -4
  138. package/core/live/ComponentRegistry.ts +7 -3
  139. package/core/live/types.ts +77 -0
  140. package/core/plugins/built-in/index.ts +134 -131
  141. package/core/plugins/built-in/live-components/commands/create-live-component.ts +242 -1074
  142. package/core/plugins/built-in/live-components/index.ts +1 -1
  143. package/core/plugins/built-in/monitoring/index.ts +111 -47
  144. package/core/plugins/built-in/static/index.ts +1 -1
  145. package/core/plugins/built-in/swagger/index.ts +68 -265
  146. package/core/plugins/built-in/vite/index.ts +94 -306
  147. package/core/plugins/built-in/vite/vite-dev.ts +82 -0
  148. package/core/plugins/config.ts +9 -7
  149. package/core/plugins/dependency-manager.ts +31 -1
  150. package/core/plugins/discovery.ts +19 -7
  151. package/core/plugins/executor.ts +2 -2
  152. package/core/plugins/index.ts +203 -203
  153. package/core/plugins/manager.ts +27 -39
  154. package/core/plugins/module-resolver.ts +19 -8
  155. package/core/plugins/registry.ts +309 -21
  156. package/core/plugins/types.ts +106 -55
  157. package/core/server/framework.ts +66 -43
  158. package/core/server/index.ts +15 -16
  159. package/core/server/live/ComponentRegistry.ts +91 -75
  160. package/core/server/live/FileUploadManager.ts +41 -31
  161. package/core/server/live/LiveComponentPerformanceMonitor.ts +1 -1
  162. package/core/server/live/LiveRoomManager.ts +261 -0
  163. package/core/server/live/RoomEventBus.ts +234 -0
  164. package/core/server/live/RoomStateManager.ts +172 -0
  165. package/core/server/live/StateSignature.ts +643 -643
  166. package/core/server/live/WebSocketConnectionManager.ts +30 -19
  167. package/core/server/live/auto-generated-components.ts +41 -26
  168. package/core/server/live/index.ts +14 -0
  169. package/core/server/live/websocket-plugin.ts +233 -72
  170. package/core/server/middleware/elysia-helpers.ts +7 -2
  171. package/core/server/middleware/errorHandling.ts +1 -1
  172. package/core/server/middleware/index.ts +31 -31
  173. package/core/server/plugins/database.ts +180 -180
  174. package/core/server/plugins/static-files-plugin.ts +69 -260
  175. package/core/server/plugins/swagger.ts +33 -33
  176. package/core/server/rooms/RoomBroadcaster.ts +357 -0
  177. package/core/server/rooms/RoomSystem.ts +463 -0
  178. package/core/server/rooms/index.ts +13 -0
  179. package/core/server/services/BaseService.ts +1 -1
  180. package/core/server/services/ServiceContainer.ts +1 -1
  181. package/core/server/services/index.ts +8 -8
  182. package/core/templates/create-project.ts +12 -12
  183. package/core/testing/index.ts +9 -9
  184. package/core/testing/setup.ts +73 -73
  185. package/core/types/api.ts +168 -168
  186. package/core/types/build.ts +219 -218
  187. package/core/types/config.ts +56 -26
  188. package/core/types/index.ts +4 -4
  189. package/core/types/plugin.ts +107 -99
  190. package/core/types/types.ts +490 -14
  191. package/core/utils/build-logger.ts +324 -324
  192. package/core/utils/config-schema.ts +480 -480
  193. package/core/utils/env.ts +2 -8
  194. package/core/utils/errors/codes.ts +114 -114
  195. package/core/utils/errors/handlers.ts +36 -1
  196. package/core/utils/errors/index.ts +49 -5
  197. package/core/utils/errors/middleware.ts +113 -113
  198. package/core/utils/helpers.ts +6 -16
  199. package/core/utils/index.ts +17 -17
  200. package/core/utils/logger/colors.ts +114 -114
  201. package/core/utils/logger/config.ts +13 -9
  202. package/core/utils/logger/formatter.ts +82 -82
  203. package/core/utils/logger/group-logger.ts +101 -101
  204. package/core/utils/logger/index.ts +6 -1
  205. package/core/utils/logger/stack-trace.ts +3 -1
  206. package/core/utils/logger/startup-banner.ts +82 -66
  207. package/core/utils/logger/winston-logger.ts +152 -152
  208. package/core/utils/monitoring/index.ts +211 -211
  209. package/core/utils/sync-version.ts +66 -66
  210. package/core/utils/version.ts +1 -1
  211. package/create-fluxstack.ts +8 -7
  212. package/eslint.config.js +23 -23
  213. package/package.json +14 -15
  214. package/plugins/crypto-auth/cli/make-protected-route.command.ts +1 -1
  215. package/plugins/crypto-auth/client/CryptoAuthClient.ts +302 -302
  216. package/plugins/crypto-auth/client/components/index.ts +11 -11
  217. package/plugins/crypto-auth/client/index.ts +11 -11
  218. package/plugins/crypto-auth/config/index.ts +1 -1
  219. package/plugins/crypto-auth/index.ts +4 -4
  220. package/plugins/crypto-auth/package.json +65 -65
  221. package/plugins/crypto-auth/server/AuthMiddleware.ts +1 -1
  222. package/plugins/crypto-auth/server/CryptoAuthService.ts +185 -185
  223. package/plugins/crypto-auth/server/index.ts +21 -21
  224. package/plugins/crypto-auth/server/middlewares/cryptoAuthAdmin.ts +3 -3
  225. package/plugins/crypto-auth/server/middlewares/cryptoAuthOptional.ts +1 -1
  226. package/plugins/crypto-auth/server/middlewares/cryptoAuthPermissions.ts +2 -2
  227. package/plugins/crypto-auth/server/middlewares/cryptoAuthRequired.ts +2 -2
  228. package/plugins/crypto-auth/server/middlewares/helpers.ts +1 -1
  229. package/plugins/crypto-auth/server/middlewares/index.ts +22 -22
  230. package/plugins/crypto-auth/server/middlewares.ts +19 -19
  231. package/tsconfig.api-strict.json +16 -0
  232. package/tsconfig.json +10 -14
  233. package/{app/client/tsconfig.node.json → tsconfig.node.json} +1 -1
  234. package/types/global.d.ts +29 -29
  235. package/types/vitest.d.ts +8 -8
  236. package/vite.config.ts +38 -62
  237. package/vitest.config.live.ts +10 -9
  238. package/vitest.config.ts +29 -17
  239. package/workspace.json +5 -5
  240. package/app/client/README.md +0 -69
  241. package/app/client/SIMPLIFICATION.md +0 -140
  242. package/app/client/frontend-only.ts +0 -12
  243. package/app/client/tsconfig.app.json +0 -44
  244. package/app/client/tsconfig.json +0 -7
  245. package/app/client/zustand-setup.md +0 -65
  246. package/app/server/backend-only.ts +0 -18
  247. package/app/server/live/LiveClockComponent.ts +0 -215
  248. package/app/server/routes/env-test.ts +0 -110
  249. package/core/client/hooks/index.ts +0 -7
  250. package/core/client/hooks/useHybridLiveComponent.ts +0 -631
  251. package/core/client/hooks/useWebSocket.ts +0 -373
  252. package/core/config/env.ts +0 -546
  253. package/core/config/loader.ts +0 -522
  254. package/core/config/runtime-config.ts +0 -327
  255. package/core/config/validator.ts +0 -540
  256. package/core/server/backend-entry.ts +0 -51
  257. package/core/server/standalone.ts +0 -106
  258. package/core/utils/regenerate-files.ts +0 -69
  259. package/fluxstack.config.ts +0 -354
@@ -1,5 +1,6 @@
1
1
  import { Elysia, t } from 'elysia'
2
- import { UsersController } from '@/app/server/controllers/users.controller'
2
+ import { UsersController } from '@app/server/controllers/users.controller'
3
+ import type { CreateUserRequest } from '@app/shared/types'
3
4
 
4
5
  // ===== Request/Response Schemas =====
5
6
 
@@ -77,9 +78,7 @@ const ErrorResponseSchema = t.Object({
77
78
  */
78
79
  export const usersRoutes = new Elysia({ prefix: '/users', tags: ['Users'] })
79
80
  // GET /users - Get all users
80
- .get('/', async () => {
81
- return await UsersController.getUsers()
82
- }, {
81
+ .get('/', async () => UsersController.getUsers(), {
83
82
  detail: {
84
83
  summary: 'Get All Users',
85
84
  description: 'Retrieves a list of all registered users',
@@ -90,19 +89,18 @@ export const usersRoutes = new Elysia({ prefix: '/users', tags: ['Users'] })
90
89
 
91
90
  // GET /users/:id - Get user by ID
92
91
  .get('/:id', async ({ params, set }) => {
93
- const id = parseInt(params.id)
92
+ const id = Number(params.id)
94
93
 
95
- // Handle invalid ID
96
- if (isNaN(id)) {
94
+ if (!Number.isFinite(id)) {
97
95
  set.status = 400
98
- return { error: 'ID inválido' }
96
+ return { success: false, error: 'ID invalido' }
99
97
  }
100
98
 
101
99
  const result = await UsersController.getUserById(id)
102
100
 
103
- if (!result) {
101
+ if (!result.success) {
104
102
  set.status = 404
105
- return { error: 'Usuário não encontrado' }
103
+ return result
106
104
  }
107
105
 
108
106
  return result
@@ -124,17 +122,17 @@ export const usersRoutes = new Elysia({ prefix: '/users', tags: ['Users'] })
124
122
 
125
123
  // POST /users - Create new user
126
124
  .post('/', async ({ body, set }) => {
127
- // Validate required fields
128
- if (!body.name || !body.email) {
125
+ const payload = body as CreateUserRequest
126
+
127
+ if (!payload.name || !payload.email) {
129
128
  set.status = 400
130
129
  return {
131
130
  success: false,
132
- error: 'Nome e email são obrigatórios'
131
+ error: 'Nome e email sao obrigatorios'
133
132
  }
134
133
  }
135
134
 
136
- // Validate name length
137
- if (body.name.length < 2) {
135
+ if (payload.name.trim().length < 2) {
138
136
  set.status = 400
139
137
  return {
140
138
  success: false,
@@ -142,23 +140,28 @@ export const usersRoutes = new Elysia({ prefix: '/users', tags: ['Users'] })
142
140
  }
143
141
  }
144
142
 
145
- // Validate email format
146
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
147
- if (!emailRegex.test(body.email)) {
143
+ const emailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/
144
+ if (!emailRegex.test(payload.email)) {
148
145
  set.status = 400
149
146
  return {
150
147
  success: false,
151
- error: 'Email inválido'
148
+ error: 'Email invalido'
152
149
  }
153
150
  }
154
151
 
155
- const result = await UsersController.createUser(body)
152
+ const sanitizedPayload: CreateUserRequest = {
153
+ name: payload.name.trim(),
154
+ email: payload.email.trim()
155
+ }
156
+
157
+ const result = await UsersController.createUser(sanitizedPayload)
156
158
 
157
- // If email is duplicate, still return 200 but with success: false
158
159
  if (!result.success) {
160
+ set.status = 409
159
161
  return result
160
162
  }
161
163
 
164
+ set.status = 201
162
165
  return result
163
166
  }, {
164
167
  detail: {
@@ -168,30 +171,34 @@ export const usersRoutes = new Elysia({ prefix: '/users', tags: ['Users'] })
168
171
  },
169
172
  body: CreateUserRequestSchema,
170
173
  response: {
171
- 200: CreateUserResponseSchema,
174
+ 201: CreateUserResponseSchema,
172
175
  400: t.Object({
173
176
  success: t.Literal(false),
174
177
  error: t.String()
178
+ }),
179
+ 409: t.Object({
180
+ success: t.Literal(false),
181
+ error: t.String()
175
182
  })
176
183
  }
177
184
  })
178
185
 
179
186
  // DELETE /users/:id - Delete user
180
187
  .delete('/:id', async ({ params, set }) => {
181
- const id = parseInt(params.id)
188
+ const id = Number(params.id)
182
189
 
183
- if (isNaN(id)) {
190
+ if (!Number.isFinite(id)) {
184
191
  set.status = 400
185
192
  return {
186
193
  success: false,
187
- message: 'ID inválido'
194
+ message: 'ID invalido'
188
195
  }
189
196
  }
190
197
 
191
198
  const result = await UsersController.deleteUser(id)
192
199
 
193
200
  if (!result.success) {
194
- // Don't set 404 status, just return success: false
201
+ set.status = 404
195
202
  return result
196
203
  }
197
204
 
@@ -210,6 +217,7 @@ export const usersRoutes = new Elysia({ prefix: '/users', tags: ['Users'] })
210
217
  400: t.Object({
211
218
  success: t.Literal(false),
212
219
  message: t.String()
213
- })
220
+ }),
221
+ 404: DeleteUserResponseSchema
214
222
  }
215
223
  })
@@ -11,8 +11,20 @@ export interface CreateUserRequest {
11
11
  email: string
12
12
  }
13
13
 
14
- export interface UserResponse {
14
+ export interface UserListResponse {
15
+ success: true
16
+ users: User[]
17
+ count: number
18
+ }
19
+
20
+ export interface UserDetailResponse {
15
21
  success: boolean
16
22
  user?: User
23
+ error?: string
24
+ }
25
+
26
+ export interface MutationResponse {
27
+ success: boolean
17
28
  message?: string
18
- }
29
+ error?: string
30
+ }
@@ -1,62 +1,2 @@
1
- /**
2
- * Application Configuration
3
- * Core application metadata and global settings
4
- */
5
-
6
- import { defineConfig, config } from '@/core/utils/config-schema'
7
- import { FLUXSTACK_VERSION } from '@/core/utils/version'
8
-
9
- /**
10
- * App configuration schema
11
- * Contains only app-level metadata and global feature flags
12
- */
13
- const appConfigSchema = {
14
- // App basics
15
- name: config.string('APP_NAME', 'FluxStack', true),
16
-
17
- version: {
18
- type: 'string' as const,
19
- env: 'APP_VERSION',
20
- default: FLUXSTACK_VERSION,
21
- validate: (value: string) => /^\d+\.\d+\.\d+$/.test(value) || 'Version must be semver format (e.g., 1.0.0)'
22
- },
23
-
24
- description: config.string('APP_DESCRIPTION', 'A FluxStack application'),
25
-
26
- // Environment
27
- env: config.enum('NODE_ENV', ['development', 'production', 'test'] as const, 'development', true),
28
-
29
- // URLs
30
- url: config.string('APP_URL', undefined, false),
31
-
32
- // Security
33
- trustProxy: config.boolean('TRUST_PROXY', false),
34
-
35
- sessionSecret: {
36
- type: 'string' as const,
37
- env: 'SESSION_SECRET',
38
- default: undefined,
39
- required: false,
40
- validate: (value: string) => {
41
- if (!value) return true // Optional
42
- if (value.length < 32) {
43
- return 'Session secret must be at least 32 characters'
44
- }
45
- return true
46
- }
47
- }
48
- } as const
49
-
50
- export const appConfig = defineConfig(appConfigSchema)
51
-
52
- // Export type for use in other files
53
- export type AppConfig = typeof appConfig
54
-
55
- /**
56
- * Type-safe environment type
57
- * Use this when you need the literal type explicitly
58
- */
59
- export type Environment = typeof appConfig.env
60
-
61
- // Export default
62
- export default appConfig
1
+ export { appConfig as default, appConfig } from './system/app.config'
2
+ export type { AppConfig } from './system/app.config'
@@ -1,95 +1,2 @@
1
- /**
2
- * Client & Vite Configuration
3
- * Declarative client, proxy and Vite dev server configuration
4
- */
5
-
6
- import { defineConfig, defineNestedConfig, config } from '@/core/utils/config-schema'
7
- import { env, helpers } from '@/core/utils/env'
8
-
9
- /**
10
- * Vite Dev Server Configuration
11
- */
12
- const viteSchema = {
13
- port: config.number('VITE_PORT', 5173, true),
14
-
15
- host: config.string('VITE_HOST', 'localhost'),
16
-
17
- strictPort: config.boolean('VITE_STRICT_PORT', false),
18
-
19
- open: config.boolean('VITE_OPEN', false),
20
-
21
- enableLogging: config.boolean('ENABLE_VITE_PROXY_LOGS', false)
22
- } as const
23
-
24
- /**
25
- * API Proxy Configuration
26
- */
27
- const proxySchema = {
28
- target: {
29
- type: 'string' as const,
30
- env: 'PROXY_TARGET',
31
- default: helpers.getServerUrl(),
32
- required: false,
33
- validate: (value: string) => {
34
- if (!value) return true
35
- try {
36
- new URL(value)
37
- return true
38
- } catch {
39
- return 'Proxy target must be a valid URL'
40
- }
41
- }
42
- },
43
-
44
- changeOrigin: config.boolean('PROXY_CHANGE_ORIGIN', true),
45
-
46
- secure: config.boolean('PROXY_SECURE', false),
47
-
48
- ws: config.boolean('PROXY_WS', true), // WebSocket support
49
-
50
- rewrite: {
51
- type: 'object' as const,
52
- env: 'PROXY_REWRITE',
53
- default: {},
54
- required: false
55
- }
56
- } as const
57
-
58
- /**
59
- * Client Build Configuration
60
- */
61
- const buildSchema = {
62
- outDir: config.string('CLIENT_OUTDIR', 'dist/client'),
63
-
64
- sourceMaps: config.boolean('CLIENT_SOURCEMAPS', helpers.isDevelopment()),
65
-
66
- minify: config.boolean('CLIENT_MINIFY', helpers.isProduction()),
67
-
68
- target: config.string('CLIENT_TARGET', 'esnext'),
69
-
70
- assetsDir: config.string('CLIENT_ASSETS_DIR', 'assets'),
71
-
72
- cssCodeSplit: config.boolean('CLIENT_CSS_CODE_SPLIT', true),
73
-
74
- chunkSizeWarningLimit: config.number('CLIENT_CHUNK_SIZE_WARNING', 500), // KB
75
-
76
- emptyOutDir: config.boolean('CLIENT_EMPTY_OUTDIR', true)
77
- } as const
78
-
79
- /**
80
- * Client Configuration (nested)
81
- */
82
- export const clientConfig = defineNestedConfig({
83
- vite: viteSchema,
84
- proxy: proxySchema,
85
- build: buildSchema
86
- })
87
-
88
- // Export types
89
- export type ViteConfig = typeof clientConfig.vite
90
- export type ProxyConfig = typeof clientConfig.proxy
91
- export type ClientBuildConfig = typeof clientConfig.build
92
- export type ClientConfig = typeof clientConfig
93
-
94
- // Export default
95
- export default clientConfig
1
+ export { clientConfig as default, clientConfig } from './system/client.config'
2
+ export type { ClientConfig, ViteConfig, ClientBuildConfig } from './system/client.config'
@@ -1,99 +1,2 @@
1
- /**
2
- * Database Configuration
3
- * Laravel-style declarative config with validation
4
- */
5
-
6
- import { defineConfig, config } from '@/core/utils/config-schema'
7
-
8
- /**
9
- * Database configuration schema
10
- */
11
- export const databaseConfig = defineConfig({
12
- // Connection
13
- url: {
14
- type: 'string',
15
- env: 'DATABASE_URL',
16
- default: undefined,
17
- required: false,
18
- validate: (value) => {
19
- if (!value) return true // Optional
20
- if (!value.includes('://')) {
21
- return 'DATABASE_URL must be a valid connection string (e.g., postgres://...)'
22
- }
23
- return true
24
- },
25
- description: 'Full database connection URL (overrides individual settings)'
26
- },
27
-
28
- host: config.string('DB_HOST', 'localhost'),
29
-
30
- port: config.number('DB_PORT', 5432),
31
-
32
- database: {
33
- type: 'string',
34
- env: 'DB_NAME',
35
- default: undefined,
36
- required: false,
37
- description: 'Database name'
38
- },
39
-
40
- user: {
41
- type: 'string',
42
- env: 'DB_USER',
43
- default: undefined,
44
- required: false
45
- },
46
-
47
- password: {
48
- type: 'string',
49
- env: 'DB_PASSWORD',
50
- default: undefined,
51
- required: false
52
- },
53
-
54
- // Connection pool
55
- poolMin: {
56
- type: 'number',
57
- env: 'DB_POOL_MIN',
58
- default: 2,
59
- validate: (value) => value >= 0 || 'Pool min must be >= 0'
60
- },
61
-
62
- poolMax: {
63
- type: 'number',
64
- env: 'DB_POOL_MAX',
65
- default: 10,
66
- validate: (value) => value > 0 || 'Pool max must be > 0'
67
- },
68
-
69
- // SSL
70
- ssl: config.boolean('DB_SSL', false),
71
-
72
- // Timeouts
73
- connectionTimeout: {
74
- type: 'number',
75
- env: 'DB_CONNECTION_TIMEOUT',
76
- default: 30000,
77
- description: 'Connection timeout in milliseconds'
78
- },
79
-
80
- queryTimeout: {
81
- type: 'number',
82
- env: 'DB_QUERY_TIMEOUT',
83
- default: 60000,
84
- description: 'Query timeout in milliseconds'
85
- },
86
-
87
- // Features
88
- enableLogging: config.boolean('DB_ENABLE_LOGGING', false),
89
-
90
- enableMigrations: config.boolean('DB_ENABLE_MIGRATIONS', true),
91
-
92
- migrationsTable: config.string('DB_MIGRATIONS_TABLE', 'migrations')
93
- })
94
-
95
- // Export type
96
- export type DatabaseConfig = typeof databaseConfig
97
-
98
- // Export default
99
- export default databaseConfig
1
+ export { databaseConfig as default, databaseConfig } from './system/database.config'
2
+ export type { DatabaseConfig } from './system/database.config'
@@ -1,48 +1,28 @@
1
1
  /**
2
- * Backward Compatibility Layer for FluxStack Configuration
3
- * This file maintains compatibility with existing imports while redirecting to the new system
4
- * @deprecated Use the configuration from the root fluxstack.config.ts instead
2
+ * FluxStack Configuration - Main Entry Point
3
+ * Re-exports the complete FluxStack configuration from system/
4
+ *
5
+ * ✨ 100% modular configuration using defineConfig
6
+ * ✨ No composer needed - direct config composition
7
+ * ✨ All configs are type-safe with automatic validation
8
+ *
9
+ * To customize configuration, edit the individual config files:
10
+ * - system/app.config.ts - Application metadata
11
+ * - system/server.config.ts - Server and CORS settings
12
+ * - system/client.config.ts - Vite, proxy, and client build
13
+ * - system/build.config.ts - Server build and optimization
14
+ * - system/logger.config.ts - Logging configuration
15
+ * - system/plugins.config.ts - Plugin management
16
+ * - system/monitoring.config.ts - Monitoring and metrics
17
+ * - system/runtime.config.ts - Runtime-reloadable settings
18
+ * - system/system.config.ts - System information
19
+ * - database.config.ts - Database connection (optional)
20
+ * - services.config.ts - JWT, Email, Storage (optional)
5
21
  */
6
22
 
7
- import { getConfigSync, createLegacyConfig } from '@/core/config'
8
- import type { FluxStackConfig } from '@/core/config'
9
-
10
- // Load the new configuration
11
- const newConfig = getConfigSync()
12
-
13
- // Create legacy configuration format for backward compatibility
14
- const legacyConfig = createLegacyConfig(newConfig)
15
-
16
- // Export in the old format
17
- export const config = legacyConfig
18
-
19
- // Also export the environment config for backward compatibility
20
- export const envConfig = {
21
- NODE_ENV: process.env.NODE_ENV || 'development',
22
- HOST: newConfig.server.host,
23
- PORT: newConfig.server.port,
24
- FRONTEND_PORT: newConfig.client.port,
25
- BACKEND_PORT: newConfig.server.port,
26
- VITE_API_URL: newConfig.client.proxy.target,
27
- API_URL: newConfig.client.proxy.target,
28
- CORS_ORIGINS: newConfig.server.cors.origins,
29
- CORS_METHODS: newConfig.server.cors.methods,
30
- CORS_HEADERS: newConfig.server.cors.headers,
31
- LOG_LEVEL: newConfig.logging.level,
32
- BUILD_TARGET: newConfig.build.target,
33
- BUILD_OUTDIR: newConfig.build.outDir,
34
- // Add other legacy environment variables as needed
35
- }
36
-
37
- // Warn about deprecated usage in development
38
- if (process.env.NODE_ENV === 'development') {
39
- console.warn(
40
- '⚠️ DEPRECATED: Importing from config/fluxstack.config.ts is deprecated.\n' +
41
- ' Please update your imports to use the new configuration system:\n' +
42
- ' import { getConfig } from "./core/config"\n' +
43
- ' or import config from "./fluxstack.config.ts"'
44
- )
45
- }
46
-
47
- // Export types for backward compatibility
48
- export type { FluxStackConfig }
23
+ export {
24
+ fluxStackConfig,
25
+ fluxStackConfig as config,
26
+ fluxStackConfig as default,
27
+ type FluxStackConfig
28
+ } from './system/fluxstack.config'
package/config/index.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * @example
7
7
  * ```ts
8
- * import { appConfig, serverConfig, databaseConfig } from '@/config'
8
+ * import { appConfig, serverConfig, databaseConfig } from '@config'
9
9
  *
10
10
  * // All configs are type-safe and validated!
11
11
  * console.log(appConfig.name) // string
@@ -16,22 +16,33 @@
16
16
  * console.log(servicesConfig.email.host) // string
17
17
  * console.log(monitoringConfig.metrics.enabled) // boolean
18
18
  * ```
19
+ *
20
+ * ✨ For type safety with optional features (database, auth, email, storage):
21
+ * Import types from this file instead of core:
22
+ * ```ts
23
+ * import type { DatabaseConfig, JWTConfig, EmailConfig, StorageConfig } from '@config'
24
+ * ```
19
25
  */
20
26
 
21
27
  // ============================================================================
22
28
  // 📦 CONFIG EXPORTS
23
29
  // ============================================================================
24
30
 
25
- export { appConfig } from './app.config'
26
- export { serverConfig } from './server.config'
27
- export { clientConfig } from './client.config'
28
- export { databaseConfig } from './database.config'
29
- export { servicesConfig } from './services.config'
30
- export { loggerConfig } from './logger.config'
31
- export { pluginsConfig } from './plugins.config'
32
- export { monitoringConfig } from './monitoring.config'
33
- export { appRuntimeConfig } from './runtime.config'
34
- export { systemConfig, systemRuntimeInfo } from './system.config'
31
+ // System configs (from config/system/)
32
+ export { appConfig } from './system/app.config'
33
+ export { serverConfig } from './system/server.config'
34
+ export { clientConfig } from './system/client.config'
35
+ export { buildConfig } from './system/build.config'
36
+ export { loggerConfig } from './system/logger.config'
37
+ export { pluginsConfig } from './system/plugins.config'
38
+ export { monitoringConfig } from './system/monitoring.config'
39
+ export { appRuntimeConfig } from './system/runtime.config'
40
+ export { systemConfig, systemRuntimeInfo } from './system/system.config'
41
+ export { databaseConfig } from './system/database.config'
42
+ export { servicesConfig } from './system/services.config'
43
+
44
+ // Main FluxStack config (composed)
45
+ export { fluxStackConfig, config as fluxConfig, type FluxStackConfig } from './fluxstack.config'
35
46
 
36
47
  // Plugin configs (re-exported for convenience)
37
48
  export { cryptoAuthConfig } from '../plugins/crypto-auth/config'
@@ -40,35 +51,35 @@ export { cryptoAuthConfig } from '../plugins/crypto-auth/config'
40
51
  // 📝 TYPE EXPORTS
41
52
  // ============================================================================
42
53
 
43
- // Core types
44
- export type { AppConfig, Environment } from './app.config'
54
+ // System config types
55
+ export type { AppConfig } from './system/app.config'
45
56
  export type {
46
57
  ServerConfig,
47
58
  CorsConfig,
48
59
  ServerFullConfig
49
- } from './server.config'
60
+ } from './system/server.config'
50
61
  export type {
51
62
  ClientConfig,
52
63
  ViteConfig,
53
- ProxyConfig,
54
64
  ClientBuildConfig
55
- } from './client.config'
56
- export type { DatabaseConfig } from './database.config'
65
+ } from './system/client.config'
57
66
  export type {
58
- EmailConfig,
59
- JWTConfig,
60
- StorageConfig,
61
- RedisConfig
62
- } from './services.config'
63
- export type { LoggerConfig } from './logger.config'
64
- export type { PluginsConfig } from './plugins.config'
67
+ BuildConfig,
68
+ OptimizationConfig,
69
+ BuildFullConfig
70
+ } from './system/build.config'
71
+ export type { LoggerConfig } from './system/logger.config'
72
+ export type { PluginsConfig } from './system/plugins.config'
65
73
  export type {
66
74
  MonitoringConfig,
67
75
  MetricsConfig,
68
76
  ProfilingConfig,
69
77
  MonitoringFullConfig
70
- } from './monitoring.config'
71
- export type { SystemConfig, SystemRuntimeInfo } from './system.config'
78
+ } from './system/monitoring.config'
79
+ export type { SystemConfig, SystemRuntimeInfo } from './system/system.config'
80
+ export type { AppRuntimeConfig } from './system/runtime.config'
81
+ export type { DatabaseConfig } from './system/database.config'
82
+ export type { ServicesConfig } from './system/services.config'
72
83
 
73
84
  // Plugin types
74
85
  export type { CryptoAuthConfig } from '../plugins/crypto-auth/config'
@@ -77,34 +88,42 @@ export type { CryptoAuthConfig } from '../plugins/crypto-auth/config'
77
88
  // 🎯 UNIFIED CONFIG OBJECT
78
89
  // ============================================================================
79
90
 
80
- import { appConfig } from './app.config'
81
- import { serverConfig } from './server.config'
82
- import { clientConfig } from './client.config'
83
- import { databaseConfig } from './database.config'
84
- import { servicesConfig } from './services.config'
85
- import { loggerConfig } from './logger.config'
86
- import { pluginsConfig } from './plugins.config'
87
- import { monitoringConfig } from './monitoring.config'
88
- import { appRuntimeConfig } from './runtime.config'
89
- import { systemConfig, systemRuntimeInfo } from './system.config'
91
+ import { appConfig } from './system/app.config'
92
+ import { serverConfig } from './system/server.config'
93
+ import { clientConfig } from './system/client.config'
94
+ import { buildConfig } from './system/build.config'
95
+ import { loggerConfig } from './system/logger.config'
96
+ import { pluginsConfig } from './system/plugins.config'
97
+ import { monitoringConfig } from './system/monitoring.config'
98
+ import { appRuntimeConfig } from './system/runtime.config'
99
+ import { systemConfig, systemRuntimeInfo } from './system/system.config'
100
+ import { databaseConfig } from './system/database.config'
101
+ import { servicesConfig } from './system/services.config'
90
102
  import { cryptoAuthConfig } from '../plugins/crypto-auth/config'
91
103
 
92
104
  /**
93
105
  * All configs in one object
94
106
  * Use this when you need access to multiple configs at once
107
+ *
108
+ * For the complete FluxStack configuration with proper structure,
109
+ * use `fluxStackConfig` from './fluxstack.config'
95
110
  */
96
111
  export const config = {
112
+ // System configs
97
113
  app: appConfig,
98
114
  server: serverConfig,
99
115
  client: clientConfig,
100
- database: databaseConfig,
101
- services: servicesConfig,
116
+ build: buildConfig,
102
117
  logger: loggerConfig,
103
118
  plugins: pluginsConfig,
104
119
  monitoring: monitoringConfig,
105
120
  runtime: appRuntimeConfig,
106
121
  system: systemConfig,
107
122
  systemRuntime: systemRuntimeInfo,
123
+ database: databaseConfig,
124
+ services: servicesConfig,
125
+
126
+ // Plugin configs
108
127
  cryptoAuth: cryptoAuthConfig
109
128
  } as const
110
129