@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 MySQL 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 MySQLConfig {
6
6
  host?: string;
@@ -13,24 +13,24 @@ interface MySQLConfig {
13
13
 
14
14
  export class MySQLAdapter implements DatabaseAdapter {
15
15
  private pool: any;
16
- private logger = createFrameworkLogger("MySQL");
16
+ private logger = createFrameworkLogger('MySQL');
17
17
 
18
18
  constructor(config: MySQLConfig) {
19
19
  try {
20
- const mysql = require("mysql2/promise");
20
+ const mysql = require('mysql2/promise');
21
21
  this.pool = mysql.createPool({
22
- host: config.host || "localhost",
22
+ host: config.host || 'localhost',
23
23
  port: config.port || 3306,
24
- user: config.user || "root",
25
- password: config.password || "",
26
- database: config.database || "moro_app",
24
+ user: config.user || 'root',
25
+ password: config.password || '',
26
+ database: config.database || 'moro_app',
27
27
  waitForConnections: true,
28
28
  connectionLimit: config.connectionLimit || 10,
29
29
  queueLimit: 0,
30
30
  });
31
31
  } catch (error) {
32
32
  throw new Error(
33
- "mysql2 package is required for MySQL adapter. Install it with: npm install mysql2",
33
+ 'mysql2 package is required for MySQL adapter. Install it with: npm install mysql2'
34
34
  );
35
35
  }
36
36
  }
@@ -39,9 +39,9 @@ export class MySQLAdapter implements DatabaseAdapter {
39
39
  try {
40
40
  const connection = await this.pool.getConnection();
41
41
  connection.release();
42
- this.logger.info("MySQL connection established", "Connection");
42
+ this.logger.info('MySQL connection established', 'Connection');
43
43
  } catch (error) {
44
- this.logger.error("MySQL connection failed", "Connection", {
44
+ this.logger.error('MySQL connection failed', 'Connection', {
45
45
  error: error instanceof Error ? error.message : String(error),
46
46
  });
47
47
  throw error;
@@ -65,16 +65,15 @@ export class MySQLAdapter implements DatabaseAdapter {
65
65
  async insert<T = any>(table: string, data: Record<string, any>): Promise<T> {
66
66
  const keys = Object.keys(data);
67
67
  const values = Object.values(data);
68
- const placeholders = keys.map(() => "?").join(", ");
68
+ const placeholders = keys.map(() => '?').join(', ');
69
69
 
70
- const sql = `INSERT INTO ${table} (${keys.join(", ")}) VALUES (${placeholders})`;
70
+ const sql = `INSERT INTO ${table} (${keys.join(', ')}) VALUES (${placeholders})`;
71
71
  const [result] = (await this.pool.execute(sql, values)) as any;
72
72
 
73
73
  // Return the inserted record
74
- const insertedRecord = await this.queryOne<T>(
75
- `SELECT * FROM ${table} WHERE id = ?`,
76
- [result.insertId],
77
- );
74
+ const insertedRecord = await this.queryOne<T>(`SELECT * FROM ${table} WHERE id = ?`, [
75
+ result.insertId,
76
+ ]);
78
77
 
79
78
  return insertedRecord!;
80
79
  }
@@ -82,14 +81,14 @@ export class MySQLAdapter implements DatabaseAdapter {
82
81
  async update<T = any>(
83
82
  table: string,
84
83
  data: Record<string, any>,
85
- where: Record<string, any>,
84
+ where: Record<string, any>
86
85
  ): Promise<T> {
87
86
  const setClause = Object.keys(data)
88
- .map((key) => `${key} = ?`)
89
- .join(", ");
87
+ .map(key => `${key} = ?`)
88
+ .join(', ');
90
89
  const whereClause = Object.keys(where)
91
- .map((key) => `${key} = ?`)
92
- .join(" AND ");
90
+ .map(key => `${key} = ?`)
91
+ .join(' AND ');
93
92
 
94
93
  const sql = `UPDATE ${table} SET ${setClause} WHERE ${whereClause}`;
95
94
  const params = [...Object.values(data), ...Object.values(where)];
@@ -99,7 +98,7 @@ export class MySQLAdapter implements DatabaseAdapter {
99
98
  // Return the updated record
100
99
  const updatedRecord = await this.queryOne<T>(
101
100
  `SELECT * FROM ${table} WHERE ${whereClause}`,
102
- Object.values(where),
101
+ Object.values(where)
103
102
  );
104
103
 
105
104
  return updatedRecord!;
@@ -107,20 +106,15 @@ export class MySQLAdapter implements DatabaseAdapter {
107
106
 
108
107
  async delete(table: string, where: Record<string, any>): Promise<number> {
109
108
  const whereClause = Object.keys(where)
110
- .map((key) => `${key} = ?`)
111
- .join(" AND ");
109
+ .map(key => `${key} = ?`)
110
+ .join(' AND ');
112
111
  const sql = `DELETE FROM ${table} WHERE ${whereClause}`;
113
112
 
114
- const [result] = (await this.pool.execute(
115
- sql,
116
- Object.values(where),
117
- )) as any;
113
+ const [result] = (await this.pool.execute(sql, Object.values(where))) as any;
118
114
  return result.affectedRows;
119
115
  }
120
116
 
121
- async transaction<T>(
122
- callback: (tx: DatabaseTransaction) => Promise<T>,
123
- ): Promise<T> {
117
+ async transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T> {
124
118
  const connection = await this.pool.getConnection();
125
119
 
126
120
  try {
@@ -156,15 +150,14 @@ class MySQLTransaction implements DatabaseTransaction {
156
150
  async insert<T = any>(table: string, data: Record<string, any>): Promise<T> {
157
151
  const keys = Object.keys(data);
158
152
  const values = Object.values(data);
159
- const placeholders = keys.map(() => "?").join(", ");
153
+ const placeholders = keys.map(() => '?').join(', ');
160
154
 
161
- const sql = `INSERT INTO ${table} (${keys.join(", ")}) VALUES (${placeholders})`;
155
+ const sql = `INSERT INTO ${table} (${keys.join(', ')}) VALUES (${placeholders})`;
162
156
  const [result] = (await this.connection.execute(sql, values)) as any;
163
157
 
164
- const insertedRecord = await this.queryOne<T>(
165
- `SELECT * FROM ${table} WHERE id = ?`,
166
- [result.insertId],
167
- );
158
+ const insertedRecord = await this.queryOne<T>(`SELECT * FROM ${table} WHERE id = ?`, [
159
+ result.insertId,
160
+ ]);
168
161
 
169
162
  return insertedRecord!;
170
163
  }
@@ -172,14 +165,14 @@ class MySQLTransaction implements DatabaseTransaction {
172
165
  async update<T = any>(
173
166
  table: string,
174
167
  data: Record<string, any>,
175
- where: Record<string, any>,
168
+ where: Record<string, any>
176
169
  ): Promise<T> {
177
170
  const setClause = Object.keys(data)
178
- .map((key) => `${key} = ?`)
179
- .join(", ");
171
+ .map(key => `${key} = ?`)
172
+ .join(', ');
180
173
  const whereClause = Object.keys(where)
181
- .map((key) => `${key} = ?`)
182
- .join(" AND ");
174
+ .map(key => `${key} = ?`)
175
+ .join(' AND ');
183
176
 
184
177
  const sql = `UPDATE ${table} SET ${setClause} WHERE ${whereClause}`;
185
178
  const params = [...Object.values(data), ...Object.values(where)];
@@ -188,7 +181,7 @@ class MySQLTransaction implements DatabaseTransaction {
188
181
 
189
182
  const updatedRecord = await this.queryOne<T>(
190
183
  `SELECT * FROM ${table} WHERE ${whereClause}`,
191
- Object.values(where),
184
+ Object.values(where)
192
185
  );
193
186
 
194
187
  return updatedRecord!;
@@ -196,14 +189,11 @@ class MySQLTransaction implements DatabaseTransaction {
196
189
 
197
190
  async delete(table: string, where: Record<string, any>): Promise<number> {
198
191
  const whereClause = Object.keys(where)
199
- .map((key) => `${key} = ?`)
200
- .join(" AND ");
192
+ .map(key => `${key} = ?`)
193
+ .join(' AND ');
201
194
  const sql = `DELETE FROM ${table} WHERE ${whereClause}`;
202
195
 
203
- const [result] = (await this.connection.execute(
204
- sql,
205
- Object.values(where),
206
- )) as any;
196
+ const [result] = (await this.connection.execute(sql, Object.values(where))) as any;
207
197
  return result.affectedRows;
208
198
  }
209
199
 
@@ -1,6 +1,6 @@
1
1
  // Database PostgreSQL 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 PostgreSQLConfig {
6
6
  host?: string;
@@ -14,31 +14,31 @@ interface PostgreSQLConfig {
14
14
 
15
15
  export class PostgreSQLAdapter implements DatabaseAdapter {
16
16
  private pool: any;
17
- private logger = createFrameworkLogger("PostgreSQL");
17
+ private logger = createFrameworkLogger('PostgreSQL');
18
18
 
19
19
  constructor(config: PostgreSQLConfig) {
20
20
  try {
21
- const { Pool } = require("pg");
21
+ const { Pool } = require('pg');
22
22
  this.pool = new Pool({
23
- host: config.host || "localhost",
23
+ host: config.host || 'localhost',
24
24
  port: config.port || 5432,
25
- user: config.user || "postgres",
26
- password: config.password || "",
27
- database: config.database || "moro_app",
25
+ user: config.user || 'postgres',
26
+ password: config.password || '',
27
+ database: config.database || 'moro_app',
28
28
  max: config.connectionLimit || 10,
29
29
  ssl: config.ssl || false,
30
30
  });
31
31
 
32
- this.pool.on("error", (err: Error) => {
33
- this.logger.error("PostgreSQL pool error", "Pool", {
32
+ this.pool.on('error', (err: Error) => {
33
+ this.logger.error('PostgreSQL pool error', 'Pool', {
34
34
  error: err.message,
35
35
  });
36
36
  });
37
37
 
38
- this.logger.info("PostgreSQL adapter initialized", "PostgreSQL");
38
+ this.logger.info('PostgreSQL adapter initialized', 'PostgreSQL');
39
39
  } catch (error) {
40
40
  throw new Error(
41
- "pg package is required for PostgreSQL adapter. Install it with: npm install pg",
41
+ 'pg package is required for PostgreSQL adapter. Install it with: npm install pg'
42
42
  );
43
43
  }
44
44
  }
@@ -47,9 +47,9 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
47
47
  try {
48
48
  const client = await this.pool.connect();
49
49
  client.release();
50
- this.logger.info("PostgreSQL connection established", "Connection");
50
+ this.logger.info('PostgreSQL connection established', 'Connection');
51
51
  } catch (error) {
52
- this.logger.error("PostgreSQL connection failed", "Connection", {
52
+ this.logger.error('PostgreSQL connection failed', 'Connection', {
53
53
  error: error instanceof Error ? error.message : String(error),
54
54
  });
55
55
  throw error;
@@ -73,9 +73,9 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
73
73
  async insert<T = any>(table: string, data: Record<string, any>): Promise<T> {
74
74
  const keys = Object.keys(data);
75
75
  const values = Object.values(data);
76
- const placeholders = keys.map((_, index) => `$${index + 1}`).join(", ");
76
+ const placeholders = keys.map((_, index) => `$${index + 1}`).join(', ');
77
77
 
78
- const sql = `INSERT INTO ${table} (${keys.join(", ")}) VALUES (${placeholders}) RETURNING *`;
78
+ const sql = `INSERT INTO ${table} (${keys.join(', ')}) VALUES (${placeholders}) RETURNING *`;
79
79
  const result = await this.pool.query(sql, values);
80
80
 
81
81
  return result.rows[0] as T;
@@ -84,19 +84,17 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
84
84
  async update<T = any>(
85
85
  table: string,
86
86
  data: Record<string, any>,
87
- where: Record<string, any>,
87
+ where: Record<string, any>
88
88
  ): Promise<T> {
89
89
  const dataKeys = Object.keys(data);
90
90
  const dataValues = Object.values(data);
91
91
  const whereKeys = Object.keys(where);
92
92
  const whereValues = Object.values(where);
93
93
 
94
- const setClause = dataKeys
95
- .map((key, index) => `${key} = $${index + 1}`)
96
- .join(", ");
94
+ const setClause = dataKeys.map((key, index) => `${key} = $${index + 1}`).join(', ');
97
95
  const whereClause = whereKeys
98
96
  .map((key, index) => `${key} = $${dataKeys.length + index + 1}`)
99
- .join(" AND ");
97
+ .join(' AND ');
100
98
 
101
99
  const sql = `UPDATE ${table} SET ${setClause} WHERE ${whereClause} RETURNING *`;
102
100
  const params = [...dataValues, ...whereValues];
@@ -108,9 +106,7 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
108
106
  async delete(table: string, where: Record<string, any>): Promise<number> {
109
107
  const whereKeys = Object.keys(where);
110
108
  const whereValues = Object.values(where);
111
- const whereClause = whereKeys
112
- .map((key, index) => `${key} = $${index + 1}`)
113
- .join(" AND ");
109
+ const whereClause = whereKeys.map((key, index) => `${key} = $${index + 1}`).join(' AND ');
114
110
 
115
111
  const sql = `DELETE FROM ${table} WHERE ${whereClause}`;
116
112
  const result = await this.pool.query(sql, whereValues);
@@ -118,21 +114,19 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
118
114
  return result.rowCount || 0;
119
115
  }
120
116
 
121
- async transaction<T>(
122
- callback: (tx: DatabaseTransaction) => Promise<T>,
123
- ): Promise<T> {
117
+ async transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T> {
124
118
  const client = await this.pool.connect();
125
119
 
126
120
  try {
127
- await client.query("BEGIN");
121
+ await client.query('BEGIN');
128
122
 
129
123
  const transaction = new PostgreSQLTransaction(client);
130
124
  const result = await callback(transaction);
131
125
 
132
- await client.query("COMMIT");
126
+ await client.query('COMMIT');
133
127
  return result;
134
128
  } catch (error) {
135
- await client.query("ROLLBACK");
129
+ await client.query('ROLLBACK');
136
130
  throw error;
137
131
  } finally {
138
132
  client.release();
@@ -156,9 +150,9 @@ class PostgreSQLTransaction implements DatabaseTransaction {
156
150
  async insert<T = any>(table: string, data: Record<string, any>): Promise<T> {
157
151
  const keys = Object.keys(data);
158
152
  const values = Object.values(data);
159
- const placeholders = keys.map((_, index) => `$${index + 1}`).join(", ");
153
+ const placeholders = keys.map((_, index) => `$${index + 1}`).join(', ');
160
154
 
161
- const sql = `INSERT INTO ${table} (${keys.join(", ")}) VALUES (${placeholders}) RETURNING *`;
155
+ const sql = `INSERT INTO ${table} (${keys.join(', ')}) VALUES (${placeholders}) RETURNING *`;
162
156
  const result = await this.client.query(sql, values);
163
157
 
164
158
  return result.rows[0] as T;
@@ -167,19 +161,17 @@ class PostgreSQLTransaction implements DatabaseTransaction {
167
161
  async update<T = any>(
168
162
  table: string,
169
163
  data: Record<string, any>,
170
- where: Record<string, any>,
164
+ where: Record<string, any>
171
165
  ): Promise<T> {
172
166
  const dataKeys = Object.keys(data);
173
167
  const dataValues = Object.values(data);
174
168
  const whereKeys = Object.keys(where);
175
169
  const whereValues = Object.values(where);
176
170
 
177
- const setClause = dataKeys
178
- .map((key, index) => `${key} = $${index + 1}`)
179
- .join(", ");
171
+ const setClause = dataKeys.map((key, index) => `${key} = $${index + 1}`).join(', ');
180
172
  const whereClause = whereKeys
181
173
  .map((key, index) => `${key} = $${dataKeys.length + index + 1}`)
182
- .join(" AND ");
174
+ .join(' AND ');
183
175
 
184
176
  const sql = `UPDATE ${table} SET ${setClause} WHERE ${whereClause} RETURNING *`;
185
177
  const params = [...dataValues, ...whereValues];
@@ -191,9 +183,7 @@ class PostgreSQLTransaction implements DatabaseTransaction {
191
183
  async delete(table: string, where: Record<string, any>): Promise<number> {
192
184
  const whereKeys = Object.keys(where);
193
185
  const whereValues = Object.values(where);
194
- const whereClause = whereKeys
195
- .map((key, index) => `${key} = $${index + 1}`)
196
- .join(" AND ");
186
+ const whereClause = whereKeys.map((key, index) => `${key} = $${index + 1}`).join(' AND ');
197
187
 
198
188
  const sql = `DELETE FROM ${table} WHERE ${whereClause}`;
199
189
  const result = await this.client.query(sql, whereValues);
@@ -202,10 +192,10 @@ class PostgreSQLTransaction implements DatabaseTransaction {
202
192
  }
203
193
 
204
194
  async commit(): Promise<void> {
205
- await this.client.query("COMMIT");
195
+ await this.client.query('COMMIT');
206
196
  }
207
197
 
208
198
  async rollback(): Promise<void> {
209
- await this.client.query("ROLLBACK");
199
+ await this.client.query('ROLLBACK');
210
200
  }
211
201
  }
@@ -1,6 +1,6 @@
1
1
  // Database Redis 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 RedisConfig {
6
6
  host?: string;
@@ -20,13 +20,13 @@ interface RedisConfig {
20
20
 
21
21
  export class RedisAdapter implements DatabaseAdapter {
22
22
  private client: any;
23
- private logger = createFrameworkLogger("Redis");
23
+ private logger = createFrameworkLogger('Redis');
24
24
  private keyPrefix: string;
25
25
 
26
26
  constructor(config: RedisConfig = {}) {
27
27
  try {
28
- const Redis = require("ioredis");
29
- this.keyPrefix = config.keyPrefix || "moro:";
28
+ const Redis = require('ioredis');
29
+ this.keyPrefix = config.keyPrefix || 'moro:';
30
30
 
31
31
  if (config.cluster) {
32
32
  // Redis Cluster
@@ -37,7 +37,7 @@ export class RedisAdapter implements DatabaseAdapter {
37
37
  } else {
38
38
  // Single Redis instance
39
39
  this.client = new Redis({
40
- host: config.host || "localhost",
40
+ host: config.host || 'localhost',
41
41
  port: config.port || 6379,
42
42
  password: config.password,
43
43
  db: config.db || 0,
@@ -47,24 +47,24 @@ export class RedisAdapter implements DatabaseAdapter {
47
47
  });
48
48
  }
49
49
 
50
- this.client.on("error", (err: Error) => {
51
- this.logger.error("Redis client error", "Redis", {
50
+ this.client.on('error', (err: Error) => {
51
+ this.logger.error('Redis client error', 'Redis', {
52
52
  error: err.message,
53
53
  });
54
54
  });
55
55
 
56
- this.client.on("connect", () => {
57
- this.logger.info("Redis connected", "Connection");
56
+ this.client.on('connect', () => {
57
+ this.logger.info('Redis connected', 'Connection');
58
58
  });
59
59
 
60
- this.client.on("disconnect", () => {
61
- this.logger.warn("Redis disconnected", "Connection");
60
+ this.client.on('disconnect', () => {
61
+ this.logger.warn('Redis disconnected', 'Connection');
62
62
  });
63
63
 
64
- this.logger.info("Redis adapter initialized", "Redis");
64
+ this.logger.info('Redis adapter initialized', 'Redis');
65
65
  } catch (error) {
66
66
  throw new Error(
67
- "ioredis package is required for Redis adapter. Install it with: npm install ioredis",
67
+ 'ioredis package is required for Redis adapter. Install it with: npm install ioredis'
68
68
  );
69
69
  }
70
70
  }
@@ -76,9 +76,9 @@ export class RedisAdapter implements DatabaseAdapter {
76
76
  async connect(): Promise<void> {
77
77
  try {
78
78
  await this.client.ping();
79
- this.logger.info("Redis connection established", "Connection");
79
+ this.logger.info('Redis connection established', 'Connection');
80
80
  } catch (error) {
81
- this.logger.error("Redis connection failed", "Connection", {
81
+ this.logger.error('Redis connection failed', 'Connection', {
82
82
  error: error instanceof Error ? error.message : String(error),
83
83
  });
84
84
  throw error;
@@ -97,11 +97,11 @@ export class RedisAdapter implements DatabaseAdapter {
97
97
 
98
98
  const values = await this.client.mget(keys);
99
99
  return values.map((value: string, index: number) => ({
100
- key: keys[index].replace(this.keyPrefix, ""),
100
+ key: keys[index].replace(this.keyPrefix, ''),
101
101
  value: value ? JSON.parse(value) : null,
102
102
  }));
103
103
  } catch (error) {
104
- this.logger.error("Redis query failed", "Query", {
104
+ this.logger.error('Redis query failed', 'Query', {
105
105
  pattern,
106
106
  error: error instanceof Error ? error.message : String(error),
107
107
  });
@@ -114,7 +114,7 @@ export class RedisAdapter implements DatabaseAdapter {
114
114
  const value = await this.client.get(this.prefixKey(key));
115
115
  return value ? JSON.parse(value) : null;
116
116
  } catch (error) {
117
- this.logger.error("Redis queryOne failed", "Query", {
117
+ this.logger.error('Redis queryOne failed', 'Query', {
118
118
  key,
119
119
  error: error instanceof Error ? error.message : String(error),
120
120
  });
@@ -128,7 +128,7 @@ export class RedisAdapter implements DatabaseAdapter {
128
128
  await this.client.set(this.prefixKey(key), value);
129
129
  return data as T;
130
130
  } catch (error) {
131
- this.logger.error("Redis insert failed", "Insert", {
131
+ this.logger.error('Redis insert failed', 'Insert', {
132
132
  key,
133
133
  error: error instanceof Error ? error.message : String(error),
134
134
  });
@@ -139,7 +139,7 @@ export class RedisAdapter implements DatabaseAdapter {
139
139
  async update<T = any>(
140
140
  key: string,
141
141
  data: Record<string, any>,
142
- _where?: Record<string, any>,
142
+ _where?: Record<string, any>
143
143
  ): Promise<T> {
144
144
  try {
145
145
  // For Redis, we'll merge with existing data if it exists
@@ -149,7 +149,7 @@ export class RedisAdapter implements DatabaseAdapter {
149
149
  await this.client.set(this.prefixKey(key), value);
150
150
  return merged as T;
151
151
  } catch (error) {
152
- this.logger.error("Redis update failed", "Update", {
152
+ this.logger.error('Redis update failed', 'Update', {
153
153
  key,
154
154
  error: error instanceof Error ? error.message : String(error),
155
155
  });
@@ -165,7 +165,7 @@ export class RedisAdapter implements DatabaseAdapter {
165
165
  const deletedCount = await this.client.del(...keys);
166
166
  return deletedCount;
167
167
  } catch (error) {
168
- this.logger.error("Redis delete failed", "Delete", {
168
+ this.logger.error('Redis delete failed', 'Delete', {
169
169
  pattern,
170
170
  error: error instanceof Error ? error.message : String(error),
171
171
  });
@@ -173,9 +173,7 @@ export class RedisAdapter implements DatabaseAdapter {
173
173
  }
174
174
  }
175
175
 
176
- async transaction<T>(
177
- callback: (tx: DatabaseTransaction) => Promise<T>,
178
- ): Promise<T> {
176
+ async transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T> {
179
177
  const multi = this.client.multi();
180
178
  const transaction = new RedisTransaction(multi, this.keyPrefix);
181
179
 
@@ -242,7 +240,7 @@ export class RedisAdapter implements DatabaseAdapter {
242
240
  }
243
241
 
244
242
  async lpush(list: string, ...values: any[]): Promise<number> {
245
- const serialized = values.map((v) => JSON.stringify(v));
243
+ const serialized = values.map(v => JSON.stringify(v));
246
244
  return await this.client.lpush(this.prefixKey(list), ...serialized);
247
245
  }
248
246
 
@@ -260,13 +258,10 @@ export class RedisAdapter implements DatabaseAdapter {
260
258
  return await this.client.publish(channel, JSON.stringify(message));
261
259
  }
262
260
 
263
- async subscribe(
264
- channel: string,
265
- callback: (message: any) => void,
266
- ): Promise<void> {
261
+ async subscribe(channel: string, callback: (message: any) => void): Promise<void> {
267
262
  const subscriber = this.client.duplicate();
268
263
  subscriber.subscribe(channel);
269
- subscriber.on("message", (_channel: string, message: string) => {
264
+ subscriber.on('message', (_channel: string, message: string) => {
270
265
  callback(JSON.parse(message));
271
266
  });
272
267
  }
@@ -279,7 +274,7 @@ export class RedisAdapter implements DatabaseAdapter {
279
274
  class RedisTransaction implements DatabaseTransaction {
280
275
  constructor(
281
276
  private multi: any,
282
- private keyPrefix: string,
277
+ private keyPrefix: string
283
278
  ) {}
284
279
 
285
280
  private prefixKey(key: string): string {
@@ -290,13 +285,13 @@ class RedisTransaction implements DatabaseTransaction {
290
285
  // Note: Redis transactions can't perform read operations during MULTI
291
286
  // This is a limitation of Redis transactions
292
287
  throw new Error(
293
- "Redis transactions cannot perform read operations. Use regular operations instead.",
288
+ 'Redis transactions cannot perform read operations. Use regular operations instead.'
294
289
  );
295
290
  }
296
291
 
297
292
  async queryOne<T = any>(_key: string, _params?: any[]): Promise<T | null> {
298
293
  throw new Error(
299
- "Redis transactions cannot perform read operations. Use regular operations instead.",
294
+ 'Redis transactions cannot perform read operations. Use regular operations instead.'
300
295
  );
301
296
  }
302
297
 
@@ -309,7 +304,7 @@ class RedisTransaction implements DatabaseTransaction {
309
304
  async update<T = any>(
310
305
  key: string,
311
306
  data: Record<string, any>,
312
- _where?: Record<string, any>,
307
+ _where?: Record<string, any>
313
308
  ): Promise<T> {
314
309
  const value = JSON.stringify(data);
315
310
  this.multi.set(this.prefixKey(key), value);