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,453 @@
1
+ import React, { useState, useEffect } from 'react'
2
+ import { api, getErrorMessage } from '../lib/eden-api'
3
+
4
+ interface TestResult {
5
+ name: string
6
+ status: 'pending' | 'success' | 'error'
7
+ message: string
8
+ details?: any
9
+ duration?: number
10
+ }
11
+
12
+ interface EnvTest {
13
+ name: string
14
+ variable: string
15
+ expected?: string
16
+ description: string
17
+ }
18
+
19
+ const TestPage: React.FC = () => {
20
+ const [testResults, setTestResults] = useState<TestResult[]>([])
21
+ const [isRunning, setIsRunning] = useState(false)
22
+
23
+ // Environment variables available in the frontend (VITE_ prefix)
24
+ const envTests: EnvTest[] = [
25
+ {
26
+ name: 'API URL',
27
+ variable: 'VITE_API_URL',
28
+ expected: 'http://localhost:3000',
29
+ description: 'Base URL for API calls'
30
+ },
31
+ {
32
+ name: 'App Name',
33
+ variable: 'VITE_APP_NAME',
34
+ description: 'Application name from environment'
35
+ },
36
+ {
37
+ name: 'App Version',
38
+ variable: 'VITE_APP_VERSION',
39
+ description: 'Application version from environment'
40
+ },
41
+ {
42
+ name: 'Environment',
43
+ variable: 'VITE_NODE_ENV',
44
+ description: 'Current environment (dev/prod)'
45
+ }
46
+ ]
47
+
48
+ // Add a test result
49
+ const addTestResult = (result: TestResult) => {
50
+ setTestResults(prev => [...prev, result])
51
+ }
52
+
53
+ // Update a test result
54
+ const updateTestResult = (name: string, updates: Partial<TestResult>) => {
55
+ setTestResults(prev =>
56
+ prev.map(result =>
57
+ result.name === name ? { ...result, ...updates } : result
58
+ )
59
+ )
60
+ }
61
+
62
+ // Test environment variables
63
+ const testEnvironmentVariables = async () => {
64
+ const startTime = Date.now()
65
+
66
+ addTestResult({
67
+ name: 'Environment Variables',
68
+ status: 'pending',
69
+ message: 'Testing environment variable loading...'
70
+ })
71
+
72
+ try {
73
+ const results = envTests.map(test => {
74
+ const value = import.meta.env[test.variable]
75
+ return {
76
+ name: test.name,
77
+ variable: test.variable,
78
+ value: value || 'undefined',
79
+ expected: test.expected,
80
+ description: test.description,
81
+ isValid: test.expected ? value === test.expected : value !== undefined
82
+ }
83
+ })
84
+
85
+ const allValid = results.every(r => r.isValid)
86
+ const duration = Date.now() - startTime
87
+
88
+ updateTestResult('Environment Variables', {
89
+ status: allValid ? 'success' : 'error',
90
+ message: allValid
91
+ ? `All environment variables loaded correctly (${results.length} variables)`
92
+ : 'Some environment variables are missing or incorrect',
93
+ details: results,
94
+ duration
95
+ })
96
+ } catch (error) {
97
+ updateTestResult('Environment Variables', {
98
+ status: 'error',
99
+ message: `Environment test failed: ${getErrorMessage(error)}`,
100
+ duration: Date.now() - startTime
101
+ })
102
+ }
103
+ }
104
+
105
+ // Test API health check
106
+ const testApiHealth = async () => {
107
+ const startTime = Date.now()
108
+
109
+ addTestResult({
110
+ name: 'API Health Check',
111
+ status: 'pending',
112
+ message: 'Testing API connection...'
113
+ })
114
+
115
+ try {
116
+ const { data: response, error } = await api.health.get()
117
+
118
+ if (error) {
119
+ throw new Error(`API Error: ${error.status}`)
120
+ }
121
+
122
+ const duration = Date.now() - startTime
123
+
124
+ updateTestResult('API Health Check', {
125
+ status: 'success',
126
+ message: `API is healthy: ${response.status}`,
127
+ details: response,
128
+ duration
129
+ })
130
+ } catch (error) {
131
+ updateTestResult('API Health Check', {
132
+ status: 'error',
133
+ message: `API health check failed: ${getErrorMessage(error)}`,
134
+ duration: Date.now() - startTime
135
+ })
136
+ }
137
+ }
138
+
139
+ // Test users API
140
+ const testUsersApi = async () => {
141
+ const startTime = Date.now()
142
+
143
+ addTestResult({
144
+ name: 'Users API Test',
145
+ status: 'pending',
146
+ message: 'Testing users CRUD operations...'
147
+ })
148
+
149
+ try {
150
+ // ✨ Test getting users - Eden Treaty nativo
151
+ const { data: usersResponse, error: getUsersError } = await api.users.get()
152
+
153
+ if (getUsersError) {
154
+ throw new Error(`Get users failed: ${getUsersError.status}`)
155
+ }
156
+
157
+ // ✨ Test creating a user - Eden Treaty com inferência perfeita
158
+ const { data: newUser, error: createError } = await api.users.post({
159
+ name: "Test User",
160
+ email: "test@example.com"
161
+ })
162
+
163
+ if (createError) {
164
+ throw new Error(`Create user failed: ${createError.status}`)
165
+ }
166
+
167
+ // ✨ Eden Treaty agora infere automaticamente: newUser é UserResponse
168
+ if (!newUser.success || !newUser.user) {
169
+ throw new Error('User creation failed')
170
+ }
171
+
172
+ // ✨ Test getting the created user - inferência automática de tipos
173
+ const { data: createdUser, error: getError } = await api.users({ id: newUser.user.id }).get()
174
+
175
+ if (getError) {
176
+ throw new Error(`Get user failed: ${getError.status}`)
177
+ }
178
+
179
+ // ✨ Eden Treaty infere: createdUser é { user: User }
180
+ if (!createdUser || !createdUser.user) {
181
+ throw new Error('User not found')
182
+ }
183
+
184
+ // ✨ Test deleting the user - inferência automática
185
+ const { data: deleteResult, error: deleteError } = await api.users({ id: newUser.user.id }).delete()
186
+
187
+ if (deleteError) {
188
+ throw new Error(`Delete user failed: ${deleteError.status}`)
189
+ }
190
+
191
+ const duration = Date.now() - startTime
192
+
193
+ updateTestResult('Users API Test', {
194
+ status: 'success',
195
+ message: `Users API working correctly (CRUD operations completed)`,
196
+ details: {
197
+ initialUsers: usersResponse.users.length,
198
+ createdUser: createdUser,
199
+ newUser: newUser,
200
+ deleteResult: deleteResult,
201
+ operations: ['GET', 'POST', 'GET by ID', 'DELETE']
202
+ },
203
+ duration
204
+ })
205
+ } catch (error) {
206
+ updateTestResult('Users API Test', {
207
+ status: 'error',
208
+ message: `Users API test failed: ${getErrorMessage(error)}`,
209
+ duration: Date.now() - startTime
210
+ })
211
+ }
212
+ }
213
+
214
+ // Test Eden Treaty type safety
215
+ const testEdenTreaty = async () => {
216
+ const startTime = Date.now()
217
+
218
+ addTestResult({
219
+ name: 'Eden Treaty Type Safety',
220
+ status: 'pending',
221
+ message: 'Testing Eden Treaty integration...'
222
+ })
223
+
224
+ try {
225
+ // Test that api object has expected methods
226
+ const hasHealthEndpoint = typeof api.health?.get === 'function'
227
+ const hasUsersEndpoint = typeof api.users?.get === 'function'
228
+ const hasUsersPost = typeof api.users?.post === 'function'
229
+
230
+ const typeChecks = {
231
+ hasHealthEndpoint,
232
+ hasUsersEndpoint,
233
+ hasUsersPost,
234
+ apiObjectExists: !!api,
235
+ apiCallExists: typeof apiCall === 'function'
236
+ }
237
+
238
+ const allChecksPass = Object.values(typeChecks).every(Boolean)
239
+ const duration = Date.now() - startTime
240
+
241
+ updateTestResult('Eden Treaty Type Safety', {
242
+ status: allChecksPass ? 'success' : 'error',
243
+ message: allChecksPass
244
+ ? 'Eden Treaty is properly configured with type safety'
245
+ : 'Eden Treaty configuration issues detected',
246
+ details: typeChecks,
247
+ duration
248
+ })
249
+ } catch (error) {
250
+ updateTestResult('Eden Treaty Type Safety', {
251
+ status: 'error',
252
+ message: `Eden Treaty test failed: ${getErrorMessage(error)}`,
253
+ duration: Date.now() - startTime
254
+ })
255
+ }
256
+ }
257
+
258
+ // Test frontend configuration
259
+ const testFrontendConfig = async () => {
260
+ const startTime = Date.now()
261
+
262
+ addTestResult({
263
+ name: 'Frontend Configuration',
264
+ status: 'pending',
265
+ message: 'Testing frontend configuration...'
266
+ })
267
+
268
+ try {
269
+ const config = {
270
+ mode: import.meta.env.MODE,
271
+ baseUrl: import.meta.env.BASE_URL,
272
+ prod: import.meta.env.PROD,
273
+ dev: import.meta.env.DEV,
274
+ ssrMode: import.meta.env.SSR
275
+ }
276
+
277
+ const hasValidConfig = !!(config.mode && config.baseUrl !== undefined)
278
+ const duration = Date.now() - startTime
279
+
280
+ updateTestResult('Frontend Configuration', {
281
+ status: hasValidConfig ? 'success' : 'error',
282
+ message: hasValidConfig
283
+ ? `Frontend configuration loaded (mode: ${config.mode})`
284
+ : 'Frontend configuration incomplete',
285
+ details: config,
286
+ duration
287
+ })
288
+ } catch (error) {
289
+ updateTestResult('Frontend Configuration', {
290
+ status: 'error',
291
+ message: `Frontend config test failed: ${getErrorMessage(error)}`,
292
+ duration: Date.now() - startTime
293
+ })
294
+ }
295
+ }
296
+
297
+ // Run all tests
298
+ const runAllTests = async () => {
299
+ setIsRunning(true)
300
+ setTestResults([])
301
+
302
+ await testEnvironmentVariables()
303
+ await new Promise(resolve => setTimeout(resolve, 100)) // Small delay between tests
304
+
305
+ await testFrontendConfig()
306
+ await new Promise(resolve => setTimeout(resolve, 100))
307
+
308
+ await testEdenTreaty()
309
+ await new Promise(resolve => setTimeout(resolve, 100))
310
+
311
+ await testApiHealth()
312
+ await new Promise(resolve => setTimeout(resolve, 100))
313
+
314
+ await testUsersApi()
315
+
316
+ setIsRunning(false)
317
+ }
318
+
319
+ // Clear results
320
+ const clearResults = () => {
321
+ setTestResults([])
322
+ }
323
+
324
+ // Get status color
325
+ const getStatusColor = (status: TestResult['status']) => {
326
+ switch (status) {
327
+ case 'success': return 'text-green-600'
328
+ case 'error': return 'text-red-600'
329
+ case 'pending': return 'text-yellow-600'
330
+ default: return 'text-gray-600'
331
+ }
332
+ }
333
+
334
+ // Get status icon
335
+ const getStatusIcon = (status: TestResult['status']) => {
336
+ switch (status) {
337
+ case 'success': return '✅'
338
+ case 'error': return '❌'
339
+ case 'pending': return '⏳'
340
+ default: return '⚪'
341
+ }
342
+ }
343
+
344
+ return (
345
+ <div className="container mx-auto p-6 max-w-4xl">
346
+ <div className="mb-8">
347
+ <h1 className="text-3xl font-bold text-gray-900 mb-2">
348
+ FluxStack Frontend Tests
349
+ </h1>
350
+ <p className="text-gray-600">
351
+ Test environment variables, API connectivity, and frontend configuration
352
+ </p>
353
+ </div>
354
+
355
+ {/* Control buttons */}
356
+ <div className="mb-6 flex gap-3">
357
+ <button
358
+ onClick={runAllTests}
359
+ disabled={isRunning}
360
+ className="px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50 disabled:cursor-not-allowed"
361
+ >
362
+ {isRunning ? 'Running Tests...' : 'Run All Tests'}
363
+ </button>
364
+
365
+ <button
366
+ onClick={clearResults}
367
+ disabled={isRunning}
368
+ className="px-4 py-2 bg-gray-600 text-white rounded-lg hover:bg-gray-700 disabled:opacity-50"
369
+ >
370
+ Clear Results
371
+ </button>
372
+ </div>
373
+
374
+ {/* Environment Variables Preview */}
375
+ <div className="mb-6 bg-gray-50 rounded-lg p-4">
376
+ <h2 className="text-lg font-semibold mb-3">Environment Variables Preview</h2>
377
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-3 text-sm">
378
+ {envTests.map(test => (
379
+ <div key={test.variable} className="flex justify-between items-center p-2 bg-white rounded border">
380
+ <span className="font-medium">{test.name}:</span>
381
+ <code className="text-blue-600 bg-blue-50 px-2 py-1 rounded">
382
+ {import.meta.env[test.variable] || 'undefined'}
383
+ </code>
384
+ </div>
385
+ ))}
386
+ </div>
387
+ </div>
388
+
389
+ {/* Test Results */}
390
+ <div className="space-y-4">
391
+ <h2 className="text-xl font-semibold">Test Results</h2>
392
+
393
+ {testResults.length === 0 && (
394
+ <div className="text-center py-8 text-gray-500">
395
+ No tests run yet. Click "Run All Tests" to start.
396
+ </div>
397
+ )}
398
+
399
+ {testResults.map((result, index) => (
400
+ <div
401
+ key={index}
402
+ className="border rounded-lg p-4 bg-white shadow-sm"
403
+ >
404
+ <div className="flex items-center justify-between mb-2">
405
+ <div className="flex items-center gap-2">
406
+ <span className="text-xl">{getStatusIcon(result.status)}</span>
407
+ <h3 className="font-semibold">{result.name}</h3>
408
+ {result.duration && (
409
+ <span className="text-xs text-gray-500">
410
+ ({result.duration}ms)
411
+ </span>
412
+ )}
413
+ </div>
414
+ <span className={`text-sm font-medium ${getStatusColor(result.status)}`}>
415
+ {result.status.toUpperCase()}
416
+ </span>
417
+ </div>
418
+
419
+ <p className={`text-sm ${getStatusColor(result.status)} mb-2`}>
420
+ {result.message}
421
+ </p>
422
+
423
+ {result.details && (
424
+ <details className="mt-2">
425
+ <summary className="cursor-pointer text-sm font-medium text-gray-700 hover:text-gray-900">
426
+ View Details
427
+ </summary>
428
+ <pre className="mt-2 text-xs bg-gray-100 p-3 rounded overflow-auto">
429
+ {JSON.stringify(result.details, null, 2)}
430
+ </pre>
431
+ </details>
432
+ )}
433
+ </div>
434
+ ))}
435
+ </div>
436
+
437
+ {/* Summary */}
438
+ {testResults.length > 0 && (
439
+ <div className="mt-6 p-4 bg-blue-50 rounded-lg">
440
+ <h3 className="font-semibold text-blue-900 mb-2">Test Summary</h3>
441
+ <div className="text-sm text-blue-800">
442
+ <div>Total: {testResults.length} tests</div>
443
+ <div>Passed: {testResults.filter(r => r.status === 'success').length}</div>
444
+ <div>Failed: {testResults.filter(r => r.status === 'error').length}</div>
445
+ <div>Pending: {testResults.filter(r => r.status === 'pending').length}</div>
446
+ </div>
447
+ </div>
448
+ )}
449
+ </div>
450
+ )
451
+ }
452
+
453
+ export default TestPage
@@ -0,0 +1,51 @@
1
+ @import "tailwindcss";
2
+
3
+ /* Custom CSS variables for dynamic colors */
4
+ :root {
5
+ --gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
6
+ --gradient-secondary: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
7
+ --gradient-accent: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
8
+ }
9
+
10
+ /* Base styles with improved typography */
11
+ * {
12
+ box-sizing: border-box;
13
+ }
14
+
15
+ body {
16
+ margin: 0;
17
+ padding: 0;
18
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', sans-serif;
19
+ -webkit-font-smoothing: antialiased;
20
+ -moz-osx-font-smoothing: grayscale;
21
+ line-height: 1.6;
22
+ }
23
+
24
+ /* Smooth scrolling */
25
+ html {
26
+ scroll-behavior: smooth;
27
+ }
28
+
29
+ /* Custom scrollbar for webkit browsers */
30
+ ::-webkit-scrollbar {
31
+ width: 8px;
32
+ }
33
+
34
+ ::-webkit-scrollbar-track {
35
+ background: #f1f5f9;
36
+ }
37
+
38
+ ::-webkit-scrollbar-thumb {
39
+ background: #cbd5e1;
40
+ border-radius: 4px;
41
+ }
42
+
43
+ ::-webkit-scrollbar-thumb:hover {
44
+ background: #94a3b8;
45
+ }
46
+
47
+ /* Focus styles for accessibility */
48
+ *:focus {
49
+ outline: 2px solid #3b82f6;
50
+ outline-offset: 2px;
51
+ }
@@ -0,0 +1,110 @@
1
+ // Eden Treaty API Client - Full Type Inference
2
+ import { treaty } from '@elysiajs/eden'
3
+ import type { App } from '../../../server/app'
4
+
5
+ // Get base URL dynamically
6
+ const getBaseUrl = () => {
7
+ if (typeof window === 'undefined') return 'http://localhost:3000'
8
+
9
+ // In production, use current origin
10
+ if (window.location.hostname !== 'localhost') {
11
+ return window.location.origin
12
+ }
13
+
14
+ // In development, use backend server (port 3000 for integrated mode)
15
+ return 'http://localhost:3000'
16
+ }
17
+
18
+ // Create Eden Treaty client with proper typing
19
+ const client = treaty<App>(getBaseUrl())
20
+
21
+ // Export the client's API directly to get proper type inference
22
+ export const api = client.api
23
+
24
+ // Enhanced error handling
25
+ export interface APIError {
26
+ message: string
27
+ status: number
28
+ code?: string
29
+ details?: any
30
+ }
31
+
32
+ export class APIException extends Error {
33
+ status: number
34
+ code?: string
35
+ details?: any
36
+
37
+ constructor(error: APIError) {
38
+ super(error.message)
39
+ this.name = 'APIException'
40
+ this.status = error.status
41
+ this.code = error.code
42
+ this.details = error.details
43
+ }
44
+ }
45
+
46
+ // Minimal wrapper that preserves Eden's automatic type inference
47
+ export async function apiCall(apiPromise: Promise<any>) {
48
+ try {
49
+ const { data, error } = await apiPromise
50
+
51
+ if (error) {
52
+ throw new APIException({
53
+ message: error.value?.message || 'API Error',
54
+ status: error.status,
55
+ code: error.value?.code,
56
+ details: error.value
57
+ })
58
+ }
59
+
60
+ return data // ✨ Preserva a inferência automática do Eden
61
+ } catch (error) {
62
+ // Handle network errors and other promise rejections
63
+ if (error instanceof APIException) {
64
+ throw error // Re-throw APIException
65
+ }
66
+
67
+ if (error instanceof Error) {
68
+ throw new APIException({
69
+ message: error.message,
70
+ status: 500,
71
+ code: 'NETWORK_ERROR'
72
+ })
73
+ }
74
+
75
+ // Handle unknown error types
76
+ throw new APIException({
77
+ message: 'Unknown error',
78
+ status: 500,
79
+ code: 'NETWORK_ERROR'
80
+ })
81
+ }
82
+ }
83
+
84
+ // User-friendly error messages
85
+ export function getErrorMessage(error: unknown): string {
86
+ if (error instanceof APIException) {
87
+ switch (error.status) {
88
+ case 400:
89
+ return error.message || 'Dados inválidos fornecidos'
90
+ case 401:
91
+ return 'Acesso não autorizado'
92
+ case 403:
93
+ return 'Acesso negado'
94
+ case 404:
95
+ return 'Recurso não encontrado'
96
+ case 422:
97
+ return 'Dados de entrada inválidos'
98
+ case 500:
99
+ return 'Erro interno do servidor'
100
+ default:
101
+ return error.message || 'Erro desconhecido'
102
+ }
103
+ }
104
+
105
+ if (error instanceof Error) {
106
+ return error.message
107
+ }
108
+
109
+ return 'Erro desconhecido'
110
+ }
@@ -0,0 +1,10 @@
1
+ import { StrictMode } from 'react'
2
+ import { createRoot } from 'react-dom/client'
3
+ import './index.css'
4
+ import App from './App.tsx'
5
+
6
+ createRoot(document.getElementById('root')!).render(
7
+ <StrictMode>
8
+ <App />
9
+ </StrictMode>,
10
+ )
@@ -0,0 +1 @@
1
+ /// <reference types="vite/client" />
@@ -0,0 +1,43 @@
1
+ {
2
+ "compilerOptions": {
3
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
4
+ "target": "ES2022",
5
+ "useDefineForClassFields": true,
6
+ "lib": ["ES2022", "DOM", "DOM.Iterable"],
7
+ "module": "ESNext",
8
+ "skipLibCheck": true,
9
+
10
+ /* Bundler mode */
11
+ "moduleResolution": "bundler",
12
+ "allowImportingTsExtensions": true,
13
+ "verbatimModuleSyntax": true,
14
+ "moduleDetection": "force",
15
+ "noEmit": true,
16
+ "jsx": "react-jsx",
17
+
18
+ /* Path mapping (alias support) */
19
+ "baseUrl": ".",
20
+ "paths": {
21
+ "@/*": ["./src/*"],
22
+ "@/components/*": ["./src/components/*"],
23
+ "@/utils/*": ["./src/utils/*"],
24
+ "@/hooks/*": ["./src/hooks/*"],
25
+ "@/assets/*": ["./src/assets/*"],
26
+ "@/lib/*": ["./src/lib/*"],
27
+ "@/types/*": ["./src/types/*"],
28
+ "@/shared/*": ["../shared/*"],
29
+ "@/core/*": ["../../core/*"],
30
+ "@/config/*": ["../../config/*"],
31
+ "elysia": ["../../node_modules/elysia"]
32
+ },
33
+
34
+ /* Linting */
35
+ "strict": true,
36
+ "noUnusedLocals": true,
37
+ "noUnusedParameters": true,
38
+ "erasableSyntaxOnly": true,
39
+ "noFallthroughCasesInSwitch": true,
40
+ "noUncheckedSideEffectImports": true
41
+ },
42
+ "include": ["src"]
43
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "files": [],
3
+ "references": [
4
+ { "path": "./tsconfig.app.json" },
5
+ { "path": "./tsconfig.node.json" }
6
+ ]
7
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "compilerOptions": {
3
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
4
+ "target": "ES2023",
5
+ "lib": ["ES2023"],
6
+ "module": "ESNext",
7
+ "skipLibCheck": true,
8
+
9
+ /* Bundler mode */
10
+ "moduleResolution": "bundler",
11
+ "allowImportingTsExtensions": true,
12
+ "verbatimModuleSyntax": true,
13
+ "moduleDetection": "force",
14
+ "noEmit": true,
15
+
16
+ /* Linting */
17
+ "strict": true,
18
+ "noUnusedLocals": true,
19
+ "noUnusedParameters": true,
20
+ "erasableSyntaxOnly": true,
21
+ "noFallthroughCasesInSwitch": true,
22
+ "noUncheckedSideEffectImports": true
23
+ },
24
+ "include": ["vite.config.ts"]
25
+ }