vrack2-core 0.0.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 (114) hide show
  1. package/.eslintrc.js +6 -0
  2. package/LICENSE +177 -0
  3. package/README.md +6 -0
  4. package/docs/RU-README.md +6 -0
  5. package/lib/Container.d.ts +30 -0
  6. package/lib/Container.js +236 -0
  7. package/lib/DeviceManager.d.ts +32 -0
  8. package/lib/DeviceManager.js +143 -0
  9. package/lib/IServiceStructure.d.ts +5 -0
  10. package/lib/IServiceStructure.js +2 -0
  11. package/lib/IStructureDevice.d.ts +7 -0
  12. package/lib/IStructureDevice.js +2 -0
  13. package/lib/ImportManager.d.ts +15 -0
  14. package/lib/ImportManager.js +145 -0
  15. package/lib/MainProcess.d.ts +9 -0
  16. package/lib/MainProcess.js +28 -0
  17. package/lib/Utility.d.ts +21 -0
  18. package/lib/Utility.js +48 -0
  19. package/lib/actions/Action.d.ts +4 -0
  20. package/lib/actions/Action.js +16 -0
  21. package/lib/actions/BasicAction.d.ts +15 -0
  22. package/lib/actions/BasicAction.js +44 -0
  23. package/lib/actions/GlobalAction.d.ts +4 -0
  24. package/lib/actions/GlobalAction.js +17 -0
  25. package/lib/actions/IAction.d.ts +11 -0
  26. package/lib/actions/IAction.js +2 -0
  27. package/lib/actions/ILocalAction.d.ts +11 -0
  28. package/lib/actions/ILocalAction.js +2 -0
  29. package/lib/errors/CoreError.d.ts +53 -0
  30. package/lib/errors/CoreError.js +81 -0
  31. package/lib/errors/ErrorManager.d.ts +47 -0
  32. package/lib/errors/ErrorManager.js +84 -0
  33. package/lib/index.d.ts +19 -0
  34. package/lib/index.js +55 -0
  35. package/lib/ports/BasicPort.d.ts +11 -0
  36. package/lib/ports/BasicPort.js +49 -0
  37. package/lib/ports/ILocalPort.d.ts +10 -0
  38. package/lib/ports/ILocalPort.js +2 -0
  39. package/lib/ports/IPort.d.ts +10 -0
  40. package/lib/ports/IPort.js +2 -0
  41. package/lib/ports/Port.d.ts +6 -0
  42. package/lib/ports/Port.js +20 -0
  43. package/lib/ports/ReturnPort.d.ts +6 -0
  44. package/lib/ports/ReturnPort.js +21 -0
  45. package/lib/ports/StandartPort.d.ts +4 -0
  46. package/lib/ports/StandartPort.js +17 -0
  47. package/lib/service/Device.d.ts +175 -0
  48. package/lib/service/Device.js +191 -0
  49. package/lib/service/DeviceConnect.d.ts +21 -0
  50. package/lib/service/DeviceConnect.js +32 -0
  51. package/lib/service/DevicePort.d.ts +24 -0
  52. package/lib/service/DevicePort.js +41 -0
  53. package/lib/service/IDeviceEvent.d.ts +5 -0
  54. package/lib/service/IDeviceEvent.js +2 -0
  55. package/lib/test.d.ts +1 -0
  56. package/lib/test.js +58 -0
  57. package/lib/validator/IValidationProblem.d.ts +8 -0
  58. package/lib/validator/IValidationProblem.js +2 -0
  59. package/lib/validator/IValidationRule.d.ts +9 -0
  60. package/lib/validator/IValidationRule.js +2 -0
  61. package/lib/validator/IValidationSubrule.d.ts +4 -0
  62. package/lib/validator/IValidationSubrule.js +2 -0
  63. package/lib/validator/Rule.d.ts +12 -0
  64. package/lib/validator/Rule.js +30 -0
  65. package/lib/validator/Validator.d.ts +14 -0
  66. package/lib/validator/Validator.js +57 -0
  67. package/lib/validator/types/ArrayType.d.ts +14 -0
  68. package/lib/validator/types/ArrayType.js +58 -0
  69. package/lib/validator/types/BasicType.d.ts +18 -0
  70. package/lib/validator/types/BasicType.js +54 -0
  71. package/lib/validator/types/NumberType.d.ts +19 -0
  72. package/lib/validator/types/NumberType.js +66 -0
  73. package/lib/validator/types/ObjectType.d.ts +18 -0
  74. package/lib/validator/types/ObjectType.js +51 -0
  75. package/lib/validator/types/StringType.d.ts +19 -0
  76. package/lib/validator/types/StringType.js +63 -0
  77. package/package.json +26 -0
  78. package/src/Container.ts +237 -0
  79. package/src/DeviceManager.ts +124 -0
  80. package/src/IServiceStructure.ts +6 -0
  81. package/src/IStructureDevice.ts +5 -0
  82. package/src/ImportManager.ts +112 -0
  83. package/src/MainProcess.ts +18 -0
  84. package/src/Utility.ts +44 -0
  85. package/src/actions/Action.ts +12 -0
  86. package/src/actions/BasicAction.ts +54 -0
  87. package/src/actions/GlobalAction.ts +14 -0
  88. package/src/actions/IAction.ts +8 -0
  89. package/src/actions/ILocalAction.ts +8 -0
  90. package/src/errors/CoreError.ts +87 -0
  91. package/src/errors/ErrorManager.ts +93 -0
  92. package/src/index.ts +30 -0
  93. package/src/ports/BasicPort.ts +53 -0
  94. package/src/ports/ILocalPort.ts +12 -0
  95. package/src/ports/IPort.ts +12 -0
  96. package/src/ports/Port.ts +17 -0
  97. package/src/ports/ReturnPort.ts +19 -0
  98. package/src/ports/StandartPort.ts +13 -0
  99. package/src/service/Device.ts +225 -0
  100. package/src/service/DeviceConnect.ts +36 -0
  101. package/src/service/DevicePort.ts +46 -0
  102. package/src/service/IDeviceEvent.ts +5 -0
  103. package/src/test.ts +82 -0
  104. package/src/validator/IValidationProblem.ts +9 -0
  105. package/src/validator/IValidationRule.ts +10 -0
  106. package/src/validator/IValidationSubrule.ts +5 -0
  107. package/src/validator/Rule.ts +30 -0
  108. package/src/validator/Validator.ts +67 -0
  109. package/src/validator/types/ArrayType.ts +67 -0
  110. package/src/validator/types/BasicType.ts +61 -0
  111. package/src/validator/types/NumberType.ts +86 -0
  112. package/src/validator/types/ObjectType.ts +58 -0
  113. package/src/validator/types/StringType.ts +79 -0
  114. package/tsconfig.json +103 -0
@@ -0,0 +1,15 @@
1
+ export default class ImportManager {
2
+ /**
3
+ * Dynamic import method
4
+ *
5
+ * @param {string} path Full or relative path to file
6
+ */
7
+ static importPath(raPath: string): Promise<any>;
8
+ static importClass(cs: string): Promise<any>;
9
+ static importJSON(filePath: string): Promise<any>;
10
+ static tryJsonParse(jsonRaw: string): any;
11
+ static camelize(text: string): string;
12
+ protected static getSub(imp: any, get: string): any;
13
+ static systemPath(): string;
14
+ protected static tryImport(p: string): Promise<any>;
15
+ }
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ const fs_1 = require("fs");
39
+ const path_1 = __importDefault(require("path"));
40
+ const ErrorManager_1 = __importDefault(require("./errors/ErrorManager"));
41
+ const Rule_1 = __importDefault(require("./validator/Rule"));
42
+ ErrorManager_1.default.register('ImportManager', 'kwRobwFPzc5g', 'IM_FILE_NOT_FOUND', 'Import file not found', {
43
+ filePath: Rule_1.default.string().description('Path to file')
44
+ });
45
+ ErrorManager_1.default.register('ImportManager', 'dMJfR6rmC7o6', 'IM_JSON_INCORRECT', 'Import file json incorrect', {
46
+ jsonRaw: Rule_1.default.string().description('Raw json data'),
47
+ parsingError: Rule_1.default.string().description('Json parse error string')
48
+ });
49
+ ErrorManager_1.default.register('ImportManager', 'u3dsX3vZpKrz', 'IM_CLASS_PATH_ERROR', 'Error import class - No acts', {
50
+ path: Rule_1.default.string().description('Class path string')
51
+ });
52
+ ErrorManager_1.default.register('ImportManager', 'PscFAcmXr11U', 'IM_CLASS_VENDOR_ERROR', 'Error import class - vendor not found', {
53
+ path: Rule_1.default.string().description('Class path string')
54
+ });
55
+ ErrorManager_1.default.register('ImportManager', 'm9MJNeKv3xYW', 'IM_CLASS_ACT_ERROR', 'Error import class - class act = undefined', {
56
+ path: Rule_1.default.string().description('Class path string')
57
+ });
58
+ class ImportManager {
59
+ /**
60
+ * Dynamic import method
61
+ *
62
+ * @param {string} path Full or relative path to file
63
+ */
64
+ static importPath(raPath) {
65
+ return __awaiter(this, void 0, void 0, function* () {
66
+ // IF we have absolute path
67
+ if (path_1.default.isAbsolute(raPath)) {
68
+ const ti = yield ImportManager.tryImport(raPath);
69
+ if (ti !== false)
70
+ return ti;
71
+ }
72
+ const mbfp = path_1.default.join(ImportManager.systemPath(), raPath);
73
+ if ((0, fs_1.existsSync)(mbfp)) {
74
+ const ti = yield ImportManager.tryImport(raPath);
75
+ if (ti !== false)
76
+ return ti;
77
+ }
78
+ const ti = yield Promise.resolve(`${raPath}`).then(s => __importStar(require(s)));
79
+ return ti;
80
+ });
81
+ }
82
+ static importClass(cs) {
83
+ return __awaiter(this, void 0, void 0, function* () {
84
+ const acts = cs.split('.');
85
+ const vendor = acts.shift();
86
+ if (typeof vendor !== 'string')
87
+ throw ErrorManager_1.default.make('IM_CLASS_PATH_ERROR', { path: cs });
88
+ let ret = yield ImportManager.tryImport(vendor);
89
+ if (ret === false)
90
+ throw ErrorManager_1.default.make('IM_CLASS_VENDOR_ERROR', { path: cs });
91
+ for (const act of acts) {
92
+ ret = ret[act];
93
+ if (ret === undefined)
94
+ throw ErrorManager_1.default.make('IM_CLASS_ACT_ERROR', { path: cs });
95
+ }
96
+ return ret;
97
+ });
98
+ }
99
+ static importJSON(filePath) {
100
+ return __awaiter(this, void 0, void 0, function* () {
101
+ if (!path_1.default.isAbsolute(filePath)) {
102
+ filePath = path_1.default.join(ImportManager.systemPath(), filePath);
103
+ }
104
+ if ((0, fs_1.existsSync)(filePath)) {
105
+ const jdata = (0, fs_1.readFileSync)(filePath).toString('utf-8');
106
+ return ImportManager.tryJsonParse(jdata);
107
+ }
108
+ throw ErrorManager_1.default.make('IM_FILE_NOT_FOUND', { filePath });
109
+ });
110
+ }
111
+ static tryJsonParse(jsonRaw) {
112
+ try {
113
+ return JSON.parse(jsonRaw);
114
+ }
115
+ catch (e) {
116
+ throw ErrorManager_1.default.make('IM_JSON_INCORRECT', {
117
+ jsonRaw, parsingError: (e instanceof Error) ? e.toString() : 'Unknown base json parse error'
118
+ });
119
+ }
120
+ }
121
+ static camelize(text) {
122
+ return text.replace(/^([A-Z])|[.]+(\w)/g, function (match, p1, p2, offset) {
123
+ if (p2)
124
+ return p2.toUpperCase();
125
+ return p1.toLowerCase();
126
+ });
127
+ }
128
+ static getSub(imp, get) {
129
+ return imp[get];
130
+ }
131
+ static systemPath() {
132
+ return process.cwd();
133
+ }
134
+ static tryImport(p) {
135
+ return __awaiter(this, void 0, void 0, function* () {
136
+ try {
137
+ return yield Promise.resolve(`${p}`).then(s => __importStar(require(s)));
138
+ }
139
+ catch (error) {
140
+ return false;
141
+ }
142
+ });
143
+ }
144
+ }
145
+ exports.default = ImportManager;
@@ -0,0 +1,9 @@
1
+ import Container from "./Container";
2
+ import DeviceManager from "./DeviceManager";
3
+ import IServiceStructure from "./IServiceStructure";
4
+ export default class MainProcess {
5
+ Container: Container;
6
+ DeviceManager: DeviceManager;
7
+ constructor(ContainerClass: typeof Container, DeviceManagerClass: typeof DeviceManager, service: IServiceStructure);
8
+ run(): Promise<void>;
9
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const ImportManager_1 = __importDefault(require("./ImportManager"));
16
+ class MainProcess {
17
+ constructor(ContainerClass, DeviceManagerClass, service) {
18
+ this.DeviceManager = new DeviceManagerClass(ImportManager_1.default.systemPath(), './devices');
19
+ this.DeviceManager.updateList();
20
+ this.Container = new ContainerClass(service, this.DeviceManager);
21
+ }
22
+ run() {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ yield this.Container.run();
25
+ });
26
+ }
27
+ }
28
+ exports.default = MainProcess;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Преобразует строку типа `aaa.bbb.ccc` в строку типа `aaaBbbCcc`
3
+ * Обратите внимание на то, что первый символ первого актета не преобразуется,
4
+ * если есть такая необходимость, можно добавить точку в самое начало строки `.aaa.bbb.ccc`
5
+ * результат выполнения будет `AaaBbbCcc`
6
+ */
7
+ declare function camelize(text: string): string;
8
+ /**
9
+ * Проверяет, является ли JSON строка валидным JSON
10
+ * Обычно используется, когда неважно в чем конретно проблема в JSON
11
+ * и нужно просто узнать валидный он или нет
12
+ *
13
+ */
14
+ declare function validJSON(text: string): any;
15
+ /**
16
+ * Преобразует строку в локальный путь VRack, на данный момент
17
+ * это просто приведение строки в lowerCase
18
+ *
19
+ */
20
+ declare function toPath(text: string): string;
21
+ export { camelize, validJSON, toPath };
package/lib/Utility.js ADDED
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright © 2022 Boris Bobylev. All rights reserved.
4
+ * Licensed under the Apache License, Version 2.0
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.toPath = exports.validJSON = exports.camelize = void 0;
8
+ /**
9
+ * Преобразует строку типа `aaa.bbb.ccc` в строку типа `aaaBbbCcc`
10
+ * Обратите внимание на то, что первый символ первого актета не преобразуется,
11
+ * если есть такая необходимость, можно добавить точку в самое начало строки `.aaa.bbb.ccc`
12
+ * результат выполнения будет `AaaBbbCcc`
13
+ */
14
+ function camelize(text) {
15
+ return text.replace(/^([A-Z])|[.]+(\w)/g, function (match, p1, p2, offset) {
16
+ if (p2)
17
+ return p2.toUpperCase();
18
+ return p1.toLowerCase();
19
+ });
20
+ }
21
+ exports.camelize = camelize;
22
+ /**
23
+ * Проверяет, является ли JSON строка валидным JSON
24
+ * Обычно используется, когда неважно в чем конретно проблема в JSON
25
+ * и нужно просто узнать валидный он или нет
26
+ *
27
+ */
28
+ function validJSON(text) {
29
+ try {
30
+ const cfg = JSON.parse(text);
31
+ if (!(cfg && typeof cfg === 'object'))
32
+ return false;
33
+ return cfg;
34
+ }
35
+ catch (e) {
36
+ return false;
37
+ }
38
+ }
39
+ exports.validJSON = validJSON;
40
+ /**
41
+ * Преобразует строку в локальный путь VRack, на данный момент
42
+ * это просто приведение строки в lowerCase
43
+ *
44
+ */
45
+ function toPath(text) {
46
+ return text.toLowerCase();
47
+ }
48
+ exports.toPath = toPath;
@@ -0,0 +1,4 @@
1
+ import GlobalAction from "./GlobalAction";
2
+ export default class Action {
3
+ static global(): GlobalAction;
4
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright © 2022 Boris Bobylev. All rights reserved.
4
+ * Licensed under the Apache License, Version 2.0
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const GlobalAction_1 = __importDefault(require("./GlobalAction"));
11
+ class Action {
12
+ static global() {
13
+ return new GlobalAction_1.default();
14
+ }
15
+ }
16
+ exports.default = Action;
@@ -0,0 +1,15 @@
1
+ import BasicType from "../validator/types/BasicType";
2
+ import IAction from "./IAction";
3
+ import ILocalAction from "./ILocalAction";
4
+ export default class BasicAction {
5
+ protected action: ILocalAction;
6
+ constructor();
7
+ requirements(req: {
8
+ [key: string]: BasicType;
9
+ }): this;
10
+ returns(ret: {
11
+ [key: string]: BasicType;
12
+ }): this;
13
+ description(des: string): this;
14
+ export(): IAction;
15
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright © 2022 Boris Bobylev. All rights reserved.
4
+ * Licensed under the Apache License, Version 2.0
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ class BasicAction {
8
+ constructor() {
9
+ this.action = {
10
+ type: 'unknown',
11
+ requirements: {},
12
+ returns: {},
13
+ description: ''
14
+ };
15
+ }
16
+ requirements(req) {
17
+ this.action.requirements = req;
18
+ return this;
19
+ }
20
+ returns(ret) {
21
+ this.action.returns = ret;
22
+ return this;
23
+ }
24
+ description(des) {
25
+ this.action.description = des;
26
+ return this;
27
+ }
28
+ export() {
29
+ const nAction = {
30
+ type: this.action.type,
31
+ requirements: {},
32
+ returns: {},
33
+ description: this.action.description,
34
+ };
35
+ for (const key in this.action.requirements) {
36
+ nAction.requirements[key] = this.action.requirements[key].export();
37
+ }
38
+ for (const key in this.action.returns) {
39
+ nAction.returns[key] = this.action.returns[key].export();
40
+ }
41
+ return nAction;
42
+ }
43
+ }
44
+ exports.default = BasicAction;
@@ -0,0 +1,4 @@
1
+ import BasicAction from "./BasicAction";
2
+ export default class GlobalAction extends BasicAction {
3
+ constructor();
4
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright © 2022 Boris Bobylev. All rights reserved.
4
+ * Licensed under the Apache License, Version 2.0
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const BasicAction_1 = __importDefault(require("./BasicAction"));
11
+ class GlobalAction extends BasicAction_1.default {
12
+ constructor() {
13
+ super();
14
+ this.action.type = 'global';
15
+ }
16
+ }
17
+ exports.default = GlobalAction;
@@ -0,0 +1,11 @@
1
+ import IValidationRule from "../validator/IValidationRule";
2
+ export default interface IAction {
3
+ type: string;
4
+ requirements: {
5
+ [key: string]: IValidationRule;
6
+ };
7
+ returns: {
8
+ [key: string]: IValidationRule;
9
+ };
10
+ description: string;
11
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,11 @@
1
+ import BasicType from "../validator/types/BasicType";
2
+ export default interface ILocalAction {
3
+ type: string;
4
+ requirements: {
5
+ [key: string]: BasicType;
6
+ };
7
+ returns: {
8
+ [key: string]: BasicType;
9
+ };
10
+ description: string;
11
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Базовый класс для реализаиции ошибок с возможностью
3
+ * импортирования и экспортирования классов ошибок для
4
+ * клиент-серверных операций.
5
+ *
6
+ * В VRack очень много передается по сети в виде JSON. Поскольку
7
+ * в чистом виде ошибки не преобрзауются в JSON, были сделаны методы
8
+ * для экспортирования и импортирования с сохранения основных важных свойств.
9
+ *
10
+ * Если импортируемая ошибка имеет свойства которых нет в базовом классе, буду добавлены.
11
+ * Для получения неизвестных свойств можно воспользоватся функцией (для typescript) getUnknownProperty
12
+ *
13
+ * Для работы с ошибками VRack рекомендуется использовать ErrorManager
14
+ *
15
+ */
16
+ declare class CoreError extends Error {
17
+ /** Флаг того что ошибка пренадлежит VRack */
18
+ vError: boolean;
19
+ /** Код ошибки VRack */
20
+ vCode: string;
21
+ /** Кородкий код VRack */
22
+ vShort: string;
23
+ /** Список дополнительных параметров */
24
+ vAdd: Array<string>;
25
+ /** */
26
+ vAddErrors: Array<CoreError>;
27
+ constructor(name: string, message: string, code: string, short: string);
28
+ /**
29
+ * Импортирует ошибку пришедшую по сети в виде JSON объекта
30
+ * На всякий случай использует objectify для приходящего объекта
31
+ *
32
+ * @returns {CoreError} this после модификации
33
+ */
34
+ import(error: any): this;
35
+ /**
36
+ * Возвращает объект для передачи его по сети с предварительным
37
+ * преобразованием в JSON
38
+ */
39
+ export(): any;
40
+ add(err: CoreError): this;
41
+ /**
42
+ * Для Typescript используется для получения неизвестного
43
+ * свойства экземпляра после импорта пришедшей ошибки
44
+ */
45
+ getUnknownProperty(field: string): any | undefined;
46
+ /**
47
+ * Возвращает объект для передачи его по сети
48
+ *
49
+ * @param {any} error Ошибка для преобразования в объект
50
+ * */
51
+ static objectify(error: any): any;
52
+ }
53
+ export default CoreError;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright © 2022 Boris Bobylev. All rights reserved.
4
+ * Licensed under the Apache License, Version 2.0
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ /**
8
+ * Базовый класс для реализаиции ошибок с возможностью
9
+ * импортирования и экспортирования классов ошибок для
10
+ * клиент-серверных операций.
11
+ *
12
+ * В VRack очень много передается по сети в виде JSON. Поскольку
13
+ * в чистом виде ошибки не преобрзауются в JSON, были сделаны методы
14
+ * для экспортирования и импортирования с сохранения основных важных свойств.
15
+ *
16
+ * Если импортируемая ошибка имеет свойства которых нет в базовом классе, буду добавлены.
17
+ * Для получения неизвестных свойств можно воспользоватся функцией (для typescript) getUnknownProperty
18
+ *
19
+ * Для работы с ошибками VRack рекомендуется использовать ErrorManager
20
+ *
21
+ */
22
+ class CoreError extends Error {
23
+ constructor(name, message, code, short) {
24
+ super(message);
25
+ /** Флаг того что ошибка пренадлежит VRack */
26
+ this.vError = true;
27
+ /** Код ошибки VRack */
28
+ this.vCode = "";
29
+ /** Кородкий код VRack */
30
+ this.vShort = "";
31
+ /** Список дополнительных параметров */
32
+ this.vAdd = [];
33
+ /** */
34
+ this.vAddErrors = [];
35
+ this.name = name;
36
+ this.vCode = code;
37
+ this.vShort = short;
38
+ }
39
+ /**
40
+ * Импортирует ошибку пришедшую по сети в виде JSON объекта
41
+ * На всякий случай использует objectify для приходящего объекта
42
+ *
43
+ * @returns {CoreError} this после модификации
44
+ */
45
+ import(error) {
46
+ const objectifyError = CoreError.objectify(error);
47
+ Object.assign(this, objectifyError);
48
+ return this;
49
+ }
50
+ /**
51
+ * Возвращает объект для передачи его по сети с предварительным
52
+ * преобразованием в JSON
53
+ */
54
+ export() {
55
+ return CoreError.objectify(this);
56
+ }
57
+ add(err) {
58
+ this.vAddErrors.push(CoreError.objectify(err));
59
+ return this;
60
+ }
61
+ /**
62
+ * Для Typescript используется для получения неизвестного
63
+ * свойства экземпляра после импорта пришедшей ошибки
64
+ */
65
+ getUnknownProperty(field) {
66
+ const dynamicKey = field;
67
+ return this[dynamicKey];
68
+ }
69
+ /**
70
+ * Возвращает объект для передачи его по сети
71
+ *
72
+ * @param {any} error Ошибка для преобразования в объект
73
+ * */
74
+ static objectify(error) {
75
+ const result = {};
76
+ for (const key of Object.getOwnPropertyNames(error))
77
+ result[key] = error[key];
78
+ return result;
79
+ }
80
+ }
81
+ exports.default = CoreError;
@@ -0,0 +1,47 @@
1
+ import BasicType from "../validator/types/BasicType";
2
+ import CoreError from "./CoreError";
3
+ /**
4
+ * Класс является точкой входа для инициализации исключений
5
+ *
6
+ * Было принято решение вместо кучи мелких однотипных файлов сделать один класс
7
+ * со стандартным функционалом
8
+ */
9
+ declare class ErrorManager {
10
+ private registeredList;
11
+ /**
12
+ * Регистрирует тип ошибки компонента
13
+ *
14
+ * Перед тем как менеджер ошибок может создать ошибки, необходимо зарегистрировать ее тип.
15
+ *
16
+ * @param {string} name Название компонента
17
+ * @param {string} code Код ошибки
18
+ * @param {string} short Короткий код ошибки
19
+ * @param {string} description Описание ошибки
20
+ *
21
+ */
22
+ register(name: string, code: string, short: string, description: string, rules?: {
23
+ [key: string]: BasicType;
24
+ }): void;
25
+ /**
26
+ * Создание ошибки
27
+ *
28
+ *
29
+ *
30
+ * @param {string} short
31
+ */
32
+ make(short: string, additional?: {}): CoreError;
33
+ /**
34
+ * Преобразует обычную ошибку в ошибку VRack
35
+ *
36
+ * @param {Error} error Ошибка для преобразования
37
+ */
38
+ convert(error: any): any;
39
+ /**
40
+ * Возвращает тип ошибки или null
41
+ *
42
+ * @param {string} short Короткий код ошибки или код ошибки поиска
43
+ */
44
+ private getRegistered;
45
+ }
46
+ declare const GlobalErrorManager: ErrorManager;
47
+ export default GlobalErrorManager;