create-fluxstack 1.0.2 → 1.0.4

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 (561) hide show
  1. package/.claude/settings.local.json +65 -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/LICENSE +21 -0
  19. package/README-Docker.md +85 -0
  20. package/TEST_RESULTS.md +130 -0
  21. package/ai-context/00-QUICK-START.md +86 -0
  22. package/ai-context/README.md +88 -0
  23. package/ai-context/development/eden-treaty-guide.md +362 -0
  24. package/ai-context/development/patterns.md +382 -0
  25. package/ai-context/examples/crud-complete.md +626 -0
  26. package/ai-context/project/architecture.md +399 -0
  27. package/ai-context/project/overview.md +213 -0
  28. package/ai-context/recent-changes/eden-treaty-refactor.md +281 -0
  29. package/ai-context/recent-changes/type-inference-fix.md +223 -0
  30. package/ai-context/reference/environment-vars.md +384 -0
  31. package/ai-context/reference/troubleshooting.md +407 -0
  32. package/app/client/README.md +69 -0
  33. package/app/client/frontend-only.ts +12 -0
  34. package/app/client/index.html +13 -0
  35. package/app/client/public/vite.svg +1 -0
  36. package/app/client/src/App.css +883 -0
  37. package/app/client/src/App.tsx +669 -0
  38. package/app/client/src/assets/react.svg +1 -0
  39. package/app/client/src/components/TestPage.tsx +453 -0
  40. package/app/client/src/index.css +51 -0
  41. package/app/client/src/lib/eden-api.ts +110 -0
  42. package/app/client/src/main.tsx +10 -0
  43. package/app/client/src/vite-env.d.ts +1 -0
  44. package/app/client/tsconfig.app.json +43 -0
  45. package/app/client/tsconfig.json +7 -0
  46. package/app/client/tsconfig.node.json +25 -0
  47. package/app/server/app.ts +10 -0
  48. package/app/server/backend-only.ts +15 -0
  49. package/app/server/controllers/users.controller.ts +69 -0
  50. package/app/server/index.ts +104 -0
  51. package/app/server/routes/index.ts +25 -0
  52. package/app/server/routes/users.routes.ts +121 -0
  53. package/app/server/types/index.ts +1 -0
  54. package/app/shared/types/index.ts +18 -0
  55. package/bun.lock +1063 -0
  56. package/bunfig.toml +16 -0
  57. package/config/fluxstack.config.ts +48 -0
  58. package/core/__tests__/integration.test.ts +227 -0
  59. package/core/build/index.ts +186 -0
  60. package/core/cli/command-registry.ts +334 -0
  61. package/core/cli/index.ts +394 -0
  62. package/core/cli/plugin-discovery.ts +200 -0
  63. package/core/client/standalone.ts +57 -0
  64. package/core/config/__tests__/config-loader.test.ts +591 -0
  65. package/core/config/__tests__/config-merger.test.ts +657 -0
  66. package/core/config/__tests__/env-converter.test.ts +372 -0
  67. package/core/config/__tests__/env-processor.test.ts +431 -0
  68. package/core/config/__tests__/env.test.ts +452 -0
  69. package/core/config/__tests__/integration.test.ts +418 -0
  70. package/core/config/__tests__/loader.test.ts +331 -0
  71. package/core/config/__tests__/schema.test.ts +129 -0
  72. package/core/config/__tests__/validator.test.ts +318 -0
  73. package/core/config/env-dynamic.ts +326 -0
  74. package/core/config/env.ts +597 -0
  75. package/core/config/index.ts +317 -0
  76. package/core/config/loader.ts +546 -0
  77. package/core/config/runtime-config.ts +322 -0
  78. package/core/config/schema.ts +694 -0
  79. package/core/config/validator.ts +540 -0
  80. package/core/framework/__tests__/server.test.ts +233 -0
  81. package/core/framework/client.ts +132 -0
  82. package/core/framework/index.ts +8 -0
  83. package/core/framework/server.ts +501 -0
  84. package/core/framework/types.ts +63 -0
  85. package/core/plugins/__tests__/built-in.test.ts.disabled +366 -0
  86. package/core/plugins/__tests__/manager.test.ts +398 -0
  87. package/core/plugins/__tests__/monitoring.test.ts +401 -0
  88. package/core/plugins/__tests__/registry.test.ts +335 -0
  89. package/core/plugins/built-in/index.ts +142 -0
  90. package/core/plugins/built-in/logger/index.ts +180 -0
  91. package/core/plugins/built-in/monitoring/README.md +193 -0
  92. package/core/plugins/built-in/monitoring/index.ts +912 -0
  93. package/core/plugins/built-in/static/index.ts +289 -0
  94. package/core/plugins/built-in/swagger/index.ts +229 -0
  95. package/core/plugins/built-in/vite/index.ts +316 -0
  96. package/core/plugins/config.ts +348 -0
  97. package/core/plugins/discovery.ts +350 -0
  98. package/core/plugins/executor.ts +351 -0
  99. package/core/plugins/index.ts +195 -0
  100. package/core/plugins/manager.ts +583 -0
  101. package/core/plugins/registry.ts +424 -0
  102. package/core/plugins/types.ts +254 -0
  103. package/core/server/framework.ts +123 -0
  104. package/core/server/index.ts +8 -0
  105. package/core/server/plugins/database.ts +182 -0
  106. package/core/server/plugins/logger.ts +47 -0
  107. package/core/server/plugins/swagger.ts +34 -0
  108. package/core/server/standalone.ts +91 -0
  109. package/core/templates/create-project.ts +455 -0
  110. package/core/types/api.ts +169 -0
  111. package/core/types/build.ts +174 -0
  112. package/core/types/config.ts +68 -0
  113. package/core/types/index.ts +127 -0
  114. package/core/types/plugin.ts +94 -0
  115. package/core/utils/__tests__/errors.test.ts +139 -0
  116. package/core/utils/__tests__/helpers.test.ts +297 -0
  117. package/core/utils/__tests__/logger.test.ts +141 -0
  118. package/core/utils/env-runtime-v2.ts +232 -0
  119. package/core/utils/env-runtime.ts +252 -0
  120. package/core/utils/errors/codes.ts +115 -0
  121. package/core/utils/errors/handlers.ts +63 -0
  122. package/core/utils/errors/index.ts +81 -0
  123. package/core/utils/helpers.ts +180 -0
  124. package/core/utils/index.ts +18 -0
  125. package/core/utils/logger/index.ts +161 -0
  126. package/core/utils/logger.ts +106 -0
  127. package/core/utils/monitoring/index.ts +212 -0
  128. package/create-fluxstack.ts +1 -1
  129. package/create-test-app.ts +156 -0
  130. package/docker-compose.microservices.yml +75 -0
  131. package/docker-compose.simple.yml +57 -0
  132. package/docker-compose.yml +71 -0
  133. package/docs/dynamic-environment-variables.md +380 -0
  134. package/eslint.config.js +23 -0
  135. package/examples/dynamic-env-usage.ts +283 -0
  136. package/examples/hybrid-env-strategy.ts +212 -0
  137. package/examples/simplified-env-usage.ts +251 -0
  138. package/flux-cli.ts +214 -0
  139. package/fluxstack.config.ts +318 -0
  140. package/meu-app-teste/README.md +44 -0
  141. package/meu-app-teste/app/client/README.md +69 -0
  142. package/meu-app-teste/app/client/frontend-only.ts +12 -0
  143. package/meu-app-teste/app/client/index.html +13 -0
  144. package/meu-app-teste/app/client/public/vite.svg +1 -0
  145. package/meu-app-teste/app/client/src/App.css +883 -0
  146. package/meu-app-teste/app/client/src/App.tsx +669 -0
  147. package/meu-app-teste/app/client/src/assets/react.svg +1 -0
  148. package/meu-app-teste/app/client/src/components/TestPage.tsx +453 -0
  149. package/meu-app-teste/app/client/src/index.css +51 -0
  150. package/meu-app-teste/app/client/src/lib/eden-api.ts +110 -0
  151. package/meu-app-teste/app/client/src/main.tsx +10 -0
  152. package/meu-app-teste/app/client/src/vite-env.d.ts +1 -0
  153. package/meu-app-teste/app/client/tsconfig.app.json +43 -0
  154. package/meu-app-teste/app/client/tsconfig.json +7 -0
  155. package/meu-app-teste/app/client/tsconfig.node.json +25 -0
  156. package/meu-app-teste/app/server/app.ts +10 -0
  157. package/meu-app-teste/app/server/backend-only.ts +15 -0
  158. package/meu-app-teste/app/server/controllers/users.controller.ts +69 -0
  159. package/meu-app-teste/app/server/index.ts +104 -0
  160. package/meu-app-teste/app/server/routes/index.ts +25 -0
  161. package/meu-app-teste/app/server/routes/users.routes.ts +121 -0
  162. package/meu-app-teste/app/server/types/index.ts +1 -0
  163. package/meu-app-teste/app/shared/types/index.ts +18 -0
  164. package/meu-app-teste/bun.lock +1053 -0
  165. package/meu-app-teste/core/__tests__/integration.test.ts +227 -0
  166. package/meu-app-teste/core/build/index.ts +186 -0
  167. package/meu-app-teste/core/cli/command-registry.ts +334 -0
  168. package/meu-app-teste/core/cli/index.ts +394 -0
  169. package/meu-app-teste/core/cli/plugin-discovery.ts +200 -0
  170. package/meu-app-teste/core/client/standalone.ts +57 -0
  171. package/meu-app-teste/core/config/__tests__/config-loader.test.ts +591 -0
  172. package/meu-app-teste/core/config/__tests__/config-merger.test.ts +657 -0
  173. package/meu-app-teste/core/config/__tests__/env-converter.test.ts +372 -0
  174. package/meu-app-teste/core/config/__tests__/env-processor.test.ts +431 -0
  175. package/meu-app-teste/core/config/__tests__/env.test.ts +452 -0
  176. package/meu-app-teste/core/config/__tests__/integration.test.ts +418 -0
  177. package/meu-app-teste/core/config/__tests__/loader.test.ts +331 -0
  178. package/meu-app-teste/core/config/__tests__/schema.test.ts +129 -0
  179. package/meu-app-teste/core/config/__tests__/validator.test.ts +318 -0
  180. package/meu-app-teste/core/config/env-dynamic.ts +326 -0
  181. package/meu-app-teste/core/config/env.ts +597 -0
  182. package/meu-app-teste/core/config/index.ts +317 -0
  183. package/meu-app-teste/core/config/loader.ts +546 -0
  184. package/meu-app-teste/core/config/runtime-config.ts +322 -0
  185. package/meu-app-teste/core/config/schema.ts +694 -0
  186. package/meu-app-teste/core/config/validator.ts +540 -0
  187. package/meu-app-teste/core/framework/__tests__/server.test.ts +233 -0
  188. package/meu-app-teste/core/framework/client.ts +132 -0
  189. package/meu-app-teste/core/framework/index.ts +8 -0
  190. package/meu-app-teste/core/framework/server.ts +501 -0
  191. package/meu-app-teste/core/framework/types.ts +63 -0
  192. package/meu-app-teste/core/plugins/__tests__/built-in.test.ts.disabled +366 -0
  193. package/meu-app-teste/core/plugins/__tests__/manager.test.ts +398 -0
  194. package/meu-app-teste/core/plugins/__tests__/monitoring.test.ts +401 -0
  195. package/meu-app-teste/core/plugins/__tests__/registry.test.ts +335 -0
  196. package/meu-app-teste/core/plugins/built-in/index.ts +142 -0
  197. package/meu-app-teste/core/plugins/built-in/logger/index.ts +180 -0
  198. package/meu-app-teste/core/plugins/built-in/monitoring/README.md +193 -0
  199. package/meu-app-teste/core/plugins/built-in/monitoring/index.ts +912 -0
  200. package/meu-app-teste/core/plugins/built-in/static/index.ts +289 -0
  201. package/meu-app-teste/core/plugins/built-in/swagger/index.ts +229 -0
  202. package/meu-app-teste/core/plugins/built-in/vite/index.ts +316 -0
  203. package/meu-app-teste/core/plugins/config.ts +348 -0
  204. package/meu-app-teste/core/plugins/discovery.ts +350 -0
  205. package/meu-app-teste/core/plugins/executor.ts +351 -0
  206. package/meu-app-teste/core/plugins/index.ts +195 -0
  207. package/meu-app-teste/core/plugins/manager.ts +583 -0
  208. package/meu-app-teste/core/plugins/registry.ts +424 -0
  209. package/meu-app-teste/core/plugins/types.ts +254 -0
  210. package/meu-app-teste/core/server/framework.ts +123 -0
  211. package/meu-app-teste/core/server/index.ts +8 -0
  212. package/meu-app-teste/core/server/plugins/database.ts +182 -0
  213. package/meu-app-teste/core/server/plugins/logger.ts +47 -0
  214. package/meu-app-teste/core/server/plugins/swagger.ts +34 -0
  215. package/meu-app-teste/core/server/standalone.ts +91 -0
  216. package/meu-app-teste/core/templates/create-project.ts +455 -0
  217. package/meu-app-teste/core/types/api.ts +169 -0
  218. package/meu-app-teste/core/types/build.ts +174 -0
  219. package/meu-app-teste/core/types/config.ts +68 -0
  220. package/meu-app-teste/core/types/index.ts +127 -0
  221. package/meu-app-teste/core/types/plugin.ts +94 -0
  222. package/meu-app-teste/core/utils/__tests__/errors.test.ts +139 -0
  223. package/meu-app-teste/core/utils/__tests__/helpers.test.ts +297 -0
  224. package/meu-app-teste/core/utils/__tests__/logger.test.ts +141 -0
  225. package/meu-app-teste/core/utils/env-runtime-v2.ts +232 -0
  226. package/meu-app-teste/core/utils/env-runtime.ts +252 -0
  227. package/meu-app-teste/core/utils/errors/codes.ts +115 -0
  228. package/meu-app-teste/core/utils/errors/handlers.ts +63 -0
  229. package/meu-app-teste/core/utils/errors/index.ts +81 -0
  230. package/meu-app-teste/core/utils/helpers.ts +180 -0
  231. package/meu-app-teste/core/utils/index.ts +18 -0
  232. package/meu-app-teste/core/utils/logger/index.ts +161 -0
  233. package/meu-app-teste/core/utils/logger.ts +106 -0
  234. package/meu-app-teste/core/utils/monitoring/index.ts +212 -0
  235. package/meu-app-teste/package.json +92 -0
  236. package/meu-app-teste/tsconfig.json +51 -0
  237. package/meu-app-teste/vite.config.ts +42 -0
  238. package/my-final-test/README.md +44 -0
  239. package/my-final-test/app/client/README.md +69 -0
  240. package/my-final-test/app/client/frontend-only.ts +12 -0
  241. package/my-final-test/app/client/index.html +13 -0
  242. package/my-final-test/app/client/public/vite.svg +1 -0
  243. package/my-final-test/app/client/src/App.css +883 -0
  244. package/my-final-test/app/client/src/App.tsx +669 -0
  245. package/my-final-test/app/client/src/assets/react.svg +1 -0
  246. package/my-final-test/app/client/src/components/TestPage.tsx +453 -0
  247. package/my-final-test/app/client/src/index.css +51 -0
  248. package/my-final-test/app/client/src/lib/eden-api.ts +110 -0
  249. package/my-final-test/app/client/src/main.tsx +10 -0
  250. package/my-final-test/app/client/src/vite-env.d.ts +1 -0
  251. package/my-final-test/app/client/tsconfig.app.json +43 -0
  252. package/my-final-test/app/client/tsconfig.json +7 -0
  253. package/my-final-test/app/client/tsconfig.node.json +25 -0
  254. package/my-final-test/app/server/app.ts +10 -0
  255. package/my-final-test/app/server/backend-only.ts +15 -0
  256. package/my-final-test/app/server/controllers/users.controller.ts +69 -0
  257. package/my-final-test/app/server/index.ts +104 -0
  258. package/my-final-test/app/server/routes/index.ts +25 -0
  259. package/my-final-test/app/server/routes/users.routes.ts +121 -0
  260. package/my-final-test/app/server/types/index.ts +1 -0
  261. package/my-final-test/app/shared/types/index.ts +18 -0
  262. package/my-final-test/bun.lock +993 -0
  263. package/my-final-test/core/__tests__/integration.test.ts +227 -0
  264. package/my-final-test/core/build/index.ts +186 -0
  265. package/my-final-test/core/cli/command-registry.ts +334 -0
  266. package/my-final-test/core/cli/index.ts +394 -0
  267. package/my-final-test/core/cli/plugin-discovery.ts +200 -0
  268. package/my-final-test/core/client/standalone.ts +57 -0
  269. package/my-final-test/core/config/__tests__/config-loader.test.ts +591 -0
  270. package/my-final-test/core/config/__tests__/config-merger.test.ts +657 -0
  271. package/my-final-test/core/config/__tests__/env-converter.test.ts +372 -0
  272. package/my-final-test/core/config/__tests__/env-processor.test.ts +431 -0
  273. package/my-final-test/core/config/__tests__/env.test.ts +452 -0
  274. package/my-final-test/core/config/__tests__/integration.test.ts +418 -0
  275. package/my-final-test/core/config/__tests__/loader.test.ts +331 -0
  276. package/my-final-test/core/config/__tests__/schema.test.ts +129 -0
  277. package/my-final-test/core/config/__tests__/validator.test.ts +318 -0
  278. package/my-final-test/core/config/env-dynamic.ts +326 -0
  279. package/my-final-test/core/config/env.ts +597 -0
  280. package/my-final-test/core/config/index.ts +317 -0
  281. package/my-final-test/core/config/loader.ts +546 -0
  282. package/my-final-test/core/config/runtime-config.ts +322 -0
  283. package/my-final-test/core/config/schema.ts +694 -0
  284. package/my-final-test/core/config/validator.ts +540 -0
  285. package/my-final-test/core/framework/__tests__/server.test.ts +233 -0
  286. package/my-final-test/core/framework/client.ts +132 -0
  287. package/my-final-test/core/framework/index.ts +8 -0
  288. package/my-final-test/core/framework/server.ts +501 -0
  289. package/my-final-test/core/framework/types.ts +63 -0
  290. package/my-final-test/core/plugins/__tests__/built-in.test.ts.disabled +366 -0
  291. package/my-final-test/core/plugins/__tests__/manager.test.ts +398 -0
  292. package/my-final-test/core/plugins/__tests__/monitoring.test.ts +401 -0
  293. package/my-final-test/core/plugins/__tests__/registry.test.ts +335 -0
  294. package/my-final-test/core/plugins/built-in/index.ts +142 -0
  295. package/my-final-test/core/plugins/built-in/logger/index.ts +180 -0
  296. package/my-final-test/core/plugins/built-in/monitoring/README.md +193 -0
  297. package/my-final-test/core/plugins/built-in/monitoring/index.ts +912 -0
  298. package/my-final-test/core/plugins/built-in/static/index.ts +289 -0
  299. package/my-final-test/core/plugins/built-in/swagger/index.ts +229 -0
  300. package/my-final-test/core/plugins/built-in/vite/index.ts +316 -0
  301. package/my-final-test/core/plugins/config.ts +348 -0
  302. package/my-final-test/core/plugins/discovery.ts +350 -0
  303. package/my-final-test/core/plugins/executor.ts +351 -0
  304. package/my-final-test/core/plugins/index.ts +195 -0
  305. package/my-final-test/core/plugins/manager.ts +583 -0
  306. package/my-final-test/core/plugins/registry.ts +424 -0
  307. package/my-final-test/core/plugins/types.ts +254 -0
  308. package/my-final-test/core/server/framework.ts +123 -0
  309. package/my-final-test/core/server/index.ts +8 -0
  310. package/my-final-test/core/server/plugins/database.ts +182 -0
  311. package/my-final-test/core/server/plugins/logger.ts +47 -0
  312. package/my-final-test/core/server/plugins/swagger.ts +34 -0
  313. package/my-final-test/core/server/standalone.ts +91 -0
  314. package/my-final-test/core/templates/create-project.ts +455 -0
  315. package/my-final-test/core/types/api.ts +169 -0
  316. package/my-final-test/core/types/build.ts +174 -0
  317. package/my-final-test/core/types/config.ts +68 -0
  318. package/my-final-test/core/types/index.ts +127 -0
  319. package/my-final-test/core/types/plugin.ts +94 -0
  320. package/my-final-test/core/utils/__tests__/errors.test.ts +139 -0
  321. package/my-final-test/core/utils/__tests__/helpers.test.ts +297 -0
  322. package/my-final-test/core/utils/__tests__/logger.test.ts +141 -0
  323. package/my-final-test/core/utils/env-runtime-v2.ts +232 -0
  324. package/my-final-test/core/utils/env-runtime.ts +252 -0
  325. package/my-final-test/core/utils/errors/codes.ts +115 -0
  326. package/my-final-test/core/utils/errors/handlers.ts +63 -0
  327. package/my-final-test/core/utils/errors/index.ts +81 -0
  328. package/my-final-test/core/utils/helpers.ts +180 -0
  329. package/my-final-test/core/utils/index.ts +18 -0
  330. package/my-final-test/core/utils/logger/index.ts +161 -0
  331. package/my-final-test/core/utils/logger.ts +106 -0
  332. package/my-final-test/core/utils/monitoring/index.ts +212 -0
  333. package/my-final-test/package.json +68 -0
  334. package/my-final-test/tsconfig.json +51 -0
  335. package/my-final-test/vite.config.ts +42 -0
  336. package/nginx-lb.conf +37 -0
  337. package/package-template.json +32 -15
  338. package/package.json +71 -30
  339. package/publish-setup.md +111 -0
  340. package/publish.sh +63 -0
  341. package/run-clean.ts +26 -0
  342. package/run-env-tests.ts +313 -0
  343. package/tailwind.config.js +34 -0
  344. package/teste-corrigido/README.md +44 -0
  345. package/teste-corrigido/app/client/README.md +69 -0
  346. package/teste-corrigido/app/client/frontend-only.ts +12 -0
  347. package/teste-corrigido/app/client/index.html +13 -0
  348. package/teste-corrigido/app/client/public/vite.svg +1 -0
  349. package/teste-corrigido/app/client/src/App.css +883 -0
  350. package/teste-corrigido/app/client/src/App.tsx +669 -0
  351. package/teste-corrigido/app/client/src/assets/react.svg +1 -0
  352. package/teste-corrigido/app/client/src/components/TestPage.tsx +453 -0
  353. package/teste-corrigido/app/client/src/index.css +51 -0
  354. package/teste-corrigido/app/client/src/lib/eden-api.ts +110 -0
  355. package/teste-corrigido/app/client/src/main.tsx +10 -0
  356. package/teste-corrigido/app/client/src/vite-env.d.ts +1 -0
  357. package/teste-corrigido/app/client/tsconfig.app.json +43 -0
  358. package/teste-corrigido/app/client/tsconfig.json +7 -0
  359. package/teste-corrigido/app/client/tsconfig.node.json +25 -0
  360. package/teste-corrigido/app/server/app.ts +10 -0
  361. package/teste-corrigido/app/server/backend-only.ts +15 -0
  362. package/teste-corrigido/app/server/controllers/users.controller.ts +69 -0
  363. package/teste-corrigido/app/server/index.ts +104 -0
  364. package/teste-corrigido/app/server/routes/index.ts +25 -0
  365. package/teste-corrigido/app/server/routes/users.routes.ts +121 -0
  366. package/teste-corrigido/app/server/types/index.ts +1 -0
  367. package/teste-corrigido/app/shared/types/index.ts +18 -0
  368. package/teste-corrigido/bun.lock +1053 -0
  369. package/teste-corrigido/core/__tests__/integration.test.ts +227 -0
  370. package/teste-corrigido/core/build/index.ts +186 -0
  371. package/teste-corrigido/core/cli/command-registry.ts +334 -0
  372. package/teste-corrigido/core/cli/index.ts +394 -0
  373. package/teste-corrigido/core/cli/plugin-discovery.ts +200 -0
  374. package/teste-corrigido/core/client/standalone.ts +57 -0
  375. package/teste-corrigido/core/config/__tests__/config-loader.test.ts +591 -0
  376. package/teste-corrigido/core/config/__tests__/config-merger.test.ts +657 -0
  377. package/teste-corrigido/core/config/__tests__/env-converter.test.ts +372 -0
  378. package/teste-corrigido/core/config/__tests__/env-processor.test.ts +431 -0
  379. package/teste-corrigido/core/config/__tests__/env.test.ts +452 -0
  380. package/teste-corrigido/core/config/__tests__/integration.test.ts +418 -0
  381. package/teste-corrigido/core/config/__tests__/loader.test.ts +331 -0
  382. package/teste-corrigido/core/config/__tests__/schema.test.ts +129 -0
  383. package/teste-corrigido/core/config/__tests__/validator.test.ts +318 -0
  384. package/teste-corrigido/core/config/env-dynamic.ts +326 -0
  385. package/teste-corrigido/core/config/env.ts +597 -0
  386. package/teste-corrigido/core/config/index.ts +317 -0
  387. package/teste-corrigido/core/config/loader.ts +546 -0
  388. package/teste-corrigido/core/config/runtime-config.ts +322 -0
  389. package/teste-corrigido/core/config/schema.ts +694 -0
  390. package/teste-corrigido/core/config/validator.ts +540 -0
  391. package/teste-corrigido/core/framework/__tests__/server.test.ts +233 -0
  392. package/teste-corrigido/core/framework/client.ts +132 -0
  393. package/teste-corrigido/core/framework/index.ts +8 -0
  394. package/teste-corrigido/core/framework/server.ts +501 -0
  395. package/teste-corrigido/core/framework/types.ts +63 -0
  396. package/teste-corrigido/core/plugins/__tests__/built-in.test.ts.disabled +366 -0
  397. package/teste-corrigido/core/plugins/__tests__/manager.test.ts +398 -0
  398. package/teste-corrigido/core/plugins/__tests__/monitoring.test.ts +401 -0
  399. package/teste-corrigido/core/plugins/__tests__/registry.test.ts +335 -0
  400. package/teste-corrigido/core/plugins/built-in/index.ts +142 -0
  401. package/teste-corrigido/core/plugins/built-in/logger/index.ts +180 -0
  402. package/teste-corrigido/core/plugins/built-in/monitoring/README.md +193 -0
  403. package/teste-corrigido/core/plugins/built-in/monitoring/index.ts +912 -0
  404. package/teste-corrigido/core/plugins/built-in/static/index.ts +289 -0
  405. package/teste-corrigido/core/plugins/built-in/swagger/index.ts +229 -0
  406. package/teste-corrigido/core/plugins/built-in/vite/index.ts +316 -0
  407. package/teste-corrigido/core/plugins/config.ts +348 -0
  408. package/teste-corrigido/core/plugins/discovery.ts +350 -0
  409. package/teste-corrigido/core/plugins/executor.ts +351 -0
  410. package/teste-corrigido/core/plugins/index.ts +195 -0
  411. package/teste-corrigido/core/plugins/manager.ts +583 -0
  412. package/teste-corrigido/core/plugins/registry.ts +424 -0
  413. package/teste-corrigido/core/plugins/types.ts +254 -0
  414. package/teste-corrigido/core/server/framework.ts +123 -0
  415. package/teste-corrigido/core/server/index.ts +8 -0
  416. package/teste-corrigido/core/server/plugins/database.ts +182 -0
  417. package/teste-corrigido/core/server/plugins/logger.ts +47 -0
  418. package/teste-corrigido/core/server/plugins/swagger.ts +34 -0
  419. package/teste-corrigido/core/server/standalone.ts +91 -0
  420. package/teste-corrigido/core/templates/create-project.ts +455 -0
  421. package/teste-corrigido/core/types/api.ts +169 -0
  422. package/teste-corrigido/core/types/build.ts +174 -0
  423. package/teste-corrigido/core/types/config.ts +68 -0
  424. package/teste-corrigido/core/types/index.ts +127 -0
  425. package/teste-corrigido/core/types/plugin.ts +94 -0
  426. package/teste-corrigido/core/utils/__tests__/errors.test.ts +139 -0
  427. package/teste-corrigido/core/utils/__tests__/helpers.test.ts +297 -0
  428. package/teste-corrigido/core/utils/__tests__/logger.test.ts +141 -0
  429. package/teste-corrigido/core/utils/env-runtime-v2.ts +232 -0
  430. package/teste-corrigido/core/utils/env-runtime.ts +252 -0
  431. package/teste-corrigido/core/utils/errors/codes.ts +115 -0
  432. package/teste-corrigido/core/utils/errors/handlers.ts +63 -0
  433. package/teste-corrigido/core/utils/errors/index.ts +81 -0
  434. package/teste-corrigido/core/utils/helpers.ts +180 -0
  435. package/teste-corrigido/core/utils/index.ts +18 -0
  436. package/teste-corrigido/core/utils/logger/index.ts +161 -0
  437. package/teste-corrigido/core/utils/logger.ts +106 -0
  438. package/teste-corrigido/core/utils/monitoring/index.ts +212 -0
  439. package/teste-corrigido/package-template.json +51 -0
  440. package/teste-corrigido/package.json +51 -0
  441. package/teste-corrigido/tsconfig.json +51 -0
  442. package/teste-corrigido/vite.config.ts +42 -0
  443. package/teste-final-npm/README.md +44 -0
  444. package/teste-final-npm/app/client/README.md +69 -0
  445. package/teste-final-npm/app/client/frontend-only.ts +12 -0
  446. package/teste-final-npm/app/client/index.html +13 -0
  447. package/teste-final-npm/app/client/public/vite.svg +1 -0
  448. package/teste-final-npm/app/client/src/App.css +883 -0
  449. package/teste-final-npm/app/client/src/App.tsx +669 -0
  450. package/teste-final-npm/app/client/src/assets/react.svg +1 -0
  451. package/teste-final-npm/app/client/src/components/TestPage.tsx +453 -0
  452. package/teste-final-npm/app/client/src/index.css +51 -0
  453. package/teste-final-npm/app/client/src/lib/eden-api.ts +110 -0
  454. package/teste-final-npm/app/client/src/main.tsx +10 -0
  455. package/teste-final-npm/app/client/src/vite-env.d.ts +1 -0
  456. package/teste-final-npm/app/client/tsconfig.app.json +43 -0
  457. package/teste-final-npm/app/client/tsconfig.json +7 -0
  458. package/teste-final-npm/app/client/tsconfig.node.json +25 -0
  459. package/teste-final-npm/app/server/app.ts +10 -0
  460. package/teste-final-npm/app/server/backend-only.ts +15 -0
  461. package/teste-final-npm/app/server/controllers/users.controller.ts +69 -0
  462. package/teste-final-npm/app/server/index.ts +104 -0
  463. package/teste-final-npm/app/server/routes/index.ts +25 -0
  464. package/teste-final-npm/app/server/routes/users.routes.ts +121 -0
  465. package/teste-final-npm/app/server/types/index.ts +1 -0
  466. package/teste-final-npm/app/shared/types/index.ts +18 -0
  467. package/teste-final-npm/bun.lock +1053 -0
  468. package/teste-final-npm/core/__tests__/integration.test.ts +227 -0
  469. package/teste-final-npm/core/build/index.ts +186 -0
  470. package/teste-final-npm/core/cli/command-registry.ts +334 -0
  471. package/teste-final-npm/core/cli/index.ts +394 -0
  472. package/teste-final-npm/core/cli/plugin-discovery.ts +200 -0
  473. package/teste-final-npm/core/client/standalone.ts +57 -0
  474. package/teste-final-npm/core/config/__tests__/config-loader.test.ts +591 -0
  475. package/teste-final-npm/core/config/__tests__/config-merger.test.ts +657 -0
  476. package/teste-final-npm/core/config/__tests__/env-converter.test.ts +372 -0
  477. package/teste-final-npm/core/config/__tests__/env-processor.test.ts +431 -0
  478. package/teste-final-npm/core/config/__tests__/env.test.ts +452 -0
  479. package/teste-final-npm/core/config/__tests__/integration.test.ts +418 -0
  480. package/teste-final-npm/core/config/__tests__/loader.test.ts +331 -0
  481. package/teste-final-npm/core/config/__tests__/schema.test.ts +129 -0
  482. package/teste-final-npm/core/config/__tests__/validator.test.ts +318 -0
  483. package/teste-final-npm/core/config/env-dynamic.ts +326 -0
  484. package/teste-final-npm/core/config/env.ts +597 -0
  485. package/teste-final-npm/core/config/index.ts +317 -0
  486. package/teste-final-npm/core/config/loader.ts +546 -0
  487. package/teste-final-npm/core/config/runtime-config.ts +322 -0
  488. package/teste-final-npm/core/config/schema.ts +694 -0
  489. package/teste-final-npm/core/config/validator.ts +540 -0
  490. package/teste-final-npm/core/framework/__tests__/server.test.ts +233 -0
  491. package/teste-final-npm/core/framework/client.ts +132 -0
  492. package/teste-final-npm/core/framework/index.ts +8 -0
  493. package/teste-final-npm/core/framework/server.ts +501 -0
  494. package/teste-final-npm/core/framework/types.ts +63 -0
  495. package/teste-final-npm/core/plugins/__tests__/built-in.test.ts.disabled +366 -0
  496. package/teste-final-npm/core/plugins/__tests__/manager.test.ts +398 -0
  497. package/teste-final-npm/core/plugins/__tests__/monitoring.test.ts +401 -0
  498. package/teste-final-npm/core/plugins/__tests__/registry.test.ts +335 -0
  499. package/teste-final-npm/core/plugins/built-in/index.ts +142 -0
  500. package/teste-final-npm/core/plugins/built-in/logger/index.ts +180 -0
  501. package/teste-final-npm/core/plugins/built-in/monitoring/README.md +193 -0
  502. package/teste-final-npm/core/plugins/built-in/monitoring/index.ts +912 -0
  503. package/teste-final-npm/core/plugins/built-in/static/index.ts +289 -0
  504. package/teste-final-npm/core/plugins/built-in/swagger/index.ts +229 -0
  505. package/teste-final-npm/core/plugins/built-in/vite/index.ts +316 -0
  506. package/teste-final-npm/core/plugins/config.ts +348 -0
  507. package/teste-final-npm/core/plugins/discovery.ts +350 -0
  508. package/teste-final-npm/core/plugins/executor.ts +351 -0
  509. package/teste-final-npm/core/plugins/index.ts +195 -0
  510. package/teste-final-npm/core/plugins/manager.ts +583 -0
  511. package/teste-final-npm/core/plugins/registry.ts +424 -0
  512. package/teste-final-npm/core/plugins/types.ts +254 -0
  513. package/teste-final-npm/core/server/framework.ts +123 -0
  514. package/teste-final-npm/core/server/index.ts +8 -0
  515. package/teste-final-npm/core/server/plugins/database.ts +182 -0
  516. package/teste-final-npm/core/server/plugins/logger.ts +47 -0
  517. package/teste-final-npm/core/server/plugins/swagger.ts +34 -0
  518. package/teste-final-npm/core/server/standalone.ts +91 -0
  519. package/teste-final-npm/core/templates/create-project.ts +455 -0
  520. package/teste-final-npm/core/types/api.ts +169 -0
  521. package/teste-final-npm/core/types/build.ts +174 -0
  522. package/teste-final-npm/core/types/config.ts +68 -0
  523. package/teste-final-npm/core/types/index.ts +127 -0
  524. package/teste-final-npm/core/types/plugin.ts +94 -0
  525. package/teste-final-npm/core/utils/__tests__/errors.test.ts +139 -0
  526. package/teste-final-npm/core/utils/__tests__/helpers.test.ts +297 -0
  527. package/teste-final-npm/core/utils/__tests__/logger.test.ts +141 -0
  528. package/teste-final-npm/core/utils/env-runtime-v2.ts +232 -0
  529. package/teste-final-npm/core/utils/env-runtime.ts +252 -0
  530. package/teste-final-npm/core/utils/errors/codes.ts +115 -0
  531. package/teste-final-npm/core/utils/errors/handlers.ts +63 -0
  532. package/teste-final-npm/core/utils/errors/index.ts +81 -0
  533. package/teste-final-npm/core/utils/helpers.ts +180 -0
  534. package/teste-final-npm/core/utils/index.ts +18 -0
  535. package/teste-final-npm/core/utils/logger/index.ts +161 -0
  536. package/teste-final-npm/core/utils/logger.ts +106 -0
  537. package/teste-final-npm/core/utils/monitoring/index.ts +212 -0
  538. package/teste-final-npm/package-template.json +51 -0
  539. package/teste-final-npm/package.json +51 -0
  540. package/teste-final-npm/tsconfig.json +51 -0
  541. package/teste-final-npm/vite.config.ts +42 -0
  542. package/tests/__mocks__/api.ts +56 -0
  543. package/tests/fixtures/users.ts +69 -0
  544. package/tests/integration/api/users.routes.test.ts +221 -0
  545. package/tests/setup.ts +29 -0
  546. package/tests/unit/app/client/App-simple.test.tsx +56 -0
  547. package/tests/unit/app/client/App.test.tsx.skip +237 -0
  548. package/tests/unit/app/client/eden-api.test.ts +186 -0
  549. package/tests/unit/app/client/simple.test.tsx +23 -0
  550. package/tests/unit/app/controllers/users.controller.test.ts +150 -0
  551. package/tests/unit/core/create-project.test.ts.skip +95 -0
  552. package/tests/unit/core/framework.test.ts +144 -0
  553. package/tests/unit/core/plugins/logger.test.ts.skip +268 -0
  554. package/tests/unit/core/plugins/vite.test.ts.disabled +188 -0
  555. package/tests/utils/test-helpers.ts +61 -0
  556. package/tsconfig.json +51 -0
  557. package/types/global.d.ts +30 -0
  558. package/types/vitest.d.ts +9 -0
  559. package/vite.config.ts +42 -0
  560. package/vitest.config.ts +50 -0
  561. package/workspace.json +6 -0
@@ -0,0 +1,252 @@
1
+ /**
2
+ * Runtime Environment Loader V2 - Simplified API
3
+ * Mais elegante com casting automático e acesso direto
4
+ */
5
+
6
+ /**
7
+ * Enhanced environment variable loader with smart casting
8
+ */
9
+ class SmartEnvLoader {
10
+ private envAccessor: () => Record<string, string | undefined>
11
+
12
+ constructor() {
13
+ this.envAccessor = this.createDynamicAccessor()
14
+ }
15
+
16
+ private createDynamicAccessor(): () => Record<string, string | undefined> {
17
+ const globalScope = globalThis as any
18
+
19
+ return () => {
20
+ // Try Bun.env first (most reliable in Bun runtime)
21
+ if (globalScope['Bun'] && globalScope['Bun']['env']) {
22
+ return globalScope['Bun']['env']
23
+ }
24
+
25
+ // Fallback to process.env with dynamic access
26
+ if (globalScope['process'] && globalScope['process']['env']) {
27
+ return globalScope['process']['env']
28
+ }
29
+
30
+ // Final fallback
31
+ const proc = eval('typeof process !== "undefined" ? process : null')
32
+ return proc?.env || {}
33
+ }
34
+ }
35
+
36
+ /**
37
+ * Smart get with automatic type conversion based on default value
38
+ */
39
+ get<T>(key: string, defaultValue?: T): T {
40
+ const env = this.envAccessor()
41
+ const value = env[key]
42
+
43
+ if (!value || value === '') {
44
+ return defaultValue as T
45
+ }
46
+
47
+ // Auto-detect type from default value
48
+ if (typeof defaultValue === 'number') {
49
+ const parsed = parseInt(value, 10)
50
+ return (isNaN(parsed) ? defaultValue : parsed) as T
51
+ }
52
+
53
+ if (typeof defaultValue === 'boolean') {
54
+ return ['true', '1', 'yes', 'on'].includes(value.toLowerCase()) as T
55
+ }
56
+
57
+ if (Array.isArray(defaultValue)) {
58
+ return value.split(',').map(v => v.trim()).filter(Boolean) as T
59
+ }
60
+
61
+ if (typeof defaultValue === 'object' && defaultValue !== null) {
62
+ try {
63
+ return JSON.parse(value) as T
64
+ } catch {
65
+ return defaultValue
66
+ }
67
+ }
68
+
69
+ return value as T
70
+ }
71
+
72
+ /**
73
+ * Check if environment variable exists
74
+ */
75
+ has(key: string): boolean {
76
+ const env = this.envAccessor()
77
+ return key in env && env[key] !== undefined && env[key] !== ''
78
+ }
79
+
80
+ /**
81
+ * Get all environment variables
82
+ */
83
+ all(): Record<string, string> {
84
+ const env = this.envAccessor()
85
+ const result: Record<string, string> = {}
86
+
87
+ for (const [key, value] of Object.entries(env)) {
88
+ if (value !== undefined && value !== '') {
89
+ result[key] = value
90
+ }
91
+ }
92
+
93
+ return result
94
+ }
95
+ }
96
+
97
+ // Create singleton instance
98
+ const smartEnv = new SmartEnvLoader()
99
+
100
+ /**
101
+ * Simplified env API with smart casting
102
+ */
103
+ export const env = {
104
+ /**
105
+ * Smart get - automatically casts based on default value type
106
+ * Usage:
107
+ * env.get('PORT', 3000) -> number
108
+ * env.get('DEBUG', false) -> boolean
109
+ * env.get('ORIGINS', ['*']) -> string[]
110
+ * env.get('HOST', 'localhost') -> string
111
+ */
112
+ get: <T>(key: string, defaultValue?: T): T => smartEnv.get(key, defaultValue),
113
+
114
+ /**
115
+ * Check if env var exists
116
+ */
117
+ has: (key: string) => smartEnv.has(key),
118
+
119
+ /**
120
+ * Get number value
121
+ */
122
+ num: (key: string, defaultValue?: number) => Number(smartEnv.get(key, defaultValue?.toString() || '0')),
123
+
124
+ /**
125
+ * Get boolean value
126
+ */
127
+ bool: (key: string, defaultValue?: boolean) => smartEnv.get(key, defaultValue?.toString() || 'false') === 'true',
128
+
129
+ /**
130
+ * Get array value
131
+ */
132
+ array: (key: string, defaultValue?: string[]) => smartEnv.get(key, defaultValue?.join(',') || '').split(',').filter(Boolean),
133
+
134
+ /**
135
+ * Get all env vars
136
+ */
137
+ all: () => smartEnv.all(),
138
+
139
+ // Common environment variables as properties with smart defaults
140
+ get NODE_ENV() { return this.get('NODE_ENV', 'development') },
141
+ get PORT() { return this.get('PORT', 3000) },
142
+ get HOST() { return this.get('HOST', 'localhost') },
143
+ get DEBUG() { return this.get('DEBUG', false) },
144
+ get LOG_LEVEL() { return this.get('LOG_LEVEL', 'info') },
145
+ get DATABASE_URL() { return this.get('DATABASE_URL', '') },
146
+ get JWT_SECRET() { return this.get('JWT_SECRET', '') },
147
+ get CORS_ORIGINS() { return this.get('CORS_ORIGINS', ['*']) },
148
+ get VITE_PORT() { return this.get('VITE_PORT', 5173) },
149
+ get API_PREFIX() { return this.get('API_PREFIX', '/api') },
150
+
151
+ // App specific
152
+ get FLUXSTACK_APP_NAME() { return this.get('FLUXSTACK_APP_NAME', 'FluxStack') },
153
+ get FLUXSTACK_APP_VERSION() { return this.get('FLUXSTACK_APP_VERSION', '1.0.0') },
154
+
155
+ // Monitoring
156
+ get ENABLE_MONITORING() { return this.get('ENABLE_MONITORING', false) },
157
+ get ENABLE_SWAGGER() { return this.get('ENABLE_SWAGGER', true) },
158
+ get ENABLE_METRICS() { return this.get('ENABLE_METRICS', false) },
159
+
160
+ // Database
161
+ get DB_HOST() { return this.get('DB_HOST', 'localhost') },
162
+ get DB_PORT() { return this.get('DB_PORT', 5432) },
163
+ get DB_NAME() { return this.get('DB_NAME', '') },
164
+ get DB_USER() { return this.get('DB_USER', '') },
165
+ get DB_PASSWORD() { return this.get('DB_PASSWORD', '') },
166
+ get DB_SSL() { return this.get('DB_SSL', false) },
167
+
168
+ // SMTP
169
+ get SMTP_HOST() { return this.get('SMTP_HOST', '') },
170
+ get SMTP_PORT() { return this.get('SMTP_PORT', 587) },
171
+ get SMTP_USER() { return this.get('SMTP_USER', '') },
172
+ get SMTP_PASSWORD() { return this.get('SMTP_PASSWORD', '') },
173
+ get SMTP_SECURE() { return this.get('SMTP_SECURE', false) }
174
+ }
175
+
176
+ /**
177
+ * Create namespaced environment access
178
+ * Usage: const db = createNamespace('DATABASE_')
179
+ * db.get('URL') -> reads DATABASE_URL
180
+ */
181
+ export function createNamespace(prefix: string) {
182
+ return {
183
+ get: <T>(key: string, defaultValue?: T): T =>
184
+ smartEnv.get(`${prefix}${key}`, defaultValue),
185
+
186
+ has: (key: string) => smartEnv.has(`${prefix}${key}`),
187
+
188
+ all: () => {
189
+ const allEnv = smartEnv.all()
190
+ const namespaced: Record<string, string> = {}
191
+
192
+ for (const [key, value] of Object.entries(allEnv)) {
193
+ if (key.startsWith(prefix)) {
194
+ namespaced[key.slice(prefix.length)] = value
195
+ }
196
+ }
197
+
198
+ return namespaced
199
+ }
200
+ }
201
+ }
202
+
203
+ /**
204
+ * Environment validation
205
+ */
206
+ export const validate = {
207
+ require(keys: string[]): void {
208
+ const missing = keys.filter(key => !smartEnv.has(key))
209
+ if (missing.length > 0) {
210
+ throw new Error(`Missing required environment variables: ${missing.join(', ')}`)
211
+ }
212
+ },
213
+
214
+ oneOf(key: string, validValues: string[]): void {
215
+ const value = smartEnv.get(key, '')
216
+ if (value && !validValues.includes(value)) {
217
+ throw new Error(`${key} must be one of: ${validValues.join(', ')}, got: ${value}`)
218
+ }
219
+ }
220
+ }
221
+
222
+ /**
223
+ * Convenience functions
224
+ */
225
+ export const helpers = {
226
+ isDevelopment: () => env.NODE_ENV === 'development',
227
+ isProduction: () => env.NODE_ENV === 'production',
228
+ isTest: () => env.NODE_ENV === 'test',
229
+
230
+ getDatabaseUrl: () => {
231
+ const url = env.DATABASE_URL
232
+ if (url) return url
233
+
234
+ const { DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD } = env
235
+ if (DB_HOST && DB_NAME) {
236
+ const auth = DB_USER ? `${DB_USER}:${DB_PASSWORD}@` : ''
237
+ return `postgres://${auth}${DB_HOST}:${DB_PORT}/${DB_NAME}`
238
+ }
239
+
240
+ return null
241
+ },
242
+
243
+ getServerUrl: () => `http://${env.HOST}:${env.PORT}`,
244
+ getClientUrl: () => `http://${env.HOST}:${env.VITE_PORT}`
245
+ }
246
+
247
+ export default env
248
+
249
+ // Legacy exports for compatibility
250
+ export const runtimeEnv = env
251
+ export const envValidation = validate
252
+ export const createEnvNamespace = createNamespace
@@ -0,0 +1,115 @@
1
+ export const ERROR_CODES = {
2
+ // Validation errors (400)
3
+ VALIDATION_ERROR: 'VALIDATION_ERROR',
4
+ INVALID_INPUT: 'INVALID_INPUT',
5
+ MISSING_REQUIRED_FIELD: 'MISSING_REQUIRED_FIELD',
6
+ INVALID_FORMAT: 'INVALID_FORMAT',
7
+
8
+ // Authentication errors (401)
9
+ UNAUTHORIZED: 'UNAUTHORIZED',
10
+ INVALID_TOKEN: 'INVALID_TOKEN',
11
+ TOKEN_EXPIRED: 'TOKEN_EXPIRED',
12
+ INVALID_CREDENTIALS: 'INVALID_CREDENTIALS',
13
+
14
+ // Authorization errors (403)
15
+ FORBIDDEN: 'FORBIDDEN',
16
+ INSUFFICIENT_PERMISSIONS: 'INSUFFICIENT_PERMISSIONS',
17
+ ACCESS_DENIED: 'ACCESS_DENIED',
18
+
19
+ // Not found errors (404)
20
+ NOT_FOUND: 'NOT_FOUND',
21
+ RESOURCE_NOT_FOUND: 'RESOURCE_NOT_FOUND',
22
+ ENDPOINT_NOT_FOUND: 'ENDPOINT_NOT_FOUND',
23
+
24
+ // Conflict errors (409)
25
+ CONFLICT: 'CONFLICT',
26
+ RESOURCE_ALREADY_EXISTS: 'RESOURCE_ALREADY_EXISTS',
27
+ DUPLICATE_ENTRY: 'DUPLICATE_ENTRY',
28
+
29
+ // Server errors (500)
30
+ INTERNAL_ERROR: 'INTERNAL_ERROR',
31
+ INTERNAL_SERVER_ERROR: 'INTERNAL_SERVER_ERROR',
32
+ DATABASE_ERROR: 'DATABASE_ERROR',
33
+ EXTERNAL_SERVICE_ERROR: 'EXTERNAL_SERVICE_ERROR',
34
+
35
+ // Service unavailable (503)
36
+ SERVICE_UNAVAILABLE: 'SERVICE_UNAVAILABLE',
37
+ MAINTENANCE_MODE: 'MAINTENANCE_MODE',
38
+ RATE_LIMIT_EXCEEDED: 'RATE_LIMIT_EXCEEDED',
39
+
40
+ // Plugin errors
41
+ PLUGIN_ERROR: 'PLUGIN_ERROR',
42
+ PLUGIN_NOT_FOUND: 'PLUGIN_NOT_FOUND',
43
+ PLUGIN_INITIALIZATION_ERROR: 'PLUGIN_INITIALIZATION_ERROR',
44
+
45
+ // Configuration errors
46
+ CONFIG_ERROR: 'CONFIG_ERROR',
47
+ INVALID_CONFIG: 'INVALID_CONFIG',
48
+ MISSING_CONFIG: 'MISSING_CONFIG',
49
+
50
+ // Build errors
51
+ BUILD_ERROR: 'BUILD_ERROR',
52
+ COMPILATION_ERROR: 'COMPILATION_ERROR',
53
+ BUNDLING_ERROR: 'BUNDLING_ERROR'
54
+ } as const
55
+
56
+ export type ErrorCode = typeof ERROR_CODES[keyof typeof ERROR_CODES]
57
+
58
+ export const getErrorMessage = (code: ErrorCode): string => {
59
+ const messages: Record<ErrorCode, string> = {
60
+ // Validation errors
61
+ VALIDATION_ERROR: 'Validation failed',
62
+ INVALID_INPUT: 'Invalid input provided',
63
+ MISSING_REQUIRED_FIELD: 'Required field is missing',
64
+ INVALID_FORMAT: 'Invalid format',
65
+
66
+ // Authentication errors
67
+ UNAUTHORIZED: 'Authentication required',
68
+ INVALID_TOKEN: 'Invalid authentication token',
69
+ TOKEN_EXPIRED: 'Authentication token has expired',
70
+ INVALID_CREDENTIALS: 'Invalid credentials provided',
71
+
72
+ // Authorization errors
73
+ FORBIDDEN: 'Access forbidden',
74
+ INSUFFICIENT_PERMISSIONS: 'Insufficient permissions',
75
+ ACCESS_DENIED: 'Access denied',
76
+
77
+ // Not found errors
78
+ NOT_FOUND: 'Resource not found',
79
+ RESOURCE_NOT_FOUND: 'Requested resource not found',
80
+ ENDPOINT_NOT_FOUND: 'API endpoint not found',
81
+
82
+ // Conflict errors
83
+ CONFLICT: 'Resource conflict',
84
+ RESOURCE_ALREADY_EXISTS: 'Resource already exists',
85
+ DUPLICATE_ENTRY: 'Duplicate entry',
86
+
87
+ // Server errors
88
+ INTERNAL_ERROR: 'Internal server error',
89
+ INTERNAL_SERVER_ERROR: 'Internal server error',
90
+ DATABASE_ERROR: 'Database operation failed',
91
+ EXTERNAL_SERVICE_ERROR: 'External service error',
92
+
93
+ // Service unavailable
94
+ SERVICE_UNAVAILABLE: 'Service temporarily unavailable',
95
+ MAINTENANCE_MODE: 'Service is under maintenance',
96
+ RATE_LIMIT_EXCEEDED: 'Rate limit exceeded',
97
+
98
+ // Plugin errors
99
+ PLUGIN_ERROR: 'Plugin error',
100
+ PLUGIN_NOT_FOUND: 'Plugin not found',
101
+ PLUGIN_INITIALIZATION_ERROR: 'Plugin initialization failed',
102
+
103
+ // Configuration errors
104
+ CONFIG_ERROR: 'Configuration error',
105
+ INVALID_CONFIG: 'Invalid configuration',
106
+ MISSING_CONFIG: 'Missing configuration',
107
+
108
+ // Build errors
109
+ BUILD_ERROR: 'Build error',
110
+ COMPILATION_ERROR: 'Compilation failed',
111
+ BUNDLING_ERROR: 'Bundling failed'
112
+ }
113
+
114
+ return messages[code] || 'Unknown error'
115
+ }
@@ -0,0 +1,63 @@
1
+ import { FluxStackError } from "./index"
2
+ import type { Logger } from "../logger/index"
3
+
4
+ export interface ErrorHandlerContext {
5
+ logger: Logger
6
+ isDevelopment: boolean
7
+ request?: Request
8
+ path?: string
9
+ }
10
+
11
+ export const errorHandler = (error: Error, context: ErrorHandlerContext) => {
12
+ const { logger, isDevelopment, request, path } = context
13
+
14
+ if (error instanceof FluxStackError) {
15
+ // Log FluxStack errors with appropriate level
16
+ const logLevel = error.statusCode >= 500 ? 'error' : 'warn'
17
+ logger[logLevel](error.message, {
18
+ code: error.code,
19
+ statusCode: error.statusCode,
20
+ context: error.context,
21
+ path,
22
+ method: request?.method,
23
+ stack: isDevelopment ? error.stack : undefined
24
+ })
25
+
26
+ return {
27
+ error: {
28
+ message: error.message,
29
+ code: error.code,
30
+ statusCode: error.statusCode,
31
+ ...(error.context && { details: error.context }),
32
+ ...(isDevelopment && { stack: error.stack })
33
+ }
34
+ }
35
+ }
36
+
37
+ // Handle unknown errors - skip logging for NOT_FOUND unless explicitly enabled
38
+ if (error.message === 'NOT_FOUND' && !process.env.ENABLE_NOT_FOUND_LOGS) {
39
+ // Skip logging NOT_FOUND errors to reduce noise
40
+ } else {
41
+ logger.error('Unhandled error', {
42
+ error: error.message,
43
+ stack: error.stack,
44
+ path,
45
+ method: request?.method
46
+ })
47
+ }
48
+
49
+ return {
50
+ error: {
51
+ message: isDevelopment ? error.message : 'Internal server error',
52
+ code: 'INTERNAL_ERROR',
53
+ statusCode: 500,
54
+ ...(isDevelopment && { stack: error.stack })
55
+ }
56
+ }
57
+ }
58
+
59
+ export const createErrorHandler = (context: Omit<ErrorHandlerContext, 'request' | 'path'>) => {
60
+ return (error: Error, request?: Request, path?: string) => {
61
+ return errorHandler(error, { ...context, request, path })
62
+ }
63
+ }
@@ -0,0 +1,81 @@
1
+ export class FluxStackError extends Error {
2
+ public readonly code: string
3
+ public readonly statusCode: number
4
+ public readonly context?: any
5
+ public readonly timestamp: Date
6
+
7
+ constructor(
8
+ message: string,
9
+ code: string,
10
+ statusCode: number = 500,
11
+ context?: any
12
+ ) {
13
+ super(message)
14
+ this.name = 'FluxStackError'
15
+ this.code = code
16
+ this.statusCode = statusCode
17
+ this.context = context
18
+ this.timestamp = new Date()
19
+ }
20
+
21
+ toJSON() {
22
+ return {
23
+ name: this.name,
24
+ message: this.message,
25
+ code: this.code,
26
+ statusCode: this.statusCode,
27
+ context: this.context,
28
+ timestamp: this.timestamp,
29
+ stack: this.stack
30
+ }
31
+ }
32
+ }
33
+
34
+ export class ValidationError extends FluxStackError {
35
+ constructor(message: string, context?: any) {
36
+ super(message, 'VALIDATION_ERROR', 400, context)
37
+ this.name = 'ValidationError'
38
+ }
39
+ }
40
+
41
+ export class NotFoundError extends FluxStackError {
42
+ constructor(resource: string, context?: any) {
43
+ super(`${resource} not found`, 'NOT_FOUND', 404, context)
44
+ this.name = 'NotFoundError'
45
+ }
46
+ }
47
+
48
+ export class UnauthorizedError extends FluxStackError {
49
+ constructor(message: string = 'Unauthorized', context?: any) {
50
+ super(message, 'UNAUTHORIZED', 401, context)
51
+ this.name = 'UnauthorizedError'
52
+ }
53
+ }
54
+
55
+ export class ForbiddenError extends FluxStackError {
56
+ constructor(message: string = 'Forbidden', context?: any) {
57
+ super(message, 'FORBIDDEN', 403, context)
58
+ this.name = 'ForbiddenError'
59
+ }
60
+ }
61
+
62
+ export class ConflictError extends FluxStackError {
63
+ constructor(message: string, context?: any) {
64
+ super(message, 'CONFLICT', 409, context)
65
+ this.name = 'ConflictError'
66
+ }
67
+ }
68
+
69
+ export class InternalServerError extends FluxStackError {
70
+ constructor(message: string = 'Internal server error', context?: any) {
71
+ super(message, 'INTERNAL_SERVER_ERROR', 500, context)
72
+ this.name = 'InternalServerError'
73
+ }
74
+ }
75
+
76
+ export class ServiceUnavailableError extends FluxStackError {
77
+ constructor(message: string = 'Service unavailable', context?: any) {
78
+ super(message, 'SERVICE_UNAVAILABLE', 503, context)
79
+ this.name = 'ServiceUnavailableError'
80
+ }
81
+ }
@@ -0,0 +1,180 @@
1
+ /**
2
+ * General utility functions for FluxStack
3
+ */
4
+
5
+ export const formatBytes = (bytes: number, decimals: number = 2): string => {
6
+ if (bytes === 0) return '0 Bytes'
7
+
8
+ const k = 1024
9
+ const dm = decimals < 0 ? 0 : decimals
10
+ const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
11
+
12
+ const i = Math.floor(Math.log(bytes) / Math.log(k))
13
+
14
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]
15
+ }
16
+
17
+ export const createTimer = (label: string) => {
18
+ const start = Date.now()
19
+
20
+ return {
21
+ end: (): number => {
22
+ const duration = Date.now() - start
23
+ return duration
24
+ },
25
+ label
26
+ }
27
+ }
28
+
29
+ export const delay = (ms: number): Promise<void> => {
30
+ return new Promise(resolve => setTimeout(resolve, ms))
31
+ }
32
+
33
+ export const retry = async <T>(
34
+ fn: () => Promise<T>,
35
+ maxAttempts: number = 3,
36
+ delayMs: number = 1000
37
+ ): Promise<T> => {
38
+ let lastError: Error
39
+
40
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
41
+ try {
42
+ return await fn()
43
+ } catch (error) {
44
+ lastError = error as Error
45
+
46
+ if (attempt === maxAttempts) {
47
+ throw lastError
48
+ }
49
+
50
+ await delay(delayMs * attempt) // Exponential backoff
51
+ }
52
+ }
53
+
54
+ throw lastError!
55
+ }
56
+
57
+ export const debounce = <T extends (...args: any[]) => any>(
58
+ func: T,
59
+ wait: number
60
+ ): ((...args: Parameters<T>) => void) => {
61
+ let timeout: NodeJS.Timeout | null = null
62
+
63
+ return (...args: Parameters<T>) => {
64
+ if (timeout) {
65
+ clearTimeout(timeout)
66
+ }
67
+
68
+ timeout = setTimeout(() => {
69
+ func(...args)
70
+ }, wait)
71
+ }
72
+ }
73
+
74
+ export const throttle = <T extends (...args: any[]) => any>(
75
+ func: T,
76
+ limit: number
77
+ ): ((...args: Parameters<T>) => void) => {
78
+ let inThrottle: boolean = false
79
+
80
+ return (...args: Parameters<T>) => {
81
+ if (!inThrottle) {
82
+ func(...args)
83
+ inThrottle = true
84
+ setTimeout(() => inThrottle = false, limit)
85
+ }
86
+ }
87
+ }
88
+
89
+ export const isProduction = (): boolean => {
90
+ return process.env.NODE_ENV === 'production'
91
+ }
92
+
93
+ export const isDevelopment = (): boolean => {
94
+ return process.env.NODE_ENV === 'development' || !process.env.NODE_ENV
95
+ }
96
+
97
+ export const isTest = (): boolean => {
98
+ return process.env.NODE_ENV === 'test'
99
+ }
100
+
101
+ export const deepMerge = <T extends Record<string, any>>(target: T, source: Partial<T>): T => {
102
+ const result = { ...target }
103
+
104
+ for (const key in source) {
105
+ if (source.hasOwnProperty(key)) {
106
+ const sourceValue = source[key]
107
+ const targetValue = result[key]
108
+
109
+ if (
110
+ sourceValue &&
111
+ typeof sourceValue === 'object' &&
112
+ !Array.isArray(sourceValue) &&
113
+ targetValue &&
114
+ typeof targetValue === 'object' &&
115
+ !Array.isArray(targetValue)
116
+ ) {
117
+ result[key] = deepMerge(targetValue, sourceValue)
118
+ } else {
119
+ result[key] = sourceValue as T[Extract<keyof T, string>]
120
+ }
121
+ }
122
+ }
123
+
124
+ return result
125
+ }
126
+
127
+ export const pick = <T extends Record<string, any>, K extends keyof T>(
128
+ obj: T,
129
+ keys: K[]
130
+ ): Pick<T, K> => {
131
+ const result = {} as Pick<T, K>
132
+
133
+ for (const key of keys) {
134
+ if (key in obj) {
135
+ result[key] = obj[key]
136
+ }
137
+ }
138
+
139
+ return result
140
+ }
141
+
142
+ export const omit = <T extends Record<string, any>, K extends keyof T>(
143
+ obj: T,
144
+ keys: K[]
145
+ ): Omit<T, K> => {
146
+ const result = { ...obj }
147
+
148
+ for (const key of keys) {
149
+ delete result[key]
150
+ }
151
+
152
+ return result
153
+ }
154
+
155
+ export const generateId = (length: number = 8): string => {
156
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
157
+ let result = ''
158
+
159
+ for (let i = 0; i < length; i++) {
160
+ result += chars.charAt(Math.floor(Math.random() * chars.length))
161
+ }
162
+
163
+ return result
164
+ }
165
+
166
+ export const safeJsonParse = <T = any>(json: string, fallback: T): T => {
167
+ try {
168
+ return JSON.parse(json)
169
+ } catch {
170
+ return fallback
171
+ }
172
+ }
173
+
174
+ export const safeJsonStringify = (obj: any, fallback: string = '{}'): string => {
175
+ try {
176
+ return JSON.stringify(obj)
177
+ } catch {
178
+ return fallback
179
+ }
180
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * FluxStack Utilities
3
+ * Main exports for utility functions and classes
4
+ */
5
+
6
+ // Logger utilities
7
+ export { logger, log } from "./logger"
8
+ export type { Logger } from "./logger/index"
9
+
10
+ // Error handling
11
+ export * from "./errors"
12
+
13
+ // Monitoring
14
+ export { MetricsCollector } from "./monitoring"
15
+ export type * from "./monitoring"
16
+
17
+ // General helpers
18
+ export * from "./helpers"