create-fluxstack 1.0.1 → 1.0.3

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 (466) hide show
  1. package/.claude/settings.local.json +63 -0
  2. package/.dockerignore +50 -0
  3. package/.env.example +53 -0
  4. package/.gitattributes +2 -0
  5. package/.github/workflows/ci-build-tests.yml +480 -0
  6. package/.github/workflows/dependency-management.yml +324 -0
  7. package/.github/workflows/release-validation.yml +355 -0
  8. package/.kiro/specs/fluxstack-architecture-optimization/design.md +700 -0
  9. package/.kiro/specs/fluxstack-architecture-optimization/requirements.md +127 -0
  10. package/.kiro/specs/fluxstack-architecture-optimization/tasks.md +330 -0
  11. package/CLAUDE.md +200 -0
  12. package/Dockerfile +58 -0
  13. package/Dockerfile.backend +52 -0
  14. package/Dockerfile.frontend +54 -0
  15. package/ENV_TESTING_REPORT.md +292 -0
  16. package/FRAMEWORK_ROADMAP.md +183 -0
  17. package/FRONTEND_TESTS_README.md +287 -0
  18. package/README-Docker.md +85 -0
  19. package/TEST_RESULTS.md +130 -0
  20. package/ai-context/00-QUICK-START.md +86 -0
  21. package/ai-context/README.md +88 -0
  22. package/ai-context/development/eden-treaty-guide.md +362 -0
  23. package/ai-context/development/patterns.md +382 -0
  24. package/ai-context/examples/crud-complete.md +626 -0
  25. package/ai-context/project/architecture.md +399 -0
  26. package/ai-context/project/overview.md +213 -0
  27. package/ai-context/recent-changes/eden-treaty-refactor.md +281 -0
  28. package/ai-context/recent-changes/type-inference-fix.md +223 -0
  29. package/ai-context/reference/environment-vars.md +384 -0
  30. package/ai-context/reference/troubleshooting.md +407 -0
  31. package/bun.lock +21 -11
  32. package/bunfig.toml +16 -0
  33. package/config/fluxstack.config.ts +48 -0
  34. package/create-fluxstack.ts +2 -3
  35. package/create-test-app.ts +156 -0
  36. package/docker-compose.microservices.yml +75 -0
  37. package/docker-compose.simple.yml +57 -0
  38. package/docker-compose.yml +71 -0
  39. package/docs/dynamic-environment-variables.md +380 -0
  40. package/eslint.config.js +23 -0
  41. package/examples/dynamic-env-usage.ts +283 -0
  42. package/examples/hybrid-env-strategy.ts +212 -0
  43. package/examples/simplified-env-usage.ts +251 -0
  44. package/flux-cli.ts +214 -0
  45. package/fluxstack.config.ts +318 -0
  46. package/meu-app-teste/README.md +44 -0
  47. package/meu-app-teste/app/client/README.md +69 -0
  48. package/meu-app-teste/app/client/frontend-only.ts +12 -0
  49. package/meu-app-teste/app/client/index.html +13 -0
  50. package/meu-app-teste/app/client/public/vite.svg +1 -0
  51. package/meu-app-teste/app/client/src/App.css +883 -0
  52. package/meu-app-teste/app/client/src/App.tsx +669 -0
  53. package/meu-app-teste/app/client/src/assets/react.svg +1 -0
  54. package/meu-app-teste/app/client/src/components/TestPage.tsx +453 -0
  55. package/meu-app-teste/app/client/src/index.css +51 -0
  56. package/meu-app-teste/app/client/src/lib/eden-api.ts +110 -0
  57. package/meu-app-teste/app/client/src/main.tsx +10 -0
  58. package/meu-app-teste/app/client/src/vite-env.d.ts +1 -0
  59. package/meu-app-teste/app/client/tsconfig.app.json +43 -0
  60. package/meu-app-teste/app/client/tsconfig.json +7 -0
  61. package/meu-app-teste/app/client/tsconfig.node.json +25 -0
  62. package/meu-app-teste/app/server/app.ts +10 -0
  63. package/meu-app-teste/app/server/backend-only.ts +15 -0
  64. package/meu-app-teste/app/server/controllers/users.controller.ts +69 -0
  65. package/meu-app-teste/app/server/index.ts +104 -0
  66. package/meu-app-teste/app/server/routes/index.ts +25 -0
  67. package/meu-app-teste/app/server/routes/users.routes.ts +121 -0
  68. package/meu-app-teste/app/server/types/index.ts +1 -0
  69. package/meu-app-teste/app/shared/types/index.ts +18 -0
  70. package/meu-app-teste/bun.lock +1053 -0
  71. package/meu-app-teste/core/__tests__/integration.test.ts +227 -0
  72. package/meu-app-teste/core/build/index.ts +186 -0
  73. package/meu-app-teste/core/cli/command-registry.ts +334 -0
  74. package/meu-app-teste/core/cli/index.ts +394 -0
  75. package/meu-app-teste/core/cli/plugin-discovery.ts +200 -0
  76. package/meu-app-teste/core/client/standalone.ts +57 -0
  77. package/meu-app-teste/core/config/__tests__/config-loader.test.ts +591 -0
  78. package/meu-app-teste/core/config/__tests__/config-merger.test.ts +657 -0
  79. package/meu-app-teste/core/config/__tests__/env-converter.test.ts +372 -0
  80. package/meu-app-teste/core/config/__tests__/env-processor.test.ts +431 -0
  81. package/meu-app-teste/core/config/__tests__/env.test.ts +452 -0
  82. package/meu-app-teste/core/config/__tests__/integration.test.ts +418 -0
  83. package/meu-app-teste/core/config/__tests__/loader.test.ts +331 -0
  84. package/meu-app-teste/core/config/__tests__/schema.test.ts +129 -0
  85. package/meu-app-teste/core/config/__tests__/validator.test.ts +318 -0
  86. package/meu-app-teste/core/config/env-dynamic.ts +326 -0
  87. package/meu-app-teste/core/config/env.ts +597 -0
  88. package/meu-app-teste/core/config/index.ts +317 -0
  89. package/meu-app-teste/core/config/loader.ts +546 -0
  90. package/meu-app-teste/core/config/runtime-config.ts +322 -0
  91. package/meu-app-teste/core/config/schema.ts +694 -0
  92. package/meu-app-teste/core/config/validator.ts +540 -0
  93. package/meu-app-teste/core/framework/__tests__/server.test.ts +233 -0
  94. package/meu-app-teste/core/framework/client.ts +132 -0
  95. package/meu-app-teste/core/framework/index.ts +8 -0
  96. package/meu-app-teste/core/framework/server.ts +501 -0
  97. package/meu-app-teste/core/framework/types.ts +63 -0
  98. package/meu-app-teste/core/plugins/__tests__/built-in.test.ts.disabled +366 -0
  99. package/meu-app-teste/core/plugins/__tests__/manager.test.ts +398 -0
  100. package/meu-app-teste/core/plugins/__tests__/monitoring.test.ts +401 -0
  101. package/meu-app-teste/core/plugins/__tests__/registry.test.ts +335 -0
  102. package/meu-app-teste/core/plugins/built-in/index.ts +142 -0
  103. package/meu-app-teste/core/plugins/built-in/logger/index.ts +180 -0
  104. package/meu-app-teste/core/plugins/built-in/monitoring/README.md +193 -0
  105. package/meu-app-teste/core/plugins/built-in/monitoring/index.ts +912 -0
  106. package/meu-app-teste/core/plugins/built-in/static/index.ts +289 -0
  107. package/meu-app-teste/core/plugins/built-in/swagger/index.ts +229 -0
  108. package/meu-app-teste/core/plugins/built-in/vite/index.ts +316 -0
  109. package/meu-app-teste/core/plugins/config.ts +348 -0
  110. package/meu-app-teste/core/plugins/discovery.ts +350 -0
  111. package/meu-app-teste/core/plugins/executor.ts +351 -0
  112. package/meu-app-teste/core/plugins/index.ts +195 -0
  113. package/meu-app-teste/core/plugins/manager.ts +583 -0
  114. package/meu-app-teste/core/plugins/registry.ts +424 -0
  115. package/meu-app-teste/core/plugins/types.ts +254 -0
  116. package/meu-app-teste/core/server/framework.ts +123 -0
  117. package/meu-app-teste/core/server/index.ts +8 -0
  118. package/meu-app-teste/core/server/plugins/database.ts +182 -0
  119. package/meu-app-teste/core/server/plugins/logger.ts +47 -0
  120. package/meu-app-teste/core/server/plugins/swagger.ts +34 -0
  121. package/meu-app-teste/core/server/standalone.ts +91 -0
  122. package/meu-app-teste/core/templates/create-project.ts +455 -0
  123. package/meu-app-teste/core/types/api.ts +169 -0
  124. package/meu-app-teste/core/types/build.ts +174 -0
  125. package/meu-app-teste/core/types/config.ts +68 -0
  126. package/meu-app-teste/core/types/index.ts +127 -0
  127. package/meu-app-teste/core/types/plugin.ts +94 -0
  128. package/meu-app-teste/core/utils/__tests__/errors.test.ts +139 -0
  129. package/meu-app-teste/core/utils/__tests__/helpers.test.ts +297 -0
  130. package/meu-app-teste/core/utils/__tests__/logger.test.ts +141 -0
  131. package/meu-app-teste/core/utils/env-runtime-v2.ts +232 -0
  132. package/meu-app-teste/core/utils/env-runtime.ts +252 -0
  133. package/meu-app-teste/core/utils/errors/codes.ts +115 -0
  134. package/meu-app-teste/core/utils/errors/handlers.ts +63 -0
  135. package/meu-app-teste/core/utils/errors/index.ts +81 -0
  136. package/meu-app-teste/core/utils/helpers.ts +180 -0
  137. package/meu-app-teste/core/utils/index.ts +18 -0
  138. package/meu-app-teste/core/utils/logger/index.ts +161 -0
  139. package/meu-app-teste/core/utils/logger.ts +106 -0
  140. package/meu-app-teste/core/utils/monitoring/index.ts +212 -0
  141. package/meu-app-teste/package.json +92 -0
  142. package/meu-app-teste/tsconfig.json +51 -0
  143. package/meu-app-teste/vite.config.ts +42 -0
  144. package/my-final-test/README.md +44 -0
  145. package/my-final-test/app/client/README.md +69 -0
  146. package/my-final-test/app/client/frontend-only.ts +12 -0
  147. package/my-final-test/app/client/index.html +13 -0
  148. package/my-final-test/app/client/public/vite.svg +1 -0
  149. package/my-final-test/app/client/src/App.css +883 -0
  150. package/my-final-test/app/client/src/App.tsx +669 -0
  151. package/my-final-test/app/client/src/assets/react.svg +1 -0
  152. package/my-final-test/app/client/src/components/TestPage.tsx +453 -0
  153. package/my-final-test/app/client/src/index.css +51 -0
  154. package/my-final-test/app/client/src/lib/eden-api.ts +110 -0
  155. package/my-final-test/app/client/src/main.tsx +10 -0
  156. package/my-final-test/app/client/src/vite-env.d.ts +1 -0
  157. package/my-final-test/app/client/tsconfig.app.json +43 -0
  158. package/my-final-test/app/client/tsconfig.json +7 -0
  159. package/my-final-test/app/client/tsconfig.node.json +25 -0
  160. package/my-final-test/app/server/app.ts +10 -0
  161. package/my-final-test/app/server/backend-only.ts +15 -0
  162. package/my-final-test/app/server/controllers/users.controller.ts +69 -0
  163. package/my-final-test/app/server/index.ts +104 -0
  164. package/my-final-test/app/server/routes/index.ts +25 -0
  165. package/my-final-test/app/server/routes/users.routes.ts +121 -0
  166. package/my-final-test/app/server/types/index.ts +1 -0
  167. package/my-final-test/app/shared/types/index.ts +18 -0
  168. package/my-final-test/bun.lock +993 -0
  169. package/my-final-test/core/__tests__/integration.test.ts +227 -0
  170. package/my-final-test/core/build/index.ts +186 -0
  171. package/my-final-test/core/cli/command-registry.ts +334 -0
  172. package/my-final-test/core/cli/index.ts +394 -0
  173. package/my-final-test/core/cli/plugin-discovery.ts +200 -0
  174. package/my-final-test/core/client/standalone.ts +57 -0
  175. package/my-final-test/core/config/__tests__/config-loader.test.ts +591 -0
  176. package/my-final-test/core/config/__tests__/config-merger.test.ts +657 -0
  177. package/my-final-test/core/config/__tests__/env-converter.test.ts +372 -0
  178. package/my-final-test/core/config/__tests__/env-processor.test.ts +431 -0
  179. package/my-final-test/core/config/__tests__/env.test.ts +452 -0
  180. package/my-final-test/core/config/__tests__/integration.test.ts +418 -0
  181. package/my-final-test/core/config/__tests__/loader.test.ts +331 -0
  182. package/my-final-test/core/config/__tests__/schema.test.ts +129 -0
  183. package/my-final-test/core/config/__tests__/validator.test.ts +318 -0
  184. package/my-final-test/core/config/env-dynamic.ts +326 -0
  185. package/my-final-test/core/config/env.ts +597 -0
  186. package/my-final-test/core/config/index.ts +317 -0
  187. package/my-final-test/core/config/loader.ts +546 -0
  188. package/my-final-test/core/config/runtime-config.ts +322 -0
  189. package/my-final-test/core/config/schema.ts +694 -0
  190. package/my-final-test/core/config/validator.ts +540 -0
  191. package/my-final-test/core/framework/__tests__/server.test.ts +233 -0
  192. package/my-final-test/core/framework/client.ts +132 -0
  193. package/my-final-test/core/framework/index.ts +8 -0
  194. package/my-final-test/core/framework/server.ts +501 -0
  195. package/my-final-test/core/framework/types.ts +63 -0
  196. package/my-final-test/core/plugins/__tests__/built-in.test.ts.disabled +366 -0
  197. package/my-final-test/core/plugins/__tests__/manager.test.ts +398 -0
  198. package/my-final-test/core/plugins/__tests__/monitoring.test.ts +401 -0
  199. package/my-final-test/core/plugins/__tests__/registry.test.ts +335 -0
  200. package/my-final-test/core/plugins/built-in/index.ts +142 -0
  201. package/my-final-test/core/plugins/built-in/logger/index.ts +180 -0
  202. package/my-final-test/core/plugins/built-in/monitoring/README.md +193 -0
  203. package/my-final-test/core/plugins/built-in/monitoring/index.ts +912 -0
  204. package/my-final-test/core/plugins/built-in/static/index.ts +289 -0
  205. package/my-final-test/core/plugins/built-in/swagger/index.ts +229 -0
  206. package/my-final-test/core/plugins/built-in/vite/index.ts +316 -0
  207. package/my-final-test/core/plugins/config.ts +348 -0
  208. package/my-final-test/core/plugins/discovery.ts +350 -0
  209. package/my-final-test/core/plugins/executor.ts +351 -0
  210. package/my-final-test/core/plugins/index.ts +195 -0
  211. package/my-final-test/core/plugins/manager.ts +583 -0
  212. package/my-final-test/core/plugins/registry.ts +424 -0
  213. package/my-final-test/core/plugins/types.ts +254 -0
  214. package/my-final-test/core/server/framework.ts +123 -0
  215. package/my-final-test/core/server/index.ts +8 -0
  216. package/my-final-test/core/server/plugins/database.ts +182 -0
  217. package/my-final-test/core/server/plugins/logger.ts +47 -0
  218. package/my-final-test/core/server/plugins/swagger.ts +34 -0
  219. package/my-final-test/core/server/standalone.ts +91 -0
  220. package/my-final-test/core/templates/create-project.ts +455 -0
  221. package/my-final-test/core/types/api.ts +169 -0
  222. package/my-final-test/core/types/build.ts +174 -0
  223. package/my-final-test/core/types/config.ts +68 -0
  224. package/my-final-test/core/types/index.ts +127 -0
  225. package/my-final-test/core/types/plugin.ts +94 -0
  226. package/my-final-test/core/utils/__tests__/errors.test.ts +139 -0
  227. package/my-final-test/core/utils/__tests__/helpers.test.ts +297 -0
  228. package/my-final-test/core/utils/__tests__/logger.test.ts +141 -0
  229. package/my-final-test/core/utils/env-runtime-v2.ts +232 -0
  230. package/my-final-test/core/utils/env-runtime.ts +252 -0
  231. package/my-final-test/core/utils/errors/codes.ts +115 -0
  232. package/my-final-test/core/utils/errors/handlers.ts +63 -0
  233. package/my-final-test/core/utils/errors/index.ts +81 -0
  234. package/my-final-test/core/utils/helpers.ts +180 -0
  235. package/my-final-test/core/utils/index.ts +18 -0
  236. package/my-final-test/core/utils/logger/index.ts +161 -0
  237. package/my-final-test/core/utils/logger.ts +106 -0
  238. package/my-final-test/core/utils/monitoring/index.ts +212 -0
  239. package/my-final-test/package.json +68 -0
  240. package/my-final-test/tsconfig.json +51 -0
  241. package/my-final-test/vite.config.ts +42 -0
  242. package/nginx-lb.conf +37 -0
  243. package/package-template.json +32 -15
  244. package/package.json +71 -30
  245. package/publish-setup.md +111 -0
  246. package/publish.sh +63 -0
  247. package/run-clean.ts +26 -0
  248. package/run-env-tests.ts +313 -0
  249. package/tailwind.config.js +34 -0
  250. package/teste-corrigido/README.md +44 -0
  251. package/teste-corrigido/app/client/README.md +69 -0
  252. package/teste-corrigido/app/client/frontend-only.ts +12 -0
  253. package/teste-corrigido/app/client/index.html +13 -0
  254. package/teste-corrigido/app/client/public/vite.svg +1 -0
  255. package/teste-corrigido/app/client/src/App.css +883 -0
  256. package/teste-corrigido/app/client/src/App.tsx +669 -0
  257. package/teste-corrigido/app/client/src/assets/react.svg +1 -0
  258. package/teste-corrigido/app/client/src/components/TestPage.tsx +453 -0
  259. package/teste-corrigido/app/client/src/index.css +51 -0
  260. package/teste-corrigido/app/client/src/lib/eden-api.ts +110 -0
  261. package/teste-corrigido/app/client/src/main.tsx +10 -0
  262. package/teste-corrigido/app/client/src/vite-env.d.ts +1 -0
  263. package/teste-corrigido/app/client/tsconfig.app.json +43 -0
  264. package/teste-corrigido/app/client/tsconfig.json +7 -0
  265. package/teste-corrigido/app/client/tsconfig.node.json +25 -0
  266. package/teste-corrigido/app/server/app.ts +10 -0
  267. package/teste-corrigido/app/server/backend-only.ts +15 -0
  268. package/teste-corrigido/app/server/controllers/users.controller.ts +69 -0
  269. package/teste-corrigido/app/server/index.ts +104 -0
  270. package/teste-corrigido/app/server/routes/index.ts +25 -0
  271. package/teste-corrigido/app/server/routes/users.routes.ts +121 -0
  272. package/teste-corrigido/app/server/types/index.ts +1 -0
  273. package/teste-corrigido/app/shared/types/index.ts +18 -0
  274. package/teste-corrigido/bun.lock +1053 -0
  275. package/teste-corrigido/core/__tests__/integration.test.ts +227 -0
  276. package/teste-corrigido/core/build/index.ts +186 -0
  277. package/teste-corrigido/core/cli/command-registry.ts +334 -0
  278. package/teste-corrigido/core/cli/index.ts +394 -0
  279. package/teste-corrigido/core/cli/plugin-discovery.ts +200 -0
  280. package/teste-corrigido/core/client/standalone.ts +57 -0
  281. package/teste-corrigido/core/config/__tests__/config-loader.test.ts +591 -0
  282. package/teste-corrigido/core/config/__tests__/config-merger.test.ts +657 -0
  283. package/teste-corrigido/core/config/__tests__/env-converter.test.ts +372 -0
  284. package/teste-corrigido/core/config/__tests__/env-processor.test.ts +431 -0
  285. package/teste-corrigido/core/config/__tests__/env.test.ts +452 -0
  286. package/teste-corrigido/core/config/__tests__/integration.test.ts +418 -0
  287. package/teste-corrigido/core/config/__tests__/loader.test.ts +331 -0
  288. package/teste-corrigido/core/config/__tests__/schema.test.ts +129 -0
  289. package/teste-corrigido/core/config/__tests__/validator.test.ts +318 -0
  290. package/teste-corrigido/core/config/env-dynamic.ts +326 -0
  291. package/teste-corrigido/core/config/env.ts +597 -0
  292. package/teste-corrigido/core/config/index.ts +317 -0
  293. package/teste-corrigido/core/config/loader.ts +546 -0
  294. package/teste-corrigido/core/config/runtime-config.ts +322 -0
  295. package/teste-corrigido/core/config/schema.ts +694 -0
  296. package/teste-corrigido/core/config/validator.ts +540 -0
  297. package/teste-corrigido/core/framework/__tests__/server.test.ts +233 -0
  298. package/teste-corrigido/core/framework/client.ts +132 -0
  299. package/teste-corrigido/core/framework/index.ts +8 -0
  300. package/teste-corrigido/core/framework/server.ts +501 -0
  301. package/teste-corrigido/core/framework/types.ts +63 -0
  302. package/teste-corrigido/core/plugins/__tests__/built-in.test.ts.disabled +366 -0
  303. package/teste-corrigido/core/plugins/__tests__/manager.test.ts +398 -0
  304. package/teste-corrigido/core/plugins/__tests__/monitoring.test.ts +401 -0
  305. package/teste-corrigido/core/plugins/__tests__/registry.test.ts +335 -0
  306. package/teste-corrigido/core/plugins/built-in/index.ts +142 -0
  307. package/teste-corrigido/core/plugins/built-in/logger/index.ts +180 -0
  308. package/teste-corrigido/core/plugins/built-in/monitoring/README.md +193 -0
  309. package/teste-corrigido/core/plugins/built-in/monitoring/index.ts +912 -0
  310. package/teste-corrigido/core/plugins/built-in/static/index.ts +289 -0
  311. package/teste-corrigido/core/plugins/built-in/swagger/index.ts +229 -0
  312. package/teste-corrigido/core/plugins/built-in/vite/index.ts +316 -0
  313. package/teste-corrigido/core/plugins/config.ts +348 -0
  314. package/teste-corrigido/core/plugins/discovery.ts +350 -0
  315. package/teste-corrigido/core/plugins/executor.ts +351 -0
  316. package/teste-corrigido/core/plugins/index.ts +195 -0
  317. package/teste-corrigido/core/plugins/manager.ts +583 -0
  318. package/teste-corrigido/core/plugins/registry.ts +424 -0
  319. package/teste-corrigido/core/plugins/types.ts +254 -0
  320. package/teste-corrigido/core/server/framework.ts +123 -0
  321. package/teste-corrigido/core/server/index.ts +8 -0
  322. package/teste-corrigido/core/server/plugins/database.ts +182 -0
  323. package/teste-corrigido/core/server/plugins/logger.ts +47 -0
  324. package/teste-corrigido/core/server/plugins/swagger.ts +34 -0
  325. package/teste-corrigido/core/server/standalone.ts +91 -0
  326. package/teste-corrigido/core/templates/create-project.ts +455 -0
  327. package/teste-corrigido/core/types/api.ts +169 -0
  328. package/teste-corrigido/core/types/build.ts +174 -0
  329. package/teste-corrigido/core/types/config.ts +68 -0
  330. package/teste-corrigido/core/types/index.ts +127 -0
  331. package/teste-corrigido/core/types/plugin.ts +94 -0
  332. package/teste-corrigido/core/utils/__tests__/errors.test.ts +139 -0
  333. package/teste-corrigido/core/utils/__tests__/helpers.test.ts +297 -0
  334. package/teste-corrigido/core/utils/__tests__/logger.test.ts +141 -0
  335. package/teste-corrigido/core/utils/env-runtime-v2.ts +232 -0
  336. package/teste-corrigido/core/utils/env-runtime.ts +252 -0
  337. package/teste-corrigido/core/utils/errors/codes.ts +115 -0
  338. package/teste-corrigido/core/utils/errors/handlers.ts +63 -0
  339. package/teste-corrigido/core/utils/errors/index.ts +81 -0
  340. package/teste-corrigido/core/utils/helpers.ts +180 -0
  341. package/teste-corrigido/core/utils/index.ts +18 -0
  342. package/teste-corrigido/core/utils/logger/index.ts +161 -0
  343. package/teste-corrigido/core/utils/logger.ts +106 -0
  344. package/teste-corrigido/core/utils/monitoring/index.ts +212 -0
  345. package/teste-corrigido/package-template.json +51 -0
  346. package/teste-corrigido/package.json +51 -0
  347. package/teste-corrigido/tsconfig.json +51 -0
  348. package/teste-corrigido/vite.config.ts +42 -0
  349. package/teste-final-npm/README.md +44 -0
  350. package/teste-final-npm/app/client/README.md +69 -0
  351. package/teste-final-npm/app/client/frontend-only.ts +12 -0
  352. package/teste-final-npm/app/client/index.html +13 -0
  353. package/teste-final-npm/app/client/public/vite.svg +1 -0
  354. package/teste-final-npm/app/client/src/App.css +883 -0
  355. package/teste-final-npm/app/client/src/App.tsx +669 -0
  356. package/teste-final-npm/app/client/src/assets/react.svg +1 -0
  357. package/teste-final-npm/app/client/src/components/TestPage.tsx +453 -0
  358. package/teste-final-npm/app/client/src/index.css +51 -0
  359. package/teste-final-npm/app/client/src/lib/eden-api.ts +110 -0
  360. package/teste-final-npm/app/client/src/main.tsx +10 -0
  361. package/teste-final-npm/app/client/src/vite-env.d.ts +1 -0
  362. package/teste-final-npm/app/client/tsconfig.app.json +43 -0
  363. package/teste-final-npm/app/client/tsconfig.json +7 -0
  364. package/teste-final-npm/app/client/tsconfig.node.json +25 -0
  365. package/teste-final-npm/app/server/app.ts +10 -0
  366. package/teste-final-npm/app/server/backend-only.ts +15 -0
  367. package/teste-final-npm/app/server/controllers/users.controller.ts +69 -0
  368. package/teste-final-npm/app/server/index.ts +104 -0
  369. package/teste-final-npm/app/server/routes/index.ts +25 -0
  370. package/teste-final-npm/app/server/routes/users.routes.ts +121 -0
  371. package/teste-final-npm/app/server/types/index.ts +1 -0
  372. package/teste-final-npm/app/shared/types/index.ts +18 -0
  373. package/teste-final-npm/bun.lock +1053 -0
  374. package/teste-final-npm/core/__tests__/integration.test.ts +227 -0
  375. package/teste-final-npm/core/build/index.ts +186 -0
  376. package/teste-final-npm/core/cli/command-registry.ts +334 -0
  377. package/teste-final-npm/core/cli/index.ts +394 -0
  378. package/teste-final-npm/core/cli/plugin-discovery.ts +200 -0
  379. package/teste-final-npm/core/client/standalone.ts +57 -0
  380. package/teste-final-npm/core/config/__tests__/config-loader.test.ts +591 -0
  381. package/teste-final-npm/core/config/__tests__/config-merger.test.ts +657 -0
  382. package/teste-final-npm/core/config/__tests__/env-converter.test.ts +372 -0
  383. package/teste-final-npm/core/config/__tests__/env-processor.test.ts +431 -0
  384. package/teste-final-npm/core/config/__tests__/env.test.ts +452 -0
  385. package/teste-final-npm/core/config/__tests__/integration.test.ts +418 -0
  386. package/teste-final-npm/core/config/__tests__/loader.test.ts +331 -0
  387. package/teste-final-npm/core/config/__tests__/schema.test.ts +129 -0
  388. package/teste-final-npm/core/config/__tests__/validator.test.ts +318 -0
  389. package/teste-final-npm/core/config/env-dynamic.ts +326 -0
  390. package/teste-final-npm/core/config/env.ts +597 -0
  391. package/teste-final-npm/core/config/index.ts +317 -0
  392. package/teste-final-npm/core/config/loader.ts +546 -0
  393. package/teste-final-npm/core/config/runtime-config.ts +322 -0
  394. package/teste-final-npm/core/config/schema.ts +694 -0
  395. package/teste-final-npm/core/config/validator.ts +540 -0
  396. package/teste-final-npm/core/framework/__tests__/server.test.ts +233 -0
  397. package/teste-final-npm/core/framework/client.ts +132 -0
  398. package/teste-final-npm/core/framework/index.ts +8 -0
  399. package/teste-final-npm/core/framework/server.ts +501 -0
  400. package/teste-final-npm/core/framework/types.ts +63 -0
  401. package/teste-final-npm/core/plugins/__tests__/built-in.test.ts.disabled +366 -0
  402. package/teste-final-npm/core/plugins/__tests__/manager.test.ts +398 -0
  403. package/teste-final-npm/core/plugins/__tests__/monitoring.test.ts +401 -0
  404. package/teste-final-npm/core/plugins/__tests__/registry.test.ts +335 -0
  405. package/teste-final-npm/core/plugins/built-in/index.ts +142 -0
  406. package/teste-final-npm/core/plugins/built-in/logger/index.ts +180 -0
  407. package/teste-final-npm/core/plugins/built-in/monitoring/README.md +193 -0
  408. package/teste-final-npm/core/plugins/built-in/monitoring/index.ts +912 -0
  409. package/teste-final-npm/core/plugins/built-in/static/index.ts +289 -0
  410. package/teste-final-npm/core/plugins/built-in/swagger/index.ts +229 -0
  411. package/teste-final-npm/core/plugins/built-in/vite/index.ts +316 -0
  412. package/teste-final-npm/core/plugins/config.ts +348 -0
  413. package/teste-final-npm/core/plugins/discovery.ts +350 -0
  414. package/teste-final-npm/core/plugins/executor.ts +351 -0
  415. package/teste-final-npm/core/plugins/index.ts +195 -0
  416. package/teste-final-npm/core/plugins/manager.ts +583 -0
  417. package/teste-final-npm/core/plugins/registry.ts +424 -0
  418. package/teste-final-npm/core/plugins/types.ts +254 -0
  419. package/teste-final-npm/core/server/framework.ts +123 -0
  420. package/teste-final-npm/core/server/index.ts +8 -0
  421. package/teste-final-npm/core/server/plugins/database.ts +182 -0
  422. package/teste-final-npm/core/server/plugins/logger.ts +47 -0
  423. package/teste-final-npm/core/server/plugins/swagger.ts +34 -0
  424. package/teste-final-npm/core/server/standalone.ts +91 -0
  425. package/teste-final-npm/core/templates/create-project.ts +455 -0
  426. package/teste-final-npm/core/types/api.ts +169 -0
  427. package/teste-final-npm/core/types/build.ts +174 -0
  428. package/teste-final-npm/core/types/config.ts +68 -0
  429. package/teste-final-npm/core/types/index.ts +127 -0
  430. package/teste-final-npm/core/types/plugin.ts +94 -0
  431. package/teste-final-npm/core/utils/__tests__/errors.test.ts +139 -0
  432. package/teste-final-npm/core/utils/__tests__/helpers.test.ts +297 -0
  433. package/teste-final-npm/core/utils/__tests__/logger.test.ts +141 -0
  434. package/teste-final-npm/core/utils/env-runtime-v2.ts +232 -0
  435. package/teste-final-npm/core/utils/env-runtime.ts +252 -0
  436. package/teste-final-npm/core/utils/errors/codes.ts +115 -0
  437. package/teste-final-npm/core/utils/errors/handlers.ts +63 -0
  438. package/teste-final-npm/core/utils/errors/index.ts +81 -0
  439. package/teste-final-npm/core/utils/helpers.ts +180 -0
  440. package/teste-final-npm/core/utils/index.ts +18 -0
  441. package/teste-final-npm/core/utils/logger/index.ts +161 -0
  442. package/teste-final-npm/core/utils/logger.ts +106 -0
  443. package/teste-final-npm/core/utils/monitoring/index.ts +212 -0
  444. package/teste-final-npm/package-template.json +51 -0
  445. package/teste-final-npm/package.json +51 -0
  446. package/teste-final-npm/tsconfig.json +51 -0
  447. package/teste-final-npm/vite.config.ts +42 -0
  448. package/tests/__mocks__/api.ts +56 -0
  449. package/tests/fixtures/users.ts +69 -0
  450. package/tests/integration/api/users.routes.test.ts +221 -0
  451. package/tests/setup.ts +29 -0
  452. package/tests/unit/app/client/App-simple.test.tsx +56 -0
  453. package/tests/unit/app/client/App.test.tsx.skip +237 -0
  454. package/tests/unit/app/client/eden-api.test.ts +186 -0
  455. package/tests/unit/app/client/simple.test.tsx +23 -0
  456. package/tests/unit/app/controllers/users.controller.test.ts +150 -0
  457. package/tests/unit/core/create-project.test.ts.skip +95 -0
  458. package/tests/unit/core/framework.test.ts +144 -0
  459. package/tests/unit/core/plugins/logger.test.ts.skip +268 -0
  460. package/tests/unit/core/plugins/vite.test.ts.disabled +188 -0
  461. package/tests/utils/test-helpers.ts +61 -0
  462. package/types/global.d.ts +30 -0
  463. package/types/vitest.d.ts +9 -0
  464. package/vitest.config.ts +50 -0
  465. package/workspace.json +6 -0
  466. package/.env +0 -30
@@ -0,0 +1,212 @@
1
+ /**
2
+ * Estratégia Híbrida: Env Fixado + Env Dinâmico
3
+ * Use o melhor de cada abordagem conforme necessário
4
+ */
5
+
6
+ import { env } from '@/core/utils/env-runtime'
7
+
8
+ // ========================================
9
+ // CONFIGURAÇÕES FIXADAS (Build-time)
10
+ // ========================================
11
+ // Use para valores que nunca mudam ou precisam de máxima performance
12
+
13
+ // App metadata - fixado é OK
14
+ const APP_NAME = process.env.FLUXSTACK_APP_NAME || 'FluxStack'
15
+ const APP_VERSION = process.env.FLUXSTACK_APP_VERSION || '1.0.0'
16
+
17
+ // Feature flags - fixado é OK
18
+ const ENABLE_SWAGGER = process.env.ENABLE_SWAGGER !== 'false'
19
+ const ENABLE_CORS = process.env.ENABLE_CORS !== 'false'
20
+
21
+ // Build configuration - fixado é ideal
22
+ const BUILD_TARGET = process.env.BUILD_TARGET || 'bun'
23
+ const CLIENT_OUTDIR = process.env.CLIENT_OUTDIR || 'dist/client'
24
+
25
+ // ========================================
26
+ // CONFIGURAÇÕES DINÂMICAS (Runtime)
27
+ // ========================================
28
+ // Use para valores que precisam mudar em diferentes deploys
29
+
30
+ // Server config - deve ser dinâmico
31
+ const getServerConfig = () => ({
32
+ port: env.num('PORT', 3000), // 🔄 Dinâmico
33
+ host: env.get('HOST', 'localhost'), // 🔄 Dinâmico
34
+ apiPrefix: env.get('API_PREFIX', '/api')
35
+ })
36
+
37
+ // Database - deve ser dinâmico
38
+ const getDatabaseConfig = () => ({
39
+ url: env.get('DATABASE_URL'), // 🔄 Dinâmico
40
+ maxConnections: env.num('DB_MAX_CONNECTIONS', 10),
41
+ ssl: env.bool('DB_SSL', env.get('NODE_ENV') === 'production')
42
+ })
43
+
44
+ // Secrets - deve ser dinâmico
45
+ const getSecrets = () => ({
46
+ jwtSecret: env.get('JWT_SECRET'), // 🔄 Dinâmico
47
+ apiKey: env.get('API_KEY'),
48
+ encryptionKey: env.get('ENCRYPTION_KEY')
49
+ })
50
+
51
+ // Environment specific - dinâmico
52
+ const getEnvironmentConfig = () => ({
53
+ nodeEnv: env.get('NODE_ENV', 'development'), // 🔄 Dinâmico
54
+ logLevel: env.get('LOG_LEVEL', 'info'),
55
+ debug: env.bool('DEBUG', false)
56
+ })
57
+
58
+ // ========================================
59
+ // CONFIGURAÇÃO HÍBRIDA
60
+ // ========================================
61
+
62
+ export const hybridConfig = {
63
+ // Fixado no build (performance máxima)
64
+ app: {
65
+ name: APP_NAME, // ⚡ Fixado
66
+ version: APP_VERSION, // ⚡ Fixado
67
+ enableSwagger: ENABLE_SWAGGER, // ⚡ Fixado
68
+ enableCors: ENABLE_CORS // ⚡ Fixado
69
+ },
70
+
71
+ build: {
72
+ target: BUILD_TARGET, // ⚡ Fixado
73
+ clientOutDir: CLIENT_OUTDIR // ⚡ Fixado
74
+ },
75
+
76
+ // Dinâmico no runtime (flexibilidade máxima)
77
+ runtime: {
78
+ server: getServerConfig(), // 🔄 Dinâmico
79
+ database: getDatabaseConfig(), // 🔄 Dinâmico
80
+ secrets: getSecrets(), // 🔄 Dinâmico
81
+ environment: getEnvironmentConfig() // 🔄 Dinâmico
82
+ }
83
+ }
84
+
85
+ // ========================================
86
+ // EXEMPLO DE USO PRÁTICO
87
+ // ========================================
88
+
89
+ export function createHybridServer() {
90
+ console.log(`🚀 Starting ${hybridConfig.app.name} v${hybridConfig.app.version}`)
91
+
92
+ const { server, database, environment } = hybridConfig.runtime
93
+
94
+ console.log(`📊 Environment: ${environment.nodeEnv}`)
95
+ console.log(`🌐 Server: ${server.host}:${server.port}`)
96
+ console.log(`💾 Database: ${database.url ? '✅ Connected' : '❌ Not configured'}`)
97
+
98
+ // Configuração do FluxStack
99
+ const config = {
100
+ // Valores fixados (build-time) - performance máxima
101
+ app: hybridConfig.app,
102
+ build: hybridConfig.build,
103
+
104
+ // Valores dinâmicos (runtime) - flexibilidade máxima
105
+ server: {
106
+ port: server.port, // 🔄 Pode mudar sem rebuild
107
+ host: server.host, // 🔄 Pode mudar sem rebuild
108
+ apiPrefix: server.apiPrefix,
109
+ cors: {
110
+ origins: env.array('CORS_ORIGINS', ['*']),
111
+ enabled: hybridConfig.app.enableCors // ⚡ Fixado no build
112
+ }
113
+ },
114
+
115
+ logging: {
116
+ level: environment.logLevel, // 🔄 Pode mudar sem rebuild
117
+ debug: environment.debug
118
+ }
119
+ }
120
+
121
+ return config
122
+ }
123
+
124
+ // ========================================
125
+ // OTIMIZAÇÃO POR AMBIENTE
126
+ // ========================================
127
+
128
+ export function createOptimizedConfig() {
129
+ const nodeEnv = env.get('NODE_ENV', 'development')
130
+
131
+ switch (nodeEnv) {
132
+ case 'development':
133
+ return {
134
+ // Development: tudo dinâmico para flexibilidade
135
+ port: env.num('PORT', 3000), // 🔄
136
+ debug: env.bool('DEBUG', true), // 🔄
137
+ logLevel: env.get('LOG_LEVEL', 'debug'), // 🔄
138
+ hotReload: env.bool('HOT_RELOAD', true) // 🔄
139
+ }
140
+
141
+ case 'production':
142
+ return {
143
+ // Production: mix de fixado e dinâmico
144
+ appName: APP_NAME, // ⚡ Fixado (performance)
145
+ version: APP_VERSION, // ⚡ Fixado (performance)
146
+ port: env.num('PORT', 3000), // 🔄 Dinâmico (deploy)
147
+ dbUrl: env.get('DATABASE_URL'), // 🔄 Dinâmico (deploy)
148
+ logLevel: env.get('LOG_LEVEL', 'warn') // 🔄 Dinâmico (ops)
149
+ }
150
+
151
+ default:
152
+ return createHybridServer()
153
+ }
154
+ }
155
+
156
+ // ========================================
157
+ // PERFORMANCE COMPARISON
158
+ // ========================================
159
+
160
+ export const performanceComparison = {
161
+ // ⚡ ULTRA RÁPIDO - Fixado no build
162
+ fixedConfig: {
163
+ port: 3000, // Literal number
164
+ dbUrl: "postgres://...", // Literal string
165
+ debug: false // Literal boolean
166
+ },
167
+
168
+ // 🔄 LIGEIRAMENTE MAIS LENTO - Dinâmico
169
+ dynamicConfig: {
170
+ port: env.num('PORT', 3000), // Function call
171
+ dbUrl: env.get('DATABASE_URL'), // Function call
172
+ debug: env.bool('DEBUG', false) // Function call
173
+ }
174
+ }
175
+
176
+ // ========================================
177
+ // MIGRAÇÃO GRADUAL
178
+ // ========================================
179
+
180
+ export const migrationStrategy = {
181
+ // Passo 1: Identifique configurações críticas
182
+ critical: {
183
+ // Use dinâmico para configs que DEVEM mudar
184
+ port: env.num('PORT', 3000),
185
+ dbUrl: env.get('DATABASE_URL'),
186
+ secrets: env.get('JWT_SECRET')
187
+ },
188
+
189
+ // Passo 2: Mantenha fixado o que não precisa mudar
190
+ static: {
191
+ appName: process.env.APP_NAME || 'MyApp',
192
+ version: process.env.APP_VERSION || '1.0.0',
193
+ features: process.env.FEATURES?.split(',') || []
194
+ },
195
+
196
+ // Passo 3: Migre gradualmente conforme necessário
197
+ gradually: {
198
+ // Comece com fixado...
199
+ logLevel: process.env.LOG_LEVEL || 'info',
200
+
201
+ // ...depois mude para dinâmico quando precisar
202
+ // logLevel: env.get('LOG_LEVEL', 'info')
203
+ }
204
+ }
205
+
206
+ export default {
207
+ hybridConfig,
208
+ createHybridServer,
209
+ createOptimizedConfig,
210
+ performanceComparison,
211
+ migrationStrategy
212
+ }
@@ -0,0 +1,251 @@
1
+ /**
2
+ * Exemplos da API simplificada de Environment Variables
3
+ * Mais elegante, intuitiva e com menos código
4
+ */
5
+
6
+ import { env, createNamespace, validate, helpers } from '../core/utils/env-runtime-v2'
7
+
8
+ // ========================================
9
+ // 1. CASTING AUTOMÁTICO INTELIGENTE
10
+ // ========================================
11
+
12
+ // ✅ NOVO - API super simples com casting automático
13
+ const config = {
14
+ port: env.get('PORT', 3000), // -> number (baseado no default)
15
+ debug: env.get('DEBUG', false), // -> boolean (baseado no default)
16
+ origins: env.get('CORS_ORIGINS', ['*']), // -> string[] (baseado no default)
17
+ host: env.get('HOST', 'localhost'), // -> string (baseado no default)
18
+ dbUrl: env.get('DATABASE_URL'), // -> string | undefined
19
+ retries: env.get('MAX_RETRIES', 3), // -> number
20
+ features: env.get('FEATURES', ['api']) // -> string[]
21
+ }
22
+
23
+ // ❌ ANTES - API verbosa com métodos específicos
24
+ const oldConfig = {
25
+ port: env.num('PORT', 3000),
26
+ debug: env.bool('DEBUG', false),
27
+ origins: env.array('CORS_ORIGINS', ['*']),
28
+ host: env.get('HOST', 'localhost'),
29
+ dbUrl: env.get('DATABASE_URL'),
30
+ retries: env.num('MAX_RETRIES', 3),
31
+ features: env.array('FEATURES', ['api'])
32
+ }
33
+
34
+ // ========================================
35
+ // 2. ACESSO DIRETO COMO PROPRIEDADES
36
+ // ========================================
37
+
38
+ console.log(`🚀 Starting on ${env.HOST}:${env.PORT}`) // Direto!
39
+ console.log(`📊 Environment: ${env.NODE_ENV}`) // Direto!
40
+ console.log(`🐛 Debug mode: ${env.DEBUG}`) // Direto!
41
+ console.log(`📋 Swagger: ${env.ENABLE_SWAGGER}`) // Direto!
42
+ console.log(`💾 Database: ${env.DATABASE_URL || 'not configured'}`) // Direto!
43
+
44
+ // Todos com tipos corretos automaticamente!
45
+
46
+ // ========================================
47
+ // 3. CONFIGURAÇÃO DE SERVIDOR SIMPLIFICADA
48
+ // ========================================
49
+
50
+ export function createSimpleServer() {
51
+ return {
52
+ // Casting automático baseado no tipo do default
53
+ server: {
54
+ port: env.get('PORT', 3000), // number
55
+ host: env.get('HOST', 'localhost'), // string
56
+ timeout: env.get('TIMEOUT', 30000), // number
57
+ keepAlive: env.get('KEEP_ALIVE', true) // boolean
58
+ },
59
+
60
+ // Ou acesso direto
61
+ database: {
62
+ url: env.DATABASE_URL, // string
63
+ ssl: env.DB_SSL, // boolean
64
+ port: env.DB_PORT, // number
65
+ maxConnections: env.get('DB_MAX_CONNECTIONS', 10) // number
66
+ },
67
+
68
+ cors: {
69
+ origins: env.CORS_ORIGINS, // string[]
70
+ credentials: env.get('CORS_CREDENTIALS', false), // boolean
71
+ maxAge: env.get('CORS_MAX_AGE', 86400) // number
72
+ }
73
+ }
74
+ }
75
+
76
+ // ========================================
77
+ // 4. NAMESPACES PARA ORGANIZAÇÃO
78
+ // ========================================
79
+
80
+ // Criar namespaces especializados
81
+ const db = createNamespace('DATABASE_')
82
+ const redis = createNamespace('REDIS_')
83
+ const smtp = createNamespace('SMTP_')
84
+
85
+ const databaseConfig = {
86
+ url: db.get('URL'), // DATABASE_URL
87
+ host: db.get('HOST', 'localhost'), // DATABASE_HOST
88
+ port: db.get('PORT', 5432), // DATABASE_PORT (number)
89
+ ssl: db.get('SSL', false), // DATABASE_SSL (boolean)
90
+ poolSize: db.get('POOL_SIZE', 10), // DATABASE_POOL_SIZE (number)
91
+ timeout: db.get('TIMEOUT', 30000) // DATABASE_TIMEOUT (number)
92
+ }
93
+
94
+ const redisConfig = {
95
+ url: redis.get('URL'), // REDIS_URL
96
+ host: redis.get('HOST', 'localhost'), // REDIS_HOST
97
+ port: redis.get('PORT', 6379), // REDIS_PORT (number)
98
+ password: redis.get('PASSWORD') // REDIS_PASSWORD
99
+ }
100
+
101
+ // ========================================
102
+ // 5. CONFIGURAÇÃO CONDICIONAL ELEGANTE
103
+ // ========================================
104
+
105
+ export function createConditionalConfig() {
106
+ const config: any = {
107
+ app: {
108
+ name: env.FLUXSTACK_APP_NAME, // 'FluxStack'
109
+ version: env.FLUXSTACK_APP_VERSION // '1.0.0'
110
+ },
111
+
112
+ server: {
113
+ port: env.PORT, // 3000
114
+ host: env.HOST // 'localhost'
115
+ }
116
+ }
117
+
118
+ // Adicionar database se configurado
119
+ if (env.has('DATABASE_URL')) {
120
+ config.database = {
121
+ url: env.DATABASE_URL,
122
+ ssl: env.get('DB_SSL', env.NODE_ENV === 'production') // smart default
123
+ }
124
+ }
125
+
126
+ // Features opcionais
127
+ if (env.ENABLE_MONITORING) {
128
+ config.monitoring = {
129
+ metrics: env.ENABLE_METRICS,
130
+ interval: env.get('METRICS_INTERVAL', 30000)
131
+ }
132
+ }
133
+
134
+ return config
135
+ }
136
+
137
+ // ========================================
138
+ // 6. VALIDAÇÃO SIMPLIFICADA
139
+ // ========================================
140
+
141
+ export function validateEnvironment() {
142
+ // Vars obrigatórias
143
+ validate.require(['NODE_ENV'])
144
+
145
+ // Produção precisa de mais vars
146
+ if (helpers.isProduction()) {
147
+ validate.require(['DATABASE_URL', 'JWT_SECRET'])
148
+ }
149
+
150
+ // Validar valores específicos
151
+ validate.oneOf('NODE_ENV', ['development', 'production', 'test'])
152
+ validate.oneOf('LOG_LEVEL', ['debug', 'info', 'warn', 'error'])
153
+ }
154
+
155
+ // ========================================
156
+ // 7. HELPERS ÚTEIS
157
+ // ========================================
158
+
159
+ export function printConfiguration() {
160
+ console.log('🔧 Configuration loaded:')
161
+ console.log(` Environment: ${env.NODE_ENV}`)
162
+ console.log(` Server: ${helpers.getServerUrl()}`)
163
+ console.log(` Client: ${helpers.getClientUrl()}`)
164
+ console.log(` Database: ${helpers.getDatabaseUrl() || 'not configured'}`)
165
+ console.log(` Debug: ${env.DEBUG ? 'enabled' : 'disabled'}`)
166
+ console.log(` Swagger: ${env.ENABLE_SWAGGER ? 'enabled' : 'disabled'}`)
167
+ }
168
+
169
+ // ========================================
170
+ // 8. FLUXSTACK INTEGRATION SIMPLIFICADA
171
+ // ========================================
172
+
173
+ import { FluxStackFramework } from '../core/framework/server'
174
+
175
+ export function createSimpleFluxStack() {
176
+ validateEnvironment()
177
+
178
+ const app = new FluxStackFramework({
179
+ app: {
180
+ name: env.FLUXSTACK_APP_NAME, // Direto!
181
+ version: env.FLUXSTACK_APP_VERSION // Direto!
182
+ },
183
+
184
+ server: {
185
+ port: env.PORT, // Direto! (number)
186
+ host: env.HOST, // Direto! (string)
187
+ apiPrefix: env.API_PREFIX, // Direto! (string)
188
+ cors: {
189
+ origins: env.CORS_ORIGINS, // Direto! (string[])
190
+ credentials: env.get('CORS_CREDENTIALS', false) // boolean
191
+ }
192
+ },
193
+
194
+ client: {
195
+ port: env.VITE_PORT, // Direto! (number)
196
+ proxy: {
197
+ target: helpers.getServerUrl() // Helper!
198
+ }
199
+ }
200
+ })
201
+
202
+ // Plugins condicionais
203
+ if (env.ENABLE_SWAGGER) {
204
+ console.log('📋 Swagger enabled')
205
+ // app.use(swaggerPlugin)
206
+ }
207
+
208
+ if (env.ENABLE_MONITORING) {
209
+ console.log('📊 Monitoring enabled')
210
+ // app.use(monitoringPlugin)
211
+ }
212
+
213
+ return app
214
+ }
215
+
216
+ // ========================================
217
+ // 9. COMPARAÇÃO ANTES vs DEPOIS
218
+ // ========================================
219
+
220
+ // ❌ ANTES - Verboso
221
+ const beforeConfig = {
222
+ port: env.num('PORT', 3000),
223
+ debug: env.bool('DEBUG', false),
224
+ origins: env.array('CORS_ORIGINS', ['*']),
225
+ retries: env.num('MAX_RETRIES', 3),
226
+ timeout: env.num('TIMEOUT', 30000)
227
+ }
228
+
229
+ // ✅ DEPOIS - Limpo e elegante
230
+ const afterConfig = {
231
+ port: env.get('PORT', 3000), // casting automático
232
+ debug: env.get('DEBUG', false), // casting automático
233
+ origins: env.get('CORS_ORIGINS', ['*']), // casting automático
234
+ retries: env.get('MAX_RETRIES', 3), // casting automático
235
+ timeout: env.get('TIMEOUT', 30000) // casting automático
236
+ }
237
+
238
+ // Ou ainda mais simples com propriedades diretas:
239
+ const simpleConfig = {
240
+ port: env.PORT, // Direto da propriedade
241
+ debug: env.DEBUG, // Direto da propriedade
242
+ origins: env.CORS_ORIGINS // Direto da propriedade
243
+ }
244
+
245
+ export default {
246
+ createSimpleServer,
247
+ createConditionalConfig,
248
+ validateEnvironment,
249
+ printConfiguration,
250
+ createSimpleFluxStack
251
+ }
package/flux-cli.ts ADDED
@@ -0,0 +1,214 @@
1
+ #!/usr/bin/env bun
2
+
3
+ /**
4
+ * FluxStack CLI - Comando nativo `flux`
5
+ * Permite criar projetos sem dependências externas ou configurações manuais
6
+ */
7
+
8
+ import { promises as fs } from 'fs';
9
+ import path from 'path';
10
+ import { spawn } from 'child_process';
11
+
12
+ interface CreateProjectOptions {
13
+ name: string;
14
+ template?: 'basic' | 'minimal' | 'full';
15
+ }
16
+
17
+ async function createProject(options: CreateProjectOptions) {
18
+ const { name, template = 'basic' } = options;
19
+ const projectPath = path.resolve(name);
20
+
21
+ console.log(`🚀 Creating FluxStack project: ${name}`);
22
+ console.log(`📋 Template: ${template}`);
23
+ console.log(`📁 Location: ${projectPath}`);
24
+ console.log();
25
+
26
+ // Check if directory exists
27
+ try {
28
+ await fs.access(projectPath);
29
+ console.error(`❌ Directory "${name}" already exists`);
30
+ process.exit(1);
31
+ } catch (error: any) {
32
+ if (error.code !== 'ENOENT') {
33
+ throw error;
34
+ }
35
+ }
36
+
37
+ // Create project directory
38
+ await fs.mkdir(projectPath, { recursive: true });
39
+
40
+ // Copy template
41
+ const templatePath = path.resolve(__dirname, 'templates', template);
42
+ await copyDirectory(templatePath, projectPath);
43
+
44
+ // Process placeholders
45
+ await processTemplateFiles(projectPath, {
46
+ PROJECT_NAME: name,
47
+ PROJECT_DESCRIPTION: `A FluxStack application named ${name}`
48
+ });
49
+
50
+ console.log('✅ Project structure created!');
51
+ console.log('📦 Installing dependencies...');
52
+
53
+ // Install dependencies
54
+ await installDependencies(projectPath);
55
+
56
+ console.log();
57
+ console.log('🎉 Project created successfully!');
58
+ console.log();
59
+ console.log('Next steps:');
60
+ console.log(` cd ${name}`);
61
+ console.log(' bun run dev');
62
+ console.log();
63
+ console.log('Happy coding! 🚀');
64
+ }
65
+
66
+ async function copyDirectory(src: string, dest: string, exclude: string[] = ['node_modules', '.git', 'dist']) {
67
+ await fs.mkdir(dest, { recursive: true });
68
+
69
+ try {
70
+ const entries = await fs.readdir(src, { withFileTypes: true });
71
+
72
+ for (const entry of entries) {
73
+ if (exclude.includes(entry.name)) continue;
74
+
75
+ const srcPath = path.join(src, entry.name);
76
+ const destPath = path.join(dest, entry.name);
77
+
78
+ if (entry.isDirectory()) {
79
+ await copyDirectory(srcPath, destPath, exclude);
80
+ } else {
81
+ const content = await fs.readFile(srcPath, 'utf-8');
82
+ await fs.writeFile(destPath, content, 'utf-8');
83
+ }
84
+ }
85
+ } catch (error) {
86
+ console.error(`❌ Template not found at: ${src}`);
87
+ console.error('Make sure you have the templates directory in your FluxStack installation.');
88
+ process.exit(1);
89
+ }
90
+ }
91
+
92
+ async function processTemplateFiles(
93
+ projectPath: string,
94
+ replacements: Record<string, string>
95
+ ) {
96
+ const files = await getAllFiles(projectPath);
97
+
98
+ for (const file of files) {
99
+ // Skip binary files
100
+ if (isBinaryFile(file)) continue;
101
+
102
+ let content = await fs.readFile(file, 'utf-8');
103
+
104
+ // Replace placeholders
105
+ for (const [key, value] of Object.entries(replacements)) {
106
+ const regex = new RegExp(`{{${key}}}`, 'g');
107
+ content = content.replace(regex, value);
108
+ }
109
+
110
+ await fs.writeFile(file, content, 'utf-8');
111
+ }
112
+ }
113
+
114
+ async function getAllFiles(dirPath: string): Promise<string[]> {
115
+ const files: string[] = [];
116
+ const items = await fs.readdir(dirPath, { withFileTypes: true });
117
+
118
+ for (const item of items) {
119
+ const fullPath = path.join(dirPath, item.name);
120
+
121
+ if (item.isDirectory()) {
122
+ files.push(...await getAllFiles(fullPath));
123
+ } else {
124
+ files.push(fullPath);
125
+ }
126
+ }
127
+
128
+ return files;
129
+ }
130
+
131
+ function isBinaryFile(filePath: string): boolean {
132
+ const binaryExtensions = ['.png', '.jpg', '.jpeg', '.gif', '.ico', '.svg', '.woff', '.woff2', '.ttf', '.eot'];
133
+ const ext = path.extname(filePath).toLowerCase();
134
+ return binaryExtensions.includes(ext);
135
+ }
136
+
137
+ async function installDependencies(projectPath: string): Promise<void> {
138
+ return new Promise((resolve, reject) => {
139
+ const install = spawn('bun', ['install'], {
140
+ cwd: projectPath,
141
+ stdio: 'inherit'
142
+ });
143
+
144
+ install.on('close', (code) => {
145
+ if (code === 0) {
146
+ resolve();
147
+ } else {
148
+ reject(new Error(`Dependencies installation failed with code ${code}`));
149
+ }
150
+ });
151
+
152
+ install.on('error', reject);
153
+ });
154
+ }
155
+
156
+ function showHelp() {
157
+ console.log(`
158
+ 🚀 FluxStack CLI
159
+
160
+ Usage:
161
+ flux create <project-name> Create a new FluxStack project
162
+ flux create <project-name> --template Specify template (basic, minimal, full)
163
+ flux --help Show this help
164
+
165
+ Examples:
166
+ flux create my-app Create basic project
167
+ flux create my-blog --template basic Create with basic template
168
+ flux create my-api --template minimal Create minimal project
169
+
170
+ Templates:
171
+ basic Full-featured app with frontend and backend (default)
172
+ minimal Just the backend API
173
+ full Everything + advanced features
174
+
175
+ Get started in seconds! 🔥
176
+ `);
177
+ }
178
+
179
+ // Parse command line arguments
180
+ const args = process.argv.slice(2);
181
+ const command = args[0];
182
+
183
+ if (!command || command === '--help' || command === 'help') {
184
+ showHelp();
185
+ process.exit(0);
186
+ }
187
+
188
+ if (command === 'create') {
189
+ const projectName = args[1];
190
+
191
+ if (!projectName) {
192
+ console.error('❌ Please provide a project name');
193
+ console.error('Usage: flux create <project-name>');
194
+ process.exit(1);
195
+ }
196
+
197
+ // Validate project name
198
+ if (!/^[a-zA-Z0-9-_]+$/.test(projectName)) {
199
+ console.error('❌ Project name can only contain letters, numbers, hyphens, and underscores');
200
+ process.exit(1);
201
+ }
202
+
203
+ const templateIndex = args.indexOf('--template');
204
+ const template = templateIndex !== -1 ? args[templateIndex + 1] as 'basic' | 'minimal' | 'full' : 'basic';
205
+
206
+ createProject({ name: projectName, template }).catch(error => {
207
+ console.error('❌ Error creating project:', error.message);
208
+ process.exit(1);
209
+ });
210
+ } else {
211
+ console.error(`❌ Unknown command: ${command}`);
212
+ console.error('Run "flux --help" for available commands');
213
+ process.exit(1);
214
+ }