@morojs/moro 1.5.16 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (373) hide show
  1. package/README.md +70 -269
  2. package/dist/core/auth/morojs-adapter.js +5 -9
  3. package/dist/core/auth/morojs-adapter.js.map +1 -1
  4. package/dist/core/config/config-manager.d.ts +1 -1
  5. package/dist/core/config/config-manager.js +10 -20
  6. package/dist/core/config/config-manager.js.map +1 -1
  7. package/dist/core/config/config-sources.d.ts +2 -2
  8. package/dist/core/config/config-sources.js +17 -20
  9. package/dist/core/config/config-sources.js.map +1 -1
  10. package/dist/core/config/config-validator.d.ts +1 -1
  11. package/dist/core/config/config-validator.js +33 -10
  12. package/dist/core/config/config-validator.js.map +1 -1
  13. package/dist/core/config/file-loader.d.ts +1 -1
  14. package/dist/core/config/file-loader.js +19 -78
  15. package/dist/core/config/file-loader.js.map +1 -1
  16. package/dist/core/config/index.d.ts +8 -8
  17. package/dist/core/config/index.js +25 -51
  18. package/dist/core/config/index.js.map +1 -1
  19. package/dist/core/config/schema.d.ts +2 -2
  20. package/dist/core/config/schema.js +11 -13
  21. package/dist/core/config/schema.js.map +1 -1
  22. package/dist/core/config/utils.d.ts +1 -1
  23. package/dist/core/config/utils.js +18 -32
  24. package/dist/core/config/utils.js.map +1 -1
  25. package/dist/core/database/adapters/drizzle.d.ts +1 -1
  26. package/dist/core/database/adapters/drizzle.js +18 -11
  27. package/dist/core/database/adapters/drizzle.js.map +1 -1
  28. package/dist/core/database/adapters/index.d.ts +7 -7
  29. package/dist/core/database/adapters/index.js +19 -29
  30. package/dist/core/database/adapters/index.js.map +1 -1
  31. package/dist/core/database/adapters/mongodb.d.ts +3 -1
  32. package/dist/core/database/adapters/mongodb.js +23 -8
  33. package/dist/core/database/adapters/mongodb.js.map +1 -1
  34. package/dist/core/database/adapters/mysql.d.ts +3 -1
  35. package/dist/core/database/adapters/mysql.js +18 -9
  36. package/dist/core/database/adapters/mysql.js.map +1 -1
  37. package/dist/core/database/adapters/postgresql.d.ts +3 -1
  38. package/dist/core/database/adapters/postgresql.js +18 -8
  39. package/dist/core/database/adapters/postgresql.js.map +1 -1
  40. package/dist/core/database/adapters/redis.d.ts +3 -1
  41. package/dist/core/database/adapters/redis.js +34 -9
  42. package/dist/core/database/adapters/redis.js.map +1 -1
  43. package/dist/core/database/adapters/sqlite.d.ts +3 -1
  44. package/dist/core/database/adapters/sqlite.js +19 -8
  45. package/dist/core/database/adapters/sqlite.js.map +1 -1
  46. package/dist/core/database/index.d.ts +2 -2
  47. package/dist/core/database/index.js +2 -18
  48. package/dist/core/database/index.js.map +1 -1
  49. package/dist/core/docs/index.d.ts +9 -9
  50. package/dist/core/docs/index.js +14 -35
  51. package/dist/core/docs/index.js.map +1 -1
  52. package/dist/core/docs/openapi-generator.d.ts +2 -2
  53. package/dist/core/docs/openapi-generator.js +11 -16
  54. package/dist/core/docs/openapi-generator.js.map +1 -1
  55. package/dist/core/docs/schema-to-openapi.d.ts +2 -2
  56. package/dist/core/docs/schema-to-openapi.js +5 -11
  57. package/dist/core/docs/schema-to-openapi.js.map +1 -1
  58. package/dist/core/docs/simple-docs.d.ts +1 -1
  59. package/dist/core/docs/simple-docs.js +4 -9
  60. package/dist/core/docs/simple-docs.js.map +1 -1
  61. package/dist/core/docs/swagger-ui.d.ts +2 -2
  62. package/dist/core/docs/swagger-ui.js +26 -29
  63. package/dist/core/docs/swagger-ui.js.map +1 -1
  64. package/dist/core/docs/zod-to-openapi.js +31 -28
  65. package/dist/core/docs/zod-to-openapi.js.map +1 -1
  66. package/dist/core/events/event-bus.d.ts +1 -1
  67. package/dist/core/events/event-bus.js +6 -10
  68. package/dist/core/events/event-bus.js.map +1 -1
  69. package/dist/core/events/index.d.ts +2 -2
  70. package/dist/core/events/index.js +1 -5
  71. package/dist/core/events/index.js.map +1 -1
  72. package/dist/core/framework.d.ts +16 -6
  73. package/dist/core/framework.js +182 -92
  74. package/dist/core/framework.js.map +1 -1
  75. package/dist/core/http/http-server.d.ts +1 -1
  76. package/dist/core/http/http-server.js +26 -209
  77. package/dist/core/http/http-server.js.map +1 -1
  78. package/dist/core/http/index.d.ts +4 -3
  79. package/dist/core/http/index.js +3 -8
  80. package/dist/core/http/index.js.map +1 -1
  81. package/dist/core/http/router.d.ts +1 -1
  82. package/dist/core/http/router.js +3 -7
  83. package/dist/core/http/router.js.map +1 -1
  84. package/dist/core/http/uws-http-server.d.ts +64 -0
  85. package/dist/core/http/uws-http-server.js +688 -0
  86. package/dist/core/http/uws-http-server.js.map +1 -0
  87. package/dist/core/logger/filters.d.ts +1 -1
  88. package/dist/core/logger/filters.js +8 -19
  89. package/dist/core/logger/filters.js.map +1 -1
  90. package/dist/core/logger/index.d.ts +3 -3
  91. package/dist/core/logger/index.js +2 -25
  92. package/dist/core/logger/index.js.map +1 -1
  93. package/dist/core/logger/logger.d.ts +1 -1
  94. package/dist/core/logger/logger.js +21 -23
  95. package/dist/core/logger/logger.js.map +1 -1
  96. package/dist/core/logger/outputs.d.ts +1 -1
  97. package/dist/core/logger/outputs.js +8 -15
  98. package/dist/core/logger/outputs.js.map +1 -1
  99. package/dist/core/middleware/built-in/adapters/cache/file.d.ts +1 -1
  100. package/dist/core/middleware/built-in/adapters/cache/file.js +10 -47
  101. package/dist/core/middleware/built-in/adapters/cache/file.js.map +1 -1
  102. package/dist/core/middleware/built-in/adapters/cache/index.d.ts +4 -4
  103. package/dist/core/middleware/built-in/adapters/cache/index.js +10 -17
  104. package/dist/core/middleware/built-in/adapters/cache/index.js.map +1 -1
  105. package/dist/core/middleware/built-in/adapters/cache/memory.d.ts +1 -1
  106. package/dist/core/middleware/built-in/adapters/cache/memory.js +3 -7
  107. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +1 -1
  108. package/dist/core/middleware/built-in/adapters/cache/redis.d.ts +3 -1
  109. package/dist/core/middleware/built-in/adapters/cache/redis.js +11 -9
  110. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +1 -1
  111. package/dist/core/middleware/built-in/adapters/cdn/azure.d.ts +1 -1
  112. package/dist/core/middleware/built-in/adapters/cdn/azure.js +3 -7
  113. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +1 -1
  114. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.d.ts +1 -1
  115. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js +3 -7
  116. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +1 -1
  117. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.d.ts +3 -1
  118. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js +12 -10
  119. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +1 -1
  120. package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +4 -4
  121. package/dist/core/middleware/built-in/adapters/cdn/index.js +10 -17
  122. package/dist/core/middleware/built-in/adapters/cdn/index.js.map +1 -1
  123. package/dist/core/middleware/built-in/adapters/index.d.ts +4 -4
  124. package/dist/core/middleware/built-in/adapters/index.js +4 -23
  125. package/dist/core/middleware/built-in/adapters/index.js.map +1 -1
  126. package/dist/core/middleware/built-in/auth-helpers.js +11 -22
  127. package/dist/core/middleware/built-in/auth-helpers.js.map +1 -1
  128. package/dist/core/middleware/built-in/auth-providers.d.ts +1 -1
  129. package/dist/core/middleware/built-in/auth-providers.js +4 -9
  130. package/dist/core/middleware/built-in/auth-providers.js.map +1 -1
  131. package/dist/core/middleware/built-in/auth.d.ts +2 -2
  132. package/dist/core/middleware/built-in/auth.js +51 -44
  133. package/dist/core/middleware/built-in/auth.js.map +1 -1
  134. package/dist/core/middleware/built-in/cache.d.ts +2 -2
  135. package/dist/core/middleware/built-in/cache.js +8 -11
  136. package/dist/core/middleware/built-in/cache.js.map +1 -1
  137. package/dist/core/middleware/built-in/cdn.d.ts +2 -2
  138. package/dist/core/middleware/built-in/cdn.js +5 -9
  139. package/dist/core/middleware/built-in/cdn.js.map +1 -1
  140. package/dist/core/middleware/built-in/cookie.d.ts +1 -1
  141. package/dist/core/middleware/built-in/cookie.js +3 -7
  142. package/dist/core/middleware/built-in/cookie.js.map +1 -1
  143. package/dist/core/middleware/built-in/cors.d.ts +1 -1
  144. package/dist/core/middleware/built-in/cors.js +3 -7
  145. package/dist/core/middleware/built-in/cors.js.map +1 -1
  146. package/dist/core/middleware/built-in/csp.d.ts +1 -1
  147. package/dist/core/middleware/built-in/csp.js +5 -8
  148. package/dist/core/middleware/built-in/csp.js.map +1 -1
  149. package/dist/core/middleware/built-in/csrf.d.ts +1 -1
  150. package/dist/core/middleware/built-in/csrf.js +5 -8
  151. package/dist/core/middleware/built-in/csrf.js.map +1 -1
  152. package/dist/core/middleware/built-in/error-tracker.js +3 -7
  153. package/dist/core/middleware/built-in/error-tracker.js.map +1 -1
  154. package/dist/core/middleware/built-in/index.d.ts +28 -28
  155. package/dist/core/middleware/built-in/index.js +47 -82
  156. package/dist/core/middleware/built-in/index.js.map +1 -1
  157. package/dist/core/middleware/built-in/jwt-helpers.d.ts +27 -2
  158. package/dist/core/middleware/built-in/jwt-helpers.js +32 -10
  159. package/dist/core/middleware/built-in/jwt-helpers.js.map +1 -1
  160. package/dist/core/middleware/built-in/performance-monitor.js +3 -7
  161. package/dist/core/middleware/built-in/performance-monitor.js.map +1 -1
  162. package/dist/core/middleware/built-in/rate-limit.d.ts +1 -1
  163. package/dist/core/middleware/built-in/rate-limit.js +3 -7
  164. package/dist/core/middleware/built-in/rate-limit.js.map +1 -1
  165. package/dist/core/middleware/built-in/request-logger.js +3 -7
  166. package/dist/core/middleware/built-in/request-logger.js.map +1 -1
  167. package/dist/core/middleware/built-in/session.d.ts +2 -2
  168. package/dist/core/middleware/built-in/session.js +11 -15
  169. package/dist/core/middleware/built-in/session.js.map +1 -1
  170. package/dist/core/middleware/built-in/sse.d.ts +1 -1
  171. package/dist/core/middleware/built-in/sse.js +3 -7
  172. package/dist/core/middleware/built-in/sse.js.map +1 -1
  173. package/dist/core/middleware/built-in/validation.d.ts +1 -1
  174. package/dist/core/middleware/built-in/validation.js +3 -7
  175. package/dist/core/middleware/built-in/validation.js.map +1 -1
  176. package/dist/core/middleware/index.d.ts +4 -4
  177. package/dist/core/middleware/index.js +8 -28
  178. package/dist/core/middleware/index.js.map +1 -1
  179. package/dist/core/modules/auto-discovery.d.ts +3 -3
  180. package/dist/core/modules/auto-discovery.js +43 -81
  181. package/dist/core/modules/auto-discovery.js.map +1 -1
  182. package/dist/core/modules/index.d.ts +2 -2
  183. package/dist/core/modules/index.js +2 -9
  184. package/dist/core/modules/index.js.map +1 -1
  185. package/dist/core/modules/modules.d.ts +3 -3
  186. package/dist/core/modules/modules.js +11 -52
  187. package/dist/core/modules/modules.js.map +1 -1
  188. package/dist/core/networking/adapters/index.d.ts +4 -3
  189. package/dist/core/networking/adapters/index.js +3 -7
  190. package/dist/core/networking/adapters/index.js.map +1 -1
  191. package/dist/core/networking/adapters/socketio-adapter.d.ts +1 -1
  192. package/dist/core/networking/adapters/socketio-adapter.js +5 -40
  193. package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
  194. package/dist/core/networking/adapters/uws-adapter.d.ts +44 -0
  195. package/dist/core/networking/adapters/uws-adapter.js +513 -0
  196. package/dist/core/networking/adapters/uws-adapter.js.map +1 -0
  197. package/dist/core/networking/adapters/ws-adapter.d.ts +1 -1
  198. package/dist/core/networking/adapters/ws-adapter.js +7 -42
  199. package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
  200. package/dist/core/networking/index.d.ts +3 -2
  201. package/dist/core/networking/index.js +2 -7
  202. package/dist/core/networking/index.js.map +1 -1
  203. package/dist/core/networking/service-discovery.js +3 -7
  204. package/dist/core/networking/service-discovery.js.map +1 -1
  205. package/dist/core/networking/websocket-adapter.js +1 -2
  206. package/dist/core/networking/websocket-adapter.js.map +1 -1
  207. package/dist/core/networking/websocket-manager.d.ts +3 -3
  208. package/dist/core/networking/websocket-manager.js +9 -11
  209. package/dist/core/networking/websocket-manager.js.map +1 -1
  210. package/dist/core/routing/app-integration.d.ts +2 -2
  211. package/dist/core/routing/app-integration.js +7 -12
  212. package/dist/core/routing/app-integration.js.map +1 -1
  213. package/dist/core/routing/index.d.ts +2 -2
  214. package/dist/core/routing/index.js +7 -14
  215. package/dist/core/routing/index.js.map +1 -1
  216. package/dist/core/runtime/aws-lambda-adapter.d.ts +3 -3
  217. package/dist/core/runtime/aws-lambda-adapter.js +2 -6
  218. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  219. package/dist/core/runtime/base-adapter.d.ts +2 -2
  220. package/dist/core/runtime/base-adapter.js +3 -7
  221. package/dist/core/runtime/base-adapter.js.map +1 -1
  222. package/dist/core/runtime/cloudflare-workers-adapter.d.ts +3 -3
  223. package/dist/core/runtime/cloudflare-workers-adapter.js +2 -6
  224. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  225. package/dist/core/runtime/index.d.ts +12 -12
  226. package/dist/core/runtime/index.js +22 -35
  227. package/dist/core/runtime/index.js.map +1 -1
  228. package/dist/core/runtime/node-adapter.d.ts +4 -4
  229. package/dist/core/runtime/node-adapter.js +6 -43
  230. package/dist/core/runtime/node-adapter.js.map +1 -1
  231. package/dist/core/runtime/vercel-edge-adapter.d.ts +3 -3
  232. package/dist/core/runtime/vercel-edge-adapter.js +2 -6
  233. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  234. package/dist/core/utilities/circuit-breaker.js +1 -5
  235. package/dist/core/utilities/circuit-breaker.js.map +1 -1
  236. package/dist/core/utilities/container.js +12 -22
  237. package/dist/core/utilities/container.js.map +1 -1
  238. package/dist/core/utilities/hooks.d.ts +2 -2
  239. package/dist/core/utilities/hooks.js +7 -12
  240. package/dist/core/utilities/hooks.js.map +1 -1
  241. package/dist/core/utilities/index.d.ts +5 -4
  242. package/dist/core/utilities/index.js +5 -19
  243. package/dist/core/utilities/index.js.map +1 -1
  244. package/dist/core/utilities/package-utils.d.ts +38 -0
  245. package/dist/core/utilities/package-utils.js +57 -0
  246. package/dist/core/utilities/package-utils.js.map +1 -0
  247. package/dist/core/validation/adapters.d.ts +1 -1
  248. package/dist/core/validation/adapters.js +15 -26
  249. package/dist/core/validation/adapters.js.map +1 -1
  250. package/dist/core/validation/index.d.ts +6 -4
  251. package/dist/core/validation/index.js +57 -28
  252. package/dist/core/validation/index.js.map +1 -1
  253. package/dist/core/validation/schema-interface.js +3 -9
  254. package/dist/core/validation/schema-interface.js.map +1 -1
  255. package/dist/index.d.ts +51 -52
  256. package/dist/index.js +23 -132
  257. package/dist/index.js.map +1 -1
  258. package/dist/moro.d.ts +30 -10
  259. package/dist/moro.js +262 -126
  260. package/dist/moro.js.map +1 -1
  261. package/dist/types/auth.js +3 -9
  262. package/dist/types/auth.js.map +1 -1
  263. package/dist/types/cache.js +1 -2
  264. package/dist/types/cdn.js +1 -2
  265. package/dist/types/config.d.ts +13 -1
  266. package/dist/types/config.js +1 -2
  267. package/dist/types/config.js.map +1 -1
  268. package/dist/types/core.d.ts +3 -3
  269. package/dist/types/core.js +1 -2
  270. package/dist/types/database.js +1 -2
  271. package/dist/types/discovery.js +1 -2
  272. package/dist/types/events.js +1 -2
  273. package/dist/types/hooks.d.ts +1 -1
  274. package/dist/types/hooks.js +1 -2
  275. package/dist/types/http.js +1 -2
  276. package/dist/types/logger.js +1 -2
  277. package/dist/types/module.js +1 -2
  278. package/dist/types/runtime.d.ts +1 -1
  279. package/dist/types/runtime.js +1 -2
  280. package/dist/types/session.js +1 -2
  281. package/jest.config.mjs +41 -0
  282. package/package.json +18 -51
  283. package/src/core/auth/morojs-adapter.ts +1 -1
  284. package/src/core/config/config-manager.ts +2 -2
  285. package/src/core/config/config-sources.ts +6 -6
  286. package/src/core/config/config-validator.ts +38 -3
  287. package/src/core/config/file-loader.ts +13 -40
  288. package/src/core/config/index.ts +15 -11
  289. package/src/core/config/schema.ts +3 -2
  290. package/src/core/config/utils.ts +3 -3
  291. package/src/core/database/adapters/drizzle.ts +18 -6
  292. package/src/core/database/adapters/index.ts +13 -13
  293. package/src/core/database/adapters/mongodb.ts +23 -3
  294. package/src/core/database/adapters/mysql.ts +18 -4
  295. package/src/core/database/adapters/postgresql.ts +18 -3
  296. package/src/core/database/adapters/redis.ts +34 -4
  297. package/src/core/database/adapters/sqlite.ts +19 -3
  298. package/src/core/database/index.ts +2 -2
  299. package/src/core/docs/index.ts +8 -8
  300. package/src/core/docs/openapi-generator.ts +4 -4
  301. package/src/core/docs/schema-to-openapi.ts +3 -6
  302. package/src/core/docs/simple-docs.ts +2 -2
  303. package/src/core/docs/swagger-ui.ts +19 -16
  304. package/src/core/docs/zod-to-openapi.ts +34 -34
  305. package/src/core/events/event-bus.ts +2 -2
  306. package/src/core/events/index.ts +2 -2
  307. package/src/core/framework.ts +190 -49
  308. package/src/core/http/http-server.ts +16 -159
  309. package/src/core/http/index.ts +4 -3
  310. package/src/core/http/router.ts +2 -2
  311. package/src/core/http/uws-http-server.ts +794 -0
  312. package/src/core/logger/filters.ts +1 -1
  313. package/src/core/logger/index.ts +3 -3
  314. package/src/core/logger/logger.ts +9 -1
  315. package/src/core/logger/outputs.ts +1 -1
  316. package/src/core/middleware/built-in/adapters/cache/file.ts +3 -3
  317. package/src/core/middleware/built-in/adapters/cache/index.ts +7 -7
  318. package/src/core/middleware/built-in/adapters/cache/memory.ts +2 -2
  319. package/src/core/middleware/built-in/adapters/cache/redis.ts +18 -4
  320. package/src/core/middleware/built-in/adapters/cdn/azure.ts +2 -2
  321. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +2 -2
  322. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +16 -5
  323. package/src/core/middleware/built-in/adapters/cdn/index.ts +7 -7
  324. package/src/core/middleware/built-in/adapters/index.ts +4 -4
  325. package/src/core/middleware/built-in/auth-helpers.ts +1 -1
  326. package/src/core/middleware/built-in/auth-providers.ts +1 -1
  327. package/src/core/middleware/built-in/auth.ts +64 -41
  328. package/src/core/middleware/built-in/cache.ts +5 -5
  329. package/src/core/middleware/built-in/cdn.ts +4 -4
  330. package/src/core/middleware/built-in/cookie.ts +2 -2
  331. package/src/core/middleware/built-in/cors.ts +2 -2
  332. package/src/core/middleware/built-in/csp.ts +3 -3
  333. package/src/core/middleware/built-in/csrf.ts +3 -3
  334. package/src/core/middleware/built-in/error-tracker.ts +1 -1
  335. package/src/core/middleware/built-in/index.ts +31 -31
  336. package/src/core/middleware/built-in/jwt-helpers.ts +32 -4
  337. package/src/core/middleware/built-in/performance-monitor.ts +1 -1
  338. package/src/core/middleware/built-in/rate-limit.ts +2 -2
  339. package/src/core/middleware/built-in/request-logger.ts +1 -1
  340. package/src/core/middleware/built-in/session.ts +7 -8
  341. package/src/core/middleware/built-in/sse.ts +2 -2
  342. package/src/core/middleware/built-in/validation.ts +2 -2
  343. package/src/core/middleware/index.ts +6 -6
  344. package/src/core/modules/auto-discovery.ts +4 -4
  345. package/src/core/modules/index.ts +2 -2
  346. package/src/core/modules/modules.ts +4 -4
  347. package/src/core/networking/adapters/index.ts +4 -3
  348. package/src/core/networking/adapters/socketio-adapter.ts +5 -3
  349. package/src/core/networking/adapters/uws-adapter.ts +619 -0
  350. package/src/core/networking/adapters/ws-adapter.ts +6 -4
  351. package/src/core/networking/index.ts +3 -2
  352. package/src/core/networking/service-discovery.ts +1 -1
  353. package/src/core/networking/websocket-manager.ts +7 -7
  354. package/src/core/routing/app-integration.ts +3 -3
  355. package/src/core/routing/index.ts +3 -3
  356. package/src/core/runtime/aws-lambda-adapter.ts +3 -3
  357. package/src/core/runtime/base-adapter.ts +2 -2
  358. package/src/core/runtime/cloudflare-workers-adapter.ts +3 -3
  359. package/src/core/runtime/index.ts +13 -13
  360. package/src/core/runtime/node-adapter.ts +4 -4
  361. package/src/core/runtime/vercel-edge-adapter.ts +3 -3
  362. package/src/core/utilities/hooks.ts +3 -3
  363. package/src/core/utilities/index.ts +5 -4
  364. package/src/core/utilities/package-utils.ts +59 -0
  365. package/src/core/validation/adapters.ts +1 -1
  366. package/src/core/validation/index.ts +68 -16
  367. package/src/index.ts +73 -66
  368. package/src/moro.ts +303 -75
  369. package/src/types/config.ts +13 -1
  370. package/src/types/core.ts +3 -3
  371. package/src/types/hooks.ts +1 -1
  372. package/src/types/runtime.ts +1 -1
  373. package/tsconfig.json +4 -2
@@ -5,8 +5,8 @@
5
5
  * simple TypeScript functions that match the type definitions exactly.
6
6
  */
7
7
 
8
- import { AppConfig } from '../../types/config';
9
- import { createFrameworkLogger } from '../logger';
8
+ import { AppConfig } from '../../types/config.js';
9
+ import { createFrameworkLogger } from '../logger/index.js';
10
10
 
11
11
  const logger = createFrameworkLogger('ConfigValidator');
12
12
 
@@ -75,7 +75,7 @@ function validateServerConfig(config: any, path: string) {
75
75
  );
76
76
  }
77
77
 
78
- return {
78
+ const result: any = {
79
79
  port: validatePort(config.port, `${path}.port`),
80
80
  host: validateString(config.host, `${path}.host`),
81
81
  maxConnections: validateNumber(config.maxConnections, `${path}.maxConnections`, { min: 1 }),
@@ -88,6 +88,41 @@ function validateServerConfig(config: any, path: string) {
88
88
  enabled: validateBoolean(config.errorBoundary?.enabled, `${path}.errorBoundary.enabled`),
89
89
  },
90
90
  };
91
+
92
+ // Optional uWebSockets configuration
93
+ if (config.useUWebSockets !== undefined) {
94
+ result.useUWebSockets = validateBoolean(config.useUWebSockets, `${path}.useUWebSockets`);
95
+ }
96
+
97
+ // Optional SSL configuration
98
+ if (config.ssl !== undefined) {
99
+ result.ssl = validateSSLConfig(config.ssl, `${path}.ssl`);
100
+ }
101
+
102
+ return result;
103
+ }
104
+
105
+ /**
106
+ * Validate SSL configuration
107
+ */
108
+ function validateSSLConfig(config: any, path: string) {
109
+ if (!config || typeof config !== 'object') {
110
+ throw new ConfigValidationError(path, config, 'object', 'SSL configuration must be an object');
111
+ }
112
+
113
+ const result: any = {};
114
+
115
+ if (config.key_file_name !== undefined) {
116
+ result.key_file_name = validateString(config.key_file_name, `${path}.key_file_name`);
117
+ }
118
+ if (config.cert_file_name !== undefined) {
119
+ result.cert_file_name = validateString(config.cert_file_name, `${path}.cert_file_name`);
120
+ }
121
+ if (config.passphrase !== undefined) {
122
+ result.passphrase = validateString(config.passphrase, `${path}.passphrase`);
123
+ }
124
+
125
+ return result;
91
126
  }
92
127
 
93
128
  /**
@@ -1,11 +1,16 @@
1
1
  // Configuration File Loader - Load moro.config.js/ts files
2
2
  import { existsSync } from 'fs';
3
3
  import { join } from 'path';
4
- import { AppConfig } from './schema';
5
- import { createFrameworkLogger } from '../logger';
4
+ import { createRequire } from 'module';
5
+ import { AppConfig } from './schema.js';
6
+ import { createFrameworkLogger } from '../logger/index.js';
6
7
 
7
8
  const logger = createFrameworkLogger('ConfigFile');
8
9
 
10
+ // Create require function for ESM to enable synchronous config loading
11
+ // Use process.cwd() as base since we're loading with absolute paths anyway
12
+ const moduleRequire = createRequire(join(process.cwd(), 'index.js'));
13
+
9
14
  /**
10
15
  * Supported configuration file names in order of preference
11
16
  */
@@ -23,55 +28,23 @@ export function loadConfigFileSync(cwd: string = process.cwd()): Partial<AppConf
23
28
  logger.debug('No configuration file found');
24
29
  return null;
25
30
  }
26
- // Handle TypeScript files by trying dynamic import (works with tsx/ts-node runtimes)
27
- if (configFile.endsWith('.ts')) {
28
- logger.debug('Found TypeScript config file, attempting to load with dynamic import');
29
- try {
30
- // When running under tsx/ts-node, dynamic imports work synchronously for TypeScript
31
- // We can use require() with the current environment that already has TypeScript support
32
- const config = require(configFile);
33
- const configData = config.default || config;
34
-
35
- if (!configData || typeof configData !== 'object') {
36
- logger.warn(`Configuration file ${configFile} did not export a valid configuration object`);
37
- return null;
38
- }
39
-
40
- logger.info(`TypeScript configuration loaded from: ${configFile}`);
41
- return configData;
42
- } catch (error) {
43
- logger.debug(
44
- 'TypeScript config loading failed in sync mode, this is expected if not running with tsx/ts-node'
45
- );
46
- logger.debug('Error details:', String(error));
47
- return null;
48
- }
49
- }
50
-
51
- // Only .js files use the standard synchronous loading
52
- if (!configFile.endsWith('.js')) {
53
- logger.debug(
54
- 'Found config file with unsupported extension. Only .js and .ts files are supported.'
55
- );
56
- return null;
57
- }
58
31
 
59
32
  logger.debug(`Loading configuration from: ${configFile}`);
60
33
 
61
34
  try {
62
- // Clear module cache to ensure fresh load
63
- delete require.cache[require.resolve(configFile)];
35
+ // Use createRequire to enable synchronous loading in ESM
36
+ // Clear the require cache to ensure fresh config on each load
37
+ delete moduleRequire.cache[moduleRequire.resolve(configFile)];
64
38
 
65
- const config = require(configFile);
66
- const configData = config.default || config;
39
+ const config = moduleRequire(configFile);
67
40
 
68
- if (!configData || typeof configData !== 'object') {
41
+ if (!config || typeof config !== 'object') {
69
42
  logger.warn(`Configuration file ${configFile} did not export a valid configuration object`);
70
43
  return null;
71
44
  }
72
45
 
73
46
  logger.info(`Configuration loaded from: ${configFile}`);
74
- return configData;
47
+ return config;
75
48
  } catch (error) {
76
49
  logger.error(`Failed to load configuration file ${configFile}:`, String(error));
77
50
  logger.warn('Falling back to environment variable configuration');
@@ -12,27 +12,31 @@
12
12
  */
13
13
 
14
14
  // Export types and core components
15
- export * from './schema';
16
- export * from './config-sources';
17
- export * from './config-validator';
18
- export * from './file-loader';
15
+ export * from './schema.js';
16
+ export * from './config-sources.js';
17
+ export * from './config-validator.js';
18
+ export * from './file-loader.js';
19
19
 
20
20
  // Export specific functions from config-manager to avoid conflicts
21
- export { initializeAndLockConfig, isConfigLocked, resetConfigForTesting } from './config-manager';
21
+ export {
22
+ initializeAndLockConfig,
23
+ isConfigLocked,
24
+ resetConfigForTesting,
25
+ } from './config-manager.js';
22
26
 
23
27
  // Export utilities for backward compatibility
24
- export * from './utils';
28
+ export * from './utils.js';
25
29
 
26
- import { MoroOptions } from '../../types/core';
27
- import { AppConfig } from '../../types/config';
28
- import { loadConfigFromAllSources } from './config-sources';
30
+ import { MoroOptions } from '../../types/core.js';
31
+ import { AppConfig } from '../../types/config.js';
32
+ import { loadConfigFromAllSources } from './config-sources.js';
29
33
  import {
30
34
  initializeAndLockConfig,
31
35
  getGlobalConfig as getConfig,
32
36
  isConfigLocked,
33
37
  resetConfigForTesting,
34
- } from './config-manager';
35
- import { createFrameworkLogger } from '../logger';
38
+ } from './config-manager.js';
39
+ import { createFrameworkLogger } from '../logger/index.js';
36
40
 
37
41
  const logger = createFrameworkLogger('ConfigSystem');
38
42
 
@@ -1,6 +1,6 @@
1
1
  // Core Configuration Schema for Moro Framework
2
2
 
3
- import { AppConfig } from '../../types/config';
3
+ import { AppConfig } from '../../types/config.js';
4
4
 
5
5
  // Minimal default configuration - performance-focused, most things opt-in
6
6
  export const DEFAULT_CONFIG: AppConfig = {
@@ -10,6 +10,7 @@ export const DEFAULT_CONFIG: AppConfig = {
10
10
  maxConnections: 1000,
11
11
  timeout: 30000,
12
12
  bodySizeLimit: '10mb',
13
+ useUWebSockets: false, // Opt-in for ultra-high performance
13
14
  requestTracking: {
14
15
  enabled: true, // Enable by default for debugging
15
16
  },
@@ -147,7 +148,7 @@ export type {
147
148
  SecurityConfig,
148
149
  ExternalServicesConfig,
149
150
  PerformanceConfig,
150
- } from '../../types/config';
151
+ } from '../../types/config.js';
151
152
 
152
153
  // For backward compatibility with modules that expect schema objects
153
154
  export const ServerConfigSchema = { parse: (data: any) => data };
@@ -1,7 +1,7 @@
1
1
  // Configuration Utilities for Modules and Environment Handling
2
- import { AppConfig } from './schema';
3
- import { createFrameworkLogger } from '../logger';
4
- import { getGlobalConfig } from './config-manager';
2
+ import { AppConfig } from './schema.js';
3
+ import { createFrameworkLogger } from '../logger/index.js';
4
+ import { getGlobalConfig } from './config-manager.js';
5
5
 
6
6
  const logger = createFrameworkLogger('ConfigUtils');
7
7
 
@@ -1,6 +1,18 @@
1
1
  // Database Drizzle ORM Adapter
2
- import { DatabaseAdapter, DatabaseTransaction } from '../../../types/database';
3
- import { createFrameworkLogger } from '../../logger';
2
+ import { DatabaseAdapter, DatabaseTransaction } from '../../../types/database.js';
3
+ import { createFrameworkLogger } from '../../logger/index.js';
4
+ import { resolveUserPackage } from '../../utilities/package-utils.js';
5
+
6
+ // Cache the drizzle-orm module
7
+ let drizzleOrm: any = null;
8
+ async function getDrizzleOrm() {
9
+ if (!drizzleOrm) {
10
+ const drizzlePath = resolveUserPackage('drizzle-orm');
11
+ const module = await import(drizzlePath);
12
+ drizzleOrm = module;
13
+ }
14
+ return drizzleOrm;
15
+ }
4
16
 
5
17
  interface DrizzleConfig {
6
18
  database: any; // Drizzle database instance
@@ -108,7 +120,7 @@ export class DrizzleAdapter implements DatabaseAdapter {
108
120
  if (this.schema && this.schema[table]) {
109
121
  // Use schema-based update
110
122
  try {
111
- const { eq, and } = require('drizzle-orm');
123
+ const { eq, and } = await getDrizzleOrm();
112
124
 
113
125
  // Build where conditions
114
126
  const conditions = Object.entries(where).map(([key, value]) =>
@@ -165,7 +177,7 @@ export class DrizzleAdapter implements DatabaseAdapter {
165
177
  if (this.schema && this.schema[table]) {
166
178
  // Use schema-based delete
167
179
  try {
168
- const { eq, and } = require('drizzle-orm');
180
+ const { eq, and } = await getDrizzleOrm();
169
181
 
170
182
  const conditions = Object.entries(where).map(([key, value]) =>
171
183
  eq(this.schema[table][key], value)
@@ -314,7 +326,7 @@ class DrizzleTransaction implements DatabaseTransaction {
314
326
  ): Promise<T> {
315
327
  if (this.schema && this.schema[table]) {
316
328
  try {
317
- const { eq, and } = require('drizzle-orm');
329
+ const { eq, and } = await getDrizzleOrm();
318
330
 
319
331
  const conditions = Object.entries(where).map(([key, value]) =>
320
332
  eq(this.schema[table][key], value)
@@ -360,7 +372,7 @@ class DrizzleTransaction implements DatabaseTransaction {
360
372
  async delete(table: string, where: Record<string, any>): Promise<number> {
361
373
  if (this.schema && this.schema[table]) {
362
374
  try {
363
- const { eq, and } = require('drizzle-orm');
375
+ const { eq, and } = await getDrizzleOrm();
364
376
 
365
377
  const conditions = Object.entries(where).map(([key, value]) =>
366
378
  eq(this.schema[table][key], value)
@@ -1,18 +1,18 @@
1
1
  // Database Adapters
2
- export { MySQLAdapter } from './mysql';
3
- export { PostgreSQLAdapter } from './postgresql';
4
- export { SQLiteAdapter } from './sqlite';
5
- export { MongoDBAdapter } from './mongodb';
6
- export { RedisAdapter } from './redis';
7
- export { DrizzleAdapter } from './drizzle';
2
+ export { MySQLAdapter } from './mysql.js';
3
+ export { PostgreSQLAdapter } from './postgresql.js';
4
+ export { SQLiteAdapter } from './sqlite.js';
5
+ export { MongoDBAdapter } from './mongodb.js';
6
+ export { RedisAdapter } from './redis.js';
7
+ export { DrizzleAdapter } from './drizzle.js';
8
8
 
9
- import { MySQLAdapter } from './mysql';
10
- import { PostgreSQLAdapter } from './postgresql';
11
- import { SQLiteAdapter } from './sqlite';
12
- import { MongoDBAdapter } from './mongodb';
13
- import { RedisAdapter } from './redis';
14
- import { DrizzleAdapter } from './drizzle';
15
- import { DatabaseAdapter } from '../../../types/database';
9
+ import { MySQLAdapter } from './mysql.js';
10
+ import { PostgreSQLAdapter } from './postgresql.js';
11
+ import { SQLiteAdapter } from './sqlite.js';
12
+ import { MongoDBAdapter } from './mongodb.js';
13
+ import { RedisAdapter } from './redis.js';
14
+ import { DrizzleAdapter } from './drizzle.js';
15
+ import { DatabaseAdapter } from '../../../types/database.js';
16
16
 
17
17
  // Adapter factory function for auto-loading
18
18
  export function createDatabaseAdapter(type: string, options: any = {}): DatabaseAdapter {
@@ -1,6 +1,7 @@
1
1
  // Database MongoDB Adapter
2
- import { DatabaseAdapter, DatabaseTransaction } from '../../../types/database';
3
- import { createFrameworkLogger } from '../../logger';
2
+ import { DatabaseAdapter, DatabaseTransaction } from '../../../types/database.js';
3
+ import { createFrameworkLogger } from '../../logger/index.js';
4
+ import { resolveUserPackage } from '../../utilities/package-utils.js';
4
5
 
5
6
  interface MongoDBConfig {
6
7
  url?: string;
@@ -35,10 +36,17 @@ export class MongoDBAdapter implements DatabaseAdapter {
35
36
  private client: any;
36
37
  private db: any;
37
38
  private logger = createFrameworkLogger('MongoDB');
39
+ private initPromise: Promise<void>;
38
40
 
39
41
  constructor(config: MongoDBConfig) {
42
+ this.initPromise = this.initialize(config);
43
+ }
44
+
45
+ private async initialize(config: MongoDBConfig): Promise<void> {
40
46
  try {
41
- const { MongoClient } = require('mongodb');
47
+ const mongodbPath = resolveUserPackage('mongodb');
48
+ const mongodb = await import(mongodbPath);
49
+ const { MongoClient } = mongodb;
42
50
 
43
51
  const url = config.url || this.buildConnectionString(config);
44
52
 
@@ -86,6 +94,7 @@ export class MongoDBAdapter implements DatabaseAdapter {
86
94
  }
87
95
 
88
96
  async connect(): Promise<void> {
97
+ await this.initPromise;
89
98
  try {
90
99
  await this.client.connect();
91
100
  await this.client.db('admin').command({ ping: 1 });
@@ -99,11 +108,13 @@ export class MongoDBAdapter implements DatabaseAdapter {
99
108
  }
100
109
 
101
110
  async disconnect(): Promise<void> {
111
+ await this.initPromise;
102
112
  await this.client.close();
103
113
  }
104
114
 
105
115
  // For MongoDB, we'll treat "sql" as collection name and "params" as query/pipeline
106
116
  async query<T = any>(collection: string, pipeline?: any[]): Promise<T[]> {
117
+ await this.initPromise;
107
118
  try {
108
119
  const coll = this.db.collection(collection);
109
120
 
@@ -130,6 +141,7 @@ export class MongoDBAdapter implements DatabaseAdapter {
130
141
  }
131
142
 
132
143
  async queryOne<T = any>(collection: string, query?: any): Promise<T | null> {
144
+ await this.initPromise;
133
145
  try {
134
146
  const coll = this.db.collection(collection);
135
147
  return await coll.findOne(query || {});
@@ -143,6 +155,7 @@ export class MongoDBAdapter implements DatabaseAdapter {
143
155
  }
144
156
 
145
157
  async insert<T = any>(collection: string, data: Record<string, any>): Promise<T> {
158
+ await this.initPromise;
146
159
  try {
147
160
  const coll = this.db.collection(collection);
148
161
  const result = await coll.insertOne(data);
@@ -163,6 +176,7 @@ export class MongoDBAdapter implements DatabaseAdapter {
163
176
  data: Record<string, any>,
164
177
  where: Record<string, any>
165
178
  ): Promise<T> {
179
+ await this.initPromise;
166
180
  try {
167
181
  const coll = this.db.collection(collection);
168
182
  const result = await coll.findOneAndUpdate(
@@ -182,6 +196,7 @@ export class MongoDBAdapter implements DatabaseAdapter {
182
196
  }
183
197
 
184
198
  async delete(collection: string, where: Record<string, any>): Promise<number> {
199
+ await this.initPromise;
185
200
  try {
186
201
  const coll = this.db.collection(collection);
187
202
  const result = await coll.deleteMany(where);
@@ -196,6 +211,7 @@ export class MongoDBAdapter implements DatabaseAdapter {
196
211
  }
197
212
 
198
213
  async transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T> {
214
+ await this.initPromise;
199
215
  const session = this.client.startSession();
200
216
 
201
217
  try {
@@ -210,22 +226,26 @@ export class MongoDBAdapter implements DatabaseAdapter {
210
226
 
211
227
  // MongoDB-specific methods
212
228
  async aggregate<T = any>(collection: string, pipeline: any[]): Promise<T[]> {
229
+ await this.initPromise;
213
230
  const coll = this.db.collection(collection);
214
231
  const cursor = coll.aggregate(pipeline);
215
232
  return await cursor.toArray();
216
233
  }
217
234
 
218
235
  async createIndex(collection: string, index: any, options?: any): Promise<string> {
236
+ await this.initPromise;
219
237
  const coll = this.db.collection(collection);
220
238
  return await coll.createIndex(index, options);
221
239
  }
222
240
 
223
241
  async dropIndex(collection: string, indexName: string): Promise<any> {
242
+ await this.initPromise;
224
243
  const coll = this.db.collection(collection);
225
244
  return await coll.dropIndex(indexName);
226
245
  }
227
246
 
228
247
  async count(collection: string, query?: any): Promise<number> {
248
+ await this.initPromise;
229
249
  const coll = this.db.collection(collection);
230
250
  return await coll.countDocuments(query || {});
231
251
  }
@@ -1,6 +1,7 @@
1
1
  // Database MySQL Adapter
2
- import { DatabaseAdapter, DatabaseTransaction } from '../../../types/database';
3
- import { createFrameworkLogger } from '../../logger';
2
+ import { DatabaseAdapter, DatabaseTransaction } from '../../../types/database.js';
3
+ import { createFrameworkLogger } from '../../logger/index.js';
4
+ import { resolveUserPackage } from '../../utilities/package-utils.js';
4
5
 
5
6
  interface MySQLConfig {
6
7
  host?: string;
@@ -27,11 +28,17 @@ interface MySQLConfig {
27
28
  export class MySQLAdapter implements DatabaseAdapter {
28
29
  private pool: any;
29
30
  private logger = createFrameworkLogger('MySQL');
31
+ private initPromise: Promise<void>;
30
32
 
31
33
  constructor(config: MySQLConfig) {
34
+ this.initPromise = this.initialize(config);
35
+ }
36
+
37
+ private async initialize(config: MySQLConfig): Promise<void> {
32
38
  try {
33
- const mysql = require('mysql2/promise');
34
- this.pool = mysql.createPool({
39
+ const mysqlPath = resolveUserPackage('mysql2/promise');
40
+ const mysql = await import(mysqlPath);
41
+ this.pool = mysql.default.createPool({
35
42
  host: config.host || 'localhost',
36
43
  port: config.port || 3306,
37
44
  user: config.user || 'root',
@@ -50,6 +57,7 @@ export class MySQLAdapter implements DatabaseAdapter {
50
57
  }
51
58
 
52
59
  async connect(): Promise<void> {
60
+ await this.initPromise;
53
61
  try {
54
62
  const connection = await this.pool.getConnection();
55
63
  connection.release();
@@ -63,10 +71,12 @@ export class MySQLAdapter implements DatabaseAdapter {
63
71
  }
64
72
 
65
73
  async disconnect(): Promise<void> {
74
+ await this.initPromise;
66
75
  await this.pool.end();
67
76
  }
68
77
 
69
78
  async query<T = any>(sql: string, params?: any[]): Promise<T[]> {
79
+ await this.initPromise;
70
80
  const [rows] = await this.pool.execute(sql, params);
71
81
  return rows as T[];
72
82
  }
@@ -77,6 +87,7 @@ export class MySQLAdapter implements DatabaseAdapter {
77
87
  }
78
88
 
79
89
  async insert<T = any>(table: string, data: Record<string, any>): Promise<T> {
90
+ await this.initPromise;
80
91
  const keys = Object.keys(data);
81
92
  const values = Object.values(data);
82
93
  const placeholders = keys.map(() => '?').join(', ');
@@ -97,6 +108,7 @@ export class MySQLAdapter implements DatabaseAdapter {
97
108
  data: Record<string, any>,
98
109
  where: Record<string, any>
99
110
  ): Promise<T> {
111
+ await this.initPromise;
100
112
  const setClause = Object.keys(data)
101
113
  .map(key => `${key} = ?`)
102
114
  .join(', ');
@@ -119,6 +131,7 @@ export class MySQLAdapter implements DatabaseAdapter {
119
131
  }
120
132
 
121
133
  async delete(table: string, where: Record<string, any>): Promise<number> {
134
+ await this.initPromise;
122
135
  const whereClause = Object.keys(where)
123
136
  .map(key => `${key} = ?`)
124
137
  .join(' AND ');
@@ -129,6 +142,7 @@ export class MySQLAdapter implements DatabaseAdapter {
129
142
  }
130
143
 
131
144
  async transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T> {
145
+ await this.initPromise;
132
146
  const connection = await this.pool.getConnection();
133
147
 
134
148
  try {
@@ -1,6 +1,7 @@
1
1
  // Database PostgreSQL Adapter
2
- import { DatabaseAdapter, DatabaseTransaction } from '../../../types/database';
3
- import { createFrameworkLogger } from '../../logger';
2
+ import { DatabaseAdapter, DatabaseTransaction } from '../../../types/database.js';
3
+ import { createFrameworkLogger } from '../../logger/index.js';
4
+ import { resolveUserPackage } from '../../utilities/package-utils.js';
4
5
 
5
6
  interface PostgreSQLConfig {
6
7
  host?: string;
@@ -25,10 +26,17 @@ interface PostgreSQLConfig {
25
26
  export class PostgreSQLAdapter implements DatabaseAdapter {
26
27
  private pool: any;
27
28
  private logger = createFrameworkLogger('PostgreSQL');
29
+ private initPromise: Promise<void>;
28
30
 
29
31
  constructor(config: PostgreSQLConfig) {
32
+ this.initPromise = this.initialize(config);
33
+ }
34
+
35
+ private async initialize(config: PostgreSQLConfig): Promise<void> {
30
36
  try {
31
- const { Pool } = require('pg');
37
+ const pgPath = resolveUserPackage('pg');
38
+ const pg = await import(pgPath);
39
+ const { Pool } = pg.default;
32
40
  this.pool = new Pool({
33
41
  host: config.host || 'localhost',
34
42
  port: config.port || 5432,
@@ -54,6 +62,7 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
54
62
  }
55
63
 
56
64
  async connect(): Promise<void> {
65
+ await this.initPromise;
57
66
  try {
58
67
  const client = await this.pool.connect();
59
68
  client.release();
@@ -67,10 +76,12 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
67
76
  }
68
77
 
69
78
  async disconnect(): Promise<void> {
79
+ await this.initPromise;
70
80
  await this.pool.end();
71
81
  }
72
82
 
73
83
  async query<T = any>(sql: string, params?: any[]): Promise<T[]> {
84
+ await this.initPromise;
74
85
  const result = await this.pool.query(sql, params);
75
86
  return result.rows as T[];
76
87
  }
@@ -81,6 +92,7 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
81
92
  }
82
93
 
83
94
  async insert<T = any>(table: string, data: Record<string, any>): Promise<T> {
95
+ await this.initPromise;
84
96
  const keys = Object.keys(data);
85
97
  const values = Object.values(data);
86
98
  const placeholders = keys.map((_, index) => `$${index + 1}`).join(', ');
@@ -96,6 +108,7 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
96
108
  data: Record<string, any>,
97
109
  where: Record<string, any>
98
110
  ): Promise<T> {
111
+ await this.initPromise;
99
112
  const dataKeys = Object.keys(data);
100
113
  const dataValues = Object.values(data);
101
114
  const whereKeys = Object.keys(where);
@@ -114,6 +127,7 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
114
127
  }
115
128
 
116
129
  async delete(table: string, where: Record<string, any>): Promise<number> {
130
+ await this.initPromise;
117
131
  const whereKeys = Object.keys(where);
118
132
  const whereValues = Object.values(where);
119
133
  const whereClause = whereKeys.map((key, index) => `${key} = $${index + 1}`).join(' AND ');
@@ -125,6 +139,7 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
125
139
  }
126
140
 
127
141
  async transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T> {
142
+ await this.initPromise;
128
143
  const client = await this.pool.connect();
129
144
 
130
145
  try {