@morojs/moro 1.0.0 → 1.0.1

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 (284) hide show
  1. package/README.md +1 -1
  2. package/dist/core/config/index.d.ts +5 -5
  3. package/dist/core/config/index.js +1 -1
  4. package/dist/core/config/index.js.map +1 -1
  5. package/dist/core/config/loader.d.ts +1 -1
  6. package/dist/core/config/loader.js +58 -82
  7. package/dist/core/config/loader.js.map +1 -1
  8. package/dist/core/config/schema.d.ts +1 -1
  9. package/dist/core/config/schema.js +52 -111
  10. package/dist/core/config/schema.js.map +1 -1
  11. package/dist/core/config/utils.d.ts +2 -2
  12. package/dist/core/config/utils.js +18 -18
  13. package/dist/core/config/utils.js.map +1 -1
  14. package/dist/core/database/adapters/drizzle.d.ts +1 -1
  15. package/dist/core/database/adapters/drizzle.js +39 -55
  16. package/dist/core/database/adapters/drizzle.js.map +1 -1
  17. package/dist/core/database/adapters/index.d.ts +7 -7
  18. package/dist/core/database/adapters/index.js +11 -11
  19. package/dist/core/database/adapters/index.js.map +1 -1
  20. package/dist/core/database/adapters/mongodb.d.ts +1 -1
  21. package/dist/core/database/adapters/mongodb.js +19 -23
  22. package/dist/core/database/adapters/mongodb.js.map +1 -1
  23. package/dist/core/database/adapters/mysql.d.ts +1 -1
  24. package/dist/core/database/adapters/mysql.js +31 -27
  25. package/dist/core/database/adapters/mysql.js.map +1 -1
  26. package/dist/core/database/adapters/postgresql.d.ts +1 -1
  27. package/dist/core/database/adapters/postgresql.js +27 -35
  28. package/dist/core/database/adapters/postgresql.js.map +1 -1
  29. package/dist/core/database/adapters/redis.d.ts +1 -1
  30. package/dist/core/database/adapters/redis.js +24 -24
  31. package/dist/core/database/adapters/redis.js.map +1 -1
  32. package/dist/core/database/adapters/sqlite.d.ts +1 -1
  33. package/dist/core/database/adapters/sqlite.js +36 -36
  34. package/dist/core/database/adapters/sqlite.js.map +1 -1
  35. package/dist/core/database/index.d.ts +2 -2
  36. package/dist/core/docs/index.d.ts +7 -7
  37. package/dist/core/docs/index.js +13 -15
  38. package/dist/core/docs/index.js.map +1 -1
  39. package/dist/core/docs/openapi-generator.d.ts +5 -5
  40. package/dist/core/docs/openapi-generator.js +93 -94
  41. package/dist/core/docs/openapi-generator.js.map +1 -1
  42. package/dist/core/docs/simple-docs.d.ts +1 -1
  43. package/dist/core/docs/simple-docs.js +25 -28
  44. package/dist/core/docs/simple-docs.js.map +1 -1
  45. package/dist/core/docs/swagger-ui.d.ts +2 -2
  46. package/dist/core/docs/swagger-ui.js +46 -51
  47. package/dist/core/docs/swagger-ui.js.map +1 -1
  48. package/dist/core/docs/zod-to-openapi.d.ts +1 -1
  49. package/dist/core/docs/zod-to-openapi.js +115 -125
  50. package/dist/core/docs/zod-to-openapi.js.map +1 -1
  51. package/dist/core/events/event-bus.d.ts +1 -1
  52. package/dist/core/events/event-bus.js +15 -21
  53. package/dist/core/events/event-bus.js.map +1 -1
  54. package/dist/core/events/index.d.ts +2 -2
  55. package/dist/core/framework.d.ts +5 -5
  56. package/dist/core/framework.js +55 -60
  57. package/dist/core/framework.js.map +1 -1
  58. package/dist/core/http/http-server.d.ts +2 -2
  59. package/dist/core/http/http-server.js +228 -261
  60. package/dist/core/http/http-server.js.map +1 -1
  61. package/dist/core/http/index.d.ts +3 -3
  62. package/dist/core/http/router.d.ts +1 -1
  63. package/dist/core/http/router.js +15 -17
  64. package/dist/core/http/router.js.map +1 -1
  65. package/dist/core/logger/filters.d.ts +1 -1
  66. package/dist/core/logger/filters.js +16 -16
  67. package/dist/core/logger/filters.js.map +1 -1
  68. package/dist/core/logger/index.d.ts +3 -3
  69. package/dist/core/logger/logger.d.ts +1 -1
  70. package/dist/core/logger/logger.js +48 -59
  71. package/dist/core/logger/logger.js.map +1 -1
  72. package/dist/core/logger/outputs.d.ts +4 -4
  73. package/dist/core/logger/outputs.js +16 -20
  74. package/dist/core/logger/outputs.js.map +1 -1
  75. package/dist/core/middleware/built-in/adapters/cache/file.d.ts +1 -1
  76. package/dist/core/middleware/built-in/adapters/cache/file.js +19 -19
  77. package/dist/core/middleware/built-in/adapters/cache/file.js.map +1 -1
  78. package/dist/core/middleware/built-in/adapters/cache/index.d.ts +4 -4
  79. package/dist/core/middleware/built-in/adapters/cache/index.js +3 -3
  80. package/dist/core/middleware/built-in/adapters/cache/index.js.map +1 -1
  81. package/dist/core/middleware/built-in/adapters/cache/memory.d.ts +1 -1
  82. package/dist/core/middleware/built-in/adapters/cache/memory.js +5 -5
  83. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +1 -1
  84. package/dist/core/middleware/built-in/adapters/cache/redis.d.ts +1 -1
  85. package/dist/core/middleware/built-in/adapters/cache/redis.js +18 -18
  86. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +1 -1
  87. package/dist/core/middleware/built-in/adapters/cdn/azure.d.ts +1 -1
  88. package/dist/core/middleware/built-in/adapters/cdn/azure.js +8 -8
  89. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +1 -1
  90. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.d.ts +1 -1
  91. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js +14 -14
  92. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +1 -1
  93. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.d.ts +1 -1
  94. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js +13 -15
  95. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +1 -1
  96. package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +4 -4
  97. package/dist/core/middleware/built-in/adapters/cdn/index.js +3 -3
  98. package/dist/core/middleware/built-in/adapters/index.d.ts +4 -4
  99. package/dist/core/middleware/built-in/auth.d.ts +1 -1
  100. package/dist/core/middleware/built-in/auth.js +14 -14
  101. package/dist/core/middleware/built-in/cache.d.ts +2 -2
  102. package/dist/core/middleware/built-in/cache.js +43 -45
  103. package/dist/core/middleware/built-in/cache.js.map +1 -1
  104. package/dist/core/middleware/built-in/cdn.d.ts +2 -2
  105. package/dist/core/middleware/built-in/cdn.js +27 -29
  106. package/dist/core/middleware/built-in/cdn.js.map +1 -1
  107. package/dist/core/middleware/built-in/cookie.d.ts +2 -2
  108. package/dist/core/middleware/built-in/cookie.js +17 -17
  109. package/dist/core/middleware/built-in/cookie.js.map +1 -1
  110. package/dist/core/middleware/built-in/cors.d.ts +1 -1
  111. package/dist/core/middleware/built-in/cors.js +13 -13
  112. package/dist/core/middleware/built-in/csp.d.ts +1 -1
  113. package/dist/core/middleware/built-in/csp.js +22 -25
  114. package/dist/core/middleware/built-in/csp.js.map +1 -1
  115. package/dist/core/middleware/built-in/csrf.d.ts +1 -1
  116. package/dist/core/middleware/built-in/csrf.js +21 -24
  117. package/dist/core/middleware/built-in/csrf.js.map +1 -1
  118. package/dist/core/middleware/built-in/error-tracker.js +2 -2
  119. package/dist/core/middleware/built-in/index.d.ts +14 -14
  120. package/dist/core/middleware/built-in/performance-monitor.js +2 -2
  121. package/dist/core/middleware/built-in/rate-limit.d.ts +1 -1
  122. package/dist/core/middleware/built-in/rate-limit.js +12 -12
  123. package/dist/core/middleware/built-in/request-logger.js.map +1 -1
  124. package/dist/core/middleware/built-in/session.d.ts +5 -5
  125. package/dist/core/middleware/built-in/session.js +35 -38
  126. package/dist/core/middleware/built-in/session.js.map +1 -1
  127. package/dist/core/middleware/built-in/sse.d.ts +1 -1
  128. package/dist/core/middleware/built-in/sse.js +20 -22
  129. package/dist/core/middleware/built-in/sse.js.map +1 -1
  130. package/dist/core/middleware/built-in/validation.d.ts +1 -1
  131. package/dist/core/middleware/built-in/validation.js +13 -13
  132. package/dist/core/middleware/index.d.ts +5 -5
  133. package/dist/core/middleware/index.js +16 -16
  134. package/dist/core/middleware/index.js.map +1 -1
  135. package/dist/core/modules/auto-discovery.d.ts +2 -2
  136. package/dist/core/modules/auto-discovery.js +12 -13
  137. package/dist/core/modules/auto-discovery.js.map +1 -1
  138. package/dist/core/modules/index.d.ts +2 -2
  139. package/dist/core/modules/index.js.map +1 -1
  140. package/dist/core/modules/modules.d.ts +3 -3
  141. package/dist/core/modules/modules.js +3 -6
  142. package/dist/core/modules/modules.js.map +1 -1
  143. package/dist/core/networking/index.d.ts +2 -2
  144. package/dist/core/networking/index.js.map +1 -1
  145. package/dist/core/networking/service-discovery.d.ts +2 -2
  146. package/dist/core/networking/service-discovery.js +27 -27
  147. package/dist/core/networking/service-discovery.js.map +1 -1
  148. package/dist/core/networking/websocket-manager.d.ts +3 -3
  149. package/dist/core/networking/websocket-manager.js +15 -16
  150. package/dist/core/networking/websocket-manager.js.map +1 -1
  151. package/dist/core/routing/app-integration.d.ts +2 -2
  152. package/dist/core/routing/app-integration.js +13 -13
  153. package/dist/core/routing/app-integration.js.map +1 -1
  154. package/dist/core/routing/index.d.ts +3 -3
  155. package/dist/core/routing/index.js +43 -52
  156. package/dist/core/routing/index.js.map +1 -1
  157. package/dist/core/runtime/aws-lambda-adapter.d.ts +3 -3
  158. package/dist/core/runtime/aws-lambda-adapter.js +14 -16
  159. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  160. package/dist/core/runtime/base-adapter.d.ts +2 -2
  161. package/dist/core/runtime/base-adapter.js +11 -12
  162. package/dist/core/runtime/base-adapter.js.map +1 -1
  163. package/dist/core/runtime/cloudflare-workers-adapter.d.ts +3 -3
  164. package/dist/core/runtime/cloudflare-workers-adapter.js +20 -21
  165. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  166. package/dist/core/runtime/index.d.ts +9 -9
  167. package/dist/core/runtime/index.js +4 -4
  168. package/dist/core/runtime/index.js.map +1 -1
  169. package/dist/core/runtime/node-adapter.d.ts +5 -5
  170. package/dist/core/runtime/node-adapter.js +35 -35
  171. package/dist/core/runtime/node-adapter.js.map +1 -1
  172. package/dist/core/runtime/vercel-edge-adapter.d.ts +3 -3
  173. package/dist/core/runtime/vercel-edge-adapter.js +12 -15
  174. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  175. package/dist/core/utilities/circuit-breaker.js +6 -6
  176. package/dist/core/utilities/container.d.ts +1 -1
  177. package/dist/core/utilities/container.js +17 -22
  178. package/dist/core/utilities/container.js.map +1 -1
  179. package/dist/core/utilities/hooks.d.ts +3 -3
  180. package/dist/core/utilities/hooks.js +11 -11
  181. package/dist/core/utilities/hooks.js.map +1 -1
  182. package/dist/core/utilities/index.d.ts +4 -4
  183. package/dist/core/validation/index.d.ts +3 -3
  184. package/dist/core/validation/index.js +15 -15
  185. package/dist/core/validation/index.js.map +1 -1
  186. package/dist/index.d.ts +31 -30
  187. package/dist/index.js +28 -1
  188. package/dist/index.js.map +1 -1
  189. package/dist/moro.d.ts +14 -14
  190. package/dist/moro.js +79 -88
  191. package/dist/moro.js.map +1 -1
  192. package/dist/types/cache.d.ts +1 -1
  193. package/dist/types/core.d.ts +2 -2
  194. package/dist/types/events.d.ts +19 -19
  195. package/dist/types/hooks.d.ts +1 -1
  196. package/dist/types/http.d.ts +2 -2
  197. package/dist/types/logger.d.ts +3 -3
  198. package/dist/types/module.d.ts +2 -2
  199. package/dist/types/runtime.d.ts +2 -2
  200. package/dist/types/session.d.ts +4 -4
  201. package/package.json +180 -164
  202. package/src/core/config/index.ts +7 -9
  203. package/src/core/config/loader.ts +86 -158
  204. package/src/core/config/schema.ts +59 -122
  205. package/src/core/config/utils.ts +27 -45
  206. package/src/core/database/adapters/drizzle.ts +53 -75
  207. package/src/core/database/adapters/index.ts +26 -29
  208. package/src/core/database/adapters/mongodb.ts +31 -54
  209. package/src/core/database/adapters/mysql.ts +40 -50
  210. package/src/core/database/adapters/postgresql.ts +32 -42
  211. package/src/core/database/adapters/redis.ts +31 -36
  212. package/src/core/database/adapters/sqlite.ts +43 -51
  213. package/src/core/database/index.ts +2 -2
  214. package/src/core/docs/index.ts +25 -39
  215. package/src/core/docs/openapi-generator.ts +104 -117
  216. package/src/core/docs/simple-docs.ts +29 -39
  217. package/src/core/docs/swagger-ui.ts +57 -76
  218. package/src/core/docs/zod-to-openapi.ts +121 -153
  219. package/src/core/events/event-bus.ts +22 -45
  220. package/src/core/events/index.ts +2 -2
  221. package/src/core/framework.ts +119 -197
  222. package/src/core/http/http-server.ts +260 -360
  223. package/src/core/http/index.ts +3 -8
  224. package/src/core/http/router.ts +19 -31
  225. package/src/core/logger/filters.ts +19 -22
  226. package/src/core/logger/index.ts +3 -3
  227. package/src/core/logger/logger.ts +59 -100
  228. package/src/core/logger/outputs.ts +23 -27
  229. package/src/core/middleware/built-in/adapters/cache/file.ts +21 -23
  230. package/src/core/middleware/built-in/adapters/cache/index.ts +11 -14
  231. package/src/core/middleware/built-in/adapters/cache/memory.ts +7 -7
  232. package/src/core/middleware/built-in/adapters/cache/redis.ts +21 -24
  233. package/src/core/middleware/built-in/adapters/cdn/azure.ts +10 -18
  234. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +19 -36
  235. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +17 -26
  236. package/src/core/middleware/built-in/adapters/cdn/index.ts +10 -10
  237. package/src/core/middleware/built-in/adapters/index.ts +4 -4
  238. package/src/core/middleware/built-in/auth.ts +16 -16
  239. package/src/core/middleware/built-in/cache.ts +50 -67
  240. package/src/core/middleware/built-in/cdn.ts +34 -61
  241. package/src/core/middleware/built-in/cookie.ts +23 -28
  242. package/src/core/middleware/built-in/cors.ts +17 -17
  243. package/src/core/middleware/built-in/csp.ts +25 -31
  244. package/src/core/middleware/built-in/csrf.ts +24 -29
  245. package/src/core/middleware/built-in/error-tracker.ts +3 -3
  246. package/src/core/middleware/built-in/index.ts +28 -28
  247. package/src/core/middleware/built-in/performance-monitor.ts +4 -4
  248. package/src/core/middleware/built-in/rate-limit.ts +15 -15
  249. package/src/core/middleware/built-in/request-logger.ts +1 -3
  250. package/src/core/middleware/built-in/session.ts +47 -70
  251. package/src/core/middleware/built-in/sse.ts +23 -28
  252. package/src/core/middleware/built-in/validation.ts +15 -15
  253. package/src/core/middleware/index.ts +26 -37
  254. package/src/core/modules/auto-discovery.ts +21 -31
  255. package/src/core/modules/index.ts +2 -5
  256. package/src/core/modules/modules.ts +11 -20
  257. package/src/core/networking/index.ts +2 -6
  258. package/src/core/networking/service-discovery.ts +41 -61
  259. package/src/core/networking/websocket-manager.ts +27 -36
  260. package/src/core/routing/app-integration.ts +19 -32
  261. package/src/core/routing/index.ts +57 -88
  262. package/src/core/runtime/aws-lambda-adapter.ts +20 -30
  263. package/src/core/runtime/base-adapter.ts +17 -27
  264. package/src/core/runtime/cloudflare-workers-adapter.ts +28 -42
  265. package/src/core/runtime/index.ts +21 -33
  266. package/src/core/runtime/node-adapter.ts +59 -73
  267. package/src/core/runtime/vercel-edge-adapter.ts +18 -29
  268. package/src/core/utilities/circuit-breaker.ts +7 -7
  269. package/src/core/utilities/container.ts +52 -89
  270. package/src/core/utilities/hooks.ts +17 -23
  271. package/src/core/utilities/index.ts +4 -4
  272. package/src/core/validation/index.ts +25 -51
  273. package/src/index.ts +58 -60
  274. package/src/moro.ts +119 -191
  275. package/src/types/cache.ts +1 -1
  276. package/src/types/core.ts +2 -2
  277. package/src/types/database.ts +2 -10
  278. package/src/types/events.ts +23 -31
  279. package/src/types/hooks.ts +1 -1
  280. package/src/types/http.ts +5 -8
  281. package/src/types/logger.ts +7 -23
  282. package/src/types/module.ts +2 -2
  283. package/src/types/runtime.ts +6 -21
  284. package/src/types/session.ts +4 -4
@@ -1,6 +1,6 @@
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';
3
+ import { createFrameworkLogger } from '../../logger';
4
4
 
5
5
  interface DrizzleConfig {
6
6
  database: any; // Drizzle database instance
@@ -11,22 +11,22 @@ interface DrizzleConfig {
11
11
  export class DrizzleAdapter implements DatabaseAdapter {
12
12
  private db: any;
13
13
  private schema: any;
14
- private logger = createFrameworkLogger("Drizzle");
14
+ private logger = createFrameworkLogger('Drizzle');
15
15
 
16
16
  constructor(config: DrizzleConfig) {
17
17
  try {
18
18
  if (!config.database) {
19
- throw new Error("Drizzle database instance is required");
19
+ throw new Error('Drizzle database instance is required');
20
20
  }
21
21
 
22
22
  this.db = config.database;
23
23
  this.schema = config.schema;
24
24
 
25
- this.logger.info("Drizzle ORM adapter initialized", "Drizzle");
25
+ this.logger.info('Drizzle ORM adapter initialized', 'Drizzle');
26
26
  } catch (error) {
27
- this.logger.error("Drizzle ORM initialization failed", "Drizzle");
27
+ this.logger.error('Drizzle ORM initialization failed', 'Drizzle');
28
28
  throw new Error(
29
- "Drizzle ORM configuration error. Ensure you have a valid Drizzle database instance.",
29
+ 'Drizzle ORM configuration error. Ensure you have a valid Drizzle database instance.'
30
30
  );
31
31
  }
32
32
  }
@@ -34,13 +34,13 @@ export class DrizzleAdapter implements DatabaseAdapter {
34
34
  async connect(): Promise<void> {
35
35
  // Drizzle doesn't have an explicit connect method
36
36
  // Connection is handled by the underlying driver
37
- this.logger.info("Drizzle ORM adapter ready", "Connection");
37
+ this.logger.info('Drizzle ORM adapter ready', 'Connection');
38
38
  }
39
39
 
40
40
  async disconnect(): Promise<void> {
41
41
  // Drizzle doesn't have an explicit disconnect method
42
42
  // This would be handled by the underlying driver
43
- this.logger.info("Drizzle ORM adapter disconnected", "Connection");
43
+ this.logger.info('Drizzle ORM adapter disconnected', 'Connection');
44
44
  }
45
45
 
46
46
  // Raw SQL query support
@@ -60,7 +60,7 @@ export class DrizzleAdapter implements DatabaseAdapter {
60
60
  return [result];
61
61
  }
62
62
  } catch (error) {
63
- this.logger.error("Drizzle query failed", "Query", {
63
+ this.logger.error('Drizzle query failed', 'Query', {
64
64
  sql,
65
65
  error: error instanceof Error ? error.message : String(error),
66
66
  });
@@ -78,23 +78,20 @@ export class DrizzleAdapter implements DatabaseAdapter {
78
78
  try {
79
79
  if (this.schema && this.schema[table]) {
80
80
  // Use schema-based insert
81
- const result = await this.db
82
- .insert(this.schema[table])
83
- .values(data)
84
- .returning();
81
+ const result = await this.db.insert(this.schema[table]).values(data).returning();
85
82
  return result[0] as T;
86
83
  } else {
87
84
  // Fallback to raw SQL
88
85
  const keys = Object.keys(data);
89
86
  const values = Object.values(data);
90
- const placeholders = keys.map((_, i) => `$${i + 1}`).join(", ");
87
+ const placeholders = keys.map((_, i) => `$${i + 1}`).join(', ');
91
88
 
92
- const sql = `INSERT INTO ${table} (${keys.join(", ")}) VALUES (${placeholders}) RETURNING *`;
89
+ const sql = `INSERT INTO ${table} (${keys.join(', ')}) VALUES (${placeholders}) RETURNING *`;
93
90
  const result = await this.query<T>(sql, values);
94
91
  return result[0];
95
92
  }
96
93
  } catch (error) {
97
- this.logger.error("Drizzle insert failed", "Insert", {
94
+ this.logger.error('Drizzle insert failed', 'Insert', {
98
95
  table,
99
96
  error: error instanceof Error ? error.message : String(error),
100
97
  });
@@ -105,20 +102,19 @@ export class DrizzleAdapter implements DatabaseAdapter {
105
102
  async update<T = any>(
106
103
  table: string,
107
104
  data: Record<string, any>,
108
- where: Record<string, any>,
105
+ where: Record<string, any>
109
106
  ): Promise<T> {
110
107
  try {
111
108
  if (this.schema && this.schema[table]) {
112
109
  // Use schema-based update
113
110
  try {
114
- const { eq, and } = require("drizzle-orm");
111
+ const { eq, and } = require('drizzle-orm');
115
112
 
116
113
  // Build where conditions
117
114
  const conditions = Object.entries(where).map(([key, value]) =>
118
- eq(this.schema[table][key], value),
115
+ eq(this.schema[table][key], value)
119
116
  );
120
- const whereClause =
121
- conditions.length === 1 ? conditions[0] : and(...conditions);
117
+ const whereClause = conditions.length === 1 ? conditions[0] : and(...conditions);
122
118
 
123
119
  const result = await this.db
124
120
  .update(this.schema[table])
@@ -131,10 +127,10 @@ export class DrizzleAdapter implements DatabaseAdapter {
131
127
  // Fallback to raw SQL if drizzle-orm is not available
132
128
  const setClause = Object.keys(data)
133
129
  .map((key, i) => `${key} = $${i + 1}`)
134
- .join(", ");
130
+ .join(', ');
135
131
  const whereClause = Object.keys(where)
136
132
  .map((key, i) => `${key} = $${Object.keys(data).length + i + 1}`)
137
- .join(" AND ");
133
+ .join(' AND ');
138
134
 
139
135
  const sql = `UPDATE ${table} SET ${setClause} WHERE ${whereClause} RETURNING *`;
140
136
  const params = [...Object.values(data), ...Object.values(where)];
@@ -145,10 +141,10 @@ export class DrizzleAdapter implements DatabaseAdapter {
145
141
  // Fallback to raw SQL
146
142
  const setClause = Object.keys(data)
147
143
  .map((key, i) => `${key} = $${i + 1}`)
148
- .join(", ");
144
+ .join(', ');
149
145
  const whereClause = Object.keys(where)
150
146
  .map((key, i) => `${key} = $${Object.keys(data).length + i + 1}`)
151
- .join(" AND ");
147
+ .join(' AND ');
152
148
 
153
149
  const sql = `UPDATE ${table} SET ${setClause} WHERE ${whereClause} RETURNING *`;
154
150
  const params = [...Object.values(data), ...Object.values(where)];
@@ -156,7 +152,7 @@ export class DrizzleAdapter implements DatabaseAdapter {
156
152
  return result[0];
157
153
  }
158
154
  } catch (error) {
159
- this.logger.error("Drizzle update failed", "Update", {
155
+ this.logger.error('Drizzle update failed', 'Update', {
160
156
  table,
161
157
  error: error instanceof Error ? error.message : String(error),
162
158
  });
@@ -169,29 +165,23 @@ export class DrizzleAdapter implements DatabaseAdapter {
169
165
  if (this.schema && this.schema[table]) {
170
166
  // Use schema-based delete
171
167
  try {
172
- const { eq, and } = require("drizzle-orm");
168
+ const { eq, and } = require('drizzle-orm');
173
169
 
174
170
  const conditions = Object.entries(where).map(([key, value]) =>
175
- eq(this.schema[table][key], value),
171
+ eq(this.schema[table][key], value)
176
172
  );
177
- const whereClause =
178
- conditions.length === 1 ? conditions[0] : and(...conditions);
173
+ const whereClause = conditions.length === 1 ? conditions[0] : and(...conditions);
179
174
 
180
- const result = await this.db
181
- .delete(this.schema[table])
182
- .where(whereClause);
175
+ const result = await this.db.delete(this.schema[table]).where(whereClause);
183
176
 
184
177
  return (
185
- (result as any).changes ||
186
- (result as any).rowCount ||
187
- (result as any).affectedRows ||
188
- 0
178
+ (result as any).changes || (result as any).rowCount || (result as any).affectedRows || 0
189
179
  );
190
180
  } catch (importError) {
191
181
  // Fallback to raw SQL if drizzle-orm is not available
192
182
  const whereClause = Object.keys(where)
193
183
  .map((key, i) => `${key} = $${i + 1}`)
194
- .join(" AND ");
184
+ .join(' AND ');
195
185
  const sql = `DELETE FROM ${table} WHERE ${whereClause}`;
196
186
  await this.query(sql, Object.values(where));
197
187
  return 1; // Can't determine exact count without result metadata
@@ -200,13 +190,13 @@ export class DrizzleAdapter implements DatabaseAdapter {
200
190
  // Fallback to raw SQL
201
191
  const whereClause = Object.keys(where)
202
192
  .map((key, i) => `${key} = $${i + 1}`)
203
- .join(" AND ");
193
+ .join(' AND ');
204
194
  const sql = `DELETE FROM ${table} WHERE ${whereClause}`;
205
195
  await this.query(sql, Object.values(where));
206
196
  return 1; // Can't determine exact count without result metadata
207
197
  }
208
198
  } catch (error) {
209
- this.logger.error("Drizzle delete failed", "Delete", {
199
+ this.logger.error('Drizzle delete failed', 'Delete', {
210
200
  table,
211
201
  error: error instanceof Error ? error.message : String(error),
212
202
  });
@@ -214,9 +204,7 @@ export class DrizzleAdapter implements DatabaseAdapter {
214
204
  }
215
205
  }
216
206
 
217
- async transaction<T>(
218
- callback: (tx: DatabaseTransaction) => Promise<T>,
219
- ): Promise<T> {
207
+ async transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T> {
220
208
  return await this.db.transaction(async (tx: any) => {
221
209
  const transaction = new DrizzleTransaction(tx, this.schema, this.logger);
222
210
  return await callback(transaction);
@@ -274,7 +262,7 @@ class DrizzleTransaction implements DatabaseTransaction {
274
262
  constructor(
275
263
  private tx: any,
276
264
  private schema: any,
277
- private logger: any,
265
+ private logger: any
278
266
  ) {}
279
267
 
280
268
  async query<T = any>(sql: string, params?: any[]): Promise<T[]> {
@@ -291,7 +279,7 @@ class DrizzleTransaction implements DatabaseTransaction {
291
279
  return [result];
292
280
  }
293
281
  } catch (error) {
294
- this.logger.error("Drizzle transaction query failed", "Query", {
282
+ this.logger.error('Drizzle transaction query failed', 'Query', {
295
283
  sql,
296
284
  error: error instanceof Error ? error.message : String(error),
297
285
  });
@@ -306,17 +294,14 @@ class DrizzleTransaction implements DatabaseTransaction {
306
294
 
307
295
  async insert<T = any>(table: string, data: Record<string, any>): Promise<T> {
308
296
  if (this.schema && this.schema[table]) {
309
- const result = await this.tx
310
- .insert(this.schema[table])
311
- .values(data)
312
- .returning();
297
+ const result = await this.tx.insert(this.schema[table]).values(data).returning();
313
298
  return result[0] as T;
314
299
  } else {
315
300
  const keys = Object.keys(data);
316
301
  const values = Object.values(data);
317
- const placeholders = keys.map((_, i) => `$${i + 1}`).join(", ");
302
+ const placeholders = keys.map((_, i) => `$${i + 1}`).join(', ');
318
303
 
319
- const sql = `INSERT INTO ${table} (${keys.join(", ")}) VALUES (${placeholders}) RETURNING *`;
304
+ const sql = `INSERT INTO ${table} (${keys.join(', ')}) VALUES (${placeholders}) RETURNING *`;
320
305
  const result = await this.query<T>(sql, values);
321
306
  return result[0];
322
307
  }
@@ -325,17 +310,16 @@ class DrizzleTransaction implements DatabaseTransaction {
325
310
  async update<T = any>(
326
311
  table: string,
327
312
  data: Record<string, any>,
328
- where: Record<string, any>,
313
+ where: Record<string, any>
329
314
  ): Promise<T> {
330
315
  if (this.schema && this.schema[table]) {
331
316
  try {
332
- const { eq, and } = require("drizzle-orm");
317
+ const { eq, and } = require('drizzle-orm');
333
318
 
334
319
  const conditions = Object.entries(where).map(([key, value]) =>
335
- eq(this.schema[table][key], value),
320
+ eq(this.schema[table][key], value)
336
321
  );
337
- const whereClause =
338
- conditions.length === 1 ? conditions[0] : and(...conditions);
322
+ const whereClause = conditions.length === 1 ? conditions[0] : and(...conditions);
339
323
 
340
324
  const result = await this.tx
341
325
  .update(this.schema[table])
@@ -348,10 +332,10 @@ class DrizzleTransaction implements DatabaseTransaction {
348
332
  // Fallback to raw SQL
349
333
  const setClause = Object.keys(data)
350
334
  .map((key, i) => `${key} = $${i + 1}`)
351
- .join(", ");
335
+ .join(', ');
352
336
  const whereClause = Object.keys(where)
353
337
  .map((key, i) => `${key} = $${Object.keys(data).length + i + 1}`)
354
- .join(" AND ");
338
+ .join(' AND ');
355
339
 
356
340
  const sql = `UPDATE ${table} SET ${setClause} WHERE ${whereClause} RETURNING *`;
357
341
  const params = [...Object.values(data), ...Object.values(where)];
@@ -361,10 +345,10 @@ class DrizzleTransaction implements DatabaseTransaction {
361
345
  } else {
362
346
  const setClause = Object.keys(data)
363
347
  .map((key, i) => `${key} = $${i + 1}`)
364
- .join(", ");
348
+ .join(', ');
365
349
  const whereClause = Object.keys(where)
366
350
  .map((key, i) => `${key} = $${Object.keys(data).length + i + 1}`)
367
- .join(" AND ");
351
+ .join(' AND ');
368
352
 
369
353
  const sql = `UPDATE ${table} SET ${setClause} WHERE ${whereClause} RETURNING *`;
370
354
  const params = [...Object.values(data), ...Object.values(where)];
@@ -376,29 +360,23 @@ class DrizzleTransaction implements DatabaseTransaction {
376
360
  async delete(table: string, where: Record<string, any>): Promise<number> {
377
361
  if (this.schema && this.schema[table]) {
378
362
  try {
379
- const { eq, and } = require("drizzle-orm");
363
+ const { eq, and } = require('drizzle-orm');
380
364
 
381
365
  const conditions = Object.entries(where).map(([key, value]) =>
382
- eq(this.schema[table][key], value),
366
+ eq(this.schema[table][key], value)
383
367
  );
384
- const whereClause =
385
- conditions.length === 1 ? conditions[0] : and(...conditions);
368
+ const whereClause = conditions.length === 1 ? conditions[0] : and(...conditions);
386
369
 
387
- const result = await this.tx
388
- .delete(this.schema[table])
389
- .where(whereClause);
370
+ const result = await this.tx.delete(this.schema[table]).where(whereClause);
390
371
 
391
372
  return (
392
- (result as any).changes ||
393
- (result as any).rowCount ||
394
- (result as any).affectedRows ||
395
- 0
373
+ (result as any).changes || (result as any).rowCount || (result as any).affectedRows || 0
396
374
  );
397
375
  } catch (importError) {
398
376
  // Fallback to raw SQL
399
377
  const whereClause = Object.keys(where)
400
378
  .map((key, i) => `${key} = $${i + 1}`)
401
- .join(" AND ");
379
+ .join(' AND ');
402
380
  const sql = `DELETE FROM ${table} WHERE ${whereClause}`;
403
381
  await this.query(sql, Object.values(where));
404
382
  return 1; // Can't determine exact count
@@ -406,7 +384,7 @@ class DrizzleTransaction implements DatabaseTransaction {
406
384
  } else {
407
385
  const whereClause = Object.keys(where)
408
386
  .map((key, i) => `${key} = $${i + 1}`)
409
- .join(" AND ");
387
+ .join(' AND ');
410
388
  const sql = `DELETE FROM ${table} WHERE ${whereClause}`;
411
389
  await this.query(sql, Object.values(where));
412
390
  return 1; // Can't determine exact count
@@ -420,6 +398,6 @@ class DrizzleTransaction implements DatabaseTransaction {
420
398
 
421
399
  async rollback(): Promise<void> {
422
400
  // Drizzle transactions will auto-rollback on error
423
- throw new Error("Transaction rollback");
401
+ throw new Error('Transaction rollback');
424
402
  }
425
403
  }
@@ -1,45 +1,42 @@
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';
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';
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';
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';
16
16
 
17
17
  // Adapter factory function for auto-loading
18
- export function createDatabaseAdapter(
19
- type: string,
20
- options: any = {},
21
- ): DatabaseAdapter {
18
+ export function createDatabaseAdapter(type: string, options: any = {}): DatabaseAdapter {
22
19
  switch (type.toLowerCase()) {
23
- case "mysql":
20
+ case 'mysql':
24
21
  return new MySQLAdapter(options);
25
- case "postgresql":
26
- case "postgres":
27
- case "pg":
22
+ case 'postgresql':
23
+ case 'postgres':
24
+ case 'pg':
28
25
  return new PostgreSQLAdapter(options);
29
- case "sqlite":
30
- case "sqlite3":
26
+ case 'sqlite':
27
+ case 'sqlite3':
31
28
  return new SQLiteAdapter(options);
32
- case "mongodb":
33
- case "mongo":
29
+ case 'mongodb':
30
+ case 'mongo':
34
31
  return new MongoDBAdapter(options);
35
- case "redis":
32
+ case 'redis':
36
33
  return new RedisAdapter(options);
37
- case "drizzle":
38
- case "orm":
34
+ case 'drizzle':
35
+ case 'orm':
39
36
  return new DrizzleAdapter(options);
40
37
  default:
41
38
  throw new Error(
42
- `Unknown database adapter type: ${type}. Available types: mysql, postgresql, sqlite, mongodb, redis, drizzle`,
39
+ `Unknown database adapter type: ${type}. Available types: mysql, postgresql, sqlite, mongodb, redis, drizzle`
43
40
  );
44
41
  }
45
42
  }
@@ -1,6 +1,6 @@
1
1
  // Database MongoDB Adapter
2
- import { DatabaseAdapter, DatabaseTransaction } from "../../../types/database";
3
- import { createFrameworkLogger } from "../../logger";
2
+ import { DatabaseAdapter, DatabaseTransaction } from '../../../types/database';
3
+ import { createFrameworkLogger } from '../../logger';
4
4
 
5
5
  interface MongoDBConfig {
6
6
  url?: string;
@@ -24,11 +24,11 @@ interface MongoDocument {
24
24
  export class MongoDBAdapter implements DatabaseAdapter {
25
25
  private client: any;
26
26
  private db: any;
27
- private logger = createFrameworkLogger("MongoDB");
27
+ private logger = createFrameworkLogger('MongoDB');
28
28
 
29
29
  constructor(config: MongoDBConfig) {
30
30
  try {
31
- const { MongoClient } = require("mongodb");
31
+ const { MongoClient } = require('mongodb');
32
32
 
33
33
  const url = config.url || this.buildConnectionString(config);
34
34
 
@@ -38,37 +38,32 @@ export class MongoDBAdapter implements DatabaseAdapter {
38
38
  ssl: config.ssl || false,
39
39
  });
40
40
 
41
- this.db = this.client.db(config.database || "moro_app");
41
+ this.db = this.client.db(config.database || 'moro_app');
42
42
 
43
- this.logger.info("MongoDB adapter initialized", "MongoDB");
43
+ this.logger.info('MongoDB adapter initialized', 'MongoDB');
44
44
  } catch (error) {
45
45
  throw new Error(
46
- "mongodb package is required for MongoDB adapter. Install it with: npm install mongodb",
46
+ 'mongodb package is required for MongoDB adapter. Install it with: npm install mongodb'
47
47
  );
48
48
  }
49
49
  }
50
50
 
51
51
  private buildConnectionString(config: MongoDBConfig): string {
52
- const host = config.host || "localhost";
52
+ const host = config.host || 'localhost';
53
53
  const port = config.port || 27017;
54
- const auth =
55
- config.username && config.password
56
- ? `${config.username}:${config.password}@`
57
- : "";
58
- const authSource = config.authSource
59
- ? `?authSource=${config.authSource}`
60
- : "";
61
-
62
- return `mongodb://${auth}${host}:${port}/${config.database || "moro_app"}${authSource}`;
54
+ const auth = config.username && config.password ? `${config.username}:${config.password}@` : '';
55
+ const authSource = config.authSource ? `?authSource=${config.authSource}` : '';
56
+
57
+ return `mongodb://${auth}${host}:${port}/${config.database || 'moro_app'}${authSource}`;
63
58
  }
64
59
 
65
60
  async connect(): Promise<void> {
66
61
  try {
67
62
  await this.client.connect();
68
- await this.client.db("admin").command({ ping: 1 });
69
- this.logger.info("MongoDB connection established", "Connection");
63
+ await this.client.db('admin').command({ ping: 1 });
64
+ this.logger.info('MongoDB connection established', 'Connection');
70
65
  } catch (error) {
71
- this.logger.error("MongoDB connection failed", "Connection", {
66
+ this.logger.error('MongoDB connection failed', 'Connection', {
72
67
  error: error instanceof Error ? error.message : String(error),
73
68
  });
74
69
  throw error;
@@ -98,7 +93,7 @@ export class MongoDBAdapter implements DatabaseAdapter {
98
93
  return await cursor.toArray();
99
94
  }
100
95
  } catch (error) {
101
- this.logger.error("MongoDB query failed", "Query", {
96
+ this.logger.error('MongoDB query failed', 'Query', {
102
97
  collection,
103
98
  error: error instanceof Error ? error.message : String(error),
104
99
  });
@@ -111,7 +106,7 @@ export class MongoDBAdapter implements DatabaseAdapter {
111
106
  const coll = this.db.collection(collection);
112
107
  return await coll.findOne(query || {});
113
108
  } catch (error) {
114
- this.logger.error("MongoDB queryOne failed", "Query", {
109
+ this.logger.error('MongoDB queryOne failed', 'Query', {
115
110
  collection,
116
111
  error: error instanceof Error ? error.message : String(error),
117
112
  });
@@ -119,10 +114,7 @@ export class MongoDBAdapter implements DatabaseAdapter {
119
114
  }
120
115
  }
121
116
 
122
- async insert<T = any>(
123
- collection: string,
124
- data: Record<string, any>,
125
- ): Promise<T> {
117
+ async insert<T = any>(collection: string, data: Record<string, any>): Promise<T> {
126
118
  try {
127
119
  const coll = this.db.collection(collection);
128
120
  const result = await coll.insertOne(data);
@@ -130,7 +122,7 @@ export class MongoDBAdapter implements DatabaseAdapter {
130
122
  // Return the inserted document with _id
131
123
  return { ...data, _id: result.insertedId } as T;
132
124
  } catch (error) {
133
- this.logger.error("MongoDB insert failed", "Insert", {
125
+ this.logger.error('MongoDB insert failed', 'Insert', {
134
126
  collection,
135
127
  error: error instanceof Error ? error.message : String(error),
136
128
  });
@@ -141,19 +133,19 @@ export class MongoDBAdapter implements DatabaseAdapter {
141
133
  async update<T = any>(
142
134
  collection: string,
143
135
  data: Record<string, any>,
144
- where: Record<string, any>,
136
+ where: Record<string, any>
145
137
  ): Promise<T> {
146
138
  try {
147
139
  const coll = this.db.collection(collection);
148
140
  const result = await coll.findOneAndUpdate(
149
141
  where,
150
142
  { $set: data },
151
- { returnDocument: "after" },
143
+ { returnDocument: 'after' }
152
144
  );
153
145
 
154
146
  return result.value as T;
155
147
  } catch (error) {
156
- this.logger.error("MongoDB update failed", "Update", {
148
+ this.logger.error('MongoDB update failed', 'Update', {
157
149
  collection,
158
150
  error: error instanceof Error ? error.message : String(error),
159
151
  });
@@ -161,16 +153,13 @@ export class MongoDBAdapter implements DatabaseAdapter {
161
153
  }
162
154
  }
163
155
 
164
- async delete(
165
- collection: string,
166
- where: Record<string, any>,
167
- ): Promise<number> {
156
+ async delete(collection: string, where: Record<string, any>): Promise<number> {
168
157
  try {
169
158
  const coll = this.db.collection(collection);
170
159
  const result = await coll.deleteMany(where);
171
160
  return result.deletedCount || 0;
172
161
  } catch (error) {
173
- this.logger.error("MongoDB delete failed", "Delete", {
162
+ this.logger.error('MongoDB delete failed', 'Delete', {
174
163
  collection,
175
164
  error: error instanceof Error ? error.message : String(error),
176
165
  });
@@ -178,9 +167,7 @@ export class MongoDBAdapter implements DatabaseAdapter {
178
167
  }
179
168
  }
180
169
 
181
- async transaction<T>(
182
- callback: (tx: DatabaseTransaction) => Promise<T>,
183
- ): Promise<T> {
170
+ async transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T> {
184
171
  const session = this.client.startSession();
185
172
 
186
173
  try {
@@ -200,11 +187,7 @@ export class MongoDBAdapter implements DatabaseAdapter {
200
187
  return await cursor.toArray();
201
188
  }
202
189
 
203
- async createIndex(
204
- collection: string,
205
- index: any,
206
- options?: any,
207
- ): Promise<string> {
190
+ async createIndex(collection: string, index: any, options?: any): Promise<string> {
208
191
  const coll = this.db.collection(collection);
209
192
  return await coll.createIndex(index, options);
210
193
  }
@@ -227,7 +210,7 @@ export class MongoDBAdapter implements DatabaseAdapter {
227
210
  class MongoDBTransaction implements DatabaseTransaction {
228
211
  constructor(
229
212
  private db: any,
230
- private session: any,
213
+ private session: any
231
214
  ) {}
232
215
 
233
216
  async query<T = any>(collection: string, pipeline?: any[]): Promise<T[]> {
@@ -250,10 +233,7 @@ class MongoDBTransaction implements DatabaseTransaction {
250
233
  return await coll.findOne(query || {}, { session: this.session });
251
234
  }
252
235
 
253
- async insert<T = any>(
254
- collection: string,
255
- data: Record<string, any>,
256
- ): Promise<T> {
236
+ async insert<T = any>(collection: string, data: Record<string, any>): Promise<T> {
257
237
  const coll = this.db.collection(collection);
258
238
  const result = await coll.insertOne(data, { session: this.session });
259
239
  return { ...data, _id: result.insertedId } as T;
@@ -262,21 +242,18 @@ class MongoDBTransaction implements DatabaseTransaction {
262
242
  async update<T = any>(
263
243
  collection: string,
264
244
  data: Record<string, any>,
265
- where: Record<string, any>,
245
+ where: Record<string, any>
266
246
  ): Promise<T> {
267
247
  const coll = this.db.collection(collection);
268
248
  const result = await coll.findOneAndUpdate(
269
249
  where,
270
250
  { $set: data },
271
- { returnDocument: "after", session: this.session },
251
+ { returnDocument: 'after', session: this.session }
272
252
  );
273
253
  return result.value as T;
274
254
  }
275
255
 
276
- async delete(
277
- collection: string,
278
- where: Record<string, any>,
279
- ): Promise<number> {
256
+ async delete(collection: string, where: Record<string, any>): Promise<number> {
280
257
  const coll = this.db.collection(collection);
281
258
  const result = await coll.deleteMany(where, { session: this.session });
282
259
  return result.deletedCount || 0;