@morojs/moro 1.6.2 → 1.6.4

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 (366) hide show
  1. package/dist/core/http/http-server.js +12 -9
  2. package/dist/core/http/http-server.js.map +1 -1
  3. package/dist/core/http/uws-http-server.js +1 -1
  4. package/dist/core/http/uws-http-server.js.map +1 -1
  5. package/dist/core/middleware/built-in/auth/core.d.ts +78 -0
  6. package/dist/core/middleware/built-in/auth/core.js +358 -0
  7. package/dist/core/middleware/built-in/auth/core.js.map +1 -0
  8. package/dist/core/middleware/built-in/{auth-helpers.js → auth/helpers.js} +1 -1
  9. package/dist/core/middleware/built-in/auth/helpers.js.map +1 -0
  10. package/dist/core/middleware/built-in/auth/hook.d.ts +30 -0
  11. package/dist/core/middleware/built-in/auth/hook.js +99 -0
  12. package/dist/core/middleware/built-in/auth/hook.js.map +1 -0
  13. package/dist/core/middleware/built-in/auth/index.d.ts +7 -0
  14. package/dist/core/middleware/built-in/auth/index.js +15 -0
  15. package/dist/core/middleware/built-in/auth/index.js.map +1 -0
  16. package/dist/core/middleware/built-in/{jwt-helpers.js → auth/jwt-helpers.js} +1 -1
  17. package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -0
  18. package/dist/core/middleware/built-in/auth/middleware.d.ts +23 -0
  19. package/dist/core/middleware/built-in/auth/middleware.js +71 -0
  20. package/dist/core/middleware/built-in/auth/middleware.js.map +1 -0
  21. package/dist/core/middleware/built-in/{auth-providers.d.ts → auth/providers.d.ts} +1 -1
  22. package/dist/core/middleware/built-in/{auth-providers.js → auth/providers.js} +1 -1
  23. package/dist/core/middleware/built-in/auth/providers.js.map +1 -0
  24. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.d.ts +1 -1
  25. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.js +1 -1
  26. package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -0
  27. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.d.ts +1 -1
  28. package/dist/core/middleware/built-in/cache/adapters/cache/index.js.map +1 -0
  29. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.d.ts +1 -1
  30. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.js +1 -1
  31. package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -0
  32. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.d.ts +1 -1
  33. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.js +2 -2
  34. package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -0
  35. package/dist/core/middleware/built-in/{adapters → cache/adapters}/index.d.ts +0 -2
  36. package/{src/core/middleware/built-in/adapters/index.ts → dist/core/middleware/built-in/cache/adapters/index.js} +1 -3
  37. package/dist/core/middleware/built-in/cache/adapters/index.js.map +1 -0
  38. package/dist/core/middleware/built-in/cache/core.d.ts +37 -0
  39. package/dist/core/middleware/built-in/cache/core.js +87 -0
  40. package/dist/core/middleware/built-in/cache/core.js.map +1 -0
  41. package/dist/core/middleware/built-in/cache/hook.d.ts +20 -0
  42. package/dist/core/middleware/built-in/{cache.js → cache/hook.js} +22 -5
  43. package/dist/core/middleware/built-in/cache/hook.js.map +1 -0
  44. package/dist/core/middleware/built-in/cache/index.d.ts +3 -0
  45. package/dist/core/middleware/built-in/cache/index.js +9 -0
  46. package/dist/core/middleware/built-in/cache/index.js.map +1 -0
  47. package/dist/core/middleware/built-in/cache/middleware.d.ts +17 -0
  48. package/dist/core/middleware/built-in/cache/middleware.js +44 -0
  49. package/dist/core/middleware/built-in/cache/middleware.js.map +1 -0
  50. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.d.ts +1 -1
  51. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.js +1 -1
  52. package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -0
  53. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.d.ts +1 -1
  54. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.js +1 -1
  55. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -0
  56. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.d.ts +1 -1
  57. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.js +2 -2
  58. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -0
  59. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.d.ts +1 -1
  60. package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js.map +1 -0
  61. package/dist/core/middleware/built-in/cdn/adapters/index.d.ts +2 -0
  62. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/index.js +0 -2
  63. package/dist/core/middleware/built-in/cdn/adapters/index.js.map +1 -0
  64. package/dist/core/middleware/built-in/cdn/core.d.ts +43 -0
  65. package/dist/core/middleware/built-in/cdn/core.js +144 -0
  66. package/dist/core/middleware/built-in/cdn/core.js.map +1 -0
  67. package/dist/core/middleware/built-in/cdn/hook.d.ts +22 -0
  68. package/dist/core/middleware/built-in/cdn/hook.js +70 -0
  69. package/dist/core/middleware/built-in/cdn/hook.js.map +1 -0
  70. package/dist/core/middleware/built-in/cdn/index.d.ts +5 -0
  71. package/dist/core/middleware/built-in/cdn/index.js +11 -0
  72. package/dist/core/middleware/built-in/cdn/index.js.map +1 -0
  73. package/dist/core/middleware/built-in/cdn/middleware.d.ts +21 -0
  74. package/dist/core/middleware/built-in/cdn/middleware.js +52 -0
  75. package/dist/core/middleware/built-in/cdn/middleware.js.map +1 -0
  76. package/dist/core/middleware/built-in/cookie/core.d.ts +37 -0
  77. package/dist/core/middleware/built-in/cookie/core.js +83 -0
  78. package/dist/core/middleware/built-in/cookie/core.js.map +1 -0
  79. package/dist/core/middleware/built-in/cookie/hook.d.ts +20 -0
  80. package/dist/core/middleware/built-in/cookie/hook.js +47 -0
  81. package/dist/core/middleware/built-in/cookie/hook.js.map +1 -0
  82. package/dist/core/middleware/built-in/cookie/index.d.ts +3 -0
  83. package/dist/core/middleware/built-in/cookie/index.js +9 -0
  84. package/dist/core/middleware/built-in/cookie/index.js.map +1 -0
  85. package/dist/core/middleware/built-in/cookie/middleware.d.ts +17 -0
  86. package/dist/core/middleware/built-in/cookie/middleware.js +36 -0
  87. package/dist/core/middleware/built-in/cookie/middleware.js.map +1 -0
  88. package/dist/core/middleware/built-in/cors/core.d.ts +23 -0
  89. package/dist/core/middleware/built-in/cors/core.js +51 -0
  90. package/dist/core/middleware/built-in/cors/core.js.map +1 -0
  91. package/dist/core/middleware/built-in/cors/hook.d.ts +17 -0
  92. package/dist/core/middleware/built-in/cors/hook.js +37 -0
  93. package/dist/core/middleware/built-in/cors/hook.js.map +1 -0
  94. package/dist/core/middleware/built-in/cors/index.d.ts +3 -0
  95. package/dist/core/middleware/built-in/cors/index.js +9 -0
  96. package/dist/core/middleware/built-in/cors/index.js.map +1 -0
  97. package/dist/core/middleware/built-in/cors/middleware.d.ts +16 -0
  98. package/dist/core/middleware/built-in/cors/middleware.js +22 -0
  99. package/dist/core/middleware/built-in/cors/middleware.js.map +1 -0
  100. package/dist/core/middleware/built-in/csp/core.d.ts +45 -0
  101. package/dist/core/middleware/built-in/csp/core.js +88 -0
  102. package/dist/core/middleware/built-in/csp/core.js.map +1 -0
  103. package/dist/core/middleware/built-in/csp/hook.d.ts +22 -0
  104. package/dist/core/middleware/built-in/csp/hook.js +47 -0
  105. package/dist/core/middleware/built-in/csp/hook.js.map +1 -0
  106. package/dist/core/middleware/built-in/csp/index.d.ts +3 -0
  107. package/dist/core/middleware/built-in/csp/index.js +9 -0
  108. package/dist/core/middleware/built-in/csp/index.js.map +1 -0
  109. package/dist/core/middleware/built-in/csp/middleware.d.ts +19 -0
  110. package/dist/core/middleware/built-in/csp/middleware.js +29 -0
  111. package/dist/core/middleware/built-in/csp/middleware.js.map +1 -0
  112. package/dist/core/middleware/built-in/csrf/core.d.ts +28 -0
  113. package/dist/core/middleware/built-in/csrf/core.js +69 -0
  114. package/dist/core/middleware/built-in/csrf/core.js.map +1 -0
  115. package/dist/core/middleware/built-in/csrf/hook.d.ts +17 -0
  116. package/dist/core/middleware/built-in/csrf/hook.js +45 -0
  117. package/dist/core/middleware/built-in/csrf/hook.js.map +1 -0
  118. package/dist/core/middleware/built-in/csrf/index.d.ts +3 -0
  119. package/dist/core/middleware/built-in/csrf/index.js +9 -0
  120. package/dist/core/middleware/built-in/csrf/index.js.map +1 -0
  121. package/dist/core/middleware/built-in/csrf/middleware.d.ts +16 -0
  122. package/dist/core/middleware/built-in/csrf/middleware.js +34 -0
  123. package/dist/core/middleware/built-in/csrf/middleware.js.map +1 -0
  124. package/dist/core/middleware/built-in/error-tracker/index.d.ts +1 -0
  125. package/dist/core/middleware/built-in/error-tracker/index.js +4 -0
  126. package/dist/core/middleware/built-in/error-tracker/index.js.map +1 -0
  127. package/dist/core/middleware/built-in/error-tracker/middleware.d.ts +12 -0
  128. package/dist/core/middleware/built-in/{error-tracker.js → error-tracker/middleware.js} +14 -3
  129. package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -0
  130. package/dist/core/middleware/built-in/index.d.ts +25 -59
  131. package/dist/core/middleware/built-in/index.js +31 -31
  132. package/dist/core/middleware/built-in/index.js.map +1 -1
  133. package/dist/core/middleware/built-in/performance-monitor/index.d.ts +1 -0
  134. package/dist/core/middleware/built-in/performance-monitor/index.js +4 -0
  135. package/dist/core/middleware/built-in/performance-monitor/index.js.map +1 -0
  136. package/dist/core/middleware/built-in/performance-monitor/middleware.d.ts +12 -0
  137. package/dist/core/middleware/built-in/{performance-monitor.js → performance-monitor/middleware.js} +14 -3
  138. package/dist/core/middleware/built-in/performance-monitor/middleware.js.map +1 -0
  139. package/dist/core/middleware/built-in/rate-limit/core.d.ts +33 -0
  140. package/dist/core/middleware/built-in/rate-limit/core.js +86 -0
  141. package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -0
  142. package/dist/core/middleware/built-in/rate-limit/hook.d.ts +20 -0
  143. package/dist/core/middleware/built-in/{rate-limit.js → rate-limit/hook.js} +22 -16
  144. package/dist/core/middleware/built-in/rate-limit/hook.js.map +1 -0
  145. package/dist/core/middleware/built-in/rate-limit/index.d.ts +3 -0
  146. package/dist/core/middleware/built-in/rate-limit/index.js +9 -0
  147. package/dist/core/middleware/built-in/rate-limit/index.js.map +1 -0
  148. package/dist/core/middleware/built-in/rate-limit/middleware.d.ts +16 -0
  149. package/dist/core/middleware/built-in/rate-limit/middleware.js +35 -0
  150. package/dist/core/middleware/built-in/rate-limit/middleware.js.map +1 -0
  151. package/dist/core/middleware/built-in/request-logger/index.d.ts +1 -0
  152. package/dist/core/middleware/built-in/request-logger/index.js +4 -0
  153. package/dist/core/middleware/built-in/request-logger/index.js.map +1 -0
  154. package/dist/core/middleware/built-in/request-logger/middleware.d.ts +12 -0
  155. package/dist/core/middleware/built-in/{request-logger.js → request-logger/middleware.js} +14 -3
  156. package/dist/core/middleware/built-in/request-logger/middleware.js.map +1 -0
  157. package/dist/core/middleware/built-in/session/core.d.ts +73 -0
  158. package/dist/core/middleware/built-in/session/core.js +227 -0
  159. package/dist/core/middleware/built-in/session/core.js.map +1 -0
  160. package/dist/core/middleware/built-in/session/hook.d.ts +17 -0
  161. package/dist/core/middleware/built-in/session/hook.js +53 -0
  162. package/dist/core/middleware/built-in/session/hook.js.map +1 -0
  163. package/dist/core/middleware/built-in/session/index.d.ts +3 -0
  164. package/dist/core/middleware/built-in/session/index.js +9 -0
  165. package/dist/core/middleware/built-in/session/index.js.map +1 -0
  166. package/dist/core/middleware/built-in/session/middleware.d.ts +17 -0
  167. package/dist/core/middleware/built-in/session/middleware.js +38 -0
  168. package/dist/core/middleware/built-in/session/middleware.js.map +1 -0
  169. package/dist/core/middleware/built-in/sse/core.d.ts +44 -0
  170. package/dist/core/middleware/built-in/sse/core.js +117 -0
  171. package/dist/core/middleware/built-in/sse/core.js.map +1 -0
  172. package/dist/core/middleware/built-in/sse/hook.d.ts +18 -0
  173. package/dist/core/middleware/built-in/sse/hook.js +60 -0
  174. package/dist/core/middleware/built-in/sse/hook.js.map +1 -0
  175. package/dist/core/middleware/built-in/sse/index.d.ts +3 -0
  176. package/dist/core/middleware/built-in/sse/index.js +9 -0
  177. package/dist/core/middleware/built-in/sse/index.js.map +1 -0
  178. package/dist/core/middleware/built-in/sse/middleware.d.ts +18 -0
  179. package/dist/core/middleware/built-in/sse/middleware.js +43 -0
  180. package/dist/core/middleware/built-in/sse/middleware.js.map +1 -0
  181. package/dist/core/middleware/built-in/validation/core.d.ts +23 -0
  182. package/dist/core/middleware/built-in/validation/core.js +93 -0
  183. package/dist/core/middleware/built-in/validation/core.js.map +1 -0
  184. package/dist/core/middleware/built-in/validation/hook.d.ts +13 -0
  185. package/dist/core/middleware/built-in/{validation.js → validation/hook.js} +14 -3
  186. package/dist/core/middleware/built-in/validation/hook.js.map +1 -0
  187. package/dist/core/middleware/built-in/validation/index.d.ts +3 -0
  188. package/dist/core/middleware/built-in/validation/index.js +9 -0
  189. package/dist/core/middleware/built-in/validation/index.js.map +1 -0
  190. package/dist/core/middleware/built-in/validation/middleware.d.ts +16 -0
  191. package/dist/core/middleware/built-in/validation/middleware.js +27 -0
  192. package/dist/core/middleware/built-in/validation/middleware.js.map +1 -0
  193. package/dist/core/middleware/index.js +6 -0
  194. package/dist/core/middleware/index.js.map +1 -1
  195. package/dist/core/routing/unified-router.d.ts +4 -20
  196. package/dist/core/routing/unified-router.js +61 -106
  197. package/dist/core/routing/unified-router.js.map +1 -1
  198. package/dist/index.d.ts +3 -2
  199. package/dist/index.js +3 -2
  200. package/dist/index.js.map +1 -1
  201. package/dist/moro.js +12 -18
  202. package/dist/moro.js.map +1 -1
  203. package/dist/types/hooks.d.ts +3 -0
  204. package/package.json +2 -6
  205. package/dist/core/middleware/built-in/adapters/cache/file.js.map +0 -1
  206. package/dist/core/middleware/built-in/adapters/cache/index.js.map +0 -1
  207. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +0 -1
  208. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +0 -1
  209. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +0 -1
  210. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +0 -1
  211. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +0 -1
  212. package/dist/core/middleware/built-in/adapters/cdn/index.js.map +0 -1
  213. package/dist/core/middleware/built-in/adapters/index.js.map +0 -1
  214. package/dist/core/middleware/built-in/auth-helpers.js.map +0 -1
  215. package/dist/core/middleware/built-in/auth-providers.js.map +0 -1
  216. package/dist/core/middleware/built-in/auth.d.ts +0 -30
  217. package/dist/core/middleware/built-in/auth.js +0 -348
  218. package/dist/core/middleware/built-in/auth.js.map +0 -1
  219. package/dist/core/middleware/built-in/cache.d.ts +0 -3
  220. package/dist/core/middleware/built-in/cache.js.map +0 -1
  221. package/dist/core/middleware/built-in/cdn.d.ts +0 -3
  222. package/dist/core/middleware/built-in/cdn.js +0 -109
  223. package/dist/core/middleware/built-in/cdn.js.map +0 -1
  224. package/dist/core/middleware/built-in/cookie.d.ts +0 -14
  225. package/dist/core/middleware/built-in/cookie.js +0 -64
  226. package/dist/core/middleware/built-in/cookie.js.map +0 -1
  227. package/dist/core/middleware/built-in/cors.d.ts +0 -2
  228. package/dist/core/middleware/built-in/cors.js +0 -25
  229. package/dist/core/middleware/built-in/cors.js.map +0 -1
  230. package/dist/core/middleware/built-in/csp.d.ts +0 -22
  231. package/dist/core/middleware/built-in/csp.js +0 -68
  232. package/dist/core/middleware/built-in/csp.js.map +0 -1
  233. package/dist/core/middleware/built-in/csrf.d.ts +0 -9
  234. package/dist/core/middleware/built-in/csrf.js +0 -60
  235. package/dist/core/middleware/built-in/csrf.js.map +0 -1
  236. package/dist/core/middleware/built-in/error-tracker.d.ts +0 -1
  237. package/dist/core/middleware/built-in/error-tracker.js.map +0 -1
  238. package/dist/core/middleware/built-in/jwt-helpers.js.map +0 -1
  239. package/dist/core/middleware/built-in/performance-monitor.d.ts +0 -1
  240. package/dist/core/middleware/built-in/performance-monitor.js.map +0 -1
  241. package/dist/core/middleware/built-in/rate-limit.d.ts +0 -6
  242. package/dist/core/middleware/built-in/rate-limit.js.map +0 -1
  243. package/dist/core/middleware/built-in/request-logger.d.ts +0 -1
  244. package/dist/core/middleware/built-in/request-logger.js.map +0 -1
  245. package/dist/core/middleware/built-in/session.d.ts +0 -41
  246. package/dist/core/middleware/built-in/session.js +0 -205
  247. package/dist/core/middleware/built-in/session.js.map +0 -1
  248. package/dist/core/middleware/built-in/sse.d.ts +0 -6
  249. package/dist/core/middleware/built-in/sse.js +0 -69
  250. package/dist/core/middleware/built-in/sse.js.map +0 -1
  251. package/dist/core/middleware/built-in/validation.d.ts +0 -2
  252. package/dist/core/middleware/built-in/validation.js.map +0 -1
  253. package/jest.config.mjs +0 -41
  254. package/src/core/auth/README.md +0 -339
  255. package/src/core/auth/morojs-adapter.ts +0 -415
  256. package/src/core/config/config-manager.ts +0 -133
  257. package/src/core/config/config-sources.ts +0 -600
  258. package/src/core/config/config-validator.ts +0 -1116
  259. package/src/core/config/file-loader.ts +0 -150
  260. package/src/core/config/index.ts +0 -109
  261. package/src/core/config/schema.ts +0 -164
  262. package/src/core/config/utils.ts +0 -244
  263. package/src/core/database/README.md +0 -238
  264. package/src/core/database/adapters/drizzle.ts +0 -415
  265. package/src/core/database/adapters/index.ts +0 -42
  266. package/src/core/database/adapters/mongodb.ts +0 -317
  267. package/src/core/database/adapters/mysql.ts +0 -235
  268. package/src/core/database/adapters/postgresql.ts +0 -226
  269. package/src/core/database/adapters/redis.ts +0 -379
  270. package/src/core/database/adapters/sqlite.ts +0 -263
  271. package/src/core/database/index.ts +0 -3
  272. package/src/core/docs/index.ts +0 -231
  273. package/src/core/docs/openapi-generator.ts +0 -576
  274. package/src/core/docs/schema-to-openapi.ts +0 -145
  275. package/src/core/docs/simple-docs.ts +0 -295
  276. package/src/core/docs/swagger-ui.ts +0 -354
  277. package/src/core/docs/zod-to-openapi.ts +0 -532
  278. package/src/core/events/event-bus.ts +0 -231
  279. package/src/core/events/index.ts +0 -12
  280. package/src/core/framework.ts +0 -885
  281. package/src/core/http/http-server.ts +0 -1847
  282. package/src/core/http/index.ts +0 -7
  283. package/src/core/http/uws-http-server.ts +0 -591
  284. package/src/core/logger/filters.ts +0 -153
  285. package/src/core/logger/index.ts +0 -21
  286. package/src/core/logger/logger.ts +0 -1033
  287. package/src/core/logger/outputs.ts +0 -132
  288. package/src/core/middleware/built-in/adapters/cache/file.ts +0 -104
  289. package/src/core/middleware/built-in/adapters/cache/index.ts +0 -23
  290. package/src/core/middleware/built-in/adapters/cache/memory.ts +0 -73
  291. package/src/core/middleware/built-in/adapters/cache/redis.ts +0 -114
  292. package/src/core/middleware/built-in/adapters/cdn/azure.ts +0 -60
  293. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +0 -83
  294. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +0 -94
  295. package/src/core/middleware/built-in/adapters/cdn/index.ts +0 -23
  296. package/src/core/middleware/built-in/auth-helpers.ts +0 -401
  297. package/src/core/middleware/built-in/auth-providers.ts +0 -480
  298. package/src/core/middleware/built-in/auth.ts +0 -410
  299. package/src/core/middleware/built-in/cache.ts +0 -213
  300. package/src/core/middleware/built-in/cdn.ts +0 -124
  301. package/src/core/middleware/built-in/cookie.ts +0 -85
  302. package/src/core/middleware/built-in/cors.ts +0 -38
  303. package/src/core/middleware/built-in/csp.ts +0 -101
  304. package/src/core/middleware/built-in/csrf.ts +0 -82
  305. package/src/core/middleware/built-in/error-tracker.ts +0 -16
  306. package/src/core/middleware/built-in/index.ts +0 -87
  307. package/src/core/middleware/built-in/jwt-helpers.ts +0 -243
  308. package/src/core/middleware/built-in/performance-monitor.ts +0 -25
  309. package/src/core/middleware/built-in/rate-limit.ts +0 -60
  310. package/src/core/middleware/built-in/request-logger.ts +0 -16
  311. package/src/core/middleware/built-in/session.ts +0 -287
  312. package/src/core/middleware/built-in/sse.ts +0 -88
  313. package/src/core/middleware/built-in/validation.ts +0 -33
  314. package/src/core/middleware/index.ts +0 -177
  315. package/src/core/modules/auto-discovery.ts +0 -726
  316. package/src/core/modules/index.ts +0 -3
  317. package/src/core/modules/modules.ts +0 -135
  318. package/src/core/networking/adapters/index.ts +0 -17
  319. package/src/core/networking/adapters/socketio-adapter.ts +0 -254
  320. package/src/core/networking/adapters/uws-adapter.ts +0 -619
  321. package/src/core/networking/adapters/ws-adapter.ts +0 -429
  322. package/src/core/networking/index.ts +0 -4
  323. package/src/core/networking/service-discovery.ts +0 -303
  324. package/src/core/networking/websocket-adapter.ts +0 -217
  325. package/src/core/networking/websocket-manager.ts +0 -308
  326. package/src/core/pooling/object-pool-manager.ts +0 -630
  327. package/src/core/routing/app-integration.ts +0 -164
  328. package/src/core/routing/index.ts +0 -261
  329. package/src/core/routing/path-matcher.ts +0 -222
  330. package/src/core/routing/router.ts +0 -97
  331. package/src/core/routing/unified-router.ts +0 -870
  332. package/src/core/runtime/aws-lambda-adapter.ts +0 -147
  333. package/src/core/runtime/base-adapter.ts +0 -130
  334. package/src/core/runtime/cloudflare-workers-adapter.ts +0 -152
  335. package/src/core/runtime/index.ts +0 -62
  336. package/src/core/runtime/node-adapter.ts +0 -202
  337. package/src/core/runtime/vercel-edge-adapter.ts +0 -114
  338. package/src/core/utilities/circuit-breaker.ts +0 -46
  339. package/src/core/utilities/container.ts +0 -736
  340. package/src/core/utilities/hooks.ts +0 -142
  341. package/src/core/utilities/index.ts +0 -17
  342. package/src/core/utilities/package-utils.ts +0 -59
  343. package/src/core/validation/adapters.ts +0 -147
  344. package/src/core/validation/index.ts +0 -258
  345. package/src/core/validation/schema-interface.ts +0 -100
  346. package/src/index.ts +0 -233
  347. package/src/moro.ts +0 -1728
  348. package/src/types/auth.ts +0 -440
  349. package/src/types/cache.ts +0 -38
  350. package/src/types/cdn.ts +0 -22
  351. package/src/types/config.ts +0 -229
  352. package/src/types/core.ts +0 -58
  353. package/src/types/database.ts +0 -32
  354. package/src/types/discovery.ts +0 -7
  355. package/src/types/events.ts +0 -82
  356. package/src/types/hooks.ts +0 -47
  357. package/src/types/http.ts +0 -89
  358. package/src/types/logger.ts +0 -102
  359. package/src/types/module.ts +0 -99
  360. package/src/types/runtime.ts +0 -76
  361. package/src/types/session.ts +0 -89
  362. package/tsconfig.json +0 -23
  363. /package/dist/core/middleware/built-in/{auth-helpers.d.ts → auth/helpers.d.ts} +0 -0
  364. /package/dist/core/middleware/built-in/{jwt-helpers.d.ts → auth/jwt-helpers.d.ts} +0 -0
  365. /package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.js +0 -0
  366. /package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.js +0 -0
@@ -1,619 +0,0 @@
1
- // uWebSockets Adapter for Moro Framework
2
- // Implements the WebSocket adapter interface using uWebSockets.js
3
- // High-performance C++ WebSocket implementation with native Node.js bindings
4
-
5
- import { resolveUserPackage } from '../../utilities/package-utils.js';
6
- import {
7
- WebSocketAdapter,
8
- WebSocketAdapterOptions,
9
- WebSocketNamespace,
10
- WebSocketConnection,
11
- WebSocketEmitter,
12
- WebSocketMiddleware,
13
- } from '../websocket-adapter.js';
14
- import { createFrameworkLogger } from '../../logger/index.js';
15
-
16
- /**
17
- * uWebSockets adapter implementation
18
- * Provides high-performance WebSocket support using uWebSockets.js
19
- */
20
- export class UWebSocketsAdapter implements WebSocketAdapter {
21
- private app: any; // uWebSockets app instance
22
- private uws: any; // uWebSockets module reference (stored to avoid re-importing)
23
- private listenSocket: any; // uWebSockets listen socket
24
- private namespaces = new Map<string, UWSNamespaceWrapper>();
25
- private connections = new Map<string, UWSConnectionWrapper>();
26
- private logger = createFrameworkLogger('UWS_ADAPTER');
27
- private customIdGenerator?: () => string;
28
- private connectionCounter = 0;
29
- private compressionEnabled = false;
30
- private compressionOptions: any = {};
31
- private httpServer: any; // Reference to Node.js HTTP server for compatibility
32
-
33
- async initialize(httpServer: any, options: WebSocketAdapterOptions = {}): Promise<void> {
34
- try {
35
- // Lazy load uWebSockets.js from user's context
36
- // This ensures it's an optional dependency with graceful fallback
37
- const uwsPath = resolveUserPackage('uWebSockets.js');
38
- this.uws = await import(uwsPath);
39
-
40
- // Store HTTP server reference for compatibility
41
- this.httpServer = httpServer;
42
-
43
- // uWebSockets.js doesn't integrate with Node's http.Server
44
- // Instead, it creates its own server, so we'll need to handle this carefully
45
- // We'll create a uWebSockets app that can coexist with the HTTP server
46
-
47
- // Check if SSL/TLS options are provided
48
- const sslOptions = (options as any).ssl;
49
-
50
- if (sslOptions && sslOptions.key_file_name && sslOptions.cert_file_name) {
51
- // Create SSL app
52
- this.app = this.uws.SSLApp({
53
- key_file_name: sslOptions.key_file_name,
54
- cert_file_name: sslOptions.cert_file_name,
55
- passphrase: sslOptions.passphrase,
56
- ...sslOptions,
57
- });
58
- this.logger.info('uWebSockets SSL/TLS app created', 'Init');
59
- } else {
60
- // Create regular app
61
- this.app = this.uws.App();
62
- this.logger.info('uWebSockets app created', 'Init');
63
- }
64
-
65
- // Setup WebSocket route with configurable path
66
- const wsPath = options.path || '/*';
67
- const maxPayloadLength = options.maxPayloadLength || 100 * 1024 * 1024; // 100MB default
68
- const idleTimeout = options.idleTimeout || 120; // 2 minutes default
69
-
70
- // Configure compression if enabled
71
- const compression = options.compression !== false;
72
-
73
- this.app.ws(wsPath, {
74
- // Compression settings - uWebSockets.js has built-in compression
75
- compression: compression ? 1 : 0, // 0 = disabled, 1 = shared compressor, 2 = dedicated compressor
76
- maxPayloadLength,
77
- idleTimeout,
78
- maxBackpressure: 1024 * 1024, // 1MB backpressure limit
79
-
80
- // Connection opened
81
- open: (ws: any) => {
82
- this.handleConnection(ws);
83
- },
84
-
85
- // Message received
86
- message: (ws: any, message: ArrayBuffer, isBinary: boolean) => {
87
- this.handleMessage(ws, message, isBinary);
88
- },
89
-
90
- // Connection closed
91
- close: (ws: any, code: number, message: ArrayBuffer) => {
92
- this.handleClose(ws, code, message);
93
- },
94
-
95
- // Drain handler for backpressure management
96
- drain: (ws: any) => {
97
- this.handleDrain(ws);
98
- },
99
- });
100
-
101
- // Setup default namespace
102
- this.createNamespace('/');
103
-
104
- this.logger.info('uWebSockets adapter initialized', 'Init');
105
- } catch (error) {
106
- // Throw helpful error with installation instructions
107
- throw new Error(
108
- 'Failed to load uWebSockets.js (optional dependency)\n' +
109
- 'To use the uWebSockets adapter, install it with:\n' +
110
- ' npm install --save-dev github:uNetworking/uWebSockets.js#v20.52.0\n' +
111
- 'Or use a different WebSocket adapter (socket.io or ws) in your config.\n' +
112
- 'Error: ' +
113
- (error instanceof Error ? error.message : String(error))
114
- );
115
- }
116
- }
117
-
118
- /**
119
- * Start listening on a specific port
120
- * This is necessary because uWebSockets.js manages its own server
121
- */
122
- listen(port: number, callback?: (token: any) => void): void {
123
- if (!this.app) {
124
- throw new Error('uWebSockets app not initialized. Call initialize() first.');
125
- }
126
-
127
- this.app.listen(port, (token: any) => {
128
- if (token) {
129
- this.listenSocket = token;
130
- this.logger.info(`uWebSockets listening on port ${port}`, 'Listen');
131
- if (callback) callback(token);
132
- } else {
133
- this.logger.error(`Failed to listen on port ${port}`, 'Listen');
134
- }
135
- });
136
- }
137
-
138
- /**
139
- * Start listening on host and port
140
- */
141
- listenWithHost(host: string, port: number, callback?: (token: any) => void): void {
142
- if (!this.app) {
143
- throw new Error('uWebSockets app not initialized. Call initialize() first.');
144
- }
145
-
146
- this.app.listen(host, port, (token: any) => {
147
- if (token) {
148
- this.listenSocket = token;
149
- this.logger.info(`uWebSockets listening on ${host}:${port}`, 'Listen');
150
- if (callback) callback(token);
151
- } else {
152
- this.logger.error(`Failed to listen on ${host}:${port}`, 'Listen');
153
- }
154
- });
155
- }
156
-
157
- private handleConnection(ws: any): void {
158
- const id = this.generateId();
159
-
160
- // Extract connection info
161
- const ip = Buffer.from(ws.getRemoteAddressAsText()).toString();
162
-
163
- // Create connection wrapper
164
- const connection = new UWSConnectionWrapper(ws, id, ip, this.namespaces);
165
- this.connections.set(id, connection);
166
-
167
- // Store connection ID on the WebSocket for later retrieval
168
- ws.connectionId = id;
169
-
170
- // Notify default namespace of new connection
171
- const defaultNamespace = this.namespaces.get('/');
172
- if (defaultNamespace) {
173
- defaultNamespace.handleConnection(connection);
174
- }
175
-
176
- this.logger.debug(`WebSocket connection opened: ${id} from ${ip}`, 'Connection');
177
- }
178
-
179
- private handleMessage(ws: any, message: ArrayBuffer, isBinary: boolean): void {
180
- const connectionId = ws.connectionId;
181
- const connection = this.connections.get(connectionId);
182
-
183
- if (!connection) {
184
- this.logger.warn(`Message received for unknown connection: ${connectionId}`, 'Message');
185
- return;
186
- }
187
-
188
- try {
189
- // Parse message - expect JSON format for compatibility with socket.io-like behavior
190
- const messageStr = Buffer.from(message).toString('utf-8');
191
- const data = JSON.parse(messageStr);
192
-
193
- // Handle message in connection wrapper
194
- connection.handleMessage(data);
195
- } catch (error) {
196
- this.logger.error(
197
- `Failed to parse message from ${connectionId}: ${error instanceof Error ? error.message : String(error)}`,
198
- 'Message'
199
- );
200
- }
201
- }
202
-
203
- private handleClose(ws: any, code: number, message: ArrayBuffer): void {
204
- const connectionId = ws.connectionId;
205
- const connection = this.connections.get(connectionId);
206
-
207
- if (connection) {
208
- connection.handleClose(code, message);
209
- this.connections.delete(connectionId);
210
- this.logger.debug(`WebSocket connection closed: ${connectionId}`, 'Connection');
211
- }
212
- }
213
-
214
- private handleDrain(ws: any): void {
215
- // Handle backpressure drain event
216
- const connectionId = ws.connectionId;
217
- const connection = this.connections.get(connectionId);
218
-
219
- if (connection) {
220
- connection.handleDrain();
221
- }
222
- }
223
-
224
- private generateId(): string {
225
- if (this.customIdGenerator) {
226
- return this.customIdGenerator();
227
- }
228
- return `uws_${++this.connectionCounter}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
229
- }
230
-
231
- createNamespace(namespace: string): WebSocketNamespace {
232
- if (!this.namespaces.has(namespace)) {
233
- const ns = new UWSNamespaceWrapper(namespace, this.connections);
234
- this.namespaces.set(namespace, ns);
235
- this.logger.debug(`Created namespace: ${namespace}`, 'Namespace');
236
- }
237
- return this.namespaces.get(namespace)!;
238
- }
239
-
240
- getDefaultNamespace(): WebSocketNamespace {
241
- return this.createNamespace('/');
242
- }
243
-
244
- async close(): Promise<void> {
245
- // Close all connections
246
- for (const [id, connection] of this.connections) {
247
- connection.disconnect(true);
248
- }
249
- this.connections.clear();
250
- this.namespaces.clear();
251
-
252
- // Close the uWebSockets listen socket
253
- if (this.listenSocket && this.uws) {
254
- // Use stored module reference instead of re-importing
255
- this.uws.us_listen_socket_close(this.listenSocket);
256
- this.listenSocket = null;
257
- }
258
-
259
- this.logger.info('uWebSockets adapter closed', 'Close');
260
- }
261
-
262
- setCompression(enabled: boolean, options?: any): void {
263
- this.compressionEnabled = enabled;
264
- this.compressionOptions = options || {};
265
- this.logger.debug(`Compression ${enabled ? 'enabled' : 'disabled'}`, 'Compression');
266
- }
267
-
268
- setCustomIdGenerator(generator: () => string): void {
269
- this.customIdGenerator = generator;
270
- this.logger.debug('Custom ID generator set', 'Config');
271
- }
272
-
273
- getAdapterName(): string {
274
- return 'uWebSockets.js';
275
- }
276
-
277
- getConnectionCount(): number {
278
- return this.connections.size;
279
- }
280
-
281
- /**
282
- * Get the underlying uWebSockets app for advanced usage
283
- */
284
- getApp(): any {
285
- return this.app;
286
- }
287
- }
288
-
289
- /**
290
- * Namespace wrapper for uWebSockets
291
- */
292
- class UWSNamespaceWrapper implements WebSocketNamespace {
293
- private connectionHandlers: ((socket: WebSocketConnection) => void)[] = [];
294
- private middlewares: WebSocketMiddleware[] = [];
295
-
296
- constructor(
297
- private namespace: string,
298
- private connections: Map<string, UWSConnectionWrapper>
299
- ) {}
300
-
301
- on(event: 'connection', handler: (socket: WebSocketConnection) => void): void {
302
- if (event === 'connection') {
303
- this.connectionHandlers.push(handler);
304
- }
305
- }
306
-
307
- handleConnection(connection: UWSConnectionWrapper): void {
308
- // Run middlewares
309
- this.runMiddlewares(connection, err => {
310
- if (err) {
311
- connection.disconnect(true);
312
- return;
313
- }
314
-
315
- // Notify all connection handlers
316
- for (const handler of this.connectionHandlers) {
317
- handler(connection);
318
- }
319
- });
320
- }
321
-
322
- private runMiddlewares(
323
- connection: UWSConnectionWrapper,
324
- finalCallback: (err?: Error) => void
325
- ): void {
326
- let index = 0;
327
-
328
- const next = (err?: Error) => {
329
- if (err) {
330
- finalCallback(err);
331
- return;
332
- }
333
-
334
- if (index >= this.middlewares.length) {
335
- finalCallback();
336
- return;
337
- }
338
-
339
- const middleware = this.middlewares[index++];
340
- middleware(connection, next);
341
- };
342
-
343
- next();
344
- }
345
-
346
- emit(event: string, data: any): void {
347
- for (const [id, connection] of this.connections) {
348
- if (connection.connected) {
349
- connection.emit(event, data);
350
- }
351
- }
352
- }
353
-
354
- to(room: string | string[]): WebSocketEmitter {
355
- return new UWSEmitterWrapper(this.connections, { rooms: Array.isArray(room) ? room : [room] });
356
- }
357
-
358
- except(room: string | string[]): WebSocketEmitter {
359
- return new UWSEmitterWrapper(this.connections, {
360
- exceptRooms: Array.isArray(room) ? room : [room],
361
- });
362
- }
363
-
364
- getSockets(): WebSocketConnection[] {
365
- return Array.from(this.connections.values()).filter(conn => conn.connected);
366
- }
367
-
368
- getConnectionCount(): number {
369
- return Array.from(this.connections.values()).filter(conn => conn.connected).length;
370
- }
371
-
372
- use(middleware: WebSocketMiddleware): void {
373
- this.middlewares.push(middleware);
374
- }
375
- }
376
-
377
- /**
378
- * Connection wrapper for uWebSockets
379
- */
380
- class UWSConnectionWrapper implements WebSocketConnection {
381
- public data: Record<string, any> = {};
382
- public connected = true;
383
- private rooms = new Set<string>();
384
- private eventHandlers = new Map<
385
- string,
386
- Array<(data: any, callback?: (response?: any) => void) => void>
387
- >();
388
- private anyHandlers: Array<(event: string, ...args: any[]) => void> = [];
389
- private logger = createFrameworkLogger('UWS_CONNECTION');
390
-
391
- constructor(
392
- private ws: any,
393
- public readonly id: string,
394
- public readonly ip: string,
395
- private namespaces: Map<string, UWSNamespaceWrapper>
396
- ) {
397
- this.headers = this.parseHeaders();
398
- }
399
-
400
- public readonly headers: Record<string, string>;
401
-
402
- private parseHeaders(): Record<string, string> {
403
- // uWebSockets doesn't provide easy header access
404
- // We'll return empty headers for now, but this could be enhanced
405
- return {};
406
- }
407
-
408
- on(event: string, handler: (data: any, callback?: (response?: any) => void) => void): void {
409
- if (!this.eventHandlers.has(event)) {
410
- this.eventHandlers.set(event, []);
411
- }
412
- this.eventHandlers.get(event)!.push(handler);
413
- }
414
-
415
- onAny(handler: (event: string, ...args: any[]) => void): void {
416
- this.anyHandlers.push(handler);
417
- }
418
-
419
- emit(event: string, data: any): void {
420
- if (!this.connected) return;
421
-
422
- try {
423
- const message = JSON.stringify({ event, data });
424
- const buffer = Buffer.from(message);
425
-
426
- // Send message with backpressure handling
427
- const sent = this.ws.send(buffer, false); // false = not binary
428
-
429
- if (!sent) {
430
- this.logger.warn(`Backpressure detected for connection ${this.id}`, 'Backpressure');
431
- }
432
- } catch (error) {
433
- this.logger.error(
434
- `Failed to emit event ${event}: ${error instanceof Error ? error.message : String(error)}`,
435
- 'Emit'
436
- );
437
- }
438
- }
439
-
440
- compressedEmit(event: string, data: any): void {
441
- // uWebSockets.js handles compression automatically based on app configuration
442
- // So this is the same as regular emit
443
- this.emit(event, data);
444
- }
445
-
446
- handleMessage(data: any): void {
447
- if (!data || typeof data !== 'object') {
448
- this.logger.warn(`Invalid message format from ${this.id}`, 'Message');
449
- return;
450
- }
451
-
452
- const { event, data: eventData, callback: hasCallback } = data;
453
-
454
- if (!event) {
455
- this.logger.warn(`Message without event from ${this.id}`, 'Message');
456
- return;
457
- }
458
-
459
- // Create callback function if client expects response
460
- const callback = hasCallback
461
- ? (response?: any) => {
462
- this.emit(`${event}:response`, response);
463
- }
464
- : undefined;
465
-
466
- // Notify any handlers
467
- for (const handler of this.anyHandlers) {
468
- handler(event, eventData);
469
- }
470
-
471
- // Notify specific event handlers
472
- const handlers = this.eventHandlers.get(event);
473
- if (handlers) {
474
- for (const handler of handlers) {
475
- try {
476
- handler(eventData, callback);
477
- } catch (error) {
478
- this.logger.error(
479
- `Error in event handler for ${event}: ${error instanceof Error ? error.message : String(error)}`,
480
- 'Handler'
481
- );
482
- }
483
- }
484
- }
485
- }
486
-
487
- handleClose(code: number, message: ArrayBuffer): void {
488
- this.connected = false;
489
- this.logger.debug(`Connection ${this.id} closed with code ${code}`, 'Close');
490
- }
491
-
492
- handleDrain(): void {
493
- // Backpressure has been relieved
494
- this.logger.debug(`Connection ${this.id} drained`, 'Drain');
495
- }
496
-
497
- join(room: string | string[]): void {
498
- const roomsToJoin = Array.isArray(room) ? room : [room];
499
- for (const r of roomsToJoin) {
500
- this.rooms.add(r);
501
- this.logger.debug(`Connection ${this.id} joined room ${r}`, 'Room');
502
- }
503
- }
504
-
505
- leave(room: string | string[]): void {
506
- const roomsToLeave = Array.isArray(room) ? room : [room];
507
- for (const r of roomsToLeave) {
508
- this.rooms.delete(r);
509
- this.logger.debug(`Connection ${this.id} left room ${r}`, 'Room');
510
- }
511
- }
512
-
513
- to(room: string | string[]): WebSocketEmitter {
514
- return new UWSEmitterWrapper(new Map([[this.id, this]]), {
515
- rooms: Array.isArray(room) ? room : [room],
516
- });
517
- }
518
-
519
- get broadcast(): WebSocketEmitter {
520
- return new UWSEmitterWrapper(
521
- this.namespaces
522
- .get('/')
523
- ?.getSockets()
524
- .filter(s => s.id !== this.id)
525
- .reduce((map, conn) => {
526
- map.set(conn.id, conn as UWSConnectionWrapper);
527
- return map;
528
- }, new Map<string, UWSConnectionWrapper>()) || new Map(),
529
- {}
530
- );
531
- }
532
-
533
- getRooms(): Set<string> {
534
- return new Set(this.rooms);
535
- }
536
-
537
- disconnect(close = false): void {
538
- if (!this.connected) return;
539
-
540
- this.connected = false;
541
-
542
- if (close && this.ws) {
543
- try {
544
- this.ws.end(1000, 'Normal closure');
545
- } catch (error) {
546
- this.logger.error(
547
- `Error closing WebSocket: ${error instanceof Error ? error.message : String(error)}`,
548
- 'Disconnect'
549
- );
550
- }
551
- }
552
- }
553
- }
554
-
555
- /**
556
- * Emitter wrapper for room-based broadcasting
557
- */
558
- class UWSEmitterWrapper implements WebSocketEmitter {
559
- private targetRooms: string[] = [];
560
- private excludedRooms: string[] = [];
561
- private useCompression = false;
562
-
563
- constructor(
564
- private connections: Map<string, UWSConnectionWrapper>,
565
- private options: { rooms?: string[]; exceptRooms?: string[] } = {}
566
- ) {
567
- this.targetRooms = options.rooms || [];
568
- this.excludedRooms = options.exceptRooms || [];
569
- }
570
-
571
- emit(event: string, data: any): void {
572
- for (const [id, connection] of this.connections) {
573
- if (!connection.connected) continue;
574
-
575
- // Check room filtering
576
- const connectionRooms = connection.getRooms();
577
-
578
- // If target rooms specified, connection must be in at least one
579
- if (this.targetRooms.length > 0) {
580
- const inTargetRoom = this.targetRooms.some(room => connectionRooms.has(room));
581
- if (!inTargetRoom) continue;
582
- }
583
-
584
- // If excluded rooms specified, connection must not be in any
585
- if (this.excludedRooms.length > 0) {
586
- const inExcludedRoom = this.excludedRooms.some(room => connectionRooms.has(room));
587
- if (inExcludedRoom) continue;
588
- }
589
-
590
- // Emit to connection
591
- if (this.useCompression && connection.compressedEmit) {
592
- connection.compressedEmit(event, data);
593
- } else {
594
- connection.emit(event, data);
595
- }
596
- }
597
- }
598
-
599
- to(room: string | string[]): WebSocketEmitter {
600
- const rooms = Array.isArray(room) ? room : [room];
601
- return new UWSEmitterWrapper(this.connections, {
602
- rooms: [...this.targetRooms, ...rooms],
603
- exceptRooms: this.excludedRooms,
604
- });
605
- }
606
-
607
- except(room: string | string[]): WebSocketEmitter {
608
- const rooms = Array.isArray(room) ? room : [room];
609
- return new UWSEmitterWrapper(this.connections, {
610
- rooms: this.targetRooms,
611
- exceptRooms: [...this.excludedRooms, ...rooms],
612
- });
613
- }
614
-
615
- compress(compress: boolean): WebSocketEmitter {
616
- this.useCompression = compress;
617
- return this;
618
- }
619
- }