create-fluxstack 1.0.13 → 1.0.14

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 (214) hide show
  1. package/.env.example +29 -29
  2. package/app/client/README.md +69 -69
  3. package/app/client/index.html +14 -13
  4. package/app/client/src/App.tsx +157 -524
  5. package/app/client/src/components/ErrorBoundary.tsx +107 -0
  6. package/app/client/src/components/ErrorDisplay.css +365 -0
  7. package/app/client/src/components/ErrorDisplay.tsx +258 -0
  8. package/app/client/src/components/FluxStackConfig.tsx +1321 -0
  9. package/app/client/src/components/HybridLiveCounter.tsx +140 -0
  10. package/app/client/src/components/LiveClock.tsx +286 -0
  11. package/app/client/src/components/MainLayout.tsx +390 -0
  12. package/app/client/src/components/SidebarNavigation.tsx +391 -0
  13. package/app/client/src/components/StateDemo.tsx +178 -0
  14. package/app/client/src/components/SystemMonitor.tsx +1038 -0
  15. package/app/client/src/components/Teste.tsx +104 -0
  16. package/app/client/src/components/UserProfile.tsx +809 -0
  17. package/app/client/src/hooks/useAuth.ts +39 -0
  18. package/app/client/src/hooks/useNotifications.ts +56 -0
  19. package/app/client/src/lib/eden-api.ts +189 -53
  20. package/app/client/src/lib/errors.ts +340 -0
  21. package/app/client/src/lib/hooks/useErrorHandler.ts +258 -0
  22. package/app/client/src/lib/index.ts +45 -0
  23. package/app/client/src/main.tsx +3 -2
  24. package/app/client/src/pages/ApiDocs.tsx +182 -0
  25. package/app/client/src/pages/Demo.tsx +174 -0
  26. package/app/client/src/pages/HybridLive.tsx +263 -0
  27. package/app/client/src/pages/Overview.tsx +155 -0
  28. package/app/client/src/store/README.md +43 -0
  29. package/app/client/src/store/index.ts +16 -0
  30. package/app/client/src/store/slices/uiSlice.ts +151 -0
  31. package/app/client/src/store/slices/userSlice.ts +161 -0
  32. package/app/client/src/test/README.md +257 -0
  33. package/app/client/src/test/setup.ts +70 -0
  34. package/app/client/src/test/types.ts +12 -0
  35. package/app/client/src/vite-env.d.ts +1 -1
  36. package/app/client/tsconfig.app.json +44 -43
  37. package/app/client/tsconfig.json +7 -7
  38. package/app/client/tsconfig.node.json +25 -25
  39. package/app/client/zustand-setup.md +65 -0
  40. package/app/server/controllers/users.controller.ts +68 -68
  41. package/app/server/index.ts +9 -1
  42. package/app/server/live/CounterComponent.ts +191 -0
  43. package/app/server/live/FluxStackConfig.ts +529 -0
  44. package/app/server/live/LiveClockComponent.ts +214 -0
  45. package/app/server/live/SidebarNavigation.ts +156 -0
  46. package/app/server/live/SystemMonitor.ts +594 -0
  47. package/app/server/live/SystemMonitorIntegration.ts +151 -0
  48. package/app/server/live/TesteComponent.ts +87 -0
  49. package/app/server/live/UserProfileComponent.ts +135 -0
  50. package/app/server/live/register-components.ts +28 -0
  51. package/app/server/middleware/auth.ts +136 -0
  52. package/app/server/middleware/errorHandling.ts +250 -0
  53. package/app/server/middleware/index.ts +10 -0
  54. package/app/server/middleware/rateLimit.ts +193 -0
  55. package/app/server/middleware/requestLogging.ts +215 -0
  56. package/app/server/middleware/validation.ts +270 -0
  57. package/app/server/routes/index.ts +14 -2
  58. package/app/server/routes/upload.ts +92 -0
  59. package/app/server/routes/users.routes.ts +2 -9
  60. package/app/server/services/NotificationService.ts +302 -0
  61. package/app/server/services/UserService.ts +222 -0
  62. package/app/server/services/index.ts +46 -0
  63. package/core/cli/commands/plugin-deps.ts +263 -0
  64. package/core/cli/generators/README.md +339 -0
  65. package/core/cli/generators/component.ts +770 -0
  66. package/core/cli/generators/controller.ts +299 -0
  67. package/core/cli/generators/index.ts +144 -0
  68. package/core/cli/generators/interactive.ts +228 -0
  69. package/core/cli/generators/prompts.ts +83 -0
  70. package/core/cli/generators/route.ts +513 -0
  71. package/core/cli/generators/service.ts +465 -0
  72. package/core/cli/generators/template-engine.ts +154 -0
  73. package/core/cli/generators/types.ts +71 -0
  74. package/core/cli/generators/utils.ts +192 -0
  75. package/core/cli/index.ts +69 -0
  76. package/core/cli/plugin-discovery.ts +16 -85
  77. package/core/client/fluxstack.ts +17 -0
  78. package/core/client/hooks/index.ts +7 -0
  79. package/core/client/hooks/state-validator.ts +130 -0
  80. package/core/client/hooks/useAuth.ts +49 -0
  81. package/core/client/hooks/useChunkedUpload.ts +258 -0
  82. package/core/client/hooks/useHybridLiveComponent.ts +967 -0
  83. package/core/client/hooks/useWebSocket.ts +373 -0
  84. package/core/client/index.ts +47 -0
  85. package/core/client/state/createStore.ts +193 -0
  86. package/core/client/state/index.ts +15 -0
  87. package/core/config/env-dynamic.ts +1 -1
  88. package/core/config/env.ts +2 -1
  89. package/core/config/runtime-config.ts +3 -3
  90. package/core/config/schema.ts +84 -49
  91. package/core/framework/server.ts +30 -0
  92. package/core/index.ts +25 -0
  93. package/core/live/ComponentRegistry.ts +399 -0
  94. package/core/live/types.ts +164 -0
  95. package/core/plugins/built-in/live-components/commands/create-live-component.ts +1201 -0
  96. package/core/plugins/built-in/live-components/index.ts +27 -0
  97. package/core/plugins/built-in/logger/index.ts +1 -1
  98. package/core/plugins/built-in/monitoring/index.ts +1 -1
  99. package/core/plugins/built-in/static/index.ts +1 -1
  100. package/core/plugins/built-in/swagger/index.ts +1 -1
  101. package/core/plugins/built-in/vite/index.ts +1 -1
  102. package/core/plugins/dependency-manager.ts +384 -0
  103. package/core/plugins/index.ts +5 -1
  104. package/core/plugins/manager.ts +7 -3
  105. package/core/plugins/registry.ts +88 -10
  106. package/core/plugins/types.ts +11 -11
  107. package/core/server/framework.ts +43 -0
  108. package/core/server/index.ts +11 -1
  109. package/core/server/live/ComponentRegistry.ts +1017 -0
  110. package/core/server/live/FileUploadManager.ts +272 -0
  111. package/core/server/live/LiveComponentPerformanceMonitor.ts +930 -0
  112. package/core/server/live/SingleConnectionManager.ts +0 -0
  113. package/core/server/live/StateSignature.ts +644 -0
  114. package/core/server/live/WebSocketConnectionManager.ts +688 -0
  115. package/core/server/live/websocket-plugin.ts +435 -0
  116. package/core/server/middleware/errorHandling.ts +141 -0
  117. package/core/server/middleware/index.ts +16 -0
  118. package/core/server/plugins/static-files-plugin.ts +232 -0
  119. package/core/server/services/BaseService.ts +95 -0
  120. package/core/server/services/ServiceContainer.ts +144 -0
  121. package/core/server/services/index.ts +9 -0
  122. package/core/templates/create-project.ts +46 -2
  123. package/core/testing/index.ts +10 -0
  124. package/core/testing/setup.ts +74 -0
  125. package/core/types/build.ts +38 -14
  126. package/core/types/types.ts +319 -0
  127. package/core/utils/env-runtime.ts +7 -0
  128. package/core/utils/errors/handlers.ts +264 -39
  129. package/core/utils/errors/index.ts +528 -18
  130. package/core/utils/errors/middleware.ts +114 -0
  131. package/core/utils/logger/formatters.ts +222 -0
  132. package/core/utils/logger/index.ts +167 -48
  133. package/core/utils/logger/middleware.ts +253 -0
  134. package/core/utils/logger/performance.ts +384 -0
  135. package/core/utils/logger/transports.ts +365 -0
  136. package/create-fluxstack.ts +296 -296
  137. package/fluxstack.config.ts +17 -1
  138. package/package-template.json +66 -66
  139. package/package.json +31 -6
  140. package/public/README.md +16 -0
  141. package/vite.config.ts +29 -14
  142. package/.claude/settings.local.json +0 -74
  143. package/.github/workflows/ci-build-tests.yml +0 -480
  144. package/.github/workflows/dependency-management.yml +0 -324
  145. package/.github/workflows/release-validation.yml +0 -355
  146. package/.kiro/specs/fluxstack-architecture-optimization/design.md +0 -700
  147. package/.kiro/specs/fluxstack-architecture-optimization/requirements.md +0 -127
  148. package/.kiro/specs/fluxstack-architecture-optimization/tasks.md +0 -330
  149. package/CLAUDE.md +0 -200
  150. package/Dockerfile +0 -58
  151. package/Dockerfile.backend +0 -52
  152. package/Dockerfile.frontend +0 -54
  153. package/README-Docker.md +0 -85
  154. package/ai-context/00-QUICK-START.md +0 -86
  155. package/ai-context/README.md +0 -88
  156. package/ai-context/development/eden-treaty-guide.md +0 -362
  157. package/ai-context/development/patterns.md +0 -382
  158. package/ai-context/development/plugins-guide.md +0 -572
  159. package/ai-context/examples/crud-complete.md +0 -626
  160. package/ai-context/project/architecture.md +0 -399
  161. package/ai-context/project/overview.md +0 -213
  162. package/ai-context/recent-changes/eden-treaty-refactor.md +0 -281
  163. package/ai-context/recent-changes/type-inference-fix.md +0 -223
  164. package/ai-context/reference/environment-vars.md +0 -384
  165. package/ai-context/reference/troubleshooting.md +0 -407
  166. package/app/client/src/components/TestPage.tsx +0 -453
  167. package/bun.lock +0 -1063
  168. package/bunfig.toml +0 -16
  169. package/core/__tests__/integration.test.ts +0 -227
  170. package/core/build/index.ts +0 -186
  171. package/core/config/__tests__/config-loader.test.ts +0 -554
  172. package/core/config/__tests__/config-merger.test.ts +0 -657
  173. package/core/config/__tests__/env-converter.test.ts +0 -372
  174. package/core/config/__tests__/env-processor.test.ts +0 -431
  175. package/core/config/__tests__/env.test.ts +0 -452
  176. package/core/config/__tests__/integration.test.ts +0 -418
  177. package/core/config/__tests__/loader.test.ts +0 -331
  178. package/core/config/__tests__/schema.test.ts +0 -129
  179. package/core/config/__tests__/validator.test.ts +0 -318
  180. package/core/framework/__tests__/server.test.ts +0 -233
  181. package/core/plugins/__tests__/built-in.test.ts.disabled +0 -366
  182. package/core/plugins/__tests__/manager.test.ts +0 -398
  183. package/core/plugins/__tests__/monitoring.test.ts +0 -401
  184. package/core/plugins/__tests__/registry.test.ts +0 -335
  185. package/core/utils/__tests__/errors.test.ts +0 -139
  186. package/core/utils/__tests__/helpers.test.ts +0 -297
  187. package/core/utils/__tests__/logger.test.ts +0 -141
  188. package/create-test-app.ts +0 -156
  189. package/docker-compose.microservices.yml +0 -75
  190. package/docker-compose.simple.yml +0 -57
  191. package/docker-compose.yml +0 -71
  192. package/eslint.config.js +0 -23
  193. package/flux-cli.ts +0 -214
  194. package/nginx-lb.conf +0 -37
  195. package/publish.sh +0 -63
  196. package/run-clean.ts +0 -26
  197. package/run-env-tests.ts +0 -313
  198. package/tailwind.config.js +0 -34
  199. package/tests/__mocks__/api.ts +0 -56
  200. package/tests/fixtures/users.ts +0 -69
  201. package/tests/integration/api/users.routes.test.ts +0 -221
  202. package/tests/setup.ts +0 -29
  203. package/tests/unit/app/client/App-simple.test.tsx +0 -56
  204. package/tests/unit/app/client/App.test.tsx.skip +0 -237
  205. package/tests/unit/app/client/eden-api.test.ts +0 -186
  206. package/tests/unit/app/client/simple.test.tsx +0 -23
  207. package/tests/unit/app/controllers/users.controller.test.ts +0 -150
  208. package/tests/unit/core/create-project.test.ts.skip +0 -95
  209. package/tests/unit/core/framework.test.ts +0 -144
  210. package/tests/unit/core/plugins/logger.test.ts.skip +0 -268
  211. package/tests/unit/core/plugins/vite.test.ts.disabled +0 -188
  212. package/tests/utils/test-helpers.ts +0 -61
  213. package/vitest.config.ts +0 -50
  214. package/workspace.json +0 -6
@@ -0,0 +1,263 @@
1
+ /**
2
+ * Comando CLI para gerenciar dependências de plugins
3
+ */
4
+
5
+ import { Command } from 'commander'
6
+ import chalk from 'chalk'
7
+ import { PluginDependencyManager } from '../../plugins/dependency-manager'
8
+ import { PluginRegistry } from '../../plugins/registry'
9
+ import { existsSync, readFileSync } from 'fs'
10
+ import { join } from 'path'
11
+
12
+ export function createPluginDepsCommand(): Command {
13
+ const command = new Command('plugin:deps')
14
+ .description('Gerenciar dependências de plugins')
15
+ .addCommand(createInstallCommand())
16
+ .addCommand(createListCommand())
17
+ .addCommand(createCheckCommand())
18
+ .addCommand(createCleanCommand())
19
+
20
+ return command
21
+ }
22
+
23
+ function createInstallCommand(): Command {
24
+ return new Command('install')
25
+ .description('Instalar dependências de todos os plugins')
26
+ .option('--dry-run', 'Mostrar o que seria instalado sem executar')
27
+ .option('--package-manager <pm>', 'Package manager a usar (npm, yarn, pnpm, bun)', 'bun')
28
+ .action(async (options) => {
29
+ console.log(chalk.blue('🔧 Instalando dependências de plugins...\n'))
30
+
31
+ try {
32
+ const dependencyManager = new PluginDependencyManager({
33
+ autoInstall: !options.dryRun,
34
+ packageManager: options.packageManager,
35
+ logger: createConsoleLogger()
36
+ })
37
+
38
+ const registry = new PluginRegistry({
39
+ logger: createConsoleLogger()
40
+ })
41
+
42
+ // Descobrir plugins
43
+ const results = await registry.discoverPlugins({
44
+ directories: ['plugins', 'core/plugins/built-in']
45
+ })
46
+
47
+ const successfulPlugins = results.filter(r => r.success)
48
+ console.log(chalk.green(`✅ Encontrados ${successfulPlugins.length} plugins\n`))
49
+
50
+ // Resolver dependências
51
+ const resolutions = []
52
+ for (const result of successfulPlugins) {
53
+ if (result.plugin) {
54
+ const pluginDir = findPluginDirectory(result.plugin.name)
55
+ if (pluginDir) {
56
+ const resolution = await dependencyManager.resolvePluginDependencies(pluginDir)
57
+ resolutions.push(resolution)
58
+ }
59
+ }
60
+ }
61
+
62
+ // Mostrar resumo
63
+ let totalDeps = 0
64
+ let totalConflicts = 0
65
+
66
+ for (const resolution of resolutions) {
67
+ totalDeps += resolution.dependencies.length
68
+ totalConflicts += resolution.conflicts.length
69
+
70
+ if (resolution.dependencies.length > 0) {
71
+ console.log(chalk.cyan(`📦 ${resolution.plugin}:`))
72
+ for (const dep of resolution.dependencies) {
73
+ const typeColor = dep.type === 'peerDependency' ? chalk.yellow : chalk.white
74
+ console.log(` ${typeColor(dep.name)}@${dep.version} (${dep.type})`)
75
+ }
76
+ console.log()
77
+ }
78
+ }
79
+
80
+ if (totalConflicts > 0) {
81
+ console.log(chalk.yellow(`⚠️ ${totalConflicts} conflitos de dependências detectados\n`))
82
+ }
83
+
84
+ if (options.dryRun) {
85
+ console.log(chalk.blue(`📋 Dry run: ${totalDeps} dependências seriam instaladas`))
86
+ } else {
87
+ await dependencyManager.installPluginDependencies(resolutions)
88
+ console.log(chalk.green(`✅ ${totalDeps} dependências instaladas com sucesso!`))
89
+ }
90
+
91
+ } catch (error) {
92
+ console.error(chalk.red('❌ Erro ao instalar dependências:'), error)
93
+ process.exit(1)
94
+ }
95
+ })
96
+ }
97
+
98
+ function createListCommand(): Command {
99
+ return new Command('list')
100
+ .description('Listar dependências de plugins')
101
+ .option('--plugin <name>', 'Mostrar apenas dependências de um plugin específico')
102
+ .action(async (options) => {
103
+ console.log(chalk.blue('📋 Dependências de plugins:\n'))
104
+
105
+ try {
106
+ const registry = new PluginRegistry({
107
+ logger: createConsoleLogger()
108
+ })
109
+
110
+ const results = await registry.discoverPlugins({
111
+ directories: ['plugins', 'core/plugins/built-in']
112
+ })
113
+
114
+ const dependencyManager = new PluginDependencyManager({
115
+ autoInstall: false,
116
+ logger: createConsoleLogger()
117
+ })
118
+
119
+ for (const result of results) {
120
+ if (result.success && result.plugin) {
121
+ if (options.plugin && result.plugin.name !== options.plugin) {
122
+ continue
123
+ }
124
+
125
+ const pluginDir = findPluginDirectory(result.plugin.name)
126
+ if (pluginDir) {
127
+ const resolution = await dependencyManager.resolvePluginDependencies(pluginDir)
128
+
129
+ console.log(chalk.cyan(`📦 ${resolution.plugin}`))
130
+
131
+ if (resolution.dependencies.length === 0) {
132
+ console.log(chalk.gray(' Nenhuma dependência'))
133
+ } else {
134
+ for (const dep of resolution.dependencies) {
135
+ const typeColor = dep.type === 'peerDependency' ? chalk.yellow : chalk.white
136
+ const optional = dep.optional ? chalk.gray(' (opcional)') : ''
137
+ console.log(` ${typeColor(dep.name)}@${dep.version} (${dep.type})${optional}`)
138
+ }
139
+ }
140
+
141
+ if (resolution.conflicts.length > 0) {
142
+ console.log(chalk.red(` ⚠️ ${resolution.conflicts.length} conflitos`))
143
+ }
144
+
145
+ console.log()
146
+ }
147
+ }
148
+ }
149
+
150
+ } catch (error) {
151
+ console.error(chalk.red('❌ Erro ao listar dependências:'), error)
152
+ process.exit(1)
153
+ }
154
+ })
155
+ }
156
+
157
+ function createCheckCommand(): Command {
158
+ return new Command('check')
159
+ .description('Verificar conflitos de dependências')
160
+ .action(async () => {
161
+ console.log(chalk.blue('🔍 Verificando conflitos de dependências...\n'))
162
+
163
+ try {
164
+ const registry = new PluginRegistry({
165
+ logger: createConsoleLogger()
166
+ })
167
+
168
+ const results = await registry.discoverPlugins({
169
+ directories: ['plugins', 'core/plugins/built-in']
170
+ })
171
+
172
+ const dependencyManager = new PluginDependencyManager({
173
+ autoInstall: false,
174
+ logger: createConsoleLogger()
175
+ })
176
+
177
+ const resolutions = []
178
+ for (const result of results) {
179
+ if (result.success && result.plugin) {
180
+ const pluginDir = findPluginDirectory(result.plugin.name)
181
+ if (pluginDir) {
182
+ const resolution = await dependencyManager.resolvePluginDependencies(pluginDir)
183
+ resolutions.push(resolution)
184
+ }
185
+ }
186
+ }
187
+
188
+ const allConflicts = resolutions.flatMap(r => r.conflicts)
189
+
190
+ if (allConflicts.length === 0) {
191
+ console.log(chalk.green('✅ Nenhum conflito de dependências encontrado!'))
192
+ } else {
193
+ console.log(chalk.red(`❌ ${allConflicts.length} conflitos encontrados:\n`))
194
+
195
+ for (const conflict of allConflicts) {
196
+ console.log(chalk.yellow(`⚠️ ${conflict.package}:`))
197
+ for (const version of conflict.versions) {
198
+ console.log(` ${version.plugin}: ${version.version}`)
199
+ }
200
+ if (conflict.resolution) {
201
+ console.log(chalk.green(` Resolução: ${conflict.resolution}`))
202
+ }
203
+ console.log()
204
+ }
205
+ }
206
+
207
+ } catch (error) {
208
+ console.error(chalk.red('❌ Erro ao verificar conflitos:'), error)
209
+ process.exit(1)
210
+ }
211
+ })
212
+ }
213
+
214
+ function createCleanCommand(): Command {
215
+ return new Command('clean')
216
+ .description('Limpar dependências não utilizadas')
217
+ .option('--dry-run', 'Mostrar o que seria removido sem executar')
218
+ .action(async (options) => {
219
+ console.log(chalk.blue('🧹 Limpando dependências não utilizadas...\n'))
220
+
221
+ if (options.dryRun) {
222
+ console.log(chalk.blue('📋 Dry run: mostrando dependências que seriam removidas'))
223
+ }
224
+
225
+ // TODO: Implementar lógica de limpeza
226
+ console.log(chalk.yellow('⚠️ Funcionalidade ainda não implementada'))
227
+ })
228
+ }
229
+
230
+ function findPluginDirectory(pluginName: string): string | null {
231
+ const possiblePaths = [
232
+ `plugins/${pluginName}`,
233
+ `core/plugins/built-in/${pluginName}`
234
+ ]
235
+
236
+ for (const path of possiblePaths) {
237
+ if (existsSync(path)) {
238
+ return path
239
+ }
240
+ }
241
+
242
+ return null
243
+ }
244
+
245
+ function createConsoleLogger() {
246
+ return {
247
+ debug: (msg: string, meta?: any) => {
248
+ if (process.env.DEBUG) {
249
+ console.log(chalk.gray(`[DEBUG] ${msg}`), meta || '')
250
+ }
251
+ },
252
+ info: (msg: string, meta?: any) => {
253
+ console.log(chalk.blue(`[INFO] ${msg}`), meta || '')
254
+ },
255
+ warn: (msg: string, meta?: any) => {
256
+ console.log(chalk.yellow(`[WARN] ${msg}`), meta || '')
257
+ },
258
+ error: (msg: string, meta?: any) => {
259
+ console.log(chalk.red(`[ERROR] ${msg}`), meta || '')
260
+ },
261
+ child: () => createConsoleLogger()
262
+ }
263
+ }
@@ -0,0 +1,339 @@
1
+ # FluxStack Code Generation System
2
+
3
+ The FluxStack code generation system provides powerful tools to quickly scaffold common code patterns, reducing boilerplate and ensuring consistency across your project.
4
+
5
+ ## Quick Start
6
+
7
+ ### Basic Usage
8
+
9
+ ```bash
10
+ # Generate a CRUD controller
11
+ flux generate controller user
12
+
13
+ # Generate a React component
14
+ flux generate component UserCard
15
+
16
+ # Generate a service with repository pattern
17
+ flux generate service auth
18
+
19
+ # Generate API routes
20
+ flux generate route user
21
+ ```
22
+
23
+ ### Interactive Mode
24
+
25
+ For a guided experience with prompts:
26
+
27
+ ```bash
28
+ flux generate:interactive
29
+ # or
30
+ flux gi
31
+ ```
32
+
33
+ ## Available Generators
34
+
35
+ ### 1. Controller Generator
36
+
37
+ Generates backend controllers with CRUD operations.
38
+
39
+ **Templates:**
40
+ - `crud` (default) - Full CRUD controller with validation and error handling
41
+ - `minimal` - Basic controller structure with TODO placeholders
42
+
43
+ **Usage:**
44
+ ```bash
45
+ flux generate controller user
46
+ flux generate controller product --template minimal
47
+ flux generate controller order --path custom/path
48
+ ```
49
+
50
+ **Generated Files:**
51
+ - `app/server/controllers/{name}.controller.ts` - Main controller class
52
+ - `app/server/schemas/{name}.schema.ts` - Validation schemas (CRUD template only)
53
+
54
+ ### 2. Service Generator
55
+
56
+ Generates business logic services with repository pattern.
57
+
58
+ **Templates:**
59
+ - `crud` (default) - Full service with validation, logging, and repository
60
+ - `repository` - Service with repository pattern
61
+ - `minimal` - Basic service structure
62
+
63
+ **Usage:**
64
+ ```bash
65
+ flux generate service user
66
+ flux generate service auth --template repository
67
+ ```
68
+
69
+ **Generated Files:**
70
+ - `app/server/services/{name}.service.ts` - Main service class
71
+ - `app/server/repositories/{name}.repository.ts` - Repository class (CRUD/repository templates)
72
+
73
+ ### 3. Component Generator
74
+
75
+ Generates React components with TypeScript.
76
+
77
+ **Templates:**
78
+ - `basic` (default) - Simple React component with props interface
79
+ - `functional` - Component with hooks and state management
80
+ - `page` - Page component with layout and SEO
81
+ - `form` - Form component with validation
82
+ - `full` - Complete component with tests and Storybook stories
83
+
84
+ **Usage:**
85
+ ```bash
86
+ flux generate component UserCard
87
+ flux generate component ContactForm --template form
88
+ flux generate component HomePage --template page
89
+ ```
90
+
91
+ **Generated Files:**
92
+ - `app/client/src/components/{Name}/{Name}.tsx` - Main component
93
+ - `app/client/src/components/{Name}/{Name}.css` - Component styles
94
+ - `app/client/src/components/{Name}/index.ts` - Export file
95
+ - `app/client/src/components/{Name}/{Name}.test.tsx` - Tests (full template)
96
+ - `app/client/src/components/{Name}/{Name}.stories.tsx` - Storybook stories (full template)
97
+
98
+ ### 4. Route Generator
99
+
100
+ Generates API routes with Elysia.js.
101
+
102
+ **Templates:**
103
+ - `crud` (default) - Full REST API with validation and documentation
104
+ - `auth` - Authentication routes (login, register, etc.)
105
+ - `minimal` - Basic route structure
106
+
107
+ **Usage:**
108
+ ```bash
109
+ flux generate route user
110
+ flux generate route auth --template auth
111
+ ```
112
+
113
+ **Generated Files:**
114
+ - `app/server/routes/{name}.routes.ts` - Route definitions
115
+ - `app/server/routes/index.ts` - Route registry (if doesn't exist)
116
+ - `app/server/middleware/{name}.middleware.ts` - Middleware (auth template)
117
+
118
+ ## Command Options
119
+
120
+ ### Global Options
121
+
122
+ - `--path, -p` - Custom path for generated files
123
+ - `--template, -t` - Template variant to use
124
+ - `--force, -f` - Overwrite existing files
125
+ - `--dry-run` - Preview what would be generated without creating files
126
+
127
+ ### Examples
128
+
129
+ ```bash
130
+ # Preview generation without creating files
131
+ flux generate controller user --dry-run
132
+
133
+ # Force overwrite existing files
134
+ flux generate component Button --force
135
+
136
+ # Use custom path
137
+ flux generate service auth --path app/custom/services
138
+
139
+ # Use specific template
140
+ flux generate component Modal --template functional
141
+ ```
142
+
143
+ ## Template Variables
144
+
145
+ All templates have access to these variables:
146
+
147
+ - `{{name}}` - Original name as provided
148
+ - `{{Name}}` - Capitalized name
149
+ - `{{NAME}}` - Uppercase name
150
+ - `{{kebabName}}` - kebab-case name (user-profile)
151
+ - `{{camelName}}` - camelCase name (userProfile)
152
+ - `{{pascalName}}` - PascalCase name (UserProfile)
153
+ - `{{snakeName}}` - snake_case name (user_profile)
154
+ - `{{timestamp}}` - ISO timestamp
155
+ - `{{date}}` - Current date
156
+ - `{{year}}` - Current year
157
+ - `{{author}}` - Author from config
158
+ - `{{projectName}}` - Project name from config
159
+
160
+ ## Creating Custom Templates
161
+
162
+ ### Template Structure
163
+
164
+ Templates are defined as objects with the following structure:
165
+
166
+ ```typescript
167
+ interface Template {
168
+ name: string
169
+ description: string
170
+ files: TemplateFile[]
171
+ variables?: TemplateVariable[]
172
+ hooks?: {
173
+ beforeGenerate?: (context: GeneratorContext, options: GeneratorOptions) => Promise<void>
174
+ afterGenerate?: (context: GeneratorContext, options: GeneratorOptions, files: string[]) => Promise<void>
175
+ }
176
+ }
177
+ ```
178
+
179
+ ### Example Custom Generator
180
+
181
+ ```typescript
182
+ import { Generator } from "./index"
183
+ import { GeneratorContext, GeneratorOptions, Template } from "./types"
184
+ import { templateEngine } from "./template-engine"
185
+
186
+ export class CustomGenerator implements Generator {
187
+ name = 'custom'
188
+ description = 'Generate custom code'
189
+
190
+ async generate(context: GeneratorContext, options: GeneratorOptions): Promise<void> {
191
+ const template = this.getTemplate()
192
+ const files = await templateEngine.processTemplate(template, context, options)
193
+
194
+ if (!options.dryRun) {
195
+ await templateEngine.generateFiles(files)
196
+ }
197
+ }
198
+
199
+ private getTemplate(): Template {
200
+ return {
201
+ name: 'custom-template',
202
+ description: 'Custom template',
203
+ files: [
204
+ {
205
+ path: 'custom/{{kebabName}}.ts',
206
+ content: `// Generated {{pascalName}} at {{timestamp}}
207
+ export class {{pascalName}} {
208
+ constructor() {
209
+ console.log('{{pascalName}} created')
210
+ }
211
+ }
212
+ `
213
+ }
214
+ ]
215
+ }
216
+ }
217
+ }
218
+ ```
219
+
220
+ ## Best Practices
221
+
222
+ ### 1. Naming Conventions
223
+
224
+ - Use PascalCase for components: `UserCard`, `ContactForm`
225
+ - Use camelCase for services and controllers: `userService`, `authController`
226
+ - Use kebab-case for routes: `user-profile`, `auth-routes`
227
+
228
+ ### 2. Template Selection
229
+
230
+ - Use `crud` templates for full-featured implementations
231
+ - Use `minimal` templates when you need basic structure
232
+ - Use `full` templates when you need tests and documentation
233
+
234
+ ### 3. File Organization
235
+
236
+ - Keep related files together (controller + service + routes)
237
+ - Use consistent directory structure
238
+ - Follow the generated file patterns
239
+
240
+ ### 4. Customization
241
+
242
+ - Always review generated code before committing
243
+ - Customize templates for your specific needs
244
+ - Add validation and error handling as needed
245
+
246
+ ## Integration with Development Workflow
247
+
248
+ ### 1. Generate Related Files
249
+
250
+ When generating a controller, also generate:
251
+ ```bash
252
+ flux generate controller user
253
+ flux generate service user
254
+ flux generate route user
255
+ ```
256
+
257
+ ### 2. Update Imports
258
+
259
+ After generating routes, update your main server file:
260
+ ```typescript
261
+ import { userRoutes } from './routes/user.routes'
262
+
263
+ app.use(userRoutes)
264
+ ```
265
+
266
+ ### 3. Add to Navigation
267
+
268
+ After generating components, add them to your routing:
269
+ ```typescript
270
+ import { UserPage } from './components/UserPage'
271
+
272
+ // Add to your router
273
+ ```
274
+
275
+ ## Troubleshooting
276
+
277
+ ### Common Issues
278
+
279
+ 1. **Files already exist**
280
+ - Use `--force` to overwrite
281
+ - Use `--dry-run` to preview first
282
+
283
+ 2. **Permission errors**
284
+ - Check file permissions
285
+ - Ensure directory is writable
286
+
287
+ 3. **Template not found**
288
+ - Check available templates with `flux generate --help`
289
+ - Verify template name spelling
290
+
291
+ 4. **Invalid names**
292
+ - Names must start with a letter
293
+ - Only letters, numbers, hyphens, and underscores allowed
294
+
295
+ ### Getting Help
296
+
297
+ ```bash
298
+ # General help
299
+ flux help
300
+
301
+ # Generator help
302
+ flux help generate
303
+
304
+ # Interactive mode
305
+ flux generate:interactive
306
+ ```
307
+
308
+ ## Advanced Usage
309
+
310
+ ### Batch Generation
311
+
312
+ Generate multiple related files:
313
+ ```bash
314
+ # Generate full stack for a feature
315
+ flux generate controller user
316
+ flux generate service user
317
+ flux generate route user
318
+ flux generate component UserList
319
+ flux generate component UserForm
320
+ ```
321
+
322
+ ### Custom Paths
323
+
324
+ Organize files in custom directories:
325
+ ```bash
326
+ flux generate controller admin/user --path app/admin/controllers
327
+ flux generate component admin/UserPanel --path app/admin/components
328
+ ```
329
+
330
+ ### Environment-Specific Templates
331
+
332
+ Use different templates for different environments:
333
+ ```bash
334
+ # Development with full features
335
+ flux generate controller user --template crud
336
+
337
+ # Production with minimal features
338
+ flux generate controller user --template minimal
339
+ ```