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.
Files changed (257) hide show
  1. package/.dockerignore +1 -2
  2. package/Dockerfile +8 -8
  3. package/LLMD/INDEX.md +64 -0
  4. package/LLMD/MAINTENANCE.md +197 -0
  5. package/LLMD/MIGRATION.md +156 -0
  6. package/LLMD/config/.gitkeep +1 -0
  7. package/LLMD/config/declarative-system.md +268 -0
  8. package/LLMD/config/environment-vars.md +327 -0
  9. package/LLMD/config/runtime-reload.md +401 -0
  10. package/LLMD/core/.gitkeep +1 -0
  11. package/LLMD/core/build-system.md +599 -0
  12. package/LLMD/core/framework-lifecycle.md +229 -0
  13. package/LLMD/core/plugin-system.md +451 -0
  14. package/LLMD/patterns/.gitkeep +1 -0
  15. package/LLMD/patterns/anti-patterns.md +297 -0
  16. package/LLMD/patterns/project-structure.md +264 -0
  17. package/LLMD/patterns/type-safety.md +440 -0
  18. package/LLMD/reference/.gitkeep +1 -0
  19. package/LLMD/reference/cli-commands.md +250 -0
  20. package/LLMD/reference/plugin-hooks.md +357 -0
  21. package/LLMD/reference/routing.md +39 -0
  22. package/LLMD/reference/troubleshooting.md +364 -0
  23. package/LLMD/resources/.gitkeep +1 -0
  24. package/LLMD/resources/controllers.md +465 -0
  25. package/LLMD/resources/live-components.md +703 -0
  26. package/LLMD/resources/live-rooms.md +482 -0
  27. package/LLMD/resources/live-upload.md +130 -0
  28. package/LLMD/resources/plugins-external.md +617 -0
  29. package/LLMD/resources/routes-eden.md +254 -0
  30. package/README.md +37 -17
  31. package/app/client/index.html +0 -1
  32. package/app/client/src/App.tsx +107 -150
  33. package/app/client/src/components/AppLayout.tsx +68 -0
  34. package/app/client/src/components/BackButton.tsx +13 -0
  35. package/app/client/src/components/DemoPage.tsx +20 -0
  36. package/app/client/src/components/LiveUploadWidget.tsx +204 -0
  37. package/app/client/src/lib/eden-api.ts +85 -60
  38. package/app/client/src/live/ChatDemo.tsx +107 -0
  39. package/app/client/src/live/CounterDemo.tsx +206 -0
  40. package/app/client/src/live/FormDemo.tsx +119 -0
  41. package/app/client/src/live/RoomChatDemo.tsx +242 -0
  42. package/app/client/src/live/UploadDemo.tsx +21 -0
  43. package/app/client/src/main.tsx +4 -1
  44. package/app/client/src/pages/ApiTestPage.tsx +108 -0
  45. package/app/client/src/pages/HomePage.tsx +76 -0
  46. package/app/server/app.ts +1 -4
  47. package/app/server/controllers/users.controller.ts +36 -44
  48. package/app/server/index.ts +25 -35
  49. package/app/server/live/LiveChat.ts +77 -0
  50. package/app/server/live/LiveCounter.ts +67 -0
  51. package/app/server/live/LiveForm.ts +63 -0
  52. package/app/server/live/LiveLocalCounter.ts +32 -0
  53. package/app/server/live/LiveRoomChat.ts +285 -0
  54. package/app/server/live/LiveUpload.ts +81 -0
  55. package/app/server/routes/index.ts +3 -1
  56. package/app/server/routes/room.routes.ts +117 -0
  57. package/app/server/routes/users.routes.ts +35 -27
  58. package/app/shared/types/index.ts +14 -2
  59. package/config/app.config.ts +2 -62
  60. package/config/client.config.ts +2 -95
  61. package/config/database.config.ts +2 -99
  62. package/config/fluxstack.config.ts +25 -45
  63. package/config/index.ts +57 -38
  64. package/config/monitoring.config.ts +2 -114
  65. package/config/plugins.config.ts +2 -80
  66. package/config/server.config.ts +2 -68
  67. package/config/services.config.ts +2 -130
  68. package/config/system/app.config.ts +29 -0
  69. package/config/system/build.config.ts +49 -0
  70. package/config/system/client.config.ts +68 -0
  71. package/config/system/database.config.ts +17 -0
  72. package/config/system/fluxstack.config.ts +114 -0
  73. package/config/{logger.config.ts → system/logger.config.ts} +3 -1
  74. package/config/system/monitoring.config.ts +114 -0
  75. package/config/system/plugins.config.ts +84 -0
  76. package/config/{runtime.config.ts → system/runtime.config.ts} +1 -1
  77. package/config/system/server.config.ts +68 -0
  78. package/config/system/services.config.ts +46 -0
  79. package/config/{system.config.ts → system/system.config.ts} +1 -1
  80. package/core/build/flux-plugins-generator.ts +325 -325
  81. package/core/build/index.ts +39 -27
  82. package/core/build/live-components-generator.ts +3 -3
  83. package/core/build/optimizer.ts +235 -235
  84. package/core/cli/command-registry.ts +6 -4
  85. package/core/cli/commands/build.ts +79 -0
  86. package/core/cli/commands/create.ts +54 -0
  87. package/core/cli/commands/dev.ts +101 -0
  88. package/core/cli/commands/help.ts +34 -0
  89. package/core/cli/commands/index.ts +34 -0
  90. package/core/cli/commands/make-plugin.ts +90 -0
  91. package/core/cli/commands/plugin-add.ts +197 -0
  92. package/core/cli/commands/plugin-deps.ts +2 -2
  93. package/core/cli/commands/plugin-list.ts +208 -0
  94. package/core/cli/commands/plugin-remove.ts +170 -0
  95. package/core/cli/generators/component.ts +769 -769
  96. package/core/cli/generators/controller.ts +1 -1
  97. package/core/cli/generators/index.ts +146 -146
  98. package/core/cli/generators/interactive.ts +227 -227
  99. package/core/cli/generators/plugin.ts +2 -2
  100. package/core/cli/generators/prompts.ts +82 -82
  101. package/core/cli/generators/route.ts +6 -6
  102. package/core/cli/generators/service.ts +2 -2
  103. package/core/cli/generators/template-engine.ts +4 -3
  104. package/core/cli/generators/types.ts +2 -2
  105. package/core/cli/generators/utils.ts +191 -191
  106. package/core/cli/index.ts +115 -686
  107. package/core/cli/plugin-discovery.ts +2 -2
  108. package/core/client/LiveComponentsProvider.tsx +60 -8
  109. package/core/client/api/eden.ts +183 -0
  110. package/core/client/api/index.ts +11 -0
  111. package/core/client/components/Live.tsx +104 -0
  112. package/core/client/fluxstack.ts +1 -9
  113. package/core/client/hooks/AdaptiveChunkSizer.ts +215 -215
  114. package/core/client/hooks/state-validator.ts +1 -1
  115. package/core/client/hooks/useAuth.ts +48 -48
  116. package/core/client/hooks/useChunkedUpload.ts +85 -35
  117. package/core/client/hooks/useLiveChunkedUpload.ts +87 -0
  118. package/core/client/hooks/useLiveComponent.ts +800 -0
  119. package/core/client/hooks/useLiveUpload.ts +71 -0
  120. package/core/client/hooks/useRoom.ts +409 -0
  121. package/core/client/hooks/useRoomProxy.ts +382 -0
  122. package/core/client/index.ts +17 -68
  123. package/core/client/standalone-entry.ts +8 -0
  124. package/core/client/standalone.ts +74 -53
  125. package/core/client/state/createStore.ts +192 -192
  126. package/core/client/state/index.ts +14 -14
  127. package/core/config/index.ts +70 -291
  128. package/core/config/schema.ts +42 -723
  129. package/core/framework/client.ts +131 -131
  130. package/core/framework/index.ts +7 -7
  131. package/core/framework/server.ts +47 -40
  132. package/core/framework/types.ts +2 -2
  133. package/core/index.ts +23 -4
  134. package/core/live/ComponentRegistry.ts +3 -3
  135. package/core/live/types.ts +77 -0
  136. package/core/plugins/built-in/index.ts +134 -134
  137. package/core/plugins/built-in/live-components/commands/create-live-component.ts +242 -1066
  138. package/core/plugins/built-in/live-components/index.ts +1 -1
  139. package/core/plugins/built-in/monitoring/index.ts +111 -47
  140. package/core/plugins/built-in/static/index.ts +1 -1
  141. package/core/plugins/built-in/swagger/index.ts +68 -265
  142. package/core/plugins/built-in/vite/index.ts +85 -185
  143. package/core/plugins/built-in/vite/vite-dev.ts +10 -16
  144. package/core/plugins/config.ts +9 -7
  145. package/core/plugins/dependency-manager.ts +31 -1
  146. package/core/plugins/discovery.ts +19 -7
  147. package/core/plugins/executor.ts +2 -2
  148. package/core/plugins/index.ts +203 -203
  149. package/core/plugins/manager.ts +27 -39
  150. package/core/plugins/module-resolver.ts +19 -8
  151. package/core/plugins/registry.ts +255 -19
  152. package/core/plugins/types.ts +20 -53
  153. package/core/server/framework.ts +66 -43
  154. package/core/server/index.ts +15 -15
  155. package/core/server/live/ComponentRegistry.ts +78 -71
  156. package/core/server/live/FileUploadManager.ts +23 -10
  157. package/core/server/live/LiveComponentPerformanceMonitor.ts +1 -1
  158. package/core/server/live/LiveRoomManager.ts +261 -0
  159. package/core/server/live/RoomEventBus.ts +234 -0
  160. package/core/server/live/RoomStateManager.ts +172 -0
  161. package/core/server/live/StateSignature.ts +643 -643
  162. package/core/server/live/WebSocketConnectionManager.ts +30 -19
  163. package/core/server/live/auto-generated-components.ts +21 -9
  164. package/core/server/live/index.ts +14 -0
  165. package/core/server/live/websocket-plugin.ts +214 -67
  166. package/core/server/middleware/elysia-helpers.ts +7 -2
  167. package/core/server/middleware/errorHandling.ts +1 -1
  168. package/core/server/middleware/index.ts +31 -31
  169. package/core/server/plugins/database.ts +180 -180
  170. package/core/server/plugins/static-files-plugin.ts +69 -69
  171. package/core/server/plugins/swagger.ts +1 -1
  172. package/core/server/rooms/RoomBroadcaster.ts +357 -0
  173. package/core/server/rooms/RoomSystem.ts +463 -0
  174. package/core/server/rooms/index.ts +13 -0
  175. package/core/server/services/BaseService.ts +1 -1
  176. package/core/server/services/ServiceContainer.ts +1 -1
  177. package/core/server/services/index.ts +8 -8
  178. package/core/templates/create-project.ts +12 -12
  179. package/core/testing/index.ts +9 -9
  180. package/core/testing/setup.ts +73 -73
  181. package/core/types/api.ts +168 -168
  182. package/core/types/build.ts +219 -219
  183. package/core/types/config.ts +56 -26
  184. package/core/types/index.ts +4 -4
  185. package/core/types/plugin.ts +107 -107
  186. package/core/types/types.ts +353 -14
  187. package/core/utils/build-logger.ts +324 -324
  188. package/core/utils/config-schema.ts +480 -480
  189. package/core/utils/env.ts +2 -8
  190. package/core/utils/errors/codes.ts +114 -114
  191. package/core/utils/errors/handlers.ts +36 -1
  192. package/core/utils/errors/index.ts +49 -5
  193. package/core/utils/errors/middleware.ts +113 -113
  194. package/core/utils/helpers.ts +6 -16
  195. package/core/utils/index.ts +17 -17
  196. package/core/utils/logger/colors.ts +114 -114
  197. package/core/utils/logger/config.ts +13 -9
  198. package/core/utils/logger/formatter.ts +82 -82
  199. package/core/utils/logger/group-logger.ts +101 -101
  200. package/core/utils/logger/index.ts +6 -1
  201. package/core/utils/logger/stack-trace.ts +3 -1
  202. package/core/utils/logger/startup-banner.ts +82 -82
  203. package/core/utils/logger/winston-logger.ts +152 -152
  204. package/core/utils/monitoring/index.ts +211 -211
  205. package/core/utils/sync-version.ts +66 -66
  206. package/core/utils/version.ts +1 -1
  207. package/create-fluxstack.ts +8 -7
  208. package/package.json +12 -13
  209. package/plugins/crypto-auth/cli/make-protected-route.command.ts +1 -1
  210. package/plugins/crypto-auth/client/CryptoAuthClient.ts +302 -302
  211. package/plugins/crypto-auth/client/components/index.ts +11 -11
  212. package/plugins/crypto-auth/client/index.ts +11 -11
  213. package/plugins/crypto-auth/config/index.ts +1 -1
  214. package/plugins/crypto-auth/index.ts +4 -4
  215. package/plugins/crypto-auth/package.json +65 -65
  216. package/plugins/crypto-auth/server/AuthMiddleware.ts +1 -1
  217. package/plugins/crypto-auth/server/CryptoAuthService.ts +185 -185
  218. package/plugins/crypto-auth/server/index.ts +21 -21
  219. package/plugins/crypto-auth/server/middlewares/cryptoAuthAdmin.ts +3 -3
  220. package/plugins/crypto-auth/server/middlewares/cryptoAuthOptional.ts +1 -1
  221. package/plugins/crypto-auth/server/middlewares/cryptoAuthPermissions.ts +2 -2
  222. package/plugins/crypto-auth/server/middlewares/cryptoAuthRequired.ts +2 -2
  223. package/plugins/crypto-auth/server/middlewares/helpers.ts +1 -1
  224. package/plugins/crypto-auth/server/middlewares/index.ts +22 -22
  225. package/tsconfig.api-strict.json +16 -0
  226. package/tsconfig.json +48 -52
  227. package/{app/client/tsconfig.node.json → tsconfig.node.json} +25 -25
  228. package/types/global.d.ts +29 -29
  229. package/types/vitest.d.ts +8 -8
  230. package/vite.config.ts +38 -62
  231. package/vitest.config.live.ts +10 -9
  232. package/vitest.config.ts +29 -17
  233. package/app/client/README.md +0 -69
  234. package/app/client/SIMPLIFICATION.md +0 -140
  235. package/app/client/frontend-only.ts +0 -12
  236. package/app/client/src/live/FileUploadExample.tsx +0 -359
  237. package/app/client/src/live/MinimalLiveClock.tsx +0 -47
  238. package/app/client/src/live/QuickUploadTest.tsx +0 -193
  239. package/app/client/tsconfig.app.json +0 -45
  240. package/app/client/tsconfig.json +0 -7
  241. package/app/client/zustand-setup.md +0 -65
  242. package/app/server/backend-only.ts +0 -18
  243. package/app/server/live/LiveClockComponent.ts +0 -215
  244. package/app/server/live/LiveFileUploadComponent.ts +0 -77
  245. package/app/server/routes/env-test.ts +0 -110
  246. package/core/client/hooks/index.ts +0 -7
  247. package/core/client/hooks/useHybridLiveComponent.ts +0 -685
  248. package/core/client/hooks/useTypedLiveComponent.ts +0 -133
  249. package/core/client/hooks/useWebSocket.ts +0 -361
  250. package/core/config/env.ts +0 -546
  251. package/core/config/loader.ts +0 -522
  252. package/core/config/runtime-config.ts +0 -327
  253. package/core/config/validator.ts +0 -540
  254. package/core/server/backend-entry.ts +0 -51
  255. package/core/server/standalone.ts +0 -106
  256. package/core/utils/regenerate-files.ts +0 -69
  257. package/fluxstack.config.ts +0 -354
@@ -1,80 +1,2 @@
1
- /**
2
- * Plugins Configuration
3
- * Declarative plugin management configuration
4
- */
5
-
6
- import { defineConfig, config } from '@/core/utils/config-schema'
7
- import { env } from '@/core/utils/env'
8
- import { FLUXSTACK_VERSION } from '@/core/utils/version'
9
-
10
- /**
11
- * Plugins configuration schema
12
- */
13
- const pluginsConfigSchema = {
14
- // Plugin management
15
- enabled: config.array(
16
- 'FLUXSTACK_PLUGINS_ENABLED',
17
- ['logger', 'swagger', 'vite', 'cors', 'static-files', 'crypto-auth']
18
- ),
19
-
20
- disabled: config.array('FLUXSTACK_PLUGINS_DISABLED', []),
21
-
22
- // Auto-discovery
23
- autoDiscover: config.boolean('PLUGINS_AUTO_DISCOVER', true),
24
-
25
- pluginsDir: config.string('PLUGINS_DIR', 'plugins'),
26
-
27
- // Plugin-specific configurations
28
- // Logger plugin (handled by logger.config.ts)
29
- loggerEnabled: config.boolean('LOGGER_PLUGIN_ENABLED', true),
30
-
31
- // Swagger plugin
32
- swaggerEnabled: config.boolean('SWAGGER_ENABLED', true),
33
- swaggerTitle: config.string('SWAGGER_TITLE', 'FluxStack API'),
34
- swaggerVersion: config.string('SWAGGER_VERSION', FLUXSTACK_VERSION),
35
- swaggerDescription: config.string(
36
- 'SWAGGER_DESCRIPTION',
37
- 'API documentation for FluxStack application'
38
- ),
39
- swaggerPath: config.string('SWAGGER_PATH', '/swagger'),
40
-
41
- // Swagger advanced options
42
- swaggerExcludePaths: config.array('SWAGGER_EXCLUDE_PATHS', []),
43
-
44
- // Swagger servers (comma-separated list of URLs)
45
- // Format: "url1|description1,url2|description2"
46
- // Example: "https://api.prod.com|Production,https://api.staging.com|Staging"
47
- swaggerServers: config.string('SWAGGER_SERVERS', ''),
48
-
49
- // Swagger UI options
50
- swaggerPersistAuthorization: config.boolean('SWAGGER_PERSIST_AUTH', true),
51
- swaggerDisplayRequestDuration: config.boolean('SWAGGER_DISPLAY_DURATION', true),
52
- swaggerEnableFilter: config.boolean('SWAGGER_ENABLE_FILTER', true),
53
- swaggerShowExtensions: config.boolean('SWAGGER_SHOW_EXTENSIONS', true),
54
- swaggerTryItOutEnabled: config.boolean('SWAGGER_TRY_IT_OUT', true),
55
-
56
- // Swagger authentication (Basic Auth)
57
- swaggerAuthEnabled: config.boolean('SWAGGER_AUTH_ENABLED', false),
58
- swaggerAuthUsername: config.string('SWAGGER_AUTH_USERNAME', 'admin'),
59
- swaggerAuthPassword: config.string('SWAGGER_AUTH_PASSWORD', ''),
60
-
61
- // Static files plugin
62
- staticFilesEnabled: config.boolean('STATIC_FILES_ENABLED', true),
63
- staticPublicDir: config.string('STATIC_PUBLIC_DIR', 'public'),
64
- staticUploadsDir: config.string('STATIC_UPLOADS_DIR', 'uploads'),
65
- staticCacheMaxAge: config.number('STATIC_CACHE_MAX_AGE', 31536000), // 1 year
66
- staticEnableUploads: config.boolean('STATIC_ENABLE_UPLOADS', true),
67
- staticEnablePublic: config.boolean('STATIC_ENABLE_PUBLIC', true),
68
-
69
- // CORS plugin (configuration via server.config.ts)
70
- // Vite plugin
71
- viteEnabled: config.boolean('VITE_PLUGIN_ENABLED', true)
72
- } as const
73
-
74
- export const pluginsConfig = defineConfig(pluginsConfigSchema)
75
-
76
- // Export type
77
- export type PluginsConfig = typeof pluginsConfig
78
-
79
- // Export default
80
- export default pluginsConfig
1
+ export { pluginsConfig as default, pluginsConfig } from './system/plugins.config'
2
+ export type { PluginsConfig } from './system/plugins.config'
@@ -1,68 +1,2 @@
1
- /**
2
- * Server Configuration
3
- * Server-specific settings (port, host, CORS, middleware)
4
- */
5
-
6
- import { defineConfig, defineNestedConfig, config } from '@/core/utils/config-schema'
7
-
8
- /**
9
- * CORS configuration schema
10
- */
11
- const corsSchema = {
12
- origins: config.array('CORS_ORIGINS', ['http://localhost:3000', 'http://localhost:5173']),
13
- methods: config.array('CORS_METHODS', ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']),
14
- headers: config.array('CORS_HEADERS', ['Content-Type', 'Authorization']),
15
- credentials: config.boolean('CORS_CREDENTIALS', false),
16
- maxAge: config.number('CORS_MAX_AGE', 86400)
17
- } as const
18
-
19
- /**
20
- * Server configuration schema
21
- */
22
- const serverSchema = {
23
- // Server basics
24
- port: {
25
- type: 'number' as const,
26
- env: 'PORT',
27
- default: 3000,
28
- required: true,
29
- validate: (value: number) => {
30
- if (value < 1 || value > 65535) {
31
- return 'Port must be between 1 and 65535'
32
- }
33
- return true
34
- }
35
- },
36
-
37
- host: config.string('HOST', 'localhost', true),
38
-
39
- apiPrefix: {
40
- type: 'string' as const,
41
- env: 'API_PREFIX',
42
- default: '/api',
43
- validate: (value: string) => value.startsWith('/') || 'API prefix must start with /'
44
- },
45
-
46
- // Backend-only mode
47
- backendPort: config.number('BACKEND_PORT', 3001),
48
-
49
- // Features
50
- enableRequestLogging: config.boolean('ENABLE_REQUEST_LOGGING', true),
51
- showBanner: config.boolean('SHOW_SERVER_BANNER', true)
52
- } as const
53
-
54
- /**
55
- * Export server config (nested with CORS)
56
- */
57
- export const serverConfig = defineNestedConfig({
58
- server: serverSchema,
59
- cors: corsSchema
60
- })
61
-
62
- // Export types
63
- export type ServerConfig = typeof serverConfig.server
64
- export type CorsConfig = typeof serverConfig.cors
65
- export type ServerFullConfig = typeof serverConfig
66
-
67
- // Export default
68
- export default serverConfig
1
+ export { serverConfig as default, serverConfig } from './system/server.config'
2
+ export type { ServerConfig, CorsConfig, ServerFullConfig } from './system/server.config'
@@ -1,130 +1,2 @@
1
- /**
2
- * External Services Configuration
3
- * Laravel-style declarative config for third-party services
4
- */
5
-
6
- import { defineConfig, defineNestedConfig, config } from '@/core/utils/config-schema'
7
-
8
- /**
9
- * Email service configuration
10
- */
11
- const emailSchema = {
12
- // SMTP
13
- host: config.string('SMTP_HOST'),
14
-
15
- port: {
16
- type: 'number' as const,
17
- env: 'SMTP_PORT',
18
- default: 587,
19
- validate: (value: number) => value > 0 || 'SMTP port must be positive'
20
- },
21
-
22
- user: config.string('SMTP_USER'),
23
- password: config.string('SMTP_PASSWORD'),
24
-
25
- secure: config.boolean('SMTP_SECURE', false),
26
-
27
- from: {
28
- type: 'string' as const,
29
- env: 'SMTP_FROM',
30
- default: 'noreply@example.com',
31
- validate: (value: string) => {
32
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
33
- return emailRegex.test(value) || 'From email must be valid'
34
- }
35
- },
36
-
37
- replyTo: config.string('SMTP_REPLY_TO')
38
- }
39
-
40
- /**
41
- * JWT authentication configuration
42
- */
43
- const jwtSchema = {
44
- secret: {
45
- type: 'string' as const,
46
- env: 'JWT_SECRET',
47
- default: undefined,
48
- required: false,
49
- validate: (value: string) => {
50
- if (!value) return true // Optional
51
- if (value.length < 32) {
52
- return 'JWT secret must be at least 32 characters for security'
53
- }
54
- return true
55
- }
56
- },
57
-
58
- expiresIn: config.string('JWT_EXPIRES_IN', '24h'),
59
-
60
- algorithm: config.enum(
61
- 'JWT_ALGORITHM',
62
- ['HS256', 'HS384', 'HS512', 'RS256', 'RS384', 'RS512'] as const,
63
- 'HS256'
64
- ),
65
-
66
- issuer: config.string('JWT_ISSUER', 'fluxstack'),
67
-
68
- audience: config.string('JWT_AUDIENCE')
69
- }
70
-
71
- /**
72
- * Storage configuration
73
- */
74
- const storageSchema = {
75
- provider: config.enum(
76
- 'STORAGE_PROVIDER',
77
- ['local', 's3', 'gcs', 'azure'] as const,
78
- 'local'
79
- ),
80
-
81
- uploadPath: config.string('UPLOAD_PATH', './uploads'),
82
-
83
- maxFileSize: {
84
- type: 'number' as const,
85
- env: 'MAX_FILE_SIZE',
86
- default: 10485760, // 10MB
87
- validate: (value: number) => value > 0 || 'Max file size must be positive'
88
- },
89
-
90
- allowedTypes: config.array('ALLOWED_FILE_TYPES', ['image/*', 'application/pdf']),
91
-
92
- // S3 specific
93
- s3Bucket: config.string('S3_BUCKET'),
94
- s3Region: config.string('S3_REGION', 'us-east-1'),
95
- s3AccessKey: config.string('S3_ACCESS_KEY'),
96
- s3SecretKey: config.string('S3_SECRET_KEY')
97
- }
98
-
99
- /**
100
- * Redis configuration
101
- */
102
- const redisSchema = {
103
- host: config.string('REDIS_HOST', 'localhost'),
104
- port: config.number('REDIS_PORT', 6379),
105
- password: config.string('REDIS_PASSWORD'),
106
- db: config.number('REDIS_DB', 0),
107
-
108
- keyPrefix: config.string('REDIS_KEY_PREFIX', 'fluxstack:'),
109
-
110
- enableTls: config.boolean('REDIS_TLS', false)
111
- }
112
-
113
- /**
114
- * Export all service configs as nested object
115
- */
116
- export const servicesConfig = defineNestedConfig({
117
- email: emailSchema,
118
- jwt: jwtSchema,
119
- storage: storageSchema,
120
- redis: redisSchema
121
- })
122
-
123
- // Export types
124
- export type EmailConfig = typeof servicesConfig.email
125
- export type JWTConfig = typeof servicesConfig.jwt
126
- export type StorageConfig = typeof servicesConfig.storage
127
- export type RedisConfig = typeof servicesConfig.redis
128
-
129
- // Export default
130
- export default servicesConfig
1
+ export { servicesConfig as default, servicesConfig } from './system/services.config'
2
+ export type { ServicesConfig } from './system/services.config'
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Application Configuration
3
+ * Core application settings and metadata
4
+ */
5
+
6
+ import { defineConfig, config } from '@core/utils/config-schema'
7
+
8
+ /**
9
+ * App configuration schema
10
+ */
11
+ export const appConfig = defineConfig({
12
+ // Application metadata
13
+ name: config.string('APP_NAME', 'fluxstack-app', true),
14
+ version: config.string('APP_VERSION', '1.0.0', true),
15
+ description: config.string('APP_DESCRIPTION', 'A FluxStack application', false),
16
+ env: config.enum('NODE_ENV', ['development', 'production', 'test'] as const, 'development', false),
17
+
18
+ // Runtime mode (set by CLI: --backend-only, --frontend-only)
19
+ mode: config.enum('FLUXSTACK_MODE', ['full-stack', 'backend-only', 'frontend-only'] as const, 'full-stack', false),
20
+
21
+ // Security
22
+ trustProxy: config.boolean('APP_TRUST_PROXY', false),
23
+ sessionSecret: config.string('APP_SESSION_SECRET', '')
24
+ })
25
+
26
+ // Export type
27
+ export type AppConfig = typeof appConfig
28
+
29
+ export default appConfig
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Build Configuration
3
+ * Server build and optimization settings
4
+ */
5
+
6
+ import { defineConfig, defineNestedConfig, config } from '@core/utils/config-schema'
7
+ import { helpers } from '@core/utils/env'
8
+
9
+ /**
10
+ * Build optimization schema
11
+ */
12
+ const optimizationSchema = {
13
+ minify: config.boolean('BUILD_MINIFY', helpers.isProduction()),
14
+ treeshake: config.boolean('BUILD_TREESHAKE', true),
15
+ compress: config.boolean('BUILD_COMPRESS', helpers.isProduction()),
16
+ splitChunks: config.boolean('BUILD_SPLIT_CHUNKS', true),
17
+ bundleAnalyzer: config.boolean('BUILD_BUNDLE_ANALYZER', false),
18
+ removeUnusedCSS: config.boolean('BUILD_REMOVE_UNUSED_CSS', false),
19
+ optimizeImages: config.boolean('BUILD_OPTIMIZE_IMAGES', false)
20
+ } as const
21
+
22
+ /**
23
+ * Build configuration schema
24
+ */
25
+ const buildSchema = {
26
+ target: config.enum('BUILD_TARGET', ['bun', 'node', 'docker'] as const, 'bun', true),
27
+ outDir: config.string('BUILD_OUT_DIR', 'dist', true),
28
+ sourceMaps: config.boolean('BUILD_SOURCE_MAPS', helpers.isDevelopment()),
29
+ clean: config.boolean('BUILD_CLEAN', true),
30
+ mode: config.enum('BUILD_MODE', ['development', 'production'] as const, helpers.isProduction() ? 'production' : 'development'),
31
+ external: config.array('BUILD_EXTERNAL', []),
32
+ optimize: config.boolean('BUILD_OPTIMIZE', true)
33
+ } as const
34
+
35
+ /**
36
+ * Export build config (nested with optimization)
37
+ */
38
+ export const buildConfig = defineNestedConfig({
39
+ build: buildSchema,
40
+ optimization: optimizationSchema
41
+ })
42
+
43
+ // Export types
44
+ export type BuildConfig = typeof buildConfig.build
45
+ export type OptimizationConfig = typeof buildConfig.optimization
46
+ export type BuildFullConfig = typeof buildConfig
47
+
48
+ // Export default
49
+ export default buildConfig
@@ -0,0 +1,68 @@
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', true),
18
+
19
+ open: config.boolean('VITE_OPEN', false),
20
+
21
+ enableLogging: config.boolean('ENABLE_VITE_PROXY_LOGS', false),
22
+
23
+ logLevel: config.enum('VITE_LOG_LEVEL', ['error' , 'warn' , 'info', 'silent'], undefined),
24
+
25
+ allowedHosts: config.array('VITE_ALLOWED_HOSTS', ['localhost'])
26
+ } as const
27
+
28
+ /**
29
+ * Client Build Configuration
30
+ */
31
+ const buildSchema = {
32
+ outDir: config.string('CLIENT_OUTDIR', 'dist/client'),
33
+
34
+ sourceMaps: config.boolean('CLIENT_SOURCEMAPS', helpers.isDevelopment()),
35
+
36
+ minify: config.boolean('CLIENT_MINIFY', helpers.isProduction()),
37
+
38
+ target: config.string('CLIENT_TARGET', 'esnext'),
39
+
40
+ assetsDir: config.string('CLIENT_ASSETS_DIR', 'assets'),
41
+
42
+ cssCodeSplit: config.boolean('CLIENT_CSS_CODE_SPLIT', true),
43
+
44
+ chunkSizeWarningLimit: config.number('CLIENT_CHUNK_SIZE_WARNING', 500), // KB
45
+
46
+ emptyOutDir: config.boolean('CLIENT_EMPTY_OUTDIR', true)
47
+ } as const
48
+
49
+ /**
50
+ * Client Configuration (nested)
51
+ */
52
+ export const clientConfig = defineNestedConfig({
53
+ vite: viteSchema,
54
+ build: buildSchema,
55
+ })
56
+
57
+ // ℹ️ Proxy config removed: Not needed in FluxStack architecture
58
+ // All requests go through Elysia (localhost:3000):
59
+ // - /api, /swagger → Elysia handlers (viteExcludePaths)
60
+ // - Everything else → Proxy to Vite dev server (handled by core/plugins/built-in/vite)
61
+
62
+ // Export types
63
+ export type ViteConfig = typeof clientConfig.vite
64
+ export type ClientBuildConfig = typeof clientConfig.build
65
+ export type ClientConfig = typeof clientConfig
66
+
67
+ // Export default
68
+ export default clientConfig
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Database Configuration
3
+ * Optional database settings for backward compatibility
4
+ */
5
+
6
+ import { defineConfig, config } from '@core/utils/config-schema'
7
+
8
+ export const databaseConfig = defineConfig({
9
+ url: config.string('DATABASE_URL', ''),
10
+ provider: config.enum('DATABASE_PROVIDER', ['postgres', 'mysql', 'sqlite', 'mssql', 'mongodb'] as const, 'postgres'),
11
+ connectionTimeout: config.number('DATABASE_CONNECTION_TIMEOUT', 5000),
12
+ ssl: config.boolean('DATABASE_SSL', false)
13
+ })
14
+
15
+ export type DatabaseConfig = typeof databaseConfig
16
+
17
+ export default databaseConfig
@@ -0,0 +1,114 @@
1
+ /**
2
+ * FluxStack Main Configuration
3
+ * Composes all modular system configs into a single unified configuration
4
+ *
5
+ * ✨ 100% modular and type-safe using defineConfig
6
+ * ✨ No composer needed - direct config composition
7
+ * ✨ All configs use defineConfig for automatic validation and inference
8
+ */
9
+
10
+ import { appConfig } from './app.config'
11
+ import { serverConfig } from './server.config'
12
+ import { clientConfig } from './client.config'
13
+ import { buildConfig } from './build.config'
14
+ import { loggerConfig } from './logger.config'
15
+ import { pluginsConfig } from './plugins.config'
16
+ import { monitoringConfig } from './monitoring.config'
17
+ import { appRuntimeConfig } from './runtime.config'
18
+ import { systemConfig } from './system.config'
19
+ import { databaseConfig } from './database.config'
20
+ import { servicesConfig } from './services.config'
21
+
22
+ const serverWithCors = {
23
+ ...serverConfig.server,
24
+ cors: {
25
+ origins: serverConfig.cors.origins,
26
+ methods: serverConfig.cors.methods,
27
+ headers: serverConfig.cors.headers,
28
+ credentials: serverConfig.cors.credentials,
29
+ maxAge: serverConfig.cors.maxAge
30
+ }
31
+ }
32
+
33
+ const client = {
34
+ port: clientConfig.vite.port,
35
+ host: clientConfig.vite.host,
36
+ build: {
37
+ ...clientConfig.build,
38
+ sourceMaps: true
39
+ }
40
+ }
41
+
42
+ const monitoring = {
43
+ ...monitoringConfig.monitoring,
44
+ metrics: monitoringConfig.metrics,
45
+ profiling: monitoringConfig.profiling
46
+ }
47
+
48
+ const environments = {
49
+ development: {
50
+ logging: { level: 'debug', format: 'pretty' },
51
+ build: { optimization: { ...buildConfig.optimization, minify: false } }
52
+ },
53
+ production: {
54
+ logging: { level: 'warn', format: 'json' },
55
+ monitoring: { enabled: true }
56
+ },
57
+ test: {
58
+ logging: { level: 'error', format: 'pretty' },
59
+ server: { port: 0 },
60
+ client: { port: 0 }
61
+ }
62
+ }
63
+
64
+ /**
65
+ * FluxStack complete configuration
66
+ * Direct composition of all modular configs
67
+ */
68
+ export const fluxStackConfig = {
69
+ // Core system configs
70
+ app: appConfig,
71
+ server: serverWithCors,
72
+ client,
73
+ build: {
74
+ ...buildConfig.build,
75
+ optimization: {
76
+ ...buildConfig.optimization,
77
+ minify: true
78
+ }
79
+ },
80
+
81
+ // CORS (from server)
82
+ cors: serverConfig.cors,
83
+
84
+ // Client Build (from client)
85
+ clientBuild: clientConfig.build,
86
+
87
+ // Build optimization
88
+ optimization: buildConfig.optimization,
89
+
90
+ // Logging, plugins, monitoring
91
+ logging: loggerConfig,
92
+ plugins: pluginsConfig,
93
+ monitoring,
94
+
95
+ // Runtime & system
96
+ runtime: appRuntimeConfig.values,
97
+ system: systemConfig,
98
+ database: databaseConfig,
99
+ services: servicesConfig,
100
+
101
+ // Environment defaults (backward compatibility)
102
+ environments
103
+ } as const
104
+
105
+ /**
106
+ * Type for the complete FluxStack configuration
107
+ */
108
+ export type FluxStackConfig = typeof fluxStackConfig
109
+
110
+ /**
111
+ * Named exports
112
+ */
113
+ export default fluxStackConfig
114
+ export { fluxStackConfig as config }
@@ -3,11 +3,12 @@
3
3
  * Declarative logger config using FluxStack config system
4
4
  */
5
5
 
6
- import { defineConfig, config } from '@/core/utils/config-schema'
6
+ import { defineConfig, config } from '@core/utils/config-schema'
7
7
 
8
8
  export const loggerConfig = defineConfig({
9
9
  // Log level
10
10
  level: config.enum('LOG_LEVEL', ['debug', 'info', 'warn', 'error'] as const, 'info'),
11
+ format: config.enum('LOG_FORMAT', ['pretty', 'json'] as const, 'pretty'),
11
12
 
12
13
  // Format settings
13
14
  dateFormat: config.string('LOG_DATE_FORMAT', 'YYYY-MM-DD HH:mm:ss'),
@@ -17,6 +18,7 @@ export const loggerConfig = defineConfig({
17
18
  logToFile: config.boolean('LOG_TO_FILE', false),
18
19
  maxSize: config.string('LOG_MAX_SIZE', '20m'),
19
20
  maxFiles: config.string('LOG_MAX_FILES', '14d'),
21
+ transports: config.array('LOG_TRANSPORTS', ['console']),
20
22
 
21
23
  // Display options
22
24
  enableColors: config.boolean('LOG_COLORS', true),