create-fluxstack 1.0.13 → 1.0.15

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 +196 -33
  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
package/bunfig.toml DELETED
@@ -1,16 +0,0 @@
1
- # FluxStack Bun Configuration
2
- [build]
3
- target = "bun"
4
-
5
- [install]
6
- # Package installation settings
7
- cache = true
8
- lockfile = true
9
-
10
- # Path mapping (alias support)
11
- [build.alias]
12
- "@" = "."
13
- "@/core" = "./core"
14
- "@/app" = "./app"
15
- "@/config" = "./config"
16
- "@/shared" = "./app/shared"
@@ -1,227 +0,0 @@
1
- /**
2
- * Integration Tests for Core Framework Restructuring
3
- * Tests the complete integration of all restructured components
4
- */
5
-
6
- import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'
7
- import { FluxStackFramework } from '../framework/server'
8
- import { PluginRegistry } from '../plugins/registry'
9
- import { logger } from '../utils/logger'
10
- import type { Plugin } from '../plugins/types'
11
-
12
- // Set test environment
13
- process.env.NODE_ENV = 'test'
14
-
15
- describe('Core Framework Integration', () => {
16
- let framework: FluxStackFramework
17
- let consoleSpy: any
18
-
19
- beforeEach(() => {
20
- framework = new FluxStackFramework()
21
- consoleSpy = {
22
- debug: vi.spyOn(console, 'debug').mockImplementation(() => {}),
23
- info: vi.spyOn(console, 'info').mockImplementation(() => {}),
24
- warn: vi.spyOn(console, 'warn').mockImplementation(() => {}),
25
- error: vi.spyOn(console, 'error').mockImplementation(() => {})
26
- }
27
- })
28
-
29
- afterEach(() => {
30
- vi.clearAllMocks()
31
- vi.restoreAllMocks()
32
- })
33
-
34
- describe('Framework Initialization', () => {
35
- it('should initialize all core components', () => {
36
- expect(framework.getContext()).toBeDefined()
37
- expect(framework.getApp()).toBeDefined()
38
- expect(framework.getPluginRegistry()).toBeInstanceOf(PluginRegistry)
39
- })
40
-
41
- it('should have proper directory structure exports', async () => {
42
- // Test that all new exports are available
43
- const { FluxStackFramework: ServerFramework } = await import('../framework/server')
44
- const { FluxStackClient } = await import('../framework/client')
45
- const { PluginRegistry: Registry } = await import('../plugins/registry')
46
- const { logger: Logger } = await import('../utils/logger')
47
- const { FluxStackError } = await import('../utils/errors')
48
-
49
- expect(ServerFramework).toBeDefined()
50
- expect(FluxStackClient).toBeDefined()
51
- expect(Registry).toBeDefined()
52
- expect(Logger).toBeDefined()
53
- expect(FluxStackError).toBeDefined()
54
- })
55
- })
56
-
57
- describe('Plugin System Integration', () => {
58
- it('should register and load built-in plugins', async () => {
59
- const mockPlugin: Plugin = {
60
- name: 'test-integration-plugin',
61
- setup: vi.fn(),
62
- onServerStart: vi.fn(),
63
- onServerStop: vi.fn()
64
- }
65
-
66
- framework.use(mockPlugin)
67
-
68
- expect(framework.getPluginRegistry().get('test-integration-plugin')).toBe(mockPlugin)
69
-
70
- await framework.start()
71
-
72
- expect(mockPlugin.setup).toHaveBeenCalled()
73
- expect(mockPlugin.onServerStart).toHaveBeenCalled()
74
-
75
- await framework.stop()
76
-
77
- expect(mockPlugin.onServerStop).toHaveBeenCalled()
78
- })
79
-
80
- it('should handle plugin dependencies correctly', async () => {
81
- const basePlugin: Plugin = {
82
- name: 'base-plugin',
83
- setup: vi.fn()
84
- }
85
-
86
- const dependentPlugin: Plugin = {
87
- name: 'dependent-plugin',
88
- dependencies: ['base-plugin'],
89
- setup: vi.fn()
90
- }
91
-
92
- framework.use(basePlugin)
93
- framework.use(dependentPlugin)
94
-
95
- await framework.start()
96
-
97
- const loadOrder = framework.getPluginRegistry().getLoadOrder()
98
- expect(loadOrder.indexOf('base-plugin')).toBeLessThan(loadOrder.indexOf('dependent-plugin'))
99
- })
100
- })
101
-
102
- describe('Logger Integration', () => {
103
- it('should use enhanced logger throughout the system', () => {
104
- // Test basic logger functionality
105
- logger.info('Test message')
106
-
107
- expect(consoleSpy.info).toHaveBeenCalled()
108
- const logMessage = consoleSpy.info.mock.calls[0][0]
109
- expect(logMessage).toContain('Test message')
110
- })
111
-
112
- it('should provide framework logging', () => {
113
- logger.info('Framework test message')
114
- expect(consoleSpy.info).toHaveBeenCalled()
115
- })
116
- })
117
-
118
- describe('Error Handling Integration', () => {
119
- it('should set up centralized error handling', () => {
120
- const app = framework.getApp()
121
- expect(app).toBeDefined()
122
- // Error handler is set up in constructor
123
- })
124
- })
125
-
126
- describe('Type System Integration', () => {
127
- it('should have comprehensive type exports', async () => {
128
- // Test that all type exports are available
129
- const types = await import('../types')
130
-
131
- // Test that the main types module is properly structured (it's a module, not an object)
132
- expect(typeof types).toBe('object')
133
- expect(types).toBeDefined()
134
-
135
- // Test config schema exports directly
136
- const configTypes = await import('../config/schema')
137
- expect(configTypes).toHaveProperty('defaultFluxStackConfig')
138
- expect(configTypes).toHaveProperty('environmentDefaults')
139
-
140
- // Test plugin types from the main types index
141
- const coreTypes = await import('../types')
142
- // Plugin types should be available through the main types module
143
- expect(typeof coreTypes).toBe('object')
144
- expect(coreTypes).toBeDefined()
145
-
146
- // Test utility types
147
- const loggerTypes = await import('../utils/logger')
148
- expect(loggerTypes).toHaveProperty('logger')
149
-
150
- const errorTypes = await import('../utils/errors')
151
- expect(errorTypes).toHaveProperty('FluxStackError')
152
- })
153
- })
154
-
155
- describe('Utilities Integration', () => {
156
- it('should provide all utility functions', async () => {
157
- const utils = await import('../utils')
158
-
159
- expect(utils.logger).toBeDefined()
160
- expect(utils.log).toBeDefined()
161
- expect(utils.FluxStackError).toBeDefined()
162
- expect(utils.MetricsCollector).toBeDefined()
163
- expect(utils.formatBytes).toBeDefined()
164
- expect(utils.createTimer).toBeDefined()
165
- })
166
-
167
- it('should have working helper functions', async () => {
168
- const { formatBytes, createTimer, isTest } = await import('../utils/helpers')
169
-
170
- expect(formatBytes(1024)).toBe('1 KB')
171
- expect(isTest()).toBe(true)
172
-
173
- const timer = createTimer('test')
174
- expect(timer.label).toBe('test')
175
- expect(typeof timer.end).toBe('function')
176
- })
177
- })
178
-
179
- describe('Backward Compatibility', () => {
180
- it('should maintain exports from core/server/index.ts', async () => {
181
- try {
182
- const serverExports = await import('../server')
183
-
184
- expect(serverExports.FluxStackFramework).toBeDefined()
185
- expect(serverExports.PluginRegistry).toBeDefined()
186
- expect(serverExports.loggerPlugin).toBeDefined()
187
- expect(serverExports.vitePlugin).toBeDefined()
188
- expect(serverExports.staticPlugin).toBeDefined()
189
- expect(serverExports.swaggerPlugin).toBeDefined()
190
- } catch (error) {
191
- // Skip this test if there are environment issues (e.g., esbuild + Windows + Bun)
192
- if (error instanceof Error && error.message.includes('Invariant violation')) {
193
- console.warn('⚠️ Skipping server exports test due to environment compatibility issues')
194
- expect(true).toBe(true) // Mark test as passed
195
- } else {
196
- throw error // Re-throw other errors
197
- }
198
- }
199
- })
200
- })
201
-
202
- describe('Complete Workflow', () => {
203
- it('should support complete framework lifecycle', async () => {
204
- const testPlugin: Plugin = {
205
- name: 'workflow-test-plugin',
206
- setup: vi.fn(),
207
- onServerStart: vi.fn(),
208
- onServerStop: vi.fn()
209
- }
210
-
211
- // Register plugin
212
- framework.use(testPlugin)
213
-
214
- // Start framework
215
- await framework.start()
216
- expect(testPlugin.setup).toHaveBeenCalled()
217
- expect(testPlugin.onServerStart).toHaveBeenCalled()
218
-
219
- // Verify framework is running
220
- expect(framework.getPluginRegistry().getAll()).toHaveLength(1)
221
-
222
- // Stop framework
223
- await framework.stop()
224
- expect(testPlugin.onServerStop).toHaveBeenCalled()
225
- })
226
- })
227
- })
@@ -1,186 +0,0 @@
1
- import { spawn } from "bun"
2
- import { copyFile, copyFileSync, writeFileSync } from "fs"
3
- import { join } from "path"
4
- import type { FluxStackConfig } from "../config"
5
-
6
- export class FluxStackBuilder {
7
- private config: FluxStackConfig
8
-
9
- constructor(config: FluxStackConfig) {
10
- this.config = config
11
- }
12
-
13
- async buildClient() {
14
- console.log("⚡ Building client...")
15
-
16
- const buildProcess = spawn({
17
- cmd: ["bunx", "vite", "build", "--config", "vite.config.ts"],
18
- cwd: process.cwd(),
19
- stdout: "pipe",
20
- stderr: "pipe",
21
- env: {
22
- ...process.env,
23
- VITE_BUILD_OUTDIR: this.config.client.build.outDir,
24
- VITE_BUILD_MINIFY: this.config.client.build.minify.toString(),
25
- VITE_BUILD_SOURCEMAPS: this.config.client.build.sourceMaps.toString()
26
- }
27
- })
28
-
29
- const exitCode = await buildProcess.exited
30
-
31
- if (exitCode === 0) {
32
- console.log("✅ Client build completed")
33
- } else {
34
- console.error("❌ Client build failed")
35
- process.exit(1)
36
- }
37
- }
38
-
39
- async buildServer() {
40
- console.log("⚡ Building server...")
41
-
42
- const buildProcess = spawn({
43
- cmd: [
44
- "bun", "build",
45
- "app/server/index.ts",
46
- "--outdir", this.config.build.outDir,
47
- "--target", this.config.build.target,
48
- "--external", "@tailwindcss/vite",
49
- "--external", "tailwindcss",
50
- "--external", "lightningcss",
51
- "--external", "vite",
52
- "--external", "@vitejs/plugin-react"
53
- ],
54
- stdout: "pipe",
55
- stderr: "pipe"
56
- })
57
-
58
- const exitCode = await buildProcess.exited
59
-
60
- if (exitCode === 0) {
61
- console.log("✅ Server build completed")
62
- } else {
63
- console.error("❌ Server build failed")
64
- process.exit(1)
65
- }
66
- }
67
-
68
- async createDockerFiles() {
69
- console.log("🐳 Creating Docker files...")
70
-
71
- const distDir = this.config.build.outDir
72
-
73
- // Dockerfile optimizado para produção
74
- const dockerfile = `# FluxStack Production Docker Image
75
- FROM oven/bun:1.1-alpine AS production
76
-
77
- WORKDIR /app
78
-
79
- # Copy package.json first for better caching
80
- COPY package.json ./
81
-
82
- # Install dependencies
83
- RUN bun install --frozen-lockfile
84
-
85
- # Copy built application
86
- COPY . .
87
-
88
- # Create non-root user
89
- RUN addgroup -g 1001 -S fluxstack && \\
90
- adduser -S fluxstack -u 1001
91
-
92
- # Set permissions
93
- RUN chown -R fluxstack:fluxstack /app
94
- USER fluxstack
95
-
96
- # Environment variables
97
- ENV NODE_ENV=production
98
- ENV PORT=3000
99
-
100
- # Health check
101
- HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\
102
- CMD bun run -e "fetch('http://localhost:3000/api/health').then(r => r.ok ? process.exit(0) : process.exit(1))" || exit 1
103
-
104
- # Expose port
105
- EXPOSE 3000
106
-
107
- # Start the application
108
- CMD ["bun", "run", "index.js"]
109
- `
110
-
111
- // docker-compose.yml para deploy rápido
112
- const dockerCompose = `version: '3.8'
113
-
114
- services:
115
- fluxstack:
116
- build: .
117
- ports:
118
- - "3000:3000"
119
- environment:
120
- - NODE_ENV=production
121
- - PORT=3000
122
- restart: unless-stopped
123
- healthcheck:
124
- test: ["CMD", "bun", "run", "-e", "fetch('http://localhost:3000/api/health').then(r => r.ok ? process.exit(0) : process.exit(1))"]
125
- interval: 30s
126
- timeout: 3s
127
- retries: 3
128
- deploy:
129
- resources:
130
- limits:
131
- memory: 512M
132
- reservations:
133
- memory: 256M
134
-
135
- # Opcional: adicionar nginx reverse proxy
136
- # nginx:
137
- # image: nginx:alpine
138
- # ports:
139
- # - "80:80"
140
- # volumes:
141
- # - ./nginx.conf:/etc/nginx/nginx.conf
142
- # depends_on:
143
- # - fluxstack
144
- # restart: unless-stopped
145
- `
146
-
147
- // .dockerignore otimizado
148
- const dockerignore = `node_modules
149
- .git
150
- .gitignore
151
- README.md
152
- .env
153
- .env.local
154
- .env.*.local
155
- npm-debug.log*
156
- yarn-debug.log*
157
- yarn-error.log*
158
- .DS_Store
159
- *.log
160
- coverage
161
- .nyc_output
162
- .vscode
163
- .idea
164
- *.swp
165
- *.swo
166
- `
167
-
168
- // Escrever arquivos no dist
169
- writeFileSync(join(distDir, "Dockerfile"), dockerfile)
170
- writeFileSync(join(distDir, "docker-compose.yml"), dockerCompose)
171
- writeFileSync(join(distDir, ".dockerignore"), dockerignore)
172
- copyFileSync(join(process.cwd(),'.env'), join(distDir, ".env"))
173
- //writeFileSync(join(distDir, "package.json"), JSON.stringify(packageJson, null, 2))
174
-
175
- console.log("✅ Docker files created in dist/")
176
- }
177
-
178
- async build() {
179
- console.log("⚡ FluxStack Framework - Building...")
180
- await this.buildClient()
181
- await this.buildServer()
182
- await this.createDockerFiles()
183
- console.log("🎉 Build completed successfully!")
184
- console.log("🐳 Ready for Docker deployment from dist/ directory")
185
- }
186
- }