@codylabs/nestjs-common 0.0.7 → 0.0.8
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/filters/all-exceptions.filter.d.ts +1 -1
- package/dist/filters/all-exceptions.filter.js +28 -6
- package/dist/filters/all-exceptions.filter.js.map +1 -1
- package/dist/filters/http-exception.filter.d.ts +2 -1
- package/dist/filters/http-exception.filter.js +33 -3
- package/dist/filters/http-exception.filter.js.map +1 -1
- package/dist/filters/unprocessable-entity-exception.filter.d.ts +2 -0
- package/dist/filters/unprocessable-entity-exception.filter.js +25 -17
- package/dist/filters/unprocessable-entity-exception.filter.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -8,18 +8,40 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.AllExceptionsFilter = void 0;
|
|
10
10
|
const common_1 = require("@nestjs/common");
|
|
11
|
+
const utils_1 = require("../utils");
|
|
11
12
|
let AllExceptionsFilter = class AllExceptionsFilter {
|
|
12
13
|
catch(exception, host) {
|
|
13
14
|
const ctx = host.switchToHttp();
|
|
14
15
|
const response = ctx.getResponse();
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
if (exception instanceof Error) {
|
|
17
|
+
const error = {
|
|
18
|
+
code: common_1.HttpStatus.INTERNAL_SERVER_ERROR,
|
|
19
|
+
status: common_1.HttpStatus[common_1.HttpStatus.INTERNAL_SERVER_ERROR],
|
|
20
|
+
message: (0, utils_1.isDevelopment)() ? exception.message : 'Internal server error',
|
|
21
|
+
};
|
|
22
|
+
if ((0, utils_1.isDevelopment)()) {
|
|
23
|
+
error.details = {
|
|
24
|
+
name: exception.name,
|
|
25
|
+
...(exception.stack && { stack: exception.stack }),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
response.status(common_1.HttpStatus.INTERNAL_SERVER_ERROR).json({
|
|
29
|
+
error,
|
|
30
|
+
});
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
17
33
|
const error = {
|
|
18
|
-
code:
|
|
19
|
-
status: common_1.HttpStatus[
|
|
20
|
-
message,
|
|
34
|
+
code: common_1.HttpStatus.INTERNAL_SERVER_ERROR,
|
|
35
|
+
status: common_1.HttpStatus[common_1.HttpStatus.INTERNAL_SERVER_ERROR],
|
|
36
|
+
message: common_1.HttpStatus[common_1.HttpStatus.INTERNAL_SERVER_ERROR],
|
|
21
37
|
};
|
|
22
|
-
|
|
38
|
+
if ((0, utils_1.isDevelopment)()) {
|
|
39
|
+
error.details = {
|
|
40
|
+
type: typeof exception,
|
|
41
|
+
value: exception,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
response.status(common_1.HttpStatus.INTERNAL_SERVER_ERROR).json({
|
|
23
45
|
error,
|
|
24
46
|
});
|
|
25
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"all-exceptions.filter.js","sourceRoot":"","sources":["../../src/filters/all-exceptions.filter.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAmF;
|
|
1
|
+
{"version":3,"file":"all-exceptions.filter.js","sourceRoot":"","sources":["../../src/filters/all-exceptions.filter.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAmF;AAInF,oCAAyC;AAGlC,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAC9B,KAAK,CAAC,SAAkB,EAAE,IAAmB;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAY,CAAC;QAE7C,IAAI,SAAS,YAAY,KAAK,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAkB;gBAC3B,IAAI,EAAE,mBAAU,CAAC,qBAAqB;gBACtC,MAAM,EAAE,mBAAU,CAAC,mBAAU,CAAC,qBAAqB,CAAC;gBACpD,OAAO,EAAE,IAAA,qBAAa,GAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB;aACvE,CAAC;YAEF,IAAI,IAAA,qBAAa,GAAE,EAAE,CAAC;gBACpB,KAAK,CAAC,OAAO,GAAG;oBACd,IAAI,EAAE,SAAS,CAAC,IAAI;oBACpB,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;iBACnD,CAAC;YACJ,CAAC;YAED,QAAQ,CAAC,MAAM,CAAC,mBAAU,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC;gBACrD,KAAK;aACN,CAAC,CAAC;YAEH,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAkB;YAC3B,IAAI,EAAE,mBAAU,CAAC,qBAAqB;YACtC,MAAM,EAAE,mBAAU,CAAC,mBAAU,CAAC,qBAAqB,CAAC;YACpD,OAAO,EAAE,mBAAU,CAAC,mBAAU,CAAC,qBAAqB,CAAC;SACtD,CAAC;QAEF,IAAI,IAAA,qBAAa,GAAE,EAAE,CAAC;YACpB,KAAK,CAAC,OAAO,GAAG;gBACd,IAAI,EAAE,OAAO,SAAS;gBACtB,KAAK,EAAE,SAAS;aACjB,CAAC;QACJ,CAAC;QAED,QAAQ,CAAC,MAAM,CAAC,mBAAU,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC;YACrD,KAAK;SACN,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA3CY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,cAAK,GAAE;GACK,mBAAmB,CA2C/B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ArgumentsHost, ExceptionFilter, HttpException } from '@nestjs/common';
|
|
2
|
-
export declare class HttpExceptionFilter implements ExceptionFilter {
|
|
2
|
+
export declare class HttpExceptionFilter implements ExceptionFilter<HttpException> {
|
|
3
3
|
catch(exception: HttpException, host: ArgumentsHost): void;
|
|
4
|
+
private extractResponseData;
|
|
4
5
|
}
|
|
@@ -13,18 +13,48 @@ let HttpExceptionFilter = class HttpExceptionFilter {
|
|
|
13
13
|
catch(exception, host) {
|
|
14
14
|
const ctx = host.switchToHttp();
|
|
15
15
|
const response = ctx.getResponse();
|
|
16
|
-
const status = exception.getStatus
|
|
17
|
-
const
|
|
16
|
+
const status = exception.getStatus();
|
|
17
|
+
const exceptionResponse = exception.getResponse();
|
|
18
|
+
const { message, details } = this.extractResponseData(exceptionResponse, exception);
|
|
18
19
|
const error = {
|
|
19
20
|
code: status,
|
|
20
21
|
status: common_1.HttpStatus[status],
|
|
21
22
|
message,
|
|
22
|
-
...((0, utils_1.isDevelopment)() ? { details: exception.stack } : {}),
|
|
23
23
|
};
|
|
24
|
+
if (details !== undefined) {
|
|
25
|
+
error.details = details;
|
|
26
|
+
}
|
|
27
|
+
if ((0, utils_1.isDevelopment)() && exception.stack) {
|
|
28
|
+
error.details = {
|
|
29
|
+
...(typeof error.details === 'object' && error.details !== null ? error.details : {}),
|
|
30
|
+
stack: exception.stack,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
24
33
|
response.status(status).json({
|
|
25
34
|
error,
|
|
26
35
|
});
|
|
27
36
|
}
|
|
37
|
+
extractResponseData(exceptionResponse, exception) {
|
|
38
|
+
if (typeof exceptionResponse === 'string') {
|
|
39
|
+
return {
|
|
40
|
+
message: exceptionResponse,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
if (typeof exceptionResponse === 'object' && exceptionResponse !== null) {
|
|
44
|
+
const response = exceptionResponse;
|
|
45
|
+
const message = Array.isArray(response.message)
|
|
46
|
+
? response.message.join(', ')
|
|
47
|
+
: response.message || exception.message;
|
|
48
|
+
const { message: _message, statusCode: _statusCode, ...details } = response;
|
|
49
|
+
return {
|
|
50
|
+
message,
|
|
51
|
+
details: Object.keys(details).length > 0 ? details : undefined,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
message: exception.message,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
28
58
|
};
|
|
29
59
|
exports.HttpExceptionFilter = HttpExceptionFilter;
|
|
30
60
|
exports.HttpExceptionFilter = HttpExceptionFilter = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-exception.filter.js","sourceRoot":"","sources":["../../src/filters/http-exception.filter.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAkG;AAIlG,oCAAyC;AAGlC,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAC9B,KAAK,CAAC,SAAwB,EAAE,IAAmB;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAY,CAAC;QAE7C,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"http-exception.filter.js","sourceRoot":"","sources":["../../src/filters/http-exception.filter.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAkG;AAIlG,oCAAyC;AAGlC,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAC9B,KAAK,CAAC,SAAwB,EAAE,IAAmB;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAY,CAAC;QAE7C,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,iBAAiB,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QAElD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;QAEpF,MAAM,KAAK,GAAkB;YAC3B,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,mBAAU,CAAC,MAAM,CAAW;YACpC,OAAO;SACR,CAAC;QAEF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QAC1B,CAAC;QAED,IAAI,IAAA,qBAAa,GAAE,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACvC,KAAK,CAAC,OAAO,GAAG;gBACd,GAAG,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrF,KAAK,EAAE,SAAS,CAAC,KAAK;aACvB,CAAC;QACJ,CAAC;QAED,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;YAC3B,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAEO,mBAAmB,CACzB,iBAAkC,EAClC,SAAwB;QAExB,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE,CAAC;YAC1C,OAAO;gBACL,OAAO,EAAE,iBAAiB;aAC3B,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,iBAAiB,KAAK,QAAQ,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;YACxE,MAAM,QAAQ,GAAG,iBAAwC,CAAC;YAE1D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC7C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC7B,CAAC,CAAE,QAAQ,CAAC,OAAkB,IAAI,SAAS,CAAC,OAAO,CAAC;YAEtD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,OAAO,EAAE,GAAG,QAAQ,CAAC;YAE5E,OAAO;gBACL,OAAO;gBACP,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;aAC/D,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,SAAS,CAAC,OAAO;SAC3B,CAAC;IACJ,CAAC;CACF,CAAA;AA7DY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,cAAK,EAAC,sBAAa,CAAC;GACR,mBAAmB,CA6D/B"}
|
|
@@ -2,4 +2,6 @@ import { ArgumentsHost, ExceptionFilter, UnprocessableEntityException } from '@n
|
|
|
2
2
|
export declare class UnprocessableEntityExceptionFilter implements ExceptionFilter<UnprocessableEntityException> {
|
|
3
3
|
catch(exception: UnprocessableEntityException, host: ArgumentsHost): void;
|
|
4
4
|
private processValidationErrors;
|
|
5
|
+
private cleanValidationError;
|
|
6
|
+
private processConstraints;
|
|
5
7
|
}
|
|
@@ -9,38 +9,46 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.UnprocessableEntityExceptionFilter = void 0;
|
|
10
10
|
const helper_fns_1 = require("@codylabs/helper-fns");
|
|
11
11
|
const common_1 = require("@nestjs/common");
|
|
12
|
+
const utils_1 = require("../utils");
|
|
12
13
|
let UnprocessableEntityExceptionFilter = class UnprocessableEntityExceptionFilter {
|
|
13
14
|
catch(exception, host) {
|
|
14
15
|
const ctx = host.switchToHttp();
|
|
15
16
|
const response = ctx.getResponse();
|
|
16
17
|
const statusCode = exception.getStatus();
|
|
17
|
-
const
|
|
18
|
-
const validationErrors =
|
|
19
|
-
this.processValidationErrors(validationErrors);
|
|
18
|
+
const exceptionResponse = exception.getResponse();
|
|
19
|
+
const validationErrors = exceptionResponse.message;
|
|
20
|
+
const processedErrors = this.processValidationErrors(validationErrors);
|
|
20
21
|
response.status(statusCode).json({
|
|
21
22
|
error: {
|
|
22
23
|
code: statusCode,
|
|
23
24
|
status: common_1.HttpStatus[statusCode],
|
|
24
25
|
message: 'Validation failed',
|
|
25
|
-
details:
|
|
26
|
+
...((0, utils_1.isDevelopment)() ? { details: processedErrors } : {}),
|
|
26
27
|
},
|
|
27
28
|
});
|
|
28
29
|
}
|
|
29
30
|
processValidationErrors(validationErrors) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
validationError
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
31
|
+
return validationErrors.map((error) => this.cleanValidationError(error));
|
|
32
|
+
}
|
|
33
|
+
cleanValidationError(validationError) {
|
|
34
|
+
const cleanedError = {
|
|
35
|
+
...validationError,
|
|
36
|
+
target: undefined,
|
|
37
|
+
children: validationError.children && !(0, helper_fns_1.isEmpty)(validationError.children)
|
|
38
|
+
? this.processValidationErrors(validationError.children)
|
|
39
|
+
: undefined,
|
|
40
|
+
constraints: this.processConstraints(validationError.constraints),
|
|
41
|
+
};
|
|
42
|
+
return cleanedError;
|
|
43
|
+
}
|
|
44
|
+
processConstraints(constraints) {
|
|
45
|
+
if (!constraints) {
|
|
46
|
+
return undefined;
|
|
43
47
|
}
|
|
48
|
+
return Object.entries(constraints).reduce((acc, [key, value]) => {
|
|
49
|
+
acc[key] = value || `error.fields.${(0, helper_fns_1.snake)(key)}`;
|
|
50
|
+
return acc;
|
|
51
|
+
}, {});
|
|
44
52
|
}
|
|
45
53
|
};
|
|
46
54
|
exports.UnprocessableEntityExceptionFilter = UnprocessableEntityExceptionFilter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unprocessable-entity-exception.filter.js","sourceRoot":"","sources":["../../src/filters/unprocessable-entity-exception.filter.ts"],"names":[],"mappings":";;;;;;;;;AAAA,qDAAsD;AACtD,2CAAiH;
|
|
1
|
+
{"version":3,"file":"unprocessable-entity-exception.filter.js","sourceRoot":"","sources":["../../src/filters/unprocessable-entity-exception.filter.ts"],"names":[],"mappings":";;;;;;;;;AAAA,qDAAsD;AACtD,2CAAiH;AAMjH,oCAAyC;AAGlC,IAAM,kCAAkC,GAAxC,MAAM,kCAAkC;IAC7C,KAAK,CAAC,SAAuC,EAAE,IAAmB;QAChE,MAAM,GAAG,GAAsB,IAAI,CAAC,YAAY,EAAE,CAAC;QACnD,MAAM,QAAQ,GAAa,GAAG,CAAC,WAAW,EAAY,CAAC;QACvD,MAAM,UAAU,GAAW,SAAS,CAAC,SAAS,EAAE,CAAC;QACjD,MAAM,iBAAiB,GAAG,SAAS,CAAC,WAAW,EAAoC,CAAC;QACpF,MAAM,gBAAgB,GAAsB,iBAAiB,CAAC,OAAO,CAAC;QAEtE,MAAM,eAAe,GAAG,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;QAEvE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;YAC/B,KAAK,EAAE;gBACL,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,mBAAU,CAAC,UAAU,CAAC;gBAC9B,OAAO,EAAE,mBAAmB;gBAC5B,GAAG,CAAC,IAAA,qBAAa,GAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjC;SAC1B,CAAC,CAAC;IACL,CAAC;IAEO,uBAAuB,CAAC,gBAAmC;QACjE,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,CAAC;IAEO,oBAAoB,CAAC,eAAgC;QAC3D,MAAM,YAAY,GAAoB;YACpC,GAAG,eAAe;YAClB,MAAM,EAAE,SAAS;YACjB,QAAQ,EACN,eAAe,CAAC,QAAQ,IAAI,CAAC,IAAA,oBAAO,EAAC,eAAe,CAAC,QAAQ,CAAC;gBAC5D,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,QAAQ,CAAC;gBACxD,CAAC,CAAC,SAAS;YACf,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,WAAW,CAAC;SAClE,CAAC;QAEF,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,kBAAkB,CAAC,WAA+C;QACxE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CACvC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACpB,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,gBAAgB,IAAA,kBAAK,EAAC,GAAG,CAAC,EAAE,CAAC;YAEjD,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAA4B,CAC7B,CAAC;IACJ,CAAC;CACF,CAAA;AApDY,gFAAkC;6CAAlC,kCAAkC;IAD9C,IAAA,cAAK,EAAC,qCAA4B,CAAC;GACvB,kCAAkC,CAoD9C"}
|