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,186 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest'
2
+ import { apiCall, getErrorMessage, APIException } from '@/app/client/src/lib/eden-api'
3
+
4
+ describe('Eden API Utilities', () => {
5
+ beforeEach(() => {
6
+ vi.clearAllMocks()
7
+ })
8
+
9
+ describe('apiCall', () => {
10
+ it('should return data on successful API response', async () => {
11
+ const mockData = { users: [{ id: 1, name: 'Test' }] }
12
+ const mockPromise = Promise.resolve({
13
+ data: mockData,
14
+ error: null,
15
+ status: 200,
16
+ response: new Response()
17
+ })
18
+
19
+ const result = await apiCall(mockPromise)
20
+ expect(result).toEqual(mockData)
21
+ })
22
+
23
+ it('should throw APIException on error response', async () => {
24
+ const mockError = {
25
+ status: 400,
26
+ value: {
27
+ message: 'Validation failed',
28
+ code: 'VALIDATION_ERROR',
29
+ details: { field: 'email' }
30
+ }
31
+ }
32
+ const mockPromise = Promise.resolve({
33
+ data: null,
34
+ error: mockError,
35
+ status: 400,
36
+ response: new Response()
37
+ })
38
+
39
+ await expect(apiCall(mockPromise)).rejects.toThrow(APIException)
40
+
41
+ try {
42
+ await apiCall(mockPromise)
43
+ } catch (error) {
44
+ expect(error).toBeInstanceOf(APIException)
45
+ expect((error as APIException).message).toBe('Validation failed')
46
+ expect((error as APIException).status).toBe(400)
47
+ expect((error as APIException).code).toBe('VALIDATION_ERROR')
48
+ expect((error as APIException).details).toEqual(mockError.value)
49
+ }
50
+ })
51
+
52
+ it('should handle network errors', async () => {
53
+ const networkError = new Error('Network error')
54
+ const mockPromise = Promise.reject(networkError)
55
+
56
+ await expect(apiCall(mockPromise)).rejects.toThrow(APIException)
57
+
58
+ try {
59
+ await apiCall(mockPromise)
60
+ } catch (error) {
61
+ expect(error).toBeInstanceOf(APIException)
62
+ expect((error as APIException).message).toBe('Network error')
63
+ expect((error as APIException).status).toBe(500)
64
+ expect((error as APIException).code).toBe('NETWORK_ERROR')
65
+ }
66
+ })
67
+
68
+ it('should handle unknown errors', async () => {
69
+ const unknownError = 'Some string error'
70
+ const mockPromise = Promise.reject(unknownError)
71
+
72
+ await expect(apiCall(mockPromise)).rejects.toThrow(APIException)
73
+
74
+ try {
75
+ await apiCall(mockPromise)
76
+ } catch (error) {
77
+ expect(error).toBeInstanceOf(APIException)
78
+ expect((error as APIException).message).toBe('Unknown error')
79
+ expect((error as APIException).status).toBe(500)
80
+ expect((error as APIException).code).toBe('NETWORK_ERROR')
81
+ }
82
+ })
83
+ })
84
+
85
+ describe('getErrorMessage', () => {
86
+ it('should return specific messages for different status codes', () => {
87
+ const badRequestError = new APIException({
88
+ message: 'Custom message',
89
+ status: 400
90
+ })
91
+ expect(getErrorMessage(badRequestError)).toBe('Custom message')
92
+
93
+ const unauthorizedError = new APIException({
94
+ message: 'Custom auth message',
95
+ status: 401
96
+ })
97
+ expect(getErrorMessage(unauthorizedError)).toBe('Acesso não autorizado')
98
+
99
+ const forbiddenError = new APIException({
100
+ message: 'Forbidden',
101
+ status: 403
102
+ })
103
+ expect(getErrorMessage(forbiddenError)).toBe('Acesso negado')
104
+
105
+ const notFoundError = new APIException({
106
+ message: 'Not found',
107
+ status: 404
108
+ })
109
+ expect(getErrorMessage(notFoundError)).toBe('Recurso não encontrado')
110
+
111
+ const validationError = new APIException({
112
+ message: 'Validation error',
113
+ status: 422
114
+ })
115
+ expect(getErrorMessage(validationError)).toBe('Dados de entrada inválidos')
116
+
117
+ const serverError = new APIException({
118
+ message: 'Server error',
119
+ status: 500
120
+ })
121
+ expect(getErrorMessage(serverError)).toBe('Erro interno do servidor')
122
+ })
123
+
124
+ it('should return generic message for unknown status codes', () => {
125
+ const unknownError = new APIException({
126
+ message: 'Custom error',
127
+ status: 418 // I'm a teapot
128
+ })
129
+ expect(getErrorMessage(unknownError)).toBe('Custom error')
130
+ })
131
+
132
+ it('should handle regular Error objects', () => {
133
+ const regularError = new Error('Regular error message')
134
+ expect(getErrorMessage(regularError)).toBe('Regular error message')
135
+ })
136
+
137
+ it('should handle unknown error types', () => {
138
+ expect(getErrorMessage('string error')).toBe('Erro desconhecido')
139
+ expect(getErrorMessage(null)).toBe('Erro desconhecido')
140
+ expect(getErrorMessage(undefined)).toBe('Erro desconhecido')
141
+ expect(getErrorMessage({ unknownProp: 'value' })).toBe('Erro desconhecido')
142
+ })
143
+
144
+ it('should fallback to default messages when APIException has no message', () => {
145
+ const errorWithoutMessage = new APIException({
146
+ message: '',
147
+ status: 401
148
+ })
149
+ expect(getErrorMessage(errorWithoutMessage)).toBe('Acesso não autorizado')
150
+ })
151
+ })
152
+
153
+ describe('APIException', () => {
154
+ it('should create APIException with all properties', () => {
155
+ const errorData = {
156
+ message: 'Test error',
157
+ status: 400,
158
+ code: 'TEST_ERROR',
159
+ details: { field: 'test' }
160
+ }
161
+
162
+ const exception = new APIException(errorData)
163
+
164
+ expect(exception.message).toBe('Test error')
165
+ expect(exception.status).toBe(400)
166
+ expect(exception.code).toBe('TEST_ERROR')
167
+ expect(exception.details).toEqual({ field: 'test' })
168
+ expect(exception.name).toBe('APIException')
169
+ expect(exception).toBeInstanceOf(Error)
170
+ })
171
+
172
+ it('should create APIException with minimal properties', () => {
173
+ const errorData = {
174
+ message: 'Minimal error',
175
+ status: 500
176
+ }
177
+
178
+ const exception = new APIException(errorData)
179
+
180
+ expect(exception.message).toBe('Minimal error')
181
+ expect(exception.status).toBe(500)
182
+ expect(exception.code).toBeUndefined()
183
+ expect(exception.details).toBeUndefined()
184
+ })
185
+ })
186
+ })
@@ -0,0 +1,23 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { render, screen } from '@testing-library/react'
3
+
4
+ // Simple React component for testing
5
+ function SimpleComponent({ message }: { message: string }) {
6
+ return <div data-testid="message">{message}</div>
7
+ }
8
+
9
+ describe('Simple React Test', () => {
10
+ it('should render a simple component', () => {
11
+ render(<SimpleComponent message="Hello Test!" />)
12
+
13
+ const messageElement = screen.getByTestId('message')
14
+ expect(messageElement).toBeInTheDocument()
15
+ expect(messageElement).toHaveTextContent('Hello Test!')
16
+ })
17
+
18
+ it('should handle different props', () => {
19
+ render(<SimpleComponent message="Different message" />)
20
+
21
+ expect(screen.getByText('Different message')).toBeInTheDocument()
22
+ })
23
+ })
@@ -0,0 +1,150 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest'
2
+ import { UsersController } from '@/app/server/controllers/users.controller'
3
+ import type { CreateUserRequest } from '@/app/shared/types'
4
+
5
+ describe('UsersController', () => {
6
+ beforeEach(() => {
7
+ // Reset users array before each test
8
+ // Note: In a real app, you'd want to use a test database
9
+ // For now, we'll test the logic with the in-memory array
10
+ UsersController.resetForTesting()
11
+ })
12
+
13
+ describe('getUsers', () => {
14
+ it('should return users list', async () => {
15
+ const result = await UsersController.getUsers()
16
+
17
+ expect(result).toBeDefined()
18
+ expect(result.users).toBeDefined()
19
+ expect(Array.isArray(result.users)).toBe(true)
20
+ })
21
+
22
+ it('should return users with correct structure', async () => {
23
+ const result = await UsersController.getUsers()
24
+
25
+ if (result.users.length > 0) {
26
+ const user = result.users[0]
27
+ expect(user).toHaveProperty('id')
28
+ expect(user).toHaveProperty('name')
29
+ expect(user).toHaveProperty('email')
30
+ expect(user).toHaveProperty('createdAt')
31
+ }
32
+ })
33
+ })
34
+
35
+ describe('createUser', () => {
36
+ it('should create a new user successfully', async () => {
37
+ const userData: CreateUserRequest = {
38
+ name: 'Test User',
39
+ email: 'test@example.com'
40
+ }
41
+
42
+ const result = await UsersController.createUser(userData)
43
+
44
+ expect(result.success).toBe(true)
45
+ expect(result.user).toBeDefined()
46
+ expect(result.user?.name).toBe(userData.name)
47
+ expect(result.user?.email).toBe(userData.email)
48
+ expect(result.user?.id).toBeDefined()
49
+ expect(result.user?.createdAt).toBeDefined()
50
+ })
51
+
52
+ it('should prevent duplicate email addresses', async () => {
53
+ const userData: CreateUserRequest = {
54
+ name: 'Test User',
55
+ email: 'duplicate@example.com'
56
+ }
57
+
58
+ // Create first user
59
+ const firstResult = await UsersController.createUser(userData)
60
+ expect(firstResult.success).toBe(true)
61
+
62
+ // Try to create user with same email
63
+ const secondResult = await UsersController.createUser(userData)
64
+ expect(secondResult.success).toBe(false)
65
+ expect(secondResult.message).toBe('Email já está em uso')
66
+ expect(secondResult.user).toBeUndefined()
67
+ })
68
+
69
+ it('should generate unique IDs for different users', async () => {
70
+ const user1Data: CreateUserRequest = {
71
+ name: 'User 1',
72
+ email: 'user1@example.com'
73
+ }
74
+
75
+ const user2Data: CreateUserRequest = {
76
+ name: 'User 2',
77
+ email: 'user2@example.com'
78
+ }
79
+
80
+ const result1 = await UsersController.createUser(user1Data)
81
+ // Add small delay to ensure different timestamps
82
+ await new Promise(resolve => setTimeout(resolve, 2))
83
+ const result2 = await UsersController.createUser(user2Data)
84
+
85
+ expect(result1.success).toBe(true)
86
+ expect(result2.success).toBe(true)
87
+ expect(result1.user?.id).not.toBe(result2.user?.id)
88
+ })
89
+ })
90
+
91
+ describe('getUserById', () => {
92
+ it('should return user when found', async () => {
93
+ // First create a user
94
+ const userData: CreateUserRequest = {
95
+ name: 'Findable User',
96
+ email: 'findable@example.com'
97
+ }
98
+
99
+ const createResult = await UsersController.createUser(userData)
100
+ expect(createResult.success).toBe(true)
101
+
102
+ const userId = createResult.user!.id
103
+ const result = await UsersController.getUserById(userId)
104
+
105
+ expect(result).toBeDefined()
106
+ expect(result?.user).toBeDefined()
107
+ expect(result?.user.id).toBe(userId)
108
+ expect(result?.user.name).toBe(userData.name)
109
+ expect(result?.user.email).toBe(userData.email)
110
+ })
111
+
112
+ it('should return null when user not found', async () => {
113
+ const result = await UsersController.getUserById(99999)
114
+ expect(result).toBeNull()
115
+ })
116
+ })
117
+
118
+ describe('deleteUser', () => {
119
+ it('should delete existing user successfully', async () => {
120
+ // First create a user
121
+ const userData: CreateUserRequest = {
122
+ name: 'Deletable User',
123
+ email: 'deletable@example.com'
124
+ }
125
+
126
+ const createResult = await UsersController.createUser(userData)
127
+ expect(createResult.success).toBe(true)
128
+
129
+ const userId = createResult.user!.id
130
+ const deleteResult = await UsersController.deleteUser(userId)
131
+
132
+ expect(deleteResult.success).toBe(true)
133
+ expect(deleteResult.user).toBeDefined()
134
+ expect(deleteResult.user?.id).toBe(userId)
135
+ expect(deleteResult.message).toBe('Usuário deletado com sucesso')
136
+
137
+ // Verify user is actually deleted
138
+ const findResult = await UsersController.getUserById(userId)
139
+ expect(findResult).toBeNull()
140
+ })
141
+
142
+ it('should return error when trying to delete non-existent user', async () => {
143
+ const result = await UsersController.deleteUser(99999)
144
+
145
+ expect(result.success).toBe(false)
146
+ expect(result.message).toBe('Usuário não encontrado')
147
+ expect(result.user).toBeUndefined()
148
+ })
149
+ })
150
+ })
@@ -0,0 +1,95 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'
2
+ import { ProjectCreator } from '@/core/templates/create-project'
3
+ import { rmdir, mkdir } from 'fs/promises'
4
+ import { join } from 'path'
5
+
6
+ // Mock bun APIs to avoid actual file operations in tests
7
+ vi.mock('bun', async () => {
8
+ const actual = await vi.importActual('bun')
9
+ return {
10
+ ...actual,
11
+ spawn: vi.fn(() => ({
12
+ exited: Promise.resolve(0),
13
+ stdout: { readable: null },
14
+ stderr: { readable: null }
15
+ })),
16
+ write: vi.fn(),
17
+ file: vi.fn(() => ({
18
+ exists: () => true,
19
+ text: () => 'mock content'
20
+ }))
21
+ }
22
+ })
23
+
24
+ vi.mock('fs/promises', () => ({
25
+ mkdir: vi.fn(),
26
+ readdir: vi.fn(() => [])
27
+ }))
28
+
29
+ describe('ProjectCreator', () => {
30
+ const testDir = join(process.cwd(), 'test-project-temp')
31
+ let creator: ProjectCreator
32
+
33
+ beforeEach(() => {
34
+ creator = new ProjectCreator({
35
+ name: 'test-project',
36
+ targetDir: testDir,
37
+ template: 'basic'
38
+ })
39
+ vi.clearAllMocks()
40
+ })
41
+
42
+ afterEach(async () => {
43
+ try {
44
+ await rmdir(testDir, { recursive: true })
45
+ } catch {
46
+ // Ignore cleanup errors
47
+ }
48
+ })
49
+
50
+ describe('constructor', () => {
51
+ it('should create ProjectCreator with basic options', () => {
52
+ expect(creator).toBeDefined()
53
+ })
54
+
55
+ it('should set default template to basic', () => {
56
+ const defaultCreator = new ProjectCreator({
57
+ name: 'test-project'
58
+ })
59
+ expect(defaultCreator).toBeDefined()
60
+ })
61
+
62
+ it('should handle custom target directory', () => {
63
+ const customCreator = new ProjectCreator({
64
+ name: 'custom-project',
65
+ targetDir: '/custom/path',
66
+ template: 'full'
67
+ })
68
+ expect(customCreator).toBeDefined()
69
+ })
70
+ })
71
+
72
+ describe('validation', () => {
73
+ it('should validate project names correctly', () => {
74
+ // Valid names
75
+ expect(() => new ProjectCreator({ name: 'valid-name' })).not.toThrow()
76
+ expect(() => new ProjectCreator({ name: 'valid_name' })).not.toThrow()
77
+ expect(() => new ProjectCreator({ name: 'validName123' })).not.toThrow()
78
+ })
79
+ })
80
+
81
+ describe('create method', () => {
82
+ it('should handle create process without throwing', async () => {
83
+ // Mock all async operations to succeed
84
+ const mkdirMock = vi.mocked(mkdir)
85
+ mkdirMock.mockResolvedValue(undefined)
86
+
87
+ // We'll test that the method doesn't throw
88
+ // Full integration testing would require actual file system operations
89
+ expect(async () => {
90
+ // In a real test, we'd mock all the dependencies properly
91
+ // For now, we just ensure the class is properly structured
92
+ }).not.toThrow()
93
+ })
94
+ })
95
+ })
@@ -0,0 +1,144 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest'
2
+ import { FluxStackFramework } from '@/core/server/framework'
3
+ import type { Plugin } from '@/core/types'
4
+ import type { FluxStackConfig } from '@/core/config/schema'
5
+
6
+ describe('FluxStackFramework', () => {
7
+ let framework: FluxStackFramework
8
+
9
+ beforeEach(() => {
10
+ framework = new FluxStackFramework({
11
+ server: {
12
+ port: 3001,
13
+ host: 'localhost',
14
+ apiPrefix: '/api',
15
+ cors: {
16
+ origins: ['*'],
17
+ methods: ['GET', 'POST'],
18
+ headers: ['Content-Type'],
19
+ credentials: false,
20
+ maxAge: 86400
21
+ },
22
+ middleware: []
23
+ }
24
+ })
25
+ })
26
+
27
+ describe('constructor', () => {
28
+ it('should create framework with default config', () => {
29
+ const defaultFramework = new FluxStackFramework()
30
+ const context = defaultFramework.getContext()
31
+
32
+ // Environment variables now control default values
33
+ expect(context.config.server.port).toBeDefined()
34
+ expect(context.config.server.apiPrefix).toBe('/api')
35
+ expect(context.config.client.port).toBeDefined()
36
+ })
37
+
38
+ it('should create framework with custom config', () => {
39
+ const config: Partial<FluxStackConfig> = {
40
+ server: {
41
+ port: 4000,
42
+ host: 'localhost',
43
+ apiPrefix: '/custom-api',
44
+ cors: {
45
+ origins: ['*'],
46
+ methods: ['GET', 'POST'],
47
+ headers: ['Content-Type'],
48
+ credentials: false,
49
+ maxAge: 86400
50
+ },
51
+ middleware: []
52
+ },
53
+ client: {
54
+ port: 5174,
55
+ proxy: {
56
+ target: 'http://localhost:4000',
57
+ changeOrigin: true
58
+ },
59
+ build: {
60
+ outDir: 'dist/client',
61
+ sourceMaps: true,
62
+ minify: false,
63
+ target: 'es2020'
64
+ }
65
+ }
66
+ }
67
+
68
+ const customFramework = new FluxStackFramework(config)
69
+ const context = customFramework.getContext()
70
+
71
+ expect(context.config.server.port).toBe(4000)
72
+ expect(context.config.client.port).toBe(5174)
73
+ expect(context.config.server.apiPrefix).toBe('/custom-api')
74
+ })
75
+
76
+ it('should set development mode correctly', () => {
77
+ const context = framework.getContext()
78
+ // Environment config manages NODE_ENV now
79
+ expect(typeof context.isDevelopment).toBe('boolean')
80
+ expect(typeof context.isProduction).toBe('boolean')
81
+ })
82
+ })
83
+
84
+ describe('plugin system', () => {
85
+ it('should add plugins correctly', () => {
86
+ const mockPlugin: Plugin = {
87
+ name: 'test-plugin',
88
+ setup: () => {}
89
+ }
90
+
91
+ const result = framework.use(mockPlugin)
92
+ expect(result).toBe(framework) // Should return framework for chaining
93
+ })
94
+
95
+ it('should handle multiple plugins', () => {
96
+ const plugin1: Plugin = {
97
+ name: 'plugin-1',
98
+ setup: () => {}
99
+ }
100
+
101
+ const plugin2: Plugin = {
102
+ name: 'plugin-2',
103
+ setup: () => {}
104
+ }
105
+
106
+ framework.use(plugin1).use(plugin2)
107
+ // Framework should not throw and should allow chaining
108
+ expect(framework).toBeDefined()
109
+ })
110
+ })
111
+
112
+ describe('routes', () => {
113
+ it('should register routes correctly', () => {
114
+ // Test that routes method exists and returns framework
115
+ expect(typeof framework.routes).toBe('function')
116
+
117
+ // Skip actual route registration test to avoid Elysia mock complexity
118
+ // This test verifies the method is available for chaining
119
+ expect(framework).toBeDefined()
120
+ })
121
+ })
122
+
123
+ describe('getApp', () => {
124
+ it('should return Elysia app instance', () => {
125
+ const app = framework.getApp()
126
+ expect(app).toBeDefined()
127
+ // Elysia apps have these methods
128
+ expect(typeof app.get).toBe('function')
129
+ expect(typeof app.post).toBe('function')
130
+ expect(typeof app.listen).toBe('function')
131
+ })
132
+ })
133
+
134
+ describe('getContext', () => {
135
+ it('should return framework context', () => {
136
+ const context = framework.getContext()
137
+
138
+ expect(context).toBeDefined()
139
+ expect(context.config).toBeDefined()
140
+ expect(typeof context.isDevelopment).toBe('boolean')
141
+ expect(typeof context.isProduction).toBe('boolean')
142
+ })
143
+ })
144
+ })