cqrs-boilerplate-code 1.0.22 → 1.0.23
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.
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/middleware/filter/global-exeception.filter.d.ts +2 -3
- package/dist/middleware/filter/global-exeception.filter.js +24 -18
- package/dist/middleware/filter/global-exeception.filter.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/common-infra/index.d.ts +0 -0
- package/dist/common-infra/index.js +0 -1
- package/dist/common-infra/index.js.map +0 -1
- package/dist/core-common/error/index.d.ts +0 -13
- package/dist/core-common/error/index.js +0 -30
- package/dist/core-common/error/index.js.map +0 -1
- package/dist/core-common/index.d.ts +0 -0
- package/dist/core-common/index.js +0 -1
- package/dist/core-common/index.js.map +0 -1
- package/dist/core-common/logger/index.d.ts +0 -0
- package/dist/core-common/logger/index.js +0 -1
- package/dist/core-common/logger/index.js.map +0 -1
- package/dist/middleware/async-storage.middleware.d.ts +0 -8
- package/dist/middleware/async-storage.middleware.js +0 -38
- package/dist/middleware/async-storage.middleware.js.map +0 -1
- package/dist/middleware/auth-middleware/auth-middleware.factory.d.ts +0 -2
- package/dist/middleware/auth-middleware/auth-middleware.factory.js +0 -8
- package/dist/middleware/auth-middleware/auth-middleware.factory.js.map +0 -1
- package/dist/middleware/auth-middleware/index.d.ts +0 -3
- package/dist/middleware/auth-middleware/index.js +0 -20
- package/dist/middleware/auth-middleware/index.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -33,6 +33,7 @@ export * from './middleware/auth-middleware/auth.middleware';
|
|
|
33
33
|
export { AUTH_MIDDLEWARE_OPTIONS } from './middleware/auth-middleware/auth.middleware';
|
|
34
34
|
export { AuthMiddlewareOptions } from './middleware/auth-middleware/auth.middleware';
|
|
35
35
|
export * from './middleware/auth-middleware/jwt-validator';
|
|
36
|
+
export * from './middleware/filter/global-exeception.filter';
|
|
36
37
|
export * from './middleware/async-middleware/async-storage.middleware';
|
|
37
38
|
export * from './middleware/async-middleware/async-storage.service';
|
|
38
39
|
export * from './middleware/utils/http-response.formatter';
|
package/dist/index.js
CHANGED
|
@@ -50,6 +50,7 @@ __exportStar(require("./middleware/auth-middleware/auth.middleware"), exports);
|
|
|
50
50
|
var auth_middleware_1 = require("./middleware/auth-middleware/auth.middleware");
|
|
51
51
|
Object.defineProperty(exports, "AUTH_MIDDLEWARE_OPTIONS", { enumerable: true, get: function () { return auth_middleware_1.AUTH_MIDDLEWARE_OPTIONS; } });
|
|
52
52
|
__exportStar(require("./middleware/auth-middleware/jwt-validator"), exports);
|
|
53
|
+
__exportStar(require("./middleware/filter/global-exeception.filter"), exports);
|
|
53
54
|
__exportStar(require("./middleware/async-middleware/async-storage.middleware"), exports);
|
|
54
55
|
__exportStar(require("./middleware/async-middleware/async-storage.service"), exports);
|
|
55
56
|
__exportStar(require("./middleware/utils/http-response.formatter"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,sEAAmD;AAGnD,wFAAqE;AACrE,qFAAkE;AAClE,kFAA+D;AAC/D,2FAAwE;AACxE,mFAAgE;AAChE,yFAAsE;AACtE,mFAAgE;AAChE,6FAA0E;AAC1E,sFAAmE;AACnE,0FAAuE;AACvE,oFAAiE;AACjE,oEAAiD;AAGjD,4FAAyE;AACzE,8FAA2E;AAC3E,oEAAiD;AAGjD,wEAAqD;AACrD,qEAAkD;AAClD,sEAAmD;AAGnD,qEAAkD;AAClD,yEAAsD;AACtD,sEAAmD;AACnD,mEAAgD;AAGhD,0EAAuD;AACvD,oEAAiD;AACjD,kEAA+C;AAC/C,oEAAiD;AAGjD,sEAAmD;AACnD,0EAAuD;AACvD,yEAAsD;AACtD,0EAAuD;AAGvD,+EAA4D;AAC5D,gFAAsF;AAA7E,0HAAA,uBAAuB,OAAA;AAEhC,6EAA0D;AAG1D,yFAAsE;AACtE,sFAAmE;AAGnE,6EAA0D;AAC1D,+EAA4D","sourcesContent":["\nexport * from './core-common/constant/app.constant'\n\n// Error Exports\nexport * from './core-common/error/custom-error/already-exists.error'\nexport * from './core-common/error/custom-error/bad-request.error'\nexport * from './core-common/error/custom-error/conflict.error'\nexport * from './core-common/error/custom-error/custom-validation-error'\nexport * from './core-common/error/custom-error/forbidden.error'\nexport * from './core-common/error/custom-error/internal-server.error'\nexport * from './core-common/error/custom-error/not-found.error'\nexport * from './core-common/error/custom-error/service-unavailable.error'\nexport * from './core-common/error/custom-error/unauthorized.error'\nexport * from './core-common/error/custom-error/unprocess-entity.error'\nexport * from './core-common/error/custom-error/validation.error'\nexport * from './core-common/error/generic.error'\n\n// Model Exports\nexport * from './core-common/response-model/generic-error-response.model'\nexport * from './core-common/response-model/generic-success-response.model'\nexport * from './core-common/result-model/result'\n\n// Logger Exports\nexport * from './core-common/logger/logger.interface'\nexport * from './core-common/logger/logger.module'\nexport * from './core-common/logger/logger.service'\n\n// Module Exports\nexport * from './common-infra/common-infra.module'\nexport * from './common-infra/database/typeorm.config'\nexport * from './core-common/constant/app.constant'\nexport * from './core-common/core-common.module'\n\n// HTTP Exports\nexport * from './common-infra/http/http-module.options'\nexport * from './common-infra/http/http.constant'\nexport * from './common-infra/http/http.module'\nexport * from './common-infra/http/https.service'\n\n// Socket.IO Exports\nexport * from './common-infra/socket.io/interfaces'\nexport * from './common-infra/socket.io/socket.gateway'\nexport * from './common-infra/socket.io/socket.module'\nexport * from './common-infra/socket.io/socket.options'\n\n// Middleware Exports\nexport * from './middleware/auth-middleware/auth.middleware'\nexport { AUTH_MIDDLEWARE_OPTIONS } from './middleware/auth-middleware/auth.middleware'\nexport { AuthMiddlewareOptions } from './middleware/auth-middleware/auth.middleware'\nexport * from './middleware/auth-middleware/jwt-validator'\n\n// Async Storage Middleware Exports\nexport * from './middleware/async-middleware/async-storage.middleware'\nexport * from './middleware/async-middleware/async-storage.service'\n\n// Http Formatter Exports\nexport * from './middleware/utils/http-response.formatter'\nexport * from './middleware/utils/http-response.interceptor'"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,sEAAmD;AAGnD,wFAAqE;AACrE,qFAAkE;AAClE,kFAA+D;AAC/D,2FAAwE;AACxE,mFAAgE;AAChE,yFAAsE;AACtE,mFAAgE;AAChE,6FAA0E;AAC1E,sFAAmE;AACnE,0FAAuE;AACvE,oFAAiE;AACjE,oEAAiD;AAGjD,4FAAyE;AACzE,8FAA2E;AAC3E,oEAAiD;AAGjD,wEAAqD;AACrD,qEAAkD;AAClD,sEAAmD;AAGnD,qEAAkD;AAClD,yEAAsD;AACtD,sEAAmD;AACnD,mEAAgD;AAGhD,0EAAuD;AACvD,oEAAiD;AACjD,kEAA+C;AAC/C,oEAAiD;AAGjD,sEAAmD;AACnD,0EAAuD;AACvD,yEAAsD;AACtD,0EAAuD;AAGvD,+EAA4D;AAC5D,gFAAsF;AAA7E,0HAAA,uBAAuB,OAAA;AAEhC,6EAA0D;AAG1D,+EAA4D;AAG5D,yFAAsE;AACtE,sFAAmE;AAGnE,6EAA0D;AAC1D,+EAA4D","sourcesContent":["\nexport * from './core-common/constant/app.constant'\n\n// Error Exports\nexport * from './core-common/error/custom-error/already-exists.error'\nexport * from './core-common/error/custom-error/bad-request.error'\nexport * from './core-common/error/custom-error/conflict.error'\nexport * from './core-common/error/custom-error/custom-validation-error'\nexport * from './core-common/error/custom-error/forbidden.error'\nexport * from './core-common/error/custom-error/internal-server.error'\nexport * from './core-common/error/custom-error/not-found.error'\nexport * from './core-common/error/custom-error/service-unavailable.error'\nexport * from './core-common/error/custom-error/unauthorized.error'\nexport * from './core-common/error/custom-error/unprocess-entity.error'\nexport * from './core-common/error/custom-error/validation.error'\nexport * from './core-common/error/generic.error'\n\n// Model Exports\nexport * from './core-common/response-model/generic-error-response.model'\nexport * from './core-common/response-model/generic-success-response.model'\nexport * from './core-common/result-model/result'\n\n// Logger Exports\nexport * from './core-common/logger/logger.interface'\nexport * from './core-common/logger/logger.module'\nexport * from './core-common/logger/logger.service'\n\n// Module Exports\nexport * from './common-infra/common-infra.module'\nexport * from './common-infra/database/typeorm.config'\nexport * from './core-common/constant/app.constant'\nexport * from './core-common/core-common.module'\n\n// HTTP Exports\nexport * from './common-infra/http/http-module.options'\nexport * from './common-infra/http/http.constant'\nexport * from './common-infra/http/http.module'\nexport * from './common-infra/http/https.service'\n\n// Socket.IO Exports\nexport * from './common-infra/socket.io/interfaces'\nexport * from './common-infra/socket.io/socket.gateway'\nexport * from './common-infra/socket.io/socket.module'\nexport * from './common-infra/socket.io/socket.options'\n\n// Middleware Exports\nexport * from './middleware/auth-middleware/auth.middleware'\nexport { AUTH_MIDDLEWARE_OPTIONS } from './middleware/auth-middleware/auth.middleware'\nexport { AuthMiddlewareOptions } from './middleware/auth-middleware/auth.middleware'\nexport * from './middleware/auth-middleware/jwt-validator'\n\n// Global Exception Filter Exports\nexport * from './middleware/filter/global-exeception.filter'\n\n// Async Storage Middleware Exports\nexport * from './middleware/async-middleware/async-storage.middleware'\nexport * from './middleware/async-middleware/async-storage.service'\n\n// Http Formatter Exports\nexport * from './middleware/utils/http-response.formatter'\nexport * from './middleware/utils/http-response.interceptor'"]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { ArgumentsHost, ExceptionFilter } from "@nestjs/common";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
catch(exception: unknown, host: ArgumentsHost): Response<any, Record<string, any>>;
|
|
2
|
+
export declare class GlobalExceptionFilter implements ExceptionFilter {
|
|
3
|
+
catch(exception: unknown, host: ArgumentsHost): void;
|
|
5
4
|
}
|
|
@@ -6,12 +6,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
6
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.
|
|
9
|
+
exports.GlobalExceptionFilter = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
10
11
|
const validation_error_1 = require("../../core-common/error/custom-error/validation.error");
|
|
11
12
|
const generic_error_1 = require("../../core-common/error/generic.error");
|
|
12
13
|
const result_1 = require("../../core-common/result-model/result");
|
|
13
|
-
|
|
14
|
-
let GlobalExceptionHandler = class GlobalExceptionHandler {
|
|
14
|
+
let GlobalExceptionFilter = class GlobalExceptionFilter {
|
|
15
15
|
catch(exception, host) {
|
|
16
16
|
const response = host.switchToHttp().getResponse();
|
|
17
17
|
if (exception instanceof result_1.Result) {
|
|
@@ -28,10 +28,11 @@ let GlobalExceptionHandler = class GlobalExceptionHandler {
|
|
|
28
28
|
if (exception.data !== undefined && exception.data !== null) {
|
|
29
29
|
payload.data = exception.data;
|
|
30
30
|
}
|
|
31
|
-
|
|
31
|
+
response.status(statusCode).json(payload);
|
|
32
|
+
return;
|
|
32
33
|
}
|
|
33
34
|
if (exception instanceof generic_error_1.GenericError) {
|
|
34
|
-
|
|
35
|
+
response.status(exception.statusCode).json({
|
|
35
36
|
statusCode: exception.statusCode,
|
|
36
37
|
success: false,
|
|
37
38
|
error: {
|
|
@@ -40,37 +41,41 @@ let GlobalExceptionHandler = class GlobalExceptionHandler {
|
|
|
40
41
|
},
|
|
41
42
|
timestamp: new Date().toISOString(),
|
|
42
43
|
});
|
|
44
|
+
return;
|
|
43
45
|
}
|
|
44
46
|
if (exception instanceof common_1.HttpException) {
|
|
45
47
|
const status = exception.getStatus();
|
|
46
48
|
const res = exception.getResponse();
|
|
47
|
-
const isValidationPipeError = exception.stack
|
|
49
|
+
const isValidationPipeError = typeof exception.stack === "string" &&
|
|
50
|
+
exception.stack.includes("ValidationPipe");
|
|
48
51
|
if (isValidationPipeError) {
|
|
49
|
-
const
|
|
50
|
-
|
|
52
|
+
const validationError = new validation_error_1.ValidationError("validation_error", "Validation failed");
|
|
53
|
+
response.status(validationError.statusCode).json({
|
|
51
54
|
success: false,
|
|
52
55
|
error: {
|
|
53
|
-
code:
|
|
54
|
-
message:
|
|
55
|
-
validationError
|
|
56
|
+
code: validationError.code,
|
|
57
|
+
message: validationError.message,
|
|
58
|
+
validationError,
|
|
56
59
|
},
|
|
57
60
|
timestamp: new Date().toISOString(),
|
|
58
61
|
});
|
|
62
|
+
return;
|
|
59
63
|
}
|
|
60
|
-
|
|
64
|
+
response.status(status).json({
|
|
61
65
|
statusCode: status,
|
|
62
66
|
success: false,
|
|
63
67
|
error: {
|
|
64
68
|
code: "HTTP_EXCEPTION",
|
|
65
69
|
message: typeof res === "string"
|
|
66
70
|
? res
|
|
67
|
-
:
|
|
71
|
+
: res?.message ?? exception.message,
|
|
68
72
|
},
|
|
69
73
|
timestamp: new Date().toISOString(),
|
|
70
74
|
});
|
|
75
|
+
return;
|
|
71
76
|
}
|
|
72
77
|
if (exception instanceof Error) {
|
|
73
|
-
|
|
78
|
+
response.status(common_1.HttpStatus.INTERNAL_SERVER_ERROR).json({
|
|
74
79
|
statusCode: common_1.HttpStatus.INTERNAL_SERVER_ERROR,
|
|
75
80
|
success: false,
|
|
76
81
|
error: {
|
|
@@ -79,8 +84,9 @@ let GlobalExceptionHandler = class GlobalExceptionHandler {
|
|
|
79
84
|
},
|
|
80
85
|
timestamp: new Date().toISOString(),
|
|
81
86
|
});
|
|
87
|
+
return;
|
|
82
88
|
}
|
|
83
|
-
|
|
89
|
+
response.status(common_1.HttpStatus.INTERNAL_SERVER_ERROR).json({
|
|
84
90
|
statusCode: common_1.HttpStatus.INTERNAL_SERVER_ERROR,
|
|
85
91
|
success: false,
|
|
86
92
|
error: {
|
|
@@ -91,8 +97,8 @@ let GlobalExceptionHandler = class GlobalExceptionHandler {
|
|
|
91
97
|
});
|
|
92
98
|
}
|
|
93
99
|
};
|
|
94
|
-
exports.
|
|
95
|
-
exports.
|
|
100
|
+
exports.GlobalExceptionFilter = GlobalExceptionFilter;
|
|
101
|
+
exports.GlobalExceptionFilter = GlobalExceptionFilter = __decorate([
|
|
96
102
|
(0, common_1.Catch)()
|
|
97
|
-
],
|
|
103
|
+
], GlobalExceptionFilter);
|
|
98
104
|
//# sourceMappingURL=global-exeception.filter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-exeception.filter.js","sourceRoot":"","sources":["../../../src/middleware/filter/global-exeception.filter.ts"],"names":[],"mappings":";;;;;;;;;AAAA,4FAAmF;AACnF,yEAAgE;AAChE,kEAA0D;
|
|
1
|
+
{"version":3,"file":"global-exeception.filter.js","sourceRoot":"","sources":["../../../src/middleware/filter/global-exeception.filter.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ArgumentsHost,\n Catch,\n ExceptionFilter,\n HttpException,\n HttpStatus,\n} from \"@nestjs/common\";\nimport { Response } from \"express\";\n\nimport { ValidationError } from \"@core-common/error/custom-error/validation.error\";\nimport { GenericError } from \"@core-common/error/generic.error\";\nimport { Result } from \"@core-common/result-model/result\";\n\n/**\n * Global exception filter for NestJS applications.\n * Provides standardized error responses across the application.\n */\n@Catch()\nexport class GlobalExceptionFilter implements ExceptionFilter {\n catch(exception: unknown, host: ArgumentsHost): void {\n const response = host.switchToHttp().getResponse<Response>();\n\n /* 1️⃣ Domain Result errors */\n if (exception instanceof Result) {\n const statusCode =\n exception.error?.statusCode ?? HttpStatus.INTERNAL_SERVER_ERROR;\n\n const payload: Record<string, any> = {\n statusCode,\n success: false,\n error: {\n code: exception.error?.code ?? \"ERROR\",\n message: exception.error?.message ?? \"An error occurred\",\n },\n timestamp: exception.timestamp ?? new Date().toISOString(),\n };\n\n if (exception.data !== undefined && exception.data !== null) {\n payload.data = exception.data;\n }\n\n response.status(statusCode).json(payload);\n return;\n }\n\n /* 2️⃣ Custom domain errors */\n if (exception instanceof GenericError) {\n response.status(exception.statusCode).json({\n statusCode: exception.statusCode,\n success: false,\n error: {\n code: exception.code,\n message: exception.message,\n },\n timestamp: new Date().toISOString(),\n });\n return;\n }\n\n /* 3️⃣ NestJS HttpExceptions */\n if (exception instanceof HttpException) {\n const status = exception.getStatus();\n const res = exception.getResponse();\n\n const isValidationPipeError =\n typeof exception.stack === \"string\" &&\n exception.stack.includes(\"ValidationPipe\");\n\n if (isValidationPipeError) {\n const validationError = new ValidationError(\n \"validation_error\",\n \"Validation failed\",\n );\n\n response.status(validationError.statusCode).json({\n success: false,\n error: {\n code: validationError.code,\n message: validationError.message,\n validationError,\n },\n timestamp: new Date().toISOString(),\n });\n return;\n }\n\n response.status(status).json({\n statusCode: status,\n success: false,\n error: {\n code: \"HTTP_EXCEPTION\",\n message:\n typeof res === \"string\"\n ? res\n : (res as any)?.message ?? exception.message,\n },\n timestamp: new Date().toISOString(),\n });\n return;\n }\n\n /* 4️⃣ Native JS Errors */\n if (exception instanceof Error) {\n response.status(HttpStatus.INTERNAL_SERVER_ERROR).json({\n statusCode: HttpStatus.INTERNAL_SERVER_ERROR,\n success: false,\n error: {\n code: exception.name,\n message: exception.message,\n },\n timestamp: new Date().toISOString(),\n });\n return;\n }\n\n /* 5️⃣ Unknown throwables */\n response.status(HttpStatus.INTERNAL_SERVER_ERROR).json({\n statusCode: HttpStatus.INTERNAL_SERVER_ERROR,\n success: false,\n error: {\n code: \"UNKNOWN_ERROR\",\n message: \"Internal server error\",\n },\n timestamp: new Date().toISOString(),\n });\n }\n}\n"]}
|