exisjs 0.7.5 → 0.7.7

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 (321) hide show
  1. package/dist/cli/commands/build.d.ts.map +1 -1
  2. package/dist/cli/commands/build.js +12 -0
  3. package/dist/cli/commands/build.js.map +1 -1
  4. package/dist/cli/commands/clean.d.ts +5 -0
  5. package/dist/cli/commands/clean.d.ts.map +1 -0
  6. package/dist/cli/commands/clean.js +30 -0
  7. package/dist/cli/commands/clean.js.map +1 -0
  8. package/dist/cli/commands/dev.d.ts.map +1 -1
  9. package/dist/cli/commands/dev.js +171 -86
  10. package/dist/cli/commands/dev.js.map +1 -1
  11. package/dist/cli/commands/generate.d.ts +6 -1
  12. package/dist/cli/commands/generate.d.ts.map +1 -1
  13. package/dist/cli/commands/generate.js +57 -2
  14. package/dist/cli/commands/generate.js.map +1 -1
  15. package/dist/cli/commands/start.d.ts.map +1 -1
  16. package/dist/cli/commands/start.js +54 -16
  17. package/dist/cli/commands/start.js.map +1 -1
  18. package/dist/cli/index.js +26 -3
  19. package/dist/cli/index.js.map +1 -1
  20. package/dist/cli/manifest.d.ts +1 -0
  21. package/dist/cli/manifest.d.ts.map +1 -1
  22. package/dist/cli/manifest.js +264 -33
  23. package/dist/cli/manifest.js.map +1 -1
  24. package/dist/cli/resolve-aliases.d.ts +1 -1
  25. package/dist/cli/resolve-aliases.d.ts.map +1 -1
  26. package/dist/cli/resolve-aliases.js +30 -13
  27. package/dist/cli/resolve-aliases.js.map +1 -1
  28. package/dist/config/config.d.ts +3 -1
  29. package/dist/config/config.d.ts.map +1 -1
  30. package/dist/config/config.js +9 -0
  31. package/dist/config/config.js.map +1 -1
  32. package/dist/config/types.d.ts +6 -0
  33. package/dist/config/types.d.ts.map +1 -1
  34. package/dist/cron/expressions.d.ts +45 -0
  35. package/dist/cron/expressions.d.ts.map +1 -0
  36. package/dist/cron/expressions.js +87 -0
  37. package/dist/cron/expressions.js.map +1 -0
  38. package/dist/cron/index.d.ts +6 -0
  39. package/dist/cron/index.d.ts.map +1 -0
  40. package/dist/cron/index.js +22 -0
  41. package/dist/cron/index.js.map +1 -0
  42. package/dist/cron/job.d.ts +50 -0
  43. package/dist/cron/job.d.ts.map +1 -0
  44. package/dist/cron/job.js +247 -0
  45. package/dist/cron/job.js.map +1 -0
  46. package/dist/cron/manager.d.ts +105 -0
  47. package/dist/cron/manager.d.ts.map +1 -0
  48. package/dist/cron/manager.js +245 -0
  49. package/dist/cron/manager.js.map +1 -0
  50. package/dist/cron/parser.d.ts +22 -0
  51. package/dist/cron/parser.d.ts.map +1 -0
  52. package/dist/cron/parser.js +269 -0
  53. package/dist/cron/parser.js.map +1 -0
  54. package/dist/cron/types.d.ts +76 -0
  55. package/dist/cron/types.d.ts.map +1 -0
  56. package/dist/cron/types.js +3 -0
  57. package/dist/cron/types.js.map +1 -0
  58. package/dist/decorators/constants.d.ts +2 -0
  59. package/dist/decorators/constants.d.ts.map +1 -1
  60. package/dist/decorators/constants.js +3 -1
  61. package/dist/decorators/constants.js.map +1 -1
  62. package/dist/decorators/core.d.ts +29 -11
  63. package/dist/decorators/core.d.ts.map +1 -1
  64. package/dist/decorators/core.js +49 -11
  65. package/dist/decorators/core.js.map +1 -1
  66. package/dist/decorators/cron.d.ts +57 -0
  67. package/dist/decorators/cron.d.ts.map +1 -0
  68. package/dist/decorators/cron.js +143 -0
  69. package/dist/decorators/cron.js.map +1 -0
  70. package/dist/decorators/index.d.ts +2 -0
  71. package/dist/decorators/index.d.ts.map +1 -1
  72. package/dist/decorators/index.js +2 -0
  73. package/dist/decorators/index.js.map +1 -1
  74. package/dist/decorators/middleware.d.ts +65 -2
  75. package/dist/decorators/middleware.d.ts.map +1 -1
  76. package/dist/decorators/middleware.js +148 -62
  77. package/dist/decorators/middleware.js.map +1 -1
  78. package/dist/decorators/params.d.ts +102 -2
  79. package/dist/decorators/params.d.ts.map +1 -1
  80. package/dist/decorators/params.js +105 -3
  81. package/dist/decorators/params.js.map +1 -1
  82. package/dist/decorators/response.d.ts.map +1 -1
  83. package/dist/decorators/response.js +32 -22
  84. package/dist/decorators/response.js.map +1 -1
  85. package/dist/decorators/routing.d.ts +81 -16
  86. package/dist/decorators/routing.d.ts.map +1 -1
  87. package/dist/decorators/routing.js +81 -16
  88. package/dist/decorators/routing.js.map +1 -1
  89. package/dist/di/container.d.ts.map +1 -1
  90. package/dist/di/container.js +6 -1
  91. package/dist/di/container.js.map +1 -1
  92. package/dist/docs/content/cli/commands.mdx +1 -1
  93. package/dist/docs/content/controllers.mdx +127 -10
  94. package/dist/docs/content/cron.mdx +196 -0
  95. package/dist/docs/content/decorators.mdx +22 -4
  96. package/dist/docs/content/errors.mdx +58 -9
  97. package/dist/docs/content/introduction.mdx +7 -7
  98. package/dist/docs/content/middleware.mdx +269 -6
  99. package/dist/docs/content/requests.mdx +180 -6
  100. package/dist/docs/content/responses.mdx +283 -32
  101. package/dist/docs/content/routing.mdx +46 -0
  102. package/dist/docs/content/swagger.mdx +228 -0
  103. package/dist/docs/content/validation.mdx +190 -11
  104. package/dist/docs/reference/context.mdx +11 -0
  105. package/dist/docs/reference/cron.mdx +300 -0
  106. package/dist/docs/reference/decorators.mdx +22 -4
  107. package/dist/docs/reference/error.mdx +88 -0
  108. package/dist/docs/reference/logger.mdx +175 -43
  109. package/dist/docs/reference/middleware.mdx +31 -0
  110. package/dist/docs/reference/router.mdx +22 -0
  111. package/dist/docs/reference/swagger.mdx +143 -0
  112. package/dist/docs/reference/validator.mdx +83 -23
  113. package/dist/error/errors.d.ts.map +1 -1
  114. package/dist/error/errors.js +95 -43
  115. package/dist/error/errors.js.map +1 -1
  116. package/dist/error/index.d.ts +1 -0
  117. package/dist/error/index.d.ts.map +1 -1
  118. package/dist/error/index.js +11 -1
  119. package/dist/error/index.js.map +1 -1
  120. package/dist/error/overlay.d.ts +42 -0
  121. package/dist/error/overlay.d.ts.map +1 -0
  122. package/dist/error/overlay.js +306 -0
  123. package/dist/error/overlay.js.map +1 -0
  124. package/dist/index.d.ts +1 -0
  125. package/dist/index.d.ts.map +1 -1
  126. package/dist/index.js +22 -1
  127. package/dist/index.js.map +1 -1
  128. package/dist/lib/start-server.js +33 -7
  129. package/dist/lib/start-server.js.map +1 -1
  130. package/dist/logger/index.d.ts +1 -1
  131. package/dist/logger/index.d.ts.map +1 -1
  132. package/dist/logger/index.js +9 -1
  133. package/dist/logger/index.js.map +1 -1
  134. package/dist/middleware/guard.d.ts +2 -2
  135. package/dist/middleware/guard.d.ts.map +1 -1
  136. package/dist/middleware/guard.js.map +1 -1
  137. package/dist/middleware/ip-filter.d.ts +1 -0
  138. package/dist/middleware/ip-filter.d.ts.map +1 -1
  139. package/dist/middleware/ip-filter.js +2 -0
  140. package/dist/middleware/ip-filter.js.map +1 -1
  141. package/dist/middleware/middleware.d.ts +2 -2
  142. package/dist/middleware/middleware.d.ts.map +1 -1
  143. package/dist/middleware/middleware.js +20 -2
  144. package/dist/middleware/middleware.js.map +1 -1
  145. package/dist/middleware/security.d.ts +43 -1
  146. package/dist/middleware/security.d.ts.map +1 -1
  147. package/dist/middleware/security.js +101 -0
  148. package/dist/middleware/security.js.map +1 -1
  149. package/dist/response/index.d.ts +229 -6
  150. package/dist/response/index.d.ts.map +1 -1
  151. package/dist/response/index.js +272 -2
  152. package/dist/response/index.js.map +1 -1
  153. package/dist/router/boundary.d.ts +41 -11
  154. package/dist/router/boundary.d.ts.map +1 -1
  155. package/dist/router/boundary.js +24 -2
  156. package/dist/router/boundary.js.map +1 -1
  157. package/dist/router/controller-registrar.d.ts.map +1 -1
  158. package/dist/router/controller-registrar.js +108 -4
  159. package/dist/router/controller-registrar.js.map +1 -1
  160. package/dist/router/index.d.ts +2 -2
  161. package/dist/router/index.d.ts.map +1 -1
  162. package/dist/router/index.js +2 -1
  163. package/dist/router/index.js.map +1 -1
  164. package/dist/router/route-builder.d.ts +262 -65
  165. package/dist/router/route-builder.d.ts.map +1 -1
  166. package/dist/router/route-builder.js +181 -23
  167. package/dist/router/route-builder.js.map +1 -1
  168. package/dist/router/route-scanner.d.ts +6 -0
  169. package/dist/router/route-scanner.d.ts.map +1 -1
  170. package/dist/router/route-scanner.js +71 -792
  171. package/dist/router/route-scanner.js.map +1 -1
  172. package/dist/router/router.d.ts.map +1 -1
  173. package/dist/router/router.js +62 -17
  174. package/dist/router/router.js.map +1 -1
  175. package/dist/router/scanner/boundary-loader.d.ts +18 -0
  176. package/dist/router/scanner/boundary-loader.d.ts.map +1 -0
  177. package/dist/router/scanner/boundary-loader.js +539 -0
  178. package/dist/router/scanner/boundary-loader.js.map +1 -0
  179. package/dist/router/scanner/cron-mounter.d.ts +15 -0
  180. package/dist/router/scanner/cron-mounter.d.ts.map +1 -0
  181. package/dist/router/scanner/cron-mounter.js +216 -0
  182. package/dist/router/scanner/cron-mounter.js.map +1 -0
  183. package/dist/router/scanner/error-mounter.d.ts +14 -0
  184. package/dist/router/scanner/error-mounter.d.ts.map +1 -0
  185. package/dist/router/scanner/error-mounter.js +200 -0
  186. package/dist/router/scanner/error-mounter.js.map +1 -0
  187. package/dist/router/scanner/fs-scanner.d.ts +25 -0
  188. package/dist/router/scanner/fs-scanner.d.ts.map +1 -0
  189. package/dist/router/scanner/fs-scanner.js +115 -0
  190. package/dist/router/scanner/fs-scanner.js.map +1 -0
  191. package/dist/router/scanner/functional-compiler.d.ts +9 -0
  192. package/dist/router/scanner/functional-compiler.d.ts.map +1 -0
  193. package/dist/router/scanner/functional-compiler.js +233 -0
  194. package/dist/router/scanner/functional-compiler.js.map +1 -0
  195. package/dist/router/scanner/index.d.ts +9 -0
  196. package/dist/router/scanner/index.d.ts.map +1 -0
  197. package/dist/router/scanner/index.js +19 -0
  198. package/dist/router/scanner/index.js.map +1 -0
  199. package/dist/router/types.d.ts +23 -0
  200. package/dist/router/types.d.ts.map +1 -1
  201. package/dist/server/app.d.ts +3 -0
  202. package/dist/server/app.d.ts.map +1 -1
  203. package/dist/server/app.js +13 -0
  204. package/dist/server/app.js.map +1 -1
  205. package/dist/server/bootstrapper.d.ts.map +1 -1
  206. package/dist/server/bootstrapper.js +91 -30
  207. package/dist/server/bootstrapper.js.map +1 -1
  208. package/dist/server/cluster.d.ts.map +1 -1
  209. package/dist/server/cluster.js +13 -2
  210. package/dist/server/cluster.js.map +1 -1
  211. package/dist/server/context.d.ts +8 -0
  212. package/dist/server/context.d.ts.map +1 -1
  213. package/dist/server/context.js +50 -6
  214. package/dist/server/context.js.map +1 -1
  215. package/dist/server/helpers/body-parser.d.ts +18 -0
  216. package/dist/server/helpers/body-parser.d.ts.map +1 -0
  217. package/dist/server/helpers/body-parser.js +246 -0
  218. package/dist/server/helpers/body-parser.js.map +1 -0
  219. package/dist/server/helpers/cookie.d.ts +4 -0
  220. package/dist/server/helpers/cookie.d.ts.map +1 -0
  221. package/dist/server/helpers/cookie.js +61 -0
  222. package/dist/server/helpers/cookie.js.map +1 -0
  223. package/dist/server/helpers/etag.d.ts +3 -0
  224. package/dist/server/helpers/etag.d.ts.map +1 -0
  225. package/dist/server/helpers/etag.js +25 -0
  226. package/dist/server/helpers/etag.js.map +1 -0
  227. package/dist/server/helpers/index.d.ts +6 -0
  228. package/dist/server/helpers/index.d.ts.map +1 -0
  229. package/dist/server/helpers/index.js +21 -0
  230. package/dist/server/helpers/index.js.map +1 -0
  231. package/dist/server/helpers/ip.d.ts +9 -0
  232. package/dist/server/helpers/ip.d.ts.map +1 -0
  233. package/dist/server/helpers/ip.js +62 -0
  234. package/dist/server/helpers/ip.js.map +1 -0
  235. package/dist/server/helpers/stream.d.ts +4 -0
  236. package/dist/server/helpers/stream.d.ts.map +1 -0
  237. package/dist/server/helpers/stream.js +193 -0
  238. package/dist/server/helpers/stream.js.map +1 -0
  239. package/dist/server/lifecycle.d.ts +22 -0
  240. package/dist/server/lifecycle.d.ts.map +1 -0
  241. package/dist/server/lifecycle.js +106 -0
  242. package/dist/server/lifecycle.js.map +1 -0
  243. package/dist/server/request-handler.d.ts +1 -0
  244. package/dist/server/request-handler.d.ts.map +1 -1
  245. package/dist/server/request-handler.js +27 -17
  246. package/dist/server/request-handler.js.map +1 -1
  247. package/dist/server/request.d.ts +1 -139
  248. package/dist/server/request.d.ts.map +1 -1
  249. package/dist/server/request.js +37 -433
  250. package/dist/server/request.js.map +1 -1
  251. package/dist/server/response.d.ts +112 -156
  252. package/dist/server/response.d.ts.map +1 -1
  253. package/dist/server/response.js +129 -279
  254. package/dist/server/response.js.map +1 -1
  255. package/dist/swagger/decorators.d.ts +81 -0
  256. package/dist/swagger/decorators.d.ts.map +1 -0
  257. package/dist/swagger/decorators.js +172 -0
  258. package/dist/swagger/decorators.js.map +1 -0
  259. package/dist/swagger/generator.d.ts +19 -0
  260. package/dist/swagger/generator.d.ts.map +1 -0
  261. package/dist/swagger/generator.js +344 -0
  262. package/dist/swagger/generator.js.map +1 -0
  263. package/dist/swagger/index.d.ts +31 -0
  264. package/dist/swagger/index.d.ts.map +1 -0
  265. package/dist/swagger/index.js +53 -0
  266. package/dist/swagger/index.js.map +1 -0
  267. package/dist/swagger/mounter.d.ts +7 -0
  268. package/dist/swagger/mounter.d.ts.map +1 -0
  269. package/dist/swagger/mounter.js +56 -0
  270. package/dist/swagger/mounter.js.map +1 -0
  271. package/dist/swagger/types.d.ts +190 -0
  272. package/dist/swagger/types.d.ts.map +1 -0
  273. package/dist/swagger/types.js +3 -0
  274. package/dist/swagger/types.js.map +1 -0
  275. package/dist/swagger/ui.d.ts +6 -0
  276. package/dist/swagger/ui.d.ts.map +1 -0
  277. package/dist/swagger/ui.js +118 -0
  278. package/dist/swagger/ui.js.map +1 -0
  279. package/dist/testing/index.d.ts.map +1 -1
  280. package/dist/testing/index.js +6 -1
  281. package/dist/testing/index.js.map +1 -1
  282. package/dist/testing/mocks.d.ts.map +1 -1
  283. package/dist/testing/mocks.js +15 -3
  284. package/dist/testing/mocks.js.map +1 -1
  285. package/dist/utils/logger.d.ts +8 -0
  286. package/dist/utils/logger.d.ts.map +1 -1
  287. package/dist/utils/logger.js +184 -1
  288. package/dist/utils/logger.js.map +1 -1
  289. package/dist/validator/builder.d.ts +223 -0
  290. package/dist/validator/builder.d.ts.map +1 -0
  291. package/dist/validator/builder.js +517 -0
  292. package/dist/validator/builder.js.map +1 -0
  293. package/dist/validator/engine.d.ts +19 -0
  294. package/dist/validator/engine.d.ts.map +1 -0
  295. package/dist/validator/engine.js +568 -0
  296. package/dist/validator/engine.js.map +1 -0
  297. package/dist/validator/error.d.ts +12 -0
  298. package/dist/validator/error.d.ts.map +1 -0
  299. package/dist/validator/error.js +63 -0
  300. package/dist/validator/error.js.map +1 -0
  301. package/dist/validator/pagination.d.ts +40 -0
  302. package/dist/validator/pagination.d.ts.map +1 -0
  303. package/dist/validator/pagination.js +60 -0
  304. package/dist/validator/pagination.js.map +1 -0
  305. package/dist/validator/tex-types.d.ts +2 -1
  306. package/dist/validator/tex-types.d.ts.map +1 -1
  307. package/dist/validator/tex-types.js +2 -1
  308. package/dist/validator/tex-types.js.map +1 -1
  309. package/dist/validator/tex.d.ts +6 -142
  310. package/dist/validator/tex.d.ts.map +1 -1
  311. package/dist/validator/tex.js +14 -733
  312. package/dist/validator/tex.js.map +1 -1
  313. package/dist/validator/types.d.ts +83 -0
  314. package/dist/validator/types.d.ts.map +1 -0
  315. package/dist/validator/types.js +3 -0
  316. package/dist/validator/types.js.map +1 -0
  317. package/package.json +8 -4
  318. package/dist/dev/error-overlay.d.ts +0 -3
  319. package/dist/dev/error-overlay.d.ts.map +0 -1
  320. package/dist/dev/error-overlay.js +0 -118
  321. package/dist/dev/error-overlay.js.map +0 -1
@@ -0,0 +1,216 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.mountCronJobs = mountCronJobs;
37
+ exports.mountCronJobsFromEntries = mountCronJobsFromEntries;
38
+ const fs = __importStar(require("node:fs/promises"));
39
+ const path = __importStar(require("node:path"));
40
+ const node_url_1 = require("node:url");
41
+ const fs_scanner_1 = require("./fs-scanner");
42
+ /**
43
+ * Discovers and mounts all cron jobs from dedicated directories (e.g. `src/cron/`)
44
+ * and single-file/colocated cron definitions (e.g. `src/http/cron.ts`).
45
+ */
46
+ async function mountCronJobs(root, app, allApiDirs) {
47
+ const cronFiles = [];
48
+ // 1. Scan dedicated src/cron and .exis/server/src/cron directories (all files are cron jobs)
49
+ const dedicatedCronDirs = [
50
+ path.join(root, '.exis', 'server', 'src', 'cron'),
51
+ path.join(root, '.exis', 'src', 'cron'),
52
+ path.join(root, 'src', 'cron'),
53
+ ];
54
+ for (const dir of dedicatedCronDirs) {
55
+ try {
56
+ const stat = await fs.stat(dir);
57
+ if (stat.isDirectory()) {
58
+ const files = await (0, fs_scanner_1.getFilesRecursively)(dir);
59
+ for (const file of files) {
60
+ if (!cronFiles.includes(file)) {
61
+ cronFiles.push(file);
62
+ }
63
+ }
64
+ }
65
+ }
66
+ catch {
67
+ // ignore
68
+ }
69
+ }
70
+ // 2. Scan single-file and colocated cron files in src/http (e.g. src/http/cron.ts)
71
+ const httpDirs = allApiDirs && allApiDirs.length > 0
72
+ ? allApiDirs
73
+ : [
74
+ path.join(root, '.exis', 'server', 'src', 'http'),
75
+ path.join(root, '.exis', 'src', 'http'),
76
+ path.join(root, 'src', 'http'),
77
+ ];
78
+ for (const dir of httpDirs) {
79
+ try {
80
+ const stat = await fs.stat(dir).catch(() => null);
81
+ if (!stat || !stat.isDirectory())
82
+ continue;
83
+ const scan = await (0, fs_scanner_1.scanDirectory)(dir);
84
+ for (const { filePath } of scan) {
85
+ const baseName = path.basename(filePath);
86
+ if (baseName === 'cron.ts' ||
87
+ baseName === 'cron.js' ||
88
+ baseName === 'cron.mjs' ||
89
+ baseName === 'cron.cjs') {
90
+ if (!cronFiles.includes(filePath)) {
91
+ cronFiles.push(filePath);
92
+ }
93
+ }
94
+ }
95
+ }
96
+ catch {
97
+ // ignore
98
+ }
99
+ }
100
+ const entries = [];
101
+ for (const file of cronFiles) {
102
+ try {
103
+ const url = process.env.VITEST || process.env.NODE_ENV === 'test'
104
+ ? (0, node_url_1.pathToFileURL)(file).href
105
+ : (0, node_url_1.pathToFileURL)(file).href + '?t=' + Date.now();
106
+ let mod;
107
+ try {
108
+ if (process.env.VITEST || process.env.NODE_ENV === 'test') {
109
+ mod = await Promise.resolve(`${url}`).then(s => __importStar(require(s)));
110
+ }
111
+ else {
112
+ const dynamicImport = new Function('specifier', 'return import(specifier)');
113
+ mod = await dynamicImport(url);
114
+ }
115
+ }
116
+ catch {
117
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
118
+ mod = require(file);
119
+ }
120
+ entries.push({ filePath: file, module: mod });
121
+ }
122
+ catch (err) {
123
+ app.log.error({ err: err.message, file }, `Failed to load cron file: ${file}`);
124
+ }
125
+ }
126
+ mountCronJobsFromEntries(entries, app);
127
+ }
128
+ /**
129
+ * Mounts cron jobs from pre-loaded module entries (used by both filesystem discovery and manifest boot).
130
+ */
131
+ function mountCronJobsFromEntries(entries, app) {
132
+ const CRON_REGISTRY = Symbol.for('exisjs:cron_jobs');
133
+ const registeredCronEntities = new Set();
134
+ for (const { filePath: file, module: mod } of entries) {
135
+ try {
136
+ const candidateExports = [];
137
+ const unwrapped = mod && mod.default && mod.default.default
138
+ ? mod.default.default
139
+ : mod && mod.default
140
+ ? mod.default
141
+ : mod;
142
+ if (unwrapped) {
143
+ candidateExports.push({ key: 'default', value: unwrapped });
144
+ }
145
+ if (mod && typeof mod === 'object' && !mod.__isExisCron) {
146
+ for (const [key, value] of Object.entries(mod)) {
147
+ if (key !== 'default' && key !== '__esModule') {
148
+ candidateExports.push({ key, value });
149
+ }
150
+ }
151
+ }
152
+ const fileBaseName = path.basename(file).replace(/\.[jmt]s$/, '');
153
+ for (const { key, value } of candidateExports) {
154
+ if (!value || registeredCronEntities.has(value))
155
+ continue;
156
+ // Handle array of cron jobs (e.g. export default [job1, job2])
157
+ const items = Array.isArray(value) ? value : [value];
158
+ for (const item of items) {
159
+ if (!item || registeredCronEntities.has(item))
160
+ continue;
161
+ // 1. Functional Cron Definition
162
+ if (item.__isExisCron) {
163
+ registeredCronEntities.add(item);
164
+ const jobName = item.options.name ||
165
+ (key === 'default' ? fileBaseName : `${fileBaseName}_${key}`);
166
+ app.cron.schedule({
167
+ ...item.options,
168
+ name: jobName,
169
+ });
170
+ app.log.info({ file }, `Mounted cron job "${jobName}" from ${file}`);
171
+ continue;
172
+ }
173
+ // 2. Class-Based Decorated Cron
174
+ const targetClass = typeof item === 'function' && item.prototype?.[CRON_REGISTRY]
175
+ ? item
176
+ : null;
177
+ if (targetClass) {
178
+ registeredCronEntities.add(targetClass);
179
+ let instance;
180
+ try {
181
+ instance = app.container.resolve(targetClass);
182
+ }
183
+ catch {
184
+ instance = null;
185
+ }
186
+ if (!instance) {
187
+ try {
188
+ instance = app.container.instantiateClass(targetClass);
189
+ }
190
+ catch {
191
+ instance = new targetClass();
192
+ }
193
+ }
194
+ const decoratedJobs = targetClass.prototype[CRON_REGISTRY];
195
+ if (Array.isArray(decoratedJobs)) {
196
+ for (const jobMeta of decoratedJobs) {
197
+ const jobName = jobMeta.options.name ||
198
+ `${targetClass.name}.${jobMeta.methodName}`;
199
+ app.cron.schedule({
200
+ ...jobMeta.options,
201
+ name: jobName,
202
+ run: instance[jobMeta.methodName].bind(instance),
203
+ });
204
+ app.log.info({ file }, `Mounted OOP cron job "${jobName}" from ${file}`);
205
+ }
206
+ }
207
+ }
208
+ }
209
+ }
210
+ }
211
+ catch (err) {
212
+ app.log.error({ err: err.message, file }, `Failed to load cron file: ${file}`);
213
+ }
214
+ }
215
+ }
216
+ //# sourceMappingURL=cron-mounter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-mounter.js","sourceRoot":"","sources":["../../../src/router/scanner/cron-mounter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { App } from '../../server/app';
2
+ /**
3
+ * Discovers and mounts the global error handler for a given HTTP directory.
4
+ */
5
+ export declare function mountErrorHandler(dir: string, app: App): Promise<void>;
6
+ /**
7
+ * Mounts a global error handler from an already loaded module export.
8
+ * Supports:
9
+ * - OOP class error handlers with DI resolution (`onError`, `catch`, `handle`, `handleError`)
10
+ * - Object-based error handlers
11
+ * - Functional error handler callbacks `(err, req, res, next)`
12
+ */
13
+ export declare function mountErrorHandlerFromModule(mod: any, app: App, errorFile?: string): void;
14
+ //# sourceMappingURL=error-mounter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-mounter.d.ts","sourceRoot":"","sources":["../../../src/router/scanner/error-mounter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE3C;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA6D5E;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,SAAS,SAAa,GACrB,IAAI,CA+GN"}
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.mountErrorHandler = mountErrorHandler;
37
+ exports.mountErrorHandlerFromModule = mountErrorHandlerFromModule;
38
+ const fs = __importStar(require("node:fs/promises"));
39
+ const path = __importStar(require("node:path"));
40
+ const node_url_1 = require("node:url");
41
+ /**
42
+ * Discovers and mounts the global error handler for a given HTTP directory.
43
+ */
44
+ async function mountErrorHandler(dir, app) {
45
+ const candidateFiles = [
46
+ path.join(dir, 'error.ts'),
47
+ path.join(dir, 'error.js'),
48
+ path.join(dir, 'error.mjs'),
49
+ path.join(dir, 'error.cjs'),
50
+ ];
51
+ let errorFile = null;
52
+ for (const file of candidateFiles) {
53
+ try {
54
+ const stat = await fs.stat(file);
55
+ if (stat.isFile()) {
56
+ errorFile = file;
57
+ break;
58
+ }
59
+ }
60
+ catch {
61
+ // ignore
62
+ }
63
+ }
64
+ if (!errorFile) {
65
+ try {
66
+ const dirFiles = await fs.readdir(dir).catch(() => []);
67
+ const namedError = dirFiles.find((f) => /\.error\.[jmt]s$/.test(f));
68
+ if (namedError) {
69
+ errorFile = path.join(dir, namedError);
70
+ }
71
+ }
72
+ catch {
73
+ // ignore
74
+ }
75
+ }
76
+ if (!errorFile)
77
+ return;
78
+ try {
79
+ const url = process.env.VITEST || process.env.NODE_ENV === 'test'
80
+ ? (0, node_url_1.pathToFileURL)(errorFile).href
81
+ : (0, node_url_1.pathToFileURL)(errorFile).href + '?t=' + Date.now();
82
+ let mod;
83
+ if (process.env.VITEST || process.env.NODE_ENV === 'test') {
84
+ mod = await Promise.resolve(`${url}`).then(s => __importStar(require(s)));
85
+ }
86
+ else {
87
+ const dynamicImport = new Function('specifier', 'return import(specifier)');
88
+ mod = await dynamicImport(url);
89
+ }
90
+ mountErrorHandlerFromModule(mod, app, errorFile);
91
+ }
92
+ catch (err) {
93
+ app.log.error({ err, file: errorFile }, `Failed to load error handler file: ${errorFile}`);
94
+ }
95
+ }
96
+ /**
97
+ * Mounts a global error handler from an already loaded module export.
98
+ * Supports:
99
+ * - OOP class error handlers with DI resolution (`onError`, `catch`, `handle`, `handleError`)
100
+ * - Object-based error handlers
101
+ * - Functional error handler callbacks `(err, req, res, next)`
102
+ */
103
+ function mountErrorHandlerFromModule(mod, app, errorFile = 'error.ts') {
104
+ try {
105
+ const unwrapped = mod && mod.default && mod.default.default
106
+ ? mod.default.default
107
+ : mod && mod.default
108
+ ? mod.default
109
+ : mod;
110
+ let handler = null;
111
+ const isClass = (fn) => {
112
+ if (typeof fn !== 'function')
113
+ return false;
114
+ if (fn.prototype &&
115
+ (typeof fn.prototype.onError === 'function' ||
116
+ typeof fn.prototype.catch === 'function' ||
117
+ typeof fn.prototype.handle === 'function' ||
118
+ typeof fn.prototype.handleError === 'function')) {
119
+ return true;
120
+ }
121
+ return /^class\s/.test(Function.prototype.toString.call(fn));
122
+ };
123
+ const targetClass = isClass(unwrapped)
124
+ ? unwrapped
125
+ : isClass(mod?.GlobalErrorHandler)
126
+ ? mod.GlobalErrorHandler
127
+ : isClass(mod?.ErrorHandler)
128
+ ? mod.ErrorHandler
129
+ : null;
130
+ if (targetClass) {
131
+ let instance;
132
+ try {
133
+ instance = app.container.resolve(targetClass);
134
+ }
135
+ catch {
136
+ instance = null;
137
+ }
138
+ if (!instance) {
139
+ try {
140
+ instance = app.container.instantiateClass(targetClass);
141
+ }
142
+ catch {
143
+ instance = new targetClass();
144
+ }
145
+ }
146
+ const method = instance.onError ||
147
+ instance.catch ||
148
+ instance.handle ||
149
+ instance.handleError;
150
+ if (typeof method === 'function') {
151
+ handler = (err, req, res, next) => {
152
+ if (method.length === 2 && instance.catch === method) {
153
+ return method.call(instance, err, { req, res, next });
154
+ }
155
+ return method.call(instance, err, req, res, next);
156
+ };
157
+ }
158
+ }
159
+ else if (unwrapped &&
160
+ typeof unwrapped === 'object' &&
161
+ (typeof unwrapped.onError === 'function' ||
162
+ typeof unwrapped.catch === 'function' ||
163
+ typeof unwrapped.handle === 'function' ||
164
+ typeof unwrapped.handleError === 'function')) {
165
+ const method = unwrapped.onError ||
166
+ unwrapped.catch ||
167
+ unwrapped.handle ||
168
+ unwrapped.handleError;
169
+ handler = (err, req, res, next) => {
170
+ if (method.length === 2 && unwrapped.catch === method) {
171
+ return method.call(unwrapped, err, { req, res, next });
172
+ }
173
+ return method.call(unwrapped, err, req, res, next);
174
+ };
175
+ }
176
+ if (!handler) {
177
+ handler =
178
+ mod.onError ||
179
+ (unwrapped && unwrapped.onError) ||
180
+ (typeof unwrapped === 'function' && !isClass(unwrapped)
181
+ ? unwrapped
182
+ : null) ||
183
+ mod.errorHandler ||
184
+ mod.handleError;
185
+ }
186
+ if (typeof handler === 'function') {
187
+ if (handler.length === 4) {
188
+ app.use(handler);
189
+ }
190
+ else {
191
+ app.onError(handler);
192
+ }
193
+ app.log.info({ file: errorFile }, 'Mounted global error handler from error.ts');
194
+ }
195
+ }
196
+ catch (err) {
197
+ app.log.error({ err, file: errorFile }, `Failed to load error handler file: ${errorFile}`);
198
+ }
199
+ }
200
+ //# sourceMappingURL=error-mounter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-mounter.js","sourceRoot":"","sources":["../../../src/router/scanner/error-mounter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export interface ScannedRoute {
2
+ filePath: string;
3
+ routePath: string;
4
+ }
5
+ /**
6
+ * Recursively scans a directory and computes the route path for each file.
7
+ * Handles:
8
+ * - `(group)` route groups (skipped from URL path)
9
+ * - `[...param]` wildcard parameters (transformed to `*param`)
10
+ * - `[param]` dynamic route parameters (transformed to `:param`)
11
+ */
12
+ export declare function scanDirectory(dir: string, baseRoute?: string): Promise<ScannedRoute[]>;
13
+ /**
14
+ * Recursively retrieves all files within a directory matching script extensions.
15
+ */
16
+ export declare function getFilesRecursively(dir: string): Promise<string[]>;
17
+ /**
18
+ * Determines whether a file path represents a boundary definition.
19
+ */
20
+ export declare function isBoundaryFile(filePath: string): boolean;
21
+ /**
22
+ * Determines whether a file path represents a route definition.
23
+ */
24
+ export declare function isRouteFile(filePath: string): boolean;
25
+ //# sourceMappingURL=fs-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-scanner.d.ts","sourceRoot":"","sources":["../../../src/router/scanner/fs-scanner.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,SAAS,SAAM,GACd,OAAO,CAAC,YAAY,EAAE,CAAC,CAiCzB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAgBxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMxD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMrD"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.scanDirectory = scanDirectory;
37
+ exports.getFilesRecursively = getFilesRecursively;
38
+ exports.isBoundaryFile = isBoundaryFile;
39
+ exports.isRouteFile = isRouteFile;
40
+ const fs = __importStar(require("node:fs/promises"));
41
+ const path = __importStar(require("node:path"));
42
+ /**
43
+ * Recursively scans a directory and computes the route path for each file.
44
+ * Handles:
45
+ * - `(group)` route groups (skipped from URL path)
46
+ * - `[...param]` wildcard parameters (transformed to `*param`)
47
+ * - `[param]` dynamic route parameters (transformed to `:param`)
48
+ */
49
+ async function scanDirectory(dir, baseRoute = '/') {
50
+ const entries = await fs.readdir(dir, { withFileTypes: true }).catch(() => []);
51
+ const results = [];
52
+ for (const entry of entries) {
53
+ const fullPath = path.join(dir, entry.name);
54
+ if (entry.isDirectory()) {
55
+ let segment = entry.name;
56
+ // Route groups: (group) -> do not add segment to URL
57
+ if (segment.startsWith('(') && segment.endsWith(')')) {
58
+ const subResults = await scanDirectory(fullPath, baseRoute);
59
+ results.push(...subResults);
60
+ continue;
61
+ }
62
+ // Wildcard / Catch-all params: [...slug] -> *slug
63
+ if (segment.startsWith('[...') && segment.endsWith(']')) {
64
+ segment = '*' + segment.slice(4, -1);
65
+ }
66
+ else {
67
+ // Dynamic route params: [id] -> :id
68
+ segment = segment.replace(/\[(.*?)\]/g, ':$1');
69
+ }
70
+ const nextBase = baseRoute === '/' ? `/${segment}` : `${baseRoute}/${segment}`;
71
+ const subResults = await scanDirectory(fullPath, nextBase);
72
+ results.push(...subResults);
73
+ }
74
+ else {
75
+ results.push({ filePath: fullPath, routePath: baseRoute });
76
+ }
77
+ }
78
+ return results;
79
+ }
80
+ /**
81
+ * Recursively retrieves all files within a directory matching script extensions.
82
+ */
83
+ async function getFilesRecursively(dir) {
84
+ const entries = await fs.readdir(dir, { withFileTypes: true }).catch(() => []);
85
+ const files = [];
86
+ for (const entry of entries) {
87
+ const full = path.join(dir, entry.name);
88
+ if (entry.isDirectory()) {
89
+ files.push(...(await getFilesRecursively(full)));
90
+ }
91
+ else if (entry.isFile() &&
92
+ /\.[jmt]s$/.test(entry.name) &&
93
+ !entry.name.endsWith('.d.ts')) {
94
+ files.push(full);
95
+ }
96
+ }
97
+ return files;
98
+ }
99
+ /**
100
+ * Determines whether a file path represents a boundary definition.
101
+ */
102
+ function isBoundaryFile(filePath) {
103
+ return (filePath.endsWith('boundary.ts') ||
104
+ filePath.endsWith('boundary.js') ||
105
+ /\.boundary\.[jt]s$/.test(filePath));
106
+ }
107
+ /**
108
+ * Determines whether a file path represents a route definition.
109
+ */
110
+ function isRouteFile(filePath) {
111
+ return (filePath.endsWith('route.ts') ||
112
+ filePath.endsWith('route.js') ||
113
+ /\.route\.[jt]s$/.test(filePath));
114
+ }
115
+ //# sourceMappingURL=fs-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-scanner.js","sourceRoot":"","sources":["../../../src/router/scanner/fs-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Router } from '../router';
2
+ import type { App } from '../../server/app';
3
+ /**
4
+ * Compiles a modern functional controller configuration object into an ExisJS Router instance.
5
+ * Assembles middleware, route parameter / body validation, guard checking, context injection,
6
+ * and error interception into an ultra-high performance handler pipeline.
7
+ */
8
+ export declare function compileFunctionalController(config: any, app: App): Router;
9
+ //# sourceMappingURL=functional-compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functional-compiler.d.ts","sourceRoot":"","sources":["../../../src/router/scanner/functional-compiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAIlC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE3C;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,CAwPzE"}