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
@@ -1,278 +0,0 @@
1
- ---
2
- title: "Database Layer"
3
- description: "ExisJS includes a built-in, efficient database layer with native support for PostgreSQL, MySQL, SQLite, and MongoDB, plus a powerful SQL-First auto-sync engine."
4
- ---
5
-
6
- # Database Layer
7
-
8
- Unlike other Node.js frameworks that rely entirely on third-party ORMs like Prisma or TypeORM, **ExisJS ships with a fully integrated, efficient Database Layer.**
9
-
10
- This provides a massive advantage in developer experience and reliability, as connections, query generation, schema synchronization, and migrations are orchestrated directly by the framework.
11
-
12
- <Info title="Functional vs OOP">
13
- ExisJS natively supports both a **Functional Paradigm** and a **Class-Based OOP Paradigm** (for dependency injection and decorators). The database layer is seamlessly accessible through both approaches.
14
- </Info>
15
-
16
- ## Setup and Connection
17
-
18
- #### Functional Paradigm
19
- ```typescript filename="src/http/server.ts"
20
- import { exis } from 'exisjs'
21
- import { createDatabase } from 'exisjs/database'
22
- import { userTable, leadCustomerTable } from '../database/schema'
23
-
24
- export default exis({
25
- async onStart(app) {
26
- const database = createDatabase({
27
- dialect: 'postgres',
28
- url: process.env.DATABASE_URL,
29
- autoSync: true // Enables automatic schema synchronization!
30
- })
31
-
32
- // Register schemas for Auto-Sync
33
- database.registerSchema([userTable, leadCustomerTable])
34
-
35
- // Connect on boot
36
- await database.connect()
37
- }
38
- })
39
- ```
40
-
41
- #### Class-Based (OOP) Paradigm
42
- ```typescript filename="src/http/server.ts"
43
- import { Server } from 'exisjs/decorators'
44
- import { createDatabase } from 'exisjs/database'
45
- import { userTable, leadCustomerTable } from '../database/schema'
46
-
47
- @Server()
48
- export default class RootServer {
49
- async onStart(app: App) {
50
- const database = createDatabase({
51
- dialect: 'postgres',
52
- url: process.env.DATABASE_URL,
53
- autoSync: true
54
- })
55
-
56
- database.registerSchema([userTable, leadCustomerTable])
57
- await database.connect()
58
- }
59
- }
60
- ```
61
-
62
- ## SQL-First Schema Definition
63
-
64
- ExisJS provides a strictly-typed, modern **SQL-First Schema API**. Instead of writing raw SQL migration files, you define your tables in TypeScript. When `autoSync` is enabled, ExisJS will read these definitions, diff them against your live PostgreSQL database, and automatically run `CREATE TABLE` and `ALTER TABLE` for you!
65
-
66
- ```typescript filename="src/database/schema.ts"
67
- import { table, uuid, text, jsonb, timestamptz, boolean } from 'exisjs/database/sql'
68
-
69
- export const userTable = table('user', {
70
- user_id: uuid('user_id').primaryKey().default('gen_random_uuid()'),
71
- name: text('name').notNull(),
72
- phone: text('phone').unique().notNull(),
73
- email: text('email').unique().notNull(),
74
- address: jsonb('address'),
75
- date_of_birth: timestamptz('date_of_birth'),
76
- role: text('role').notNull(),
77
- password_hash: text('password_hash').notNull(),
78
- created_at: timestamptz('created_at').default('NOW()')
79
- })
80
-
81
- export const leadCustomerTable = table('leadCustomer', {
82
- record_id: uuid('record_id').primaryKey().default('gen_random_uuid()'),
83
- name: text('name').notNull(),
84
- email: text('email'),
85
- is_customer: boolean('is_customer').default('false'),
86
- // Perfect, strict SQL Foreign Key References!
87
- assigned_to: uuid('assigned_to').references(() => userTable.user_id),
88
- })
89
- ```
90
-
91
- ## Querying
92
-
93
- ExisJS supports **two ways** to query your database. You can use the traditional string-based builder, or the new fully-typed SQL-First builder.
94
-
95
- ### Method A: Typed SQL-First Querying (Recommended)
96
- This method gives you 100% type safety and auto-complete for your columns.
97
-
98
- #### Functional Paradigm
99
- ```typescript filename="src/http/users/route.ts"
100
- import { controller, route } from 'exisjs/router'
101
- import { db } from 'exisjs/database'
102
- import { eq } from 'exisjs/database/sql'
103
- import { userTable } from '@/database/schema'
104
-
105
- export default controller({
106
- list: route.get('/', {
107
- async handle() {
108
- // Fully typed! Auto-complete knows userTable has name, email, etc.
109
- const users = await db
110
- .select(userTable.user_id.name, userTable.name.name, userTable.email.name)
111
- .from(userTable)
112
- .where(eq(userTable.role, 'admin'))
113
- .limit(10)
114
- .rows()
115
-
116
- return users
117
- }
118
- }),
119
-
120
- create: route.post('/', {
121
- async handle({ req }) {
122
- const { name, email, phone, password_hash } = req.body
123
-
124
- const result = await db
125
- .insert(userTable)
126
- .values({ name, email, phone, role: 'user', password_hash })
127
- .returning(userTable.user_id.name)
128
- .execute()
129
-
130
- return { id: result.rows[0].user_id }
131
- }
132
- })
133
- })
134
- ```
135
-
136
- #### Class-Based (OOP) Paradigm
137
- ```typescript filename="src/http/users/service.ts"
138
- import { Injectable } from 'exisjs/decorators'
139
- import { db } from 'exisjs/database'
140
- import { eq } from 'exisjs/database/sql'
141
- import { userTable } from '@/database/schema'
142
-
143
- @Injectable()
144
- export class UsersService {
145
- async getAdmins() {
146
- return await db
147
- .select(userTable.user_id.name, userTable.name.name, userTable.email.name)
148
- .from(userTable)
149
- .where(eq(userTable.role, 'admin'))
150
- .limit(10)
151
- .rows()
152
- }
153
-
154
- async createUser(data: any) {
155
- const result = await db
156
- .insert(userTable)
157
- .values({ ...data, role: 'user' })
158
- .returning(userTable.user_id.name)
159
- .execute()
160
-
161
- return { id: result.rows[0].user_id }
162
- }
163
- }
164
- ```
165
-
166
- ### Method B: String-Based Query Builder
167
- If you don't want to define schema files, you can still use the raw string builder.
168
-
169
- ```typescript
170
- // Query multiple rows
171
- const users = await db.table('users')
172
- .select('id', 'name', 'email')
173
- .where('role', '=', 'admin')
174
- .orderBy('created_at', 'desc')
175
- .limit(10)
176
- .rows()
177
- ```
178
-
179
- ## Transactions
180
-
181
- ExisJS makes it trivial to perform safe database transactions. If the callback throws an error, the transaction is automatically rolled back.
182
-
183
- ```typescript
184
- import { db } from 'exisjs/database'
185
-
186
- await db.transaction(async (tx) => {
187
- // Deduct from inventory
188
- await tx.execute(
189
- 'UPDATE inventory SET stock = stock - $1 WHERE id = $2',
190
- [1, itemId]
191
- )
192
-
193
- // Create order record
194
- await tx.execute(
195
- 'INSERT INTO orders (user_id, item_id) VALUES ($1, $2)',
196
- [userId, itemId]
197
- )
198
- })
199
- ```
200
-
201
- ## Manual Migrations (Optional)
202
-
203
- If you prefer to write raw SQL instead of using the Auto-Sync engine, ExisJS still includes a built-in migration tracker.
204
-
205
- ```typescript
206
- import { db } from 'exisjs/database'
207
-
208
- const migrator = db.getMigrator({ directory: './migrations' })
209
-
210
- // Apply all pending migrations
211
- await migrator.up()
212
- ```
213
-
214
- A migration file simply exports `up` and `down` methods. You write raw SQL inside them for ultimate control.
215
-
216
- ```typescript filename="migrations/001_create_users.ts"
217
- module.exports = {
218
- name: '001_create_users',
219
- async up(db) {
220
- await db.execute(`
221
- CREATE TABLE users (
222
- id SERIAL PRIMARY KEY,
223
- name VARCHAR(255) NOT NULL,
224
- email VARCHAR(255) UNIQUE NOT NULL
225
- )
226
- `)
227
- },
228
- async down(db) {
229
- await db.execute('DROP TABLE users')
230
- },
231
- }
232
- ```
233
-
234
- ## API Reference
235
-
236
- To maintain a clean namespace, ExisJS separates the core database manager from the SQL schema utilities.
237
-
238
- ### Core Database (`exisjs/database`)
239
- Imports related to connection management, raw queries, and migrations.
240
-
241
- - `db` - The global singleton database manager.
242
- - `createDatabase` - Factory to instantiate a new database connection.
243
- - `DatabaseManager` - The underlying class for `db`.
244
- - `Migrator` - The migration engine class.
245
- - `QueryBuilder` - The base query builder class.
246
-
247
- ### SQL-First Schema & Queries (`exisjs/database/sql`)
248
- Imports related to defining tables, column types, and writing fluent queries.
249
-
250
- **Table Builder:**
251
- - `table` - Define a new SQL-first table.
252
-
253
- **Column Types:**
254
- - `uuid`
255
- - `text`
256
- - `varchar`
257
- - `integer`
258
- - `serial`
259
- - `bigint`
260
- - `numeric`
261
- - `real`
262
- - `boolean`
263
- - `json`
264
- - `jsonb`
265
- - `timestamp`
266
- - `timestamptz`
267
- - `date`
268
-
269
- **Condition Operators (for `.where()`):**
270
- - `eq` (Equal: `=`)
271
- - `ne` (Not Equal: `!=`)
272
- - `gt` (Greater Than: `>`)
273
- - `gte` (Greater Than or Equal: `>=`)
274
- - `lt` (Less Than: `<`)
275
- - `lte` (Less Than or Equal: `<=`)
276
- - `isNull` (IS NULL)
277
- - `isNotNull` (IS NOT NULL)
278
- - `inArray` (IN)
@@ -1,376 +0,0 @@
1
- ---
2
- nextUrl: "/docs/validation"
3
- nextTitle: "Validation"
4
- ---
5
-
6
- # Gateways (Middleware & Modules)
7
-
8
- Gateways act as a configuration entry point for specific folders in your file-system routing architecture.
9
-
10
- Instead of writing programmatic middleware declarations like `app.use('/admin', requireAuth)`, you can place a `gateway.ts` file inside a folder to scope **Middleware**, **CORS**, and **Dependency Injection** to that specific domain.
11
-
12
- ## Cascading Middleware
13
-
14
- The most common use-case for a gateway is applying middleware arrays to a group of routes.
15
-
16
- ### Functional Paradigm
17
-
18
- ```typescript className="language-typescript" filename="src/http/admin/gateway.ts"
19
- import { defineGateway } from 'exisjs/router'
20
- import { requireAuth } from '../../middleware/auth'
21
- import { cors, helmet } from 'exisjs/middleware'
22
-
23
- export default defineGateway({
24
- // This middleware array runs before ANY route in /admin/*
25
- middleware: [
26
- helmet(),
27
- compress(),
28
- cache({ ttlMs: 60000 }),
29
- requireAuth
30
- ],
31
-
32
- // Enforce strict CORS for this folder
33
- cors: {
34
- origin: 'https://admin.yourdomain.com',
35
- methods: ['GET', 'POST', 'DELETE']
36
- },
37
-
38
- // Append custom default headers to all responses
39
- headers: {
40
- 'X-Admin-Api-Version': '2.0'
41
- }
42
- })
43
- ```
44
-
45
- ### Class-Based (OOP) Paradigm
46
-
47
- ```typescript className="language-typescript" filename="src/http/admin/gateway.ts"
48
- import { Gateway } from 'exisjs/decorators'
49
- import { requireAuth } from '../../middleware/auth'
50
- import { helmet } from 'exisjs/middleware'
51
-
52
- @Gateway({
53
- // This middleware array runs before ANY route in /admin/*
54
- middleware: [
55
- helmet(),
56
- compress(),
57
- cache({ ttlMs: 60000 }),
58
- requireAuth
59
- ],
60
-
61
- // Enforce strict CORS for this folder
62
- cors: {
63
- origin: 'https://admin.yourdomain.com',
64
- methods: ['GET', 'POST', 'DELETE']
65
- },
66
-
67
- // Append custom default headers to all responses
68
- headers: {
69
- 'X-Admin-Api-Version': '2.0'
70
- }
71
- })
72
- export default class AdminGateway {}
73
- ```
74
-
75
- When a request comes in for `/admin/users`, ExisJS processes the Gateway's middleware sequentially before it ever reaches your `route.ts` file.
76
-
77
- ## Folder-Scoped CORS
78
-
79
- Handling CORS across an API can require granular control. For instance, you might want your `/public` folder to accept requests from anywhere, while restricting your `/billing` folder to a strict frontend domain. ExisJS allows you to define the `cors` property in your Gateway, overriding the global configuration for that specific folder.
80
-
81
- ## File-Based Modules (Domain-Driven Design)
82
-
83
- In addition to serving as an interceptor for middleware, `gateway.ts` acts as a module boundary, enabling **Domain-Driven Design (DDD)** via the file system.
84
-
85
- ### Providers (Dependency Injection)
86
-
87
- If you have a database service unique to your `/users` domain, encapsulate it strictly inside the users gateway:
88
-
89
- ```typescript className="language-typescript" filename="src/http/users/gateway.ts"
90
- import { defineGateway } from 'exisjs/router'
91
- import { UsersRepository } from './repository'
92
-
93
- export default defineGateway({
94
- // Provide the UsersRepository directly to this folder's DI container!
95
- providers: [
96
- ['UsersRepository', { useClass: UsersRepository }]
97
- ]
98
- })
99
- ```
100
-
101
- When ExisJS boots, it automatically discovers `gateway.ts`, parses the `providers`, and hydrates them into the internal Dependency Injection container before executing the routes. Inside your route handler, you can inject them:
102
-
103
- #### Functional Paradigm
104
-
105
- ```typescript className="language-typescript" filename="src/http/users/route.ts"
106
- import { controller, route } from 'exisjs/router'
107
- import { inject } from 'exisjs/di'
108
- import type { UsersRepository } from './repository'
109
-
110
- export default controller({
111
- list: route.get('/', {
112
- async handle() {
113
- // Access the scoped dependency
114
- const usersRepo = inject<UsersRepository>('UsersRepository')
115
- return await usersRepo.findAll()
116
- }
117
- })
118
- })
119
- ```
120
-
121
- #### Class-Based (OOP) Paradigm
122
-
123
- ```typescript className="language-typescript" filename="src/http/users/route.ts"
124
- import { Controller, Get } from 'exisjs/decorators'
125
- import { inject } from 'exisjs/di'
126
- import type { UsersRepository } from './repository'
127
-
128
- @Controller()
129
- export default class UsersController {
130
- @Get('/')
131
- async list() {
132
- const usersRepo = inject<UsersRepository>('UsersRepository')
133
- return await usersRepo.findAll()
134
- }
135
- }
136
- ```
137
-
138
- ### Imports & Plugins
139
-
140
- Gateways allow you to bundle other modules and plugins into a domain.
141
-
142
- ### Functional Paradigm
143
-
144
- ```typescript className="language-typescript" filename="src/http/orders/gateway.ts"
145
- import { defineGateway } from 'exisjs/router'
146
- import AuthModule from '../auth/module'
147
- import { stripePlugin } from '../../plugins/stripe'
148
-
149
- export default defineGateway({
150
- // Pull in the Auth feature set
151
- imports: [AuthModule],
152
-
153
- // Isolate Stripe setup for the orders domain
154
- plugins: [stripePlugin({ apiKey: process.env.STRIPE_KEY })]
155
- })
156
- ```
157
-
158
- ### Class-Based (OOP) Paradigm
159
-
160
- ```typescript className="language-typescript" filename="src/http/orders/gateway.ts"
161
- import { Gateway } from 'exisjs/decorators'
162
- import AuthModule from '../auth/module'
163
- import { stripePlugin } from '../../plugins/stripe'
164
-
165
- @Gateway({
166
- // Pull in the Auth feature set
167
- imports: [AuthModule],
168
-
169
- // Isolate Stripe setup for the orders domain
170
- plugins: [stripePlugin({ apiKey: process.env.STRIPE_KEY })]
171
- })
172
- export default class OrdersGateway {}
173
- ```
174
-
175
- <Hint>
176
- - **Imports**: Automatically deduplicated. If multiple gateways import `AuthModule`, its internal singletons are only initialized once.
177
- - **Plugins**: Setup logic runs specifically for the scoped folder.
178
- </Hint>
179
-
180
- ## Gateway Inheritance (Cascading)
181
-
182
- Gateways inherently **cascade**. If you define a Gateway at the absolute root (`src/http/gateway.ts`), it applies globally.
183
-
184
- If you define another Gateway at `src/http/admin/gateway.ts`, requests to `/admin/dashboard` will sequentially pass through the Root Gateway, and *then* pass through the Admin Gateway!
185
-
186
- ```text className="language-text"
187
- src/
188
- └── http/
189
- ├── gateway.ts <-- Runs first (Global Rate Limits)
190
- └── admin/
191
- ├── gateway.ts <-- Runs second (JWT Validation)
192
- └── users/
193
- └── route.ts <-- Runs last (Only if both gateways succeed!)
194
- ```
195
-
196
- ## Extended Features
197
-
198
- Gateways provide features to manage cross-cutting concerns like Exception Filters or Guards for an entire folder.
199
-
200
- ### 1. Folder-Scoped Guards
201
-
202
- Apply Authorization Guards directly to a folder. If the guard returns `false`, the entire folder is protected.
203
-
204
- #### Functional Paradigm
205
-
206
- ```typescript className="language-typescript" filename="src/http/api/gateway.ts"
207
- import { defineGateway } from 'exisjs/router'
208
- import { RequireAdminRoleGuard } from '../../guards'
209
-
210
- export default defineGateway({
211
- // Protects the entire /api folder
212
- guards: [RequireAdminRoleGuard]
213
- })
214
- ```
215
-
216
- #### Class-Based (OOP) Paradigm
217
-
218
- ```typescript className="language-typescript" filename="src/http/api/gateway.ts"
219
- import { Gateway } from 'exisjs/decorators'
220
- import { RequireAdminRoleGuard } from '../../guards'
221
-
222
- @Gateway({
223
- // Protects the entire /api folder
224
- guards: [RequireAdminRoleGuard]
225
- })
226
- export default class ApiGateway {}
227
- ```
228
-
229
- ### 2. Folder-Scoped Exception Filters
230
-
231
- Catch exceptions for a specific domain. For example, you can return HTML error pages for `/views`, but standardized JSON errors for `/api`.
232
-
233
- #### Functional Paradigm
234
-
235
- ```typescript className="language-typescript" filename="src/http/api/gateway.ts"
236
- import { defineGateway } from 'exisjs/router'
237
- import { ApiVersion2ErrorFilter } from '../../filters'
238
-
239
- export default defineGateway({
240
- // Catches all exceptions thrown inside /api/*
241
- filters: [ApiVersion2ErrorFilter]
242
- })
243
- ```
244
-
245
- #### Class-Based (OOP) Paradigm
246
-
247
- ```typescript className="language-typescript" filename="src/http/api/gateway.ts"
248
- import { Gateway } from 'exisjs/decorators'
249
- import { ApiVersion2ErrorFilter } from '../../filters'
250
-
251
- @Gateway({
252
- // Catches all exceptions thrown inside /api/*
253
- filters: [ApiVersion2ErrorFilter]
254
- })
255
- export default class ApiGateway {}
256
- ```
257
-
258
- ### 3. Folder-Scoped Interceptors
259
-
260
- Transform or wrap all responses exiting a specific folder.
261
-
262
- #### Functional Paradigm
263
-
264
- ```typescript className="language-typescript" filename="src/http/api/gateway.ts"
265
- import { defineGateway } from 'exisjs/router'
266
- import { StandardResponseInterceptor } from '../../interceptors'
267
-
268
- export default defineGateway({
269
- // Wraps all responses from /api/* in a standard format
270
- interceptors: [StandardResponseInterceptor]
271
- })
272
- ```
273
-
274
- #### Class-Based (OOP) Paradigm
275
-
276
- ```typescript className="language-typescript" filename="src/http/api/gateway.ts"
277
- import { Gateway } from 'exisjs/decorators'
278
- import { StandardResponseInterceptor } from '../../interceptors'
279
-
280
- @Gateway({
281
- // Wraps all responses from /api/* in a standard format
282
- interceptors: [StandardResponseInterceptor]
283
- })
284
- export default class ApiGateway {}
285
- ```
286
-
287
- ### 4. Bypassing Gateways (Exclude)
288
-
289
- Bypass the Gateway's middleware, guards, and filters for specific sub-paths or methods without breaking your folder structure.
290
-
291
- #### Functional Paradigm
292
-
293
- ```typescript className="language-typescript" filename="src/http/api/gateway.ts"
294
- import { defineGateway } from 'exisjs/router'
295
-
296
- export default defineGateway({
297
- exclude: [
298
- '/api/public/status', // Exact Match
299
- '/api/webhooks/*', // Wildcard Match
300
- { path: '/api/users', methods: ['GET'] } // Method-specific bypass
301
- ]
302
- })
303
- ```
304
-
305
- #### Class-Based (OOP) Paradigm
306
-
307
- ```typescript className="language-typescript" filename="src/http/api/gateway.ts"
308
- import { Gateway } from 'exisjs/decorators'
309
-
310
- @Gateway({
311
- exclude: [
312
- '/api/public/status', // Exact Match
313
- '/api/webhooks/*', // Wildcard Match
314
- { path: '/api/users', methods: ['GET'] } // Method-specific bypass
315
- ]
316
- })
317
- export default class ApiGateway {}
318
- ```
319
-
320
- ### 5. Dynamic Request Timeouts
321
-
322
- Define dynamic, folder-scoped request timeouts. For example, give your `/reports` folder 60 seconds, but restrict `/api` to 5 seconds. You can evaluate the timeout dynamically per-request.
323
-
324
- #### Functional Paradigm
325
-
326
- ```typescript className="language-typescript" filename="src/http/reports/gateway.ts"
327
- import { defineGateway } from 'exisjs/router'
328
-
329
- export default defineGateway({
330
- // Dynamic request timeouts evaluated per-request
331
- timeout: (req) => req.headers['x-premium'] ? 30000 : 5000
332
- })
333
- ```
334
-
335
- #### Class-Based (OOP) Paradigm
336
-
337
- ```typescript className="language-typescript" filename="src/http/reports/gateway.ts"
338
- import { Gateway } from 'exisjs/decorators'
339
-
340
- @Gateway({
341
- // Dynamic request timeouts evaluated per-request
342
- timeout: (req) => req.headers['x-premium'] ? 30000 : 5000
343
- })
344
- export default class ReportsGateway {}
345
- ```
346
-
347
- ### 6. Cascading Metadata
348
-
349
- Define tags (like OpenAPI/Swagger tags or Role definitions) at the folder level that automatically cascade down to every route inside.
350
-
351
- #### Functional Paradigm
352
-
353
- ```typescript className="language-typescript" filename="src/http/admin/gateway.ts"
354
- import { defineGateway } from 'exisjs/router'
355
-
356
- export default defineGateway({
357
- // Automatically cascades OpenAPI tags to every route in the folder
358
- metadata: {
359
- openapi: { tags: ['Admin API'], security: ['bearerAuth'] }
360
- }
361
- })
362
- ```
363
-
364
- #### Class-Based (OOP) Paradigm
365
-
366
- ```typescript className="language-typescript" filename="src/http/admin/gateway.ts"
367
- import { Gateway } from 'exisjs/decorators'
368
-
369
- @Gateway({
370
- // Automatically cascades OpenAPI tags to every route in the folder
371
- metadata: {
372
- openapi: { tags: ['Admin API'], security: ['bearerAuth'] }
373
- }
374
- })
375
- export default class AdminGateway {}
376
- ```