@nocobase/plugin-error-handler 0.11.1-alpha.4 → 0.12.0-alpha.1

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 (73) hide show
  1. package/client.d.ts +2 -3
  2. package/client.js +1 -1
  3. package/dist/client/index.js +11 -0
  4. package/{lib → dist}/index.d.ts +1 -0
  5. package/dist/index.js +18 -0
  6. package/dist/locale/en_US.js +10 -0
  7. package/dist/locale/es-ES.js +10 -0
  8. package/dist/locale/fr_FR.js +10 -0
  9. package/dist/locale/ja_JP.js +8 -0
  10. package/dist/locale/pt-BR.js +10 -0
  11. package/dist/locale/zh_CN.js +9 -0
  12. package/{src/server/error-handler.ts → dist/server/error-handler.js} +10 -12
  13. package/dist/server/index.js +7 -0
  14. package/dist/server/locale/en_US.js +10 -0
  15. package/dist/server/locale/es-ES.js +10 -0
  16. package/dist/server/locale/fr_FR.js +10 -0
  17. package/dist/server/locale/ja_JP.js +8 -0
  18. package/dist/server/locale/pt-BR.js +10 -0
  19. package/dist/server/locale/zh_CN.js +9 -0
  20. package/dist/server/server.js +62 -0
  21. package/package.json +14 -23
  22. package/server.d.ts +2 -3
  23. package/server.js +1 -1
  24. package/lib/client/index.js +0 -22
  25. package/lib/index.js +0 -13
  26. package/lib/locale/en_US.js +0 -13
  27. package/lib/locale/es-ES.js +0 -13
  28. package/lib/locale/fr_FR.js +0 -13
  29. package/lib/locale/ja_JP.js +0 -11
  30. package/lib/locale/pt-BR.js +0 -13
  31. package/lib/locale/zh_CN.js +0 -12
  32. package/lib/server/error-handler.js +0 -66
  33. package/lib/server/index.js +0 -12
  34. package/lib/server/locale/en_US.js +0 -13
  35. package/lib/server/locale/es-ES.js +0 -13
  36. package/lib/server/locale/fr_FR.js +0 -13
  37. package/lib/server/locale/ja_JP.js +0 -11
  38. package/lib/server/locale/pt-BR.js +0 -13
  39. package/lib/server/locale/zh_CN.js +0 -12
  40. package/lib/server/server.js +0 -93
  41. package/src/client/index.ts +0 -7
  42. package/src/index.ts +0 -1
  43. package/src/locale/en_US.ts +0 -6
  44. package/src/locale/es-ES.ts +0 -6
  45. package/src/locale/fr_FR.ts +0 -6
  46. package/src/locale/ja_JP.ts +0 -4
  47. package/src/locale/pt-BR.ts +0 -6
  48. package/src/locale/zh_CN.ts +0 -5
  49. package/src/server/__tests__/render-error.test.ts +0 -172
  50. package/src/server/index.ts +0 -1
  51. package/src/server/locale/en_US.ts +0 -6
  52. package/src/server/locale/es-ES.ts +0 -6
  53. package/src/server/locale/fr_FR.ts +0 -6
  54. package/src/server/locale/ja_JP.ts +0 -4
  55. package/src/server/locale/pt-BR.ts +0 -6
  56. package/src/server/locale/zh_CN.ts +0 -5
  57. package/src/server/server.ts +0 -54
  58. /package/{lib → dist}/client/index.d.ts +0 -0
  59. /package/{lib → dist}/locale/en_US.d.ts +0 -0
  60. /package/{lib → dist}/locale/es-ES.d.ts +0 -0
  61. /package/{lib → dist}/locale/fr_FR.d.ts +0 -0
  62. /package/{lib → dist}/locale/ja_JP.d.ts +0 -0
  63. /package/{lib → dist}/locale/pt-BR.d.ts +0 -0
  64. /package/{lib → dist}/locale/zh_CN.d.ts +0 -0
  65. /package/{lib → dist}/server/error-handler.d.ts +0 -0
  66. /package/{lib → dist}/server/index.d.ts +0 -0
  67. /package/{lib → dist}/server/locale/en_US.d.ts +0 -0
  68. /package/{lib → dist}/server/locale/es-ES.d.ts +0 -0
  69. /package/{lib → dist}/server/locale/fr_FR.d.ts +0 -0
  70. /package/{lib → dist}/server/locale/ja_JP.d.ts +0 -0
  71. /package/{lib → dist}/server/locale/pt-BR.d.ts +0 -0
  72. /package/{lib → dist}/server/locale/zh_CN.d.ts +0 -0
  73. /package/{lib → dist}/server/server.d.ts +0 -0
package/client.d.ts CHANGED
@@ -1,3 +1,2 @@
1
- export * from './src/client';
2
- export { default } from './src/client';
3
-
1
+ export * from './dist/client';
2
+ export { default } from './dist/client';
package/client.js CHANGED
@@ -1 +1 @@
1
- module.exports = require('./lib/client/index.js');
1
+ module.exports = require('./dist/client/index.js');
@@ -0,0 +1,11 @@
1
+ (function(global, factory) {
2
+ typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("@nocobase/client")) : typeof define === "function" && define.amd ? define(["exports", "@nocobase/client"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global["@nocobase/plugin-error-handler"] = {}, global["@nocobase/client"]));
3
+ })(this, function(exports2, client) {
4
+ "use strict";
5
+ class ErrorHandlerPlugin extends client.Plugin {
6
+ async load() {
7
+ }
8
+ }
9
+ exports2.default = ErrorHandlerPlugin;
10
+ Object.defineProperties(exports2, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
11
+ });
@@ -1 +1,2 @@
1
+ export * from './server';
1
2
  export { default } from './server';
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var server = require('./server');
6
+
7
+
8
+
9
+ Object.defineProperty(exports, 'default', {
10
+ enumerable: true,
11
+ get: function () { return server__namespace.default; }
12
+ });
13
+ Object.keys(server).forEach(function (k) {
14
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
15
+ enumerable: true,
16
+ get: function () { return server[k]; }
17
+ });
18
+ });
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var en_US_default = {
4
+ "unique violation": "{{field}} must be unique",
5
+ "notNull violation": "notNull violation",
6
+ "Validation error": "{{field}} validation error",
7
+ "notNull Violation": "{{field}} cannot be null"
8
+ };
9
+
10
+ module.exports = en_US_default;
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var es_ES_default = {
4
+ "unique violation": "{{field}} debe ser \xFAnico",
5
+ "notNull violation": "notNull violaci\xF3n",
6
+ "Validation error": "{{field}} error de validaci\xF3n",
7
+ "notNull Violation": "{{field}} no puede ser null"
8
+ };
9
+
10
+ module.exports = es_ES_default;
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var fr_FR_default = {
4
+ "unique violation": "{{field}} doit \xEAtre unique",
5
+ "notNull violation": "Violation de contrainte notNull",
6
+ "Validation error": "Erreur de validation de {{field}}",
7
+ "notNull Violation": "{{field}} ne peut pas \xEAtre null"
8
+ };
9
+
10
+ module.exports = fr_FR_default;
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ var ja_JP_default = {
4
+ "unique violation": "{{field}} \u306F\u4E00\u610F\u3067\u306A\u304F\u3066\u306F\u306A\u308A\u307E\u305B\u3093",
5
+ "notNull Violation": "{{field}} \u306FNull\u306B\u3067\u304D\u307E\u305B\u3093"
6
+ };
7
+
8
+ module.exports = ja_JP_default;
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var pt_BR_default = {
4
+ "unique violation": "{{field}} deve ser \xFAnico",
5
+ "notNull violation": "viola\xE7\xE3o de n\xE3o nulo",
6
+ "Validation error": "erro de valida\xE7\xE3o de {{field}}",
7
+ "notNull Violation": "{{field}} n\xE3o pode ser nulo"
8
+ };
9
+
10
+ module.exports = pt_BR_default;
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ var zh_CN_default = {
4
+ "unique violation": "{{field}} \u5B57\u6BB5\u503C\u662F\u552F\u4E00\u7684",
5
+ "notNull violation": "{{field}} \u5B57\u6BB5\u4E0D\u80FD\u4E3A\u7A7A",
6
+ "Validation error": "{{field}} \u5B57\u6BB5\u89C4\u5219\u9A8C\u8BC1\u5931\u8D25"
7
+ };
8
+
9
+ module.exports = zh_CN_default;
@@ -1,29 +1,27 @@
1
- export class ErrorHandler {
2
- handlers = [];
1
+ 'use strict';
3
2
 
4
- register(guard: (err) => boolean, render: (err, ctx) => void) {
3
+ class ErrorHandler {
4
+ handlers = [];
5
+ register(guard, render) {
5
6
  this.handlers.push({
6
7
  guard,
7
- render,
8
+ render
8
9
  });
9
10
  }
10
-
11
11
  defaultHandler(err, ctx) {
12
12
  ctx.status = err.statusCode || err.status || 500;
13
13
  ctx.body = {
14
14
  errors: [
15
15
  {
16
16
  message: err.message,
17
- code: err.code,
18
- },
19
- ],
17
+ code: err.code
18
+ }
19
+ ]
20
20
  };
21
-
22
21
  if (ctx.status === 500) {
23
22
  console.error(err);
24
23
  }
25
24
  }
26
-
27
25
  middleware() {
28
26
  const self = this;
29
27
  return async function errorHandler(ctx, next) {
@@ -31,15 +29,15 @@ export class ErrorHandler {
31
29
  await next();
32
30
  } catch (err) {
33
31
  ctx.log.error(err);
34
-
35
32
  for (const handler of self.handlers) {
36
33
  if (handler.guard(err)) {
37
34
  return handler.render(err, ctx);
38
35
  }
39
36
  }
40
-
41
37
  self.defaultHandler(err, ctx);
42
38
  }
43
39
  };
44
40
  }
45
41
  }
42
+
43
+ exports.ErrorHandler = ErrorHandler;
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ var server = require('./server');
4
+
5
+
6
+
7
+ module.exports = server.PluginErrorHandler;
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var en_US_default = {
4
+ "unique violation": "{{field}} must be unique",
5
+ "notNull violation": "notNull violation",
6
+ "Validation error": "{{field}} validation error",
7
+ "notNull Violation": "{{field}} cannot be null"
8
+ };
9
+
10
+ module.exports = en_US_default;
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var es_ES_default = {
4
+ "unique violation": "{{field}} debe ser \xFAnico",
5
+ "notNull violation": "notNull violaci\xF3n",
6
+ "Validation error": "{{field}} error de validaci\xF3n",
7
+ "notNull Violation": "{{field}} no puede ser null"
8
+ };
9
+
10
+ module.exports = es_ES_default;
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var fr_FR_default = {
4
+ "unique violation": "{{field}} doit \xEAtre unique",
5
+ "notNull violation": "Violation de contrainte notNull",
6
+ "Validation error": "Erreur de validation de {{field}}",
7
+ "notNull Violation": "{{field}} ne peut pas \xEAtre null"
8
+ };
9
+
10
+ module.exports = fr_FR_default;
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ var ja_JP_default = {
4
+ "unique violation": "{{field}} \u306F\u4E00\u610F\u3067\u306A\u304F\u3066\u306F\u306A\u308A\u307E\u305B\u3093",
5
+ "notNull Violation": "{{field}} \u306FNull\u306B\u3067\u304D\u307E\u305B\u3093"
6
+ };
7
+
8
+ module.exports = ja_JP_default;
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var pt_BR_default = {
4
+ "unique violation": "{{field}} deve ser \xFAnico",
5
+ "notNull violation": "viola\xE7\xE3o de n\xE3o nulo",
6
+ "Validation error": "erro de valida\xE7\xE3o de {{field}}",
7
+ "notNull Violation": "{{field}} n\xE3o pode ser nulo"
8
+ };
9
+
10
+ module.exports = pt_BR_default;
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ var zh_CN_default = {
4
+ "unique violation": "{{field}} \u5B57\u6BB5\u503C\u662F\u552F\u4E00\u7684",
5
+ "notNull violation": "{{field}} \u5B57\u6BB5\u4E0D\u80FD\u4E3A\u7A7A",
6
+ "Validation error": "{{field}} \u5B57\u6BB5\u89C4\u5219\u9A8C\u8BC1\u5931\u8D25"
7
+ };
8
+
9
+ module.exports = zh_CN_default;
@@ -0,0 +1,62 @@
1
+ 'use strict';
2
+
3
+ var jsonSchema = require('@formily/json-schema');
4
+ var database = require('@nocobase/database');
5
+ var server = require('@nocobase/server');
6
+ var lodash = require('lodash');
7
+ var errorHandler = require('./error-handler');
8
+ var enUS = require('./locale/en_US');
9
+ var zhCN = require('./locale/zh_CN');
10
+
11
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
+
13
+ var lodash__default = /*#__PURE__*/_interopDefault(lodash);
14
+ var enUS__default = /*#__PURE__*/_interopDefault(enUS);
15
+ var zhCN__default = /*#__PURE__*/_interopDefault(zhCN);
16
+
17
+ class PluginErrorHandler extends server.Plugin {
18
+ errorHandler = new errorHandler.ErrorHandler();
19
+ i18nNs = "error-handler";
20
+ beforeLoad() {
21
+ this.registerSequelizeValidationErrorHandler();
22
+ }
23
+ registerSequelizeValidationErrorHandler() {
24
+ const findFieldTitle = (instance, path, tFunc) => {
25
+ if (!instance) {
26
+ return path;
27
+ }
28
+ const model = instance.constructor;
29
+ const collection = this.db.modelCollection.get(model);
30
+ const field = collection.getField(path);
31
+ const fieldOptions = jsonSchema.Schema.compile(field == null ? void 0 : field.options, { t: tFunc });
32
+ const title = lodash__default.default.get(fieldOptions, "uiSchema.title", path);
33
+ return title;
34
+ };
35
+ this.errorHandler.register(
36
+ (err) => {
37
+ var _a;
38
+ return ((_a = err == null ? void 0 : err.errors) == null ? void 0 : _a.length) && err instanceof database.BaseError;
39
+ },
40
+ (err, ctx) => {
41
+ ctx.body = {
42
+ errors: err.errors.map((err2) => {
43
+ return {
44
+ message: ctx.i18n.t(err2.type, {
45
+ ns: this.i18nNs,
46
+ field: findFieldTitle(err2.instance, err2.path, ctx.i18n.t)
47
+ })
48
+ };
49
+ })
50
+ };
51
+ ctx.status = 400;
52
+ }
53
+ );
54
+ }
55
+ async load() {
56
+ this.app.i18n.addResources("zh-CN", this.i18nNs, zhCN__default.default);
57
+ this.app.i18n.addResources("en-US", this.i18nNs, enUS__default.default);
58
+ this.app.use(this.errorHandler.middleware(), { before: "cors", tag: "errorHandler" });
59
+ }
60
+ }
61
+
62
+ exports.PluginErrorHandler = PluginErrorHandler;
package/package.json CHANGED
@@ -1,36 +1,27 @@
1
1
  {
2
2
  "name": "@nocobase/plugin-error-handler",
3
3
  "displayName": "error handler",
4
- "displayName.zh-CN": "错误处理",
5
- "description": "Managing and handling errors and exceptions in an application.",
6
- "description.zh-CN": "管理和处理应用程序中的错误和异常。",
7
- "version": "0.11.1-alpha.4",
4
+ "displayName.zh-CN": "错误处理器",
5
+ "description": "Handling application errors and exceptions",
6
+ "description.zh-CN": "处理应用程序中的错误和异常",
7
+ "version": "0.12.0-alpha.1",
8
8
  "license": "AGPL-3.0",
9
- "main": "./lib/server/index.js",
10
- "files": [
11
- "lib",
12
- "src",
13
- "README.md",
14
- "README.zh-CN.md",
15
- "CHANGELOG.md",
16
- "server.js",
17
- "server.d.ts",
18
- "client.js",
19
- "client.d.ts"
20
- ],
9
+ "main": "./dist/server/index.js",
21
10
  "devDependencies": {
22
- "@formily/json-schema": "2.2.26",
23
- "@nocobase/client": "0.11.1-alpha.4",
24
- "@nocobase/database": "0.11.1-alpha.4",
25
- "@nocobase/server": "0.11.1-alpha.4",
26
- "@nocobase/test": "0.11.1-alpha.4",
27
- "@nocobase/utils": "0.11.1-alpha.4",
11
+ "@formily/json-schema": "2.x",
28
12
  "supertest": "^6.1.6"
29
13
  },
14
+ "peerDependencies": {
15
+ "@nocobase/client": "0.x",
16
+ "@nocobase/database": "0.x",
17
+ "@nocobase/server": "0.x",
18
+ "@nocobase/test": "0.x",
19
+ "@nocobase/utils": "0.x"
20
+ },
30
21
  "repository": {
31
22
  "type": "git",
32
23
  "url": "git+https://github.com/nocobase/nocobase.git",
33
24
  "directory": "packages/plugin-error-handler"
34
25
  },
35
- "gitHead": "d9b5bde913013f1057e1aab49587eb0ad3dcb06e"
26
+ "gitHead": "543dcc0216b7b1451b552b0f685bc3e0682f9d59"
36
27
  }
package/server.d.ts CHANGED
@@ -1,3 +1,2 @@
1
- export * from './src/server';
2
- export { default } from './src/server';
3
-
1
+ export * from './dist/server';
2
+ export { default } from './dist/server';
package/server.js CHANGED
@@ -1 +1 @@
1
- module.exports = require('./lib/server/index.js');
1
+ module.exports = require('./dist/server/index.js');
@@ -1,22 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- function _client() {
8
- const data = require("@nocobase/client");
9
- _client = function _client() {
10
- return data;
11
- };
12
- return data;
13
- }
14
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
15
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
16
- class ErrorHandlerPlugin extends _client().Plugin {
17
- load() {
18
- return _asyncToGenerator(function* () {})();
19
- }
20
- }
21
- var _default = ErrorHandlerPlugin;
22
- exports.default = _default;
package/lib/index.js DELETED
@@ -1,13 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "default", {
7
- enumerable: true,
8
- get: function get() {
9
- return _server.default;
10
- }
11
- });
12
- var _server = _interopRequireDefault(require("./server"));
13
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -1,13 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _default = {
8
- 'unique violation': '{{field}} must be unique',
9
- 'notNull violation': 'notNull violation',
10
- 'Validation error': '{{field}} validation error',
11
- 'notNull Violation': '{{field}} cannot be null'
12
- };
13
- exports.default = _default;
@@ -1,13 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _default = {
8
- "unique violation": "{{field}} debe ser único",
9
- "notNull violation": "notNull violación",
10
- "Validation error": "{{field}} error de validación",
11
- "notNull Violation": "{{field}} no puede ser null"
12
- };
13
- exports.default = _default;
@@ -1,13 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _default = {
8
- 'unique violation': '{{field}} doit être unique',
9
- 'notNull violation': 'Violation de contrainte notNull',
10
- 'Validation error': 'Erreur de validation de {{field}}',
11
- 'notNull Violation': '{{field}} ne peut pas être null'
12
- };
13
- exports.default = _default;
@@ -1,11 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _default = {
8
- 'unique violation': '{{field}} は一意でなくてはなりません',
9
- 'notNull Violation': '{{field}} はNullにできません'
10
- };
11
- exports.default = _default;
@@ -1,13 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _default = {
8
- 'unique violation': '{{field}} deve ser único',
9
- 'notNull violation': 'violação de não nulo',
10
- 'Validation error': 'erro de validação de {{field}}',
11
- 'notNull Violation': '{{field}} não pode ser nulo'
12
- };
13
- exports.default = _default;
@@ -1,12 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _default = {
8
- 'unique violation': '{{field}} 字段值是唯一的',
9
- 'notNull violation': '{{field}} 字段不能为空',
10
- 'Validation error': '{{field}} 字段规则验证失败'
11
- };
12
- exports.default = _default;
@@ -1,66 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.ErrorHandler = void 0;
7
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
8
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
9
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
10
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
11
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
12
- class ErrorHandler {
13
- constructor() {
14
- this.handlers = [];
15
- }
16
- register(guard, render) {
17
- this.handlers.push({
18
- guard,
19
- render
20
- });
21
- }
22
- defaultHandler(err, ctx) {
23
- ctx.status = err.statusCode || err.status || 500;
24
- ctx.body = {
25
- errors: [{
26
- message: err.message,
27
- code: err.code
28
- }]
29
- };
30
- if (ctx.status === 500) {
31
- console.error(err);
32
- }
33
- }
34
- middleware() {
35
- const self = this;
36
- return /*#__PURE__*/function () {
37
- var _errorHandler = _asyncToGenerator(function* (ctx, next) {
38
- try {
39
- yield next();
40
- } catch (err) {
41
- ctx.log.error(err);
42
- var _iterator = _createForOfIteratorHelper(self.handlers),
43
- _step;
44
- try {
45
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
46
- const handler = _step.value;
47
- if (handler.guard(err)) {
48
- return handler.render(err, ctx);
49
- }
50
- }
51
- } catch (err) {
52
- _iterator.e(err);
53
- } finally {
54
- _iterator.f();
55
- }
56
- self.defaultHandler(err, ctx);
57
- }
58
- });
59
- function errorHandler(_x, _x2) {
60
- return _errorHandler.apply(this, arguments);
61
- }
62
- return errorHandler;
63
- }();
64
- }
65
- }
66
- exports.ErrorHandler = ErrorHandler;
@@ -1,12 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "default", {
7
- enumerable: true,
8
- get: function get() {
9
- return _server.PluginErrorHandler;
10
- }
11
- });
12
- var _server = require("./server");
@@ -1,13 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _default = {
8
- 'unique violation': '{{field}} must be unique',
9
- 'notNull violation': 'notNull violation',
10
- 'Validation error': '{{field}} validation error',
11
- 'notNull Violation': '{{field}} cannot be null'
12
- };
13
- exports.default = _default;
@@ -1,13 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _default = {
8
- "unique violation": "{{field}} debe ser único",
9
- "notNull violation": "notNull violación",
10
- "Validation error": "{{field}} error de validación",
11
- "notNull Violation": "{{field}} no puede ser null"
12
- };
13
- exports.default = _default;
@@ -1,13 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _default = {
8
- 'unique violation': '{{field}} doit être unique',
9
- 'notNull violation': 'Violation de contrainte notNull',
10
- 'Validation error': 'Erreur de validation de {{field}}',
11
- 'notNull Violation': '{{field}} ne peut pas être null'
12
- };
13
- exports.default = _default;
@@ -1,11 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _default = {
8
- 'unique violation': '{{field}} は一意でなくてはなりません',
9
- 'notNull Violation': '{{field}} はNullにできません'
10
- };
11
- exports.default = _default;
@@ -1,13 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _default = {
8
- 'unique violation': '{{field}} deve ser único',
9
- 'notNull violation': 'violação de não nulo',
10
- 'Validation error': 'erro de validação de {{field}}',
11
- 'notNull Violation': '{{field}} não pode ser nulo'
12
- };
13
- exports.default = _default;
@@ -1,12 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _default = {
8
- 'unique violation': '{{field}} 字段值是唯一的',
9
- 'notNull violation': '{{field}} 字段不能为空',
10
- 'Validation error': '{{field}} 字段规则验证失败'
11
- };
12
- exports.default = _default;
@@ -1,93 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.PluginErrorHandler = void 0;
7
- function _jsonSchema() {
8
- const data = require("@formily/json-schema");
9
- _jsonSchema = function _jsonSchema() {
10
- return data;
11
- };
12
- return data;
13
- }
14
- function _database() {
15
- const data = require("@nocobase/database");
16
- _database = function _database() {
17
- return data;
18
- };
19
- return data;
20
- }
21
- function _server() {
22
- const data = require("@nocobase/server");
23
- _server = function _server() {
24
- return data;
25
- };
26
- return data;
27
- }
28
- function _utils() {
29
- const data = require("@nocobase/utils");
30
- _utils = function _utils() {
31
- return data;
32
- };
33
- return data;
34
- }
35
- var _errorHandler = require("./error-handler");
36
- var _en_US = _interopRequireDefault(require("./locale/en_US"));
37
- var _zh_CN = _interopRequireDefault(require("./locale/zh_CN"));
38
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
39
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
40
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
41
- class PluginErrorHandler extends _server().Plugin {
42
- constructor(...args) {
43
- super(...args);
44
- this.errorHandler = new _errorHandler.ErrorHandler();
45
- this.i18nNs = 'error-handler';
46
- }
47
- beforeLoad() {
48
- this.registerSequelizeValidationErrorHandler();
49
- }
50
- registerSequelizeValidationErrorHandler() {
51
- const findFieldTitle = (instance, path, tFunc) => {
52
- if (!instance) {
53
- return path;
54
- }
55
- const model = instance.constructor;
56
- const collection = this.db.modelCollection.get(model);
57
- const field = collection.getField(path);
58
- const fieldOptions = _jsonSchema().Schema.compile(field === null || field === void 0 ? void 0 : field.options, {
59
- t: tFunc
60
- });
61
- const title = _utils().lodash.get(fieldOptions, 'uiSchema.title', path);
62
- return title;
63
- };
64
- this.errorHandler.register(err => {
65
- var _err$errors;
66
- return (err === null || err === void 0 ? void 0 : (_err$errors = err.errors) === null || _err$errors === void 0 ? void 0 : _err$errors.length) && err instanceof _database().BaseError;
67
- }, (err, ctx) => {
68
- ctx.body = {
69
- errors: err.errors.map(err => {
70
- return {
71
- message: ctx.i18n.t(err.type, {
72
- ns: this.i18nNs,
73
- field: findFieldTitle(err.instance, err.path, ctx.i18n.t)
74
- })
75
- };
76
- })
77
- };
78
- ctx.status = 400;
79
- });
80
- }
81
- load() {
82
- var _this = this;
83
- return _asyncToGenerator(function* () {
84
- _this.app.i18n.addResources('zh-CN', _this.i18nNs, _zh_CN.default);
85
- _this.app.i18n.addResources('en-US', _this.i18nNs, _en_US.default);
86
- _this.app.use(_this.errorHandler.middleware(), {
87
- before: 'cors',
88
- tag: 'errorHandler'
89
- });
90
- })();
91
- }
92
- }
93
- exports.PluginErrorHandler = PluginErrorHandler;
@@ -1,7 +0,0 @@
1
- import { Plugin } from '@nocobase/client';
2
-
3
- class ErrorHandlerPlugin extends Plugin {
4
- async load() { }
5
- }
6
-
7
- export default ErrorHandlerPlugin;
package/src/index.ts DELETED
@@ -1 +0,0 @@
1
- export { default } from './server';
@@ -1,6 +0,0 @@
1
- export default {
2
- 'unique violation': '{{field}} must be unique',
3
- 'notNull violation': 'notNull violation',
4
- 'Validation error': '{{field}} validation error',
5
- 'notNull Violation': '{{field}} cannot be null',
6
- };
@@ -1,6 +0,0 @@
1
- export default {
2
- "unique violation": "{{field}} debe ser único",
3
- "notNull violation": "notNull violación",
4
- "Validation error": "{{field}} error de validación",
5
- "notNull Violation": "{{field}} no puede ser null"
6
- };
@@ -1,6 +0,0 @@
1
- export default {
2
- 'unique violation': '{{field}} doit être unique',
3
- 'notNull violation': 'Violation de contrainte notNull',
4
- 'Validation error': 'Erreur de validation de {{field}}',
5
- 'notNull Violation': '{{field}} ne peut pas être null',
6
- };
@@ -1,4 +0,0 @@
1
- export default {
2
- 'unique violation': '{{field}} は一意でなくてはなりません',
3
- 'notNull Violation': '{{field}} はNullにできません',
4
- };
@@ -1,6 +0,0 @@
1
- export default {
2
- 'unique violation': '{{field}} deve ser único',
3
- 'notNull violation': 'violação de não nulo',
4
- 'Validation error': 'erro de validação de {{field}}',
5
- 'notNull Violation': '{{field}} não pode ser nulo',
6
- };
@@ -1,5 +0,0 @@
1
- export default {
2
- 'unique violation': '{{field}} 字段值是唯一的',
3
- 'notNull violation': '{{field}} 字段不能为空',
4
- 'Validation error': '{{field}} 字段规则验证失败',
5
- };
@@ -1,172 +0,0 @@
1
- import { Database } from '@nocobase/database';
2
- import { MockServer, mockServer } from '@nocobase/test';
3
- import supertest from 'supertest';
4
- import { PluginErrorHandler } from '../server';
5
- describe('create with exception', () => {
6
- let app: MockServer;
7
- beforeEach(async () => {
8
- app = mockServer({
9
- acl: false,
10
- });
11
- await app.cleanDb();
12
- app.plugin(PluginErrorHandler, { name: 'error-handler' });
13
- });
14
-
15
- afterEach(async () => {
16
- await app.destroy();
17
- });
18
-
19
- it('should handle not null error', async () => {
20
- app.collection({
21
- name: 'users',
22
- fields: [
23
- {
24
- name: 'name',
25
- type: 'string',
26
- allowNull: false,
27
- },
28
- ],
29
- });
30
-
31
- await app.loadAndInstall();
32
-
33
- const response = await app
34
- .agent()
35
- .resource('users')
36
- .create({
37
- values: {
38
- title: 't1',
39
- },
40
- });
41
-
42
- expect(response.statusCode).toEqual(400);
43
-
44
- expect(response.body).toEqual({
45
- errors: [
46
- {
47
- message: 'name cannot be null',
48
- },
49
- ],
50
- });
51
- });
52
-
53
- it('should handle unique error', async () => {
54
- app.collection({
55
- name: 'users',
56
- fields: [
57
- {
58
- name: 'name',
59
- type: 'string',
60
- unique: true,
61
- },
62
- ],
63
- });
64
-
65
- await app.loadAndInstall();
66
-
67
- await app
68
- .agent()
69
- .resource('users')
70
- .create({
71
- values: {
72
- name: 'u1',
73
- },
74
- });
75
-
76
- const response = await app
77
- .agent()
78
- .resource('users')
79
- .create({
80
- values: {
81
- name: 'u1',
82
- },
83
- });
84
-
85
- expect(response.statusCode).toEqual(400);
86
-
87
- expect(response.body).toEqual({
88
- errors: [
89
- {
90
- message: 'name must be unique',
91
- },
92
- ],
93
- });
94
- });
95
-
96
- it('should render error with field title', async () => {
97
- app.collection({
98
- name: 'users',
99
- fields: [
100
- {
101
- name: 'name',
102
- type: 'string',
103
- allowNull: false,
104
- uiSchema: {
105
- title: '{{t("UserName")}}',
106
- },
107
- },
108
- ],
109
- });
110
-
111
- await app.loadAndInstall();
112
-
113
- const response = await app.agent().resource('users').create({});
114
-
115
- expect(response.statusCode).toEqual(400);
116
-
117
- expect(response.body).toEqual({
118
- errors: [
119
- {
120
- message: 'UserName cannot be null',
121
- },
122
- ],
123
- });
124
- });
125
-
126
- it('should handle unique error with raw sql', async () => {
127
- const userCollection = app.collection({
128
- name: 'users',
129
- autoGenId: false,
130
- timestamps: false,
131
- fields: [
132
- {
133
- name: 'name',
134
- type: 'string',
135
- primaryKey: true,
136
- },
137
- ],
138
- });
139
-
140
- await app.loadAndInstall();
141
-
142
- app.resourcer.define({
143
- name: 'test',
144
- actions: {
145
- async test(ctx) {
146
- const db: Database = ctx.db;
147
-
148
- const sql = `INSERT INTO ${userCollection.model.tableName} (name)
149
- VALUES (:name)`;
150
-
151
- await db.sequelize.query(sql, {
152
- replacements: { name: ctx.action.params.values.name },
153
- type: 'INSERT',
154
- });
155
- },
156
- },
157
- });
158
-
159
- const agent = supertest.agent(app.callback());
160
-
161
- await agent.post('/test:test').send({
162
- name: 'u1',
163
- });
164
-
165
- const response = await agent.post('/test:test').send({
166
- name: 'u1',
167
- });
168
-
169
- const body = response.body;
170
- expect(body['errors'][0]['message']).toBeDefined();
171
- });
172
- });
@@ -1 +0,0 @@
1
- export { PluginErrorHandler as default } from './server';
@@ -1,6 +0,0 @@
1
- export default {
2
- 'unique violation': '{{field}} must be unique',
3
- 'notNull violation': 'notNull violation',
4
- 'Validation error': '{{field}} validation error',
5
- 'notNull Violation': '{{field}} cannot be null',
6
- };
@@ -1,6 +0,0 @@
1
- export default {
2
- "unique violation": "{{field}} debe ser único",
3
- "notNull violation": "notNull violación",
4
- "Validation error": "{{field}} error de validación",
5
- "notNull Violation": "{{field}} no puede ser null"
6
- };
@@ -1,6 +0,0 @@
1
- export default {
2
- 'unique violation': '{{field}} doit être unique',
3
- 'notNull violation': 'Violation de contrainte notNull',
4
- 'Validation error': 'Erreur de validation de {{field}}',
5
- 'notNull Violation': '{{field}} ne peut pas être null',
6
- };
@@ -1,4 +0,0 @@
1
- export default {
2
- 'unique violation': '{{field}} は一意でなくてはなりません',
3
- 'notNull Violation': '{{field}} はNullにできません',
4
- };
@@ -1,6 +0,0 @@
1
- export default {
2
- 'unique violation': '{{field}} deve ser único',
3
- 'notNull violation': 'violação de não nulo',
4
- 'Validation error': 'erro de validação de {{field}}',
5
- 'notNull Violation': '{{field}} não pode ser nulo',
6
- };
@@ -1,5 +0,0 @@
1
- export default {
2
- 'unique violation': '{{field}} 字段值是唯一的',
3
- 'notNull violation': '{{field}} 字段不能为空',
4
- 'Validation error': '{{field}} 字段规则验证失败',
5
- };
@@ -1,54 +0,0 @@
1
- import { Schema } from '@formily/json-schema';
2
- import { BaseError } from '@nocobase/database';
3
- import { Plugin } from '@nocobase/server';
4
- import { lodash } from '@nocobase/utils';
5
- import { ErrorHandler } from './error-handler';
6
- import enUS from './locale/en_US';
7
- import zhCN from './locale/zh_CN';
8
-
9
- export class PluginErrorHandler extends Plugin {
10
- errorHandler: ErrorHandler = new ErrorHandler();
11
- i18nNs = 'error-handler';
12
-
13
- beforeLoad() {
14
- this.registerSequelizeValidationErrorHandler();
15
- }
16
-
17
- registerSequelizeValidationErrorHandler() {
18
- const findFieldTitle = (instance, path, tFunc) => {
19
- if (!instance) {
20
- return path;
21
- }
22
-
23
- const model = instance.constructor;
24
- const collection = this.db.modelCollection.get(model);
25
- const field = collection.getField(path);
26
- const fieldOptions = Schema.compile(field?.options, { t: tFunc });
27
- const title = lodash.get(fieldOptions, 'uiSchema.title', path);
28
- return title;
29
- };
30
-
31
- this.errorHandler.register(
32
- (err) => err?.errors?.length && err instanceof BaseError,
33
- (err, ctx) => {
34
- ctx.body = {
35
- errors: err.errors.map((err) => {
36
- return {
37
- message: ctx.i18n.t(err.type, {
38
- ns: this.i18nNs,
39
- field: findFieldTitle(err.instance, err.path, ctx.i18n.t),
40
- }),
41
- };
42
- }),
43
- };
44
- ctx.status = 400;
45
- },
46
- );
47
- }
48
-
49
- async load() {
50
- this.app.i18n.addResources('zh-CN', this.i18nNs, zhCN);
51
- this.app.i18n.addResources('en-US', this.i18nNs, enUS);
52
- this.app.use(this.errorHandler.middleware(), { before: 'cors', tag: 'errorHandler' });
53
- }
54
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes