exisjs 0.7.13 → 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 (214) 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/cli/commands/run.d.ts.map +1 -1
  7. package/dist/cli/commands/run.js +3 -1
  8. package/dist/cli/commands/run.js.map +1 -1
  9. package/dist/config/config.d.ts.map +1 -1
  10. package/dist/config/config.js +10 -0
  11. package/dist/config/config.js.map +1 -1
  12. package/dist/config/types.d.ts +9 -1
  13. package/dist/config/types.d.ts.map +1 -1
  14. package/dist/database/lifecycle.d.ts +7 -0
  15. package/dist/database/lifecycle.d.ts.map +1 -1
  16. package/dist/database/lifecycle.js +30 -7
  17. package/dist/database/lifecycle.js.map +1 -1
  18. package/dist/decorators/caching.d.ts +2 -5
  19. package/dist/decorators/caching.d.ts.map +1 -1
  20. package/dist/decorators/caching.js +7 -61
  21. package/dist/decorators/caching.js.map +1 -1
  22. package/dist/decorators/core.d.ts.map +1 -1
  23. package/dist/decorators/core.js +5 -0
  24. package/dist/decorators/core.js.map +1 -1
  25. package/dist/decorators/cron.d.ts +1 -0
  26. package/dist/decorators/cron.d.ts.map +1 -1
  27. package/dist/decorators/cron.js +4 -1
  28. package/dist/decorators/cron.js.map +1 -1
  29. package/dist/di/container.d.ts +1 -0
  30. package/dist/di/container.d.ts.map +1 -1
  31. package/dist/di/container.js +19 -3
  32. package/dist/di/container.js.map +1 -1
  33. package/dist/docs/ARCHITECTURE.md +117 -78
  34. package/dist/docs/BENCHMARKS.md +59 -26
  35. package/dist/docs/README.md +1 -1
  36. package/dist/docs/content/boundaries.mdx +2 -0
  37. package/dist/docs/content/cli/commands.mdx +1 -2
  38. package/dist/docs/content/cli/overview.mdx +1 -1
  39. package/dist/docs/content/config.mdx +22 -9
  40. package/dist/docs/content/cron.mdx +2 -2
  41. package/dist/docs/content/decorators.mdx +2 -2
  42. package/dist/docs/content/errors.mdx +22 -6
  43. package/dist/docs/content/installation.mdx +13 -8
  44. package/dist/docs/content/introduction.mdx +12 -12
  45. package/dist/docs/content/middleware.mdx +1 -1
  46. package/dist/docs/content/providers.mdx +4 -4
  47. package/dist/docs/content/requests.mdx +12 -1
  48. package/dist/docs/content/responses.mdx +44 -3
  49. package/dist/docs/content/routing.mdx +24 -0
  50. package/dist/docs/content/structure.mdx +4 -1
  51. package/dist/docs/content/testing.mdx +2 -0
  52. package/dist/docs/content/validation.mdx +16 -2
  53. package/dist/docs/reference/README.md +1 -1
  54. package/dist/docs/reference/config.mdx +1 -1
  55. package/dist/docs/reference/decorators.mdx +2 -2
  56. package/dist/docs/reference/di.mdx +1 -1
  57. package/dist/docs/reference/middleware.mdx +7 -5
  58. package/dist/docs/reference/sanitize.mdx +4 -4
  59. package/dist/docs/reference/validator.mdx +1 -1
  60. package/dist/error/errors.d.ts.map +1 -1
  61. package/dist/error/errors.js +31 -8
  62. package/dist/error/errors.js.map +1 -1
  63. package/dist/lib/start-server.js +24 -1
  64. package/dist/lib/start-server.js.map +1 -1
  65. package/dist/middleware/compression.d.ts +0 -12
  66. package/dist/middleware/compression.d.ts.map +1 -1
  67. package/dist/middleware/compression.js +52 -41
  68. package/dist/middleware/compression.js.map +1 -1
  69. package/dist/middleware/idempotency.d.ts +11 -6
  70. package/dist/middleware/idempotency.d.ts.map +1 -1
  71. package/dist/middleware/idempotency.js +5 -35
  72. package/dist/middleware/idempotency.js.map +1 -1
  73. package/dist/middleware/ip-filter.d.ts.map +1 -1
  74. package/dist/middleware/ip-filter.js +0 -16
  75. package/dist/middleware/ip-filter.js.map +1 -1
  76. package/dist/middleware/middleware.d.ts +2 -1
  77. package/dist/middleware/middleware.d.ts.map +1 -1
  78. package/dist/middleware/middleware.js +92 -56
  79. package/dist/middleware/middleware.js.map +1 -1
  80. package/dist/middleware/rate-limit.d.ts.map +1 -1
  81. package/dist/middleware/rate-limit.js +19 -38
  82. package/dist/middleware/rate-limit.js.map +1 -1
  83. package/dist/middleware/security.d.ts.map +1 -1
  84. package/dist/middleware/security.js +3 -1
  85. package/dist/middleware/security.js.map +1 -1
  86. package/dist/middleware/upload.d.ts.map +1 -1
  87. package/dist/middleware/upload.js +15 -7
  88. package/dist/middleware/upload.js.map +1 -1
  89. package/dist/response/index.d.ts +23 -0
  90. package/dist/response/index.d.ts.map +1 -1
  91. package/dist/response/index.js +28 -1
  92. package/dist/response/index.js.map +1 -1
  93. package/dist/router/index.d.ts +1 -1
  94. package/dist/router/index.d.ts.map +1 -1
  95. package/dist/router/index.js.map +1 -1
  96. package/dist/router/radix.d.ts +3 -16
  97. package/dist/router/radix.d.ts.map +1 -1
  98. package/dist/router/radix.js +135 -211
  99. package/dist/router/radix.js.map +1 -1
  100. package/dist/router/route-builder.d.ts +28 -0
  101. package/dist/router/route-builder.d.ts.map +1 -1
  102. package/dist/router/route-builder.js.map +1 -1
  103. package/dist/router/route-scanner.d.ts +2 -1
  104. package/dist/router/route-scanner.d.ts.map +1 -1
  105. package/dist/router/route-scanner.js +37 -44
  106. package/dist/router/route-scanner.js.map +1 -1
  107. package/dist/router/router.d.ts.map +1 -1
  108. package/dist/router/router.js +153 -126
  109. package/dist/router/router.js.map +1 -1
  110. package/dist/router/scanner/boundary-loader.d.ts.map +1 -1
  111. package/dist/router/scanner/boundary-loader.js +7 -2
  112. package/dist/router/scanner/boundary-loader.js.map +1 -1
  113. package/dist/router/scanner/fs-scanner.d.ts.map +1 -1
  114. package/dist/router/scanner/fs-scanner.js +22 -0
  115. package/dist/router/scanner/fs-scanner.js.map +1 -1
  116. package/dist/router/scanner/functional-compiler.d.ts.map +1 -1
  117. package/dist/router/scanner/functional-compiler.js +9 -1
  118. package/dist/router/scanner/functional-compiler.js.map +1 -1
  119. package/dist/router/types.d.ts +6 -4
  120. package/dist/router/types.d.ts.map +1 -1
  121. package/dist/sanitize/index.d.ts +2 -3
  122. package/dist/sanitize/index.d.ts.map +1 -1
  123. package/dist/sanitize/index.js +15 -20
  124. package/dist/sanitize/index.js.map +1 -1
  125. package/dist/server/adapters/bun-adapter.d.ts +2 -1
  126. package/dist/server/adapters/bun-adapter.d.ts.map +1 -1
  127. package/dist/server/adapters/bun-adapter.js +22 -2
  128. package/dist/server/adapters/bun-adapter.js.map +1 -1
  129. package/dist/server/app.d.ts +2 -2
  130. package/dist/server/app.d.ts.map +1 -1
  131. package/dist/server/app.js +14 -7
  132. package/dist/server/app.js.map +1 -1
  133. package/dist/server/bootstrapper.d.ts +2 -2
  134. package/dist/server/bootstrapper.d.ts.map +1 -1
  135. package/dist/server/bootstrapper.js +21 -2
  136. package/dist/server/bootstrapper.js.map +1 -1
  137. package/dist/server/download.d.ts +22 -0
  138. package/dist/server/download.d.ts.map +1 -0
  139. package/dist/server/download.js +18 -0
  140. package/dist/server/download.js.map +1 -0
  141. package/dist/server/helpers/body-parser.d.ts +1 -1
  142. package/dist/server/helpers/body-parser.d.ts.map +1 -1
  143. package/dist/server/helpers/body-parser.js +126 -48
  144. package/dist/server/helpers/body-parser.js.map +1 -1
  145. package/dist/server/helpers/cookie.d.ts +6 -0
  146. package/dist/server/helpers/cookie.d.ts.map +1 -1
  147. package/dist/server/helpers/cookie.js +35 -0
  148. package/dist/server/helpers/cookie.js.map +1 -1
  149. package/dist/server/helpers/etag.d.ts.map +1 -1
  150. package/dist/server/helpers/etag.js +7 -2
  151. package/dist/server/helpers/etag.js.map +1 -1
  152. package/dist/server/helpers/index.d.ts +2 -1
  153. package/dist/server/helpers/index.d.ts.map +1 -1
  154. package/dist/server/helpers/index.js +5 -1
  155. package/dist/server/helpers/index.js.map +1 -1
  156. package/dist/server/helpers/ip.d.ts +13 -0
  157. package/dist/server/helpers/ip.d.ts.map +1 -1
  158. package/dist/server/helpers/ip.js +65 -54
  159. package/dist/server/helpers/ip.js.map +1 -1
  160. package/dist/server/helpers/json.d.ts +3 -0
  161. package/dist/server/helpers/json.d.ts.map +1 -0
  162. package/dist/server/helpers/json.js +43 -0
  163. package/dist/server/helpers/json.js.map +1 -0
  164. package/dist/server/helpers/upload-name.d.ts +9 -0
  165. package/dist/server/helpers/upload-name.d.ts.map +1 -0
  166. package/dist/server/helpers/upload-name.js +39 -0
  167. package/dist/server/helpers/upload-name.js.map +1 -0
  168. package/dist/server/request-handler.d.ts +0 -7
  169. package/dist/server/request-handler.d.ts.map +1 -1
  170. package/dist/server/request-handler.js +19 -46
  171. package/dist/server/request-handler.js.map +1 -1
  172. package/dist/server/request.d.ts +3 -2
  173. package/dist/server/request.d.ts.map +1 -1
  174. package/dist/server/request.js +22 -16
  175. package/dist/server/request.js.map +1 -1
  176. package/dist/server/response.d.ts +20 -6
  177. package/dist/server/response.d.ts.map +1 -1
  178. package/dist/server/response.js +107 -34
  179. package/dist/server/response.js.map +1 -1
  180. package/dist/testing/index.d.ts.map +1 -1
  181. package/dist/testing/index.js +8 -1
  182. package/dist/testing/index.js.map +1 -1
  183. package/dist/testing/reporter.d.mts.map +1 -1
  184. package/dist/testing/reporter.mjs +18 -0
  185. package/dist/testing/reporter.mjs.map +1 -1
  186. package/dist/utils/ttl-cache.d.ts +11 -0
  187. package/dist/utils/ttl-cache.d.ts.map +1 -0
  188. package/dist/utils/ttl-cache.js +42 -0
  189. package/dist/utils/ttl-cache.js.map +1 -0
  190. package/dist/validator/builder.d.ts +2 -2
  191. package/dist/validator/builder.js +2 -2
  192. package/dist/validator/compile.d.ts +3 -0
  193. package/dist/validator/compile.d.ts.map +1 -0
  194. package/dist/validator/compile.js +254 -0
  195. package/dist/validator/compile.js.map +1 -0
  196. package/dist/validator/engine.d.ts +1 -0
  197. package/dist/validator/engine.d.ts.map +1 -1
  198. package/dist/validator/engine.js +285 -317
  199. package/dist/validator/engine.js.map +1 -1
  200. package/dist/validator/error.d.ts +1 -0
  201. package/dist/validator/error.d.ts.map +1 -1
  202. package/dist/validator/error.js +11 -1
  203. package/dist/validator/error.js.map +1 -1
  204. package/dist/validator/rules.d.ts +64 -0
  205. package/dist/validator/rules.d.ts.map +1 -0
  206. package/dist/validator/rules.js +655 -0
  207. package/dist/validator/rules.js.map +1 -0
  208. package/dist/validator/tex-types.d.ts +4 -4
  209. package/dist/validator/tex-types.d.ts.map +1 -1
  210. package/dist/validator/text.d.ts +11 -0
  211. package/dist/validator/text.d.ts.map +1 -0
  212. package/dist/validator/text.js +69 -0
  213. package/dist/validator/text.js.map +1 -0
  214. package/package.json +56 -39
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Scheduled = exports.ScheduledTimeout = void 0;
3
+ exports.CronExpression = exports.Scheduled = exports.ScheduledTimeout = void 0;
4
4
  exports.getCronJobsFromClass = getCronJobsFromClass;
5
5
  exports.Cron = Cron;
6
6
  exports.Interval = Interval;
@@ -140,4 +140,7 @@ function TimeoutTask(ms, options = {}) {
140
140
  }
141
141
  exports.ScheduledTimeout = TimeoutTask;
142
142
  exports.Scheduled = Cron;
143
+ // Cron schedules are usually written next to @Cron, so offer them here too
144
+ var expressions_1 = require("../cron/expressions");
145
+ Object.defineProperty(exports, "CronExpression", { enumerable: true, get: function () { return expressions_1.CronExpression; } });
143
146
  //# sourceMappingURL=cron.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cron.js","sourceRoot":"","sources":["../../src/decorators/cron.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cron.js","sourceRoot":"","sources":["../../src/decorators/cron.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,7 @@ export declare const INJECT_METADATA: unique symbol;
27
27
  export declare const PROPERTY_INJECT_METADATA: unique symbol;
28
28
  export declare const OPTIONAL_METADATA: unique symbol;
29
29
  export declare const SCOPE_METADATA: unique symbol;
30
+ export declare const INJECTABLE_MARK: unique symbol;
30
31
  export declare class Container {
31
32
  private providers;
32
33
  private singletonCache;
@@ -1 +1 @@
1
- {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/di/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEnE,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,GAAG,IAC/B,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;AAErE,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,CAAA;CAC9C;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,YAAY;IAC1D,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IAC1B,QAAQ,EAAE,CAAC,CAAA;CACZ;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,YAAY;IAC5D,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IAC1B,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IAC9C,MAAM,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,YAAY;IAC1D,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IAC1B,QAAQ,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,YAAY;IAC7D,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IAC1B,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;CAC9B;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;AAEjE,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,GAAG,IAChC,aAAa,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;AAEhF,MAAM,MAAM,kBAAkB,CAAC,CAAC,GAAG,GAAG,IACpC,cAAc,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAE7C,eAAO,MAAM,eAAe,eAAqC,CAAA;AACjE,eAAO,MAAM,wBAAwB,eAEpC,CAAA;AACD,eAAO,MAAM,iBAAiB,eAAuC,CAAA;AACrE,eAAO,MAAM,cAAc,eAA6B,CAAA;AAExD,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,QAAQ,CAAiB;IAEjC,OAAO,CAAC,CAAC,EACP,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,EACrD,QAAQ,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC/B,IAAI;IAwBP,UAAU,IAAI,IAAI;IAKlB,gBAAgB,CAAC,CAAC,EAChB,WAAW,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EACtC,YAAY,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAC3B,CAAC;IAoJJ,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;IAsJvD,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB9B,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAe9D"}
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/di/container.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Container = exports.SCOPE_METADATA = exports.OPTIONAL_METADATA = exports.PROPERTY_INJECT_METADATA = exports.INJECT_METADATA = void 0;
3
+ exports.Container = exports.INJECTABLE_MARK = exports.SCOPE_METADATA = exports.OPTIONAL_METADATA = exports.PROPERTY_INJECT_METADATA = exports.INJECT_METADATA = void 0;
4
4
  const forward_ref_1 = require("./forward-ref");
5
5
  exports.INJECT_METADATA = Symbol.for('exisjs:inject_tokens');
6
6
  exports.PROPERTY_INJECT_METADATA = Symbol.for('exisjs:property_inject_tokens');
7
7
  exports.OPTIONAL_METADATA = Symbol.for('exisjs:optional_tokens');
8
8
  exports.SCOPE_METADATA = Symbol.for('exisjs:scope');
9
+ // Controllers and @Injectable() services are always built by the container,
10
+ // so a constructor parameter without a token is a wiring mistake. Other
11
+ // classes (pipes, filters with option arguments) may legitimately take
12
+ // non-injected parameters.
13
+ exports.INJECTABLE_MARK = Symbol.for('exisjs:injectable');
14
+ const CONTROLLER_PREFIX = Symbol.for('exisjs:controller_prefix');
15
+ function isFrameworkManaged(TargetClass) {
16
+ return (TargetClass[exports.INJECTABLE_MARK] === true ||
17
+ TargetClass.prototype?.[CONTROLLER_PREFIX] !== undefined);
18
+ }
9
19
  class Container {
10
20
  constructor() {
11
21
  this.providers = new Map();
@@ -105,11 +115,17 @@ class Container {
105
115
  }
106
116
  }
107
117
  }
108
- else if (isOptional) {
118
+ else if (isOptional ||
119
+ i >= (TargetClass.length || 0) ||
120
+ !isFrameworkManaged(TargetClass)) {
109
121
  args.push(undefined);
110
122
  }
111
123
  else {
112
- args.push(undefined);
124
+ // Passing undefined here would only fail later, far from the
125
+ // cause, with "Cannot read properties of undefined".
126
+ throw new Error(`Cannot resolve constructor parameter #${i + 1} of ${TargetClass.name || 'class'}: no injection token is known for it. ` +
127
+ `The ExisJS toolchain (tsx/esbuild) does not emit TypeScript type metadata, so constructor parameters are not injected by type. ` +
128
+ `Add @Inject(Dependency) to the parameter, use a field with @Inject(Dependency), or mark it @Optional().`);
113
129
  }
114
130
  }
115
131
  instance = new TargetClass(...args);
@@ -1 +1 @@
1
- {"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/di/container.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/di/container.ts"],"names":[],"mappings":";;;AAAA,+CAAmE;AAsCtD,QAAA,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;AACpD,QAAA,wBAAwB,GAAG,MAAM,CAAC,GAAG,CAChD,+BAA+B,CAChC,CAAA;AACY,QAAA,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;AACxD,QAAA,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;AAExD,4EAA4E;AAC5E,wEAAwE;AACxE,uEAAuE;AACvE,2BAA2B;AACd,QAAA,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;AAC9D,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;AAEhE,SAAS,kBAAkB,CAAC,WAAgB;IAC1C,OAAO,CACL,WAAW,CAAC,uBAAe,CAAC,KAAK,IAAI;QACrC,WAAW,CAAC,SAAS,EAAE,CAAC,iBAAiB,CAAC,KAAK,SAAS,CACzD,CAAA;AACH,CAAC;AAED,MAAa,SAAS;IAAtB;QACU,cAAS,GAAG,IAAI,GAAG,EAAY,CAAA;QAC/B,mBAAc,GAAG,IAAI,GAAG,EAAY,CAAA;QACpC,aAAQ,GAAG,IAAI,GAAG,EAAO,CAAA;IAwXnC,CAAC;IAtXC,OAAO,CACL,eAAqD,EACrD,QAAgC;QAEhC,IACE,QAAQ,KAAK,SAAS;YACtB,eAAe;YACf,OAAO,eAAe,KAAK,QAAQ;YACnC,SAAS,IAAI,eAAe,EAC5B,CAAC;YACD,MAAM,UAAU,GAAG,eAAoC,CAAA;YACvD,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAQ,CAAA;YACpC,MAAM,cAAc,GAAG,IAAA,0BAAY,EAAC,QAAQ,CAAC;gBAC3C,CAAC,CAAE,QAAgC,CAAC,UAAU,EAAE;gBAChD,CAAC,CAAC,QAAQ,CAAA;YACZ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,CAAA;YAC9C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;YAC1C,OAAM;QACR,CAAC;QAED,MAAM,cAAc,GAAG,IAAA,0BAAY,EAAC,eAAe,CAAC;YAClD,CAAC,CAAE,eAAuC,CAAC,UAAU,EAAE;YACvD,CAAC,CAAC,eAAe,CAAA;QACnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;QAC5C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IAC5C,CAAC;IAED,UAAU;QACR,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC;IAED,gBAAgB,CACd,WAAsC,EACtC,YAA4B;QAE5B,MAAM,YAAY,GAAkC;YAClD,GAAG,CAAC,CAAC,WAAW,CAAC,SAAS;gBACvB,WAAW,CAAC,SAAiB,CAAC,uBAAe,CAAC,CAAC;gBAChD,EAAE,CAAC;YACL,GAAG,CAAE,WAAmB,CAAC,uBAAe,CAAC,IAAI,EAAE,CAAC;SACjD,CAAA;QACD,MAAM,cAAc,GACjB,WAAmB,CAAC,yBAAiB,CAAC;YACvC,CAAC,WAAW,CAAC,SAAS;gBACnB,WAAW,CAAC,SAAiB,CAAC,yBAAiB,CAAC,CAAC;YACpD,IAAI,GAAG,EAAE,CAAA;QAEX,iFAAiF;QACjF,MAAM,iBAAiB,GACrB,CAAC,OAAQ,UAAkB,CAAC,OAAO,EAAE,WAAW,KAAK,UAAU;YAC7D,CAAC,CAAE,UAAkB,CAAC,OAAO,CAAC,WAAW,CACrC,mBAAmB,EACnB,WAAW,CACZ;gBACD,CAAC,WAAW,CAAC,SAAS;oBACpB,CAAC,CAAE,UAAkB,CAAC,OAAO,CAAC,WAAW,CACrC,mBAAmB,EACnB,WAAW,CAAC,SAAS,CACtB;oBACH,CAAC,CAAC,SAAS,CAAC;YAChB,CAAC,CAAC,SAAS,CAAC;YACb,WAAmB,CAAC,mBAAmB,CAAC;YACxC,WAAW,CAAC,SAAiB,EAAE,CAAC,mBAAmB,CAAC;YACrD,EAAE,CAAA;QAEJ,mFAAmF;QACnF,IAAI,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClD,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAA;gBACtC,IACE,YAAY,CAAC,CAAC,CAAC,KAAK,SAAS;oBAC7B,OAAO,SAAS,KAAK,UAAU;oBAC/B,SAAS,KAAK,MAAM;oBACpB,SAAS,KAAK,MAAM;oBACpB,SAAS,KAAK,MAAM;oBACpB,SAAS,KAAK,OAAO;oBACrB,SAAS,KAAK,MAAM;oBACpB,SAAS,KAAK,KAAK;oBACnB,SAAS,KAAK,QAAQ,EACtB,CAAC;oBACD,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC1D,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAEzE,IAAI,QAAW,CAAA;QAEf,IACE,QAAQ,KAAK,CAAC,CAAC;YACf,cAAc,CAAC,IAAI,KAAK,CAAC;YACzB,CAAC,CAAC,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,EACjD,CAAC;YACD,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAA;QAC9B,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,QAAQ,GAAG,CAAC,EACZ,WAAW,CAAC,MAAM,IAAI,CAAC,EACvB,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CACpD,CAAA;YAED,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;gBACtB,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAA;YAC9B,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAU,EAAE,CAAA;gBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;oBACrC,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;oBAC7B,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;oBAExC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;wBACxB,IAAI,CAAC;4BACH,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAA;wBAC9C,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACb,IAAI,UAAU,EAAE,CAAC;gCACf,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;4BACtB,CAAC;iCAAM,CAAC;gCACN,MAAM,GAAG,CAAA;4BACX,CAAC;wBACH,CAAC;oBACH,CAAC;yBAAM,IACL,UAAU;wBACV,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC;wBAC9B,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAChC,CAAC;wBACD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;oBACtB,CAAC;yBAAM,CAAC;wBACN,6DAA6D;wBAC7D,qDAAqD;wBACrD,MAAM,IAAI,KAAK,CACb,yCAAyC,CAAC,GAAG,CAAC,OAAO,WAAW,CAAC,IAAI,IAAI,OAAO,wCAAwC;4BACtH,iIAAiI;4BACjI,yGAAyG,CAC5G,CAAA;oBACH,CAAC;gBACH,CAAC;gBACD,QAAQ,GAAG,IAAI,WAAW,CAAC,GAAG,IAAI,CAAC,CAAA;YACrC,CAAC;QACH,CAAC;QAED,6EAA6E;QAC7E,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAU,EAAE,CAAA;YAC5B,IAAI,IAAI,GAAG,WAAW,CAAC,SAAS,CAAA;YAChC,OAAO,IAAI,IAAI,IAAI,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;gBACzC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBACxB,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;YACpC,CAAC;YAED,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;gBAC3B,MAAM,cAAc,GAGd,CAAC,CAAC,gCAAwB,CAAC,IAAI,EAAE,CAAA;gBACvC,MAAM,QAAQ,GAAyB,CAAC,CAAC,yBAAiB,CAAC,IAAI,IAAI,GAAG,EAAE,CAAA;gBAExE,KAAK,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,cAAc,EAAE,CAAC;oBACpD,IAAI,aAAa,GAAG,KAAK,CAAA;oBACzB,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;wBAChC,MAAM,aAAa,GACjB,OAAQ,UAAkB,CAAC,OAAO,EAAE,WAAW,KAAK,UAAU;4BAC5D,CAAC,CAAE,UAAkB,CAAC,OAAO,CAAC,WAAW,CACrC,aAAa,EACb,CAAC,EACD,WAAW,CACZ;4BACH,CAAC,CAAC,SAAS,CAAA;wBACf,IAAI,aAAa;4BAAE,aAAa,GAAG,aAAa,CAAA;oBAClD,CAAC;oBAED,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;wBAChC,IAAI,CAAC;4BACH,CAAC;4BAAC,QAAgB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,OAAO,CAC5C,aAAa,EACb,YAAY,CACb,CAAA;wBACH,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACb,IAAI,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gCAC9B,CAAC;gCAAC,QAAgB,CAAC,WAAW,CAAC,GAAG,SAAS,CAAA;4BAC7C,CAAC;iCAAM,CAAC;gCACN,MAAM,GAAG,CAAA;4BACX,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,OAAO,CAAI,KAAuB,EAAE,YAA4B;QAC9D,MAAM,cAAc,GAAQ,IAAA,0BAAY,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;QAE5E,2BAA2B;QAC3B,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QAChD,CAAC;QAED,yBAAyB;QACzB,IAAI,YAAY,IAAI,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YACrD,OAAO,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QACzC,CAAC;QAED,uDAAuD;QACvD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YACtC,OAAO,IAAI,KAAK,CAAC,EAAS,EAAE;gBAC1B,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;oBACf,MAAM,YAAY,GAChB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC;wBACvC,CAAC,YAAY,IAAI,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAA;oBACpD,IAAI,YAAY,EAAE,CAAC;wBACjB,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;wBAC9B,OAAO,OAAO,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;oBACjE,CAAC;oBACD,OAAO,SAAS,CAAA;gBAClB,CAAC;gBACD,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;oBACtB,MAAM,YAAY,GAChB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC;wBACvC,CAAC,YAAY,IAAI,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAA;oBACpD,IAAI,YAAY,EAAE,CAAC;wBACjB,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;wBAC1B,OAAO,IAAI,CAAA;oBACb,CAAC;oBACD,OAAO,KAAK,CAAA;gBACd,CAAC;aACF,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QACnD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;gBACzC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;gBACjC,IAAI,CAAC;oBACH,MAAM,KAAK,GACT,cAAc,CAAC,SAAS,EAAE,CAAC,sBAAc,CAAC,IAAI,WAAW,CAAA;oBAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CACpC,cAA2C,EAC3C,YAAY,CACb,CAAA;oBAED,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;wBAC1B,OAAO,QAAQ,CAAA;oBACjB,CAAC;oBAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;wBACxB,IAAI,CAAC,YAAY,EAAE,CAAC;4BAClB,MAAM,IAAI,KAAK,CACb,2CAA2C,MAAM,CAC/C,cAAc,CACf,mMAAmM,CACrM,CAAA;wBACH,CAAC;wBACD,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;oBAC5C,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;oBACnD,CAAC;oBACD,OAAO,QAAQ,CAAA;gBACjB,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,MAAM,QAAQ,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;oBACjE,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,sCAAsC,MAAM,CAC1C,cAAc,CACf,kBAAkB,QAAQ,EAAE,CAC9B,CACA;oBAAC,KAAa,CAAC,KAAK,GAAG,GAAG,CAAA;oBAC3B,MAAM,KAAK,CAAA;gBACb,CAAC;wBAAS,CAAC;oBACT,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;gBACtC,CAAC;YACH,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAA;QAC5E,CAAC;QAED,IAAI,aAAkB,CAAA;QACtB,IAAI,KAAK,GAA0C,WAAW,CAAA;QAE9D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QACjC,IAAI,CAAC;YACH,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;gBACnC,MAAM,UAAU,GACb,QAAgB,CAAC,SAAS,EAAE,CAAC,sBAAc,CAAC,IAAI,WAAW,CAAA;gBAC9D,KAAK,GAAG,UAAU,CAAA;gBAClB,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAe,EAAE,YAAY,CAAC,CAAA;YACtE,CAAC;iBAAM,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACpD,IAAI,OAAO,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;oBAC1C,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;gBACxB,CAAC;gBAED,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;oBAC3B,aAAa,GAAI,QAA6B,CAAC,QAAQ,CAAA;gBACzD,CAAC;qBAAM,IAAI,aAAa,IAAI,QAAQ,EAAE,CAAC;oBACrC,aAAa,GAAG,IAAI,CAAC,OAAO,CACzB,QAAgC,CAAC,WAAW,EAC7C,YAAY,CACb,CAAA;gBACH,CAAC;qBAAM,IAAI,YAAY,IAAI,QAAQ,EAAE,CAAC;oBACpC,MAAM,WAAW,GAAG,QAA8B,CAAA;oBAClD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;wBACpD,CAAC,CAAC,WAAW,CAAC,MAAM;wBACpB,CAAC,CAAC,EAAE,CAAA;oBACN,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACjD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CACrC,CAAA;oBACD,aAAa,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,CAAA;gBACzD,CAAC;qBAAM,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;oBAClC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAClC,QAA6B,CAAC,QAAQ,EACvC,YAAY,CACb,CAAA;gBACH,CAAC;qBAAM,CAAC;oBACN,aAAa,GAAG,QAAQ,CAAA;gBAC1B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,aAAa,GAAG,QAAQ,CAAA;YAC1B,CAAC;YAED,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;gBAC1B,OAAO,aAAa,CAAA;YACtB,CAAC;YAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,MAAM,IAAI,KAAK,CACb,2CAA2C,MAAM,CAC/C,cAAc,CACf,mMAAmM,CACrM,CAAA;gBACH,CAAC;gBACD,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;YACjD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;YACxD,CAAC;YAED,OAAO,aAAa,CAAA;QACtB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;QACtC,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,KAAK,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/C,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC7C,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBAC1C,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAA;gBACzB,CAAC;gBACD,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;oBAChD,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAA;gBAC/B,CAAC;gBACD,IAAI,OAAO,QAAQ,CAAC,sBAAsB,KAAK,UAAU,EAAE,CAAC;oBAC1D,MAAM,QAAQ,CAAC,sBAAsB,EAAE,CAAA;gBACzC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,MAAe;QAC3C,KAAK,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/C,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC7C,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;oBAC7C,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAA;gBAC5B,CAAC;gBACD,IAAI,OAAO,QAAQ,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;oBACnD,MAAM,QAAQ,CAAC,eAAe,EAAE,CAAA;gBAClC,CAAC;gBACD,IAAI,OAAO,QAAQ,CAAC,qBAAqB,KAAK,UAAU,EAAE,CAAC;oBACzD,MAAM,QAAQ,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAA;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA3XD,8BA2XC"}
@@ -1,110 +1,149 @@
1
1
  # ExisJS Architecture Reference
2
2
 
3
- This document is the single source of truth for how the ExisJS core engine is built internally.
4
-
5
- ExisJS core is a minimal, ultra-high-performance web framework runtime: file-system routing, dependency injection, validation (`tex`), sanitization, and an HTTP request pipeline. Everything else — databases, external auth providers, cache stores, queues, websockets — is extracted into official `@exisjs/*` packages.
3
+ This document serves as the architecture specification and technical reference for the internal subsystems, lifecycle execution pipeline, and design constraints of the ExisJS framework monorepo.
6
4
 
7
5
  ---
8
6
 
9
- ## 1. File-System Routing 🟢
10
-
11
- **What it is:** Folder-based routing mapping HTTP routes to the file system (`route.ts`, `boundary.ts`, `server.ts`, `schema.ts`, `service.ts`).
12
-
13
- **How it's implemented:** At boot, `RouteScanner` walks the configured `src/http` directory (or a custom `apiDir`) and registers discovered routes into the `Router`'s matching engine powered by the Rust `NativeRadixTree`. Folder-naming conventions are translated during the scan:
14
-
15
- - `[param]` → `:param` dynamic segment
16
- - `[...param]` → `*param` catch-all
17
- - `(group)` → ignored entirely in the resulting URL, but still traversed for nested routes
18
-
19
- In development, routes are mounted dynamically and watched by `HotReloader`. In production, `exis build` pre-generates a route manifest (`.exis/routes-manifest.js`) for instant O(1) boot.
7
+ ## 1. Monorepo Organization & Subsystems
8
+
9
+ ExisJS is architected as a modular TypeScript monorepo with no native add-ons. Per-request work (path matching, body parsing, validation, rate limit buckets) stays in JavaScript: crossing into a native binding costs more per call than these operations take in V8, and heavy work such as compression already runs in Node's built-in C libraries off the main thread.
10
+
11
+ ```text
12
+ packages/
13
+ ├── exisjs/ # Core TypeScript framework, HTTP pipeline, router, DI, Swagger, Telemetry
14
+ ├── fetch/ # Lightweight, zero-dependency typed HTTP/RPC client
15
+ └── create/ # Scaffolding CLI tool (create-exisjs)
16
+ ```
17
+
18
+ ### Framework Module Mapping
19
+
20
+ | Subsystem | Source Path | Key Responsibilities |
21
+ | :--- | :--- | :--- |
22
+ | **Router Engine** | `packages/exisjs/src/router/` | File-system directory scanning, radix-tree route compilation, route grouping `(group)`, wildcard/param segments. |
23
+ | **Dependency Injection** | `packages/exisjs/src/di/` | Hierarchical IoC container, constructor injection reflection, custom providers (`useValue`, `useFactory`, `useExisting`, `useClass`), contextual `inject()`. |
24
+ | **Validation (`tex`)** | `packages/exisjs/src/validator/` | Schema definition AST (`tex.*`), discriminated unions, coercion primitives (`tex.coerce.*`), transforms, OpenAPI 3.1 duck-typing. |
25
+ | **HTTP Pipeline** | `packages/exisjs/src/server/` | `ExisRequest`, `ExisResponse`, lifecycle hooks (`onStart`, `onClose`), cookie parsing, proxy IP resolution. |
26
+ | **Folder Boundaries** | `packages/exisjs/src/router/boundary.ts` | Cascading directory configuration, CORS headers, security middleware, and directory-scoped DI providers. |
27
+ | **Decorators & OOP** | `packages/exisjs/src/decorators/` | `@Controller`, HTTP method decorators (`@Get`, `@Post`, `@RawBody`), `@Injectable`, `@Server`, `@Boundary`. |
28
+ | **Security & Middleware** | `packages/exisjs/src/middleware/` | `helmet()`, signed CSRF cookies, `hpp()`, CIDR `ipFilter()`, native `rateLimit()`, LRU `idempotency()`, streaming `upload()`. |
29
+ | **OpenAPI / Swagger** | `packages/exisjs/src/swagger/` | Interactive Swagger UI (`/docs`), OpenAPI 3.1 spec compiler from `tex` and Zod schemas. |
30
+ | **Telemetry & Observability** | `packages/exisjs/src/telemetry/` | Built-in OpenTelemetry tracing, span processors, and Prometheus metrics. |
31
+ | **Task Scheduling** | `packages/exisjs/src/cron/` | Drift-corrected background task scheduler (`cron()`, `@Cron()`). |
32
+ | **Testing Harness** | `packages/exisjs/src/testing/` | In-memory and HTTP integration test runner (`createTestApp`, `createTestContext`). |
20
33
 
21
34
  ---
22
35
 
23
- ## 2. Dual Paradigm: Functional & Class-Based (OOP) 🟢
24
-
25
- **What it is:** Two ways to define routing and handlers — `controller()`/`route.*()` factory functions, or `@Controller()`/`@Get()` class decorators — that compile down to the same internal `Route` representation.
26
-
27
- **How it's implemented:** Class decorators attach metadata to the class prototype via symbols (`Symbol.for('exisjs:...')`) without any `reflect-metadata` dependency. The router processes both paradigms through the exact same internal pipeline. Choose one paradigm per project.
36
+ ## 2. Request Lifecycle & Execution Pipeline
37
+
38
+ Every HTTP request flows through a deterministic execution pipeline:
39
+
40
+ ```text
41
+ Incoming HTTP Request (Node HTTP / uWS)
42
+ │
43
+ ▼
44
+ 1. Core Server Hook & Request Context Initialization (AsyncLocalStorage)
45
+ │
46
+ ▼
47
+ 2. Global Boundary & Middleware Pipeline (CORS, Helmet, Rate Limiter, IP Filter)
48
+ │
49
+ ▼
50
+ 3. Radix Tree Route Matching (static exact-match table, then tree walk)
51
+ │
52
+ ▼
53
+ 4. Scoped Folder Boundaries (Cascading boundary.ts configurations)
54
+ │
55
+ ▼
56
+ 5. Parameter Extraction & Schema Validation / Coercion (tex.* on Body, Query, Params)
57
+ │
58
+ ▼
59
+ 6. Controller Handler Execution (Functional handler or OOP controller method)
60
+ │
61
+ ▼
62
+ 7. Response Interceptors & Formatting (Fast serialization, ETag, Status Codes)
63
+ │
64
+ ▼
65
+ 8. Post-Response Tasks (after() deferred execution callbacks)
66
+ ```
67
+
68
+ ### Context & AsyncLocalStorage
69
+
70
+ The execution pipeline utilizes `AsyncLocalStorage` via `executionContext` (`packages/exisjs/src/di/inject.ts`). This provides request isolation across concurrent async operations, powering:
71
+ - Contextual `inject(Token)` without parameter passing.
72
+ - `req.buffer()` lazy memoization for streaming webhooks.
73
+ - Deferred post-response cleanup tasks.
28
74
 
29
75
  ---
30
76
 
31
- ## 3. The Context API & `AsyncLocalStorage` 🟢
32
-
33
- **What it is:** Access to the current request's `req`/`res`/app-scoped state from anywhere in the call graph without prop-drilling, plus `after()` for deferred post-response work.
34
-
35
- **How it's implemented:** `AsyncLocalStorage` maintains an active store per request containing `{ state, afterCallbacks, req, res, app, diCache }`. `inject()`, `getContext()`, and `after()` read from this store, guaranteeing request isolation across concurrent requests.
77
+ ## 3. Dual-Paradigm Architecture
78
+
79
+ ExisJS maintains 100% feature parity between **Functional** and **Class-Based (OOP)** paradigms. An application chooses one paradigm consistently.
80
+
81
+ ```text
82
+ ┌─────────────────────────────────────────────────────────────┐
83
+ │ Unified Pipeline │
84
+ │ (Validation Engine, Radix Dispatcher, OpenAPI Generator) │
85
+ └──────────────┬───────────────────────────────┬──────────────┘
86
+ ▲ ▲
87
+ │ │
88
+ ┌──────────┴──────────┐ ┌──────────┴──────────┐
89
+ │ Functional │ │ Class-Based │
90
+ │ controller() │ │ @Controller() │
91
+ │ route.get() │ │ @Get(), @Post() │
92
+ │ defineBoundary() │ │ @Boundary() │
93
+ │ exis({ onStart }) │ │ @Server() │
94
+ │ inject(Token) │ │ @Inject(Token) │
95
+ └─────────────────────┘ └─────────────────────┘
96
+ ```
97
+
98
+ Both paradigms compile down to identical internal `RouteDescriptor` structures registered in the route table.
36
99
 
37
100
  ---
38
101
 
39
- ## 4. Dependency Injection (`Container`) 🟢
40
-
41
- **What it is:** An IoC container supporting value, factory, and class providers, with singleton and request scoping.
42
-
43
- **How it's implemented:** `Container` holds provider definitions and a singleton cache. Inside request handlers, `inject(token)` resolves dependencies dynamically using the request's context store.
102
+ ## 4. Why There Is No Native Engine
44
103
 
45
- ---
46
-
47
- ## 5. Folder-Scoped Boundaries (`boundary.ts`) 🟢
104
+ Earlier versions shipped a Rust N-API package (`@exisjs/rs`). Measured per call, it was slower than plain JavaScript for every hot-path job it handled: route lookup (~7x), JSON parsing (~7x), validation, and cookie parsing, because converting values across the N-API boundary costs more than the work itself. It also meant prebuilt binaries for eight platforms and install failures elsewhere. It was removed; the TypeScript implementations are the only implementations.
48
105
 
49
- **What it is:** Folder-level configuration and auto-detected request pipelines that apply to a directory and all its subdirectories recursively.
106
+ Guidelines for keeping the core fast:
50
107
 
51
- **How it's implemented:**
52
- 1. **Config:** Export `config = defineBoundary(...)` (functional) or `@Boundary(...)` (OOP) to define CORS, headers, exclusions, and DI providers for that directory tree.
53
- 2. **Auto-Detected Pipeline:**
54
- - Functions matching `(req, res, next)` are auto-detected as sequential chain steps.
55
- - The default export `(ctx, next)` (functional) or class method `handle(ctx, next)` (OOP) is auto-detected as an onion wrapper around all inner steps and child routes.
108
+ - Precompute at startup (route tables, compiled validators, static headers); do as little as possible per request.
109
+ - Avoid per-request closures, listeners, and object pools; short-lived objects are cheap for V8.
110
+ - Run CPU-heavy work (compression, hashing) through Node's async built-ins so it leaves the event loop.
56
111
 
57
112
  ---
58
113
 
59
- ## 6. Native Validation Engine (`tex`) 🟢
60
-
61
- **What it is:** A dependency-free, high-performance schema validator powered by Rust (`@exisjs/rs`) with strict typing, auto-coercion, and structured error responses.
114
+ ## 5. Dependency Injection Architecture
62
115
 
63
- **How it's implemented:** `tex` provides primitives (`string`, `number`, `boolean`, `email`, `object`, `array`, `enum`) and integrates directly with `route.*()` configs and `@Body()`. Input sanitization via `exisjs/sanitize` can be chained synchronously via `.sanitize(...)` before validation occurs.
116
+ The IoC container (`packages/exisjs/src/di/`) supports multiple provider token strategies:
64
117
 
65
- ---
66
-
67
- ## 7. Production Build & Manifest Pipeline 🟢
118
+ 1. **Class Providers**: `@Injectable()` decorated classes; constructor parameters are injected by `@Inject(Token)` (no reliance on emitted type metadata).
119
+ 2. **Value Providers (`useValue`)**: Static configuration, database instances, or constants.
120
+ 3. **Factory Providers (`useFactory`)**: Dynamic factory functions with dependency injection (`inject: [TokenA, TokenB]`).
121
+ 4. **Alias Providers (`useExisting`)**: Token aliases mapping to an existing provider instance.
68
122
 
69
- - **esbuild Compilation:** `exis build` bundles and transpiles TypeScript rapidly using esbuild, resolving path aliases (`@/*`).
70
- - **Route Manifest Generation:** Scans routes and writes `.exis/routes-manifest.js` to enable O(1) boot in production without recursive filesystem scanning.
71
- - **Fast Serialization:** Validated route responses integrate with JIT fast serializers.
123
+ ```typescript
124
+ // Custom Provider Registration
125
+ app.provide('DATABASE_CLIENT', {
126
+ useFactory: (url: string) => createClient(url),
127
+ inject: ['DATABASE_URL'],
128
+ })
129
+ ```
72
130
 
73
131
  ---
74
132
 
75
- ## 8. Request & Response Engine 🟢
133
+ ## 6. Validation & Schema Engine (`tex`)
76
134
 
77
- - **Request:** Native JSON body parsing and cookie parsing delegated to Rust off-heap bindings in `@exisjs/rs`, busboy for multipart form data, and robust proxy trust resolution.
78
- - **Response:** Chainable status, header, and cookie APIs, automatic ETag generation (weak ETags), and JSON auto-serialization.
135
+ The validation subsystem provides a zero-dependency schema builder and parser:
79
136
 
80
- ---
81
-
82
- ## 9. Global Error Handling 🟢
83
-
84
- Structured `HttpError` hierarchy (`badRequest`, `unauthorized`, `forbidden`, `notFound`, etc.) with consistent JSON error envelopes and dev-mode formatting.
137
+ - **Type AST**: `TexType` instances represent individual property constraints (`string`, `number`, `boolean`, `date`, `object`, `array`, `enum`, `discriminatedUnion`).
138
+ - **Coercion**: String parameter conversion via `tex.coerce.*` for query and path parameters.
139
+ - **Transformations**: Output reshaping using `.transform((val) => ...)` at the field and object level.
140
+ - **OpenAPI 3.1 Extraction**: Recursive duck typing translates `tex` schemas and external validator schemas (e.g. Zod) directly into OpenAPI 3.1 JSON Schemas.
85
141
 
86
142
  ---
87
143
 
88
- ## 10. Core Middleware Suite 🟢
89
-
90
- - **Security:** `helmet()`, `csrf()`, `hpp()`, `dbSanitize()`, `timeout()`.
91
- - **Traffic & Performance:** In-memory off-heap `rateLimit()`, `idempotent()` (keyed response caching in off-heap memory), `dedupe()`, and `backpressure()`.
92
- - **Utilities:** `cors()`, `requestId()`, `requestLogger()`, `serveStatic()`.
93
-
94
- ---
144
+ ## 7. Build Pipeline & Manifest Generation
95
145
 
96
- ## 11. Core Boundary Contract
97
-
98
- | Subsystem | Location | Scope |
99
- |---|---|---|
100
- | Routing & Boundaries | `exisjs/router` | Core runtime |
101
- | Schema & Validation | `exisjs/validator` (`tex`) | Core runtime |
102
- | Data Sanitization | `exisjs/sanitize` | Core runtime |
103
- | Dependency Injection | `exisjs/di` | Core runtime |
104
- | Core Middleware | `exisjs/middleware` | Core runtime |
105
- | CLI & Scaffolding | `exisjs/cli` | Core tooling |
106
- | Database & ORM | `@exisjs/database` | Extracted package |
107
- | Cache & Redis | `@exisjs/cache` | Extracted package |
108
- | Background Queues | `@exisjs/queue` | Extracted package |
109
- | WebSockets | `@exisjs/websocket` | Extracted package |
110
- | Auth & OAuth | `@exisjs/auth` | Extracted package |
146
+ In production mode:
147
+ 1. `exisjs build` compiles TypeScript files using `esbuild`, bundling path aliases (`@/*`).
148
+ 2. `RouteScanner` crawls `src/http/*` and writes a static route manifest to `.exis/routes-manifest.js`.
149
+ 3. In production (`exisjs start`), the server loads the precompiled manifest for $O(1)$ startup without directory traversals.
@@ -1,36 +1,69 @@
1
- # Benchmark Results
1
+ # Benchmarks
2
2
 
3
- ### System Information
4
- - **OS:** win32 (x64)
5
- - **CPU:** 11th Gen Intel(R) Core(TM) i5-11400H @ 2.70GHz (12 cores)
6
- - **RAM:** 16 GB
7
- - **Node:** v26.3.0
3
+ > Generated by `npm run bench -- --write` on 2026-10-10. Methodology and how to reproduce: [bench/README.md](../bench/README.md).
8
4
 
9
- ### Test Configuration
10
- - **Tool:** autocannon ^8.0.0
11
- - **Connections:** 100, **Duration:** 10s, **Pipelining:** 1 (no pipelining)
12
- - **Trials:** 3 per framework, order randomized each trial, median reported
13
- - **Warmup:** 2s untimed warmup run before each timed trial
14
- - **Cores:** single-core, no clustering, for all four frameworks
15
- - **Framework versions:** Express ^5.2.1, Fastify ^5.12.5, Hono ^4.13.8, ExisJS 0.7.3
5
+ ## Environment
16
6
 
17
- ### Performance Metrics
7
+ | | |
8
+ | :--- | :--- |
9
+ | OS | Windows_NT 10.0.26300 (x64) |
10
+ | CPU | 11th Gen Intel(R) Core(TM) i5-11400H @ 2.70GHz (12 logical cores) |
11
+ | RAM | 16 GB |
12
+ | Node.js | v26.3.0 |
13
+ | Versions | exisjs 0.8.0, fastify 5.12.5, hono 4.13.11 (@hono/node-server 2.1.3), express 5.2.1 |
14
+ | Load | autocannon 8.0.0, 100 connections, pipelining 1, 10s per run after 3s warmup |
15
+ | Rounds | 3, targets in random order each round, medians reported |
18
16
 
19
- | Framework | Req/Sec (median) | Latency avg (ms) | Latency p50 (ms) | Latency p99 (ms) | Errors | Server backend |
20
- |---|---|---|---|---|---|---|
21
- | Express | 24742.55 | 3.42 | 3.00 | 5.00 | 0 | n/a |
22
- | Fastify | 41237.82 | 2.06 | 2.00 | 3.00 | 0 | n/a |
23
- | Hono | 43640.73 | 2.01 | 2.00 | 3.00 | 0 | n/a |
24
- | Exis JS | 47436.80 | 1.48 | 1.00 | 3.00 | 0 | uws |
17
+ Load generator and servers share one machine; every server runs single-process (no clustering).
25
18
 
26
- ### Handler Parity Note
19
+ ## GET /json (static route, small JSON)
27
20
 
28
- ExisJS's handler in this benchmark declares a `response` JSON schema, which the framework uses to validate and serialize the response. Express, Fastify, and Hono's handlers here do not declare an equivalent schema. This makes ExisJS's numbers more notable if it still leads, since it's doing strictly more work per request — but it means this is not a pure routing-only comparison. A schema-stripped variant should be run separately if a fully symmetric comparison is needed.
21
+ | Target | Req/s | vs node:http | p50 (ms) | p99 (ms) | Server CPU / req (µs) | RSS (MB) | Errors |
22
+ | :--- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
23
+ | ExisJS (uws) | 50,397 | 113% | 1.0 | 2.0 | 18.9 | 124 | 0 |
24
+ | node:http (baseline) | 44,739 | 100% | 2.0 | 3.0 | 22.3 | 88 | 0 |
25
+ | Fastify | 41,677 | 93% | 2.0 | 3.0 | 24.1 | 99 | 0 |
26
+ | Hono | 40,574 | 91% | 2.0 | 3.0 | 24.7 | 94 | 0 |
27
+ | ExisJS (node) | 39,641 | 89% | 2.0 | 3.0 | 25.3 | 131 | 0 |
28
+ | Express | 27,340 | 61% | 3.0 | 5.0 | 36.5 | 97 | 0 |
29
29
 
30
- ### Understanding the Results
30
+ ## GET /users/:id?fields= (path param + query)
31
31
 
32
- You may notice that in our microbenchmarks (routing only), ExisJS's Radix Tree performs route lookups in ~3ns compared to Fastify's ~130ns (a ~40x difference). However, in the full HTTP throughput benchmark above, the gap narrows substantially.
32
+ | Target | Req/s | vs node:http | p50 (ms) | p99 (ms) | Server CPU / req (µs) | RSS (MB) | Errors |
33
+ | :--- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
34
+ | ExisJS (uws) | 50,099 | 113% | 1.0 | 3.0 | 19.4 | 124 | 0 |
35
+ | node:http (baseline) | 44,385 | 100% | 2.0 | 3.0 | 22.6 | 88 | 0 |
36
+ | Fastify | 40,784 | 92% | 2.0 | 3.0 | 24.3 | 99 | 0 |
37
+ | Hono | 40,286 | 91% | 2.0 | 3.0 | 25.0 | 94 | 0 |
38
+ | ExisJS (node) | 38,618 | 87% | 2.0 | 3.0 | 25.9 | 134 | 0 |
39
+ | Express | 26,115 | 59% | 3.0 | 5.0 | 38.1 | 101 | 0 |
33
40
 
34
- **Why?** Route lookup is only a microscopic fraction of a full HTTP request lifecycle. The vast majority of time is spent on Node.js I/O, socket management, header parsing, and JSON serialization. While our router is objectively faster in isolation, overall framework throughput is bounded by the same underlying Node.js stream primitives every framework here is built on.
41
+ ## POST /echo (parse + serialize JSON body)
35
42
 
36
- > *Note: These benchmarks were run locally on Windows, single-core, no clustering. For production-representative numbers, they should be reproduced on isolated Linux server instances with clustering configuration matching your actual deployment.*
43
+ | Target | Req/s | vs node:http | p50 (ms) | p99 (ms) | Server CPU / req (µs) | RSS (MB) | Errors |
44
+ | :--- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
45
+ | ExisJS (uws) | 42,254 | 124% | 2.0 | 3.0 | 23.7 | 132 | 0 |
46
+ | node:http (baseline) | 34,182 | 100% | 2.0 | 4.0 | 29.3 | 89 | 0 |
47
+ | Hono | 29,994 | 88% | 3.0 | 4.0 | 33.6 | 123 | 0 |
48
+ | Fastify | 29,335 | 86% | 3.0 | 4.0 | 34.1 | 128 | 0 |
49
+ | ExisJS (node) | 27,939 | 82% | 3.0 | 4.0 | 35.9 | 135 | 0 |
50
+ | Express | 19,124 | 56% | 5.0 | 7.0 | 52.7 | 125 | 0 |
51
+
52
+ ## POST /users (body validation)
53
+
54
+ | Target | Req/s | vs node:http | p50 (ms) | p99 (ms) | Server CPU / req (µs) | RSS (MB) | Errors |
55
+ | :--- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
56
+ | ExisJS (uws) | 42,396 | 121% | 2.0 | 3.0 | 23.5 | 133 | 0 |
57
+ | node:http (baseline) | 34,915 | 100% | 2.0 | 4.0 | 28.6 | 116 | 0 |
58
+ | Hono | 31,290 | 90% | 3.0 | 3.0 | 32.0 | 123 | 0 |
59
+ | Fastify | 30,463 | 87% | 3.0 | 4.0 | 33.1 | 129 | 0 |
60
+ | ExisJS (node) | 28,549 | 82% | 3.0 | 4.0 | 35.1 | 136 | 0 |
61
+ | Express | 20,192 | 58% | 4.0 | 6.0 | 49.4 | 129 | 0 |
62
+
63
+ ## Reading these numbers
64
+
65
+ - **Server CPU / req** is the most reliable column for comparing frameworks: it counts only CPU the server process spent, so load-generator contention and OS scheduling noise affect it far less than req/s.
66
+ - **vs node:http** compares with a hand-rolled `node:http` server, the practical ceiling for anything built on Node's HTTP stack. `ExisJS (uws)` uses uWebSockets.js and is not bound by that ceiling.
67
+ - POST /users validation differs by framework: node:http (baseline): hand-written; ExisJS (node): tex schema; ExisJS (uws): tex schema; Fastify: JSON schema (Ajv); Hono: hand-written; Express: hand-written.
68
+ - ExisJS responses carry an `X-Request-Id` header that the other frameworks do not add.
69
+ - Laptop and desktop results vary by ±10–20% between runs. Compare numbers from the same run, and use isolated Linux machines (load generator on a separate host) for publishable figures.
@@ -4,7 +4,7 @@
4
4
  </p>
5
5
 
6
6
  <p align="center">
7
- <b>Ultra-high-performance TypeScript web framework with a raw Rust engine under the hood.</b>
7
+ <b>Fast, lightweight TypeScript web framework with no native dependencies.</b>
8
8
  </p>
9
9
 
10
10
  <p align="center">
@@ -13,6 +13,8 @@ Any `boundary.ts` automatically applies to every route within its directory and
13
13
 
14
14
  ---
15
15
 
16
+ > Boundaries apply the same way in development and in production builds. If a `boundary.ts` file fails to load, the routes beneath it are not mounted, so a broken boundary can never leave routes unprotected.
17
+
16
18
  ## Anatomy of a Boundary
17
19
 
18
20
  A `boundary.ts` consists of two distinct components:
@@ -227,8 +227,7 @@ npx exisjs doctor
227
227
  ```
228
228
 
229
229
  ### Diagnostic Checks
230
- - **Runtime Environment**: Validates Node.js version compatibility (Node.js 18+).
231
- - **Native Acceleration**: Checks whether `@exisjs/rs` compiled native binaries are active.
230
+ - **Runtime Environment**: Validates Node.js version compatibility (Node.js 20+).
232
231
  - **Project Structure**: Verifies `package.json`, `tsconfig.json`, and application entry points.
233
232
  - **Route Integrity**: Audits `src/http/` directory for naming conventions and orphan files.
234
233
 
@@ -91,7 +91,7 @@ npx exisjs routes
91
91
  | `test` | | Runs test suites using the native `node:test` runner. |
92
92
  | `run` | `exec` | Executes a script or external command with ExisJS `.env` files pre-loaded. |
93
93
  | `console` | `repl` | Launches an interactive Node.js REPL loaded with the application context. |
94
- | `doctor` | | Audits project health, native Rust bindings, configuration, and route structure. |
94
+ | `doctor` | | Audits project health, configuration, and route structure. |
95
95
  | `info` | | Displays runtime environment, Node.js version, platform, and OS architecture. |
96
96
  | `exports` | | Lists all framework public subpath export modules. |
97
97
  | `init` | | Initializes an ExisJS application in the current working directory. |
@@ -139,14 +139,14 @@ export default defineConfig({
139
139
  | `ssl` | `{ key: string \| Buffer, cert: string \| Buffer }` | `undefined` | SSL certificate credentials for native HTTPS. |
140
140
  | `http2` | `boolean` | `true` | Enables HTTP/2 (active when SSL is configured). |
141
141
  | `redirectHttp` | `boolean \| number` | `false` | Automatically redirects plaintext HTTP traffic to HTTPS. |
142
- | `trustProxy` | `boolean \| number` | `false` | Respects `X-Forwarded-For` and `X-Forwarded-Proto` proxy headers. |
142
+ | `trustProxy` | `boolean \| number` | `false` | Trust proxy headers. `true` trusts every hop (including CDN headers); a number `N` trusts the N closest hops, counting the socket peer. |
143
143
  | `keepAlive` | `boolean \| KeepAliveConfig` | `false` | Configures socket keep-alive (`timeoutMs`, `headersTimeoutMs`, `maxRequests`). |
144
144
 
145
145
  ### Middleware Defaults & Security
146
146
 
147
147
  | Option | Type | Default | Description |
148
148
  | :--- | :--- | :--- | :--- |
149
- | `cors` | `boolean \| CorsConfig` | `{ origin: '*' }` | Global CORS policy. Can be overridden in boundaries or routes. |
149
+ | `cors` | `boolean \| CorsConfig` | `{ origin: '*' }` | Global CORS policy. Can be overridden in boundaries or routes. `credentials: true` requires explicit origins: with `origin: '*'` it is ignored and a warning is logged, because browsers reject that combination. |
150
150
  | `helmet` | `boolean \| HelmetConfig` | `{ enabled: true }` | Security headers (CSP, X-Frame-Options, HSTS). |
151
151
  | `compression` | `boolean` | `false` | Gzip/Brotli HTTP response compression. |
152
152
  | `bodyLimit` | `number` | `10485760` (10MB) | Maximum request payload body size in bytes. |
@@ -161,7 +161,7 @@ export default defineConfig({
161
161
  | `logger` | `boolean \| LoggerConfig` | `false` | Pino logger settings (`level`, `pretty`, `redact`). |
162
162
  | `debugRouting` | `boolean` | `false` | Outputs detailed route resolution logs per request in development. |
163
163
  | `asyncContext` | `boolean` | `false` | Enables `AsyncLocalStorage` context tracking (`getContext()`). |
164
- | `docs` / `swagger` | `boolean \| SwaggerConfig` | `{ enabled: false }` | OpenAPI 3.1 specification and Swagger UI endpoint generation. |
164
+ | `docs` / `swagger` | `boolean \| SwaggerConfig` | `{ enabled: false }` | OpenAPI 3.1 specification and Swagger UI endpoint generation. Served in every environment when enabled; use `enabled: process.env.NODE_ENV !== 'production'` to hide it in production. |
165
165
  | `healthcheck` | `boolean \| HealthCheckConfig` | `{ enabled: false }` | System health endpoint (`path: '/_health'`). |
166
166
  | `metrics` | `boolean \| MetricsConfig` | `{ enabled: false }` | Prometheus metrics endpoint (`path: '/metrics'`). |
167
167
  | `telemetry` | `boolean \| TelemetryConfig` | `{ enabled: false }` | OpenTelemetry tracing and metrics export. |
@@ -240,16 +240,29 @@ export default defineConfig({
240
240
  ExisJS automatically listens for `SIGTERM` and `SIGINT` signals in containerized environments:
241
241
 
242
242
  1. Closes the HTTP server listener to stop accepting incoming traffic.
243
- 2. Closes idle keep-alive sockets (`server.closeIdleConnections()`).
244
- 3. Executes registered `onStop(app)` hooks to disconnect databases, Redis pools, or message brokers.
243
+ 2. Closes idle keep-alive sockets and waits for in-flight requests to finish (up to the shutdown timeout).
244
+ 3. Runs shutdown hooks in order: `app.onShutdown()` hooks (including `onDestroy` / `onApplicationShutdown(signal)` on injectable services), then `onClose` hooks.
245
+ 4. Disconnects every database registered with `registerDatabase()`, once each.
246
+ 5. Stops cron jobs and exits.
247
+
248
+ Use `onClose` for resources ExisJS does not manage, such as browser sessions, queues or worker threads:
245
249
 
246
250
  ```typescript filename="src/http/server.ts"
247
251
  import { exis } from 'exisjs'
248
- import { db } from '../database/db'
252
+ import { scraper } from '../workers/scraper'
249
253
 
250
254
  export default exis({
251
- async onStop(app) {
252
- await db.disconnect()
253
- }
255
+ async onStart(app) {
256
+ // Receives the signal name ('SIGTERM', 'SIGINT') when one triggered the shutdown
257
+ app.onShutdown(async (signal) => {
258
+ app.log.info({ signal }, 'stopping background workers')
259
+ await scraper.stop()
260
+ })
261
+ },
262
+ async onClose(app) {
263
+ await scraper.closeBrowser()
264
+ },
254
265
  })
255
266
  ```
267
+
268
+ Databases registered with `registerDatabase()` are disconnected automatically after requests have drained. Do not also call `disconnect()` on them in a hook. Each hook has a time limit (half the shutdown timeout, at least 1 second), so a hook that hangs cannot block the process from exiting.
@@ -125,8 +125,8 @@ import { LoggerService } from '../common/logger.service'
125
125
  @Injectable()
126
126
  export default class MaintenanceService {
127
127
  constructor(
128
- private readonly db: DatabaseService,
129
- private readonly logger: LoggerService
128
+ @Inject(DatabaseService) private readonly db: DatabaseService,
129
+ @Inject(LoggerService) private readonly logger: LoggerService
130
130
  ) {}
131
131
 
132
132
  @Cron(CronExpression.EVERY_DAY_AT_MIDNIGHT, {