@nest-yalc-2/errors 1.3.4

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 (64) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +37 -0
  3. package/package.json +42 -0
  4. package/src/__tests__/database-exception.filter.spec.ts +71 -0
  5. package/src/__tests__/default.error.spec.ts +529 -0
  6. package/src/__tests__/error.helper.spec.ts +23 -0
  7. package/src/__tests__/errors.enum.spec.ts +32 -0
  8. package/src/__tests__/http-exception.filter.spec.ts +129 -0
  9. package/src/__tests__/http-status-code-to-errors.spec.ts +26 -0
  10. package/src/__tests__/input-validation.error.spec.ts +27 -0
  11. package/src/__tests__/login.error.spec.ts +23 -0
  12. package/src/__tests__/result.error.spec.ts +47 -0
  13. package/src/__tests__/system-exception.filter.spec.ts +39 -0
  14. package/src/__tests__/tsconfig.json +3 -0
  15. package/src/__tests__/validation-exception.filter.spec.ts +31 -0
  16. package/src/__tests__/verification.error.spec.ts +28 -0
  17. package/src/default.error.d.ts +93 -0
  18. package/src/default.error.js +266 -0
  19. package/src/default.error.js.map +1 -0
  20. package/src/default.error.ts +640 -0
  21. package/src/error.class.d.ts +103 -0
  22. package/src/error.class.js +170 -0
  23. package/src/error.class.js.map +1 -0
  24. package/src/error.class.ts +319 -0
  25. package/src/error.enum.d.ts +29 -0
  26. package/src/error.enum.js +41 -0
  27. package/src/error.enum.js.map +1 -0
  28. package/src/error.enum.ts +45 -0
  29. package/src/error.helper.d.ts +2 -0
  30. package/src/error.helper.js +20 -0
  31. package/src/error.helper.js.map +1 -0
  32. package/src/error.helper.ts +34 -0
  33. package/src/filters/database-exception.filter.d.ts +7 -0
  34. package/src/filters/database-exception.filter.js +74 -0
  35. package/src/filters/database-exception.filter.js.map +1 -0
  36. package/src/filters/database-exception.filter.ts +43 -0
  37. package/src/filters/http-exception.filter.d.ts +16 -0
  38. package/src/filters/http-exception.filter.js +145 -0
  39. package/src/filters/http-exception.filter.js.map +1 -0
  40. package/src/filters/http-exception.filter.ts +143 -0
  41. package/src/filters/index.d.ts +1 -0
  42. package/src/filters/index.js +6 -0
  43. package/src/filters/index.js.map +1 -0
  44. package/src/filters/index.ts +6 -0
  45. package/src/filters/system-exception.filter.d.ts +7 -0
  46. package/src/filters/system-exception.filter.js +29 -0
  47. package/src/filters/system-exception.filter.js.map +1 -0
  48. package/src/filters/system-exception.filter.ts +13 -0
  49. package/src/filters/validation-exception.filter.d.ts +8 -0
  50. package/src/filters/validation-exception.filter.js +66 -0
  51. package/src/filters/validation-exception.filter.js.map +1 -0
  52. package/src/filters/validation-exception.filter.ts +24 -0
  53. package/src/http-status-code-to-errors.d.ts +4 -0
  54. package/src/http-status-code-to-errors.js +24 -0
  55. package/src/http-status-code-to-errors.js.map +1 -0
  56. package/src/http-status-code-to-errors.ts +41 -0
  57. package/src/index.d.ts +5 -0
  58. package/src/index.js +24 -0
  59. package/src/index.js.map +1 -0
  60. package/src/index.ts +7 -0
  61. package/src/result.error.d.ts +4 -0
  62. package/src/result.error.js +24 -0
  63. package/src/result.error.js.map +1 -0
  64. package/src/result.error.ts +25 -0
@@ -0,0 +1,66 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __metadata = (this && this.__metadata) || function (k, v) {
42
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.ValidationExceptionFilter = void 0;
46
+ const crud_gen_error_js_1 = require("@nest-yalc-2/crud-gen/crud-gen.error.js");
47
+ const uuid_validation_error_js_1 = require("@nest-yalc-2/graphql/scalars/uuid-validation.error.js");
48
+ const common = __importStar(require("@nestjs/common"));
49
+ const index_js_1 = require("../index.js");
50
+ let ValidationExceptionFilter = class ValidationExceptionFilter {
51
+ constructor(logger) {
52
+ this.logger = logger;
53
+ }
54
+ catch(error) {
55
+ const newError = new index_js_1.InputValidationError(error.systemMessage, { response: { message: error.message } });
56
+ newError.stack = error.stack;
57
+ this.logger.error(error.systemMessage ?? newError.message, newError.stack);
58
+ return newError;
59
+ }
60
+ };
61
+ exports.ValidationExceptionFilter = ValidationExceptionFilter;
62
+ exports.ValidationExceptionFilter = ValidationExceptionFilter = __decorate([
63
+ common.Catch(uuid_validation_error_js_1.UUIDValidationError, crud_gen_error_js_1.CrudGenError),
64
+ __metadata("design:paramtypes", [Object])
65
+ ], ValidationExceptionFilter);
66
+ //# sourceMappingURL=validation-exception.filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-exception.filter.js","sourceRoot":"","sources":["validation-exception.filter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+EAAuE;AACvE,oGAA4F;AAC5F,uDAAyC;AAEzC,0CAAmD;AAG5C,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IACpC,YAAoB,MAA4B;QAA5B,WAAM,GAAN,MAAM,CAAsB;IAAG,CAAC;IAEpD,KAAK,CAAC,KAAY;QAChB,MAAM,QAAQ,GAAG,IAAI,+BAAoB,CACxB,KAAM,CAAC,aAAa,EACnC,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CACzC,CAAC;QACF,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CACA,KAAM,CAAC,aAAa,IAAI,QAAQ,CAAC,OAAO,EACvD,QAAQ,CAAC,KAAK,CACf,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAA;AAhBY,8DAAyB;oCAAzB,yBAAyB;IADrC,MAAM,CAAC,KAAK,CAAC,8CAAmB,EAAE,gCAAY,CAAC;;GACnC,yBAAyB,CAgBrC"}
@@ -0,0 +1,24 @@
1
+ import { CrudGenError } from '@nest-yalc-2/crud-gen/crud-gen.error.js';
2
+ import { UUIDValidationError } from '@nest-yalc-2/graphql/scalars/uuid-validation.error.js';
3
+ import * as common from '@nestjs/common';
4
+ import { GqlExceptionFilter } from '@nestjs/graphql';
5
+ import { InputValidationError } from '../index.js';
6
+
7
+ @common.Catch(UUIDValidationError, CrudGenError)
8
+ export class ValidationExceptionFilter implements GqlExceptionFilter {
9
+ constructor(private logger: common.LoggerService) {}
10
+
11
+ catch(error: Error) {
12
+ const newError = new InputValidationError(
13
+ (<CrudGenError>error).systemMessage,
14
+ { response: { message: error.message } },
15
+ );
16
+ newError.stack = error.stack; // we need the stack trace for dev
17
+ this.logger.error(
18
+ (<CrudGenError>error).systemMessage ?? newError.message,
19
+ newError.stack,
20
+ );
21
+
22
+ return newError;
23
+ }
24
+ }
@@ -0,0 +1,4 @@
1
+ import { HttpStatusCodes } from '@nest-yalc-2/utils/http.helper.js';
2
+ export declare const httpStatusCodeToErrors: {
3
+ [key in HttpStatusCodes]?: any;
4
+ };
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.httpStatusCodeToErrors = void 0;
4
+ const error_class_js_1 = require("./error.class.js");
5
+ const common_1 = require("@nestjs/common");
6
+ exports.httpStatusCodeToErrors = {
7
+ [common_1.HttpStatus.BAD_REQUEST]: error_class_js_1.BadRequestError,
8
+ [common_1.HttpStatus.UNAUTHORIZED]: error_class_js_1.UnauthorizedError,
9
+ [common_1.HttpStatus.FORBIDDEN]: error_class_js_1.ForbiddenError,
10
+ [common_1.HttpStatus.NOT_FOUND]: error_class_js_1.NotFoundError,
11
+ [common_1.HttpStatus.CONFLICT]: error_class_js_1.ConflictError,
12
+ [common_1.HttpStatus.INTERNAL_SERVER_ERROR]: error_class_js_1.InternalServerError,
13
+ [common_1.HttpStatus.PAYMENT_REQUIRED]: error_class_js_1.PaymentRequiredError,
14
+ [common_1.HttpStatus.METHOD_NOT_ALLOWED]: error_class_js_1.MethodNotAllowedError,
15
+ [common_1.HttpStatus.GONE]: error_class_js_1.GoneError,
16
+ [common_1.HttpStatus.UNSUPPORTED_MEDIA_TYPE]: error_class_js_1.UnsupportedMediaTypeError,
17
+ [common_1.HttpStatus.UNPROCESSABLE_ENTITY]: error_class_js_1.UnprocessableEntityError,
18
+ [common_1.HttpStatus.TOO_MANY_REQUESTS]: error_class_js_1.TooManyRequestsError,
19
+ [common_1.HttpStatus.NOT_IMPLEMENTED]: error_class_js_1.NotImplementedError,
20
+ [common_1.HttpStatus.BAD_GATEWAY]: error_class_js_1.BadGatewayError,
21
+ [common_1.HttpStatus.SERVICE_UNAVAILABLE]: error_class_js_1.ServiceUnavailableError,
22
+ [common_1.HttpStatus.GATEWAY_TIMEOUT]: error_class_js_1.GatewayTimeoutError,
23
+ };
24
+ //# sourceMappingURL=http-status-code-to-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-status-code-to-errors.js","sourceRoot":"","sources":["http-status-code-to-errors.ts"],"names":[],"mappings":";;;AAAA,qDAiB0B;AAE1B,2CAA4C;AAE/B,QAAA,sBAAsB,GAE/B;IACF,CAAC,mBAAU,CAAC,WAAW,CAAC,EAAE,gCAAe;IACzC,CAAC,mBAAU,CAAC,YAAY,CAAC,EAAE,kCAAiB;IAC5C,CAAC,mBAAU,CAAC,SAAS,CAAC,EAAE,+BAAc;IACtC,CAAC,mBAAU,CAAC,SAAS,CAAC,EAAE,8BAAa;IACrC,CAAC,mBAAU,CAAC,QAAQ,CAAC,EAAE,8BAAa;IACpC,CAAC,mBAAU,CAAC,qBAAqB,CAAC,EAAE,oCAAmB;IACvD,CAAC,mBAAU,CAAC,gBAAgB,CAAC,EAAE,qCAAoB;IACnD,CAAC,mBAAU,CAAC,kBAAkB,CAAC,EAAE,sCAAqB;IACtD,CAAC,mBAAU,CAAC,IAAI,CAAC,EAAE,0BAAS;IAC5B,CAAC,mBAAU,CAAC,sBAAsB,CAAC,EAAE,0CAAyB;IAC9D,CAAC,mBAAU,CAAC,oBAAoB,CAAC,EAAE,yCAAwB;IAC3D,CAAC,mBAAU,CAAC,iBAAiB,CAAC,EAAE,qCAAoB;IACpD,CAAC,mBAAU,CAAC,eAAe,CAAC,EAAE,oCAAmB;IACjD,CAAC,mBAAU,CAAC,WAAW,CAAC,EAAE,gCAAe;IACzC,CAAC,mBAAU,CAAC,mBAAmB,CAAC,EAAE,wCAAuB;IACzD,CAAC,mBAAU,CAAC,eAAe,CAAC,EAAE,oCAAmB;CAClD,CAAC"}
@@ -0,0 +1,41 @@
1
+ import {
2
+ BadGatewayError,
3
+ BadRequestError,
4
+ ConflictError,
5
+ ForbiddenError,
6
+ GatewayTimeoutError,
7
+ GoneError,
8
+ InternalServerError,
9
+ MethodNotAllowedError,
10
+ NotFoundError,
11
+ NotImplementedError,
12
+ PaymentRequiredError,
13
+ ServiceUnavailableError,
14
+ TooManyRequestsError,
15
+ UnauthorizedError,
16
+ UnprocessableEntityError,
17
+ UnsupportedMediaTypeError,
18
+ } from './error.class.js';
19
+ import { HttpStatusCodes } from '@nest-yalc-2/utils/http.helper.js';
20
+ import { HttpStatus } from '@nestjs/common';
21
+
22
+ export const httpStatusCodeToErrors: {
23
+ [key in HttpStatusCodes]?: any;
24
+ } = {
25
+ [HttpStatus.BAD_REQUEST]: BadRequestError,
26
+ [HttpStatus.UNAUTHORIZED]: UnauthorizedError,
27
+ [HttpStatus.FORBIDDEN]: ForbiddenError,
28
+ [HttpStatus.NOT_FOUND]: NotFoundError,
29
+ [HttpStatus.CONFLICT]: ConflictError,
30
+ [HttpStatus.INTERNAL_SERVER_ERROR]: InternalServerError,
31
+ [HttpStatus.PAYMENT_REQUIRED]: PaymentRequiredError,
32
+ [HttpStatus.METHOD_NOT_ALLOWED]: MethodNotAllowedError,
33
+ [HttpStatus.GONE]: GoneError,
34
+ [HttpStatus.UNSUPPORTED_MEDIA_TYPE]: UnsupportedMediaTypeError,
35
+ [HttpStatus.UNPROCESSABLE_ENTITY]: UnprocessableEntityError,
36
+ [HttpStatus.TOO_MANY_REQUESTS]: TooManyRequestsError,
37
+ [HttpStatus.NOT_IMPLEMENTED]: NotImplementedError,
38
+ [HttpStatus.BAD_GATEWAY]: BadGatewayError,
39
+ [HttpStatus.SERVICE_UNAVAILABLE]: ServiceUnavailableError,
40
+ [HttpStatus.GATEWAY_TIMEOUT]: GatewayTimeoutError,
41
+ };
package/src/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export { MissingArgumentsError } from '@nest-yalc-2/crud-gen';
2
+ export * from './error.enum.js';
3
+ export * from './error.class.js';
4
+ export * from './default.error.js';
5
+ export * from './result.error.js';
package/src/index.js ADDED
@@ -0,0 +1,24 @@
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
+ exports.MissingArgumentsError = void 0;
18
+ var crud_gen_1 = require("@nest-yalc-2/crud-gen");
19
+ Object.defineProperty(exports, "MissingArgumentsError", { enumerable: true, get: function () { return crud_gen_1.MissingArgumentsError; } });
20
+ __exportStar(require("./error.enum.js"), exports);
21
+ __exportStar(require("./error.class.js"), exports);
22
+ __exportStar(require("./default.error.js"), exports);
23
+ __exportStar(require("./result.error.js"), exports);
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAEA,kDAA8D;AAArD,iHAAA,qBAAqB,OAAA;AAC9B,kDAAgC;AAChC,mDAAiC;AACjC,qDAAmC;AACnC,oDAAkC"}
package/src/index.ts ADDED
@@ -0,0 +1,7 @@
1
+ /* istanbul ignore file */
2
+
3
+ export { MissingArgumentsError } from '@nest-yalc-2/crud-gen';
4
+ export * from './error.enum.js';
5
+ export * from './error.class.js';
6
+ export * from './default.error.js';
7
+ export * from './result.error.js';
@@ -0,0 +1,4 @@
1
+ import { Result } from '@nest-yalc-2/event-manager/event-result.types.js';
2
+ import { IDefaultErrorOptions } from './default.error.js';
3
+ export declare const tryCatch: <T>(fn: () => T, options?: IDefaultErrorOptions) => Result<T>;
4
+ export declare const tryCatchAsync: <T>(fn: () => Promise<T>, options?: IDefaultErrorOptions) => Promise<Result<T>>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tryCatchAsync = exports.tryCatch = void 0;
4
+ const neverthrow_1 = require("neverthrow");
5
+ const default_error_js_1 = require("./default.error.js");
6
+ const tryCatch = (fn, options = {}) => {
7
+ try {
8
+ return (0, neverthrow_1.ok)(fn());
9
+ }
10
+ catch (error) {
11
+ return (0, neverthrow_1.err)((0, default_error_js_1.errorToDefaultError)(error, options));
12
+ }
13
+ };
14
+ exports.tryCatch = tryCatch;
15
+ const tryCatchAsync = async (fn, options = {}) => {
16
+ try {
17
+ return (0, neverthrow_1.ok)(await fn());
18
+ }
19
+ catch (error) {
20
+ return (0, neverthrow_1.err)((0, default_error_js_1.errorToDefaultError)(error, options));
21
+ }
22
+ };
23
+ exports.tryCatchAsync = tryCatchAsync;
24
+ //# sourceMappingURL=result.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.error.js","sourceRoot":"","sources":["result.error.ts"],"names":[],"mappings":";;;AAAA,2CAAqC;AAErC,yDAA+E;AAExE,MAAM,QAAQ,GAAG,CACtB,EAAW,EACX,UAAgC,EAAE,EACvB,EAAE;IACb,IAAI,CAAC;QACH,OAAO,IAAA,eAAE,EAAC,EAAE,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAA,gBAAG,EAAC,IAAA,sCAAmB,EAAC,KAAc,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC,CAAC;AATW,QAAA,QAAQ,YASnB;AAEK,MAAM,aAAa,GAAG,KAAK,EAChC,EAAoB,EACpB,UAAgC,EAAE,EACd,EAAE;IACtB,IAAI,CAAC;QACH,OAAO,IAAA,eAAE,EAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAA,gBAAG,EAAC,IAAA,sCAAmB,EAAC,KAAc,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC,CAAC;AATW,QAAA,aAAa,iBASxB"}
@@ -0,0 +1,25 @@
1
+ import { err, ok } from 'neverthrow';
2
+ import { Result } from '@nest-yalc-2/event-manager/event-result.types.js';
3
+ import { errorToDefaultError, IDefaultErrorOptions } from './default.error.js';
4
+
5
+ export const tryCatch = <T>(
6
+ fn: () => T,
7
+ options: IDefaultErrorOptions = {},
8
+ ): Result<T> => {
9
+ try {
10
+ return ok(fn());
11
+ } catch (error) {
12
+ return err(errorToDefaultError(error as Error, options));
13
+ }
14
+ };
15
+
16
+ export const tryCatchAsync = async <T>(
17
+ fn: () => Promise<T>,
18
+ options: IDefaultErrorOptions = {},
19
+ ): Promise<Result<T>> => {
20
+ try {
21
+ return ok(await fn());
22
+ } catch (error) {
23
+ return err(errorToDefaultError(error as Error, options));
24
+ }
25
+ };