exisjs 0.7.3 → 0.7.5

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 (162) hide show
  1. package/dist/cli/commands/build.d.ts +4 -2
  2. package/dist/cli/commands/build.d.ts.map +1 -1
  3. package/dist/cli/commands/build.js +80 -22
  4. package/dist/cli/commands/build.js.map +1 -1
  5. package/dist/cli/commands/dev.d.ts.map +1 -1
  6. package/dist/cli/commands/dev.js +121 -27
  7. package/dist/cli/commands/dev.js.map +1 -1
  8. package/dist/cli/commands/doctor.d.ts.map +1 -1
  9. package/dist/cli/commands/doctor.js +5 -2
  10. package/dist/cli/commands/doctor.js.map +1 -1
  11. package/dist/cli/commands/generate.d.ts +5 -0
  12. package/dist/cli/commands/generate.d.ts.map +1 -1
  13. package/dist/cli/commands/generate.js +252 -14
  14. package/dist/cli/commands/generate.js.map +1 -1
  15. package/dist/cli/commands/start.d.ts.map +1 -1
  16. package/dist/cli/commands/start.js +17 -5
  17. package/dist/cli/commands/start.js.map +1 -1
  18. package/dist/cli/index.js +16 -5
  19. package/dist/cli/index.js.map +1 -1
  20. package/dist/cli/manifest.d.ts.map +1 -1
  21. package/dist/cli/manifest.js +12 -4
  22. package/dist/cli/manifest.js.map +1 -1
  23. package/dist/config/config.js +1 -1
  24. package/dist/config/config.js.map +1 -1
  25. package/dist/config/env.d.ts.map +1 -1
  26. package/dist/config/env.js +8 -0
  27. package/dist/config/env.js.map +1 -1
  28. package/dist/database/index.d.ts +4 -0
  29. package/dist/database/index.d.ts.map +1 -0
  30. package/dist/database/index.js +20 -0
  31. package/dist/database/index.js.map +1 -0
  32. package/dist/database/lifecycle.d.ts +52 -0
  33. package/dist/database/lifecycle.d.ts.map +1 -0
  34. package/dist/database/lifecycle.js +122 -0
  35. package/dist/database/lifecycle.js.map +1 -0
  36. package/dist/database/mongoose.d.ts +47 -0
  37. package/dist/database/mongoose.d.ts.map +1 -0
  38. package/dist/database/mongoose.js +44 -0
  39. package/dist/database/mongoose.js.map +1 -0
  40. package/dist/database/transaction.d.ts +39 -0
  41. package/dist/database/transaction.d.ts.map +1 -0
  42. package/dist/database/transaction.js +99 -0
  43. package/dist/database/transaction.js.map +1 -0
  44. package/dist/decorators/constants.d.ts +2 -0
  45. package/dist/decorators/constants.d.ts.map +1 -1
  46. package/dist/decorators/index.d.ts +1 -0
  47. package/dist/decorators/index.d.ts.map +1 -1
  48. package/dist/decorators/index.js +1 -0
  49. package/dist/decorators/index.js.map +1 -1
  50. package/dist/decorators/middleware.d.ts +10 -0
  51. package/dist/decorators/middleware.d.ts.map +1 -1
  52. package/dist/decorators/middleware.js +27 -0
  53. package/dist/decorators/middleware.js.map +1 -1
  54. package/dist/decorators/upload.d.ts +37 -0
  55. package/dist/decorators/upload.d.ts.map +1 -0
  56. package/dist/decorators/upload.js +78 -0
  57. package/dist/decorators/upload.js.map +1 -0
  58. package/dist/docs/content/boundaries.mdx +33 -3
  59. package/dist/docs/content/cli/commands.mdx +4 -3
  60. package/dist/docs/content/config.mdx +27 -1
  61. package/dist/docs/content/errors.mdx +81 -11
  62. package/dist/docs/content/middleware.mdx +138 -0
  63. package/dist/docs/content/providers.mdx +89 -0
  64. package/dist/docs/content/requests.mdx +191 -69
  65. package/dist/docs/content/responses.mdx +99 -6
  66. package/dist/docs/content/routing.mdx +117 -0
  67. package/dist/docs/content/security.mdx +17 -4
  68. package/dist/docs/content/structure.mdx +91 -12
  69. package/dist/docs/content/validation.mdx +131 -10
  70. package/dist/docs/reference/database.mdx +152 -0
  71. package/dist/docs/reference/decorators.mdx +4 -0
  72. package/dist/docs/reference/error.mdx +3 -1
  73. package/dist/docs/reference/middleware.mdx +84 -2
  74. package/dist/docs/reference/router.mdx +4 -2
  75. package/dist/docs/reference/validator.mdx +43 -5
  76. package/dist/error/errors.d.ts +10 -0
  77. package/dist/error/errors.d.ts.map +1 -1
  78. package/dist/error/errors.js +156 -25
  79. package/dist/error/errors.js.map +1 -1
  80. package/dist/error/index.d.ts +1 -1
  81. package/dist/error/index.d.ts.map +1 -1
  82. package/dist/error/index.js +3 -1
  83. package/dist/error/index.js.map +1 -1
  84. package/dist/lib/start-server.js +16 -0
  85. package/dist/lib/start-server.js.map +1 -1
  86. package/dist/middleware/index.d.ts +2 -0
  87. package/dist/middleware/index.d.ts.map +1 -0
  88. package/dist/middleware/index.js +18 -0
  89. package/dist/middleware/index.js.map +1 -0
  90. package/dist/middleware/middleware.d.ts +13 -0
  91. package/dist/middleware/middleware.d.ts.map +1 -1
  92. package/dist/middleware/middleware.js +22 -2
  93. package/dist/middleware/middleware.js.map +1 -1
  94. package/dist/middleware/rate-limit.d.ts.map +1 -1
  95. package/dist/middleware/rate-limit.js +9 -0
  96. package/dist/middleware/rate-limit.js.map +1 -1
  97. package/dist/middleware/security.d.ts +13 -3
  98. package/dist/middleware/security.d.ts.map +1 -1
  99. package/dist/middleware/security.js +98 -14
  100. package/dist/middleware/security.js.map +1 -1
  101. package/dist/middleware/upload.d.ts +82 -0
  102. package/dist/middleware/upload.d.ts.map +1 -0
  103. package/dist/middleware/upload.js +387 -0
  104. package/dist/middleware/upload.js.map +1 -0
  105. package/dist/router/boundary.d.ts +12 -0
  106. package/dist/router/boundary.d.ts.map +1 -1
  107. package/dist/router/boundary.js.map +1 -1
  108. package/dist/router/index.d.ts +3 -1
  109. package/dist/router/index.d.ts.map +1 -1
  110. package/dist/router/index.js +6 -1
  111. package/dist/router/index.js.map +1 -1
  112. package/dist/router/route-builder.d.ts +11 -2
  113. package/dist/router/route-builder.d.ts.map +1 -1
  114. package/dist/router/route-builder.js.map +1 -1
  115. package/dist/router/route-scanner.d.ts +1 -0
  116. package/dist/router/route-scanner.d.ts.map +1 -1
  117. package/dist/router/route-scanner.js +219 -8
  118. package/dist/router/route-scanner.js.map +1 -1
  119. package/dist/router/router.d.ts.map +1 -1
  120. package/dist/router/router.js +58 -2
  121. package/dist/router/router.js.map +1 -1
  122. package/dist/router/types.d.ts +33 -1
  123. package/dist/router/types.d.ts.map +1 -1
  124. package/dist/sanitize/index.d.ts +6 -6
  125. package/dist/sanitize/index.d.ts.map +1 -1
  126. package/dist/sanitize/index.js +8 -8
  127. package/dist/sanitize/index.js.map +1 -1
  128. package/dist/server/app.d.ts +1 -0
  129. package/dist/server/app.d.ts.map +1 -1
  130. package/dist/server/app.js +4 -0
  131. package/dist/server/app.js.map +1 -1
  132. package/dist/server/engines/node-engine.d.ts.map +1 -1
  133. package/dist/server/engines/node-engine.js +1 -0
  134. package/dist/server/engines/node-engine.js.map +1 -1
  135. package/dist/server/request-handler.d.ts.map +1 -1
  136. package/dist/server/request-handler.js +15 -1
  137. package/dist/server/request-handler.js.map +1 -1
  138. package/dist/server/request.d.ts +11 -0
  139. package/dist/server/request.d.ts.map +1 -1
  140. package/dist/server/request.js +125 -36
  141. package/dist/server/request.js.map +1 -1
  142. package/dist/server/response.d.ts +3 -1
  143. package/dist/server/response.d.ts.map +1 -1
  144. package/dist/server/response.js +98 -10
  145. package/dist/server/response.js.map +1 -1
  146. package/dist/testing/mocks.d.ts +3 -1
  147. package/dist/testing/mocks.d.ts.map +1 -1
  148. package/dist/testing/mocks.js +7 -1
  149. package/dist/testing/mocks.js.map +1 -1
  150. package/dist/validator/index.d.ts +1 -1
  151. package/dist/validator/index.d.ts.map +1 -1
  152. package/dist/validator/index.js +3 -1
  153. package/dist/validator/index.js.map +1 -1
  154. package/dist/validator/tex-types.d.ts +5 -1
  155. package/dist/validator/tex-types.d.ts.map +1 -1
  156. package/dist/validator/tex-types.js +4 -0
  157. package/dist/validator/tex-types.js.map +1 -1
  158. package/dist/validator/tex.d.ts +45 -7
  159. package/dist/validator/tex.d.ts.map +1 -1
  160. package/dist/validator/tex.js +341 -20
  161. package/dist/validator/tex.js.map +1 -1
  162. package/package.json +12 -8
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;AACpD,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;CACT,EAAE,CAAA;AAEH,eAAO,IAAI,UAAU,EAAE,GAAG,GAAG,SAAqB,CAAA;AAmBlD,wBAAgB,UAAU,CACxB,cAAc,EAAE,cAAc,EAC9B,GAAG,CAAC,EAAE,MAAM,EACZ,WAAW,UAAQ,SAwCpB;AACD,wBAAgB,QAAQ,SAIvB;AACD;;;;GAIG;AAEH,wBAAgB,OAAO,CACrB,GAAG,GAAE,MAAsB,EAC3B,IAAI,CAAC,EAAE,MAAM,EACb,WAAW,UAAQ,GAClB;IACD,WAAW,EAAE,GAAG,CAAA;IAChB,SAAS,EAAE,GAAG,GAAG,SAAS,CAAA;IAC1B,cAAc,EAAE,cAAc,CAAA;CAC/B,CA8CA;AACD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE5D"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;AACpD,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,GAAG,CAAA;CACT,EAAE,CAAA;AAEH,eAAO,IAAI,UAAU,EAAE,GAAG,GAAG,SAAqB,CAAA;AAsBlD,wBAAgB,UAAU,CACxB,cAAc,EAAE,cAAc,EAC9B,GAAG,CAAC,EAAE,MAAM,EACZ,WAAW,UAAQ,SA4CpB;AACD,wBAAgB,QAAQ,SAIvB;AACD;;;;GAIG;AAEH,wBAAgB,OAAO,CACrB,GAAG,GAAE,MAAsB,EAC3B,IAAI,CAAC,EAAE,MAAM,EACb,WAAW,UAAQ,GAClB;IACD,WAAW,EAAE,GAAG,CAAA;IAChB,SAAS,EAAE,GAAG,GAAG,SAAS,CAAA;IAC1B,cAAc,EAAE,cAAc,CAAA;CAC/B,CAgDA;AACD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE5D"}
@@ -50,6 +50,9 @@ let cachedLoadedEnvFiles = [];
50
50
  let _previousLoadedEnvFiles = [];
51
51
  function replaceProcessEnv(sourceEnv) {
52
52
  Object.keys(process.env).forEach((key) => {
53
+ if (key.startsWith('__EXIS_') || key.startsWith('EXIS_')) {
54
+ return;
55
+ }
53
56
  if (sourceEnv[key] === undefined || sourceEnv[key] === '') {
54
57
  delete process.env[key];
55
58
  }
@@ -61,6 +64,9 @@ function replaceProcessEnv(sourceEnv) {
61
64
  });
62
65
  }
63
66
  function processEnv(loadedEnvFiles, dir, forceReload = false) {
67
+ if (forceReload) {
68
+ delete process.env.__EXIS_PROCESSED_ENV;
69
+ }
64
70
  if (!exports.initialEnv) {
65
71
  exports.initialEnv = Object.assign({}, process.env);
66
72
  }
@@ -117,6 +123,8 @@ function loadEnv(dir = process.cwd(), mode, forceReload = false) {
117
123
  currentMode !== 'test' && `.env.local`,
118
124
  `.env.${currentMode}`,
119
125
  '.env',
126
+ currentMode === 'production' && '.env.development.local',
127
+ currentMode === 'production' && '.env.development',
120
128
  ].filter(Boolean);
121
129
  for (const envFile of dotenvFiles) {
122
130
  const dotEnvPath = path.join(dir, envFile);
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './lifecycle';
2
+ export * from './transaction';
3
+ export * from './mongoose';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./lifecycle"), exports);
18
+ __exportStar(require("./transaction"), exports);
19
+ __exportStar(require("./mongoose"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,gDAA6B;AAC7B,6CAA0B"}
@@ -0,0 +1,52 @@
1
+ export type DatabaseHealthStatus = 'connected' | 'connecting' | 'disconnected' | 'error';
2
+ export interface DatabaseHealthInfo {
3
+ name: string;
4
+ status: DatabaseHealthStatus;
5
+ latencyMs?: number;
6
+ error?: string;
7
+ details?: Record<string, any>;
8
+ }
9
+ export interface DatabaseRegistration {
10
+ name: string;
11
+ connect: () => Promise<void> | void;
12
+ disconnect: () => Promise<void> | void;
13
+ isHealthy?: () => Promise<boolean | DatabaseHealthInfo> | boolean | DatabaseHealthInfo;
14
+ }
15
+ /**
16
+ * Universal Database Manager for ExisJS.
17
+ * Manages connections, graceful shutdown, and health checks for any database
18
+ * (Mongoose, Prisma, Drizzle, PostgreSQL, MySQL, SQLite, Redis).
19
+ */
20
+ export declare class DatabaseManager {
21
+ private static databases;
22
+ private static isShutdownHookRegistered;
23
+ /**
24
+ * Registers a database connection lifecycle with the framework.
25
+ */
26
+ static register(db: DatabaseRegistration): void;
27
+ /**
28
+ * Connects all registered databases.
29
+ */
30
+ static connectAll(): Promise<void>;
31
+ /**
32
+ * Disconnects all registered databases gracefully.
33
+ */
34
+ static disconnectAll(): Promise<void>;
35
+ /**
36
+ * Checks the health of all registered databases.
37
+ */
38
+ static checkHealth(): Promise<{
39
+ healthy: boolean;
40
+ databases: Record<string, DatabaseHealthInfo>;
41
+ }>;
42
+ /**
43
+ * Clears registered databases (useful for testing).
44
+ */
45
+ static clear(): void;
46
+ private static ensureShutdownHooks;
47
+ }
48
+ /**
49
+ * Convenience helper to register database lifecycle hooks.
50
+ */
51
+ export declare function registerDatabase(db: DatabaseRegistration): void;
52
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/database/lifecycle.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAC9B,WAAW,GAAG,YAAY,GAAG,cAAc,GAAG,OAAO,CAAA;AAEvD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,oBAAoB,CAAA;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACnC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACtC,SAAS,CAAC,EAAE,MACV,OAAO,CAAC,OAAO,GAAG,kBAAkB,CAAC,GAAG,OAAO,GAAG,kBAAkB,CAAA;CACvE;AAED;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,SAAS,CAA0C;IAClE,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAAQ;IAE/C;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,oBAAoB,GAAG,IAAI;IAK/C;;OAEG;WACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAaxC;;OAEG;WACU,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB3C;;OAEG;WACU,WAAW,IAAI,OAAO,CAAC;QAClC,OAAO,EAAE,OAAO,CAAA;QAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;KAC9C,CAAC;IA+CF;;OAEG;IACH,MAAM,CAAC,KAAK,IAAI,IAAI;IAIpB,OAAO,CAAC,MAAM,CAAC,mBAAmB;CAanC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,oBAAoB,GAAG,IAAI,CAE/D"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DatabaseManager = void 0;
4
+ exports.registerDatabase = registerDatabase;
5
+ /**
6
+ * Universal Database Manager for ExisJS.
7
+ * Manages connections, graceful shutdown, and health checks for any database
8
+ * (Mongoose, Prisma, Drizzle, PostgreSQL, MySQL, SQLite, Redis).
9
+ */
10
+ class DatabaseManager {
11
+ /**
12
+ * Registers a database connection lifecycle with the framework.
13
+ */
14
+ static register(db) {
15
+ this.databases.set(db.name, db);
16
+ this.ensureShutdownHooks();
17
+ }
18
+ /**
19
+ * Connects all registered databases.
20
+ */
21
+ static async connectAll() {
22
+ for (const [name, db] of this.databases) {
23
+ try {
24
+ await db.connect();
25
+ }
26
+ catch (err) {
27
+ throw new Error(`[ExisJS Database] Failed to connect database "${name}": ${err.message}`, { cause: err });
28
+ }
29
+ }
30
+ }
31
+ /**
32
+ * Disconnects all registered databases gracefully.
33
+ */
34
+ static async disconnectAll() {
35
+ const disconnectPromises = Array.from(this.databases.values()).map(async (db) => {
36
+ try {
37
+ await db.disconnect();
38
+ }
39
+ catch (err) {
40
+ console.error(`[ExisJS Database] Error disconnecting "${db.name}":`, err);
41
+ }
42
+ });
43
+ await Promise.allSettled(disconnectPromises);
44
+ }
45
+ /**
46
+ * Checks the health of all registered databases.
47
+ */
48
+ static async checkHealth() {
49
+ const results = {};
50
+ let allHealthy = true;
51
+ for (const [name, db] of this.databases) {
52
+ const start = Date.now();
53
+ try {
54
+ if (!db.isHealthy) {
55
+ results[name] = { name, status: 'connected', latencyMs: 0 };
56
+ continue;
57
+ }
58
+ const healthRes = await db.isHealthy();
59
+ const latencyMs = Date.now() - start;
60
+ if (typeof healthRes === 'boolean') {
61
+ results[name] = {
62
+ name,
63
+ status: healthRes ? 'connected' : 'disconnected',
64
+ latencyMs,
65
+ };
66
+ if (!healthRes)
67
+ allHealthy = false;
68
+ }
69
+ else {
70
+ results[name] = {
71
+ latencyMs,
72
+ ...healthRes,
73
+ name: healthRes.name || name,
74
+ };
75
+ if (healthRes.status !== 'connected')
76
+ allHealthy = false;
77
+ }
78
+ }
79
+ catch (err) {
80
+ allHealthy = false;
81
+ results[name] = {
82
+ name,
83
+ status: 'error',
84
+ latencyMs: Date.now() - start,
85
+ error: err.message,
86
+ };
87
+ }
88
+ }
89
+ return {
90
+ healthy: allHealthy,
91
+ databases: results,
92
+ };
93
+ }
94
+ /**
95
+ * Clears registered databases (useful for testing).
96
+ */
97
+ static clear() {
98
+ this.databases.clear();
99
+ }
100
+ static ensureShutdownHooks() {
101
+ if (this.isShutdownHookRegistered)
102
+ return;
103
+ this.isShutdownHookRegistered = true;
104
+ const shutdownHandler = async () => {
105
+ await DatabaseManager.disconnectAll();
106
+ };
107
+ if (typeof process !== 'undefined' && typeof process.on === 'function') {
108
+ process.once('SIGINT', shutdownHandler);
109
+ process.once('SIGTERM', shutdownHandler);
110
+ }
111
+ }
112
+ }
113
+ exports.DatabaseManager = DatabaseManager;
114
+ DatabaseManager.databases = new Map();
115
+ DatabaseManager.isShutdownHookRegistered = false;
116
+ /**
117
+ * Convenience helper to register database lifecycle hooks.
118
+ */
119
+ function registerDatabase(db) {
120
+ DatabaseManager.register(db);
121
+ }
122
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/database/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Options for findOneAndUpdate / findByIdAndUpdate in modern Mongoose (8 & 9).
3
+ */
4
+ export interface ModernUpdateOptions {
5
+ upsert?: boolean;
6
+ returnDocument?: 'before' | 'after';
7
+ /** Legacy option mapped to returnDocument: 'after' */
8
+ new?: boolean;
9
+ lean?: boolean;
10
+ runValidators?: boolean;
11
+ session?: any;
12
+ select?: any;
13
+ populate?: any;
14
+ sort?: any;
15
+ [key: string]: any;
16
+ }
17
+ /**
18
+ * Normalizes findOneAndUpdate / findByIdAndUpdate options for modern Mongoose.
19
+ * Automatically maps legacy `{ new: true }` to `{ returnDocument: 'after' }`
20
+ * to prevent deprecation warnings in Mongoose 9 while preserving backward compatibility.
21
+ *
22
+ * Example:
23
+ * ```ts
24
+ * const user = await User.findOneAndUpdate(
25
+ * { email },
26
+ * { $set: { lastLogin: new Date() } },
27
+ * modernUpdateOptions({ upsert: true, new: true })
28
+ * )
29
+ * ```
30
+ */
31
+ export declare function modernUpdateOptions<T extends ModernUpdateOptions>(options?: T): T & {
32
+ returnDocument?: 'before' | 'after';
33
+ };
34
+ export interface MongoPoolConfig {
35
+ maxPoolSize?: number;
36
+ minPoolSize?: number;
37
+ serverSelectionTimeoutMS?: number;
38
+ socketTimeoutMS?: number;
39
+ heartbeatFrequencyMS?: number;
40
+ autoIndex?: boolean;
41
+ }
42
+ /**
43
+ * Generates recommended, production-hardened connection pool options
44
+ * for MongoDB / Mongoose in cloud environments (Atlas, AWS, GCP, Azure).
45
+ */
46
+ export declare function mongoPoolOptions(overrides?: MongoPoolConfig): MongoPoolConfig;
47
+ //# sourceMappingURL=mongoose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoose.d.ts","sourceRoot":"","sources":["../../src/database/mongoose.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,cAAc,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;IACnC,sDAAsD;IACtD,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,OAAO,CAAC,EAAE,GAAG,CAAA;IACb,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,QAAQ,CAAC,EAAE,GAAG,CAAA;IACd,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,mBAAmB,EAC/D,OAAO,GAAE,CAAW,GACnB,CAAC,GAAG;IAAE,cAAc,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;CAAE,CAU7C;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,GAAE,eAAoB,GAC9B,eAAe,CAUjB"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.modernUpdateOptions = modernUpdateOptions;
4
+ exports.mongoPoolOptions = mongoPoolOptions;
5
+ /**
6
+ * Normalizes findOneAndUpdate / findByIdAndUpdate options for modern Mongoose.
7
+ * Automatically maps legacy `{ new: true }` to `{ returnDocument: 'after' }`
8
+ * to prevent deprecation warnings in Mongoose 9 while preserving backward compatibility.
9
+ *
10
+ * Example:
11
+ * ```ts
12
+ * const user = await User.findOneAndUpdate(
13
+ * { email },
14
+ * { $set: { lastLogin: new Date() } },
15
+ * modernUpdateOptions({ upsert: true, new: true })
16
+ * )
17
+ * ```
18
+ */
19
+ function modernUpdateOptions(options = {}) {
20
+ const normalized = { ...options };
21
+ if (normalized.new === true && !normalized.returnDocument) {
22
+ normalized.returnDocument = 'after';
23
+ }
24
+ else if (normalized.new === false && !normalized.returnDocument) {
25
+ normalized.returnDocument = 'before';
26
+ }
27
+ return normalized;
28
+ }
29
+ /**
30
+ * Generates recommended, production-hardened connection pool options
31
+ * for MongoDB / Mongoose in cloud environments (Atlas, AWS, GCP, Azure).
32
+ */
33
+ function mongoPoolOptions(overrides = {}) {
34
+ return {
35
+ maxPoolSize: 10,
36
+ minPoolSize: 2,
37
+ serverSelectionTimeoutMS: 5000,
38
+ socketTimeoutMS: 45000,
39
+ heartbeatFrequencyMS: 10000,
40
+ autoIndex: process.env.NODE_ENV !== 'production',
41
+ ...overrides,
42
+ };
43
+ }
44
+ //# sourceMappingURL=mongoose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoose.js","sourceRoot":"","sources":["../../src/database/mongoose.ts"],"names":[],"mappings":";;AA+BA,kDAYC;AAeD,4CAYC;AArDD;;;;;;;;;;;;;GAaG;AACH,SAAgB,mBAAmB,CACjC,UAAa,EAAO;IAEpB,MAAM,UAAU,GAAQ,EAAE,GAAG,OAAO,EAAE,CAAA;IAEtC,IAAI,UAAU,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;QAC1D,UAAU,CAAC,cAAc,GAAG,OAAO,CAAA;IACrC,CAAC;SAAM,IAAI,UAAU,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;QAClE,UAAU,CAAC,cAAc,GAAG,QAAQ,CAAA;IACtC,CAAC;IAED,OAAO,UAAU,CAAA;AACnB,CAAC;AAWD;;;GAGG;AACH,SAAgB,gBAAgB,CAC9B,YAA6B,EAAE;IAE/B,OAAO;QACL,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,CAAC;QACd,wBAAwB,EAAE,IAAI;QAC9B,eAAe,EAAE,KAAK;QACtB,oBAAoB,EAAE,KAAK;QAC3B,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QAChD,GAAG,SAAS;KACb,CAAA;AACH,CAAC"}
@@ -0,0 +1,39 @@
1
+ export interface TransactionOptions {
2
+ maxRetries?: number;
3
+ timeoutMs?: number;
4
+ readPreference?: string;
5
+ readConcern?: string | {
6
+ level: string;
7
+ };
8
+ writeConcern?: {
9
+ w: number | string;
10
+ j?: boolean;
11
+ wtimeout?: number;
12
+ };
13
+ }
14
+ /**
15
+ * Universal transaction runner for ExisJS.
16
+ *
17
+ * Automatically detects whether client is Mongoose, MongoDB, Prisma, or Drizzle/SQL,
18
+ * runs the operation within an ACID transaction, commits on success, and rolls back on error.
19
+ *
20
+ * Example with Mongoose:
21
+ * ```ts
22
+ * const result = await withTransaction(mongoose, async (session) => {
23
+ * const order = await Order.create([{ userId, total }], { session })
24
+ * await Inventory.updateOne({ _id: itemId }, { $inc: { stock: -1 } }, { session })
25
+ * return order[0]
26
+ * })
27
+ * ```
28
+ *
29
+ * Example with Prisma:
30
+ * ```ts
31
+ * const result = await withTransaction(prisma, async (tx) => {
32
+ * const user = await tx.user.create({ data: { email } })
33
+ * await tx.profile.create({ data: { userId: user.id } })
34
+ * return user
35
+ * })
36
+ * ```
37
+ */
38
+ export declare function withTransaction<T>(clientOrConnection: any, callback: (sessionOrTx: any) => Promise<T>, options?: TransactionOptions): Promise<T>;
39
+ //# sourceMappingURL=transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/database/transaction.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACxC,YAAY,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACtE;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,kBAAkB,EAAE,GAAG,EACvB,QAAQ,EAAE,CAAC,WAAW,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EAC1C,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,CAAC,CAAC,CA+EZ"}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withTransaction = withTransaction;
4
+ /**
5
+ * Universal transaction runner for ExisJS.
6
+ *
7
+ * Automatically detects whether client is Mongoose, MongoDB, Prisma, or Drizzle/SQL,
8
+ * runs the operation within an ACID transaction, commits on success, and rolls back on error.
9
+ *
10
+ * Example with Mongoose:
11
+ * ```ts
12
+ * const result = await withTransaction(mongoose, async (session) => {
13
+ * const order = await Order.create([{ userId, total }], { session })
14
+ * await Inventory.updateOne({ _id: itemId }, { $inc: { stock: -1 } }, { session })
15
+ * return order[0]
16
+ * })
17
+ * ```
18
+ *
19
+ * Example with Prisma:
20
+ * ```ts
21
+ * const result = await withTransaction(prisma, async (tx) => {
22
+ * const user = await tx.user.create({ data: { email } })
23
+ * await tx.profile.create({ data: { userId: user.id } })
24
+ * return user
25
+ * })
26
+ * ```
27
+ */
28
+ async function withTransaction(clientOrConnection, callback, options = {}) {
29
+ if (!clientOrConnection) {
30
+ throw new Error('[ExisJS Transaction] A valid database client or connection is required');
31
+ }
32
+ // 1. Prisma Client Interop (client.$transaction)
33
+ if (typeof clientOrConnection.$transaction === 'function') {
34
+ return clientOrConnection.$transaction(async (tx) => {
35
+ return callback(tx);
36
+ }, options);
37
+ }
38
+ // 2. Drizzle / Knex / Generic SQL Interop (client.transaction)
39
+ if (typeof clientOrConnection.transaction === 'function') {
40
+ return clientOrConnection.transaction(async (tx) => {
41
+ return callback(tx);
42
+ });
43
+ }
44
+ // 3. Mongoose / MongoDB Driver Interop (startSession)
45
+ const getSessionFn = clientOrConnection.startSession ||
46
+ clientOrConnection.connection?.startSession ||
47
+ clientOrConnection.client?.startSession;
48
+ if (typeof getSessionFn === 'function') {
49
+ const sessionTarget = clientOrConnection.startSession
50
+ ? clientOrConnection
51
+ : clientOrConnection.connection?.startSession
52
+ ? clientOrConnection.connection
53
+ : clientOrConnection.client;
54
+ const session = await sessionTarget.startSession(options);
55
+ // Use built-in session.withTransaction if available (handles automatic retries for transient errors)
56
+ if (typeof session.withTransaction === 'function') {
57
+ try {
58
+ let result;
59
+ await session.withTransaction(async () => {
60
+ result = await callback(session);
61
+ }, options);
62
+ return result;
63
+ }
64
+ finally {
65
+ await session.endSession();
66
+ }
67
+ }
68
+ // Manual startTransaction / commit / abort fallback
69
+ try {
70
+ session.startTransaction();
71
+ const result = await callback(session);
72
+ await session.commitTransaction();
73
+ return result;
74
+ }
75
+ catch (err) {
76
+ try {
77
+ await session.abortTransaction();
78
+ }
79
+ catch {
80
+ /* ignore abort error and bubble original */
81
+ }
82
+ throw err;
83
+ }
84
+ finally {
85
+ try {
86
+ await session.endSession();
87
+ }
88
+ catch {
89
+ /* ignore endSession cleanup error */
90
+ }
91
+ }
92
+ }
93
+ // 4. If callback was passed directly or connection is already a session
94
+ if (typeof clientOrConnection.commitTransaction === 'function') {
95
+ return callback(clientOrConnection);
96
+ }
97
+ throw new Error('[ExisJS Transaction] Provided database client does not support transactions (missing startSession, $transaction, or transaction method)');
98
+ }
99
+ //# sourceMappingURL=transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/database/transaction.ts"],"names":[],"mappings":";;AAgCA,0CAmFC;AA3GD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACI,KAAK,UAAU,eAAe,CACnC,kBAAuB,EACvB,QAA0C,EAC1C,UAA8B,EAAE;IAEhC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAA;IACH,CAAC;IAED,iDAAiD;IACjD,IAAI,OAAO,kBAAkB,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;QAC1D,OAAO,kBAAkB,CAAC,YAAY,CAAC,KAAK,EAAE,EAAO,EAAE,EAAE;YACvD,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAA;QACrB,CAAC,EAAE,OAAO,CAAC,CAAA;IACb,CAAC;IAED,+DAA+D;IAC/D,IAAI,OAAO,kBAAkB,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;QACzD,OAAO,kBAAkB,CAAC,WAAW,CAAC,KAAK,EAAE,EAAO,EAAE,EAAE;YACtD,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAA;QACrB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,sDAAsD;IACtD,MAAM,YAAY,GAChB,kBAAkB,CAAC,YAAY;QAC/B,kBAAkB,CAAC,UAAU,EAAE,YAAY;QAC3C,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAA;IAEzC,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE,CAAC;QACvC,MAAM,aAAa,GAAG,kBAAkB,CAAC,YAAY;YACnD,CAAC,CAAC,kBAAkB;YACpB,CAAC,CAAC,kBAAkB,CAAC,UAAU,EAAE,YAAY;gBAC3C,CAAC,CAAC,kBAAkB,CAAC,UAAU;gBAC/B,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAA;QAE/B,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAEzD,qGAAqG;QACrG,IAAI,OAAO,OAAO,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;YAClD,IAAI,CAAC;gBACH,IAAI,MAAS,CAAA;gBACb,MAAM,OAAO,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE;oBACvC,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAA;gBAClC,CAAC,EAAE,OAAO,CAAC,CAAA;gBACX,OAAO,MAAO,CAAA;YAChB,CAAC;oBAAS,CAAC;gBACT,MAAM,OAAO,CAAC,UAAU,EAAE,CAAA;YAC5B,CAAC;QACH,CAAC;QAED,oDAAoD;QACpD,IAAI,CAAC;YACH,OAAO,CAAC,gBAAgB,EAAE,CAAA;YAC1B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAA;YACtC,MAAM,OAAO,CAAC,iBAAiB,EAAE,CAAA;YACjC,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAA;YAClC,CAAC;YAAC,MAAM,CAAC;gBACP,4CAA4C;YAC9C,CAAC;YACD,MAAM,GAAG,CAAA;QACX,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,UAAU,EAAE,CAAA;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,qCAAqC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,IAAI,OAAO,kBAAkB,CAAC,iBAAiB,KAAK,UAAU,EAAE,CAAC;QAC/D,OAAO,QAAQ,CAAC,kBAAkB,CAAC,CAAA;IACrC,CAAC;IAED,MAAM,IAAI,KAAK,CACb,yIAAyI,CAC1I,CAAA;AACH,CAAC"}
@@ -42,6 +42,8 @@ export interface BoundaryConfig {
42
42
  headers?: Record<string, string>;
43
43
  imports?: any[];
44
44
  providers?: any[];
45
+ beforeHandle?: any;
46
+ afterHandle?: any;
45
47
  }
46
48
  export interface ClassModuleOptions {
47
49
  imports?: any[];
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/decorators/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAGvD,eAAO,MAAM,cAAc,eAA8B,CAAA;AACzD,eAAO,MAAM,iBAAiB,eAAyC,CAAA;AACvE,eAAO,MAAM,eAAe,eAAuC,CAAA;AACnE,eAAO,MAAM,mBAAmB,eAAmC,CAAA;AACnE,eAAO,MAAM,cAAc,eAAsC,CAAA;AACjE,eAAO,MAAM,kBAAkB,eAA0C,CAAA;AACzE,eAAO,MAAM,cAAc,eAAsC,CAAA;AACjE,eAAO,MAAM,aAAa,eAAqC,CAAA;AAC/D,eAAO,MAAM,eAAe,eAAuC,CAAA;AACnE,eAAO,MAAM,eAAe,eAAuC,CAAA;AAEnE,eAAO,MAAM,UAAU,eAAkC,CAAA;AACzD,eAAO,MAAM,kBAAkB,eAA0C,CAAA;AACzE,eAAO,MAAM,mBAAmB,eAA2C,CAAA;AAC3E,eAAO,MAAM,uBAAuB,eAEnC,CAAA;AACD,eAAO,MAAM,mBAAmB,eAA2C,CAAA;AAE3E,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IACxC,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,GAAG,EAAE,CAAA;IACjB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACZ,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,UAAU,CAAC,EAAE,GAAG,EAAE,CAAA;IAClB,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,YAAY,CAAC,EAAE,GAAG,EAAE,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,CAAA;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC9B,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,GAAG,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,WAAW,CAAC,EAAE,GAAG,EAAE,CAAA;IACnB,SAAS,CAAC,EAAE,GAAG,EAAE,CAAA;IACjB,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;CAChB"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/decorators/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAGvD,eAAO,MAAM,cAAc,eAA8B,CAAA;AACzD,eAAO,MAAM,iBAAiB,eAAyC,CAAA;AACvE,eAAO,MAAM,eAAe,eAAuC,CAAA;AACnE,eAAO,MAAM,mBAAmB,eAAmC,CAAA;AACnE,eAAO,MAAM,cAAc,eAAsC,CAAA;AACjE,eAAO,MAAM,kBAAkB,eAA0C,CAAA;AACzE,eAAO,MAAM,cAAc,eAAsC,CAAA;AACjE,eAAO,MAAM,aAAa,eAAqC,CAAA;AAC/D,eAAO,MAAM,eAAe,eAAuC,CAAA;AACnE,eAAO,MAAM,eAAe,eAAuC,CAAA;AAEnE,eAAO,MAAM,UAAU,eAAkC,CAAA;AACzD,eAAO,MAAM,kBAAkB,eAA0C,CAAA;AACzE,eAAO,MAAM,mBAAmB,eAA2C,CAAA;AAC3E,eAAO,MAAM,uBAAuB,eAEnC,CAAA;AACD,eAAO,MAAM,mBAAmB,eAA2C,CAAA;AAE3E,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IACxC,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,GAAG,EAAE,CAAA;IACjB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACZ,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,UAAU,CAAC,EAAE,GAAG,EAAE,CAAA;IAClB,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,YAAY,CAAC,EAAE,GAAG,EAAE,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,CAAA;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC9B,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,GAAG,EAAE,CAAA;IACjB,YAAY,CAAC,EAAE,GAAG,CAAA;IAClB,WAAW,CAAC,EAAE,GAAG,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;IACf,WAAW,CAAC,EAAE,GAAG,EAAE,CAAA;IACnB,SAAS,CAAC,EAAE,GAAG,EAAE,CAAA;IACjB,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;CAChB"}
@@ -5,4 +5,5 @@ export * from './routing';
5
5
  export * from './params';
6
6
  export * from './middleware';
7
7
  export * from './response';
8
+ export * from './upload';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,QAAQ,CAAA;AACtB,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,QAAQ,CAAA;AACtB,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA"}
@@ -21,4 +21,5 @@ __exportStar(require("./routing"), exports);
21
21
  __exportStar(require("./params"), exports);
22
22
  __exportStar(require("./middleware"), exports);
23
23
  __exportStar(require("./response"), exports);
24
+ __exportStar(require("./upload"), exports);
24
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,yCAAsB;AACtB,+CAA4B;AAC5B,4CAAyB;AACzB,2CAAwB;AACxB,+CAA4B;AAC5B,6CAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,yCAAsB;AACtB,+CAA4B;AAC5B,4CAAyB;AACzB,2CAAwB;AACxB,+CAA4B;AAC5B,6CAA0B;AAC1B,2CAAwB"}
@@ -34,4 +34,14 @@ export declare function UseFilters(...filters: any[]): any;
34
34
  * checkout() {}
35
35
  */
36
36
  export declare function Idempotent(options?: import('../middleware/idempotency').IdempotentOptions): any;
37
+ /**
38
+ * Route-Level Timeout Decorator.
39
+ * Configures an explicit timeout override for a long-running endpoint.
40
+ *
41
+ * Example:
42
+ * @Post('/heavy-task')
43
+ * @Timeout(120000)
44
+ * heavyTask() {}
45
+ */
46
+ export declare function Timeout(msOrOptions: number | import('../middleware/security').TimeoutOptions): any;
37
47
  //# sourceMappingURL=middleware.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/decorators/middleware.ts"],"names":[],"mappings":"AAkCA;;;;;;;;;;;;GAYG;AACH,wBAAgB,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,CAsFxC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAE/C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,YAAY,EAAE,GAAG,EAAE,GAAG,GAAG,CAE3D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAEjD;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,OAAO,GAAE,OAAO,2BAA2B,EAAE,iBAAsB,GAClE,GAAG,CA8BL"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/decorators/middleware.ts"],"names":[],"mappings":"AAkCA;;;;;;;;;;;;GAYG;AACH,wBAAgB,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,CAsFxC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAE/C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,YAAY,EAAE,GAAG,EAAE,GAAG,GAAG,CAE3D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAEjD;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,OAAO,GAAE,OAAO,2BAA2B,EAAE,iBAAsB,GAClE,GAAG,CA8BL;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CACrB,WAAW,EAAE,MAAM,GAAG,OAAO,wBAAwB,EAAE,cAAc,GACpE,GAAG,CA4BL"}
@@ -38,6 +38,7 @@ exports.UseGuards = UseGuards;
38
38
  exports.UseInterceptors = UseInterceptors;
39
39
  exports.UseFilters = UseFilters;
40
40
  exports.Idempotent = Idempotent;
41
+ exports.Timeout = Timeout;
41
42
  const constants_1 = require("./constants");
42
43
  const metadata_1 = require("./core/metadata");
43
44
  /**
@@ -190,4 +191,30 @@ function Idempotent(options = {}) {
190
191
  methodMiddlewares.push(middlewareProxy);
191
192
  };
192
193
  }
194
+ /**
195
+ * Route-Level Timeout Decorator.
196
+ * Configures an explicit timeout override for a long-running endpoint.
197
+ *
198
+ * Example:
199
+ * @Post('/heavy-task')
200
+ * @Timeout(120000)
201
+ * heavyTask() {}
202
+ */
203
+ function Timeout(msOrOptions) {
204
+ return function (target, contextOrPropertyKey, descriptor) {
205
+ const isStandard = typeof contextOrPropertyKey === 'object' && contextOrPropertyKey !== null;
206
+ const fn = isStandard
207
+ ? target
208
+ : descriptor
209
+ ? descriptor.value
210
+ : target[contextOrPropertyKey];
211
+ const methodMiddlewares = metadata_1.MetadataEngine.init(fn, constants_1.METHOD_MIDDLEWARES, []);
212
+ const middlewareProxy = async (req, res, next) => {
213
+ const { routeTimeout } = await Promise.resolve().then(() => __importStar(require('../middleware/security')));
214
+ const handler = routeTimeout(msOrOptions);
215
+ return handler(req, res, next);
216
+ };
217
+ methodMiddlewares.unshift(middlewareProxy);
218
+ };
219
+ }
193
220
  //# sourceMappingURL=middleware.js.map