@tsed/platform-exceptions 6.88.1 → 6.89.0

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 (72) hide show
  1. package/lib/{components → cjs/components}/ErrorFilter.d.ts +0 -0
  2. package/lib/cjs/components/ErrorFilter.js +48 -0
  3. package/lib/cjs/components/ErrorFilter.js.map +1 -0
  4. package/lib/{components → cjs/components}/ExceptionFilter.d.ts +0 -0
  5. package/lib/cjs/components/ExceptionFilter.js +23 -0
  6. package/lib/cjs/components/ExceptionFilter.js.map +1 -0
  7. package/lib/{components → cjs/components}/MongooseErrorFilter.d.ts +0 -0
  8. package/lib/cjs/components/MongooseErrorFilter.js +17 -0
  9. package/lib/cjs/components/MongooseErrorFilter.js.map +1 -0
  10. package/lib/{components → cjs/components}/StringErrorFilter.d.ts +0 -0
  11. package/lib/cjs/components/StringErrorFilter.js +16 -0
  12. package/lib/cjs/components/StringErrorFilter.js.map +1 -0
  13. package/lib/{decorators → cjs/decorators}/catch.d.ts +0 -0
  14. package/lib/cjs/decorators/catch.js +23 -0
  15. package/lib/cjs/decorators/catch.js.map +1 -0
  16. package/lib/{domain → cjs/domain}/ExceptionFiltersContainer.d.ts +0 -0
  17. package/lib/cjs/domain/ExceptionFiltersContainer.js +16 -0
  18. package/lib/cjs/domain/ExceptionFiltersContainer.js.map +1 -0
  19. package/lib/{domain → cjs/domain}/ExceptionSchema.d.ts +0 -0
  20. package/lib/cjs/domain/ExceptionSchema.js +36 -0
  21. package/lib/cjs/domain/ExceptionSchema.js.map +1 -0
  22. package/lib/{errors → cjs/errors}/ResourceNotFound.d.ts +0 -0
  23. package/lib/cjs/errors/ResourceNotFound.js +12 -0
  24. package/lib/cjs/errors/ResourceNotFound.js.map +1 -0
  25. package/lib/{index.d.ts → cjs/index.d.ts} +0 -0
  26. package/lib/cjs/index.js +19 -0
  27. package/lib/cjs/index.js.map +1 -0
  28. package/lib/{interfaces → cjs/interfaces}/ExceptionFilterMethods.d.ts +0 -0
  29. package/lib/cjs/interfaces/ExceptionFilterMethods.js +3 -0
  30. package/lib/cjs/interfaces/ExceptionFilterMethods.js.map +1 -0
  31. package/lib/{services → cjs/services}/PlatformExceptions.d.ts +0 -0
  32. package/lib/cjs/services/PlatformExceptions.js +55 -0
  33. package/lib/cjs/services/PlatformExceptions.js.map +1 -0
  34. package/lib/esm/components/ErrorFilter.js +45 -0
  35. package/lib/esm/components/ErrorFilter.js.map +1 -0
  36. package/lib/esm/components/ExceptionFilter.js +20 -0
  37. package/lib/esm/components/ExceptionFilter.js.map +1 -0
  38. package/lib/esm/components/MongooseErrorFilter.js +14 -0
  39. package/lib/esm/components/MongooseErrorFilter.js.map +1 -0
  40. package/lib/esm/components/StringErrorFilter.js +13 -0
  41. package/lib/esm/components/StringErrorFilter.js.map +1 -0
  42. package/lib/esm/decorators/catch.js +19 -0
  43. package/lib/esm/decorators/catch.js.map +1 -0
  44. package/lib/esm/domain/ExceptionFiltersContainer.js +12 -0
  45. package/lib/esm/domain/ExceptionFiltersContainer.js.map +1 -0
  46. package/lib/esm/domain/ExceptionSchema.js +33 -0
  47. package/lib/esm/domain/ExceptionSchema.js.map +1 -0
  48. package/lib/esm/errors/ResourceNotFound.js +8 -0
  49. package/lib/esm/errors/ResourceNotFound.js.map +1 -0
  50. package/lib/esm/index.js +16 -0
  51. package/lib/esm/index.js.map +1 -0
  52. package/lib/esm/interfaces/ExceptionFilterMethods.js +2 -0
  53. package/lib/esm/interfaces/ExceptionFilterMethods.js.map +1 -0
  54. package/lib/esm/services/PlatformExceptions.js +52 -0
  55. package/lib/esm/services/PlatformExceptions.js.map +1 -0
  56. package/lib/types/components/ErrorFilter.d.ts +15 -0
  57. package/lib/types/components/ExceptionFilter.d.ts +6 -0
  58. package/lib/types/components/MongooseErrorFilter.d.ts +5 -0
  59. package/lib/types/components/StringErrorFilter.d.ts +5 -0
  60. package/lib/types/decorators/catch.d.ts +7 -0
  61. package/lib/types/domain/ExceptionFiltersContainer.d.ts +14 -0
  62. package/lib/types/domain/ExceptionSchema.d.ts +1 -0
  63. package/lib/types/errors/ResourceNotFound.d.ts +5 -0
  64. package/lib/types/index.d.ts +10 -0
  65. package/lib/types/interfaces/ExceptionFilterMethods.d.ts +4 -0
  66. package/lib/types/services/PlatformExceptions.d.ts +15 -0
  67. package/package.json +18 -14
  68. package/tsconfig.compile.esm.json +23 -0
  69. package/lib/index.js +0 -248
  70. package/lib/index.js.map +0 -1
  71. package/lib/index.modern.js +0 -224
  72. package/lib/index.modern.js.map +0 -1
@@ -1,224 +0,0 @@
1
- import { __decorate, __metadata } from 'tslib';
2
- import { registerProvider, Inject, InjectorService, Injectable } from '@tsed/di';
3
- import * as Exceptions from '@tsed/exceptions';
4
- import { Exception, BadRequest, NotFound } from '@tsed/exceptions';
5
- import { Env, nameOf, classOf, ancestorsOf } from '@tsed/core';
6
- import { object, string, from, number, array, getStatusConstant, defineStatusModel } from '@tsed/schema';
7
-
8
- /**
9
- * @ignore
10
- */
11
- // tslint:disable-next-line:variable-name
12
- const ExceptionFiltersContainer = new Map();
13
- /**
14
- * @ignore
15
- */
16
-
17
- function registerExceptionType(type, token) {
18
- ExceptionFiltersContainer.set(type, token);
19
- }
20
-
21
- /**
22
- * Register a new class to handle an specific exception.
23
- * @decorator
24
- * @param types
25
- */
26
-
27
- function Catch(...types) {
28
- return target => {
29
- types.forEach(type => {
30
- registerExceptionType(type, target);
31
- });
32
- registerProvider({
33
- provide: target,
34
- useClass: target
35
- });
36
- };
37
- }
38
-
39
- const toHTML = (message = "") => message.replace(/\n/gi, "<br />");
40
-
41
- let StringErrorFilter = class StringErrorFilter {
42
- catch(error, ctx) {
43
- ctx.response.status(404).body(toHTML(error));
44
- }
45
-
46
- };
47
- StringErrorFilter = __decorate([Catch(String)], StringErrorFilter);
48
-
49
- function _extends() {
50
- _extends = Object.assign || function (target) {
51
- for (var i = 1; i < arguments.length; i++) {
52
- var source = arguments[i];
53
-
54
- for (var key in source) {
55
- if (Object.prototype.hasOwnProperty.call(source, key)) {
56
- target[key] = source[key];
57
- }
58
- }
59
- }
60
-
61
- return target;
62
- };
63
-
64
- return _extends.apply(this, arguments);
65
- }
66
-
67
- let ErrorFilter = class ErrorFilter {
68
- catch(error, ctx) {
69
- const {
70
- response,
71
- logger,
72
- env
73
- } = ctx;
74
- const err = this.mapError(error, env);
75
- logger.error({
76
- error: _extends({}, err, {
77
- stack: error.stack
78
- })
79
- });
80
- response.setHeaders(this.getHeaders(error)).status(err.status).contentType("application/json").body(env === Env.PROD ? "InternalServerError" : err);
81
- }
82
-
83
- mapError(error, env) {
84
- var _error$origin;
85
-
86
- return {
87
- name: ((_error$origin = error.origin) == null ? void 0 : _error$origin.name) || error.name,
88
- message: error.message,
89
- status: error.status || 500,
90
- errors: this.getErrors(error),
91
- stack: env === Env.DEV ? error.stack : undefined
92
- };
93
- }
94
-
95
- getErrors(error) {
96
- return [error, error.origin].filter(Boolean).reduce((errs, {
97
- errors
98
- }) => {
99
- return errs.concat(errors).filter(Boolean);
100
- }, []);
101
- }
102
-
103
- getHeaders(error) {
104
- return [error, error.origin].filter(Boolean).reduce((obj, {
105
- headers
106
- }) => {
107
- return _extends({}, obj, headers || {});
108
- }, {});
109
- }
110
-
111
- };
112
- ErrorFilter = __decorate([Catch(Error)], ErrorFilter);
113
-
114
- let ExceptionFilter = class ExceptionFilter extends ErrorFilter {
115
- catch(error, ctx) {
116
- const {
117
- response,
118
- logger,
119
- env
120
- } = ctx;
121
- const err = this.mapError(error, env);
122
- logger.error({
123
- error: err,
124
- stack: error.stack
125
- });
126
- response.setHeaders(this.getHeaders(error)).contentType("application/json").status(error.status).body(err);
127
- }
128
-
129
- };
130
- ExceptionFilter = __decorate([Catch(Exception)], ExceptionFilter);
131
-
132
- let MongooseErrorFilter = class MongooseErrorFilter extends ErrorFilter {
133
- catch(error, ctx) {
134
- return super.catch(new BadRequest(error.message, error), ctx);
135
- }
136
-
137
- };
138
- MongooseErrorFilter = __decorate([Catch("MongooseError", "MongoError")], MongooseErrorFilter);
139
-
140
- /**
141
- * @ignore
142
- */
143
-
144
- const ErrorSchema = object({
145
- name: string().required().description("The error name"),
146
- message: string().required().description("An error message")
147
- }).label("GenericError").unknown();
148
- from(Exception).properties({
149
- name: string().required().description("The error name"),
150
- message: string().required().description("An error message"),
151
- status: number().required().description("The status code of the exception"),
152
- errors: array().items(ErrorSchema).description("A list of related errors"),
153
- stack: string().description("The stack trace (only in development mode)")
154
- }); // Auto load models for all Exceptions
155
-
156
- Object.values(Exceptions).forEach(target => {
157
- if (target !== Exception && target.STATUS) {
158
- if (target.STATUS > 302) {
159
- const name = getStatusConstant(target.STATUS);
160
- from(target).properties({
161
- name: string().required().example(name).default(name).description("The error name"),
162
- status: number().required().example(target.STATUS).default(target.STATUS).description("The status code of the exception")
163
- });
164
- defineStatusModel(target.STATUS, target);
165
- }
166
- }
167
- });
168
-
169
- class ResourceNotFound extends NotFound {
170
- constructor(url) {
171
- super(`Resource "${url}" not found`);
172
- this.url = url;
173
- }
174
-
175
- }
176
-
177
- /**
178
- * Catch all errors and return the json error with the right status code when it's possible.
179
- *
180
- * @platform
181
- */
182
-
183
- let PlatformExceptions = class PlatformExceptions {
184
- constructor() {
185
- this.types = new Map();
186
- }
187
-
188
- $onInit() {
189
- ExceptionFiltersContainer.forEach((token, type) => {
190
- this.types.set(type, this.injector.get(token));
191
- });
192
- }
193
-
194
- catch(error, ctx) {
195
- const name = nameOf(classOf(error));
196
-
197
- if (name && this.types.has(name)) {
198
- return this.types.get(name).catch(error, ctx);
199
- }
200
-
201
- const target = ancestorsOf(error).reverse().find(target => this.types.has(target));
202
-
203
- if (target) {
204
- return this.types.get(target).catch(error, ctx);
205
- } // default
206
-
207
-
208
- return this.types.get(Error).catch(error, ctx);
209
- }
210
-
211
- resourceNotFound(ctx) {
212
- return this.catch(new ResourceNotFound(ctx.request.url), ctx);
213
- }
214
-
215
- };
216
-
217
- __decorate([Inject(), __metadata("design:type", InjectorService)], PlatformExceptions.prototype, "injector", void 0);
218
-
219
- PlatformExceptions = __decorate([Injectable({
220
- imports: [ErrorFilter, ExceptionFilter, MongooseErrorFilter, StringErrorFilter]
221
- })], PlatformExceptions);
222
-
223
- export { Catch, ErrorFilter, ExceptionFilter, ExceptionFiltersContainer, MongooseErrorFilter, PlatformExceptions, ResourceNotFound, StringErrorFilter, registerExceptionType };
224
- //# sourceMappingURL=index.modern.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.modern.js","sources":["../src/domain/ExceptionFiltersContainer.ts","../src/decorators/catch.ts","../src/components/StringErrorFilter.ts","../src/components/ErrorFilter.ts","../src/components/ExceptionFilter.ts","../src/components/MongooseErrorFilter.ts","../src/domain/ExceptionSchema.ts","../src/errors/ResourceNotFound.ts","../src/services/PlatformExceptions.ts"],"sourcesContent":["import {Type} from \"@tsed/core\";\nimport type {ExceptionFilterMethods} from \"../interfaces/ExceptionFilterMethods\";\n/**\n * @ignore\n */\nexport type ExceptionFilterKey = Type<any> | Symbol | string;\n/**\n * @ignore\n */\n// tslint:disable-next-line:variable-name\nexport const ExceptionFiltersContainer = new Map<ExceptionFilterKey, Type<ExceptionFilterMethods>>();\n/**\n * @ignore\n */\nexport function registerExceptionType(type: ExceptionFilterKey, token: Type<ExceptionFilterMethods>) {\n ExceptionFiltersContainer.set(type, token);\n}\n","import {Type} from \"@tsed/core\";\nimport {registerProvider} from \"@tsed/di\";\nimport {registerExceptionType} from \"../domain/ExceptionFiltersContainer\";\n\n/**\n * Register a new class to handle an specific exception.\n * @decorator\n * @param types\n */\nexport function Catch(...types: (Type<Error | any> | string)[]) {\n return (target: any) => {\n types.forEach((type) => {\n registerExceptionType(type, target as any);\n });\n registerProvider({\n provide: target,\n useClass: target\n });\n };\n}\n","import {BaseContext} from \"@tsed/di\";\nimport {Catch} from \"../decorators/catch\";\nimport type {ExceptionFilterMethods} from \"../interfaces/ExceptionFilterMethods\";\n\nconst toHTML = (message = \"\") => message.replace(/\\n/gi, \"<br />\");\n\n@Catch(String)\nexport class StringErrorFilter implements ExceptionFilterMethods {\n catch(error: string, ctx: BaseContext): void {\n ctx.response.status(404).body(toHTML(error));\n }\n}\n","import {Env} from \"@tsed/core\";\nimport {BaseContext} from \"@tsed/di\";\nimport {Catch} from \"../decorators/catch\";\nimport type {ExceptionFilterMethods} from \"../interfaces/ExceptionFilterMethods\";\n\n@Catch(Error)\nexport class ErrorFilter implements ExceptionFilterMethods {\n catch(error: any, ctx: BaseContext): void {\n const {response, logger, env} = ctx;\n const err = this.mapError(error, env);\n\n logger.error({\n error: {...err, stack: error.stack}\n });\n\n response\n .setHeaders(this.getHeaders(error))\n .status(err.status)\n .contentType(\"application/json\")\n .body(env === Env.PROD ? \"InternalServerError\" : err);\n }\n\n mapError(error: any, env?: Env) {\n return {\n name: error.origin?.name || error.name,\n message: error.message,\n status: error.status || 500,\n errors: this.getErrors(error),\n stack: env === Env.DEV ? error.stack : undefined\n };\n }\n\n protected getErrors(error: any) {\n return [error, error.origin].filter(Boolean).reduce((errs, {errors}: any) => {\n return errs.concat(errors).filter(Boolean);\n }, []);\n }\n\n protected getHeaders(error: any) {\n return [error, error.origin].filter(Boolean).reduce((obj, {headers}: any) => {\n return {\n ...obj,\n ...(headers || {})\n };\n }, {});\n }\n}\n","import {BaseContext} from \"@tsed/di\";\nimport {Exception} from \"@tsed/exceptions\";\nimport {Catch} from \"../decorators/catch\";\nimport {ErrorFilter} from \"./ErrorFilter\";\n\n@Catch(Exception)\nexport class ExceptionFilter extends ErrorFilter {\n catch(error: Exception, ctx: BaseContext) {\n const {response, logger, env} = ctx;\n const err = this.mapError(error, env);\n logger.error({\n error: err,\n stack: error.stack\n });\n\n response.setHeaders(this.getHeaders(error)).contentType(\"application/json\").status(error.status).body(err);\n }\n}\n","import {BaseContext} from \"@tsed/di\";\nimport {BadRequest} from \"@tsed/exceptions\";\nimport {Catch} from \"../decorators/catch\";\nimport {ErrorFilter} from \"./ErrorFilter\";\n\n@Catch(\"MongooseError\", \"MongoError\")\nexport class MongooseErrorFilter extends ErrorFilter {\n catch(error: Error, ctx: BaseContext) {\n return super.catch(new BadRequest(error.message, error), ctx);\n }\n}\n","import * as Exceptions from \"@tsed/exceptions\";\nimport {Exception} from \"@tsed/exceptions\";\nimport {array, defineStatusModel, from, getStatusConstant, number, object, string} from \"@tsed/schema\";\n\n/**\n * @ignore\n */\nconst ErrorSchema = object({\n name: string().required().description(\"The error name\"),\n message: string().required().description(\"An error message\")\n})\n .label(\"GenericError\")\n .unknown();\n\nfrom(Exception).properties({\n name: string().required().description(\"The error name\"),\n message: string().required().description(\"An error message\"),\n status: number().required().description(\"The status code of the exception\"),\n errors: array().items(ErrorSchema).description(\"A list of related errors\"),\n stack: string().description(\"The stack trace (only in development mode)\")\n});\n\n// Auto load models for all Exceptions\nObject.values(Exceptions).forEach((target: any) => {\n if (target !== Exception && target.STATUS) {\n if (target.STATUS > 302) {\n const name = getStatusConstant(target.STATUS);\n from(target).properties({\n name: string().required().example(name).default(name).description(\"The error name\"),\n status: number().required().example(target.STATUS).default(target.STATUS).description(\"The status code of the exception\")\n });\n\n defineStatusModel(target.STATUS, target);\n }\n }\n});\n","import {NotFound} from \"@tsed/exceptions\";\n\nexport class ResourceNotFound extends NotFound {\n readonly url: string;\n\n constructor(url: string) {\n super(`Resource \"${url}\" not found`);\n\n this.url = url;\n }\n}\n","import {ancestorsOf, classOf, nameOf} from \"@tsed/core\";\nimport {BaseContext, Inject, Injectable, InjectorService} from \"@tsed/di\";\nimport {ErrorFilter} from \"../components/ErrorFilter\";\nimport {ExceptionFilter} from \"../components/ExceptionFilter\";\nimport {MongooseErrorFilter} from \"../components/MongooseErrorFilter\";\nimport {StringErrorFilter} from \"../components/StringErrorFilter\";\nimport {ExceptionFilterKey, ExceptionFiltersContainer} from \"../domain/ExceptionFiltersContainer\";\nimport {ResourceNotFound} from \"../errors/ResourceNotFound\";\nimport {ExceptionFilterMethods} from \"../interfaces/ExceptionFilterMethods\";\n\n/**\n * Catch all errors and return the json error with the right status code when it's possible.\n *\n * @platform\n */\n@Injectable({\n imports: [ErrorFilter, ExceptionFilter, MongooseErrorFilter, StringErrorFilter]\n})\nexport class PlatformExceptions {\n types: Map<ExceptionFilterKey, ExceptionFilterMethods> = new Map();\n\n @Inject()\n injector: InjectorService;\n\n $onInit() {\n ExceptionFiltersContainer.forEach((token, type) => {\n this.types.set(type, this.injector.get(token)!);\n });\n }\n\n catch(error: unknown, ctx: BaseContext) {\n const name = nameOf(classOf(error));\n\n if (name && this.types.has(name)) {\n return this.types.get(name)!.catch(error, ctx);\n }\n\n const target = ancestorsOf(error)\n .reverse()\n .find((target) => this.types.has(target));\n\n if (target) {\n return this.types.get(target)!.catch(error, ctx);\n }\n\n // default\n return this.types.get(Error)!.catch(error, ctx);\n }\n\n resourceNotFound(ctx: BaseContext) {\n return this.catch(new ResourceNotFound(ctx.request.url), ctx);\n }\n}\n"],"names":["ExceptionFiltersContainer","Map","registerExceptionType","type","token","set","Catch","types","target","forEach","registerProvider","provide","useClass","toHTML","message","replace","StringErrorFilter","catch","error","ctx","response","status","body","String","ErrorFilter","logger","env","err","mapError","stack","setHeaders","getHeaders","contentType","Env","PROD","name","origin","errors","getErrors","DEV","undefined","filter","Boolean","reduce","errs","concat","obj","headers","Error","ExceptionFilter","Exception","MongooseErrorFilter","BadRequest","ErrorSchema","object","string","required","description","label","unknown","from","properties","number","array","items","Object","values","Exceptions","STATUS","getStatusConstant","example","default","defineStatusModel","ResourceNotFound","NotFound","constructor","url","PlatformExceptions","$onInit","injector","get","nameOf","classOf","has","ancestorsOf","reverse","find","resourceNotFound","request","__decorate","Inject","InjectorService","Injectable","imports"],"mappings":"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"}