exisjs 0.6.0 → 0.7.0

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 (519) hide show
  1. package/dist/cli/commands/build.d.ts.map +1 -1
  2. package/dist/cli/commands/build.js +11 -9
  3. package/dist/cli/commands/build.js.map +1 -1
  4. package/dist/cli/commands/dev.d.ts.map +1 -1
  5. package/dist/cli/commands/dev.js +34 -36
  6. package/dist/cli/commands/dev.js.map +1 -1
  7. package/dist/cli/commands/exports.d.ts.map +1 -1
  8. package/dist/cli/commands/exports.js +5 -32
  9. package/dist/cli/commands/exports.js.map +1 -1
  10. package/dist/cli/commands/generate.d.ts +2 -13
  11. package/dist/cli/commands/generate.d.ts.map +1 -1
  12. package/dist/cli/commands/generate.js +27 -60
  13. package/dist/cli/commands/generate.js.map +1 -1
  14. package/dist/cli/commands/init.d.ts.map +1 -1
  15. package/dist/cli/commands/init.js +4 -4
  16. package/dist/cli/commands/init.js.map +1 -1
  17. package/dist/cli/commands/start.d.ts.map +1 -1
  18. package/dist/cli/commands/start.js +2 -6
  19. package/dist/cli/commands/start.js.map +1 -1
  20. package/dist/cli/index.js +11 -23
  21. package/dist/cli/index.js.map +1 -1
  22. package/dist/cli/routes.d.ts.map +1 -1
  23. package/dist/cli/routes.js +20 -8
  24. package/dist/cli/routes.js.map +1 -1
  25. package/dist/config/config.d.ts +2 -1
  26. package/dist/config/config.d.ts.map +1 -1
  27. package/dist/config/config.js +3 -2
  28. package/dist/config/config.js.map +1 -1
  29. package/dist/config/types.d.ts +7 -2
  30. package/dist/config/types.d.ts.map +1 -1
  31. package/dist/decorators/constants.d.ts +2 -2
  32. package/dist/decorators/constants.d.ts.map +1 -1
  33. package/dist/decorators/constants.js +2 -2
  34. package/dist/decorators/constants.js.map +1 -1
  35. package/dist/decorators/core.d.ts +4 -3
  36. package/dist/decorators/core.d.ts.map +1 -1
  37. package/dist/decorators/core.js +7 -4
  38. package/dist/decorators/core.js.map +1 -1
  39. package/dist/decorators/middleware.d.ts +0 -10
  40. package/dist/decorators/middleware.d.ts.map +1 -1
  41. package/dist/decorators/middleware.js +0 -25
  42. package/dist/decorators/middleware.js.map +1 -1
  43. package/dist/decorators/routing.d.ts +0 -2
  44. package/dist/decorators/routing.d.ts.map +1 -1
  45. package/dist/decorators/routing.js +1 -3
  46. package/dist/decorators/routing.js.map +1 -1
  47. package/dist/di/inject.d.ts +1 -2
  48. package/dist/di/inject.d.ts.map +1 -1
  49. package/dist/di/inject.js.map +1 -1
  50. package/dist/docs/ARCHITECTURE.md +46 -285
  51. package/dist/docs/BENCHMARKS.md +5 -5
  52. package/dist/docs/README.md +8 -11
  53. package/dist/docs/content/boundaries.mdx +151 -0
  54. package/dist/docs/content/cli/commands.mdx +66 -104
  55. package/dist/docs/content/cli/overview.mdx +37 -47
  56. package/dist/docs/content/cli/usage.mdx +29 -15
  57. package/dist/docs/content/decorators.mdx +107 -80
  58. package/dist/docs/content/installation.mdx +20 -1
  59. package/dist/docs/content/middleware.mdx +65 -291
  60. package/dist/docs/content/security.mdx +44 -246
  61. package/dist/docs/content/structure.mdx +227 -100
  62. package/dist/docs/content/validation.mdx +0 -17
  63. package/dist/docs/reference/decorators.mdx +24 -217
  64. package/dist/docs/reference/middleware.mdx +41 -217
  65. package/dist/docs/reference/validator.mdx +2 -5
  66. package/dist/error/errors.d.ts.map +1 -1
  67. package/dist/error/errors.js +16 -0
  68. package/dist/error/errors.js.map +1 -1
  69. package/dist/index.d.ts +1 -1
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +5 -2
  72. package/dist/index.js.map +1 -1
  73. package/dist/lib/start-repl.js +2 -4
  74. package/dist/lib/start-repl.js.map +1 -1
  75. package/dist/lib/start-server.js +12 -4
  76. package/dist/lib/start-server.js.map +1 -1
  77. package/dist/logger/index.d.ts +81 -0
  78. package/dist/logger/index.d.ts.map +1 -0
  79. package/dist/logger/index.js +142 -0
  80. package/dist/logger/index.js.map +1 -0
  81. package/dist/middleware/dedupe.d.ts +1 -1
  82. package/dist/middleware/dedupe.js +1 -1
  83. package/dist/middleware/middleware.d.ts +3 -5
  84. package/dist/middleware/middleware.d.ts.map +1 -1
  85. package/dist/middleware/middleware.js +2 -6
  86. package/dist/middleware/middleware.js.map +1 -1
  87. package/dist/router/{gateway.d.ts → boundary.d.ts} +21 -13
  88. package/dist/router/boundary.d.ts.map +1 -0
  89. package/dist/router/boundary.js +11 -0
  90. package/dist/router/boundary.js.map +1 -0
  91. package/dist/router/index.d.ts +3 -6
  92. package/dist/router/index.d.ts.map +1 -1
  93. package/dist/router/index.js +3 -7
  94. package/dist/router/index.js.map +1 -1
  95. package/dist/router/route-builder.d.ts +0 -28
  96. package/dist/router/route-builder.d.ts.map +1 -1
  97. package/dist/router/route-builder.js +0 -4
  98. package/dist/router/route-builder.js.map +1 -1
  99. package/dist/router/route-scanner.d.ts +1 -2
  100. package/dist/router/route-scanner.d.ts.map +1 -1
  101. package/dist/router/route-scanner.js +216 -193
  102. package/dist/router/route-scanner.js.map +1 -1
  103. package/dist/router/router.d.ts +4 -6
  104. package/dist/router/router.d.ts.map +1 -1
  105. package/dist/router/router.js +36 -72
  106. package/dist/router/router.js.map +1 -1
  107. package/dist/router/types.d.ts +2 -6
  108. package/dist/router/types.d.ts.map +1 -1
  109. package/dist/server/{bun-adapter.d.ts → adapters/bun-adapter.d.ts} +1 -1
  110. package/dist/server/adapters/bun-adapter.d.ts.map +1 -0
  111. package/dist/server/{bun-adapter.js → adapters/bun-adapter.js} +2 -24
  112. package/dist/server/adapters/bun-adapter.js.map +1 -0
  113. package/dist/server/{uws-adapter.d.ts → adapters/uws-adapter.d.ts} +1 -1
  114. package/dist/server/adapters/uws-adapter.d.ts.map +1 -0
  115. package/dist/server/{uws-adapter.js → adapters/uws-adapter.js} +1 -28
  116. package/dist/server/adapters/uws-adapter.js.map +1 -0
  117. package/dist/server/app.d.ts +9 -30
  118. package/dist/server/app.d.ts.map +1 -1
  119. package/dist/server/app.js +19 -134
  120. package/dist/server/app.js.map +1 -1
  121. package/dist/server/bootstrapper.d.ts +4 -15
  122. package/dist/server/bootstrapper.d.ts.map +1 -1
  123. package/dist/server/bootstrapper.js +31 -222
  124. package/dist/server/bootstrapper.js.map +1 -1
  125. package/dist/server/define.d.ts +2 -2
  126. package/dist/server/define.d.ts.map +1 -1
  127. package/dist/server/define.js +3 -3
  128. package/dist/server/define.js.map +1 -1
  129. package/dist/server/engines/bun-engine.d.ts +16 -0
  130. package/dist/server/engines/bun-engine.d.ts.map +1 -0
  131. package/dist/server/engines/bun-engine.js +41 -0
  132. package/dist/server/engines/bun-engine.js.map +1 -0
  133. package/dist/server/engines/engine.d.ts +16 -0
  134. package/dist/server/engines/engine.d.ts.map +1 -0
  135. package/dist/{queue/types.js → server/engines/engine.js} +1 -1
  136. package/dist/server/engines/engine.js.map +1 -0
  137. package/dist/server/engines/node-engine.d.ts +22 -0
  138. package/dist/server/engines/node-engine.d.ts.map +1 -0
  139. package/dist/server/engines/node-engine.js +130 -0
  140. package/dist/server/engines/node-engine.js.map +1 -0
  141. package/dist/server/engines/uws-engine.d.ts +16 -0
  142. package/dist/server/engines/uws-engine.d.ts.map +1 -0
  143. package/dist/server/engines/uws-engine.js +48 -0
  144. package/dist/server/engines/uws-engine.js.map +1 -0
  145. package/dist/server/request-handler.d.ts +0 -1
  146. package/dist/server/request-handler.d.ts.map +1 -1
  147. package/dist/server/request-handler.js +74 -48
  148. package/dist/server/request-handler.js.map +1 -1
  149. package/dist/server/request.d.ts +0 -8
  150. package/dist/server/request.d.ts.map +1 -1
  151. package/dist/server/request.js +0 -16
  152. package/dist/server/request.js.map +1 -1
  153. package/dist/utils/time.d.ts +6 -0
  154. package/dist/utils/time.d.ts.map +1 -0
  155. package/dist/utils/time.js +15 -0
  156. package/dist/utils/time.js.map +1 -0
  157. package/dist/validator/index.d.ts +1 -7
  158. package/dist/validator/index.d.ts.map +1 -1
  159. package/dist/validator/index.js +1 -5
  160. package/dist/validator/index.js.map +1 -1
  161. package/dist/validator/tex-types.d.ts +15 -2
  162. package/dist/validator/tex-types.d.ts.map +1 -1
  163. package/dist/validator/tex-types.js +8 -0
  164. package/dist/validator/tex-types.js.map +1 -1
  165. package/dist/validator/tex.d.ts.map +1 -1
  166. package/dist/validator/tex.js +21 -2
  167. package/dist/validator/tex.js.map +1 -1
  168. package/package.json +9 -151
  169. package/dist/adapters/aws-lambda.d.ts +0 -21
  170. package/dist/adapters/aws-lambda.d.ts.map +0 -1
  171. package/dist/adapters/aws-lambda.js +0 -125
  172. package/dist/adapters/aws-lambda.js.map +0 -1
  173. package/dist/adapters/bun.d.ts +0 -9
  174. package/dist/adapters/bun.d.ts.map +0 -1
  175. package/dist/adapters/bun.js +0 -23
  176. package/dist/adapters/bun.js.map +0 -1
  177. package/dist/adapters/cloudflare.d.ts +0 -10
  178. package/dist/adapters/cloudflare.d.ts.map +0 -1
  179. package/dist/adapters/cloudflare.js +0 -22
  180. package/dist/adapters/cloudflare.js.map +0 -1
  181. package/dist/adapters/deno.d.ts +0 -7
  182. package/dist/adapters/deno.d.ts.map +0 -1
  183. package/dist/adapters/deno.js +0 -21
  184. package/dist/adapters/deno.js.map +0 -1
  185. package/dist/adapters/fastly.d.ts +0 -6
  186. package/dist/adapters/fastly.d.ts.map +0 -1
  187. package/dist/adapters/fastly.js +0 -20
  188. package/dist/adapters/fastly.js.map +0 -1
  189. package/dist/adapters/fetch.d.ts +0 -30
  190. package/dist/adapters/fetch.d.ts.map +0 -1
  191. package/dist/adapters/fetch.js +0 -119
  192. package/dist/adapters/fetch.js.map +0 -1
  193. package/dist/adapters/index.d.ts +0 -9
  194. package/dist/adapters/index.d.ts.map +0 -1
  195. package/dist/adapters/index.js +0 -28
  196. package/dist/adapters/index.js.map +0 -1
  197. package/dist/adapters/netlify.d.ts +0 -8
  198. package/dist/adapters/netlify.d.ts.map +0 -1
  199. package/dist/adapters/netlify.js +0 -20
  200. package/dist/adapters/netlify.js.map +0 -1
  201. package/dist/adapters/vercel.d.ts +0 -17
  202. package/dist/adapters/vercel.d.ts.map +0 -1
  203. package/dist/adapters/vercel.js +0 -23
  204. package/dist/adapters/vercel.js.map +0 -1
  205. package/dist/auth/index.d.ts +0 -8
  206. package/dist/auth/index.d.ts.map +0 -1
  207. package/dist/auth/index.js +0 -49
  208. package/dist/auth/index.js.map +0 -1
  209. package/dist/auth/jwt.d.ts +0 -20
  210. package/dist/auth/jwt.d.ts.map +0 -1
  211. package/dist/auth/jwt.js +0 -59
  212. package/dist/auth/jwt.js.map +0 -1
  213. package/dist/auth/oauth/core.d.ts +0 -96
  214. package/dist/auth/oauth/core.d.ts.map +0 -1
  215. package/dist/auth/oauth/core.js +0 -203
  216. package/dist/auth/oauth/core.js.map +0 -1
  217. package/dist/auth/oauth/index.d.ts +0 -45
  218. package/dist/auth/oauth/index.d.ts.map +0 -1
  219. package/dist/auth/oauth/index.js +0 -64
  220. package/dist/auth/oauth/index.js.map +0 -1
  221. package/dist/auth/oauth/middleware.d.ts +0 -63
  222. package/dist/auth/oauth/middleware.d.ts.map +0 -1
  223. package/dist/auth/oauth/middleware.js +0 -164
  224. package/dist/auth/oauth/middleware.js.map +0 -1
  225. package/dist/auth/oauth/providers/custom.d.ts +0 -41
  226. package/dist/auth/oauth/providers/custom.d.ts.map +0 -1
  227. package/dist/auth/oauth/providers/custom.js +0 -204
  228. package/dist/auth/oauth/providers/custom.js.map +0 -1
  229. package/dist/auth/oauth/providers/discord.d.ts +0 -23
  230. package/dist/auth/oauth/providers/discord.d.ts.map +0 -1
  231. package/dist/auth/oauth/providers/discord.js +0 -130
  232. package/dist/auth/oauth/providers/discord.js.map +0 -1
  233. package/dist/auth/oauth/providers/facebook.d.ts +0 -28
  234. package/dist/auth/oauth/providers/facebook.d.ts.map +0 -1
  235. package/dist/auth/oauth/providers/facebook.js +0 -124
  236. package/dist/auth/oauth/providers/facebook.js.map +0 -1
  237. package/dist/auth/oauth/providers/github.d.ts +0 -25
  238. package/dist/auth/oauth/providers/github.d.ts.map +0 -1
  239. package/dist/auth/oauth/providers/github.js +0 -132
  240. package/dist/auth/oauth/providers/github.js.map +0 -1
  241. package/dist/auth/oauth/providers/google.d.ts +0 -23
  242. package/dist/auth/oauth/providers/google.d.ts.map +0 -1
  243. package/dist/auth/oauth/providers/google.js +0 -134
  244. package/dist/auth/oauth/providers/google.js.map +0 -1
  245. package/dist/auth/oauth/providers/microsoft.d.ts +0 -28
  246. package/dist/auth/oauth/providers/microsoft.d.ts.map +0 -1
  247. package/dist/auth/oauth/providers/microsoft.js +0 -136
  248. package/dist/auth/oauth/providers/microsoft.js.map +0 -1
  249. package/dist/auth/oauth/types.d.ts +0 -158
  250. package/dist/auth/oauth/types.d.ts.map +0 -1
  251. package/dist/auth/oauth/types.js +0 -4
  252. package/dist/auth/oauth/types.js.map +0 -1
  253. package/dist/auth/password.d.ts +0 -25
  254. package/dist/auth/password.d.ts.map +0 -1
  255. package/dist/auth/password.js +0 -93
  256. package/dist/auth/password.js.map +0 -1
  257. package/dist/auth/rbac.d.ts +0 -10
  258. package/dist/auth/rbac.d.ts.map +0 -1
  259. package/dist/auth/rbac.js +0 -34
  260. package/dist/auth/rbac.js.map +0 -1
  261. package/dist/auth/session.d.ts +0 -26
  262. package/dist/auth/session.d.ts.map +0 -1
  263. package/dist/auth/session.js +0 -134
  264. package/dist/auth/session.js.map +0 -1
  265. package/dist/cache/index.d.ts +0 -4
  266. package/dist/cache/index.d.ts.map +0 -1
  267. package/dist/cache/index.js +0 -25
  268. package/dist/cache/index.js.map +0 -1
  269. package/dist/cache/store.d.ts +0 -58
  270. package/dist/cache/store.d.ts.map +0 -1
  271. package/dist/cache/store.js +0 -298
  272. package/dist/cache/store.js.map +0 -1
  273. package/dist/cron/parser.d.ts +0 -2
  274. package/dist/cron/parser.d.ts.map +0 -1
  275. package/dist/cron/parser.js +0 -52
  276. package/dist/cron/parser.js.map +0 -1
  277. package/dist/cron/scheduler.d.ts +0 -23
  278. package/dist/cron/scheduler.d.ts.map +0 -1
  279. package/dist/cron/scheduler.js +0 -114
  280. package/dist/cron/scheduler.js.map +0 -1
  281. package/dist/database/adapters/mongodb.d.ts +0 -58
  282. package/dist/database/adapters/mongodb.d.ts.map +0 -1
  283. package/dist/database/adapters/mongodb.js +0 -264
  284. package/dist/database/adapters/mongodb.js.map +0 -1
  285. package/dist/database/adapters/mysql.d.ts +0 -27
  286. package/dist/database/adapters/mysql.d.ts.map +0 -1
  287. package/dist/database/adapters/mysql.js +0 -188
  288. package/dist/database/adapters/mysql.js.map +0 -1
  289. package/dist/database/adapters/postgres.d.ts +0 -28
  290. package/dist/database/adapters/postgres.d.ts.map +0 -1
  291. package/dist/database/adapters/postgres.js +0 -174
  292. package/dist/database/adapters/postgres.js.map +0 -1
  293. package/dist/database/adapters/sqlite.d.ts +0 -27
  294. package/dist/database/adapters/sqlite.d.ts.map +0 -1
  295. package/dist/database/adapters/sqlite.js +0 -149
  296. package/dist/database/adapters/sqlite.js.map +0 -1
  297. package/dist/database/index.d.ts +0 -42
  298. package/dist/database/index.d.ts.map +0 -1
  299. package/dist/database/index.js +0 -58
  300. package/dist/database/index.js.map +0 -1
  301. package/dist/database/manager.d.ts +0 -141
  302. package/dist/database/manager.d.ts.map +0 -1
  303. package/dist/database/manager.js +0 -337
  304. package/dist/database/manager.js.map +0 -1
  305. package/dist/database/migration.d.ts +0 -57
  306. package/dist/database/migration.d.ts.map +0 -1
  307. package/dist/database/migration.js +0 -329
  308. package/dist/database/migration.js.map +0 -1
  309. package/dist/database/query-builder.d.ts +0 -95
  310. package/dist/database/query-builder.d.ts.map +0 -1
  311. package/dist/database/query-builder.js +0 -404
  312. package/dist/database/query-builder.js.map +0 -1
  313. package/dist/database/sql/index.d.ts +0 -18
  314. package/dist/database/sql/index.d.ts.map +0 -1
  315. package/dist/database/sql/index.js +0 -74
  316. package/dist/database/sql/index.js.map +0 -1
  317. package/dist/database/sql/schema.d.ts +0 -38
  318. package/dist/database/sql/schema.d.ts.map +0 -1
  319. package/dist/database/sql/schema.js +0 -80
  320. package/dist/database/sql/schema.js.map +0 -1
  321. package/dist/database/synchronizer.d.ts +0 -12
  322. package/dist/database/synchronizer.d.ts.map +0 -1
  323. package/dist/database/synchronizer.js +0 -82
  324. package/dist/database/synchronizer.js.map +0 -1
  325. package/dist/database/types.d.ts +0 -184
  326. package/dist/database/types.d.ts.map +0 -1
  327. package/dist/database/types.js +0 -4
  328. package/dist/database/types.js.map +0 -1
  329. package/dist/dataloader/dataloader.d.ts +0 -23
  330. package/dist/dataloader/dataloader.d.ts.map +0 -1
  331. package/dist/dataloader/dataloader.js +0 -98
  332. package/dist/dataloader/dataloader.js.map +0 -1
  333. package/dist/dataloader/index.d.ts +0 -3
  334. package/dist/dataloader/index.d.ts.map +0 -1
  335. package/dist/dataloader/index.js +0 -19
  336. package/dist/dataloader/index.js.map +0 -1
  337. package/dist/dataloader/registry.d.ts +0 -17
  338. package/dist/dataloader/registry.d.ts.map +0 -1
  339. package/dist/dataloader/registry.js +0 -47
  340. package/dist/dataloader/registry.js.map +0 -1
  341. package/dist/dev/dep-graph.d.ts +0 -2
  342. package/dist/dev/dep-graph.d.ts.map +0 -1
  343. package/dist/dev/dep-graph.js +0 -111
  344. package/dist/dev/dep-graph.js.map +0 -1
  345. package/dist/dev/hot-reload.d.ts +0 -30
  346. package/dist/dev/hot-reload.d.ts.map +0 -1
  347. package/dist/dev/hot-reload.js +0 -262
  348. package/dist/dev/hot-reload.js.map +0 -1
  349. package/dist/docs/content/adapters.mdx +0 -199
  350. package/dist/docs/content/cache.mdx +0 -239
  351. package/dist/docs/content/circuit-breaker.mdx +0 -130
  352. package/dist/docs/content/cron.mdx +0 -109
  353. package/dist/docs/content/database.mdx +0 -278
  354. package/dist/docs/content/gateways.mdx +0 -376
  355. package/dist/docs/content/oauth.mdx +0 -179
  356. package/dist/docs/content/queues.mdx +0 -177
  357. package/dist/docs/content/rpc.mdx +0 -146
  358. package/dist/docs/content/sse.mdx +0 -159
  359. package/dist/docs/content/websockets.mdx +0 -289
  360. package/dist/docs/integrations/README.md +0 -23
  361. package/dist/docs/integrations/jwt.mdx +0 -151
  362. package/dist/docs/integrations/mongo.mdx +0 -183
  363. package/dist/docs/integrations/observability.mdx +0 -125
  364. package/dist/docs/integrations/openai.mdx +0 -108
  365. package/dist/docs/integrations/postgres.mdx +0 -190
  366. package/dist/docs/integrations/posthog.mdx +0 -122
  367. package/dist/docs/integrations/redis.mdx +0 -141
  368. package/dist/docs/integrations/resend.mdx +0 -117
  369. package/dist/docs/integrations/s3.mdx +0 -122
  370. package/dist/docs/integrations/swagger.mdx +0 -113
  371. package/dist/docs/reference/adapters.mdx +0 -130
  372. package/dist/docs/reference/auth.mdx +0 -183
  373. package/dist/docs/reference/cache.mdx +0 -132
  374. package/dist/docs/reference/circuit-breaker.mdx +0 -71
  375. package/dist/docs/reference/queue.mdx +0 -155
  376. package/dist/docs/reference/storage.mdx +0 -116
  377. package/dist/docs/reference/swagger.mdx +0 -132
  378. package/dist/integrations/drizzle.d.ts +0 -10
  379. package/dist/integrations/drizzle.d.ts.map +0 -1
  380. package/dist/integrations/drizzle.js +0 -34
  381. package/dist/integrations/drizzle.js.map +0 -1
  382. package/dist/integrations/jwt.d.ts +0 -12
  383. package/dist/integrations/jwt.d.ts.map +0 -1
  384. package/dist/integrations/jwt.js +0 -29
  385. package/dist/integrations/jwt.js.map +0 -1
  386. package/dist/integrations/mongodb.d.ts +0 -13
  387. package/dist/integrations/mongodb.d.ts.map +0 -1
  388. package/dist/integrations/mongodb.js +0 -48
  389. package/dist/integrations/mongodb.js.map +0 -1
  390. package/dist/integrations/mongoose.d.ts +0 -13
  391. package/dist/integrations/mongoose.d.ts.map +0 -1
  392. package/dist/integrations/mongoose.js +0 -84
  393. package/dist/integrations/mongoose.js.map +0 -1
  394. package/dist/integrations/openai.d.ts +0 -12
  395. package/dist/integrations/openai.d.ts.map +0 -1
  396. package/dist/integrations/openai.js +0 -47
  397. package/dist/integrations/openai.js.map +0 -1
  398. package/dist/integrations/postgres.d.ts +0 -13
  399. package/dist/integrations/postgres.d.ts.map +0 -1
  400. package/dist/integrations/postgres.js +0 -55
  401. package/dist/integrations/postgres.js.map +0 -1
  402. package/dist/integrations/posthog.d.ts +0 -13
  403. package/dist/integrations/posthog.d.ts.map +0 -1
  404. package/dist/integrations/posthog.js +0 -49
  405. package/dist/integrations/posthog.js.map +0 -1
  406. package/dist/integrations/prisma.d.ts +0 -10
  407. package/dist/integrations/prisma.d.ts.map +0 -1
  408. package/dist/integrations/prisma.js +0 -39
  409. package/dist/integrations/prisma.js.map +0 -1
  410. package/dist/integrations/redis.d.ts +0 -12
  411. package/dist/integrations/redis.d.ts.map +0 -1
  412. package/dist/integrations/redis.js +0 -48
  413. package/dist/integrations/redis.js.map +0 -1
  414. package/dist/integrations/resend.d.ts +0 -12
  415. package/dist/integrations/resend.d.ts.map +0 -1
  416. package/dist/integrations/resend.js +0 -47
  417. package/dist/integrations/resend.js.map +0 -1
  418. package/dist/integrations/s3.d.ts +0 -15
  419. package/dist/integrations/s3.d.ts.map +0 -1
  420. package/dist/integrations/s3.js +0 -60
  421. package/dist/integrations/s3.js.map +0 -1
  422. package/dist/integrations/supabase.d.ts +0 -13
  423. package/dist/integrations/supabase.d.ts.map +0 -1
  424. package/dist/integrations/supabase.js +0 -51
  425. package/dist/integrations/supabase.js.map +0 -1
  426. package/dist/middleware/cache.d.ts +0 -21
  427. package/dist/middleware/cache.d.ts.map +0 -1
  428. package/dist/middleware/cache.js +0 -156
  429. package/dist/middleware/cache.js.map +0 -1
  430. package/dist/observability/health.d.ts +0 -23
  431. package/dist/observability/health.d.ts.map +0 -1
  432. package/dist/observability/health.js +0 -49
  433. package/dist/observability/health.js.map +0 -1
  434. package/dist/observability/index.d.ts +0 -4
  435. package/dist/observability/index.d.ts.map +0 -1
  436. package/dist/observability/index.js +0 -10
  437. package/dist/observability/index.js.map +0 -1
  438. package/dist/observability/metrics.d.ts +0 -6
  439. package/dist/observability/metrics.d.ts.map +0 -1
  440. package/dist/observability/metrics.js +0 -60
  441. package/dist/observability/metrics.js.map +0 -1
  442. package/dist/observability/otel.d.ts +0 -27
  443. package/dist/observability/otel.d.ts.map +0 -1
  444. package/dist/observability/otel.js +0 -45
  445. package/dist/observability/otel.js.map +0 -1
  446. package/dist/observability/prometheus.d.ts +0 -30
  447. package/dist/observability/prometheus.d.ts.map +0 -1
  448. package/dist/observability/prometheus.js +0 -31
  449. package/dist/observability/prometheus.js.map +0 -1
  450. package/dist/queue/client.d.ts +0 -13
  451. package/dist/queue/client.d.ts.map +0 -1
  452. package/dist/queue/client.js +0 -83
  453. package/dist/queue/client.js.map +0 -1
  454. package/dist/queue/drivers/MemoryDriver.d.ts +0 -21
  455. package/dist/queue/drivers/MemoryDriver.d.ts.map +0 -1
  456. package/dist/queue/drivers/MemoryDriver.js +0 -176
  457. package/dist/queue/drivers/MemoryDriver.js.map +0 -1
  458. package/dist/queue/drivers/RedisDriver.d.ts +0 -19
  459. package/dist/queue/drivers/RedisDriver.d.ts.map +0 -1
  460. package/dist/queue/drivers/RedisDriver.js +0 -130
  461. package/dist/queue/drivers/RedisDriver.js.map +0 -1
  462. package/dist/queue/index.d.ts +0 -18
  463. package/dist/queue/index.d.ts.map +0 -1
  464. package/dist/queue/index.js +0 -37
  465. package/dist/queue/index.js.map +0 -1
  466. package/dist/queue/manager.d.ts +0 -18
  467. package/dist/queue/manager.d.ts.map +0 -1
  468. package/dist/queue/manager.js +0 -59
  469. package/dist/queue/manager.js.map +0 -1
  470. package/dist/queue/types.d.ts +0 -55
  471. package/dist/queue/types.d.ts.map +0 -1
  472. package/dist/queue/types.js.map +0 -1
  473. package/dist/queue/worker.d.ts +0 -18
  474. package/dist/queue/worker.d.ts.map +0 -1
  475. package/dist/queue/worker.js +0 -176
  476. package/dist/queue/worker.js.map +0 -1
  477. package/dist/router/gateway.d.ts.map +0 -1
  478. package/dist/router/gateway.js +0 -11
  479. package/dist/router/gateway.js.map +0 -1
  480. package/dist/server/bun-adapter.d.ts.map +0 -1
  481. package/dist/server/bun-adapter.js.map +0 -1
  482. package/dist/server/sse.d.ts +0 -16
  483. package/dist/server/sse.d.ts.map +0 -1
  484. package/dist/server/sse.js +0 -51
  485. package/dist/server/sse.js.map +0 -1
  486. package/dist/server/uws-adapter.d.ts.map +0 -1
  487. package/dist/server/uws-adapter.js.map +0 -1
  488. package/dist/storage/index.d.ts +0 -15
  489. package/dist/storage/index.d.ts.map +0 -1
  490. package/dist/storage/index.js +0 -7
  491. package/dist/storage/index.js.map +0 -1
  492. package/dist/swagger/index.d.ts +0 -9
  493. package/dist/swagger/index.d.ts.map +0 -1
  494. package/dist/swagger/index.js +0 -165
  495. package/dist/swagger/index.js.map +0 -1
  496. package/dist/threads/pool.d.ts +0 -14
  497. package/dist/threads/pool.d.ts.map +0 -1
  498. package/dist/threads/pool.js +0 -93
  499. package/dist/threads/pool.js.map +0 -1
  500. package/dist/threads/worker-runner.d.ts +0 -2
  501. package/dist/threads/worker-runner.d.ts.map +0 -1
  502. package/dist/threads/worker-runner.js +0 -71
  503. package/dist/threads/worker-runner.js.map +0 -1
  504. package/dist/validator/validator.d.ts +0 -360
  505. package/dist/validator/validator.d.ts.map +0 -1
  506. package/dist/validator/validator.js +0 -931
  507. package/dist/validator/validator.js.map +0 -1
  508. package/dist/websocket/orchestrator.d.ts +0 -11
  509. package/dist/websocket/orchestrator.d.ts.map +0 -1
  510. package/dist/websocket/orchestrator.js +0 -238
  511. package/dist/websocket/orchestrator.js.map +0 -1
  512. package/dist/websocket/server.d.ts +0 -66
  513. package/dist/websocket/server.d.ts.map +0 -1
  514. package/dist/websocket/server.js +0 -158
  515. package/dist/websocket/server.js.map +0 -1
  516. package/dist/websocket/socket.d.ts +0 -119
  517. package/dist/websocket/socket.d.ts.map +0 -1
  518. package/dist/websocket/socket.js +0 -242
  519. 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