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,125 +0,0 @@
1
- ---
2
- nextUrl: "/docs/integrations/drizzle"
3
- nextTitle: "Drizzle ORM"
4
- ---
5
-
6
- # Observability (Health, Metrics, Tracing)
7
-
8
- ExisJS includes Observability features out of the box.
9
-
10
- Instead of locking you into a specific vendor, ExisJS uses a "Bring Your Own Adapter" architecture. We provide middlewares for Health Checks, Metrics (Prometheus/StatsD), and Tracing (OpenTelemetry) that integrate with your vendor SDKs.
11
-
12
- ---
13
-
14
- ## 1. Advanced Health Checks
15
-
16
- ExisJS includes a `healthCheck` middleware that exposes a `/health` endpoint for Kubernetes liveness/readiness probes or load balancers.
17
-
18
- It supports parallel asynchronous dependency checks with built-in timeouts.
19
-
20
- ```typescript filename="src/http/server.ts"
21
- import { exis } from 'exisjs'
22
- import { healthCheck } from 'exisjs/observability'
23
- import { db } from 'exisjs/postgres'
24
- import { redis } from 'exisjs/redis'
25
-
26
- export default exis({
27
- middlewares: [
28
- healthCheck({
29
- path: '/healthz', // Defaults to '/health'
30
- checks: [
31
- {
32
- name: 'postgres',
33
- timeoutMs: 3000,
34
- check: async () => await db`SELECT 1`
35
- },
36
- {
37
- name: 'redis',
38
- timeoutMs: 2000,
39
- check: async () => await redis.ping()
40
- }
41
- ]
42
- })
43
- ]
44
- })
45
- ```
46
-
47
- When you ping `GET /healthz`, ExisJS will run all checks in parallel.
48
- - If all checks pass, it returns HTTP `200 OK` with `{ status: "pass", dependencies: { postgres: { status: "up" }, ... } }`.
49
- - If any check times out or fails, it returns HTTP `503 Service Unavailable` with `{ status: "fail", ... }`.
50
-
51
- ---
52
-
53
- ## 2. Metrics (Prometheus / StatsD)
54
-
55
- Tracking HTTP request durations is a common requirement.
56
-
57
- ExisJS exposes a `metrics()` middleware adapter. It handles timing calculations and path normalization (e.g., aggregating `/users/1` and `/users/2` into `/users/:id` to prevent Prometheus cardinality explosions).
58
-
59
- ```typescript filename="src/http/server.ts"
60
- import { exis } from 'exisjs'
61
- import { metrics } from 'exisjs/observability'
62
- import promClient from 'prom-client'
63
-
64
- // 1. Setup your external Prometheus registry
65
- const httpRequestDurationMicroseconds = new promClient.Histogram({
66
- name: 'http_request_duration_ms',
67
- help: 'Duration of HTTP requests in ms',
68
- labelNames: ['method', 'route', 'code'],
69
- })
70
-
71
- export default exis({
72
- middlewares: [
73
- // 2. Plug it directly into the ExisJS adapter
74
- metrics({
75
- onRequestEnd: ({ method, path, statusCode, durationMs }) => {
76
- httpRequestDurationMicroseconds
77
- .labels(method, path, String(statusCode))
78
- .observe(durationMs)
79
- }
80
- })
81
- ]
82
- })
83
- ```
84
-
85
- ---
86
-
87
- ## 3. Distributed Tracing (OpenTelemetry)
88
-
89
- Distributed tracing allows you to follow a single request across multiple microservices.
90
-
91
- ExisJS provides a `tracing()` adapter designed for OpenTelemetry. It creates spans for every incoming request, injects HTTP statuses, and scrubs sensitive headers (like `authorization`, `cookie`, `session`) before they are sent to your observability platform.
92
-
93
- ```typescript filename="src/http/server.ts"
94
- import { exis } from 'exisjs'
95
- import { tracing } from 'exisjs/observability'
96
- import { trace } from '@opentelemetry/api'
97
-
98
- // Grab your global OpenTelemetry tracer
99
- const otelTracer = trace.getTracer('exis-app')
100
-
101
- export default exis({
102
- middlewares: [
103
- tracing({
104
- // ExisJS calls this hook automatically for every incoming request
105
- startActiveSpan: (name, metadata, callback) => {
106
- otelTracer.startActiveSpan(name, (span) => {
107
-
108
- // ExisJS automatically provides safe, scrubbed metadata
109
- span.setAttribute('http.method', metadata.method)
110
- span.setAttribute('http.route', metadata.path)
111
-
112
- for (const [key, val] of Object.entries(metadata.headers)) {
113
- span.setAttribute(`http.header.${key}`, String(val))
114
- }
115
-
116
- // Pass the span back to ExisJS so it can automatically end it and attach status codes
117
- callback(span)
118
- })
119
- }
120
- })
121
- ]
122
- })
123
- ```
124
-
125
- With this middleware, your application is instrumented with OpenTelemetry spans.
@@ -1,108 +0,0 @@
1
- ---
2
- nextUrl: "/docs/integrations/posthog"
3
- nextTitle: "PostHog"
4
- ---
5
-
6
- # OpenAI Integration
7
-
8
- ExisJS provides an integration for OpenAI to harness the power of LLMs.
9
-
10
- Following our framework philosophy, the `openai` SDK is an optional peer dependency. It remains uninstalled until you explicitly need it, ensuring your core application stays lightweight.
11
-
12
- ---
13
-
14
- ## Environment Variables
15
-
16
- The OpenAI plugin securely reads your API key directly from your `.env` file.
17
-
18
- Before using the plugin, ensure you have your API key set:
19
-
20
- ```bash filename=".env"
21
- OPENAI_API_KEY="sk-proj-123456789"
22
- ```
23
-
24
- ---
25
-
26
- ## Installation
27
-
28
- ExisJS wraps the official `openai` Node.js SDK.
29
-
30
- ```bash
31
- npm install openai
32
- ```
33
-
34
- ---
35
-
36
- ## Usage
37
-
38
- Simply import the `openai` proxy from `exisjs/openai`. ExisJS will boot and cache the client connection the first time you generate a completion.
39
-
40
- #### Functional Paradigm
41
-
42
- ```typescript filename="src/http/ai/route.ts"
43
- import { controller, route } from 'exisjs/router'
44
- import { openai } from 'exisjs/openai'
45
-
46
- export default controller({
47
- generateJoke: route.post('/joke', {
48
- async handle(req) {
49
- // The openai client lazy-loads here
50
- const completion = await openai.chat.completions.create({
51
- messages: [{ role: 'user', content: 'Tell me a programming joke.' }],
52
- model: 'gpt-4o-mini',
53
- })
54
-
55
- return {
56
- success: true,
57
- joke: completion.choices[0].message.content
58
- }
59
- }
60
- })
61
- })
62
- ```
63
-
64
- #### Class-Based (OOP) Paradigm
65
-
66
- ```typescript filename="src/http/ai/route.ts"
67
- import { Controller, Post } from 'exisjs/decorators'
68
- import { openai } from 'exisjs/openai'
69
-
70
- @Controller('/ai')
71
- export default class AIController {
72
-
73
- @Post('/joke')
74
- async generateJoke() {
75
- // The openai client automatically lazy-loads here!
76
- const completion = await openai.chat.completions.create({
77
- messages: [{ role: 'user', content: 'Tell me a programming joke.' }],
78
- model: 'gpt-4o-mini',
79
- })
80
-
81
- return {
82
- success: true,
83
- joke: completion.choices[0].message.content
84
- }
85
- }
86
- }
87
- ```
88
-
89
- ---
90
-
91
- ## Customizing Connection Options
92
-
93
- If you need to pass custom options to the OpenAI Client (e.g., overriding the `baseURL` to use an OpenAI-compatible open-source model via Ollama or vLLM), call `configureOpenAI(options)` inside your `server.ts` `onStart` hook.
94
-
95
- ```typescript filename="src/http/server.ts"
96
- import { exis } from 'exisjs'
97
- import { configureOpenAI } from 'exisjs/openai'
98
-
99
- export default exis({
100
- async onStart() {
101
- // Override the baseURL to point to a local Ollama instance
102
- configureOpenAI({
103
- baseURL: 'http://localhost:11434/v1',
104
- apiKey: 'ollama' // Local LLMs often just need a dummy key
105
- })
106
- }
107
- })
108
- ```
@@ -1,190 +0,0 @@
1
- ---
2
- nextUrl: "/docs/integrations/mongo"
3
- nextTitle: "Database (NoSQL)"
4
- ---
5
-
6
- # Database (SQL)
7
-
8
- ExisJS provides native integrations for SQL databases and ORMs in the Node.js ecosystem. Instead of writing boilerplate connection logic, ExisJS manages your connection pools using the `DATABASE_URL` environment variable.
9
-
10
- Because these plugins manage their own state, you do **NOT** need to register them in your `server.ts` file. They lazily initialize their connection pools when you first query them.
11
-
12
- The framework provides first-class plugins for **Drizzle ORM**, **Prisma**, and raw **PostgreSQL** (`postgres.js`).
13
-
14
- ---
15
-
16
- ## Environment Variables
17
-
18
- All SQL plugins securely read your connection string from your `.env` file.
19
- Before using any of the plugins below, ensure you have your Postgres connection string set:
20
-
21
- ```bash filename=".env"
22
- # Your PostgreSQL connection string
23
- DATABASE_URL="postgres://user:password@localhost:5432/my_database"
24
- ```
25
-
26
- ---
27
-
28
- ## 1. Drizzle ORM (Recommended)
29
-
30
- [Drizzle ORM](https://orm.drizzle.team/) is the recommended database solution for ExisJS. It provides type safety and performance.
31
-
32
- ### Installation
33
-
34
- ```bash
35
- npm install drizzle-orm postgres
36
- npm install -D drizzle-kit
37
- ```
38
-
39
- ### Usage
40
-
41
- Simply define your schema and call the native `drizzle()` integration helper. ExisJS will initialize a `postgres.js` connection pool using your `DATABASE_URL` environment variable.
42
-
43
- ```typescript filename="src/db/index.ts"
44
- import { drizzle } from 'exisjs/drizzle'
45
- import { pgTable, serial, text, varchar } from 'drizzle-orm/pg-core'
46
-
47
- // 1. Define your schema
48
- export const users = pgTable('users', {
49
- id: serial('id').primaryKey(),
50
- fullName: text('full_name'),
51
- phone: varchar('phone', { length: 256 }),
52
- })
53
-
54
- const schema = { users }
55
-
56
- // 2. Initialize the client
57
- // ExisJS automatically reads process.env.DATABASE_URL
58
- export const db = drizzle(schema)
59
- ```
60
-
61
- Now you can use `db` in your routes:
62
-
63
- #### Functional Paradigm
64
-
65
- ```typescript filename="src/http/users/route.ts"
66
- import { controller, route } from 'exisjs/router'
67
- import { db, users } from '../../db'
68
-
69
- export default controller({
70
- listUsers: route.get('/', {
71
- async handle() {
72
- return await db.select().from(users)
73
- }
74
- })
75
- })
76
- ```
77
-
78
- #### Class-Based (OOP) Paradigm
79
-
80
- ```typescript filename="src/http/users/route.ts"
81
- import { Controller, Get } from 'exisjs/decorators'
82
- import { db, users } from '../../db'
83
-
84
- @Controller()
85
- export default class UsersController {
86
- @Get('/')
87
- async listUsers() {
88
- return await db.select().from(users)
89
- }
90
- }
91
- ```
92
-
93
- ---
94
-
95
- ## 2. Prisma ORM
96
-
97
- If you prefer a schema-first approach, ExisJS includes a wrapper for Prisma.
98
-
99
- ### Installation
100
-
101
- ```bash
102
- npm install @prisma/client
103
- npm install -D prisma
104
- ```
105
-
106
- Initialize your schema:
107
- ```bash
108
- npx prisma init
109
- ```
110
-
111
- ### Usage
112
-
113
- Use the native `prisma()` helper to instantiate a singleton `PrismaClient` that manages the connection.
114
-
115
- ```typescript filename="src/db/index.ts"
116
- import { prisma } from 'exisjs/prisma'
117
-
118
- // Singleton initialization
119
- export const db = prisma()
120
- ```
121
-
122
- ---
123
-
124
- ## 3. Raw PostgreSQL (`postgres.js`)
125
-
126
- If you don't want to use an ORM and prefer writing raw SQL, ExisJS provides an integration for the `postgres.js` driver.
127
-
128
- ### Installation
129
-
130
- ```bash
131
- npm install postgres
132
- ```
133
-
134
- ### Usage
135
-
136
- Import the tagged template literal `sql` from `exisjs/postgres`. The first time you use it, ExisJS will boot up a connection pool using `DATABASE_URL`.
137
-
138
- #### Functional Paradigm
139
-
140
- ```typescript filename="src/http/users/route.ts"
141
- import { controller, route } from 'exisjs/router'
142
- import { sql } from 'exisjs/postgres'
143
-
144
- export default controller({
145
- getUser: route.get('/:id', {
146
- async handle(req) {
147
- // Write raw SQL with native parameterization.
148
- const users = await sql`SELECT * FROM users WHERE id = ${req.params.id}`
149
- return users[0]
150
- }
151
- })
152
- })
153
- ```
154
-
155
- #### Class-Based (OOP) Paradigm
156
-
157
- ```typescript filename="src/http/users/route.ts"
158
- import { Controller, Get, Param } from 'exisjs/decorators'
159
- import { sql } from 'exisjs/postgres'
160
-
161
- @Controller()
162
- export default class UsersController {
163
- @Get('/:id')
164
- async getUser(@Param('id') id: string) {
165
- // Write raw SQL with native parameterization!
166
- const users = await sql`SELECT * FROM users WHERE id = ${id}`
167
- return users[0]
168
- }
169
- }
170
- ```
171
-
172
- ### Customizing Connection Options
173
-
174
- If you need to pass custom options to the Postgres connection pool (like SSL config or max pool sizes), call `configurePostgres(options)` before you run your first query (e.g. inside your `server.ts` `onStart` hook).
175
-
176
- ```typescript filename="src/http/server.ts"
177
- import { exis } from 'exisjs'
178
- import { configurePostgres } from 'exisjs/postgres'
179
-
180
- export default exis({
181
- async onStart() {
182
- // Initialize with custom connection limits
183
- configurePostgres({
184
- max: 20,
185
- idle_timeout: 30000,
186
- ssl: process.env.NODE_ENV === 'production' ? 'require' : false
187
- })
188
- }
189
- })
190
- ```
@@ -1,122 +0,0 @@
1
- ---
2
- nextUrl: "/docs/integrations/observability"
3
- nextTitle: "Observability"
4
- ---
5
-
6
- # PostHog Integration
7
-
8
- ExisJS provides an integration for PostHog, an open-source product analytics platform.
9
-
10
- This enables you to capture server-side events, identify users, and evaluate feature flags directly inside your route handlers.
11
-
12
- ---
13
-
14
- ## Environment Variables
15
-
16
- The PostHog plugin securely reads your project API key directly from your `.env` file.
17
-
18
- Before using the plugin, ensure you have your API key set. You can optionally define a custom host if you are self-hosting PostHog (it defaults to `https://app.posthog.com`).
19
-
20
- ```bash filename=".env"
21
- POSTHOG_API_KEY="phc_123456789"
22
- POSTHOG_HOST="https://eu.posthog.com" # Optional (For EU Cloud or Self-Hosted)
23
- ```
24
-
25
- ---
26
-
27
- ## Installation
28
-
29
- ExisJS wraps the official `posthog-node` SDK as an optional peer dependency.
30
-
31
- ```bash
32
- npm install posthog-node
33
- ```
34
-
35
- ---
36
-
37
- ## Usage
38
-
39
- Simply import the `posthog` proxy from `exisjs/posthog`. ExisJS will boot the client behind the scenes the first time you track an event.
40
-
41
- #### Functional Paradigm
42
-
43
- ```typescript filename="src/http/auth/route.ts"
44
- import { controller, route } from 'exisjs/router'
45
- import { posthog } from 'exisjs/posthog'
46
-
47
- export default controller({
48
- login: route.post('/login', {
49
- async handle(req) {
50
- const { email, userId } = req.body
51
-
52
- // Your auth logic here...
53
-
54
- // The posthog client lazy-loads here
55
- posthog.identify({
56
- distinctId: userId,
57
- properties: { email }
58
- })
59
-
60
- posthog.capture({
61
- distinctId: userId,
62
- event: 'user_logged_in'
63
- })
64
-
65
- return { success: true }
66
- }
67
- })
68
- })
69
- ```
70
-
71
- #### Class-Based (OOP) Paradigm
72
-
73
- ```typescript filename="src/http/auth/route.ts"
74
- import { Controller, Post, Body } from 'exisjs/decorators'
75
- import { posthog } from 'exisjs/posthog'
76
-
77
- @Controller('/auth')
78
- export default class AuthController {
79
-
80
- @Post('/login')
81
- async login(@Body() body: any) {
82
- const { email, userId } = body
83
-
84
- // Your auth logic here...
85
-
86
- // The posthog client lazy-loads here
87
- posthog.identify({
88
- distinctId: userId,
89
- properties: { email }
90
- })
91
-
92
- posthog.capture({
93
- distinctId: userId,
94
- event: 'user_logged_in'
95
- })
96
-
97
- return { success: true }
98
- }
99
- }
100
- ```
101
-
102
- ---
103
-
104
- ## Graceful Shutdown (Flushing)
105
-
106
- PostHog queues events in memory and sends them in batches for high performance.
107
-
108
- When your application shuts down, you must ensure all pending events are successfully flushed to PostHog before the Node.js process exits so you don't lose analytics data.
109
-
110
- Simply await `posthog.shutdown()` in your `onStop` hook.
111
-
112
- ```typescript filename="src/http/server.ts"
113
- import { exis } from 'exisjs'
114
- import { posthog } from 'exisjs/posthog'
115
-
116
- export default exis({
117
- async onStop() {
118
- // Ensures all pending events are flushed before the server exits
119
- await posthog.shutdown()
120
- }
121
- })
122
- ```
@@ -1,141 +0,0 @@
1
- ---
2
- nextUrl: "/docs/integrations/jwt"
3
- nextTitle: "JWT Auth"
4
- ---
5
-
6
- # Redis Integration
7
-
8
- ExisJS provides an integration for Redis via the `ioredis` package. You do **NOT** need to register Redis in your `server.ts` file. The connection pool is lazily initialized when you execute your first command.
9
-
10
- ---
11
-
12
- ## Environment Variables
13
-
14
- The Redis plugin securely reads your connection string from your `.env` file. It automatically looks for either `REDIS_URL` or `KV_URL` (compatible with Vercel KV).
15
-
16
- Before using the plugin, ensure you have your Redis URI set:
17
-
18
- ```bash filename=".env"
19
- # Your Redis connection string
20
- REDIS_URL="redis://default:password@localhost:6379"
21
- ```
22
-
23
- ---
24
-
25
- ## Installation
26
-
27
- ExisJS wraps the `ioredis` client.
28
-
29
- ```bash
30
- npm install ioredis
31
- ```
32
-
33
- ---
34
-
35
- ## Usage
36
-
37
- Import the `redis` proxy from `exisjs/redis`. ExisJS will connect to your Redis instance behind the scenes.
38
-
39
- #### Functional Paradigm
40
-
41
- ```typescript filename="src/http/cache/route.ts"
42
- import { controller, route } from 'exisjs/router'
43
- import { redis } from 'exisjs/redis'
44
-
45
- export default controller({
46
- getCache: route.get('/:key', {
47
- async handle(req) {
48
- const value = await redis.get(req.params.key)
49
- return { key: req.params.key, value }
50
- }
51
- }),
52
-
53
- setCache: route.post('/:key', {
54
- async handle(req) {
55
- // Set key with an expiration of 60 seconds
56
- await redis.set(req.params.key, JSON.stringify(req.body), 'EX', 60)
57
- return { success: true }
58
- }
59
- })
60
- })
61
- ```
62
-
63
- #### Class-Based (OOP) Paradigm
64
-
65
- ```typescript filename="src/http/cache/route.ts"
66
- import { Controller, Get, Post, Param, Body } from 'exisjs/decorators'
67
- import { redis } from 'exisjs/redis'
68
-
69
- @Controller('/cache')
70
- export default class CacheController {
71
- @Get('/:key')
72
- async getCache(@Param('key') key: string) {
73
- const value = await redis.get(key)
74
- return { key, value }
75
- }
76
-
77
- @Post('/:key')
78
- async setCache(@Param('key') key: string, @Body() body: any) {
79
- // Set key with an expiration of 60 seconds
80
- await redis.set(key, JSON.stringify(body), 'EX', 60)
81
- return { success: true }
82
- }
83
- }
84
- ```
85
-
86
- ---
87
-
88
- ## Redis as a Job Queue
89
-
90
- ExisJS's native distributed Job Queue can run on top of Redis. This is a common approach for production environments to process background jobs across multiple server instances.
91
-
92
- To enable the Redis queue driver, configure it either in `server.ts` or centrally in your `exis.config.ts` file:
93
-
94
- ### `exis.config.ts`
95
-
96
- ```typescript filename="exis.config.ts"
97
- import { defineConfig } from 'exisjs/config'
98
-
99
- export default defineConfig({
100
- queue: {
101
- driver: 'redis',
102
- // ExisJS will automatically use process.env.REDIS_URL.
103
- // If you need a custom URL just for the queue, you can specify it:
104
- // redisUrl: process.env.CUSTOM_QUEUE_REDIS_URL
105
- }
106
- })
107
- ```
108
-
109
- ### `src/http/server.ts`
110
-
111
- ```typescript filename="src/http/server.ts"
112
- import { exis } from 'exisjs'
113
-
114
- export default exis({
115
- queue: {
116
- driver: 'redis',
117
- }
118
- })
119
- ```
120
-
121
- ---
122
-
123
- ## Customizing Connection Options
124
-
125
- If you need to pass custom options to the Redis connection pool (like custom retry strategies, lazy connections, or TLS settings), call `configureRedis(options)` inside your `server.ts` `onStart` hook.
126
-
127
- ```typescript filename="src/http/server.ts"
128
- import { exis } from 'exisjs'
129
- import { configureRedis } from 'exisjs/redis'
130
-
131
- export default exis({
132
- async onStart() {
133
- // Initialize with custom connection options
134
- configureRedis({
135
- maxRetriesPerRequest: 3,
136
- connectTimeout: 10000,
137
- lazyConnect: true
138
- })
139
- }
140
- })
141
- ```