exisjs 0.6.1 → 0.7.1

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 (564) hide show
  1. package/README.md +9 -3
  2. package/dist/cli/commands/build.d.ts.map +1 -1
  3. package/dist/cli/commands/build.js +2 -8
  4. package/dist/cli/commands/build.js.map +1 -1
  5. package/dist/cli/commands/dev.d.ts.map +1 -1
  6. package/dist/cli/commands/dev.js +33 -44
  7. package/dist/cli/commands/dev.js.map +1 -1
  8. package/dist/cli/commands/exports.d.ts.map +1 -1
  9. package/dist/cli/commands/exports.js +5 -32
  10. package/dist/cli/commands/exports.js.map +1 -1
  11. package/dist/cli/commands/generate.d.ts +2 -13
  12. package/dist/cli/commands/generate.d.ts.map +1 -1
  13. package/dist/cli/commands/generate.js +27 -60
  14. package/dist/cli/commands/generate.js.map +1 -1
  15. package/dist/cli/commands/init.d.ts.map +1 -1
  16. package/dist/cli/commands/init.js +4 -4
  17. package/dist/cli/commands/init.js.map +1 -1
  18. package/dist/cli/commands/start.d.ts.map +1 -1
  19. package/dist/cli/commands/start.js +2 -6
  20. package/dist/cli/commands/start.js.map +1 -1
  21. package/dist/cli/index.js +11 -23
  22. package/dist/cli/index.js.map +1 -1
  23. package/dist/cli/routes.d.ts.map +1 -1
  24. package/dist/cli/routes.js +20 -8
  25. package/dist/cli/routes.js.map +1 -1
  26. package/dist/config/config.d.ts +2 -1
  27. package/dist/config/config.d.ts.map +1 -1
  28. package/dist/config/config.js +7 -5
  29. package/dist/config/config.js.map +1 -1
  30. package/dist/config/env.d.ts.map +1 -1
  31. package/dist/config/env.js +3 -2
  32. package/dist/config/env.js.map +1 -1
  33. package/dist/config/types.d.ts +7 -2
  34. package/dist/config/types.d.ts.map +1 -1
  35. package/dist/decorators/constants.d.ts +9 -2
  36. package/dist/decorators/constants.d.ts.map +1 -1
  37. package/dist/decorators/constants.js +3 -2
  38. package/dist/decorators/constants.js.map +1 -1
  39. package/dist/decorators/core/metadata.d.ts +31 -0
  40. package/dist/decorators/core/metadata.d.ts.map +1 -1
  41. package/dist/decorators/core/metadata.js +110 -1
  42. package/dist/decorators/core/metadata.js.map +1 -1
  43. package/dist/decorators/core.d.ts +19 -4
  44. package/dist/decorators/core.d.ts.map +1 -1
  45. package/dist/decorators/core.js +29 -4
  46. package/dist/decorators/core.js.map +1 -1
  47. package/dist/decorators/middleware.d.ts +17 -17
  48. package/dist/decorators/middleware.d.ts.map +1 -1
  49. package/dist/decorators/middleware.js +111 -208
  50. package/dist/decorators/middleware.js.map +1 -1
  51. package/dist/decorators/params.d.ts +54 -12
  52. package/dist/decorators/params.d.ts.map +1 -1
  53. package/dist/decorators/params.js +40 -20
  54. package/dist/decorators/params.js.map +1 -1
  55. package/dist/decorators/routing.d.ts +0 -2
  56. package/dist/decorators/routing.d.ts.map +1 -1
  57. package/dist/decorators/routing.js +3 -4
  58. package/dist/decorators/routing.js.map +1 -1
  59. package/dist/di/container.d.ts +5 -1
  60. package/dist/di/container.d.ts.map +1 -1
  61. package/dist/di/container.js +56 -8
  62. package/dist/di/container.js.map +1 -1
  63. package/dist/di/decorators.d.ts +30 -0
  64. package/dist/di/decorators.d.ts.map +1 -0
  65. package/dist/di/decorators.js +59 -0
  66. package/dist/di/decorators.js.map +1 -0
  67. package/dist/di/index.d.ts +1 -0
  68. package/dist/di/index.d.ts.map +1 -1
  69. package/dist/di/index.js +4 -1
  70. package/dist/di/index.js.map +1 -1
  71. package/dist/docs/ARCHITECTURE.md +46 -285
  72. package/dist/docs/BENCHMARKS.md +5 -5
  73. package/dist/docs/README.md +8 -11
  74. package/dist/docs/content/boundaries.mdx +151 -0
  75. package/dist/docs/content/cli/commands.mdx +66 -104
  76. package/dist/docs/content/cli/overview.mdx +37 -47
  77. package/dist/docs/content/cli/usage.mdx +29 -15
  78. package/dist/docs/content/decorators.mdx +142 -81
  79. package/dist/docs/content/installation.mdx +20 -1
  80. package/dist/docs/content/middleware.mdx +65 -291
  81. package/dist/docs/content/modules.mdx +22 -1
  82. package/dist/docs/content/providers.mdx +33 -1
  83. package/dist/docs/content/security.mdx +44 -246
  84. package/dist/docs/content/structure.mdx +227 -100
  85. package/dist/docs/content/validation.mdx +0 -17
  86. package/dist/docs/reference/decorators.mdx +34 -216
  87. package/dist/docs/reference/di.mdx +35 -11
  88. package/dist/docs/reference/logger.mdx +100 -0
  89. package/dist/docs/reference/middleware.mdx +41 -217
  90. package/dist/docs/reference/router.mdx +9 -9
  91. package/dist/docs/reference/validator.mdx +2 -5
  92. package/dist/error/errors.d.ts.map +1 -1
  93. package/dist/error/errors.js +19 -5
  94. package/dist/error/errors.js.map +1 -1
  95. package/dist/index.d.ts +0 -1
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +1 -4
  98. package/dist/index.js.map +1 -1
  99. package/dist/lib/start-server.js +10 -0
  100. package/dist/lib/start-server.js.map +1 -1
  101. package/dist/logger/index.d.ts +81 -0
  102. package/dist/logger/index.d.ts.map +1 -0
  103. package/dist/logger/index.js +142 -0
  104. package/dist/logger/index.js.map +1 -0
  105. package/dist/middleware/dedupe.d.ts +1 -1
  106. package/dist/middleware/dedupe.js +1 -1
  107. package/dist/middleware/middleware.d.ts +3 -5
  108. package/dist/middleware/middleware.d.ts.map +1 -1
  109. package/dist/middleware/middleware.js +2 -6
  110. package/dist/middleware/middleware.js.map +1 -1
  111. package/dist/middleware/rate-limit.d.ts +0 -2
  112. package/dist/middleware/rate-limit.d.ts.map +1 -1
  113. package/dist/middleware/rate-limit.js +2 -14
  114. package/dist/middleware/rate-limit.js.map +1 -1
  115. package/dist/module/index.d.ts +2 -0
  116. package/dist/module/index.d.ts.map +1 -1
  117. package/dist/module/index.js +3 -1
  118. package/dist/module/index.js.map +1 -1
  119. package/dist/plugin/manager.d.ts +1 -1
  120. package/dist/plugin/manager.d.ts.map +1 -1
  121. package/dist/plugin/manager.js +47 -0
  122. package/dist/plugin/manager.js.map +1 -1
  123. package/dist/router/{gateway.d.ts → boundary.d.ts} +21 -13
  124. package/dist/router/boundary.d.ts.map +1 -0
  125. package/dist/router/boundary.js +11 -0
  126. package/dist/router/boundary.js.map +1 -0
  127. package/dist/router/controller-registrar.d.ts.map +1 -1
  128. package/dist/router/controller-registrar.js +33 -6
  129. package/dist/router/controller-registrar.js.map +1 -1
  130. package/dist/router/index.d.ts +3 -6
  131. package/dist/router/index.d.ts.map +1 -1
  132. package/dist/router/index.js +3 -7
  133. package/dist/router/index.js.map +1 -1
  134. package/dist/router/route-builder.d.ts +0 -28
  135. package/dist/router/route-builder.d.ts.map +1 -1
  136. package/dist/router/route-builder.js +2 -5
  137. package/dist/router/route-builder.js.map +1 -1
  138. package/dist/router/route-scanner.d.ts +1 -2
  139. package/dist/router/route-scanner.d.ts.map +1 -1
  140. package/dist/router/route-scanner.js +225 -203
  141. package/dist/router/route-scanner.js.map +1 -1
  142. package/dist/router/router.d.ts +4 -6
  143. package/dist/router/router.d.ts.map +1 -1
  144. package/dist/router/router.js +36 -72
  145. package/dist/router/router.js.map +1 -1
  146. package/dist/router/types.d.ts +2 -6
  147. package/dist/router/types.d.ts.map +1 -1
  148. package/dist/server/{bun-adapter.d.ts → adapters/bun-adapter.d.ts} +1 -1
  149. package/dist/server/adapters/bun-adapter.d.ts.map +1 -0
  150. package/dist/server/{bun-adapter.js → adapters/bun-adapter.js} +2 -24
  151. package/dist/server/adapters/bun-adapter.js.map +1 -0
  152. package/dist/server/{uws-adapter.d.ts → adapters/uws-adapter.d.ts} +1 -1
  153. package/dist/server/adapters/uws-adapter.d.ts.map +1 -0
  154. package/dist/server/{uws-adapter.js → adapters/uws-adapter.js} +1 -28
  155. package/dist/server/adapters/uws-adapter.js.map +1 -0
  156. package/dist/server/app.d.ts +10 -31
  157. package/dist/server/app.d.ts.map +1 -1
  158. package/dist/server/app.js +20 -135
  159. package/dist/server/app.js.map +1 -1
  160. package/dist/server/bootstrapper.d.ts +4 -15
  161. package/dist/server/bootstrapper.d.ts.map +1 -1
  162. package/dist/server/bootstrapper.js +30 -229
  163. package/dist/server/bootstrapper.js.map +1 -1
  164. package/dist/server/define.d.ts +2 -2
  165. package/dist/server/define.d.ts.map +1 -1
  166. package/dist/server/define.js +3 -3
  167. package/dist/server/define.js.map +1 -1
  168. package/dist/server/engines/bun-engine.d.ts +16 -0
  169. package/dist/server/engines/bun-engine.d.ts.map +1 -0
  170. package/dist/server/engines/bun-engine.js +41 -0
  171. package/dist/server/engines/bun-engine.js.map +1 -0
  172. package/dist/server/engines/engine.d.ts +16 -0
  173. package/dist/server/engines/engine.d.ts.map +1 -0
  174. package/dist/{queue/types.js → server/engines/engine.js} +1 -1
  175. package/dist/server/engines/engine.js.map +1 -0
  176. package/dist/server/engines/node-engine.d.ts +22 -0
  177. package/dist/server/engines/node-engine.d.ts.map +1 -0
  178. package/dist/server/engines/node-engine.js +130 -0
  179. package/dist/server/engines/node-engine.js.map +1 -0
  180. package/dist/server/engines/uws-engine.d.ts +16 -0
  181. package/dist/server/engines/uws-engine.d.ts.map +1 -0
  182. package/dist/server/engines/uws-engine.js +48 -0
  183. package/dist/server/engines/uws-engine.js.map +1 -0
  184. package/dist/server/request-handler.d.ts +0 -1
  185. package/dist/server/request-handler.d.ts.map +1 -1
  186. package/dist/server/request-handler.js +74 -48
  187. package/dist/server/request-handler.js.map +1 -1
  188. package/dist/server/request.d.ts +0 -8
  189. package/dist/server/request.d.ts.map +1 -1
  190. package/dist/server/request.js +0 -16
  191. package/dist/server/request.js.map +1 -1
  192. package/dist/server/response.d.ts.map +1 -1
  193. package/dist/server/response.js +2 -1
  194. package/dist/server/response.js.map +1 -1
  195. package/dist/utils/logger.d.ts.map +1 -1
  196. package/dist/utils/logger.js +0 -1
  197. package/dist/utils/logger.js.map +1 -1
  198. package/dist/utils/time.d.ts +6 -0
  199. package/dist/utils/time.d.ts.map +1 -0
  200. package/dist/utils/time.js +15 -0
  201. package/dist/utils/time.js.map +1 -0
  202. package/dist/validator/index.d.ts +1 -7
  203. package/dist/validator/index.d.ts.map +1 -1
  204. package/dist/validator/index.js +1 -5
  205. package/dist/validator/index.js.map +1 -1
  206. package/dist/validator/tex-types.d.ts +15 -2
  207. package/dist/validator/tex-types.d.ts.map +1 -1
  208. package/dist/validator/tex-types.js +8 -0
  209. package/dist/validator/tex-types.js.map +1 -1
  210. package/dist/validator/tex.d.ts.map +1 -1
  211. package/dist/validator/tex.js +21 -2
  212. package/dist/validator/tex.js.map +1 -1
  213. package/package.json +9 -151
  214. package/dist/adapters/aws-lambda.d.ts +0 -21
  215. package/dist/adapters/aws-lambda.d.ts.map +0 -1
  216. package/dist/adapters/aws-lambda.js +0 -125
  217. package/dist/adapters/aws-lambda.js.map +0 -1
  218. package/dist/adapters/bun.d.ts +0 -9
  219. package/dist/adapters/bun.d.ts.map +0 -1
  220. package/dist/adapters/bun.js +0 -23
  221. package/dist/adapters/bun.js.map +0 -1
  222. package/dist/adapters/cloudflare.d.ts +0 -10
  223. package/dist/adapters/cloudflare.d.ts.map +0 -1
  224. package/dist/adapters/cloudflare.js +0 -22
  225. package/dist/adapters/cloudflare.js.map +0 -1
  226. package/dist/adapters/deno.d.ts +0 -7
  227. package/dist/adapters/deno.d.ts.map +0 -1
  228. package/dist/adapters/deno.js +0 -21
  229. package/dist/adapters/deno.js.map +0 -1
  230. package/dist/adapters/fastly.d.ts +0 -6
  231. package/dist/adapters/fastly.d.ts.map +0 -1
  232. package/dist/adapters/fastly.js +0 -20
  233. package/dist/adapters/fastly.js.map +0 -1
  234. package/dist/adapters/fetch.d.ts +0 -30
  235. package/dist/adapters/fetch.d.ts.map +0 -1
  236. package/dist/adapters/fetch.js +0 -119
  237. package/dist/adapters/fetch.js.map +0 -1
  238. package/dist/adapters/index.d.ts +0 -9
  239. package/dist/adapters/index.d.ts.map +0 -1
  240. package/dist/adapters/index.js +0 -28
  241. package/dist/adapters/index.js.map +0 -1
  242. package/dist/adapters/netlify.d.ts +0 -8
  243. package/dist/adapters/netlify.d.ts.map +0 -1
  244. package/dist/adapters/netlify.js +0 -20
  245. package/dist/adapters/netlify.js.map +0 -1
  246. package/dist/adapters/vercel.d.ts +0 -17
  247. package/dist/adapters/vercel.d.ts.map +0 -1
  248. package/dist/adapters/vercel.js +0 -23
  249. package/dist/adapters/vercel.js.map +0 -1
  250. package/dist/auth/index.d.ts +0 -8
  251. package/dist/auth/index.d.ts.map +0 -1
  252. package/dist/auth/index.js +0 -49
  253. package/dist/auth/index.js.map +0 -1
  254. package/dist/auth/jwt.d.ts +0 -20
  255. package/dist/auth/jwt.d.ts.map +0 -1
  256. package/dist/auth/jwt.js +0 -59
  257. package/dist/auth/jwt.js.map +0 -1
  258. package/dist/auth/oauth/core.d.ts +0 -96
  259. package/dist/auth/oauth/core.d.ts.map +0 -1
  260. package/dist/auth/oauth/core.js +0 -203
  261. package/dist/auth/oauth/core.js.map +0 -1
  262. package/dist/auth/oauth/index.d.ts +0 -45
  263. package/dist/auth/oauth/index.d.ts.map +0 -1
  264. package/dist/auth/oauth/index.js +0 -64
  265. package/dist/auth/oauth/index.js.map +0 -1
  266. package/dist/auth/oauth/middleware.d.ts +0 -63
  267. package/dist/auth/oauth/middleware.d.ts.map +0 -1
  268. package/dist/auth/oauth/middleware.js +0 -164
  269. package/dist/auth/oauth/middleware.js.map +0 -1
  270. package/dist/auth/oauth/providers/custom.d.ts +0 -41
  271. package/dist/auth/oauth/providers/custom.d.ts.map +0 -1
  272. package/dist/auth/oauth/providers/custom.js +0 -204
  273. package/dist/auth/oauth/providers/custom.js.map +0 -1
  274. package/dist/auth/oauth/providers/discord.d.ts +0 -23
  275. package/dist/auth/oauth/providers/discord.d.ts.map +0 -1
  276. package/dist/auth/oauth/providers/discord.js +0 -130
  277. package/dist/auth/oauth/providers/discord.js.map +0 -1
  278. package/dist/auth/oauth/providers/facebook.d.ts +0 -28
  279. package/dist/auth/oauth/providers/facebook.d.ts.map +0 -1
  280. package/dist/auth/oauth/providers/facebook.js +0 -124
  281. package/dist/auth/oauth/providers/facebook.js.map +0 -1
  282. package/dist/auth/oauth/providers/github.d.ts +0 -25
  283. package/dist/auth/oauth/providers/github.d.ts.map +0 -1
  284. package/dist/auth/oauth/providers/github.js +0 -132
  285. package/dist/auth/oauth/providers/github.js.map +0 -1
  286. package/dist/auth/oauth/providers/google.d.ts +0 -23
  287. package/dist/auth/oauth/providers/google.d.ts.map +0 -1
  288. package/dist/auth/oauth/providers/google.js +0 -134
  289. package/dist/auth/oauth/providers/google.js.map +0 -1
  290. package/dist/auth/oauth/providers/microsoft.d.ts +0 -28
  291. package/dist/auth/oauth/providers/microsoft.d.ts.map +0 -1
  292. package/dist/auth/oauth/providers/microsoft.js +0 -136
  293. package/dist/auth/oauth/providers/microsoft.js.map +0 -1
  294. package/dist/auth/oauth/types.d.ts +0 -158
  295. package/dist/auth/oauth/types.d.ts.map +0 -1
  296. package/dist/auth/oauth/types.js +0 -4
  297. package/dist/auth/oauth/types.js.map +0 -1
  298. package/dist/auth/password.d.ts +0 -25
  299. package/dist/auth/password.d.ts.map +0 -1
  300. package/dist/auth/password.js +0 -93
  301. package/dist/auth/password.js.map +0 -1
  302. package/dist/auth/rbac.d.ts +0 -10
  303. package/dist/auth/rbac.d.ts.map +0 -1
  304. package/dist/auth/rbac.js +0 -34
  305. package/dist/auth/rbac.js.map +0 -1
  306. package/dist/auth/session.d.ts +0 -26
  307. package/dist/auth/session.d.ts.map +0 -1
  308. package/dist/auth/session.js +0 -134
  309. package/dist/auth/session.js.map +0 -1
  310. package/dist/cache/index.d.ts +0 -4
  311. package/dist/cache/index.d.ts.map +0 -1
  312. package/dist/cache/index.js +0 -25
  313. package/dist/cache/index.js.map +0 -1
  314. package/dist/cache/store.d.ts +0 -58
  315. package/dist/cache/store.d.ts.map +0 -1
  316. package/dist/cache/store.js +0 -298
  317. package/dist/cache/store.js.map +0 -1
  318. package/dist/cron/parser.d.ts +0 -2
  319. package/dist/cron/parser.d.ts.map +0 -1
  320. package/dist/cron/parser.js +0 -52
  321. package/dist/cron/parser.js.map +0 -1
  322. package/dist/cron/scheduler.d.ts +0 -23
  323. package/dist/cron/scheduler.d.ts.map +0 -1
  324. package/dist/cron/scheduler.js +0 -114
  325. package/dist/cron/scheduler.js.map +0 -1
  326. package/dist/database/adapters/mongodb.d.ts +0 -58
  327. package/dist/database/adapters/mongodb.d.ts.map +0 -1
  328. package/dist/database/adapters/mongodb.js +0 -264
  329. package/dist/database/adapters/mongodb.js.map +0 -1
  330. package/dist/database/adapters/mysql.d.ts +0 -27
  331. package/dist/database/adapters/mysql.d.ts.map +0 -1
  332. package/dist/database/adapters/mysql.js +0 -188
  333. package/dist/database/adapters/mysql.js.map +0 -1
  334. package/dist/database/adapters/postgres.d.ts +0 -28
  335. package/dist/database/adapters/postgres.d.ts.map +0 -1
  336. package/dist/database/adapters/postgres.js +0 -174
  337. package/dist/database/adapters/postgres.js.map +0 -1
  338. package/dist/database/adapters/sqlite.d.ts +0 -27
  339. package/dist/database/adapters/sqlite.d.ts.map +0 -1
  340. package/dist/database/adapters/sqlite.js +0 -149
  341. package/dist/database/adapters/sqlite.js.map +0 -1
  342. package/dist/database/index.d.ts +0 -42
  343. package/dist/database/index.d.ts.map +0 -1
  344. package/dist/database/index.js +0 -58
  345. package/dist/database/index.js.map +0 -1
  346. package/dist/database/manager.d.ts +0 -141
  347. package/dist/database/manager.d.ts.map +0 -1
  348. package/dist/database/manager.js +0 -337
  349. package/dist/database/manager.js.map +0 -1
  350. package/dist/database/migration.d.ts +0 -57
  351. package/dist/database/migration.d.ts.map +0 -1
  352. package/dist/database/migration.js +0 -329
  353. package/dist/database/migration.js.map +0 -1
  354. package/dist/database/query-builder.d.ts +0 -95
  355. package/dist/database/query-builder.d.ts.map +0 -1
  356. package/dist/database/query-builder.js +0 -404
  357. package/dist/database/query-builder.js.map +0 -1
  358. package/dist/database/sql/index.d.ts +0 -18
  359. package/dist/database/sql/index.d.ts.map +0 -1
  360. package/dist/database/sql/index.js +0 -74
  361. package/dist/database/sql/index.js.map +0 -1
  362. package/dist/database/sql/schema.d.ts +0 -38
  363. package/dist/database/sql/schema.d.ts.map +0 -1
  364. package/dist/database/sql/schema.js +0 -80
  365. package/dist/database/sql/schema.js.map +0 -1
  366. package/dist/database/synchronizer.d.ts +0 -12
  367. package/dist/database/synchronizer.d.ts.map +0 -1
  368. package/dist/database/synchronizer.js +0 -82
  369. package/dist/database/synchronizer.js.map +0 -1
  370. package/dist/database/types.d.ts +0 -184
  371. package/dist/database/types.d.ts.map +0 -1
  372. package/dist/database/types.js +0 -4
  373. package/dist/database/types.js.map +0 -1
  374. package/dist/dataloader/dataloader.d.ts +0 -23
  375. package/dist/dataloader/dataloader.d.ts.map +0 -1
  376. package/dist/dataloader/dataloader.js +0 -98
  377. package/dist/dataloader/dataloader.js.map +0 -1
  378. package/dist/dataloader/index.d.ts +0 -3
  379. package/dist/dataloader/index.d.ts.map +0 -1
  380. package/dist/dataloader/index.js +0 -19
  381. package/dist/dataloader/index.js.map +0 -1
  382. package/dist/dataloader/registry.d.ts +0 -17
  383. package/dist/dataloader/registry.d.ts.map +0 -1
  384. package/dist/dataloader/registry.js +0 -47
  385. package/dist/dataloader/registry.js.map +0 -1
  386. package/dist/dev/dep-graph.d.ts +0 -2
  387. package/dist/dev/dep-graph.d.ts.map +0 -1
  388. package/dist/dev/dep-graph.js +0 -111
  389. package/dist/dev/dep-graph.js.map +0 -1
  390. package/dist/dev/hot-reload.d.ts +0 -30
  391. package/dist/dev/hot-reload.d.ts.map +0 -1
  392. package/dist/dev/hot-reload.js +0 -262
  393. package/dist/dev/hot-reload.js.map +0 -1
  394. package/dist/docs/content/adapters.mdx +0 -199
  395. package/dist/docs/content/cache.mdx +0 -239
  396. package/dist/docs/content/circuit-breaker.mdx +0 -130
  397. package/dist/docs/content/cron.mdx +0 -109
  398. package/dist/docs/content/database.mdx +0 -278
  399. package/dist/docs/content/gateways.mdx +0 -376
  400. package/dist/docs/content/oauth.mdx +0 -179
  401. package/dist/docs/content/queues.mdx +0 -177
  402. package/dist/docs/content/rpc.mdx +0 -146
  403. package/dist/docs/content/sse.mdx +0 -159
  404. package/dist/docs/content/websockets.mdx +0 -289
  405. package/dist/docs/integrations/README.md +0 -23
  406. package/dist/docs/integrations/jwt.mdx +0 -151
  407. package/dist/docs/integrations/mongo.mdx +0 -183
  408. package/dist/docs/integrations/observability.mdx +0 -125
  409. package/dist/docs/integrations/openai.mdx +0 -108
  410. package/dist/docs/integrations/postgres.mdx +0 -190
  411. package/dist/docs/integrations/posthog.mdx +0 -122
  412. package/dist/docs/integrations/redis.mdx +0 -141
  413. package/dist/docs/integrations/resend.mdx +0 -117
  414. package/dist/docs/integrations/s3.mdx +0 -122
  415. package/dist/docs/integrations/swagger.mdx +0 -113
  416. package/dist/docs/reference/adapters.mdx +0 -130
  417. package/dist/docs/reference/auth.mdx +0 -183
  418. package/dist/docs/reference/cache.mdx +0 -132
  419. package/dist/docs/reference/circuit-breaker.mdx +0 -71
  420. package/dist/docs/reference/queue.mdx +0 -155
  421. package/dist/docs/reference/storage.mdx +0 -116
  422. package/dist/docs/reference/swagger.mdx +0 -132
  423. package/dist/integrations/drizzle.d.ts +0 -10
  424. package/dist/integrations/drizzle.d.ts.map +0 -1
  425. package/dist/integrations/drizzle.js +0 -34
  426. package/dist/integrations/drizzle.js.map +0 -1
  427. package/dist/integrations/jwt.d.ts +0 -12
  428. package/dist/integrations/jwt.d.ts.map +0 -1
  429. package/dist/integrations/jwt.js +0 -29
  430. package/dist/integrations/jwt.js.map +0 -1
  431. package/dist/integrations/mongodb.d.ts +0 -13
  432. package/dist/integrations/mongodb.d.ts.map +0 -1
  433. package/dist/integrations/mongodb.js +0 -48
  434. package/dist/integrations/mongodb.js.map +0 -1
  435. package/dist/integrations/mongoose.d.ts +0 -13
  436. package/dist/integrations/mongoose.d.ts.map +0 -1
  437. package/dist/integrations/mongoose.js +0 -84
  438. package/dist/integrations/mongoose.js.map +0 -1
  439. package/dist/integrations/openai.d.ts +0 -12
  440. package/dist/integrations/openai.d.ts.map +0 -1
  441. package/dist/integrations/openai.js +0 -47
  442. package/dist/integrations/openai.js.map +0 -1
  443. package/dist/integrations/postgres.d.ts +0 -13
  444. package/dist/integrations/postgres.d.ts.map +0 -1
  445. package/dist/integrations/postgres.js +0 -55
  446. package/dist/integrations/postgres.js.map +0 -1
  447. package/dist/integrations/posthog.d.ts +0 -13
  448. package/dist/integrations/posthog.d.ts.map +0 -1
  449. package/dist/integrations/posthog.js +0 -49
  450. package/dist/integrations/posthog.js.map +0 -1
  451. package/dist/integrations/prisma.d.ts +0 -10
  452. package/dist/integrations/prisma.d.ts.map +0 -1
  453. package/dist/integrations/prisma.js +0 -39
  454. package/dist/integrations/prisma.js.map +0 -1
  455. package/dist/integrations/redis.d.ts +0 -12
  456. package/dist/integrations/redis.d.ts.map +0 -1
  457. package/dist/integrations/redis.js +0 -48
  458. package/dist/integrations/redis.js.map +0 -1
  459. package/dist/integrations/resend.d.ts +0 -12
  460. package/dist/integrations/resend.d.ts.map +0 -1
  461. package/dist/integrations/resend.js +0 -47
  462. package/dist/integrations/resend.js.map +0 -1
  463. package/dist/integrations/s3.d.ts +0 -15
  464. package/dist/integrations/s3.d.ts.map +0 -1
  465. package/dist/integrations/s3.js +0 -60
  466. package/dist/integrations/s3.js.map +0 -1
  467. package/dist/integrations/supabase.d.ts +0 -13
  468. package/dist/integrations/supabase.d.ts.map +0 -1
  469. package/dist/integrations/supabase.js +0 -51
  470. package/dist/integrations/supabase.js.map +0 -1
  471. package/dist/middleware/cache.d.ts +0 -21
  472. package/dist/middleware/cache.d.ts.map +0 -1
  473. package/dist/middleware/cache.js +0 -156
  474. package/dist/middleware/cache.js.map +0 -1
  475. package/dist/observability/health.d.ts +0 -23
  476. package/dist/observability/health.d.ts.map +0 -1
  477. package/dist/observability/health.js +0 -49
  478. package/dist/observability/health.js.map +0 -1
  479. package/dist/observability/index.d.ts +0 -4
  480. package/dist/observability/index.d.ts.map +0 -1
  481. package/dist/observability/index.js +0 -10
  482. package/dist/observability/index.js.map +0 -1
  483. package/dist/observability/metrics.d.ts +0 -6
  484. package/dist/observability/metrics.d.ts.map +0 -1
  485. package/dist/observability/metrics.js +0 -60
  486. package/dist/observability/metrics.js.map +0 -1
  487. package/dist/observability/otel.d.ts +0 -27
  488. package/dist/observability/otel.d.ts.map +0 -1
  489. package/dist/observability/otel.js +0 -45
  490. package/dist/observability/otel.js.map +0 -1
  491. package/dist/observability/prometheus.d.ts +0 -30
  492. package/dist/observability/prometheus.d.ts.map +0 -1
  493. package/dist/observability/prometheus.js +0 -31
  494. package/dist/observability/prometheus.js.map +0 -1
  495. package/dist/queue/client.d.ts +0 -13
  496. package/dist/queue/client.d.ts.map +0 -1
  497. package/dist/queue/client.js +0 -83
  498. package/dist/queue/client.js.map +0 -1
  499. package/dist/queue/drivers/MemoryDriver.d.ts +0 -21
  500. package/dist/queue/drivers/MemoryDriver.d.ts.map +0 -1
  501. package/dist/queue/drivers/MemoryDriver.js +0 -176
  502. package/dist/queue/drivers/MemoryDriver.js.map +0 -1
  503. package/dist/queue/drivers/RedisDriver.d.ts +0 -19
  504. package/dist/queue/drivers/RedisDriver.d.ts.map +0 -1
  505. package/dist/queue/drivers/RedisDriver.js +0 -130
  506. package/dist/queue/drivers/RedisDriver.js.map +0 -1
  507. package/dist/queue/index.d.ts +0 -18
  508. package/dist/queue/index.d.ts.map +0 -1
  509. package/dist/queue/index.js +0 -37
  510. package/dist/queue/index.js.map +0 -1
  511. package/dist/queue/manager.d.ts +0 -18
  512. package/dist/queue/manager.d.ts.map +0 -1
  513. package/dist/queue/manager.js +0 -59
  514. package/dist/queue/manager.js.map +0 -1
  515. package/dist/queue/types.d.ts +0 -55
  516. package/dist/queue/types.d.ts.map +0 -1
  517. package/dist/queue/types.js.map +0 -1
  518. package/dist/queue/worker.d.ts +0 -18
  519. package/dist/queue/worker.d.ts.map +0 -1
  520. package/dist/queue/worker.js +0 -176
  521. package/dist/queue/worker.js.map +0 -1
  522. package/dist/router/gateway.d.ts.map +0 -1
  523. package/dist/router/gateway.js +0 -11
  524. package/dist/router/gateway.js.map +0 -1
  525. package/dist/server/bun-adapter.d.ts.map +0 -1
  526. package/dist/server/bun-adapter.js.map +0 -1
  527. package/dist/server/sse.d.ts +0 -16
  528. package/dist/server/sse.d.ts.map +0 -1
  529. package/dist/server/sse.js +0 -51
  530. package/dist/server/sse.js.map +0 -1
  531. package/dist/server/uws-adapter.d.ts.map +0 -1
  532. package/dist/server/uws-adapter.js.map +0 -1
  533. package/dist/storage/index.d.ts +0 -15
  534. package/dist/storage/index.d.ts.map +0 -1
  535. package/dist/storage/index.js +0 -7
  536. package/dist/storage/index.js.map +0 -1
  537. package/dist/swagger/index.d.ts +0 -9
  538. package/dist/swagger/index.d.ts.map +0 -1
  539. package/dist/swagger/index.js +0 -165
  540. package/dist/swagger/index.js.map +0 -1
  541. package/dist/threads/pool.d.ts +0 -14
  542. package/dist/threads/pool.d.ts.map +0 -1
  543. package/dist/threads/pool.js +0 -93
  544. package/dist/threads/pool.js.map +0 -1
  545. package/dist/threads/worker-runner.d.ts +0 -2
  546. package/dist/threads/worker-runner.d.ts.map +0 -1
  547. package/dist/threads/worker-runner.js +0 -71
  548. package/dist/threads/worker-runner.js.map +0 -1
  549. package/dist/validator/validator.d.ts +0 -360
  550. package/dist/validator/validator.d.ts.map +0 -1
  551. package/dist/validator/validator.js +0 -931
  552. package/dist/validator/validator.js.map +0 -1
  553. package/dist/websocket/orchestrator.d.ts +0 -11
  554. package/dist/websocket/orchestrator.d.ts.map +0 -1
  555. package/dist/websocket/orchestrator.js +0 -238
  556. package/dist/websocket/orchestrator.js.map +0 -1
  557. package/dist/websocket/server.d.ts +0 -66
  558. package/dist/websocket/server.d.ts.map +0 -1
  559. package/dist/websocket/server.js +0 -158
  560. package/dist/websocket/server.js.map +0 -1
  561. package/dist/websocket/socket.d.ts +0 -119
  562. package/dist/websocket/socket.d.ts.map +0 -1
  563. package/dist/websocket/socket.js +0 -242
  564. package/dist/websocket/socket.js.map +0 -1
@@ -5,162 +5,289 @@ nextTitle: "Configuration"
5
5
 
6
6
  # Project Structure
7
7
 
8
- When you bootstrap a new ExisJS project using `@exisjs/create`, it generates a clean, opinionated folder structure designed for scalability and maintainability.
8
+ ExisJS is a minimal, opinionated core: file-system routing, dependency injection,
9
+ validation, sanitization, and a request pipeline. Everything else — databases,
10
+ auth, caching, queues, websockets — is an official `@exisjs/*` package you add
11
+ only when you need it. Nothing in this structure requires them.
9
12
 
10
- ExisJS enforces a strict `src/` directory convention. All application code **must** live inside the `src/` directory. The framework relies on File-System Routing and centralized configurations to keep your project lean and predictable.
13
+ ExisJS enforces a strict `src/` directory convention. All application code
14
+ **must** live inside `src/`.
11
15
 
12
16
  ---
13
17
 
14
18
  ## The Default Structure
15
19
 
16
- Here is a look at a standard ExisJS project structure:
17
-
18
20
  ```text
19
21
  my-backend/
20
22
  ├── .exis/ # Internal framework cache and build artifacts
21
23
  ├── src/
22
24
  │ ├── http/
23
- │ │ ├── server.ts # The main backend entry point
24
- │ │ ├── route.ts # Root API routes (e.g. `GET /api`)
25
- │ │ ├── gateway.ts # Root-level gateway (middleware, guards)
25
+ │ │ ├── server.ts # Application entry point
26
+ │ │ ├── route.ts # Root routes (e.g. GET /api)
27
+ │ │ ├── boundary.ts # Root boundary (config + request pipeline)
26
28
  │ │ ├── users/
27
- │ │ │ ├── route.ts # User endpoints (e.g. `GET /api/users`)
28
- │ │ │ ├── schema.ts # Validation schemas (tex)
29
- │ │ │ └── controller.ts # Business logic helpers
29
+ │ │ │ ├── route.ts # User endpoints
30
+ │ │ │ └── schema.ts # Validation schemas (tex) — mandatory alongside route.ts
30
31
  │ │ ├── posts/
31
- │ │ │ └── route.ts # Post endpoints (e.g. `GET /api/posts`)
32
+ │ │ │ ├── route.ts
33
+ │ │ │ ├── schema.ts
34
+ │ │ │ └── service.ts # Business logic / data access, DI-injectable
32
35
  │ │ └── admin/
33
- │ │ ├── gateway.ts # Admin gateway (e.g. role guards)
34
- │ │ ├── route.ts # Admin endpoints
36
+ │ │ ├── boundary.ts # Applies to /admin/* and everything nested
37
+ │ │ ├── route.ts
35
38
  │ │ └── posts/
36
- │ │ ├── route.ts # Nested admin posts
39
+ │ │ ├── route.ts
40
+ │ │ ├── schema.ts
37
41
  │ │ └── service.ts
38
- │ ├── jobs/
39
- │ │ ├── cleanup.ts # Background cron/queue jobs
40
- │ │ └── process-image.ts
41
- │ ├── models/ # Database models/schemas (optional)
42
- │ ├── services/ # Reusable business logic (optional)
43
- │ ├── dto/ # Data Transfer Objects (optional)
44
- │ └── env.ts # Type-safe environment variable schema
45
- ├── tests/ # Test files
46
- ├── .env # Local environment variables
47
- ├── exis.config.ts # The ExisJS server configuration file
42
+ │ ├── models/ # Free-form. Populated once you add a data package.
43
+ │ ├── services/ # Free-form. Shared business logic.
44
+ │ ├── dto/ # Free-form. Request/response types.
45
+ │ └── config/env.ts # Type-safe environment schema (tex)
46
+ ├── tests/
47
+ ├── .env
48
+ ├── exis.config.ts
48
49
  ├── package.json
49
50
  └── tsconfig.json
50
51
  ```
51
52
 
53
+ > `src/jobs/` is **not** part of the core structure. It only appears once you
54
+ > install `@exisjs/queue` — see that package's docs for its convention.
55
+
52
56
  ---
53
57
 
54
- ## Key Files & Directories
58
+ ## File Roles (identical meaning in both paradigms)
55
59
 
56
- ### 1. `exis.config.ts`
57
- This configures the global application infrastructure. Here, you define network ports, SSL certificates, global CORS policies, Helmet security, and register native framework Plugins (like GraphQL or Drizzle).
60
+ A file's name declares its role. Functional vs. class-based (OOP) only changes
61
+ _syntax_, never _responsibility_.
58
62
 
59
- [Read the full Configuration Guide](/docs/config)
63
+ | File | Role | Never contains |
64
+ | ------------- | ---------------------------------------------------------------------------------------------------- | -------------------------------- |
65
+ | `route.ts` | Binds a URL + method to a handler. | Business logic, validation logic |
66
+ | `schema.ts` | `tex` validation schemas, imported by `route.ts`. Mandatory for every `route.ts` that accepts input. | Handlers, routing |
67
+ | `service.ts` | Business logic and data access. DI-injectable. | Routing, response shaping |
68
+ | `boundary.ts` | Folder-scoped config + request pipeline for everything in this folder and below. | — |
60
69
 
61
- ### 2. `src/env.ts`
62
- ExisJS strongly encourages type-safe environment variables. By defining an `env.ts` file using the built-in validator (`tex.env()`), your application will crash at boot if a required environment variable (like `DATABASE_URL`) is missing — preventing silent runtime failures.
70
+ ---
63
71
 
64
- ```typescript filename="src/env.ts"
65
- import { tex } from 'exisjs/validator'
72
+ ## `src/http/**/route.ts`
73
+
74
+ Any `route.ts` (or `.js`) under `src/http/` maps to a URL from its folder path:
75
+
76
+ - `src/http/route.ts` → `/api`
77
+ - `src/http/users/route.ts` → `/api/users`
78
+ - `src/http/users/[id]/route.ts` → `/api/users/:id`
79
+ - `src/http/(internal)/debug/route.ts` → `/api/debug` (group folders are ignored)
80
+
81
+ ### Functional
82
+
83
+ ```typescript filename="src/http/users/route.ts"
84
+ import { controller, route } from "exisjs/router";
85
+ import { UserParamsSchema } from "./schema";
86
+ import { fetchUser } from "./service";
66
87
 
67
- export const env = tex.object({
68
- PORT: tex.number({ coerce: true, optional: true }),
69
- NODE_ENV: tex.enum(['development', 'production', 'test']),
70
- DATABASE_URL: tex.string()
71
- }).parse(process.env)
88
+ export default controller({
89
+ getUser: route.get("/users/:id", {
90
+ params: UserParamsSchema,
91
+ async handle({ params }) {
92
+ return fetchUser(params.id);
93
+ },
94
+ }),
95
+ });
72
96
  ```
73
97
 
74
- ### 3. `src/http/server.ts`
75
- This is your application's bootstrap file. Instead of manually invoking `app.listen()`, you export your server configuration. The ExisJS CLI automatically reads this file, connects your plugins, mounts the file-system router, and starts the server.
98
+ ### Class-based (OOP)
76
99
 
77
- ### Functional Server Setup
100
+ The decorated class **is** the route file — no separate controller file:
78
101
 
79
- ```typescript filename="src/http/server.ts"
80
- import { exis } from 'exisjs'
102
+ ```typescript filename="src/http/users/route.ts"
103
+ import { Controller, Get, Param } from "exisjs/decorators";
104
+ import { UserParamsSchema } from "./schema";
105
+ import { UserService } from "./service";
81
106
 
82
- export default exis({
83
- async onStart(app) {
84
- // Connect to database, provide global DI services, etc.
85
- },
86
- async onClose(app) {
87
- // Gracefully close connections
107
+ @Controller("/users")
108
+ export default class UserRoute {
109
+ constructor(private userService: UserService) {}
110
+
111
+ @Get("/:id", UserParamsSchema)
112
+ async getUser(@Param("id") id: string) {
113
+ return this.userService.fetchUser(id);
88
114
  }
89
- })
115
+ }
90
116
  ```
91
117
 
92
- ### Class-Based (OOP) Server Setup
118
+ > [!IMPORTANT]
119
+ > Choose **one paradigm** — Functional or OOP — for the entire project.
120
+ > Mixing them causes a fatal error at startup.
121
+
122
+ ---
123
+
124
+ ## `src/http/**/schema.ts`
93
125
 
94
- ```typescript filename="src/http/server.ts"
95
- import { Server } from 'exisjs/decorators'
96
- import type { App } from 'exisjs'
126
+ ```typescript filename="src/http/users/schema.ts"
127
+ import { tex } from "exisjs/validator";
97
128
 
98
- @Server()
99
- export default class RootServer {
100
- async onStart(app: App) {
101
- // Connect to database, provide global DI services, etc.
102
- }
103
- async onClose(app: App) {
104
- // Gracefully close connections
129
+ export const UserParamsSchema = tex.object({ id: tex.string() });
130
+ ```
131
+
132
+ `tex` is the only validation engine. Schemas here are also the source for
133
+ OpenAPI generation once `@exisjs/swagger` is installed.
134
+
135
+ ---
136
+
137
+ ## `src/http/**/service.ts`
138
+
139
+ Plain functions (functional) or an `@Injectable()` class (OOP) — the data/business
140
+ layer, identical concept in both paradigms:
141
+
142
+ ```typescript filename="src/http/users/service.ts"
143
+ // Functional
144
+ export async function fetchUser(id: string) {
145
+ // ...
146
+ }
147
+ ```
148
+
149
+ ```typescript filename="src/http/users/service.ts"
150
+ // OOP
151
+ import { Injectable } from "exisjs/decorators";
152
+
153
+ @Injectable()
154
+ export class UserService {
155
+ async fetchUser(id: string) {
156
+ // ...
105
157
  }
106
158
  }
107
159
  ```
108
160
 
109
- > [!IMPORTANT]
110
- > ExisJS is an opinionated framework. You must choose **one paradigm** — either Functional or Class-Based (OOP) — for your entire project. Mixing paradigms within the same project will result in a fatal error at startup.
161
+ ---
162
+
163
+ ## `src/http/**/boundary.ts`
164
+
165
+ A `boundary.ts` applies to every route in its folder and all subfolders. It has
166
+ two independent halves:
111
167
 
112
- ### 4. `src/http/**/route.ts`
113
- ExisJS uses **File-System Routing** out of the box. Any file named `route.ts` (or `route.js`) inside the `src/http/` directory is automatically mapped to a URL based on its folder path.
168
+ 1. **Config** — pure data, via `defineBoundary()` (functional) or `@Boundary()`
169
+ (OOP argument). CORS, headers, DI providers, excluded paths.
170
+ 2. **Pipeline** — real code, auto-detected by function signature. No imports,
171
+ no manual registration required.
114
172
 
115
- - `src/http/route.ts` maps to `/api`
116
- - `src/http/health/route.ts` maps to `/api/health`
117
- - `src/http/users/route.ts` maps to `/api/users`
118
- - `src/http/users/[id]/route.ts` maps to `/api/users/:id`
119
- - `src/http/users/settings/route.ts` maps to `/api/users/settings`
120
- - `src/http/(internal)/debug/route.ts` maps to `/api/debug` (group folders are ignored)
173
+ | Signature | Detected as | Runs |
174
+ | ---------------------------------------------------------------------------- | ------------ | ---------------------------------------------------- |
175
+ | `(req, res, next)` | A chain step | In file/declaration order, before the route |
176
+ | `(ctx, next)` — default export (functional) or a method named `handle` (OOP) | The wrapper | Around all chain steps and the nested route/boundary |
121
177
 
122
- ### 5. `src/http/**/gateway.ts`
123
- Gateways allow you to apply configurations to entire folders. If you place a `gateway.ts` file inside `src/http/admin/`, the Guards, Middlewares, and Providers defined in that Gateway will automatically apply to every single route inside `/admin/*`. Like servers, these can be built using `defineGateway({...})` or the `@Gateway()` decorator.
178
+ ### Functional
124
179
 
125
- ### 6. `src/jobs/`
126
- Background jobs and cron tasks live here. Each file exports a job definition with a handler and optional cron schedule. These are automatically discovered and registered by the framework at startup.
180
+ ```typescript filename="src/http/admin/boundary.ts"
181
+ import { defineBoundary } from "exisjs/router";
182
+ import type { Request, Response, Next, BoundaryContext } from "exisjs/router";
127
183
 
128
- ```typescript filename="src/jobs/cleanup.ts"
129
- import type { JobDefinition } from 'exisjs/queue'
184
+ export const config = defineBoundary({
185
+ cors: { origin: ["https://myapp.com"], credentials: true },
186
+ headers: { "X-Powered-By": "ExisJS" },
187
+ exclude: [{ path: "/health", method: "GET" }],
188
+ });
130
189
 
131
- export default {
132
- name: 'cleanup',
133
- cron: '* * * * *',
134
- async handler() {
135
- // Perform periodic cleanup
190
+ export function auth(req: Request, res: Response, next: Next) {
191
+ if (!req.headers["x-api-key"]) throw new UnauthorizedError("Missing API key");
192
+ next();
193
+ }
194
+
195
+ export default async function (ctx: BoundaryContext, next: Next) {
196
+ try {
197
+ return { success: true, data: await next() };
198
+ } catch (err) {
199
+ return { success: false, error: { message: (err as Error).message } };
200
+ }
201
+ }
202
+ ```
203
+
204
+ ### Class-based (OOP)
205
+
206
+ ```typescript filename="src/http/admin/boundary.ts"
207
+ import { Boundary } from "exisjs/decorators";
208
+ import type { Request, Response, Next, BoundaryContext } from "exisjs/router";
209
+
210
+ @Boundary({
211
+ cors: { origin: ["https://myapp.com"], credentials: true },
212
+ headers: { "X-Powered-By": "ExisJS" },
213
+ })
214
+ export default class AdminBoundary {
215
+ auth(req: Request, res: Response, next: Next) {
216
+ if (!req.headers["x-api-key"])
217
+ throw new UnauthorizedError("Missing API key");
218
+ next();
219
+ }
220
+
221
+ async handle(ctx: BoundaryContext, next: Next) {
222
+ try {
223
+ return { success: true, data: await next() };
224
+ } catch (err) {
225
+ return { success: false, error: { message: (err as Error).message } };
226
+ }
136
227
  }
137
- } satisfies JobDefinition
228
+ }
138
229
  ```
139
230
 
140
- ### 7. `src/http/**/schema.ts`
141
- Co-locate your validation schemas alongside your route files. Schemas defined using `tex` are automatically integrated with OpenAPI documentation.
231
+ A nested folder's `boundary.ts` always runs _inside_ its parent's `next()` —
232
+ pipeline depth mirrors folder depth automatically.
142
233
 
143
- ### 8. `src/http/**/controller.ts`
144
- Co-locate your business logic helpers alongside your route files. These are plain functions or classes that handle the core logic, keeping your `route.ts` files clean and focused on request/response mapping.
234
+ ---
235
+
236
+ ## `exis.config.ts`
145
237
 
146
- ### 9. `.exis/`
147
- This is an internal, hidden directory generated by the ExisJS CLI. It holds compiled router mappings and runtime cache to skip filesystem scanning in production. You should add `.exis/` to your `.gitignore`.
238
+ Global infrastructure: port, SSL, CORS defaults, security headers, and
239
+ official package registration.
148
240
 
149
- ### 10. Custom Directories (e.g., `src/services/`, `src/models/`, `src/dto/`)
150
- ExisJS only enforces structure inside `src/http/` (for routing) and `src/jobs/` (for background tasks). For the rest of your application logic, you are free to organize it however you see fit. Common patterns include:
241
+ ```typescript filename="exis.config.ts"
242
+ import { defineConfig } from "exisjs";
151
243
 
152
- - **`src/models/`** — Database schemas and ORM models
153
- - **`src/services/`** — Reusable business logic injected via DI
154
- - **`src/dto/`** — Data Transfer Objects for request/response typing
244
+ export default defineConfig({
245
+ port: 3000,
246
+ cors: { origin: "*" },
247
+ // plugins: [] — official packages (@exisjs/database, @exisjs/auth, etc.)
248
+ // are registered here once installed. None are required by default.
249
+ });
250
+ ```
155
251
 
156
252
  ---
157
253
 
158
- ## The ExisJS CLI
254
+ ## `src/env.ts`
159
255
 
160
- Your project is driven entirely by the `exis` CLI tool, which is typically mapped in your `package.json` scripts:
256
+ ```typescript filename="src/env.ts"
257
+ import { tex } from "exisjs/validator";
258
+
259
+ export const env = tex
260
+ .object({
261
+ PORT: tex.number({ coerce: true, optional: true }),
262
+ NODE_ENV: tex.enum(["development", "production", "test"]),
263
+ })
264
+ .parse(process.env);
265
+ ```
266
+
267
+ Boot fails immediately if a required variable is missing.
268
+
269
+ ---
270
+
271
+ ## `.exis/`
272
+
273
+ Internal build cache — compiled route manifest, used for O(1) boot in
274
+ production. Add to `.gitignore`.
275
+
276
+ ---
277
+
278
+ ## Custom Directories
279
+
280
+ Only `src/http/` (routing) and, if `@exisjs/queue` is installed, `src/jobs/`
281
+ are enforced. Everything else — `src/models/`, `src/services/`, `src/dto/` —
282
+ is free-form.
283
+
284
+ ---
285
+
286
+ ## The ExisJS CLI
161
287
 
162
- - `exis dev`: Starts the development server with Hot-Module Replacement (HMR).
163
- - `exis build`: Compiles your TypeScript code to JavaScript for production.
164
- - `exis start`: Starts the production server using the compiled output.
165
- - `exis routes`: Prints a formatted table of every compiled API endpoint and WebSocket in your application.
166
- - `exis generate <type>`: Scaffolds new routes, gateways, services, models, DTOs, and more.
288
+ - `exis dev` — dev server with HMR
289
+ - `exis build` — compile for production
290
+ - `exis start` — run compiled output
291
+ - `exis routes` — print every compiled endpoint
292
+ - `exis generate <type>` — scaffold a route, boundary, service, or schema
293
+ - `exis add <package>` — install and wire an official package (e.g. `exis add database`)
@@ -216,23 +216,6 @@ export default class BooksController {
216
216
  }
217
217
  ```
218
218
 
219
- ### Database Integration (Mongoose)
220
-
221
- Because the ExisJS Validator is native to the framework, it is tightly coupled with our database and documentation adapters. You can generate Mongoose schemas directly from your validation schemas using `.toMongoSchema()`!
222
-
223
- ```typescript filename="src/models/User.ts"
224
- import mongoose from 'mongoose'
225
- import { tex } from 'exisjs/validator'
226
-
227
- export const UserValidator = tex.object({
228
- email: tex.email(),
229
- password: tex.string({ min: 8 }),
230
- role: tex.enum(['admin', 'user'], { default: 'user' })
231
- })
232
-
233
- // Pass the ExisJS Validator directly into Mongoose!
234
- export const User = mongoose.model('User', new mongoose.Schema(UserValidator.toMongoSchema()))
235
- ```
236
219
 
237
220
  ## Error Handling
238
221