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,18 +1,18 @@
1
- /**
2
- * FluxStack Utilities
3
- * Main exports for utility functions and classes
4
- */
5
-
6
- // Logger utilities
7
- export { logger, log } from "./logger"
8
- export type { Logger } from "./logger/index"
9
-
10
- // Error handling
11
- export * from "./errors"
12
-
13
- // Monitoring
14
- export { MetricsCollector } from "./monitoring"
15
- export type * from "./monitoring"
16
-
17
- // General helpers
1
+ /**
2
+ * FluxStack Utilities
3
+ * Main exports for utility functions and classes
4
+ */
5
+
6
+ // Logger utilities
7
+ export { logger, log } from "./logger"
8
+ export type { Logger } from "./logger/index"
9
+
10
+ // Error handling
11
+ export * from "./errors"
12
+
13
+ // Monitoring
14
+ export { MetricsCollector } from "./monitoring"
15
+ export type * from "./monitoring"
16
+
17
+ // General helpers
18
18
  export * from "./helpers"
@@ -1,114 +1,114 @@
1
- /**
2
- * FluxStack Logger - Color Management
3
- * Generates unique colors for each module
4
- */
5
-
6
- import chalk, { type ChalkInstance } from 'chalk'
7
-
8
- // Cache for module colors
9
- const moduleColors = new Map<string, ChalkInstance>()
10
-
11
- /**
12
- * Pre-defined colors for common modules
13
- */
14
- const COMMON_MODULE_COLORS: Record<string, string> = {
15
- api: '#4CAF50', // Green
16
- db: '#2196F3', // Blue
17
- auth: '#FF9800', // Orange
18
- user: '#9C27B0', // Purple
19
- config: '#00BCD4', // Cyan
20
- utils: '#607D8B', // Blue Gray
21
- routes: '#E91E63', // Pink
22
- controllers: '#3F51B5', // Indigo
23
- models: '#009688', // Teal
24
- services: '#FF5722', // Deep Orange
25
- plugins: '#673AB7', // Deep Purple
26
- middleware: '#795548', // Brown
27
- live: '#00E676', // Green Accent
28
- websocket: '#00B0FF', // Light Blue Accent
29
- build: '#FFC107', // Amber
30
- cli: '#CDDC39' // Lime
31
- }
32
-
33
- /**
34
- * Symbols for different log levels
35
- */
36
- export const LOG_SYMBOLS = {
37
- error: chalk.red('✖'),
38
- warn: chalk.yellow('⚠'),
39
- info: chalk.blue('ℹ'),
40
- debug: chalk.magenta('⬤'),
41
- default: chalk.gray('•')
42
- } as const
43
-
44
- /**
45
- * Colors for different log levels
46
- */
47
- export const LEVEL_COLORS = {
48
- error: chalk.bold.red,
49
- warn: chalk.bold.yellow,
50
- info: chalk.bold.blue,
51
- debug: chalk.bold.magenta,
52
- default: chalk.bold.gray
53
- } as const
54
-
55
- /**
56
- * Generate a unique color for a module based on its name
57
- */
58
- export function getColorForModule(moduleName: string): ChalkInstance {
59
- // Check cache first
60
- if (moduleColors.has(moduleName)) {
61
- return moduleColors.get(moduleName)!
62
- }
63
-
64
- // Check if module name contains a common module keyword
65
- for (const [key, hexColor] of Object.entries(COMMON_MODULE_COLORS)) {
66
- if (moduleName.toLowerCase().includes(key)) {
67
- const color = chalk.hex(hexColor)
68
- moduleColors.set(moduleName, color)
69
- return color
70
- }
71
- }
72
-
73
- // Generate color from module name hash
74
- let hash = 0
75
- for (let i = 0; i < moduleName.length; i++) {
76
- hash = moduleName.charCodeAt(i) + ((hash << 5) - hash)
77
- }
78
-
79
- // Generate pleasant color using HSL
80
- const h = Math.abs(hash) % 360
81
- const s = 65 + (Math.abs(hash) % 20) // Saturation 65-85%
82
- const l = 45 + (Math.abs(hash) % 15) // Lightness 45-60%
83
-
84
- const hexColor = hslToHex(h, s, l)
85
- const color = chalk.hex(hexColor)
86
-
87
- moduleColors.set(moduleName, color)
88
- return color
89
- }
90
-
91
- /**
92
- * Convert HSL to Hex color
93
- */
94
- function hslToHex(h: number, s: number, l: number): string {
95
- s /= 100
96
- l /= 100
97
-
98
- const k = (n: number) => (n + h / 30) % 12
99
- const a = s * Math.min(l, 1 - l)
100
- const f = (n: number) => l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)))
101
-
102
- const r = Math.round(255 * f(0))
103
- const g = Math.round(255 * f(8))
104
- const b = Math.round(255 * f(4))
105
-
106
- return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`
107
- }
108
-
109
- /**
110
- * Clear color cache (useful for testing)
111
- */
112
- export function clearColorCache(): void {
113
- moduleColors.clear()
114
- }
1
+ /**
2
+ * FluxStack Logger - Color Management
3
+ * Generates unique colors for each module
4
+ */
5
+
6
+ import chalk, { type ChalkInstance } from 'chalk'
7
+
8
+ // Cache for module colors
9
+ const moduleColors = new Map<string, ChalkInstance>()
10
+
11
+ /**
12
+ * Pre-defined colors for common modules
13
+ */
14
+ const COMMON_MODULE_COLORS: Record<string, string> = {
15
+ api: '#4CAF50', // Green
16
+ db: '#2196F3', // Blue
17
+ auth: '#FF9800', // Orange
18
+ user: '#9C27B0', // Purple
19
+ config: '#00BCD4', // Cyan
20
+ utils: '#607D8B', // Blue Gray
21
+ routes: '#E91E63', // Pink
22
+ controllers: '#3F51B5', // Indigo
23
+ models: '#009688', // Teal
24
+ services: '#FF5722', // Deep Orange
25
+ plugins: '#673AB7', // Deep Purple
26
+ middleware: '#795548', // Brown
27
+ live: '#00E676', // Green Accent
28
+ websocket: '#00B0FF', // Light Blue Accent
29
+ build: '#FFC107', // Amber
30
+ cli: '#CDDC39' // Lime
31
+ }
32
+
33
+ /**
34
+ * Symbols for different log levels
35
+ */
36
+ export const LOG_SYMBOLS = {
37
+ error: chalk.red('✖'),
38
+ warn: chalk.yellow('⚠'),
39
+ info: chalk.blue('ℹ'),
40
+ debug: chalk.magenta('⬤'),
41
+ default: chalk.gray('•')
42
+ } as const
43
+
44
+ /**
45
+ * Colors for different log levels
46
+ */
47
+ export const LEVEL_COLORS = {
48
+ error: chalk.bold.red,
49
+ warn: chalk.bold.yellow,
50
+ info: chalk.bold.blue,
51
+ debug: chalk.bold.magenta,
52
+ default: chalk.bold.gray
53
+ } as const
54
+
55
+ /**
56
+ * Generate a unique color for a module based on its name
57
+ */
58
+ export function getColorForModule(moduleName: string): ChalkInstance {
59
+ // Check cache first
60
+ if (moduleColors.has(moduleName)) {
61
+ return moduleColors.get(moduleName)!
62
+ }
63
+
64
+ // Check if module name contains a common module keyword
65
+ for (const [key, hexColor] of Object.entries(COMMON_MODULE_COLORS)) {
66
+ if (moduleName.toLowerCase().includes(key)) {
67
+ const color = chalk.hex(hexColor)
68
+ moduleColors.set(moduleName, color)
69
+ return color
70
+ }
71
+ }
72
+
73
+ // Generate color from module name hash
74
+ let hash = 0
75
+ for (let i = 0; i < moduleName.length; i++) {
76
+ hash = moduleName.charCodeAt(i) + ((hash << 5) - hash)
77
+ }
78
+
79
+ // Generate pleasant color using HSL
80
+ const h = Math.abs(hash) % 360
81
+ const s = 65 + (Math.abs(hash) % 20) // Saturation 65-85%
82
+ const l = 45 + (Math.abs(hash) % 15) // Lightness 45-60%
83
+
84
+ const hexColor = hslToHex(h, s, l)
85
+ const color = chalk.hex(hexColor)
86
+
87
+ moduleColors.set(moduleName, color)
88
+ return color
89
+ }
90
+
91
+ /**
92
+ * Convert HSL to Hex color
93
+ */
94
+ function hslToHex(h: number, s: number, l: number): string {
95
+ s /= 100
96
+ l /= 100
97
+
98
+ const k = (n: number) => (n + h / 30) % 12
99
+ const a = s * Math.min(l, 1 - l)
100
+ const f = (n: number) => l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)))
101
+
102
+ const r = Math.round(255 * f(0))
103
+ const g = Math.round(255 * f(8))
104
+ const b = Math.round(255 * f(4))
105
+
106
+ return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`
107
+ }
108
+
109
+ /**
110
+ * Clear color cache (useful for testing)
111
+ */
112
+ export function clearColorCache(): void {
113
+ moduleColors.clear()
114
+ }
@@ -3,10 +3,11 @@
3
3
  * Re-export from declarative config
4
4
  */
5
5
 
6
- import { loggerConfig } from '@/config/logger.config'
6
+ import { loggerConfig } from '@config'
7
7
 
8
8
  export interface LoggerConfig {
9
9
  level: 'debug' | 'info' | 'warn' | 'error'
10
+ format: 'pretty' | 'json'
10
11
  dateFormat: string
11
12
  logToFile: boolean
12
13
  maxSize: string
@@ -14,6 +15,7 @@ export interface LoggerConfig {
14
15
  objectDepth: number
15
16
  enableColors: boolean
16
17
  enableStackTrace: boolean
18
+ transports: string[]
17
19
  }
18
20
 
19
21
  /**
@@ -21,14 +23,16 @@ export interface LoggerConfig {
21
23
  */
22
24
  export function getLoggerConfig(): LoggerConfig {
23
25
  return {
24
- level: loggerConfig.level,
25
- dateFormat: loggerConfig.dateFormat,
26
- logToFile: loggerConfig.logToFile,
27
- maxSize: loggerConfig.maxSize,
28
- maxFiles: loggerConfig.maxFiles,
29
- objectDepth: loggerConfig.objectDepth,
30
- enableColors: loggerConfig.enableColors,
31
- enableStackTrace: loggerConfig.enableStackTrace
26
+ level: loggerConfig.level ?? 'info',
27
+ format: (loggerConfig as any).format ?? 'pretty',
28
+ dateFormat: loggerConfig.dateFormat ?? 'YYYY-MM-DD HH:mm:ss',
29
+ logToFile: loggerConfig.logToFile ?? false,
30
+ maxSize: loggerConfig.maxSize ?? '20m',
31
+ maxFiles: loggerConfig.maxFiles ?? '14d',
32
+ objectDepth: loggerConfig.objectDepth ?? 4,
33
+ enableColors: loggerConfig.enableColors ?? true,
34
+ enableStackTrace: loggerConfig.enableStackTrace ?? true,
35
+ transports: (loggerConfig as any).transports ?? ['console']
32
36
  }
33
37
  }
34
38
 
@@ -1,82 +1,82 @@
1
- /**
2
- * FluxStack Logger - Message Formatter
3
- * Formats log messages with proper object inspection
4
- */
5
-
6
- import { inspect } from 'util'
7
- import { LOGGER_CONFIG } from './config'
8
-
9
- /**
10
- * Format a log message with proper object inspection
11
- */
12
- export function formatMessage(message: unknown, args: unknown[] = []): string {
13
- const inspectOptions = {
14
- depth: LOGGER_CONFIG.objectDepth,
15
- colors: LOGGER_CONFIG.enableColors,
16
- compact: false,
17
- breakLength: 100
18
- }
19
-
20
- // Format the main message
21
- let formattedMessage: string
22
-
23
- if (typeof message === 'string') {
24
- formattedMessage = message
25
- } else if (message instanceof Error) {
26
- // Special handling for Error objects
27
- formattedMessage = `${message.name}: ${message.message}\n${message.stack || ''}`
28
- } else if (typeof message === 'object' && message !== null) {
29
- // Use util.inspect for better object formatting
30
- formattedMessage = inspect(message, inspectOptions)
31
- } else {
32
- formattedMessage = String(message)
33
- }
34
-
35
- // Format additional arguments (skip undefined values)
36
- if (args.length > 0) {
37
- const formattedArgs = args
38
- .filter(arg => arg !== undefined) // Skip undefined values
39
- .map(arg => {
40
- if (typeof arg === 'object' && arg !== null) {
41
- return inspect(arg, inspectOptions)
42
- }
43
- return String(arg)
44
- })
45
- .join(' ')
46
-
47
- // Only add formatted args if there are any after filtering
48
- if (formattedArgs.length > 0) {
49
- return `${formattedMessage} ${formattedArgs}`
50
- }
51
- }
52
-
53
- return formattedMessage
54
- }
55
-
56
- /**
57
- * Format a section title
58
- */
59
- export function formatSection(title: string): string {
60
- return `=== ${title.toUpperCase()} ===`
61
- }
62
-
63
- /**
64
- * Format an important message
65
- */
66
- export function formatImportant(title: string): string {
67
- return `■ ${title.toUpperCase()} ■`
68
- }
69
-
70
- /**
71
- * Format operation start
72
- */
73
- export function formatOperationStart(operation: string): string {
74
- return `▶ INICIANDO: ${operation}`
75
- }
76
-
77
- /**
78
- * Format operation success
79
- */
80
- export function formatOperationSuccess(operation: string): string {
81
- return `✓ CONCLUÍDO: ${operation}`
82
- }
1
+ /**
2
+ * FluxStack Logger - Message Formatter
3
+ * Formats log messages with proper object inspection
4
+ */
5
+
6
+ import { inspect } from 'util'
7
+ import { LOGGER_CONFIG } from './config'
8
+
9
+ /**
10
+ * Format a log message with proper object inspection
11
+ */
12
+ export function formatMessage(message: unknown, args: unknown[] = []): string {
13
+ const inspectOptions = {
14
+ depth: LOGGER_CONFIG.objectDepth,
15
+ colors: LOGGER_CONFIG.enableColors,
16
+ compact: false,
17
+ breakLength: 100
18
+ }
19
+
20
+ // Format the main message
21
+ let formattedMessage: string
22
+
23
+ if (typeof message === 'string') {
24
+ formattedMessage = message
25
+ } else if (message instanceof Error) {
26
+ // Special handling for Error objects
27
+ formattedMessage = `${message.name}: ${message.message}\n${message.stack || ''}`
28
+ } else if (typeof message === 'object' && message !== null) {
29
+ // Use util.inspect for better object formatting
30
+ formattedMessage = inspect(message, inspectOptions)
31
+ } else {
32
+ formattedMessage = String(message)
33
+ }
34
+
35
+ // Format additional arguments (skip undefined values)
36
+ if (args.length > 0) {
37
+ const formattedArgs = args
38
+ .filter(arg => arg !== undefined) // Skip undefined values
39
+ .map(arg => {
40
+ if (typeof arg === 'object' && arg !== null) {
41
+ return inspect(arg, inspectOptions)
42
+ }
43
+ return String(arg)
44
+ })
45
+ .join(' ')
46
+
47
+ // Only add formatted args if there are any after filtering
48
+ if (formattedArgs.length > 0) {
49
+ return `${formattedMessage} ${formattedArgs}`
50
+ }
51
+ }
52
+
53
+ return formattedMessage
54
+ }
55
+
56
+ /**
57
+ * Format a section title
58
+ */
59
+ export function formatSection(title: string): string {
60
+ return `=== ${title.toUpperCase()} ===`
61
+ }
62
+
63
+ /**
64
+ * Format an important message
65
+ */
66
+ export function formatImportant(title: string): string {
67
+ return `■ ${title.toUpperCase()} ■`
68
+ }
69
+
70
+ /**
71
+ * Format operation start
72
+ */
73
+ export function formatOperationStart(operation: string): string {
74
+ return `▶ INICIANDO: ${operation}`
75
+ }
76
+
77
+ /**
78
+ * Format operation success
79
+ */
80
+ export function formatOperationSuccess(operation: string): string {
81
+ return `✓ CONCLUÍDO: ${operation}`
82
+ }
@@ -1,101 +1,101 @@
1
- /**
2
- * FluxStack Logger - Grouped/Collapsible Logs
3
- * Creates beautiful grouped console output
4
- */
5
-
6
- import chalk from 'chalk'
7
-
8
- export interface GroupOptions {
9
- title: string
10
- icon?: string
11
- collapsed?: boolean
12
- color?: 'cyan' | 'green' | 'yellow' | 'blue' | 'magenta' | 'gray'
13
- }
14
-
15
- /**
16
- * Start a log group (collapsible in browsers, indented in terminal)
17
- */
18
- export function startGroup(options: GroupOptions): void {
19
- const { title, icon = '📦', collapsed = false, color = 'cyan' } = options
20
-
21
- // Check if we're in a browser-like environment (has console.group)
22
- if (typeof console.groupCollapsed === 'function' && typeof console.group === 'function') {
23
- const coloredTitle = chalk[color].bold(`${icon} ${title}`)
24
-
25
- if (collapsed) {
26
- console.groupCollapsed(coloredTitle)
27
- } else {
28
- console.group(coloredTitle)
29
- }
30
- } else {
31
- // Terminal fallback - use box drawing
32
- const coloredTitle = chalk[color].bold(`${icon} ${title}`)
33
- console.log('\n' + coloredTitle)
34
- console.log(chalk.gray('─'.repeat(Math.min(title.length + 4, 60))))
35
- }
36
- }
37
-
38
- /**
39
- * End a log group
40
- */
41
- export function endGroup(): void {
42
- if (typeof console.groupEnd === 'function') {
43
- console.groupEnd()
44
- } else {
45
- // Terminal fallback - just add spacing
46
- console.log('')
47
- }
48
- }
49
-
50
- /**
51
- * Log within a group
52
- */
53
- export function logInGroup(message: string, icon?: string): void {
54
- const prefix = icon ? `${icon} ` : ' '
55
- console.log(chalk.gray(prefix) + message)
56
- }
57
-
58
- /**
59
- * Helper: Auto-group function that handles start/end automatically
60
- */
61
- export async function withGroup<T>(
62
- options: GroupOptions,
63
- callback: () => T | Promise<T>
64
- ): Promise<T> {
65
- startGroup(options)
66
- try {
67
- const result = await callback()
68
- return result
69
- } finally {
70
- endGroup()
71
- }
72
- }
73
-
74
- /**
75
- * Helper: Create a summary line for groups
76
- */
77
- export function groupSummary(count: number, itemName: string, icon: string = '✓'): void {
78
- // itemName should already include proper pluralization
79
- const message = `${icon} ${count} ${itemName}`
80
- console.log(chalk.green.bold(message))
81
- }
82
-
83
- /**
84
- * Create a boxed section for important info
85
- */
86
- export function logBox(title: string, content: string[], options: { color?: 'cyan' | 'green' | 'yellow' } = {}): void {
87
- const { color = 'cyan' } = options
88
- const maxWidth = Math.max(title.length, ...content.map(c => c.length)) + 4
89
-
90
- console.log('')
91
- console.log(chalk[color]('┌' + '─'.repeat(maxWidth) + '┐'))
92
- console.log(chalk[color]('│ ') + chalk.bold(title.padEnd(maxWidth - 2)) + chalk[color](' │'))
93
- console.log(chalk[color]('├' + '─'.repeat(maxWidth) + '┤'))
94
-
95
- for (const line of content) {
96
- console.log(chalk[color]('│ ') + line.padEnd(maxWidth - 2) + chalk[color](' │'))
97
- }
98
-
99
- console.log(chalk[color]('└' + '─'.repeat(maxWidth) + '┘'))
100
- console.log('')
101
- }
1
+ /**
2
+ * FluxStack Logger - Grouped/Collapsible Logs
3
+ * Creates beautiful grouped console output
4
+ */
5
+
6
+ import chalk from 'chalk'
7
+
8
+ export interface GroupOptions {
9
+ title: string
10
+ icon?: string
11
+ collapsed?: boolean
12
+ color?: 'cyan' | 'green' | 'yellow' | 'blue' | 'magenta' | 'gray'
13
+ }
14
+
15
+ /**
16
+ * Start a log group (collapsible in browsers, indented in terminal)
17
+ */
18
+ export function startGroup(options: GroupOptions): void {
19
+ const { title, icon = '📦', collapsed = false, color = 'cyan' } = options
20
+
21
+ // Check if we're in a browser-like environment (has console.group)
22
+ if (typeof console.groupCollapsed === 'function' && typeof console.group === 'function') {
23
+ const coloredTitle = chalk[color].bold(`${icon} ${title}`)
24
+
25
+ if (collapsed) {
26
+ console.groupCollapsed(coloredTitle)
27
+ } else {
28
+ console.group(coloredTitle)
29
+ }
30
+ } else {
31
+ // Terminal fallback - use box drawing
32
+ const coloredTitle = chalk[color].bold(`${icon} ${title}`)
33
+ console.log('\n' + coloredTitle)
34
+ console.log(chalk.gray('─'.repeat(Math.min(title.length + 4, 60))))
35
+ }
36
+ }
37
+
38
+ /**
39
+ * End a log group
40
+ */
41
+ export function endGroup(): void {
42
+ if (typeof console.groupEnd === 'function') {
43
+ console.groupEnd()
44
+ } else {
45
+ // Terminal fallback - just add spacing
46
+ console.log('')
47
+ }
48
+ }
49
+
50
+ /**
51
+ * Log within a group
52
+ */
53
+ export function logInGroup(message: string, icon?: string): void {
54
+ const prefix = icon ? `${icon} ` : ' '
55
+ console.log(chalk.gray(prefix) + message)
56
+ }
57
+
58
+ /**
59
+ * Helper: Auto-group function that handles start/end automatically
60
+ */
61
+ export async function withGroup<T>(
62
+ options: GroupOptions,
63
+ callback: () => T | Promise<T>
64
+ ): Promise<T> {
65
+ startGroup(options)
66
+ try {
67
+ const result = await callback()
68
+ return result
69
+ } finally {
70
+ endGroup()
71
+ }
72
+ }
73
+
74
+ /**
75
+ * Helper: Create a summary line for groups
76
+ */
77
+ export function groupSummary(count: number, itemName: string, icon: string = '✓'): void {
78
+ // itemName should already include proper pluralization
79
+ const message = `${icon} ${count} ${itemName}`
80
+ console.log(chalk.green.bold(message))
81
+ }
82
+
83
+ /**
84
+ * Create a boxed section for important info
85
+ */
86
+ export function logBox(title: string, content: string[], options: { color?: 'cyan' | 'green' | 'yellow' } = {}): void {
87
+ const { color = 'cyan' } = options
88
+ const maxWidth = Math.max(title.length, ...content.map(c => c.length)) + 4
89
+
90
+ console.log('')
91
+ console.log(chalk[color]('┌' + '─'.repeat(maxWidth) + '┐'))
92
+ console.log(chalk[color]('│ ') + chalk.bold(title.padEnd(maxWidth - 2)) + chalk[color](' │'))
93
+ console.log(chalk[color]('├' + '─'.repeat(maxWidth) + '┤'))
94
+
95
+ for (const line of content) {
96
+ console.log(chalk[color]('│ ') + line.padEnd(maxWidth - 2) + chalk[color](' │'))
97
+ }
98
+
99
+ console.log(chalk[color]('└' + '─'.repeat(maxWidth) + '┘'))
100
+ console.log('')
101
+ }