create-fluxstack 1.10.1 → 1.12.1

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 +161 -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 +127 -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
@@ -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),
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Monitoring Configuration
3
+ * Declarative monitoring, metrics and profiling configuration
4
+ */
5
+
6
+ import { defineConfig, defineNestedConfig, config } from '@core/utils/config-schema'
7
+ import { helpers } from '@core/utils/env'
8
+
9
+ /**
10
+ * Metrics Configuration Schema
11
+ */
12
+ const metricsSchema = {
13
+ enabled: config.boolean('ENABLE_METRICS', false),
14
+
15
+ collectInterval: {
16
+ type: 'number' as const,
17
+ env: 'METRICS_INTERVAL',
18
+ default: 5000,
19
+ validate: (value: number) => {
20
+ if (value < 1000) {
21
+ return 'Metrics interval must be at least 1000ms'
22
+ }
23
+ return true
24
+ }
25
+ },
26
+
27
+ httpMetrics: config.boolean('HTTP_METRICS', true),
28
+
29
+ systemMetrics: config.boolean('SYSTEM_METRICS', true),
30
+
31
+ customMetrics: config.boolean('CUSTOM_METRICS', false),
32
+
33
+ // Metric exporters
34
+ exportToConsole: config.boolean('METRICS_EXPORT_CONSOLE', helpers.isDevelopment()),
35
+
36
+ exportToFile: config.boolean('METRICS_EXPORT_FILE', false),
37
+
38
+ exportToHttp: config.boolean('METRICS_EXPORT_HTTP', false),
39
+
40
+ exportHttpUrl: config.string('METRICS_EXPORT_URL'),
41
+
42
+ // Metric storage
43
+ retentionPeriod: config.number('METRICS_RETENTION_PERIOD', 3600000), // 1 hour in ms
44
+
45
+ maxDataPoints: config.number('METRICS_MAX_DATA_POINTS', 1000)
46
+ } as const
47
+
48
+ /**
49
+ * Profiling Configuration Schema
50
+ */
51
+ const profilingSchema = {
52
+ enabled: config.boolean('PROFILING_ENABLED', false),
53
+
54
+ sampleRate: {
55
+ type: 'number' as const,
56
+ env: 'PROFILING_SAMPLE_RATE',
57
+ default: helpers.isProduction() ? 0.01 : 0.1,
58
+ validate: (value: number) => {
59
+ if (value < 0 || value > 1) {
60
+ return 'Sample rate must be between 0 and 1'
61
+ }
62
+ return true
63
+ }
64
+ },
65
+
66
+ memoryProfiling: config.boolean('MEMORY_PROFILING', false),
67
+
68
+ cpuProfiling: config.boolean('CPU_PROFILING', false),
69
+
70
+ heapSnapshot: config.boolean('HEAP_SNAPSHOT', false),
71
+
72
+ // Profiling output
73
+ outputDir: config.string('PROFILING_OUTPUT_DIR', 'profiling'),
74
+
75
+ maxProfiles: config.number('PROFILING_MAX_PROFILES', 10)
76
+ } as const
77
+
78
+ /**
79
+ * Monitoring Configuration Schema
80
+ */
81
+ const monitoringSchema = {
82
+ enabled: config.boolean('ENABLE_MONITORING', false),
83
+
84
+ // Exporters
85
+ exporters: config.array('MONITORING_EXPORTERS', []),
86
+
87
+ // Health checks
88
+ enableHealthChecks: config.boolean('ENABLE_HEALTH_CHECKS', true),
89
+
90
+ healthCheckInterval: config.number('HEALTH_CHECK_INTERVAL', 30000), // 30s
91
+
92
+ // Alerting
93
+ enableAlerts: config.boolean('ENABLE_ALERTS', false),
94
+
95
+ alertWebhook: config.string('ALERT_WEBHOOK')
96
+ } as const
97
+
98
+ /**
99
+ * Export monitoring config (nested)
100
+ */
101
+ export const monitoringConfig = defineNestedConfig({
102
+ monitoring: monitoringSchema,
103
+ metrics: metricsSchema,
104
+ profiling: profilingSchema
105
+ })
106
+
107
+ // Export types
108
+ export type MonitoringConfig = typeof monitoringConfig.monitoring
109
+ export type MetricsConfig = typeof monitoringConfig.metrics
110
+ export type ProfilingConfig = typeof monitoringConfig.profiling
111
+ export type MonitoringFullConfig = typeof monitoringConfig
112
+
113
+ // Export default
114
+ export default monitoringConfig
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Plugins Configuration
3
+ * Declarative plugin management configuration
4
+ */
5
+
6
+ import { defineConfig, config } from '@core/utils/config-schema'
7
+ import { FLUXSTACK_VERSION } from '@core/utils/version'
8
+
9
+ const defaultPluginConfigs = {
10
+ swagger: {
11
+ title: 'FluxStack API',
12
+ version: FLUXSTACK_VERSION,
13
+ description: 'API documentation for FluxStack application',
14
+ path: '/swagger'
15
+ },
16
+ staticFiles: {
17
+ publicDir: 'public',
18
+ uploadsDir: 'uploads'
19
+ }
20
+ }
21
+
22
+ export const pluginsConfig = defineConfig({
23
+ enabled: config.array(
24
+ 'FLUXSTACK_PLUGINS_ENABLED',
25
+ ['logger', 'swagger', 'vite', 'cors', 'static-files']
26
+ ),
27
+
28
+ disabled: config.array('FLUXSTACK_PLUGINS_DISABLED', []),
29
+
30
+ autoDiscover: config.boolean('PLUGINS_AUTO_DISCOVER', true),
31
+
32
+ pluginsDir: config.string('PLUGINS_DIR', 'plugins'),
33
+
34
+ discoverNpmPlugins: config.boolean('PLUGINS_DISCOVER_NPM', false),
35
+ discoverProjectPlugins: config.boolean('PLUGINS_DISCOVER_PROJECT', true),
36
+
37
+ allowedPlugins: config.array('PLUGINS_ALLOWED', []),
38
+ config: {
39
+ type: 'object' as const,
40
+ default: defaultPluginConfigs
41
+ },
42
+
43
+ loggerEnabled: config.boolean('LOGGER_PLUGIN_ENABLED', true),
44
+
45
+ swaggerEnabled: config.boolean('SWAGGER_ENABLED', true),
46
+ swaggerTitle: config.string('SWAGGER_TITLE', 'FluxStack API'),
47
+ swaggerVersion: config.string('SWAGGER_VERSION', FLUXSTACK_VERSION),
48
+ swaggerDescription: config.string(
49
+ 'SWAGGER_DESCRIPTION',
50
+ 'API documentation for FluxStack application'
51
+ ),
52
+ swaggerPath: config.string('SWAGGER_PATH', '/swagger'),
53
+
54
+ swaggerExcludePaths: config.array('SWAGGER_EXCLUDE_PATHS', []),
55
+
56
+ swaggerServers: config.string('SWAGGER_SERVERS', ''),
57
+
58
+ swaggerPersistAuthorization: config.boolean('SWAGGER_PERSIST_AUTH', true),
59
+ swaggerDisplayRequestDuration: config.boolean('SWAGGER_DISPLAY_DURATION', true),
60
+ swaggerEnableFilter: config.boolean('SWAGGER_ENABLE_FILTER', true),
61
+ swaggerShowExtensions: config.boolean('SWAGGER_SHOW_EXTENSIONS', true),
62
+ swaggerTryItOutEnabled: config.boolean('SWAGGER_TRY_IT_OUT', true),
63
+
64
+ swaggerAuthEnabled: config.boolean('SWAGGER_AUTH_ENABLED', false),
65
+ swaggerAuthUsername: config.string('SWAGGER_AUTH_USERNAME', 'admin'),
66
+ swaggerAuthPassword: config.string('SWAGGER_AUTH_PASSWORD', ''),
67
+
68
+ staticFilesEnabled: config.boolean('STATIC_FILES_ENABLED', true),
69
+ staticPublicDir: config.string('STATIC_PUBLIC_DIR', 'public'),
70
+ staticUploadsDir: config.string('STATIC_UPLOADS_DIR', 'uploads'),
71
+ staticCacheMaxAge: config.number('STATIC_CACHE_MAX_AGE', 31536000),
72
+ staticEnableUploads: config.boolean('STATIC_ENABLE_UPLOADS', true),
73
+ staticEnablePublic: config.boolean('STATIC_ENABLE_PUBLIC', true),
74
+
75
+ viteEnabled: config.boolean('VITE_PLUGIN_ENABLED', true),
76
+ viteExcludePaths: config.array('VITE_EXCLUDE_PATHS', [
77
+ '/api',
78
+ '/swagger'
79
+ ])
80
+ })
81
+
82
+ export type PluginsConfig = typeof pluginsConfig
83
+
84
+ export default pluginsConfig
@@ -3,7 +3,7 @@
3
3
  * Configs that can be reloaded without server restart
4
4
  */
5
5
 
6
- import { defineReactiveConfig, config } from '@/core/utils/config-schema'
6
+ import { defineReactiveConfig, config } from '@core/utils/config-schema'
7
7
 
8
8
  /**
9
9
  * Runtime app configuration
@@ -0,0 +1,68 @@
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
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Services Configuration
3
+ * Optional service settings (email, JWT, storage, redis) for compatibility
4
+ */
5
+
6
+ import { defineNestedConfig, config } from '@core/utils/config-schema'
7
+
8
+ const emailSchema = {
9
+ host: config.string('MAIL_HOST', 'smtp.example.com'),
10
+ port: config.number('MAIL_PORT', 587),
11
+ username: config.string('MAIL_USERNAME', ''),
12
+ password: config.string('MAIL_PASSWORD', ''),
13
+ fromAddress: config.string('MAIL_FROM_ADDRESS', 'no-reply@example.com'),
14
+ secure: config.boolean('MAIL_SECURE', false)
15
+ } as const
16
+
17
+ const jwtSchema = {
18
+ secret: config.string('JWT_SECRET', 'change-me'),
19
+ expiresIn: config.string('JWT_EXPIRES_IN', '1h'),
20
+ audience: config.string('JWT_AUDIENCE', 'fluxstack'),
21
+ issuer: config.string('JWT_ISSUER', 'fluxstack')
22
+ } as const
23
+
24
+ const storageSchema = {
25
+ driver: config.enum('STORAGE_DRIVER', ['local', 's3'] as const, 'local'),
26
+ localDir: config.string('STORAGE_LOCAL_DIR', 'uploads'),
27
+ s3Bucket: config.string('STORAGE_S3_BUCKET', ''),
28
+ s3Region: config.string('STORAGE_S3_REGION', ''),
29
+ s3Endpoint: config.string('STORAGE_S3_ENDPOINT', '')
30
+ } as const
31
+
32
+ const redisSchema = {
33
+ enabled: config.boolean('REDIS_ENABLED', false),
34
+ url: config.string('REDIS_URL', 'redis://localhost:6379')
35
+ } as const
36
+
37
+ export const servicesConfig = defineNestedConfig({
38
+ email: emailSchema,
39
+ jwt: jwtSchema,
40
+ storage: storageSchema,
41
+ redis: redisSchema
42
+ })
43
+
44
+ export type ServicesConfig = typeof servicesConfig
45
+
46
+ export default servicesConfig
@@ -3,7 +3,7 @@
3
3
  * System information and environment variables
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
  /**
9
9
  * System environment variables config