@morojs/moro 1.8.0 → 1.8.2

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 (356) hide show
  1. package/README.md +29 -38
  2. package/dist/core/auth/morojs-adapter.js +95 -45
  3. package/dist/core/auth/morojs-adapter.js.map +1 -1
  4. package/dist/core/config/config-manager.js.map +1 -1
  5. package/dist/core/config/config-sources.js +8 -49
  6. package/dist/core/config/config-sources.js.map +1 -1
  7. package/dist/core/config/config-validator.js +2 -3
  8. package/dist/core/config/config-validator.js.map +1 -1
  9. package/dist/core/config/file-loader.js.map +1 -1
  10. package/dist/core/config/index.js.map +1 -1
  11. package/dist/core/config/schema.js +4 -1
  12. package/dist/core/config/schema.js.map +1 -1
  13. package/dist/core/config/utils.js.map +1 -1
  14. package/dist/core/database/adapters/drizzle.js +2 -2
  15. package/dist/core/database/adapters/drizzle.js.map +1 -1
  16. package/dist/core/database/adapters/index.js.map +1 -1
  17. package/dist/core/database/adapters/mongodb.d.ts +1 -0
  18. package/dist/core/database/adapters/mongodb.js +16 -0
  19. package/dist/core/database/adapters/mongodb.js.map +1 -1
  20. package/dist/core/database/adapters/mysql.d.ts +1 -0
  21. package/dist/core/database/adapters/mysql.js +13 -2
  22. package/dist/core/database/adapters/mysql.js.map +1 -1
  23. package/dist/core/database/adapters/postgresql.js +2 -2
  24. package/dist/core/database/adapters/postgresql.js.map +1 -1
  25. package/dist/core/database/adapters/redis.js.map +1 -1
  26. package/dist/core/database/adapters/sql-safety.js +5 -4
  27. package/dist/core/database/adapters/sql-safety.js.map +1 -1
  28. package/dist/core/database/adapters/sqlite.js.map +1 -1
  29. package/dist/core/database/index.js.map +1 -1
  30. package/dist/core/docs/index.js +11 -7
  31. package/dist/core/docs/index.js.map +1 -1
  32. package/dist/core/docs/openapi-generator.js +8 -6
  33. package/dist/core/docs/openapi-generator.js.map +1 -1
  34. package/dist/core/docs/schema-to-openapi.js +3 -3
  35. package/dist/core/docs/schema-to-openapi.js.map +1 -1
  36. package/dist/core/docs/simple-docs.js.map +1 -1
  37. package/dist/core/docs/swagger-ui.js.map +1 -1
  38. package/dist/core/docs/zod-to-openapi.js +2 -2
  39. package/dist/core/docs/zod-to-openapi.js.map +1 -1
  40. package/dist/core/events/event-bus.js +14 -5
  41. package/dist/core/events/event-bus.js.map +1 -1
  42. package/dist/core/events/index.js.map +1 -1
  43. package/dist/core/framework.d.ts +2 -2
  44. package/dist/core/framework.js +21 -14
  45. package/dist/core/framework.js.map +1 -1
  46. package/dist/core/graphql/adapter.js.map +1 -1
  47. package/dist/core/graphql/adapters/graphql-js-adapter.js.map +1 -1
  48. package/dist/core/graphql/core.js.map +1 -1
  49. package/dist/core/graphql/index.js.map +1 -1
  50. package/dist/core/graphql/loader.js.map +1 -1
  51. package/dist/core/graphql/types.js.map +1 -1
  52. package/dist/core/grpc/adapters/grpc-js-adapter.js +4 -0
  53. package/dist/core/grpc/adapters/grpc-js-adapter.js.map +1 -1
  54. package/dist/core/grpc/adapters/index.js.map +1 -1
  55. package/dist/core/grpc/grpc-adapter.js.map +1 -1
  56. package/dist/core/grpc/grpc-manager.js.map +1 -1
  57. package/dist/core/grpc/index.js.map +1 -1
  58. package/dist/core/grpc/middleware/auth.js +1 -1
  59. package/dist/core/grpc/middleware/auth.js.map +1 -1
  60. package/dist/core/grpc/middleware/logging.js.map +1 -1
  61. package/dist/core/grpc/middleware/validation.js +1 -1
  62. package/dist/core/grpc/middleware/validation.js.map +1 -1
  63. package/dist/core/grpc/types.d.ts +7 -7
  64. package/dist/core/grpc/types.js.map +1 -1
  65. package/dist/core/http/http-server.d.ts +0 -13
  66. package/dist/core/http/http-server.js +34 -141
  67. package/dist/core/http/http-server.js.map +1 -1
  68. package/dist/core/http/http2-server.js +27 -5
  69. package/dist/core/http/http2-server.js.map +1 -1
  70. package/dist/core/http/index.js.map +1 -1
  71. package/dist/core/http/moro-engine-server.d.ts +2 -2
  72. package/dist/core/http/moro-engine-server.js +48 -22
  73. package/dist/core/http/moro-engine-server.js.map +1 -1
  74. package/dist/core/http/utils/compression.js +3 -3
  75. package/dist/core/http/utils/compression.js.map +1 -1
  76. package/dist/core/http/utils/lazy-event-emitter.js.map +1 -1
  77. package/dist/core/http/utils/multipart-parser.js +7 -3
  78. package/dist/core/http/utils/multipart-parser.js.map +1 -1
  79. package/dist/core/http/utils/query-parser.js.map +1 -1
  80. package/dist/core/http/utils/size.js +2 -2
  81. package/dist/core/http/utils/size.js.map +1 -1
  82. package/dist/core/http/utils/ssl-config.d.ts +10 -10
  83. package/dist/core/http/utils/ssl-config.js.map +1 -1
  84. package/dist/core/http/utils/uws-worker-clustering.js +37 -30
  85. package/dist/core/http/utils/uws-worker-clustering.js.map +1 -1
  86. package/dist/core/http/uws-http-server.d.ts +1 -0
  87. package/dist/core/http/uws-http-server.js +80 -22
  88. package/dist/core/http/uws-http-server.js.map +1 -1
  89. package/dist/core/jobs/cron-parser.js +7 -5
  90. package/dist/core/jobs/cron-parser.js.map +1 -1
  91. package/dist/core/jobs/index.js.map +1 -1
  92. package/dist/core/jobs/job-executor.d.ts +1 -1
  93. package/dist/core/jobs/job-executor.js.map +1 -1
  94. package/dist/core/jobs/job-scheduler.d.ts +3 -3
  95. package/dist/core/jobs/job-scheduler.js.map +1 -1
  96. package/dist/core/jobs/job-state-manager.d.ts +3 -3
  97. package/dist/core/jobs/job-state-manager.js +25 -4
  98. package/dist/core/jobs/job-state-manager.js.map +1 -1
  99. package/dist/core/jobs/leader-election.d.ts +15 -0
  100. package/dist/core/jobs/leader-election.js +158 -69
  101. package/dist/core/jobs/leader-election.js.map +1 -1
  102. package/dist/core/jobs/types.d.ts +4 -4
  103. package/dist/core/jobs/types.js.map +1 -1
  104. package/dist/core/jobs/utils.d.ts +1 -1
  105. package/dist/core/jobs/utils.js +7 -3
  106. package/dist/core/jobs/utils.js.map +1 -1
  107. package/dist/core/logger/filters.js +3 -2
  108. package/dist/core/logger/filters.js.map +1 -1
  109. package/dist/core/logger/index.js.map +1 -1
  110. package/dist/core/logger/logger.js +56 -25
  111. package/dist/core/logger/logger.js.map +1 -1
  112. package/dist/core/logger/outputs.js.map +1 -1
  113. package/dist/core/mail/adapters/console-adapter.js.map +1 -1
  114. package/dist/core/mail/adapters/index.js.map +1 -1
  115. package/dist/core/mail/adapters/nodemailer-adapter.js.map +1 -1
  116. package/dist/core/mail/adapters/resend-adapter.js.map +1 -1
  117. package/dist/core/mail/adapters/sendgrid-adapter.js.map +1 -1
  118. package/dist/core/mail/adapters/ses-adapter.js.map +1 -1
  119. package/dist/core/mail/index.js.map +1 -1
  120. package/dist/core/mail/mail-adapter.js.map +1 -1
  121. package/dist/core/mail/mail-manager.d.ts +10 -0
  122. package/dist/core/mail/mail-manager.js +21 -5
  123. package/dist/core/mail/mail-manager.js.map +1 -1
  124. package/dist/core/mail/template-engine.js.map +1 -1
  125. package/dist/core/mail/types.js.map +1 -1
  126. package/dist/core/middleware/built-in/auth/core.js +3 -3
  127. package/dist/core/middleware/built-in/auth/core.js.map +1 -1
  128. package/dist/core/middleware/built-in/auth/helpers.js +4 -4
  129. package/dist/core/middleware/built-in/auth/helpers.js.map +1 -1
  130. package/dist/core/middleware/built-in/auth/hook.js.map +1 -1
  131. package/dist/core/middleware/built-in/auth/index.js.map +1 -1
  132. package/dist/core/middleware/built-in/auth/jwt-helpers.d.ts +4 -4
  133. package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -1
  134. package/dist/core/middleware/built-in/auth/middleware.js.map +1 -1
  135. package/dist/core/middleware/built-in/auth/providers.js.map +1 -1
  136. package/dist/core/middleware/built-in/body-parsers/index.js.map +1 -1
  137. package/dist/core/middleware/built-in/body-size/core.js +2 -2
  138. package/dist/core/middleware/built-in/body-size/core.js.map +1 -1
  139. package/dist/core/middleware/built-in/body-size/hook.js.map +1 -1
  140. package/dist/core/middleware/built-in/body-size/index.js.map +1 -1
  141. package/dist/core/middleware/built-in/body-size/middleware.js.map +1 -1
  142. package/dist/core/middleware/built-in/cache/adapters/cache/file.js +3 -1
  143. package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -1
  144. package/dist/core/middleware/built-in/cache/adapters/cache/index.js.map +1 -1
  145. package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -1
  146. package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -1
  147. package/dist/core/middleware/built-in/cache/adapters/index.js.map +1 -1
  148. package/dist/core/middleware/built-in/cache/core.js.map +1 -1
  149. package/dist/core/middleware/built-in/cache/hook.js +3 -3
  150. package/dist/core/middleware/built-in/cache/hook.js.map +1 -1
  151. package/dist/core/middleware/built-in/cache/index.js.map +1 -1
  152. package/dist/core/middleware/built-in/cache/middleware.js.map +1 -1
  153. package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -1
  154. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -1
  155. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -1
  156. package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js.map +1 -1
  157. package/dist/core/middleware/built-in/cdn/adapters/index.js.map +1 -1
  158. package/dist/core/middleware/built-in/cdn/core.js.map +1 -1
  159. package/dist/core/middleware/built-in/cdn/hook.js.map +1 -1
  160. package/dist/core/middleware/built-in/cdn/index.js.map +1 -1
  161. package/dist/core/middleware/built-in/cdn/middleware.js.map +1 -1
  162. package/dist/core/middleware/built-in/compression/core.js.map +1 -1
  163. package/dist/core/middleware/built-in/compression/hook.js.map +1 -1
  164. package/dist/core/middleware/built-in/compression/index.js.map +1 -1
  165. package/dist/core/middleware/built-in/compression/middleware.js.map +1 -1
  166. package/dist/core/middleware/built-in/cookie/core.js.map +1 -1
  167. package/dist/core/middleware/built-in/cookie/hook.js.map +1 -1
  168. package/dist/core/middleware/built-in/cookie/index.js.map +1 -1
  169. package/dist/core/middleware/built-in/cookie/middleware.js.map +1 -1
  170. package/dist/core/middleware/built-in/cors/core.js.map +1 -1
  171. package/dist/core/middleware/built-in/cors/hook.js.map +1 -1
  172. package/dist/core/middleware/built-in/cors/index.js.map +1 -1
  173. package/dist/core/middleware/built-in/cors/middleware.js.map +1 -1
  174. package/dist/core/middleware/built-in/csp/core.js.map +1 -1
  175. package/dist/core/middleware/built-in/csp/hook.js.map +1 -1
  176. package/dist/core/middleware/built-in/csp/index.js.map +1 -1
  177. package/dist/core/middleware/built-in/csp/middleware.js.map +1 -1
  178. package/dist/core/middleware/built-in/csrf/core.js +1 -1
  179. package/dist/core/middleware/built-in/csrf/core.js.map +1 -1
  180. package/dist/core/middleware/built-in/csrf/hook.js.map +1 -1
  181. package/dist/core/middleware/built-in/csrf/index.js.map +1 -1
  182. package/dist/core/middleware/built-in/csrf/middleware.js.map +1 -1
  183. package/dist/core/middleware/built-in/error-tracker/index.js.map +1 -1
  184. package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -1
  185. package/dist/core/middleware/built-in/graphql/core.js.map +1 -1
  186. package/dist/core/middleware/built-in/graphql/helpers.js.map +1 -1
  187. package/dist/core/middleware/built-in/graphql/hook.js.map +1 -1
  188. package/dist/core/middleware/built-in/graphql/index.js.map +1 -1
  189. package/dist/core/middleware/built-in/graphql/middleware.js.map +1 -1
  190. package/dist/core/middleware/built-in/graphql/subscriptions.js.map +1 -1
  191. package/dist/core/middleware/built-in/helmet/core.js.map +1 -1
  192. package/dist/core/middleware/built-in/helmet/hook.js.map +1 -1
  193. package/dist/core/middleware/built-in/helmet/index.js.map +1 -1
  194. package/dist/core/middleware/built-in/helmet/middleware.js.map +1 -1
  195. package/dist/core/middleware/built-in/http2/core.js.map +1 -1
  196. package/dist/core/middleware/built-in/http2/hook.js.map +1 -1
  197. package/dist/core/middleware/built-in/http2/index.js.map +1 -1
  198. package/dist/core/middleware/built-in/http2/middleware.js.map +1 -1
  199. package/dist/core/middleware/built-in/index.js.map +1 -1
  200. package/dist/core/middleware/built-in/performance-monitor/index.js.map +1 -1
  201. package/dist/core/middleware/built-in/performance-monitor/middleware.js.map +1 -1
  202. package/dist/core/middleware/built-in/range/core.js +4 -1
  203. package/dist/core/middleware/built-in/range/core.js.map +1 -1
  204. package/dist/core/middleware/built-in/range/hook.js.map +1 -1
  205. package/dist/core/middleware/built-in/range/index.js.map +1 -1
  206. package/dist/core/middleware/built-in/range/middleware.js.map +1 -1
  207. package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -1
  208. package/dist/core/middleware/built-in/rate-limit/hook.js.map +1 -1
  209. package/dist/core/middleware/built-in/rate-limit/index.js.map +1 -1
  210. package/dist/core/middleware/built-in/rate-limit/middleware.js.map +1 -1
  211. package/dist/core/middleware/built-in/request-logger/index.js.map +1 -1
  212. package/dist/core/middleware/built-in/request-logger/middleware.js.map +1 -1
  213. package/dist/core/middleware/built-in/session/core.js +4 -4
  214. package/dist/core/middleware/built-in/session/core.js.map +1 -1
  215. package/dist/core/middleware/built-in/session/hook.js.map +1 -1
  216. package/dist/core/middleware/built-in/session/index.js.map +1 -1
  217. package/dist/core/middleware/built-in/session/middleware.js.map +1 -1
  218. package/dist/core/middleware/built-in/sse/core.js.map +1 -1
  219. package/dist/core/middleware/built-in/sse/hook.js.map +1 -1
  220. package/dist/core/middleware/built-in/sse/index.js.map +1 -1
  221. package/dist/core/middleware/built-in/sse/middleware.js.map +1 -1
  222. package/dist/core/middleware/built-in/static/core.js.map +1 -1
  223. package/dist/core/middleware/built-in/static/hook.js.map +1 -1
  224. package/dist/core/middleware/built-in/static/index.js.map +1 -1
  225. package/dist/core/middleware/built-in/static/middleware.js.map +1 -1
  226. package/dist/core/middleware/built-in/template/core.js +1 -1
  227. package/dist/core/middleware/built-in/template/core.js.map +1 -1
  228. package/dist/core/middleware/built-in/template/hook.js.map +1 -1
  229. package/dist/core/middleware/built-in/template/index.js.map +1 -1
  230. package/dist/core/middleware/built-in/template/middleware.js.map +1 -1
  231. package/dist/core/middleware/built-in/upload/core.js.map +1 -1
  232. package/dist/core/middleware/built-in/upload/hook.js.map +1 -1
  233. package/dist/core/middleware/built-in/upload/index.js.map +1 -1
  234. package/dist/core/middleware/built-in/upload/middleware.js.map +1 -1
  235. package/dist/core/middleware/built-in/validation/core.js.map +1 -1
  236. package/dist/core/middleware/built-in/validation/hook.js.map +1 -1
  237. package/dist/core/middleware/built-in/validation/index.js.map +1 -1
  238. package/dist/core/middleware/built-in/validation/middleware.js.map +1 -1
  239. package/dist/core/middleware/index.js +2 -2
  240. package/dist/core/middleware/index.js.map +1 -1
  241. package/dist/core/modules/auto-discovery.js +11 -7
  242. package/dist/core/modules/auto-discovery.js.map +1 -1
  243. package/dist/core/modules/index.js.map +1 -1
  244. package/dist/core/modules/modules.js +18 -13
  245. package/dist/core/modules/modules.js.map +1 -1
  246. package/dist/core/networking/adapters/engine-adapter.js +30 -2
  247. package/dist/core/networking/adapters/engine-adapter.js.map +1 -1
  248. package/dist/core/networking/adapters/index.js.map +1 -1
  249. package/dist/core/networking/adapters/socketio-adapter.d.ts +1 -0
  250. package/dist/core/networking/adapters/socketio-adapter.js +12 -1
  251. package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
  252. package/dist/core/networking/adapters/uws-adapter.js +1 -1
  253. package/dist/core/networking/adapters/uws-adapter.js.map +1 -1
  254. package/dist/core/networking/adapters/ws-adapter.d.ts +15 -0
  255. package/dist/core/networking/adapters/ws-adapter.js +120 -6
  256. package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
  257. package/dist/core/networking/index.js.map +1 -1
  258. package/dist/core/networking/service-discovery.js +7 -5
  259. package/dist/core/networking/service-discovery.js.map +1 -1
  260. package/dist/core/networking/websocket-adapter.d.ts +22 -3
  261. package/dist/core/networking/websocket-adapter.js.map +1 -1
  262. package/dist/core/networking/websocket-manager.js +70 -67
  263. package/dist/core/networking/websocket-manager.js.map +1 -1
  264. package/dist/core/pooling/object-pool-manager.js +6 -0
  265. package/dist/core/pooling/object-pool-manager.js.map +1 -1
  266. package/dist/core/queue/adapters/bull-adapter.js.map +1 -1
  267. package/dist/core/queue/adapters/index.js.map +1 -1
  268. package/dist/core/queue/adapters/kafka-adapter.js +2 -2
  269. package/dist/core/queue/adapters/kafka-adapter.js.map +1 -1
  270. package/dist/core/queue/adapters/memory-adapter.js +6 -6
  271. package/dist/core/queue/adapters/memory-adapter.js.map +1 -1
  272. package/dist/core/queue/adapters/rabbitmq-adapter.d.ts +50 -0
  273. package/dist/core/queue/adapters/rabbitmq-adapter.js +176 -20
  274. package/dist/core/queue/adapters/rabbitmq-adapter.js.map +1 -1
  275. package/dist/core/queue/adapters/sqs-adapter.d.ts +12 -2
  276. package/dist/core/queue/adapters/sqs-adapter.js +75 -24
  277. package/dist/core/queue/adapters/sqs-adapter.js.map +1 -1
  278. package/dist/core/queue/index.js.map +1 -1
  279. package/dist/core/queue/middleware/index.js.map +1 -1
  280. package/dist/core/queue/middleware/monitoring.d.ts +1 -1
  281. package/dist/core/queue/middleware/monitoring.js.map +1 -1
  282. package/dist/core/queue/middleware/priority.js +2 -1
  283. package/dist/core/queue/middleware/priority.js.map +1 -1
  284. package/dist/core/queue/middleware/rate-limit.js.map +1 -1
  285. package/dist/core/queue/queue-adapter.js.map +1 -1
  286. package/dist/core/queue/queue-manager.js.map +1 -1
  287. package/dist/core/queue/types.d.ts +8 -8
  288. package/dist/core/queue/types.js.map +1 -1
  289. package/dist/core/routing/app-integration.js.map +1 -1
  290. package/dist/core/routing/create-router.js.map +1 -1
  291. package/dist/core/routing/index.js.map +1 -1
  292. package/dist/core/routing/path-matcher.js.map +1 -1
  293. package/dist/core/routing/radix-tree.js.map +1 -1
  294. package/dist/core/routing/router.js.map +1 -1
  295. package/dist/core/routing/unified-router.js +12 -4
  296. package/dist/core/routing/unified-router.js.map +1 -1
  297. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  298. package/dist/core/runtime/base-adapter.js +2 -2
  299. package/dist/core/runtime/base-adapter.js.map +1 -1
  300. package/dist/core/runtime/cloudflare-workers-adapter.js +2 -0
  301. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  302. package/dist/core/runtime/index.js.map +1 -1
  303. package/dist/core/runtime/node-adapter.js +19 -17
  304. package/dist/core/runtime/node-adapter.js.map +1 -1
  305. package/dist/core/runtime/vercel-edge-adapter.js +2 -0
  306. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  307. package/dist/core/utilities/circuit-breaker.d.ts +1 -0
  308. package/dist/core/utilities/circuit-breaker.js +25 -2
  309. package/dist/core/utilities/circuit-breaker.js.map +1 -1
  310. package/dist/core/utilities/container.js +9 -9
  311. package/dist/core/utilities/container.js.map +1 -1
  312. package/dist/core/utilities/hooks.js +28 -6
  313. package/dist/core/utilities/hooks.js.map +1 -1
  314. package/dist/core/utilities/index.js.map +1 -1
  315. package/dist/core/utilities/module-path.js.map +1 -1
  316. package/dist/core/utilities/package-utils.js +1 -1
  317. package/dist/core/utilities/package-utils.js.map +1 -1
  318. package/dist/core/utilities/response-helpers.js +1 -1
  319. package/dist/core/utilities/response-helpers.js.map +1 -1
  320. package/dist/core/validation/adapters.js.map +1 -1
  321. package/dist/core/validation/error-handler.js.map +1 -1
  322. package/dist/core/validation/index.js.map +1 -1
  323. package/dist/core/validation/schema-interface.js.map +1 -1
  324. package/dist/core/workers/facade.js.map +1 -1
  325. package/dist/core/workers/index.js.map +1 -1
  326. package/dist/core/workers/worker-entry.d.ts +1 -0
  327. package/dist/core/workers/worker-entry.js +12 -0
  328. package/dist/core/workers/worker-entry.js.map +1 -0
  329. package/dist/core/workers/worker-manager.d.ts +23 -2
  330. package/dist/core/workers/worker-manager.js +117 -17
  331. package/dist/core/workers/worker-manager.js.map +1 -1
  332. package/dist/core/workers/worker.js +8 -6
  333. package/dist/core/workers/worker.js.map +1 -1
  334. package/dist/index.d.ts +1 -1
  335. package/dist/index.js +4 -1
  336. package/dist/index.js.map +1 -1
  337. package/dist/moro.d.ts +18 -1
  338. package/dist/moro.js +168 -50
  339. package/dist/moro.js.map +1 -1
  340. package/dist/types/auth.d.ts +4 -4
  341. package/dist/types/auth.js.map +1 -1
  342. package/dist/types/cache.js.map +1 -1
  343. package/dist/types/cdn.js.map +1 -1
  344. package/dist/types/config.d.ts +10 -10
  345. package/dist/types/config.js.map +1 -1
  346. package/dist/types/core.js.map +1 -1
  347. package/dist/types/database.js.map +1 -1
  348. package/dist/types/discovery.js.map +1 -1
  349. package/dist/types/events.js.map +1 -1
  350. package/dist/types/hooks.js.map +1 -1
  351. package/dist/types/http.js.map +1 -1
  352. package/dist/types/logger.js.map +1 -1
  353. package/dist/types/module.js.map +1 -1
  354. package/dist/types/runtime.js.map +1 -1
  355. package/dist/types/session.js.map +1 -1
  356. package/package.json +29 -17
@@ -1 +1 @@
1
- {"version":3,"file":"response-helpers.js","sourceRoot":"","sources":["../../../src/core/utilities/response-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"response-helpers.js","sourceRoot":"","sources":["../../../src/core/utilities/response-helpers.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Standardized API Response Helpers\n *\n * These helpers ensure consistent response formats across your API.\n * They are zero-overhead (just return plain objects) and optimized\n * for the framework's fast-path JSON serialization.\n *\n * @module ResponseHelpers\n */\n\n/**\n * Standard success response with data\n */\nexport interface ApiSuccessResponse<T = any> {\n success: true;\n data: T;\n message?: string;\n}\n\n/**\n * Standard error response\n */\nexport interface ApiErrorResponse {\n success: false;\n error: string;\n code?: string;\n message?: string;\n details?: any;\n}\n\n/**\n * Union type for all API responses\n */\nexport type ApiResponse<T = any> = ApiSuccessResponse<T> | ApiErrorResponse;\n\n/**\n * Validation error detail\n */\nexport interface ValidationErrorDetail {\n field: string;\n message: string;\n code?: string;\n}\n\n/**\n * Create a standardized success response\n *\n * @example\n * ```typescript\n * app.get('/users', async (req, res) => {\n * const users = await getUsers();\n * return success(users);\n * });\n *\n * // With message\n * app.post('/users', async (req, res) => {\n * const user = await createUser(req.body);\n * return success(user, 'User created successfully');\n * });\n * ```\n */\nexport function success<T = any>(data: T, message?: string): ApiSuccessResponse<T> {\n const response: ApiSuccessResponse<T> = {\n success: true,\n data,\n };\n\n if (message !== undefined) {\n response.message = message;\n }\n\n return response;\n}\n\n/**\n * Create a standardized error response\n *\n * @example\n * ```typescript\n * app.get('/users/:id', async (req, res) => {\n * const user = await getUser(req.params.id);\n * if (!user) {\n * return res.status(404).json(\n * error('User not found', 'USER_NOT_FOUND')\n * );\n * }\n * return success(user);\n * });\n * ```\n */\nexport function error(errorMessage: string, code?: string, message?: string): ApiErrorResponse {\n const response: ApiErrorResponse = {\n success: false,\n error: errorMessage,\n };\n\n if (code !== undefined) {\n response.code = code;\n }\n\n if (message !== undefined) {\n response.message = message;\n }\n\n return response;\n}\n\n/**\n * Create a validation error response\n *\n * @example\n * ```typescript\n * app.post('/users', async (req, res) => {\n * const validationErrors = validateUser(req.body);\n * if (validationErrors.length > 0) {\n * return res.status(400).json(\n * validationError(validationErrors)\n * );\n * }\n * // ... create user\n * });\n * ```\n */\nexport function validationError(\n details: ValidationErrorDetail[],\n message?: string\n): ApiErrorResponse {\n return {\n success: false,\n error: 'Validation failed',\n code: 'VALIDATION_ERROR',\n message: message || 'One or more fields failed validation',\n details,\n };\n}\n\n/**\n * Create an unauthorized error response\n *\n * @example\n * ```typescript\n * app.get('/admin', async (req, res) => {\n * if (!req.user) {\n * return res.status(401).json(unauthorized());\n * }\n * return success(adminData);\n * });\n * ```\n */\nexport function unauthorized(message: string = 'Authentication required'): ApiErrorResponse {\n return {\n success: false,\n error: 'Unauthorized',\n code: 'UNAUTHORIZED',\n message,\n };\n}\n\n/**\n * Create a forbidden error response\n *\n * @example\n * ```typescript\n * app.delete('/users/:id', async (req, res) => {\n * if (!req.user.roles.includes('admin')) {\n * return res.status(403).json(forbidden());\n * }\n * await deleteUser(req.params.id);\n * return success({ deleted: true });\n * });\n * ```\n */\nexport function forbidden(message: string = 'Insufficient permissions'): ApiErrorResponse {\n return {\n success: false,\n error: 'Forbidden',\n code: 'FORBIDDEN',\n message,\n };\n}\n\n/**\n * Create a not found error response\n *\n * @example\n * ```typescript\n * app.get('/users/:id', async (req, res) => {\n * const user = await getUser(req.params.id);\n * if (!user) {\n * return res.status(404).json(notFound('User'));\n * }\n * return success(user);\n * });\n * ```\n */\nexport function notFound(resource: string = 'Resource'): ApiErrorResponse {\n return {\n success: false,\n error: 'Not Found',\n code: 'NOT_FOUND',\n message: `${resource} not found`,\n };\n}\n\n/**\n * Create a conflict error response (e.g., duplicate entry)\n *\n * @example\n * ```typescript\n * app.post('/users', async (req, res) => {\n * const existing = await getUserByEmail(req.body.email);\n * if (existing) {\n * return res.status(409).json(\n * conflict('Email already in use')\n * );\n * }\n * const user = await createUser(req.body);\n * return success(user);\n * });\n * ```\n */\nexport function conflict(message: string): ApiErrorResponse {\n return {\n success: false,\n error: 'Conflict',\n code: 'CONFLICT',\n message,\n };\n}\n\n/**\n * Create a bad request error response\n *\n * @example\n * ```typescript\n * app.post('/upload', async (req, res) => {\n * if (!req.files?.file) {\n * return res.status(400).json(\n * badRequest('File is required')\n * );\n * }\n * // ... process file\n * });\n * ```\n */\nexport function badRequest(message: string = 'Invalid request'): ApiErrorResponse {\n return {\n success: false,\n error: 'Bad Request',\n code: 'BAD_REQUEST',\n message,\n };\n}\n\n/**\n * Create an internal server error response\n *\n * @example\n * ```typescript\n * app.get('/data', async (req, res) => {\n * try {\n * const data = await fetchData();\n * return success(data);\n * } catch (err) {\n * return res.status(500).json(\n * internalError('Failed to fetch data')\n * );\n * }\n * });\n * ```\n */\nexport function internalError(message: string = 'Internal server error'): ApiErrorResponse {\n return {\n success: false,\n error: 'Internal Server Error',\n code: 'INTERNAL_ERROR',\n message,\n };\n}\n\n/**\n * Create a rate limit exceeded error response\n *\n * @example\n * ```typescript\n * app.post('/api/send', async (req, res) => {\n * const limited = await checkRateLimit(req.ip);\n * if (limited) {\n * return res.status(429).json(\n * rateLimited(60) // 60 seconds retry\n * );\n * }\n * // ... process request\n * });\n * ```\n */\nexport function rateLimited(retryAfter?: number): ApiErrorResponse {\n const response: ApiErrorResponse = {\n success: false,\n error: 'Too Many Requests',\n code: 'RATE_LIMITED',\n message: 'Rate limit exceeded',\n };\n\n if (retryAfter !== undefined) {\n response.details = { retryAfter };\n }\n\n return response;\n}\n\n/**\n * Standardized response helper object for convenient imports\n *\n * @example\n * ```typescript\n * import { response } from '@morojs/moro';\n *\n * app.get('/users', async (req, res) => {\n * const users = await getUsers();\n * return response.success(users);\n * });\n *\n * app.get('/users/:id', async (req, res) => {\n * const user = await getUser(req.params.id);\n * if (!user) {\n * return res.status(404).json(response.notFound('User'));\n * }\n * return response.success(user);\n * });\n * ```\n */\nexport const response = {\n success,\n error,\n validationError,\n unauthorized,\n forbidden,\n notFound,\n conflict,\n badRequest,\n internalError,\n rateLimited,\n} as const;\n\n/**\n * Type-safe response builder for complex scenarios\n *\n * @example\n * ```typescript\n * import { ResponseBuilder } from '@morojs/moro';\n *\n * app.get('/users', async (req, res) => {\n * const users = await getUsers();\n * return ResponseBuilder.success(users)\n * .message('Successfully retrieved users')\n * .build();\n * });\n * ```\n */\nexport class ResponseBuilder<T = any> {\n private response: Partial<ApiResponse<T>> = {};\n\n private constructor() {}\n\n /**\n * Start building a success response\n */\n static success<T>(data: T): ResponseBuilder<T> {\n const builder = new ResponseBuilder<T>();\n builder.response = {\n success: true,\n data,\n };\n return builder;\n }\n\n /**\n * Start building an error response\n */\n static error(errorMessage: string, code?: string): ResponseBuilder<never> {\n const builder = new ResponseBuilder<never>();\n builder.response = {\n success: false,\n error: errorMessage,\n ...(code !== undefined ? { code } : {}),\n };\n return builder;\n }\n\n /**\n * Add a message to the response\n */\n message(msg: string): this {\n this.response.message = msg;\n return this;\n }\n\n /**\n * Add details to the response\n */\n details(details: any): this {\n (this.response as ApiErrorResponse).details = details;\n return this;\n }\n\n /**\n * Add a code to error response\n */\n code(code: string): this {\n (this.response as ApiErrorResponse).code = code;\n return this;\n }\n\n /**\n * Build and return the final response\n */\n build(): ApiResponse<T> {\n return this.response as ApiResponse<T>;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../../src/core/validation/adapters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../../src/core/validation/adapters.ts"],"names":[],"mappings":"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","sourcesContent":["// Validation Library Adapters for Moro Framework\n// Makes Joi, Yup, and other libraries compatible with ValidationSchema interface\n\nimport { ValidationSchema, ValidationError, normalizeValidationError } from './schema-interface.js';\n\n/**\n * Zod Compatibility Check\n * Zod ALREADY implements ValidationSchema interface natively!\n * No adapter needed - it just works.\n */\n\n/**\n * Joi Adapter - makes Joi schemas compatible with ValidationSchema\n */\nexport class JoiAdapter<T = any> implements ValidationSchema<T> {\n constructor(private joiSchema: any) {\n if (!joiSchema || typeof joiSchema.validateAsync !== 'function') {\n throw new Error('Invalid Joi schema provided to JoiAdapter');\n }\n }\n\n async parseAsync(data: unknown): Promise<T> {\n try {\n const result = await this.joiSchema.validateAsync(data, { abortEarly: false });\n return result as T;\n } catch (error) {\n throw normalizeValidationError(error);\n }\n }\n}\n\n/**\n * Yup Adapter - makes Yup schemas compatible with ValidationSchema\n */\nexport class YupAdapter<T = any> implements ValidationSchema<T> {\n constructor(private yupSchema: any) {\n if (!yupSchema || typeof yupSchema.validate !== 'function') {\n throw new Error('Invalid Yup schema provided to YupAdapter');\n }\n }\n\n async parseAsync(data: unknown): Promise<T> {\n try {\n const result = await this.yupSchema.validate(data, { abortEarly: false });\n return result as T;\n } catch (error) {\n throw normalizeValidationError(error);\n }\n }\n}\n\n/**\n * Custom Validation Function Adapter\n * Allows users to use simple validation functions\n */\nexport class FunctionAdapter<T = any> implements ValidationSchema<T> {\n constructor(\n private validateFn: (data: unknown) => T | Promise<T>,\n private name: string = 'custom'\n ) {\n if (typeof validateFn !== 'function') {\n throw new Error('Validation function is required for FunctionAdapter');\n }\n }\n\n async parseAsync(data: unknown): Promise<T> {\n try {\n return await this.validateFn(data);\n } catch (error) {\n throw new ValidationError([\n {\n path: [],\n message: error instanceof Error ? error.message : String(error),\n code: this.name,\n },\n ]);\n }\n }\n}\n\n/**\n * Class Validator Adapter (for TypeScript decorators)\n */\nexport class ClassValidatorAdapter<T extends object = any> implements ValidationSchema<T> {\n constructor(\n private ClassType: new () => T,\n private validate?: (obj: any) => Promise<any[]>\n ) {\n if (typeof ClassType !== 'function') {\n throw new Error('Class constructor is required for ClassValidatorAdapter');\n }\n }\n\n async parseAsync(data: unknown): Promise<T> {\n try {\n const instance = Object.assign(new this.ClassType(), data as Record<string, any>);\n\n if (this.validate) {\n const errors = await this.validate(instance);\n if (errors && errors.length > 0) {\n throw new ValidationError(\n errors.map((error: any, index: number) => ({\n path: error.property ? [error.property] : [index],\n message: Object.values(error.constraints || {}).join(', ') || 'Validation failed',\n code: 'class_validator',\n }))\n );\n }\n }\n\n return instance as T;\n } catch (error) {\n if (error instanceof ValidationError) throw error;\n throw normalizeValidationError(error);\n }\n }\n}\n\n/**\n * Utility functions for creating adapters\n */\nexport function joi<T = any>(joiSchema: any): ValidationSchema<T> {\n return new JoiAdapter<T>(joiSchema);\n}\n\nexport function yup<T = any>(yupSchema: any): ValidationSchema<T> {\n return new YupAdapter<T>(yupSchema);\n}\n\nexport function fn<T = any>(\n validateFn: (data: unknown) => T | Promise<T>,\n name?: string\n): ValidationSchema<T> {\n return new FunctionAdapter<T>(validateFn, name);\n}\n\nexport function classValidator<T extends object = any>(\n ClassType: new () => T,\n validate?: (obj: any) => Promise<any[]>\n): ValidationSchema<T> {\n return new ClassValidatorAdapter<T>(ClassType, validate);\n}\n\n// Type helpers\nexport type JoiSchema<T> = ValidationSchema<T>;\nexport type YupSchema<T> = ValidationSchema<T>;\nexport type CustomValidator<T> = ValidationSchema<T>;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../../src/core/validation/error-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../../src/core/validation/error-handler.ts"],"names":[],"mappings":"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","sourcesContent":["// Validation Error Handler Utility\nimport type { HttpRequest, HttpResponse } from '../../types/http.js';\nimport type {\n ValidationErrorDetail,\n ValidationErrorContext,\n ValidationErrorResponse,\n ValidationErrorHandler,\n} from '../../types/config.js';\nimport { logger } from '../logger/index.js';\n\n/**\n * Default validation error handler\n * Returns a consistent error response format\n */\nexport const defaultValidationErrorHandler: ValidationErrorHandler = (\n errors: ValidationErrorDetail[],\n context: ValidationErrorContext\n): ValidationErrorResponse => {\n const isProduction = process.env.NODE_ENV === 'production';\n return {\n status: 400,\n body: {\n success: false,\n error: `Validation failed for ${context.field}`,\n ...(isProduction ? {} : { details: errors }),\n requestId: (context.request as any).requestId,\n },\n };\n};\n\n/**\n * Handle validation errors using the configured error handler\n * This is the central function that all validation error handling should go through\n */\nexport function handleValidationError(\n errors: ValidationErrorDetail[],\n field: 'body' | 'query' | 'params' | 'headers',\n req: HttpRequest,\n res: HttpResponse,\n customHandler?: ValidationErrorHandler,\n globalHandler?: ValidationErrorHandler\n): void {\n // Don't send error if headers already sent\n if (res.headersSent) {\n logger.warn('Attempted to send validation error after headers sent', 'ValidationError', {\n field,\n path: req.path,\n method: req.method,\n });\n return;\n }\n\n // Build context for error handler\n const context: ValidationErrorContext = {\n request: {\n method: req.method || 'UNKNOWN',\n path: req.path || req.url || '',\n url: req.url || '',\n headers: req.headers || {},\n },\n field,\n };\n\n // Use custom handler (route-level) > global handler > default handler\n const handler = customHandler || globalHandler || defaultValidationErrorHandler;\n\n logger.debug('Handling validation error', 'ValidationError', {\n field,\n errorCount: errors.length,\n path: req.path,\n method: req.method,\n hasCustomHandler: !!customHandler,\n hasGlobalHandler: !!globalHandler,\n });\n\n try {\n // Execute the error handler\n const errorResponse = handler(errors, context);\n\n // Apply headers if provided\n if (errorResponse.headers) {\n Object.entries(errorResponse.headers).forEach(([key, value]) => {\n res.setHeader(key, value);\n });\n }\n\n // Send the response\n res.status(errorResponse.status).json(errorResponse.body);\n } catch (error) {\n logger.error('Error in validation error handler', 'ValidationError', {\n error: error instanceof Error ? error.message : String(error),\n field,\n path: req.path,\n });\n\n // Fallback to default error response if handler throws\n if (!res.headersSent) {\n res.status(500).json({\n success: false,\n error: 'Internal error while handling validation error',\n requestId: req.requestId,\n });\n }\n }\n}\n\n/**\n * Normalize errors from different validation libraries into a consistent format\n */\nexport function normalizeErrors(errors: any[], field: string): ValidationErrorDetail[] {\n return errors.map((err: any) => ({\n field: err.path && err.path.length > 0 ? err.path.join('.') : field,\n message: err.message || 'Validation failed',\n code: err.code,\n value: err.input,\n path: err.path || [],\n }));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/validation/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/validation/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Universal Validation System for Moro Framework\n// Works with Zod, Joi, Yup, and any validation library via adapters\n\nimport { HttpRequest, HttpResponse } from '../http/index.js';\nimport { createFrameworkLogger } from '../logger/index.js';\nimport { createUserRequire, isPackageAvailable } from '../utilities/package-utils.js';\nimport { ValidationSchema, normalizeValidationError } from './schema-interface.js';\nimport { handleValidationError } from './error-handler.js';\nimport { getGlobalConfig } from '../config/index.js';\nimport type { ValidationErrorHandler } from '../../types/config.js';\n\nconst logger = createFrameworkLogger('Validation');\n\n// Convenience re-export of Zod (optional - only works if zod is installed)\n// Lazy-loads Zod synchronously on first access\n// If zod is not installed, z will throw a helpful error\nlet zodModule: any = null;\nlet zodLoadAttempted = false;\n\nfunction loadZodSync() {\n if (zodLoadAttempted) {\n return zodModule;\n }\n\n zodLoadAttempted = true;\n\n try {\n if (!isPackageAvailable('zod')) {\n zodModule = null;\n return zodModule;\n }\n\n // Use synchronous require for immediate availability\n const userRequire = createUserRequire();\n zodModule = userRequire('zod');\n } catch {\n // Zod not installed or failed to load\n zodModule = null;\n }\n\n return zodModule;\n}\n\nexport const z = new Proxy({} as any, {\n get(_target, prop) {\n const zod = loadZodSync();\n\n if (!zod) {\n throw new Error(\n 'Zod is not installed. Please install it with: npm install zod\\n' +\n 'Or use an alternative validation library (joi, yup, class-validator) via adapters.'\n );\n }\n\n if (!zod.z) {\n throw new Error(\n 'Zod module loaded but z export not found. This may be a version compatibility issue.'\n );\n }\n\n return zod.z[prop];\n },\n apply(_target, thisArg, args) {\n const zod = loadZodSync();\n\n if (!zod?.z) {\n throw new Error('Zod is not installed. Please install it with: npm install zod');\n }\n\n return zod.z.apply(thisArg, args);\n },\n});\n\n// Universal validation configuration interface\nexport interface ValidationConfig {\n body?: ValidationSchema;\n query?: ValidationSchema;\n params?: ValidationSchema;\n headers?: ValidationSchema;\n onValidationError?: ValidationErrorHandler;\n}\n\n// Validation result types\nexport interface ValidationResult<T = any> {\n success: boolean;\n data?: T;\n errors?: ValidationErrorDetail[];\n}\n\nexport interface ValidationErrorDetail {\n field: string;\n message: string;\n code: string;\n}\n\n// Enhanced request type with validated data\nexport interface ValidatedRequest<T = any> extends HttpRequest {\n validatedBody?: T;\n validatedQuery?: any;\n validatedParams?: any;\n validatedHeaders?: any;\n}\n\n// Main validation wrapper function\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function validate<TBody = any, TQuery = any, TParams = any>(\n config: ValidationConfig,\n handler: (req: ValidatedRequest<TBody>, res: HttpResponse) => any | Promise<any>\n) {\n return async (req: HttpRequest, res: HttpResponse): Promise<any> => {\n try {\n const validatedReq = req as ValidatedRequest<TBody>;\n\n // Get global validation config\n let globalHandler: ValidationErrorHandler | undefined;\n try {\n const globalConfig = getGlobalConfig();\n globalHandler = globalConfig.modules.validation.onError;\n } catch {\n // Config not initialized yet, use default handler\n globalHandler = undefined;\n }\n\n // Validate body\n if (config.body) {\n const result = await validateField(config.body, req.body, 'body');\n if (!result.success) {\n return handleValidationError(\n result.errors || [],\n 'body',\n req,\n res,\n config.onValidationError,\n globalHandler\n );\n }\n validatedReq.validatedBody = result.data;\n validatedReq.body = result.data; // Also update original body for compatibility\n }\n\n // Validate query parameters\n if (config.query) {\n const result = await validateField(config.query, req.query, 'query');\n if (!result.success) {\n return handleValidationError(\n result.errors || [],\n 'query',\n req,\n res,\n config.onValidationError,\n globalHandler\n );\n }\n validatedReq.validatedQuery = result.data;\n validatedReq.query = result.data; // Also update original query for compatibility\n }\n\n // Validate path parameters\n if (config.params) {\n const result = await validateField(config.params, req.params, 'params');\n if (!result.success) {\n return handleValidationError(\n result.errors || [],\n 'params',\n req,\n res,\n config.onValidationError,\n globalHandler\n );\n }\n validatedReq.validatedParams = result.data;\n validatedReq.params = result.data; // Also update original params for compatibility\n }\n\n // Validate headers\n if (config.headers) {\n const result = await validateField(config.headers, req.headers, 'headers');\n if (!result.success) {\n return handleValidationError(\n result.errors || [],\n 'headers',\n req,\n res,\n config.onValidationError,\n globalHandler\n );\n }\n validatedReq.validatedHeaders = result.data;\n }\n\n logger.debug('Request validation passed', 'ValidationSuccess', {\n path: req.path,\n method: req.method,\n validatedFields: Object.keys(config),\n });\n\n // Execute the handler with validated request\n return await handler(validatedReq, res);\n } catch (error) {\n logger.error('Validation wrapper error', 'ValidationError', {\n error: error instanceof Error ? error.message : String(error),\n path: req.path,\n method: req.method,\n });\n\n if (!res.headersSent) {\n res.status(500).json({\n success: false,\n error: 'Internal validation error',\n requestId: req.requestId,\n });\n }\n }\n };\n}\n\n// Validate individual field using universal schema interface\nasync function validateField(\n schema: ValidationSchema,\n data: any,\n fieldName: string\n): Promise<ValidationResult> {\n try {\n const validated = await schema.parseAsync(data);\n return {\n success: true,\n data: validated,\n };\n } catch (error) {\n const normalizedError = normalizeValidationError(error);\n const errors: ValidationErrorDetail[] = normalizedError.issues.map(issue => ({\n field: issue.path.length > 0 ? issue.path.join('.') : fieldName,\n message: issue.message,\n code: issue.code,\n }));\n\n logger.debug('Field validation failed', 'ValidationFailed', {\n field: fieldName,\n errors: errors.length,\n details: errors,\n });\n\n return {\n success: false,\n errors,\n };\n }\n}\n\n// Re-export common validation tools\nexport { ValidationError, normalizeValidationError } from './schema-interface.js';\nexport type { ValidationSchema, InferSchemaType } from './schema-interface.js';\nexport { joi, yup, fn as customValidator, classValidator } from './adapters.js';\nexport { handleValidationError, normalizeErrors } from './error-handler.js';\nexport type {\n ValidationErrorHandler,\n ValidationErrorContext,\n ValidationErrorResponse,\n ValidationErrorDetail as ValidationErrorDetailType,\n} from '../../types/config.js';\n\n// Convenience functions for single-field validation\nexport function body<T>(schema: ValidationSchema<T>) {\n return (handler: (req: ValidatedRequest<T>, res: HttpResponse) => any | Promise<any>) => {\n return validate({ body: schema }, handler);\n };\n}\n\nexport function query<T>(schema: ValidationSchema<T>) {\n return (handler: (req: ValidatedRequest<any>, res: HttpResponse) => any | Promise<any>) => {\n return validate({ query: schema }, handler);\n };\n}\n\nexport function params<T>(schema: ValidationSchema<T>) {\n return (handler: (req: ValidatedRequest<any>, res: HttpResponse) => any | Promise<any>) => {\n return validate({ params: schema }, handler);\n };\n}\n\n// Schema composition helpers\nexport function combineSchemas(schemas: ValidationConfig): ValidationConfig {\n return schemas;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"schema-interface.js","sourceRoot":"","sources":["../../../src/core/validation/schema-interface.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,0EAA0E;AAW1E;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxB,MAAM,CAAoB;IAE1C,YAAY,MAAyB;QACnC,MAAM,OAAO,GAAG,sBAAsB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAcD;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAQ;IACzC,OAAO,GAAG,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,UAAU,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAU;IACjD,qBAAqB;IACrB,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mBAAmB;IACnB,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,OAAO,IAAI,eAAe,CACxB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,mBAAmB;YAC7C,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS;SAC9B,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC;IAED,mBAAmB;IACnB,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3D,OAAO,IAAI,eAAe,CACxB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,CAAC;YAClC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,mBAAmB;YAC9C,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,SAAS;SAC/B,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC;IAED,mBAAmB;IACnB,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,OAAO,IAAI,eAAe,CACxB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE,CAAC,CAAC;YAChD,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACzC,OAAO,EAAE,GAAG;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS;SAC9B,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC;IAED,gBAAgB;IAChB,OAAO,IAAI,eAAe,CAAC;QACzB;YACE,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC;YACvC,IAAI,EAAE,SAAS;SAChB;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"schema-interface.js","sourceRoot":"","sources":["../../../src/core/validation/schema-interface.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,0EAA0E;AAW1E;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxB,MAAM,CAAoB;IAE1C,YAAY,MAAyB;QACnC,MAAM,OAAO,GAAG,sBAAsB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAcD;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAQ;IACzC,OAAO,GAAG,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,UAAU,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAU;IACjD,qBAAqB;IACrB,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mBAAmB;IACnB,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,OAAO,IAAI,eAAe,CACxB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,mBAAmB;YAC7C,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS;SAC9B,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC;IAED,mBAAmB;IACnB,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3D,OAAO,IAAI,eAAe,CACxB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,CAAC;YAClC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,mBAAmB;YAC9C,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,SAAS;SAC/B,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC;IAED,mBAAmB;IACnB,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,OAAO,IAAI,eAAe,CACxB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE,CAAC,CAAC;YAChD,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACzC,OAAO,EAAE,GAAG;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS;SAC9B,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC;IAED,gBAAgB;IAChB,OAAO,IAAI,eAAe,CAAC;QACzB;YACE,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC;YACvC,IAAI,EAAE,SAAS;SAChB;KACF,CAAC,CAAC;AACL,CAAC","sourcesContent":["// Universal Validation Schema Interface for Moro Framework\n// Allows Zod, Joi, Yup, and other validation libraries to work seamlessly\n\n/**\n * Standard validation error structure\n */\nexport interface ValidationIssue {\n path: (string | number)[];\n message: string;\n code: string;\n}\n\n/**\n * Standard validation error class\n * Compatible with ZodError structure\n */\nexport class ValidationError extends Error {\n public readonly issues: ValidationIssue[];\n\n constructor(issues: ValidationIssue[]) {\n const message = `Validation failed: ${issues.map(i => i.message).join(', ')}`;\n super(message);\n this.name = 'ValidationError';\n this.issues = issues;\n }\n}\n\n/**\n * Universal validation schema interface\n * This is what Zod naturally implements! No breaking changes needed.\n */\nexport interface ValidationSchema<T = any> {\n /**\n * Parse data asynchronously and return validated result\n * Throws ValidationError on validation failure\n */\n parseAsync(data: unknown): Promise<T>;\n}\n\n/**\n * Check if an object implements the ValidationSchema interface\n */\nexport function isValidationSchema(obj: any): obj is ValidationSchema {\n return obj && typeof obj.parseAsync === 'function';\n}\n\n/**\n * Convert various error formats to our standard ValidationError\n */\nexport function normalizeValidationError(error: any): ValidationError {\n // Already our format\n if (error instanceof ValidationError) {\n return error;\n }\n\n // Zod error format\n if (error && error.issues && Array.isArray(error.issues)) {\n return new ValidationError(\n error.issues.map((issue: any) => ({\n path: issue.path || [],\n message: issue.message || 'Validation failed',\n code: issue.code || 'invalid',\n }))\n );\n }\n\n // Joi error format\n if (error && error.details && Array.isArray(error.details)) {\n return new ValidationError(\n error.details.map((detail: any) => ({\n path: detail.path || [],\n message: detail.message || 'Validation failed',\n code: detail.type || 'invalid',\n }))\n );\n }\n\n // Yup error format\n if (error && error.errors && Array.isArray(error.errors)) {\n return new ValidationError(\n error.errors.map((msg: string, index: number) => ({\n path: error.path ? [error.path] : [index],\n message: msg,\n code: error.type || 'invalid',\n }))\n );\n }\n\n // Generic error\n return new ValidationError([\n {\n path: [],\n message: error.message || String(error),\n code: 'unknown',\n },\n ]);\n}\n\n// Type helper for inferring types from validation schemas\nexport type InferSchemaType<T> = T extends ValidationSchema<infer U> ? U : never;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"facade.js","sourceRoot":"","sources":["../../../src/core/workers/facade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"facade.js","sourceRoot":"","sources":["../../../src/core/workers/facade.ts"],"names":[],"mappings":"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","sourcesContent":["// Worker Threads Facade - Clean API for optional worker thread functionality\n// Provides a clean interface that gracefully degrades when workers aren't available\n\nexport interface WorkerTask {\n id: string;\n type: string;\n data: any;\n priority?: 'low' | 'normal' | 'high';\n timeout?: number;\n}\n\nexport interface WorkerStats {\n workerCount: number;\n activeTasks: number;\n queuedTasks: number;\n isShuttingDown: boolean;\n}\n\nexport interface WorkerAPI {\n executeTask<T = any>(task: WorkerTask): Promise<T>;\n getStats(): WorkerStats;\n shutdown(): Promise<void>;\n}\n\nexport interface WorkerHelpers {\n verifyJWT(token: string, secret: string, options?: any): Promise<any>;\n signJWT(payload: any, secret: string, options?: any): Promise<string>;\n hash(data: string, algorithm?: string): Promise<string>;\n heavyComputation(data: any): Promise<any>;\n transformJSON(data: any, transformer: (data: any) => any): Promise<any>;\n}\n\n/**\n * Worker Threads Facade - Provides clean access to optional worker functionality\n */\nexport class WorkerThreadsFacade {\n private workerManager: WorkerAPI | null = null;\n private workerTasks: WorkerHelpers | null = null;\n private executeOnWorker: ((task: WorkerTask) => Promise<any>) | null = null;\n private initialized = false;\n\n /**\n * Lazy initialize worker threads\n */\n async ensureInitialized(): Promise<void> {\n if (this.initialized) return;\n\n try {\n const workers = await import('./index.js');\n this.workerManager = workers.getWorkerManager();\n this.workerTasks = workers.workerTasks;\n this.executeOnWorker = workers.executeOnWorker;\n } catch {\n // Workers not available - graceful degradation\n this.workerManager = null;\n this.workerTasks = null;\n this.executeOnWorker = null;\n }\n\n this.initialized = true;\n }\n\n /**\n * Execute a task on worker threads\n */\n async executeTask<T = any>(task: WorkerTask): Promise<T> {\n await this.ensureInitialized();\n\n if (!this.workerManager) {\n throw new Error('Worker threads are not available in this environment');\n }\n\n return this.workerManager.executeTask<T>(task);\n }\n\n /**\n * Get worker thread statistics\n */\n async getStats(): Promise<WorkerStats | null> {\n await this.ensureInitialized();\n return this.workerManager?.getStats() || null;\n }\n\n /**\n * Shutdown worker threads\n */\n async shutdown(): Promise<void> {\n await this.ensureInitialized();\n await this.workerManager?.shutdown();\n }\n\n /**\n * JWT operations using worker threads\n */\n async getJwtWorker(): Promise<{\n verify: WorkerHelpers['verifyJWT'];\n sign: WorkerHelpers['signJWT'];\n } | null> {\n await this.ensureInitialized();\n\n if (!this.workerTasks) return null;\n\n return {\n verify: this.workerTasks.verifyJWT.bind(this.workerTasks),\n sign: this.workerTasks.signJWT.bind(this.workerTasks),\n };\n }\n\n /**\n * Crypto operations using worker threads\n */\n async getCryptoWorker(): Promise<{ hash: WorkerHelpers['hash'] } | null> {\n await this.ensureInitialized();\n\n if (!this.workerTasks) return null;\n\n return {\n hash: this.workerTasks.hash.bind(this.workerTasks),\n };\n }\n\n /**\n * Heavy computation operations using worker threads\n */\n async getComputeWorker(): Promise<{\n heavy: WorkerHelpers['heavyComputation'];\n transformJSON: WorkerHelpers['transformJSON'];\n } | null> {\n await this.ensureInitialized();\n\n if (!this.workerTasks) return null;\n\n return {\n heavy: this.workerTasks.heavyComputation.bind(this.workerTasks),\n transformJSON: this.workerTasks.transformJSON.bind(this.workerTasks),\n };\n }\n\n /**\n * Check if worker threads are available\n */\n async isAvailable(): Promise<boolean> {\n await this.ensureInitialized();\n return this.workerManager !== null;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/workers/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,yDAAyD;AAEzD,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,WAAW,EAGX,YAAY,GACb,MAAM,qBAAqB,CAAC;AAE7B,mBAAmB;AACnB,OAAO,EACL,mBAAmB,GAIpB,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/workers/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,yDAAyD;AAEzD,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,WAAW,EAGX,YAAY,GACb,MAAM,qBAAqB,CAAC;AAE7B,mBAAmB;AACnB,OAAO,EACL,mBAAmB,GAIpB,MAAM,aAAa,CAAC","sourcesContent":["// Worker Threads - CPU-intensive operations offloading\n// Massive performance gains: 50-200% for CPU-bound tasks\n\nexport {\n WorkerManager,\n getWorkerManager,\n executeOnWorker,\n workerTasks,\n type WorkerTask,\n type WorkerResult,\n WORKER_TASKS,\n} from './worker-manager.js';\n\n// Clean facade API\nexport {\n WorkerThreadsFacade,\n type WorkerStats,\n type WorkerAPI,\n type WorkerHelpers,\n} from './facade.js';\n"]}
@@ -0,0 +1 @@
1
+ export declare const WORKER_ENTRY: string;
@@ -0,0 +1,12 @@
1
+ // Resolves the compiled worker entry (worker.js, this module's sibling in
2
+ // dist/**) relative to THIS module, so it works for any consumer of the
3
+ // published package - never a cwd-relative path (the package ships only dist/**
4
+ // and worker_threads cannot execute a .ts file).
5
+ //
6
+ // This file exists solely to isolate the ESM-only `import.meta` token. ts-jest
7
+ // transpiles the framework to CommonJS for the test runner, where a literal
8
+ // import.meta is a load-time SyntaxError; jest.config maps this module to a stub
9
+ // so WorkerManager can be imported in tests without spawning real threads.
10
+ import { fileURLToPath } from 'url';
11
+ export const WORKER_ENTRY = fileURLToPath(new URL('./worker.js', import.meta.url));
12
+ //# sourceMappingURL=worker-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-entry.js","sourceRoot":"","sources":["../../../src/core/workers/worker-entry.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,wEAAwE;AACxE,gFAAgF;AAChF,iDAAiD;AACjD,EAAE;AACF,+EAA+E;AAC/E,4EAA4E;AAC5E,iFAAiF;AACjF,2EAA2E;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,CAAC,MAAM,YAAY,GAAW,aAAa,CAAC,IAAI,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC","sourcesContent":["// Resolves the compiled worker entry (worker.js, this module's sibling in\n// dist/**) relative to THIS module, so it works for any consumer of the\n// published package - never a cwd-relative path (the package ships only dist/**\n// and worker_threads cannot execute a .ts file).\n//\n// This file exists solely to isolate the ESM-only `import.meta` token. ts-jest\n// transpiles the framework to CommonJS for the test runner, where a literal\n// import.meta is a load-time SyntaxError; jest.config maps this module to a stub\n// so WorkerManager can be imported in tests without spawning real threads.\nimport { fileURLToPath } from 'url';\n\nexport const WORKER_ENTRY: string = fileURLToPath(new URL('./worker.js', import.meta.url));\n"]}
@@ -44,9 +44,17 @@ export declare class WorkerManager {
44
44
  private workerCount;
45
45
  private maxQueueSize;
46
46
  private isShuttingDown;
47
+ private maxRestartAttempts;
48
+ private restartBackoffMs;
49
+ private restartAttempts;
50
+ private restartTimers;
51
+ private handledFailures;
52
+ private poolFailed;
47
53
  constructor(options?: {
48
54
  workerCount?: number;
49
55
  maxQueueSize?: number;
56
+ maxRestartAttempts?: number;
57
+ restartBackoffMs?: number;
50
58
  });
51
59
  /**
52
60
  * Initialize worker threads
@@ -57,9 +65,22 @@ export declare class WorkerManager {
57
65
  */
58
66
  private createWorker;
59
67
  /**
60
- * Restart a failed worker
68
+ * Handle a crashed worker: reject only the tasks that were assigned to it and
69
+ * schedule a backed-off restart. A failed worker emits both 'error' and 'exit',
70
+ * so this is guarded to run at most once per worker.
61
71
  */
62
- private restartWorker;
72
+ private handleWorkerFailure;
73
+ /**
74
+ * Schedule a replacement worker with exponential backoff, capping the number of
75
+ * consecutive restart attempts so a persistently broken worker entry can never
76
+ * spin into an unbounded restart loop.
77
+ */
78
+ private scheduleRestart;
79
+ /**
80
+ * Give up after too many failed restarts: fail every outstanding task cleanly
81
+ * (rejecting their promises) instead of looping forever.
82
+ */
83
+ private failPool;
63
84
  /**
64
85
  * Execute a task on a worker thread
65
86
  */
@@ -2,11 +2,17 @@
2
2
  import { Worker } from 'worker_threads';
3
3
  import { createFrameworkLogger } from '../logger/index.js';
4
4
  import { cpus } from 'os';
5
- import { join } from 'path';
6
5
  import { isPackageAvailable } from '../utilities/package-utils.js';
6
+ // WORKER_ENTRY resolves to worker.js, this file's compiled sibling in dist/**,
7
+ // via import.meta in ./worker-entry.js. That ESM-only syntax is isolated in its
8
+ // own module (mapped to a stub in jest.config) so importing WorkerManager under
9
+ // ts-jest's CommonJS transform never hits a load-time import.meta SyntaxError.
10
+ import { WORKER_ENTRY } from './worker-entry.js';
7
11
  // Optional JWT import
8
12
  const jwtAvailable = isPackageAvailable('jsonwebtoken');
9
13
  const logger = createFrameworkLogger('WorkerManager');
14
+ // Upper bound on the exponential restart backoff
15
+ const MAX_RESTART_BACKOFF_MS = 5000;
10
16
  // Hoisted constants — avoids object allocation inside sort comparator on every call
11
17
  const PRIORITY_ORDER = { high: 3, normal: 2, low: 1 };
12
18
  // Simple counter for task IDs — avoids expensive crypto.randomBytes for non-security IDs
@@ -37,9 +43,17 @@ export class WorkerManager {
37
43
  workerCount;
38
44
  maxQueueSize;
39
45
  isShuttingDown = false;
46
+ maxRestartAttempts;
47
+ restartBackoffMs;
48
+ restartAttempts = 0;
49
+ restartTimers = new Set();
50
+ handledFailures = new WeakSet();
51
+ poolFailed = false;
40
52
  constructor(options = {}) {
41
53
  this.workerCount = options.workerCount || Math.max(1, cpus().length - 1); // Leave 1 core for main thread
42
54
  this.maxQueueSize = options.maxQueueSize || 1000;
55
+ this.maxRestartAttempts = options.maxRestartAttempts ?? 10;
56
+ this.restartBackoffMs = options.restartBackoffMs ?? 100;
43
57
  this.initializeWorkers();
44
58
  }
45
59
  /**
@@ -58,42 +72,114 @@ export class WorkerManager {
58
72
  * Create a single worker thread
59
73
  */
60
74
  createWorker() {
61
- const workerPath = join(process.cwd(), 'src/core/workers/worker.ts');
62
- const worker = new Worker(workerPath, {
63
- workerData: { type: 'worker' },
64
- });
75
+ if (this.isShuttingDown || this.poolFailed) {
76
+ return;
77
+ }
78
+ let worker;
79
+ try {
80
+ worker = new Worker(WORKER_ENTRY, {
81
+ workerData: { type: 'worker' },
82
+ });
83
+ }
84
+ catch (error) {
85
+ // Spawning can fail synchronously (e.g. a missing entry file). Treat it the
86
+ // same as a runtime failure so we back off instead of throwing.
87
+ logger.error('Failed to spawn worker thread', 'WorkerSpawn', {
88
+ error: error instanceof Error ? error.message : String(error),
89
+ });
90
+ this.scheduleRestart();
91
+ return;
92
+ }
65
93
  worker.on('message', (result) => {
94
+ // A successful message proves the pool is healthy; reset the restart budget.
95
+ this.restartAttempts = 0;
66
96
  this.handleWorkerResult(result);
67
97
  });
68
98
  worker.on('error', error => {
69
99
  logger.error('Worker thread error', 'WorkerError', { error: error.message });
70
- this.restartWorker(worker);
100
+ this.handleWorkerFailure(worker);
71
101
  });
72
102
  worker.on('exit', code => {
73
103
  if (code !== 0 && !this.isShuttingDown) {
74
104
  logger.warn(`Worker exited with code ${code}, restarting`, 'WorkerExit');
75
- this.restartWorker(worker);
105
+ this.handleWorkerFailure(worker);
76
106
  }
77
107
  });
78
108
  this.workers.set(worker.threadId, worker);
79
109
  logger.debug(`Created worker thread ${worker.threadId}`, 'WorkerCreate');
80
110
  }
81
111
  /**
82
- * Restart a failed worker
112
+ * Handle a crashed worker: reject only the tasks that were assigned to it and
113
+ * schedule a backed-off restart. A failed worker emits both 'error' and 'exit',
114
+ * so this is guarded to run at most once per worker.
115
+ */
116
+ handleWorkerFailure(worker) {
117
+ if (this.handledFailures.has(worker)) {
118
+ return;
119
+ }
120
+ this.handledFailures.add(worker);
121
+ this.workers.delete(worker.threadId);
122
+ if (this.isShuttingDown) {
123
+ return;
124
+ }
125
+ // Reject only the tasks that were dispatched to this specific worker. Tasks
126
+ // still queued (or running on other workers) are intentionally left alone.
127
+ for (const [taskId, taskInfo] of this.activeTasks.entries()) {
128
+ if (taskInfo.assignedWorker === worker) {
129
+ if (taskInfo.timeout) {
130
+ clearTimeout(taskInfo.timeout);
131
+ }
132
+ taskInfo.reject(new Error('Worker thread failed'));
133
+ this.activeTasks.delete(taskId);
134
+ }
135
+ }
136
+ this.scheduleRestart();
137
+ }
138
+ /**
139
+ * Schedule a replacement worker with exponential backoff, capping the number of
140
+ * consecutive restart attempts so a persistently broken worker entry can never
141
+ * spin into an unbounded restart loop.
83
142
  */
84
- restartWorker(oldWorker) {
85
- const threadId = oldWorker.threadId;
86
- this.workers.delete(threadId);
87
- // Clean up any pending tasks for this worker
143
+ scheduleRestart() {
144
+ if (this.isShuttingDown || this.poolFailed) {
145
+ return;
146
+ }
147
+ this.restartAttempts++;
148
+ if (this.restartAttempts > this.maxRestartAttempts) {
149
+ this.failPool();
150
+ return;
151
+ }
152
+ const delay = Math.min(this.restartBackoffMs * 2 ** (this.restartAttempts - 1), MAX_RESTART_BACKOFF_MS);
153
+ logger.warn(`Scheduling worker restart in ${delay}ms (attempt ${this.restartAttempts}/${this.maxRestartAttempts})`, 'WorkerRestart');
154
+ const timer = setTimeout(() => {
155
+ this.restartTimers.delete(timer);
156
+ this.createWorker();
157
+ }, delay);
158
+ // Don't keep the process alive purely for a pending restart
159
+ timer.unref();
160
+ this.restartTimers.add(timer);
161
+ }
162
+ /**
163
+ * Give up after too many failed restarts: fail every outstanding task cleanly
164
+ * (rejecting their promises) instead of looping forever.
165
+ */
166
+ failPool() {
167
+ if (this.poolFailed) {
168
+ return;
169
+ }
170
+ this.poolFailed = true;
171
+ logger.error(`Worker pool failed to recover after ${this.maxRestartAttempts} restart attempts`, 'WorkerPoolFailed');
172
+ const error = new Error(`Worker pool is unavailable after ${this.maxRestartAttempts} failed restart attempts`);
173
+ // Every queued task also has an activeTasks entry, so this rejects both
174
+ // in-flight and queued work.
88
175
  for (const [taskId, taskInfo] of this.activeTasks.entries()) {
89
176
  if (taskInfo.timeout) {
90
177
  clearTimeout(taskInfo.timeout);
91
178
  }
92
- taskInfo.reject(new Error('Worker thread failed'));
179
+ taskInfo.reject(error);
93
180
  this.activeTasks.delete(taskId);
94
181
  }
95
- // Create new worker
96
- this.createWorker();
182
+ this.taskQueue.length = 0;
97
183
  }
98
184
  /**
99
185
  * Execute a task on a worker thread
@@ -102,6 +188,9 @@ export class WorkerManager {
102
188
  if (this.isShuttingDown) {
103
189
  throw new Error('Worker manager is shutting down');
104
190
  }
191
+ if (this.poolFailed) {
192
+ throw new Error('Worker pool is unavailable (too many worker failures)');
193
+ }
105
194
  return new Promise((resolve, reject) => {
106
195
  // Check queue size limit
107
196
  if (this.taskQueue.length >= this.maxQueueSize) {
@@ -131,7 +220,8 @@ export class WorkerManager {
131
220
  */
132
221
  processQueue() {
133
222
  // Sort queue by priority (high first)
134
- this.taskQueue.sort((a, b) => PRIORITY_ORDER[b.priority || 'normal'] - PRIORITY_ORDER[a.priority || 'normal']);
223
+ this.taskQueue.sort((a, b) => (PRIORITY_ORDER[b.priority || 'normal'] ?? 0) -
224
+ (PRIORITY_ORDER[a.priority || 'normal'] ?? 0));
135
225
  // Assign tasks to available workers
136
226
  for (const [threadId, worker] of this.workers.entries()) {
137
227
  if (this.taskQueue.length === 0)
@@ -140,6 +230,11 @@ export class WorkerManager {
140
230
  // For simplicity, we'll send tasks and let workers handle queuing
141
231
  const task = this.taskQueue.shift();
142
232
  if (task) {
233
+ // Record the assignment so a crashed worker only rejects its own tasks.
234
+ const taskInfo = this.activeTasks.get(task.id);
235
+ if (taskInfo) {
236
+ taskInfo.assignedWorker = worker;
237
+ }
143
238
  worker.postMessage(task);
144
239
  logger.debug(`Assigned task ${task.id} to worker ${threadId}`, 'TaskAssigned');
145
240
  }
@@ -177,6 +272,11 @@ export class WorkerManager {
177
272
  */
178
273
  async shutdown() {
179
274
  this.isShuttingDown = true;
275
+ // Cancel any pending worker restarts
276
+ for (const timer of this.restartTimers) {
277
+ clearTimeout(timer);
278
+ }
279
+ this.restartTimers.clear();
180
280
  // Reject all pending tasks
181
281
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
182
282
  for (const [taskId, taskInfo] of this.activeTasks.entries()) {
@@ -188,7 +288,7 @@ export class WorkerManager {
188
288
  // Terminate all workers
189
289
  const shutdownPromises = Array.from(this.workers.values()).map(worker => new Promise(resolve => {
190
290
  worker.once('exit', () => resolve());
191
- worker.terminate();
291
+ void worker.terminate();
192
292
  }));
193
293
  await Promise.all(shutdownPromises);
194
294
  this.workers.clear();
@@ -1 +1 @@
1
- {"version":3,"file":"worker-manager.js","sourceRoot":"","sources":["../../../src/core/workers/worker-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker-manager.js","sourceRoot":"","sources":["../../../src/core/workers/worker-manager.ts"],"names":[],"mappings":"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","sourcesContent":["// Worker Thread Manager - Offload CPU-intensive operations\nimport { Worker } from 'worker_threads';\nimport { createFrameworkLogger } from '../logger/index.js';\nimport { cpus } from 'os';\nimport { isPackageAvailable } from '../utilities/package-utils.js';\n// WORKER_ENTRY resolves to worker.js, this file's compiled sibling in dist/**,\n// via import.meta in ./worker-entry.js. That ESM-only syntax is isolated in its\n// own module (mapped to a stub in jest.config) so importing WorkerManager under\n// ts-jest's CommonJS transform never hits a load-time import.meta SyntaxError.\nimport { WORKER_ENTRY } from './worker-entry.js';\n\n// Optional JWT import\nconst jwtAvailable = isPackageAvailable('jsonwebtoken');\n\nconst logger = createFrameworkLogger('WorkerManager');\n\n// Upper bound on the exponential restart backoff\nconst MAX_RESTART_BACKOFF_MS = 5000;\n\n// Hoisted constants — avoids object allocation inside sort comparator on every call\nconst PRIORITY_ORDER: Record<string, number> = { high: 3, normal: 2, low: 1 };\n\n// Simple counter for task IDs — avoids expensive crypto.randomBytes for non-security IDs\nlet taskIdCounter = 0;\n\n/**\n * Worker task definitions\n */\nexport interface WorkerTask {\n id: string;\n type: string;\n data: any;\n priority?: 'low' | 'normal' | 'high';\n timeout?: number;\n}\n\n/**\n * Worker result\n */\nexport interface WorkerResult {\n taskId: string;\n success: boolean;\n data?: any;\n error?: string;\n executionTime: number;\n}\n\n/**\n * Active task tracking\n */\ninterface ActiveTask {\n resolve: CallableFunction;\n reject: CallableFunction;\n timeout: NodeJS.Timeout | null;\n // The worker a task was dispatched to (set once it leaves the queue). Used so a\n // crashed worker only rejects its own in-flight tasks, not everyone else's.\n assignedWorker?: Worker;\n}\n\n/**\n * Built-in worker tasks\n */\nexport const WORKER_TASKS = {\n JWT_VERIFY: 'jwt:verify',\n JWT_SIGN: 'jwt:sign',\n CRYPTO_HASH: 'crypto:hash',\n CRYPTO_ENCRYPT: 'crypto:encrypt',\n CRYPTO_DECRYPT: 'crypto:decrypt',\n DATA_COMPRESS: 'data:compress',\n DATA_DECOMPRESS: 'data:decompress',\n IMAGE_PROCESS: 'image:process',\n HEAVY_COMPUTATION: 'computation:heavy',\n JSON_TRANSFORM: 'json:transform',\n} as const;\n\n/**\n * Worker Thread Manager\n * Manages a pool of worker threads for CPU-intensive operations\n */\nexport class WorkerManager {\n private workers: Map<number, Worker> = new Map();\n private taskQueue: WorkerTask[] = [];\n private activeTasks: Map<string, ActiveTask> = new Map();\n private workerCount: number;\n private maxQueueSize: number;\n private isShuttingDown = false;\n private maxRestartAttempts: number;\n private restartBackoffMs: number;\n private restartAttempts = 0;\n private restartTimers = new Set<NodeJS.Timeout>();\n private handledFailures = new WeakSet<Worker>();\n private poolFailed = false;\n\n constructor(\n options: {\n workerCount?: number;\n maxQueueSize?: number;\n maxRestartAttempts?: number;\n restartBackoffMs?: number;\n } = {}\n ) {\n this.workerCount = options.workerCount || Math.max(1, cpus().length - 1); // Leave 1 core for main thread\n this.maxQueueSize = options.maxQueueSize || 1000;\n this.maxRestartAttempts = options.maxRestartAttempts ?? 10;\n this.restartBackoffMs = options.restartBackoffMs ?? 100;\n\n this.initializeWorkers();\n }\n\n /**\n * Initialize worker threads\n */\n private initializeWorkers(): void {\n for (let i = 0; i < this.workerCount; i++) {\n this.createWorker();\n }\n\n logger.info(`Initialized ${this.workerCount} worker threads`, 'WorkerInit', {\n totalWorkers: this.workerCount,\n maxQueueSize: this.maxQueueSize,\n });\n }\n\n /**\n * Create a single worker thread\n */\n private createWorker(): void {\n if (this.isShuttingDown || this.poolFailed) {\n return;\n }\n\n let worker: Worker;\n try {\n worker = new Worker(WORKER_ENTRY, {\n workerData: { type: 'worker' },\n });\n } catch (error) {\n // Spawning can fail synchronously (e.g. a missing entry file). Treat it the\n // same as a runtime failure so we back off instead of throwing.\n logger.error('Failed to spawn worker thread', 'WorkerSpawn', {\n error: error instanceof Error ? error.message : String(error),\n });\n this.scheduleRestart();\n return;\n }\n\n worker.on('message', (result: WorkerResult) => {\n // A successful message proves the pool is healthy; reset the restart budget.\n this.restartAttempts = 0;\n this.handleWorkerResult(result);\n });\n\n worker.on('error', error => {\n logger.error('Worker thread error', 'WorkerError', { error: error.message });\n this.handleWorkerFailure(worker);\n });\n\n worker.on('exit', code => {\n if (code !== 0 && !this.isShuttingDown) {\n logger.warn(`Worker exited with code ${code}, restarting`, 'WorkerExit');\n this.handleWorkerFailure(worker);\n }\n });\n\n this.workers.set(worker.threadId, worker);\n logger.debug(`Created worker thread ${worker.threadId}`, 'WorkerCreate');\n }\n\n /**\n * Handle a crashed worker: reject only the tasks that were assigned to it and\n * schedule a backed-off restart. A failed worker emits both 'error' and 'exit',\n * so this is guarded to run at most once per worker.\n */\n private handleWorkerFailure(worker: Worker): void {\n if (this.handledFailures.has(worker)) {\n return;\n }\n this.handledFailures.add(worker);\n\n this.workers.delete(worker.threadId);\n\n if (this.isShuttingDown) {\n return;\n }\n\n // Reject only the tasks that were dispatched to this specific worker. Tasks\n // still queued (or running on other workers) are intentionally left alone.\n for (const [taskId, taskInfo] of this.activeTasks.entries()) {\n if (taskInfo.assignedWorker === worker) {\n if (taskInfo.timeout) {\n clearTimeout(taskInfo.timeout);\n }\n taskInfo.reject(new Error('Worker thread failed'));\n this.activeTasks.delete(taskId);\n }\n }\n\n this.scheduleRestart();\n }\n\n /**\n * Schedule a replacement worker with exponential backoff, capping the number of\n * consecutive restart attempts so a persistently broken worker entry can never\n * spin into an unbounded restart loop.\n */\n private scheduleRestart(): void {\n if (this.isShuttingDown || this.poolFailed) {\n return;\n }\n\n this.restartAttempts++;\n\n if (this.restartAttempts > this.maxRestartAttempts) {\n this.failPool();\n return;\n }\n\n const delay = Math.min(\n this.restartBackoffMs * 2 ** (this.restartAttempts - 1),\n MAX_RESTART_BACKOFF_MS\n );\n\n logger.warn(\n `Scheduling worker restart in ${delay}ms (attempt ${this.restartAttempts}/${this.maxRestartAttempts})`,\n 'WorkerRestart'\n );\n\n const timer = setTimeout(() => {\n this.restartTimers.delete(timer);\n this.createWorker();\n }, delay);\n\n // Don't keep the process alive purely for a pending restart\n timer.unref();\n this.restartTimers.add(timer);\n }\n\n /**\n * Give up after too many failed restarts: fail every outstanding task cleanly\n * (rejecting their promises) instead of looping forever.\n */\n private failPool(): void {\n if (this.poolFailed) {\n return;\n }\n this.poolFailed = true;\n\n logger.error(\n `Worker pool failed to recover after ${this.maxRestartAttempts} restart attempts`,\n 'WorkerPoolFailed'\n );\n\n const error = new Error(\n `Worker pool is unavailable after ${this.maxRestartAttempts} failed restart attempts`\n );\n\n // Every queued task also has an activeTasks entry, so this rejects both\n // in-flight and queued work.\n for (const [taskId, taskInfo] of this.activeTasks.entries()) {\n if (taskInfo.timeout) {\n clearTimeout(taskInfo.timeout);\n }\n taskInfo.reject(error);\n this.activeTasks.delete(taskId);\n }\n\n this.taskQueue.length = 0;\n }\n\n /**\n * Execute a task on a worker thread\n */\n async executeTask<T = any>(task: WorkerTask): Promise<T> {\n if (this.isShuttingDown) {\n throw new Error('Worker manager is shutting down');\n }\n\n if (this.poolFailed) {\n throw new Error('Worker pool is unavailable (too many worker failures)');\n }\n\n return new Promise<T>((resolve, reject) => {\n // Check queue size limit\n if (this.taskQueue.length >= this.maxQueueSize) {\n reject(new Error('Worker queue is full'));\n return;\n }\n\n // Add to queue\n this.taskQueue.push(task);\n\n // Set up promise handlers\n const timeout = task.timeout\n ? setTimeout(() => {\n this.activeTasks.delete(task.id);\n reject(new Error(`Task ${task.id} timed out`));\n }, task.timeout)\n : null;\n\n // Don't keep process alive for worker timeouts\n if (timeout) {\n timeout.unref();\n }\n\n this.activeTasks.set(task.id, { resolve, reject, timeout });\n\n // Try to assign task to available worker\n this.processQueue();\n });\n }\n\n /**\n * Process the task queue\n */\n private processQueue(): void {\n // Sort queue by priority (high first)\n this.taskQueue.sort(\n (a, b) =>\n (PRIORITY_ORDER[b.priority || 'normal'] ?? 0) -\n (PRIORITY_ORDER[a.priority || 'normal'] ?? 0)\n );\n\n // Assign tasks to available workers\n for (const [threadId, worker] of this.workers.entries()) {\n if (this.taskQueue.length === 0) break;\n\n // Check if worker is available (not currently processing)\n // For simplicity, we'll send tasks and let workers handle queuing\n const task = this.taskQueue.shift();\n if (task) {\n // Record the assignment so a crashed worker only rejects its own tasks.\n const taskInfo = this.activeTasks.get(task.id);\n if (taskInfo) {\n taskInfo.assignedWorker = worker;\n }\n worker.postMessage(task);\n logger.debug(`Assigned task ${task.id} to worker ${threadId}`, 'TaskAssigned');\n }\n }\n }\n\n /**\n * Handle result from worker thread\n */\n private handleWorkerResult(result: WorkerResult): void {\n const taskInfo = this.activeTasks.get(result.taskId);\n if (!taskInfo) {\n logger.warn(`Received result for unknown task ${result.taskId}`, 'UnknownTaskResult');\n return;\n }\n\n // Clear timeout\n if (taskInfo.timeout) {\n clearTimeout(taskInfo.timeout);\n }\n\n // Remove from active tasks\n this.activeTasks.delete(result.taskId);\n\n // Handle result\n if (result.success) {\n logger.debug(`Task ${result.taskId} completed in ${result.executionTime}ms`, 'TaskCompleted');\n taskInfo.resolve(result.data);\n } else {\n logger.error(`Task ${result.taskId} failed: ${result.error}`, 'TaskFailed');\n taskInfo.reject(new Error(result.error || 'Task failed'));\n }\n\n // Process next task in queue\n this.processQueue();\n }\n\n /**\n * Shutdown all workers\n */\n async shutdown(): Promise<void> {\n this.isShuttingDown = true;\n\n // Cancel any pending worker restarts\n for (const timer of this.restartTimers) {\n clearTimeout(timer);\n }\n this.restartTimers.clear();\n\n // Reject all pending tasks\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const [taskId, taskInfo] of this.activeTasks.entries()) {\n if (taskInfo.timeout) {\n clearTimeout(taskInfo.timeout);\n }\n taskInfo.reject(new Error('Worker manager shutting down'));\n }\n\n // Terminate all workers\n const shutdownPromises = Array.from(this.workers.values()).map(\n worker =>\n new Promise<void>(resolve => {\n worker.once('exit', () => resolve());\n void worker.terminate();\n })\n );\n\n await Promise.all(shutdownPromises);\n this.workers.clear();\n this.activeTasks.clear();\n this.taskQueue.length = 0;\n\n logger.info('Worker manager shutdown complete', 'WorkerShutdown');\n }\n\n /**\n * Get worker statistics\n */\n getStats() {\n return {\n workerCount: this.workers.size,\n activeTasks: this.activeTasks.size,\n queuedTasks: this.taskQueue.length,\n isShuttingDown: this.isShuttingDown,\n };\n }\n}\n\n// Singleton instance\nlet workerManagerInstance: WorkerManager | null = null;\n\n/**\n * Get or create the worker manager instance\n */\nexport function getWorkerManager(options?: {\n workerCount?: number;\n maxQueueSize?: number;\n}): WorkerManager {\n if (!workerManagerInstance) {\n workerManagerInstance = new WorkerManager(options);\n }\n return workerManagerInstance;\n}\n\n/**\n * Execute task on worker thread (convenience function)\n */\nexport async function executeOnWorker<T = any>(task: WorkerTask): Promise<T> {\n const manager = getWorkerManager();\n return manager.executeTask<T>(task);\n}\n\n/**\n * Built-in task helpers\n */\nexport const workerTasks = {\n /**\n * JWT verification (CPU-intensive)\n */\n async verifyJWT(token: string, secret: string, options?: any): Promise<any> {\n if (!jwtAvailable) {\n throw new Error(\n 'JWT verification requires the \"jsonwebtoken\" package. Please install it with: npm install jsonwebtoken @types/jsonwebtoken'\n );\n }\n return executeOnWorker({\n id: `jwt-verify-${Date.now()}-${++taskIdCounter}`,\n type: WORKER_TASKS.JWT_VERIFY,\n data: { token, secret, options },\n priority: 'high',\n timeout: 5000,\n });\n },\n\n /**\n * JWT signing (CPU-intensive)\n */\n async signJWT(payload: any, secret: string, options?: any): Promise<string> {\n if (!jwtAvailable) {\n throw new Error(\n 'JWT signing requires the \"jsonwebtoken\" package. Please install it with: npm install jsonwebtoken @types/jsonwebtoken'\n );\n }\n return executeOnWorker({\n id: `jwt-sign-${Date.now()}-${++taskIdCounter}`,\n type: WORKER_TASKS.JWT_SIGN,\n data: { payload, secret, options },\n priority: 'high',\n timeout: 5000,\n });\n },\n\n /**\n * Crypto hash (CPU-intensive)\n */\n async hash(data: string, algorithm = 'sha256'): Promise<string> {\n return executeOnWorker({\n id: `crypto-hash-${Date.now()}-${++taskIdCounter}`,\n type: WORKER_TASKS.CRYPTO_HASH,\n data: { data, algorithm },\n priority: 'normal',\n timeout: 10000,\n });\n },\n\n /**\n * Heavy computation example\n */\n async heavyComputation(data: any): Promise<any> {\n return executeOnWorker({\n id: `computation-${Date.now()}-${++taskIdCounter}`,\n type: WORKER_TASKS.HEAVY_COMPUTATION,\n data,\n priority: 'normal',\n timeout: 30000,\n });\n },\n\n /**\n * JSON transformation (can be CPU-intensive for large objects)\n */\n async transformJSON(data: any, transformer: (data: any) => any): Promise<any> {\n return executeOnWorker({\n id: `json-transform-${Date.now()}-${++taskIdCounter}`,\n type: WORKER_TASKS.JSON_TRANSFORM,\n data: { data, transformer: transformer.toString() },\n priority: 'normal',\n timeout: 15000,\n });\n },\n};\n"]}
@@ -337,7 +337,7 @@ function validateTransformerShape(code) {
337
337
  function checkDangerousPatterns(code) {
338
338
  // Check dangerous global identifiers
339
339
  for (let i = 0; i < DANGEROUS_IDENTIFIER_PATTERNS.length; i++) {
340
- if (DANGEROUS_IDENTIFIER_PATTERNS[i].test(code)) {
340
+ if (DANGEROUS_IDENTIFIER_PATTERNS[i]?.test(code)) {
341
341
  throw new Error(`Transformer code contains blocked identifier: "${DANGEROUS_GLOBALS[i]}". ` +
342
342
  'Transformer functions must be pure data transforms without access to Node.js internals.');
343
343
  }
@@ -438,11 +438,13 @@ async function handleJSONTransform(data) {
438
438
  }
439
439
  // Worker thread message handling
440
440
  if (parentPort) {
441
- parentPort.on('message', async (task) => {
442
- const result = await executeTask(task);
443
- if (parentPort) {
444
- parentPort.postMessage(result);
445
- }
441
+ parentPort.on('message', (task) => {
442
+ void (async () => {
443
+ const result = await executeTask(task);
444
+ if (parentPort) {
445
+ parentPort.postMessage(result);
446
+ }
447
+ })();
446
448
  });
447
449
  }
448
450
  //# sourceMappingURL=worker.js.map