@tsed/platform-exceptions 6.83.0 → 6.86.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.
package/lib/index.d.ts CHANGED
@@ -8,4 +8,3 @@ export * from "./domain/ExceptionSchema";
8
8
  export * from "./interfaces/ExceptionFilterMethods";
9
9
  export * from "./services/PlatformExceptions";
10
10
  export * from "./errors/ResourceNotFound";
11
- export { PlatformExceptions as default } from "./services/PlatformExceptions";
package/lib/index.js CHANGED
@@ -201,7 +201,7 @@ class ResourceNotFound extends Exceptions.NotFound {
201
201
  * @platform
202
202
  */
203
203
 
204
- exports['default'] = class PlatformExceptions {
204
+ exports.PlatformExceptions = class PlatformExceptions {
205
205
  constructor() {
206
206
  this.types = new Map();
207
207
  }
@@ -235,16 +235,14 @@ exports['default'] = class PlatformExceptions {
235
235
 
236
236
  };
237
237
 
238
- tslib.__decorate([di.Inject(), tslib.__metadata("design:type", di.InjectorService)], exports['default'].prototype, "injector", void 0);
238
+ tslib.__decorate([di.Inject(), tslib.__metadata("design:type", di.InjectorService)], exports.PlatformExceptions.prototype, "injector", void 0);
239
239
 
240
- exports['default'] = tslib.__decorate([di.Injectable({
240
+ exports.PlatformExceptions = tslib.__decorate([di.Injectable({
241
241
  imports: [exports.ErrorFilter, exports.ExceptionFilter, exports.MongooseErrorFilter, exports.StringErrorFilter]
242
- })], exports['default']);
242
+ })], exports.PlatformExceptions);
243
243
 
244
244
  exports.Catch = Catch;
245
245
  exports.ExceptionFiltersContainer = ExceptionFiltersContainer;
246
- exports.PlatformExceptions = exports['default'];
247
246
  exports.ResourceNotFound = ResourceNotFound;
248
- exports.default = exports['default'];
249
247
  exports.registerExceptionType = registerExceptionType;
250
248
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.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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"}
1
+ {"version":3,"file":"index.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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"}
@@ -220,6 +220,5 @@ PlatformExceptions = __decorate([Injectable({
220
220
  imports: [ErrorFilter, ExceptionFilter, MongooseErrorFilter, StringErrorFilter]
221
221
  })], PlatformExceptions);
222
222
 
223
- export default PlatformExceptions;
224
223
  export { Catch, ErrorFilter, ExceptionFilter, ExceptionFiltersContainer, MongooseErrorFilter, PlatformExceptions, ResourceNotFound, StringErrorFilter, registerExceptionType };
225
224
  //# sourceMappingURL=index.modern.js.map
@@ -1 +1 @@
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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"}
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tsed/platform-exceptions",
3
- "version": "6.83.0",
3
+ "version": "6.86.0",
4
4
  "description": "Platform exceptions module for Ts.ED Framework",
5
5
  "private": false,
6
6
  "source": "./src/index.ts",
@@ -17,16 +17,16 @@
17
17
  "tslib": "2.2.0"
18
18
  },
19
19
  "devDependencies": {
20
- "@tsed/core": "6.83.0",
21
- "@tsed/di": "6.83.0",
22
- "@tsed/exceptions": "6.83.0",
23
- "@tsed/schema": "6.83.0"
20
+ "@tsed/core": "6.86.0",
21
+ "@tsed/di": "6.86.0",
22
+ "@tsed/exceptions": "6.86.0",
23
+ "@tsed/schema": "6.86.0"
24
24
  },
25
25
  "peerDependencies": {
26
- "@tsed/core": "^6.83.0",
27
- "@tsed/di": "^6.83.0",
28
- "@tsed/exceptions": "^6.83.0",
29
- "@tsed/schema": "^6.83.0"
26
+ "@tsed/core": "^6.86.0",
27
+ "@tsed/di": "^6.86.0",
28
+ "@tsed/exceptions": "^6.86.0",
29
+ "@tsed/schema": "^6.86.0"
30
30
  },
31
31
  "repository": "https://github.com/tsedio/tsed",
32
32
  "bugs": {