exisjs 0.7.14 → 0.8.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 (204) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -1
  3. package/dist/cli/commands/doctor.d.ts.map +1 -1
  4. package/dist/cli/commands/doctor.js +4 -37
  5. package/dist/cli/commands/doctor.js.map +1 -1
  6. package/dist/config/config.d.ts.map +1 -1
  7. package/dist/config/config.js +10 -0
  8. package/dist/config/config.js.map +1 -1
  9. package/dist/config/types.d.ts +9 -1
  10. package/dist/config/types.d.ts.map +1 -1
  11. package/dist/database/lifecycle.d.ts +7 -0
  12. package/dist/database/lifecycle.d.ts.map +1 -1
  13. package/dist/database/lifecycle.js +30 -7
  14. package/dist/database/lifecycle.js.map +1 -1
  15. package/dist/decorators/caching.d.ts +2 -5
  16. package/dist/decorators/caching.d.ts.map +1 -1
  17. package/dist/decorators/caching.js +7 -61
  18. package/dist/decorators/caching.js.map +1 -1
  19. package/dist/decorators/core.d.ts.map +1 -1
  20. package/dist/decorators/core.js +5 -0
  21. package/dist/decorators/core.js.map +1 -1
  22. package/dist/decorators/cron.d.ts +1 -0
  23. package/dist/decorators/cron.d.ts.map +1 -1
  24. package/dist/decorators/cron.js +4 -1
  25. package/dist/decorators/cron.js.map +1 -1
  26. package/dist/di/container.d.ts +1 -0
  27. package/dist/di/container.d.ts.map +1 -1
  28. package/dist/di/container.js +19 -3
  29. package/dist/di/container.js.map +1 -1
  30. package/dist/docs/ARCHITECTURE.md +11 -24
  31. package/dist/docs/BENCHMARKS.md +59 -26
  32. package/dist/docs/README.md +1 -1
  33. package/dist/docs/content/boundaries.mdx +2 -0
  34. package/dist/docs/content/cli/commands.mdx +1 -2
  35. package/dist/docs/content/cli/overview.mdx +1 -1
  36. package/dist/docs/content/config.mdx +22 -9
  37. package/dist/docs/content/cron.mdx +2 -2
  38. package/dist/docs/content/decorators.mdx +2 -2
  39. package/dist/docs/content/errors.mdx +22 -6
  40. package/dist/docs/content/installation.mdx +13 -8
  41. package/dist/docs/content/introduction.mdx +12 -12
  42. package/dist/docs/content/middleware.mdx +1 -1
  43. package/dist/docs/content/providers.mdx +4 -4
  44. package/dist/docs/content/requests.mdx +12 -1
  45. package/dist/docs/content/responses.mdx +44 -3
  46. package/dist/docs/content/routing.mdx +24 -0
  47. package/dist/docs/content/structure.mdx +4 -1
  48. package/dist/docs/content/testing.mdx +2 -0
  49. package/dist/docs/content/validation.mdx +16 -2
  50. package/dist/docs/reference/README.md +1 -1
  51. package/dist/docs/reference/config.mdx +1 -1
  52. package/dist/docs/reference/decorators.mdx +2 -2
  53. package/dist/docs/reference/di.mdx +1 -1
  54. package/dist/docs/reference/middleware.mdx +7 -5
  55. package/dist/docs/reference/sanitize.mdx +4 -4
  56. package/dist/docs/reference/validator.mdx +1 -1
  57. package/dist/error/errors.d.ts.map +1 -1
  58. package/dist/error/errors.js +31 -8
  59. package/dist/error/errors.js.map +1 -1
  60. package/dist/lib/start-server.js +5 -1
  61. package/dist/lib/start-server.js.map +1 -1
  62. package/dist/middleware/compression.d.ts +0 -12
  63. package/dist/middleware/compression.d.ts.map +1 -1
  64. package/dist/middleware/compression.js +52 -41
  65. package/dist/middleware/compression.js.map +1 -1
  66. package/dist/middleware/idempotency.d.ts +11 -6
  67. package/dist/middleware/idempotency.d.ts.map +1 -1
  68. package/dist/middleware/idempotency.js +5 -35
  69. package/dist/middleware/idempotency.js.map +1 -1
  70. package/dist/middleware/ip-filter.d.ts.map +1 -1
  71. package/dist/middleware/ip-filter.js +0 -16
  72. package/dist/middleware/ip-filter.js.map +1 -1
  73. package/dist/middleware/middleware.d.ts +2 -1
  74. package/dist/middleware/middleware.d.ts.map +1 -1
  75. package/dist/middleware/middleware.js +92 -56
  76. package/dist/middleware/middleware.js.map +1 -1
  77. package/dist/middleware/rate-limit.d.ts.map +1 -1
  78. package/dist/middleware/rate-limit.js +19 -38
  79. package/dist/middleware/rate-limit.js.map +1 -1
  80. package/dist/middleware/security.d.ts.map +1 -1
  81. package/dist/middleware/security.js +3 -1
  82. package/dist/middleware/security.js.map +1 -1
  83. package/dist/middleware/upload.d.ts.map +1 -1
  84. package/dist/middleware/upload.js +15 -7
  85. package/dist/middleware/upload.js.map +1 -1
  86. package/dist/response/index.d.ts +23 -0
  87. package/dist/response/index.d.ts.map +1 -1
  88. package/dist/response/index.js +28 -1
  89. package/dist/response/index.js.map +1 -1
  90. package/dist/router/index.d.ts +1 -1
  91. package/dist/router/index.d.ts.map +1 -1
  92. package/dist/router/index.js.map +1 -1
  93. package/dist/router/radix.d.ts +3 -16
  94. package/dist/router/radix.d.ts.map +1 -1
  95. package/dist/router/radix.js +135 -211
  96. package/dist/router/radix.js.map +1 -1
  97. package/dist/router/route-builder.d.ts +28 -0
  98. package/dist/router/route-builder.d.ts.map +1 -1
  99. package/dist/router/route-builder.js.map +1 -1
  100. package/dist/router/route-scanner.d.ts +2 -1
  101. package/dist/router/route-scanner.d.ts.map +1 -1
  102. package/dist/router/route-scanner.js +37 -44
  103. package/dist/router/route-scanner.js.map +1 -1
  104. package/dist/router/router.d.ts.map +1 -1
  105. package/dist/router/router.js +153 -126
  106. package/dist/router/router.js.map +1 -1
  107. package/dist/router/scanner/boundary-loader.d.ts.map +1 -1
  108. package/dist/router/scanner/boundary-loader.js +7 -2
  109. package/dist/router/scanner/boundary-loader.js.map +1 -1
  110. package/dist/router/scanner/functional-compiler.d.ts.map +1 -1
  111. package/dist/router/scanner/functional-compiler.js +9 -1
  112. package/dist/router/scanner/functional-compiler.js.map +1 -1
  113. package/dist/sanitize/index.d.ts +2 -3
  114. package/dist/sanitize/index.d.ts.map +1 -1
  115. package/dist/sanitize/index.js +15 -20
  116. package/dist/sanitize/index.js.map +1 -1
  117. package/dist/server/adapters/bun-adapter.d.ts +2 -1
  118. package/dist/server/adapters/bun-adapter.d.ts.map +1 -1
  119. package/dist/server/adapters/bun-adapter.js +22 -2
  120. package/dist/server/adapters/bun-adapter.js.map +1 -1
  121. package/dist/server/app.d.ts +2 -2
  122. package/dist/server/app.d.ts.map +1 -1
  123. package/dist/server/app.js +14 -7
  124. package/dist/server/app.js.map +1 -1
  125. package/dist/server/bootstrapper.d.ts +2 -2
  126. package/dist/server/bootstrapper.d.ts.map +1 -1
  127. package/dist/server/bootstrapper.js +2 -2
  128. package/dist/server/bootstrapper.js.map +1 -1
  129. package/dist/server/download.d.ts +22 -0
  130. package/dist/server/download.d.ts.map +1 -0
  131. package/dist/server/download.js +18 -0
  132. package/dist/server/download.js.map +1 -0
  133. package/dist/server/helpers/body-parser.d.ts +1 -1
  134. package/dist/server/helpers/body-parser.d.ts.map +1 -1
  135. package/dist/server/helpers/body-parser.js +126 -48
  136. package/dist/server/helpers/body-parser.js.map +1 -1
  137. package/dist/server/helpers/cookie.d.ts +6 -0
  138. package/dist/server/helpers/cookie.d.ts.map +1 -1
  139. package/dist/server/helpers/cookie.js +35 -0
  140. package/dist/server/helpers/cookie.js.map +1 -1
  141. package/dist/server/helpers/etag.d.ts.map +1 -1
  142. package/dist/server/helpers/etag.js +7 -2
  143. package/dist/server/helpers/etag.js.map +1 -1
  144. package/dist/server/helpers/index.d.ts +2 -1
  145. package/dist/server/helpers/index.d.ts.map +1 -1
  146. package/dist/server/helpers/index.js +5 -1
  147. package/dist/server/helpers/index.js.map +1 -1
  148. package/dist/server/helpers/ip.d.ts +13 -0
  149. package/dist/server/helpers/ip.d.ts.map +1 -1
  150. package/dist/server/helpers/ip.js +65 -54
  151. package/dist/server/helpers/ip.js.map +1 -1
  152. package/dist/server/helpers/json.d.ts +3 -0
  153. package/dist/server/helpers/json.d.ts.map +1 -0
  154. package/dist/server/helpers/json.js +43 -0
  155. package/dist/server/helpers/json.js.map +1 -0
  156. package/dist/server/helpers/upload-name.d.ts +9 -0
  157. package/dist/server/helpers/upload-name.d.ts.map +1 -0
  158. package/dist/server/helpers/upload-name.js +39 -0
  159. package/dist/server/helpers/upload-name.js.map +1 -0
  160. package/dist/server/request-handler.d.ts +0 -7
  161. package/dist/server/request-handler.d.ts.map +1 -1
  162. package/dist/server/request-handler.js +19 -46
  163. package/dist/server/request-handler.js.map +1 -1
  164. package/dist/server/request.d.ts +3 -2
  165. package/dist/server/request.d.ts.map +1 -1
  166. package/dist/server/request.js +22 -16
  167. package/dist/server/request.js.map +1 -1
  168. package/dist/server/response.d.ts +19 -10
  169. package/dist/server/response.d.ts.map +1 -1
  170. package/dist/server/response.js +98 -72
  171. package/dist/server/response.js.map +1 -1
  172. package/dist/testing/index.d.ts.map +1 -1
  173. package/dist/testing/index.js +8 -1
  174. package/dist/testing/index.js.map +1 -1
  175. package/dist/testing/reporter.d.mts.map +1 -1
  176. package/dist/testing/reporter.mjs +18 -0
  177. package/dist/testing/reporter.mjs.map +1 -1
  178. package/dist/utils/ttl-cache.d.ts +11 -0
  179. package/dist/utils/ttl-cache.d.ts.map +1 -0
  180. package/dist/utils/ttl-cache.js +42 -0
  181. package/dist/utils/ttl-cache.js.map +1 -0
  182. package/dist/validator/builder.d.ts +2 -2
  183. package/dist/validator/builder.js +2 -2
  184. package/dist/validator/compile.d.ts +3 -0
  185. package/dist/validator/compile.d.ts.map +1 -0
  186. package/dist/validator/compile.js +254 -0
  187. package/dist/validator/compile.js.map +1 -0
  188. package/dist/validator/engine.d.ts +1 -0
  189. package/dist/validator/engine.d.ts.map +1 -1
  190. package/dist/validator/engine.js +285 -317
  191. package/dist/validator/engine.js.map +1 -1
  192. package/dist/validator/error.d.ts +1 -0
  193. package/dist/validator/error.d.ts.map +1 -1
  194. package/dist/validator/error.js +11 -1
  195. package/dist/validator/error.js.map +1 -1
  196. package/dist/validator/rules.d.ts +64 -0
  197. package/dist/validator/rules.d.ts.map +1 -0
  198. package/dist/validator/rules.js +655 -0
  199. package/dist/validator/rules.js.map +1 -0
  200. package/dist/validator/text.d.ts +11 -0
  201. package/dist/validator/text.d.ts.map +1 -0
  202. package/dist/validator/text.js +69 -0
  203. package/dist/validator/text.js.map +1 -0
  204. package/package.json +56 -39
@@ -70,7 +70,7 @@ export default controller({
70
70
 
71
71
  ### OOP Constructor and Property Injection
72
72
 
73
- In class-based controllers and services, dependencies declared in the constructor are automatically resolved using TypeScript's emitted metadata (`design:paramtypes`):
73
+ In class-based controllers and services, constructor dependencies are injected by token. Mark each parameter with `@Inject(Token)`; a class is its own token. ExisJS does not rely on TypeScript's emitted type metadata (the `tsx`/esbuild toolchain does not produce it), so an undecorated parameter on a controller or `@Injectable()` class fails with a clear error instead of receiving `undefined`:
74
74
 
75
75
  ```typescript filename="src/http/users/route.ts"
76
76
  import { Controller, Get, Post, Body } from 'exisjs/decorators'
@@ -85,8 +85,8 @@ export default class UsersController {
85
85
  @Optional()
86
86
  private metrics?: MetricsService
87
87
 
88
- // Automatic constructor injection
89
- constructor(private usersService: UsersService) {}
88
+ // Constructor injection: the class is the token
89
+ constructor(@Inject(UsersService) private usersService: UsersService) {}
90
90
 
91
91
  @Get('/')
92
92
  async list() {
@@ -287,7 +287,7 @@ import { DatabaseService } from './database.service'
287
287
 
288
288
  @Injectable()
289
289
  export class RolesService {
290
- constructor(private db: DatabaseService) {}
290
+ constructor(@Inject(DatabaseService) private db: DatabaseService) {}
291
291
 
292
292
  // Caches method results using an LRU cache
293
293
  @Cacheable({ ttl: 300, key: (id: string) => `role:${id}` })
@@ -155,12 +155,23 @@ When running behind reverse proxies, load balancers, or CDNs (such as AWS ALB, C
155
155
  import type { ExisConfig } from 'exisjs/config'
156
156
 
157
157
  const config: ExisConfig = {
158
- trustProxy: true, // Evaluates CF-Connecting-IP, X-Real-IP, and X-Forwarded-For
158
+ // Exactly one proxy (e.g. NGINX or a load balancer) in front of the app:
159
+ trustProxy: 1,
159
160
  }
160
161
 
161
162
  export default config
162
163
  ```
163
164
 
165
+ Choose the value that matches your deployment:
166
+
167
+ | Value | Trusts | Use when |
168
+ | :--- | :--- | :--- |
169
+ | `false` (default) | Nothing; `req.ip` is the socket address | The app is reached directly |
170
+ | `N` (number) | The `N` closest hops, counting the socket peer. With `X-Forwarded-For: a, b` and `trustProxy: 1`, `req.ip` is `b`, the address your proxy saw. Values a client prepends are ignored. | You run behind a known number of proxies |
171
+ | `true` | Every hop, plus CDN headers (`CF-Connecting-IP`, `True-Client-IP`, `X-Real-IP`, `X-Client-IP`) | Every request passes through a CDN or proxy that overwrites these headers |
172
+
173
+ > **Warning:** with `trustProxy: true`, any client that can reach the app directly can set these headers and spoof `req.ip`, and with it rate limits and IP filters. Prefer a hop count unless the app is only reachable through your proxy.
174
+
164
175
  When enabled:
165
176
  - `req.ip` automatically resolves the client IP, normalizes IPv6 loopback (`::1` $\to$ `127.0.0.1`), and strips IPv4-mapped IPv6 prefixes (`::ffff:192.168.1.1` $\to$ `192.168.1.1`).
166
177
  - `req.ips` provides the complete upstream proxy chain.
@@ -248,22 +248,63 @@ res.clearCookie('token', { path: '/' })
248
248
 
249
249
  ## File Downloads & Streaming
250
250
 
251
- ### File Downloads with `res.download()`
251
+ ### File Downloads
252
252
 
253
- Reads a file from disk, sets `Content-Disposition: attachment`, and infers MIME type:
253
+ Return `download()` from a handler to send generated content (a string, `Buffer` or stream) as an attachment. It sets `Content-Disposition` and infers `Content-Type` from the filename:
254
254
 
255
255
  ```typescript filename="src/http/reports/route.ts"
256
256
  import { controller, route } from 'exisjs/router'
257
+ import { download } from 'exisjs/response'
257
258
 
258
259
  export default controller({
259
- download: route.get('/annual', {
260
+ exportCsv: route.get('/export', {
261
+ async handle() {
262
+ const csv = await ReportService.buildCsv()
263
+ return download(csv, 'report.csv')
264
+ },
265
+ }),
266
+ exportXlsx: route.get('/export.xlsx', {
267
+ async handle() {
268
+ const stream = await ReportService.streamWorkbook()
269
+ return download(stream, 'report.xlsx', {
270
+ headers: { 'Cache-Control': 'no-store' },
271
+ })
272
+ },
273
+ }),
274
+ })
275
+ ```
276
+
277
+ Pass `{ contentType }` to override the inferred MIME type. A handler that returns a plain `Buffer` sends it as `application/octet-stream`.
278
+
279
+ #### Files on disk: `res.download(path)`
280
+
281
+ `res.download()` sends a file from disk. A string argument is **always a file path**, never content; a missing file answers `404`. It also accepts a `Buffer` or stream.
282
+
283
+ ```typescript filename="src/http/reports/route.ts"
284
+ import { controller, route } from 'exisjs/router'
285
+
286
+ export default controller({
287
+ annual: route.get('/annual', {
260
288
  handle: async ({ res }) => {
261
289
  res.download('./storage/annual-report.pdf', 'Annual-Report-2026.pdf')
262
290
  },
263
291
  }),
292
+ // The filename comes from the request, so confine it to one directory
293
+ byName: route.get('/files/:name', {
294
+ handle: async ({ params, res }) => {
295
+ res.download(params.name, undefined, { root: './storage/exports' })
296
+ },
297
+ }),
264
298
  })
265
299
  ```
266
300
 
301
+ > **Security:** whenever any part of the path comes from the request (a param, query value or body field), pass `root`. Paths that resolve outside it, such as `../../.env` or an absolute path, answer `404` instead of leaking the file.
302
+
303
+ | | String argument means | Use for |
304
+ | :--- | :--- | :--- |
305
+ | `return download(data, name)` | Content | Generated CSV, JSON, reports |
306
+ | `res.download(path, name?, { root })` | File path | Files stored on disk |
307
+
267
308
  ---
268
309
 
269
310
  ### Stream Piping (`res.stream()` / `res.sendStream()`)
@@ -362,6 +362,30 @@ export default controller({
362
362
 
363
363
  ---
364
364
 
365
+ ## Reusing Route Types in Services
366
+
367
+ `InferRouteInput` and `InferRouteOutput` derive types from a route definition, so service methods do not need a second copy of the request shape:
368
+
369
+ ```typescript filename="src/http/users/route.ts"
370
+ import { route, type InferRouteInput, type InferRouteOutput } from 'exisjs/router'
371
+ import { CreateUserSchema } from './schema'
372
+ import { UserService } from './service'
373
+
374
+ export const createUser = route.post('/', {
375
+ body: CreateUserSchema,
376
+ async handle({ body, resolve }) {
377
+ return resolve(UserService).create(body)
378
+ },
379
+ })
380
+
381
+ // { body, query, params } as the handler receives them, after validation
382
+ export type CreateUserInput = InferRouteInput<typeof createUser>['body']
383
+ // What the handler resolves to
384
+ export type CreateUserResult = InferRouteOutput<typeof createUser>
385
+ ```
386
+
387
+ ---
388
+
365
389
  ## Dependency Resolution in Functional Routes
366
390
 
367
391
  Functional routes can resolve dependencies directly from the IoC container using `ctx.resolve()`:
@@ -110,11 +110,14 @@ export default controller({
110
110
  ```typescript filename="src/http/users/route.ts"
111
111
  import { Controller, Get, Param, ApiOperation } from 'exisjs/decorators'
112
112
  import { userParamsSchema } from './schema'
113
+ import { Inject } from 'exisjs/di'
113
114
  import { UserService } from './service'
114
115
 
115
116
  @Controller()
116
117
  export default class UsersController {
117
- constructor(private readonly userService: UserService) {}
118
+ constructor(
119
+ @Inject(UserService) private readonly userService: UserService
120
+ ) {}
118
121
 
119
122
  @Get('/:id', { params: userParamsSchema })
120
123
  @ApiOperation({ summary: 'Retrieve user by ID' })
@@ -33,6 +33,8 @@ The `exisjs/testing` module re-exports test runner primitives, assertions, mocki
33
33
 
34
34
  `createTestContext` initializes your application definition, executes `onStart` hooks, establishes database connections (Mongoose, Prisma, or DatabaseManager), and tears down connections gracefully in `afterAll`.
35
35
 
36
+ Tests always load routes from your source files, never from a previous `exisjs build`. `exisjs test` reads `.env.test` on top of `.env`, so point it at a separate database. A test file that crashes while loading is reported as failed, and a run that finds no test files fails (set `EXIS_PASS_WITH_NO_TESTS=1` to allow it).
37
+
36
38
  ### Functional Paradigm Application Test
37
39
 
38
40
  Given a functional application defined in `src/http/server.ts`:
@@ -368,7 +368,7 @@ When validating, `tex.discriminatedUnion` matches the discriminator property aga
368
368
  ```json filename="Discriminator Error Example"
369
369
  {
370
370
  "statusCode": 400,
371
- "error": "Bad Request",
371
+ "error": { "code": "VALIDATION_ERROR", "message": "Validation Error", "details": [] },
372
372
  "message": "Validation Error: type: Invalid discriminator value 'archive' for field 'type'",
373
373
  "details": [
374
374
  {
@@ -588,7 +588,7 @@ When incoming requests fail validation, ExisJS returns an HTTP `400 Bad Request`
588
588
  ```json filename="HTTP 400 Bad Request"
589
589
  {
590
590
  "statusCode": 400,
591
- "error": "Bad Request",
591
+ "error": { "code": "VALIDATION_ERROR", "message": "Validation Error", "details": [] },
592
592
  "message": "Validation Error: username: Field must be at least 4 characters, email: Invalid email address",
593
593
  "errors": {
594
594
  "username": "Field must be at least 4 characters",
@@ -643,6 +643,20 @@ export default controller({
643
643
  })
644
644
  ```
645
645
 
646
+ ### Query and Param Coercion with Zod
647
+
648
+ Query strings and path parameters always arrive as strings. For Zod object schemas used as `query` or `params`, ExisJS converts fields declared as `z.number()`, `z.boolean()` or `z.date()` before validating, so `z.coerce` and `.transform(Number)` are not needed (they keep working if present). This works with Zod 3 and Zod 4, including fields wrapped in `.optional()`, `.default()` or `.nullable()`.
649
+
650
+ ```typescript
651
+ const ListQuery = z.object({
652
+ page: z.number().int().min(1).default(1), // ?page=2 -> 2
653
+ active: z.boolean().optional(), // ?active=true -> true
654
+ from: z.date().optional(), // ?from=2026-10-01 -> Date
655
+ })
656
+ ```
657
+
658
+ A value that cannot be converted (`?page=abc`) is left as a string, so the schema rejects it with a normal validation error. Request bodies are never coerced.
659
+
646
660
  ### Using Zod in OOP Controllers
647
661
 
648
662
  ```typescript filename="src/http/users/route.ts"
@@ -20,7 +20,7 @@ This directory contains complete, information-dense API references, TypeScript i
20
20
  | `exisjs/middleware` | [`middleware.mdx`](file:///z:/projects/framework/exisjs/docs/reference/middleware.mdx) | Built-in middleware suite: Helmet, CORS, CSRF, rate limiting, IP filtering, and multipart uploads. |
21
21
  | `exisjs/context` | [`context.mdx`](file:///z:/projects/framework/exisjs/docs/reference/context.mdx) | `AsyncLocalStorage` request context API (`getRequest`, `getResponse`, `getContext`, `after`). |
22
22
  | `exisjs/cron` | [`cron.mdx`](file:///z:/projects/framework/exisjs/docs/reference/cron.mdx) | Task scheduler (`cron()`, `@Cron()`), interval timers, presets, and `CronManager` runtime controls. |
23
- | `exisjs/sanitize` | [`sanitize.mdx`](file:///z:/projects/framework/exisjs/docs/reference/sanitize.mdx) | Rust-accelerated security cleaners (`escapeHtml`, `preventSql`) and data transform utilities. |
23
+ | `exisjs/sanitize` | [`sanitize.mdx`](file:///z:/projects/framework/exisjs/docs/reference/sanitize.mdx) | Security cleaners (`escapeHtml`, `preventSql`) and data transform utilities. |
24
24
  | `exisjs/swagger` | [`swagger.mdx`](file:///z:/projects/framework/exisjs/docs/reference/swagger.mdx) | OpenAPI 3.1 specification generation, Swagger UI / Scalar interactive rendering, and decorators. |
25
25
  | `exisjs/testing` | [`testing.mdx`](file:///z:/projects/framework/exisjs/docs/reference/testing.mdx) | Test runner (`node:test`), synthetic HTTP client (`createTestApp`), `expect` matchers, and `ex` mocks. |
26
26
  | `exisjs/plugin` | [`plugin.mdx`](file:///z:/projects/framework/exisjs/docs/reference/plugin.mdx) | Modular plugin development (`definePlugin`), lifecycle hooks, and dependency encapsulation. |
@@ -172,7 +172,7 @@ The root configuration schema accepted by `exis.config.ts`:
172
172
  | `host` | `string` | `'0.0.0.0'` | Network interface binding. |
173
173
  | `server` | `'auto' \| 'node' \| 'bun' \| 'uws'` | `'auto'` | HTTP server backend. Automatically selects Bun or Node when detected. |
174
174
  | `cluster` | `{ workers?: number \| 'auto' \| 'safe' \| 'max' }` | `{ workers: 1 }` | Multi-process worker clustering. `'safe'` uses available CPU cores minus 1; `'max'` uses all available cores. |
175
- | `trustProxy` | `boolean \| number` | `false` | Enables reverse-proxy IP headers (`X-Forwarded-For`, `CF-Connecting-IP`, `True-Client-IP`). |
175
+ | `trustProxy` | `boolean \| number` | `false` | `true`: trust all proxy headers (`X-Forwarded-For`, `CF-Connecting-IP`, `True-Client-IP`, `X-Real-IP`). `N`: trust only the N closest hops in `X-Forwarded-For`, counting the socket peer; CDN headers are ignored. |
176
176
  | `bodyLimit` | `number` | `10485760` (10MB) | Maximum payload size in bytes for JSON and URL-encoded request bodies. |
177
177
  | `compression` | `boolean` | `false` | Enables gzip and Brotli response compression. |
178
178
  | `etag` | `boolean` | `false` | Enables ETag computation for dynamic responses. |
@@ -219,7 +219,7 @@ export const CurrentUser = createParamDecorator((data: string | undefined, ctx)
219
219
  | `@RateLimit(options)` | Class / Method | `RateLimitOptions` | Enforces rate limits on endpoints. |
220
220
  | `@Cors(options)` | Class / Method | `CorsConfig \| boolean` | Enforces CORS configuration. |
221
221
  | `@IpFilter(options)` | Class / Method | `IpFilterOptions` | Enforces CIDR IP allow/deny lists. |
222
- | `@Idempotent(options?)` | Class / Method | `IdempotencyOptions` | Enables off-heap request caching via `Idempotency-Key`. |
222
+ | `@Idempotent(options?)` | Class / Method | `IdempotencyOptions` | Enables response caching via `Idempotency-Key`. |
223
223
  | `@Dedupe(options?)` | Class / Method | `DedupeOptions` | Deduplicates concurrent in-flight requests with identical keys. |
224
224
  | `@BlockProbes(options?)` | Class / Method | `BlockProbesOptions` | Blackholes malicious scanner probes (`.env`, `wp-admin`). |
225
225
  | `@Upload(field, options?)` | Method | `string, FileUploadOptions` | Configures multipart file upload streaming on the endpoint. |
@@ -266,7 +266,7 @@ export const CurrentUser = createParamDecorator((data: string | undefined, ctx)
266
266
 
267
267
  | Decorator | Target | Options | Description |
268
268
  | :--- | :--- | :--- | :--- |
269
- | `@Cacheable(options)` | Method | `{ ttl?: number, key?: string \| ((...args) => string) }` | Caches method return value in native off-heap LRU cache. |
269
+ | `@Cacheable(options)` | Method | `{ ttl?: number, key?: string \| ((...args) => string) }` | Caches method return value in a bounded in-memory cache. |
270
270
  | `@CacheEvict(options)` | Method | `{ key: string \| ((...args) => string) }` | Evicts cached keys upon successful method execution. |
271
271
  | `@Transactional(options?)` | Method | `TransactionOptions` | Wraps database queries within an atomic transaction. |
272
272
  | `@Profile(options?)` | Method | `{ thresholdMs?: number, warnSlow?: boolean }` | Measures and logs method execution latency. |
@@ -131,7 +131,7 @@ export default class UserController {
131
131
  private config!: Record<string, any>
132
132
 
133
133
  constructor(
134
- private userService: UserService,
134
+ @Inject(UserService) private userService: UserService,
135
135
  @Inject('DATABASE_URL') private dbUrl: string
136
136
  ) {}
137
137
  }
@@ -7,7 +7,7 @@ nextTitle: "Context Reference"
7
7
 
8
8
  # `exisjs/middleware`
9
9
 
10
- The `exisjs/middleware` module provides the built-in HTTP middleware pipeline for ExisJS. It includes native Rust-accelerated traffic controls, multipart upload handlers, security header suites, and request context enhancers.
10
+ The `exisjs/middleware` module provides the built-in HTTP middleware pipeline for ExisJS. It includes traffic controls, multipart upload handlers, security header suites, and request context enhancers.
11
11
 
12
12
  ---
13
13
 
@@ -78,7 +78,7 @@ function helmet(options?: HelmetOptions): Handler
78
78
  | `xFrameOptions` | `'DENY' \| 'SAMEORIGIN'` | `'SAMEORIGIN'` | Protects against clickjacking. |
79
79
  | `hsts` | `boolean \| HstsOptions` | `true` (in prod) | Strict Transport Security configuration. |
80
80
  | `noSniff` | `boolean` | `true` | Sets `X-Content-Type-Options: nosniff`. |
81
- | `xssFilter` | `boolean` | `true` | Sets `X-XSS-Protection: 1; mode=block`. |
81
+ | `xssFilter` | `boolean` | `true` | Sets `X-XSS-Protection: 0`, disabling the legacy browser XSS auditor (current OWASP guidance). |
82
82
 
83
83
  ---
84
84
 
@@ -145,7 +145,7 @@ function mongoSanitize(options?: MongoSanitizeOptions): Handler
145
145
 
146
146
  ### `rateLimit(options?)`
147
147
 
148
- In-memory off-heap rate limiter backed by native Rust acceleration (`NativeRateLimiter`).
148
+ In-memory fixed-window rate limiter; expired windows are swept automatically.
149
149
 
150
150
  ```typescript
151
151
  function rateLimit(options?: RateLimitOptions): Handler
@@ -181,7 +181,7 @@ function routeTimeout(msOrOptions: number | TimeoutOptions): Handler
181
181
 
182
182
  ### `idempotent(options?)`
183
183
 
184
- Caches responses against the `Idempotency-Key` HTTP header in off-heap native memory to prevent duplicate mutations.
184
+ Caches responses against the `Idempotency-Key` HTTP header in a bounded in-memory cache (10,000 entries) to prevent duplicate mutations.
185
185
 
186
186
  ```typescript
187
187
  function idempotent(options?: IdempotencyOptions): Handler
@@ -269,7 +269,9 @@ fileUpload.none(options?: FileUploadOptions): Handler
269
269
  | `dest` | `string` | Target directory on disk to stream uploaded files to. |
270
270
  | `maxBytes` | `number` | Maximum allowed individual file size in bytes. |
271
271
  | `mimeTypes` | `string[]` | Permitted MIME types (e.g. `['image/png', 'image/jpeg']`). |
272
- | `limits` | `FileUploadLimits` | Detailed limits (`fileSize`, `files`, `fieldSize`, `fields`). |
272
+ | `limits` | `FileUploadLimits` | Detailed limits (`fileSize`, `files`, `fieldSize`, `fields`, `parts`). |
273
+
274
+ **Default limits** (applied when a route does not set its own): `files: 10`, `fields: 100`, `parts: 200`, `fieldSize: 1 MB`, and `fileSize` equal to the app `bodyLimit` (10 MB by default). Exceeding a limit returns `413 Payload Too Large`. Files written to disk are named `<field>-<uuid><ext>`; field names and extensions are sanitized, so client input cannot choose the path.
273
275
 
274
276
  #### Example
275
277
 
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  title: "exisjs/sanitize"
3
- description: "API Reference for ExisJS data sanitization engine: Rust-accelerated string cleaners, safeSanitize, and object transformers."
3
+ description: "API Reference for ExisJS data sanitization engine: string cleaners, safeSanitize, and object transformers."
4
4
  nextUrl: "/docs/reference/swagger"
5
5
  nextTitle: "Swagger Reference"
6
6
  ---
7
7
 
8
8
  # `exisjs/sanitize`
9
9
 
10
- The `exisjs/sanitize` module provides pure data sanitization functions for cleaning and normalizing input strings, numbers, dates, arrays, and complex objects before business logic execution. High-throughput security transforms (XSS escaping, HTML stripping, SQL prevention, path traversal blocking) are backed by native Rust acceleration (`@exisjs/rs`).
10
+ The `exisjs/sanitize` module provides pure data sanitization functions for cleaning and normalizing input strings, numbers, dates, arrays, and complex objects before business logic execution. It includes security transforms for XSS escaping, HTML stripping, and basic SQL injection and path traversal probe detection.
11
11
 
12
12
  ---
13
13
 
@@ -19,9 +19,9 @@ import { sanitize } from 'exisjs/sanitize'
19
19
 
20
20
  ---
21
21
 
22
- ## 1. Rust-Accelerated Security Sanitizers
22
+ ## 1. Security Sanitizers
23
23
 
24
- These sanitizers interface with `@exisjs/rs` to ensure high-performance text cleansing.
24
+ The SQL and path traversal checks reject common probe strings; they complement, and never replace, parameterized queries and resolved-path checks.
25
25
 
26
26
  | Function | Signature | Description |
27
27
  | :--- | :--- | :--- |
@@ -7,7 +7,7 @@ nextTitle: "Decorators Reference"
7
7
 
8
8
  # `exisjs/validator`
9
9
 
10
- The `exisjs/validator` module provides the `tex` schema builder, Rust-accelerated `TexEngine`, data transformation modifiers, and pagination helpers for request body, query, and parameter validation.
10
+ The `exisjs/validator` module provides the `tex` schema builder, `TexEngine` (schemas compile once into plain JS checks), data transformation modifiers, and pagination helpers for request body, query, and parameter validation.
11
11
 
12
12
  ---
13
13
 
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/error/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/error/errors.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,16 @@ exports.createErrorHandler = createErrorHandler;
9
9
  exports.asyncHandler = asyncHandler;
10
10
  const node_fs_1 = __importDefault(require("node:fs"));
11
11
  const logger_1 = require("../logger");
12
+ const error_1 = require("../validator/error");
12
13
  // ─── HttpError ─────────────────────────────────────────────────────────────────
14
+ // notFound('User') -> "User not found". A full sentence such as
15
+ // notFound('Book not found') is used as written instead of becoming
16
+ // "Book not found not found".
17
+ function notFoundMessage(resource) {
18
+ return /not found.?$/i.test(resource.trim())
19
+ ? resource
20
+ : `${resource} not found`;
21
+ }
13
22
  class HttpError extends Error {
14
23
  constructor(message, statusCode = 500, code = 'INTERNAL_ERROR', details) {
15
24
  super(message);
@@ -32,7 +41,7 @@ class HttpError extends Error {
32
41
  return new HttpError(message, 403, 'FORBIDDEN');
33
42
  }
34
43
  static notFound(resource = 'Resource') {
35
- return new HttpError(`${resource} not found`, 404, 'NOT_FOUND');
44
+ return new HttpError(notFoundMessage(resource), 404, 'NOT_FOUND');
36
45
  }
37
46
  static conflict(message) {
38
47
  return new HttpError(message, 409, 'CONFLICT');
@@ -55,9 +64,12 @@ class HttpError extends Error {
55
64
  static gatewayTimeout(message = 'Gateway timeout') {
56
65
  return new HttpError(message, 504, 'GATEWAY_TIMEOUT');
57
66
  }
67
+ // Every error response shares this core:
68
+ // { success: false, statusCode, error: { code, message, details? } }
58
69
  toJSON() {
59
70
  return {
60
71
  success: false,
72
+ statusCode: this.statusCode,
61
73
  error: {
62
74
  code: this.code,
63
75
  message: this.message,
@@ -91,7 +103,7 @@ class ForbiddenError extends HttpError {
91
103
  exports.ForbiddenError = ForbiddenError;
92
104
  class NotFoundError extends HttpError {
93
105
  constructor(resource = 'Resource') {
94
- super(`${resource} not found`, 404, 'NOT_FOUND');
106
+ super(notFoundMessage(resource), 404, 'NOT_FOUND');
95
107
  this.name = 'NotFoundError';
96
108
  }
97
109
  }
@@ -467,14 +479,19 @@ function createErrorHandler(isDev = false) {
467
479
  }
468
480
  tableRows.push({
469
481
  field,
470
- received: formattedReceived,
482
+ // Never echo credentials into logs or error responses
483
+ received: (0, error_1.isSensitiveField)(field) ? '[Redacted]' : formattedReceived,
471
484
  expected: itemDetail?.expected || expectedMsg,
472
485
  code: itemDetail?.code,
473
486
  });
474
487
  }
475
488
  const diagnosticLines = Object.entries(errorsMap).map(([f, msg]) => ` ✖ ${f}: ${msg}`);
476
- const table = renderValidationTable(tableRows);
477
- const diagnosticMsg = `[Validation Failed] ${routeLoc}${part}\n${diagnosticLines.join('\n')}\n${table}`;
489
+ // The ASCII table is a development aid; production logs keep the same
490
+ // data as structured fields (validationTable) without the drawing
491
+ const table = process.env.NODE_ENV === 'production'
492
+ ? ''
493
+ : `\n${renderValidationTable(tableRows)}`;
494
+ const diagnosticMsg = `[Validation Failed] ${routeLoc}${part}\n${diagnosticLines.join('\n')}${table}`;
478
495
  if (req.log && typeof req.log.warn === 'function') {
479
496
  req.log.warn({
480
497
  validationErrors: errorsMap,
@@ -505,7 +522,12 @@ function createErrorHandler(isDev = false) {
505
522
  res.status(400).json({
506
523
  success: false,
507
524
  statusCode: 400,
508
- error: 'Bad Request',
525
+ error: {
526
+ code: 'VALIDATION_ERROR',
527
+ message: message || 'Validation Error',
528
+ details: responseDetails,
529
+ },
530
+ // Kept for existing clients: field -> message map and flat details
509
531
  message: message || 'Validation Error',
510
532
  validationErrors: errorsMap,
511
533
  errors: errorsMap,
@@ -544,15 +566,16 @@ function createErrorHandler(isDev = false) {
544
566
  .html(renderErrorHtml(err instanceof Error ? err : new Error(String(err)), req));
545
567
  return;
546
568
  }
569
+ const internalMessage = (isDev && err?.message) || 'An unexpected error occurred';
547
570
  res.status(500).json({
548
571
  success: false,
549
572
  statusCode: 500,
550
573
  error: {
551
574
  code: 'INTERNAL_ERROR',
552
- message: isDev ? err.message : 'An unexpected error occurred',
575
+ message: internalMessage,
553
576
  ...(isDev && { stack: err.stack }),
554
577
  },
555
- message: isDev ? err.message : 'An unexpected error occurred',
578
+ message: internalMessage,
556
579
  validationErrors: null,
557
580
  timestamp: new Date().toISOString(),
558
581
  });
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/error/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/error/errors.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
39
39
  const node_v8_1 = __importDefault(require("node:v8"));
40
40
  const node_url_1 = require("node:url");
41
41
  const cluster_js_1 = require("../server/cluster.js");
42
+ const lifecycle_js_1 = require("../database/lifecycle.js");
42
43
  async function start() {
43
44
  // ─── Memory threshold monitor (only runs on worker processes) ───────────
44
45
  const memMonitor = setInterval(() => {
@@ -202,7 +203,7 @@ async function start() {
202
203
  });
203
204
  try {
204
205
  if (typeof app.close === 'function') {
205
- await app.close();
206
+ await app.close(undefined, signal);
206
207
  }
207
208
  if (!isCLI)
208
209
  console.error('[exis] Server closed cleanly.');
@@ -224,6 +225,9 @@ async function start() {
224
225
  process.exit(1);
225
226
  }
226
227
  };
228
+ // app.close() disconnects databases after requests have drained; stop
229
+ // DatabaseManager's own signal handlers from closing pools first
230
+ lifecycle_js_1.DatabaseManager.deferShutdownToApp();
227
231
  process.once('SIGTERM', () => shutdown('SIGTERM'));
228
232
  process.once('SIGINT', () => shutdown('SIGINT'));
229
233
  process.on('message', (msg) => {