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