vrack2-core 0.0.1 → 1.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 (148) hide show
  1. package/README.md +33 -4
  2. package/docs/Bootstrap.md +77 -0
  3. package/docs/Container.md +124 -0
  4. package/docs/Device.md +272 -0
  5. package/docs/FastStart.md +111 -0
  6. package/docs/Structure.md +148 -0
  7. package/lib/Bootstrap.d.ts +79 -0
  8. package/lib/Bootstrap.js +103 -0
  9. package/lib/Container.d.ts +202 -6
  10. package/lib/Container.js +295 -27
  11. package/lib/IServiceStructure.d.ts +8 -0
  12. package/lib/IStructureDevice.d.ts +5 -0
  13. package/lib/ImportManager.d.ts +85 -3
  14. package/lib/ImportManager.js +122 -16
  15. package/lib/MainProcess.d.ts +30 -3
  16. package/lib/MainProcess.js +28 -6
  17. package/lib/Utility.d.ts +15 -21
  18. package/lib/Utility.js +40 -40
  19. package/lib/actions/Action.d.ts +10 -0
  20. package/lib/actions/Action.js +10 -0
  21. package/lib/actions/BasicAction.d.ts +60 -0
  22. package/lib/actions/BasicAction.js +62 -0
  23. package/lib/actions/GlobalAction.d.ts +5 -0
  24. package/lib/actions/GlobalAction.js +5 -0
  25. package/lib/actions/IAction.d.ts +7 -0
  26. package/lib/actions/ILocalAction.d.ts +7 -0
  27. package/lib/boot/BootClass.d.ts +93 -0
  28. package/lib/boot/BootClass.js +101 -0
  29. package/lib/boot/DeviceFileStorage.d.ts +38 -0
  30. package/lib/boot/DeviceFileStorage.js +112 -0
  31. package/lib/boot/DeviceManager.d.ts +190 -0
  32. package/lib/boot/DeviceManager.js +311 -0
  33. package/lib/boot/DeviceMetrics.d.ts +82 -0
  34. package/lib/boot/DeviceMetrics.js +128 -0
  35. package/lib/boot/StructureStorage.d.ts +59 -0
  36. package/lib/boot/StructureStorage.js +125 -0
  37. package/lib/errors/CoreError.d.ts +42 -25
  38. package/lib/errors/CoreError.js +44 -24
  39. package/lib/errors/ErrorManager.d.ts +18 -20
  40. package/lib/errors/ErrorManager.js +23 -22
  41. package/lib/index.d.ts +20 -4
  42. package/lib/index.js +28 -4
  43. package/lib/metrics/BasicMetric.d.ts +49 -0
  44. package/lib/metrics/BasicMetric.js +79 -0
  45. package/lib/metrics/IMetricSettings.d.ts +32 -0
  46. package/lib/metrics/IMetricSettings.js +2 -0
  47. package/lib/metrics/IvMs.d.ts +9 -0
  48. package/lib/metrics/IvMs.js +22 -0
  49. package/lib/metrics/IvS.d.ts +9 -0
  50. package/lib/metrics/IvS.js +22 -0
  51. package/lib/metrics/IvUs.d.ts +9 -0
  52. package/lib/metrics/IvUs.js +22 -0
  53. package/lib/metrics/Metric.d.ts +17 -0
  54. package/lib/metrics/Metric.js +27 -0
  55. package/lib/ports/BasicPort.d.ts +39 -0
  56. package/lib/ports/BasicPort.js +39 -0
  57. package/lib/ports/ILocalPort.d.ts +7 -0
  58. package/lib/ports/IPort.d.ts +7 -0
  59. package/lib/ports/Port.d.ts +10 -0
  60. package/lib/ports/Port.js +10 -0
  61. package/lib/ports/ReturnPort.d.ts +5 -0
  62. package/lib/ports/ReturnPort.js +5 -0
  63. package/lib/service/Device.d.ts +213 -78
  64. package/lib/service/Device.js +185 -83
  65. package/lib/service/DeviceConnect.d.ts +4 -8
  66. package/lib/service/DeviceConnect.js +4 -8
  67. package/lib/service/DevicePort.d.ts +15 -6
  68. package/lib/service/DevicePort.js +29 -12
  69. package/lib/service/IDeviceEvent.d.ts +4 -1
  70. package/lib/validator/IValidationProblem.d.ts +7 -0
  71. package/lib/validator/IValidationRule.d.ts +12 -0
  72. package/lib/validator/IValidationSubrule.d.ts +2 -0
  73. package/lib/validator/Rule.d.ts +6 -2
  74. package/lib/validator/Rule.js +12 -2
  75. package/lib/validator/Validator.d.ts +48 -3
  76. package/lib/validator/Validator.js +70 -18
  77. package/lib/validator/types/AnyType.d.ts +17 -0
  78. package/lib/validator/types/AnyType.js +34 -0
  79. package/lib/validator/types/ArrayType.d.ts +37 -4
  80. package/lib/validator/types/ArrayType.js +42 -6
  81. package/lib/validator/types/BasicType.d.ts +67 -7
  82. package/lib/validator/types/BasicType.js +74 -8
  83. package/lib/validator/types/BooleanType.d.ts +23 -0
  84. package/lib/validator/types/BooleanType.js +47 -0
  85. package/lib/validator/types/FunctionType.d.ts +17 -0
  86. package/lib/validator/types/FunctionType.js +38 -0
  87. package/lib/validator/types/NumberType.d.ts +40 -5
  88. package/lib/validator/types/NumberType.js +53 -14
  89. package/lib/validator/types/ObjectType.d.ts +32 -5
  90. package/lib/validator/types/ObjectType.js +42 -8
  91. package/lib/validator/types/StringType.d.ts +30 -5
  92. package/lib/validator/types/StringType.js +33 -7
  93. package/package.json +15 -14
  94. package/src/Bootstrap.ts +122 -0
  95. package/src/Container.ts +411 -43
  96. package/src/IServiceStructure.ts +9 -0
  97. package/src/IStructureDevice.ts +5 -0
  98. package/src/ImportManager.ts +119 -11
  99. package/src/MainProcess.ts +53 -8
  100. package/src/Utility.ts +35 -36
  101. package/src/actions/Action.ts +12 -0
  102. package/src/actions/BasicAction.ts +63 -0
  103. package/src/actions/GlobalAction.ts +5 -0
  104. package/src/actions/IAction.ts +7 -0
  105. package/src/actions/ILocalAction.ts +7 -0
  106. package/src/boot/BootClass.ts +117 -0
  107. package/src/boot/DeviceFileStorage.ts +96 -0
  108. package/src/boot/DeviceManager.ts +346 -0
  109. package/src/boot/DeviceMetrics.ts +129 -0
  110. package/src/boot/StructureStorage.ts +108 -0
  111. package/src/errors/CoreError.ts +52 -26
  112. package/src/errors/ErrorManager.ts +46 -33
  113. package/src/index.ts +30 -6
  114. package/src/metrics/BasicMetric.ts +84 -0
  115. package/src/metrics/IMetricSettings.ts +38 -0
  116. package/src/metrics/IvMs.ts +18 -0
  117. package/src/metrics/IvS.ts +18 -0
  118. package/src/metrics/IvUs.ts +17 -0
  119. package/src/metrics/Metric.ts +25 -0
  120. package/src/ports/BasicPort.ts +39 -0
  121. package/src/ports/ILocalPort.ts +7 -0
  122. package/src/ports/IPort.ts +7 -0
  123. package/src/ports/Port.ts +11 -1
  124. package/src/ports/ReturnPort.ts +5 -0
  125. package/src/service/Device.ts +234 -103
  126. package/src/service/DeviceConnect.ts +4 -8
  127. package/src/service/DevicePort.ts +30 -11
  128. package/src/service/IDeviceEvent.ts +4 -1
  129. package/src/validator/IValidationProblem.ts +7 -0
  130. package/src/validator/IValidationRule.ts +12 -0
  131. package/src/validator/IValidationSubrule.ts +3 -0
  132. package/src/validator/Rule.ts +16 -2
  133. package/src/validator/Validator.ts +74 -23
  134. package/src/validator/types/AnyType.ts +32 -0
  135. package/src/validator/types/ArrayType.ts +43 -7
  136. package/src/validator/types/BasicType.ts +78 -9
  137. package/src/validator/types/BooleanType.ts +49 -0
  138. package/src/validator/types/FunctionType.ts +39 -0
  139. package/src/validator/types/NumberType.ts +53 -15
  140. package/src/validator/types/ObjectType.ts +52 -14
  141. package/src/validator/types/StringType.ts +34 -10
  142. package/docs/RU-README.md +0 -6
  143. package/lib/DeviceManager.d.ts +0 -32
  144. package/lib/DeviceManager.js +0 -143
  145. package/lib/test.d.ts +0 -1
  146. package/lib/test.js +0 -58
  147. package/src/DeviceManager.ts +0 -124
  148. package/src/test.ts +0 -82
@@ -3,9 +3,7 @@ import Container from '../Container';
3
3
  import BasicAction from "../actions/BasicAction";
4
4
  import BasicPort from "../ports/BasicPort";
5
5
  import DevicePort from "./DevicePort";
6
- /**
7
- * Интерфейс списка исходящих портов устройства
8
- // */
6
+ import BasicMetric from "../metrics/BasicMetric";
9
7
  export declare enum EDeviceMessageTypes {
10
8
  terminal = "terminal",
11
9
  info = "info",
@@ -14,49 +12,145 @@ export declare enum EDeviceMessageTypes {
14
12
  action = "action",
15
13
  alert = "alert"
16
14
  }
17
- interface IDevicePorts {
18
- input: {
19
- [key: string]: DevicePort;
20
- };
21
- output: {
22
- [key: string]: DevicePort;
23
- };
15
+ interface IDeviceSettings {
16
+ /**
17
+ * List of broadcast channels
18
+ * Device channels list:
19
+ * - terminal
20
+ * - notify
21
+ * - event
22
+ * - action
23
+ * - alert
24
+ * - error
25
+ * - render
26
+ */
27
+ channels: Array<'terminal' | 'notify' | 'event' | 'action' | 'alert' | 'error' | 'render'>;
24
28
  }
25
29
  export default class Device {
26
- /** Идентификатор устройства */
30
+ /**
31
+ * Device unique for this container id
32
+ * the name usually begins with a capital letter
33
+ *
34
+ * @example 'DeviceName'
35
+ * */
27
36
  id: string;
37
+ /**
38
+ * Device type string
39
+ * Uses the vendor name and device name
40
+ * @example 'vrack.KeyManager'
41
+ */
28
42
  type: string;
29
- ports: IDevicePorts;
30
- /** Экземпляр класса виртуальной стойки */
43
+ /**
44
+ * Allows access to port management.
45
+ */
46
+ ports: {
47
+ input: {
48
+ [key: string]: DevicePort;
49
+ };
50
+ output: {
51
+ [key: string]: DevicePort;
52
+ };
53
+ };
54
+ /**
55
+ * Active loader container
56
+ * */
31
57
  Container: Container;
32
- /** Входящие (назначаемые сверху) параметры устройства */
58
+ /**
59
+ * Device options
60
+ *
61
+ * @see checkOptions()
62
+ */
33
63
  options: {
34
64
  [key: string]: any;
35
65
  };
66
+ /**
67
+ * @param id Unique ID
68
+ * @param type Device type string
69
+ * @param Container Active loader container
70
+ */
36
71
  constructor(id: string, type: string, Container: Container);
37
72
  /**
38
- * Short device description
73
+ * Device settings
74
+ *
75
+ * Needs to be finalized"
76
+ */
77
+ settings(): IDeviceSettings;
78
+ /**
79
+ * Short device description. Can use markdown markup
39
80
  *
40
81
  * @return {string} Device description
41
82
  * */
42
83
  description(): string;
43
84
  /**
44
- * Shares данные устройства (обновляемые данные)
45
- * используется с методом `this.render`
85
+ * This is a fast updating data object - it will be sent
86
+ * to subscribers after the render() call
46
87
  *
47
88
  * @see render()
48
89
  * */
49
90
  shares: any;
50
91
  /**
92
+ * This data will be loaded for the specific instance of the device.
93
+ * The device itself determines this data and saves it at the right moment
51
94
  *
95
+ * The structure is determined by the device
52
96
  */
53
97
  storage: any;
54
- /** Список Action-методов устройства */
98
+ /**
99
+ * Device action list
100
+ * Device actions can be called from the container.
101
+ * This is a way to interact with the device from the outside world
102
+ *
103
+ * @example
104
+ * ```
105
+ * return {
106
+ * 'test.action': Action.global().requirements({
107
+ * id: Rule.string().require().default('www').description('Some id')
108
+ * }).description('Test action')
109
+ * }
110
+ * ```
111
+ *
112
+ * A handler must be created for each action. For example, for `test.action` action `actionTestAction` must be created.
113
+ * */
55
114
  actions(): {
56
115
  [key: string]: BasicAction;
57
116
  };
58
117
  /**
59
- * Определение списка параметров устройства
118
+ * Defining device metrics.
119
+ *
120
+ * @example
121
+ *
122
+ * ```
123
+ * return {
124
+ * 'test.metric': Metric.inS().retentions('1s:6h').description('Test metric')
125
+ * }
126
+ * ```
127
+ * @see BasicMetric
128
+ */
129
+ metrics(): {
130
+ [key: string]: BasicMetric;
131
+ };
132
+ /**
133
+ * Run before each device action
134
+ *
135
+ * @param action "device.action" like string
136
+ * @param data data for action
137
+ */
138
+ beforeAction(action: string, data: any): boolean;
139
+ /**
140
+ * Prepare options
141
+ *
142
+ * this method call before validating options
143
+ */
144
+ prepareOptions(): void;
145
+ /**
146
+ * Defining a list of device parameters
147
+ *
148
+ * @example
149
+ * ```ts
150
+ * return {
151
+ * timeout: Rule.number().integer().min(0).description('Interval timeout').example(0)
152
+ * }
153
+ * ```
60
154
  *
61
155
  * @returns {Array<Rule>}
62
156
  * */
@@ -64,111 +158,152 @@ export default class Device {
64
158
  [key: string]: BasicType;
65
159
  };
66
160
  /**
67
- * Prepare options
161
+ * Device inputs list
162
+ *
163
+ * Use like this object:
164
+ * {
165
+ * 'group.portname': Port.standart(),
166
+ * 'group.portname': Port.standart()
167
+ * }
68
168
  *
69
- * this method call before validating options
70
169
  */
71
- prepareOptions(): void;
72
170
  inputs(): {
73
171
  [key: string]: BasicPort;
74
172
  };
173
+ /**
174
+ * Device output list
175
+ *
176
+ * @see inputs
177
+ */
75
178
  outputs(): {
76
179
  [key: string]: BasicPort;
77
180
  };
78
181
  /**
79
- * Метод является входной точкой для начала инициализации устройства
182
+ * The method is an input point to start device initialization
80
183
  *
81
- * Устройство пройдет только следующие этапы создания устройства:
184
+ * The device will only go through the following device creation steps:
82
185
  *
83
- * - Создания класса
84
- * - Назначение праметров устройства
186
+ * - Creating a class
187
+ * - Assigning device prameters
85
188
  *
86
- * Необходимо использовать для назначения функций вызова динамических портов
87
- * устройства.
189
+ * Must be used to assign functions to call dynamic ports
190
+ * of the device.
88
191
  */
89
192
  preProcess(): void;
90
193
  /**
91
- * Метод является входной точкой для начала работы устройства
194
+ * The method is an input point for the start of device operation
92
195
  *
93
- * Устройство пройдет следующие этапы создания устройства:
196
+ * The device will go through the following steps to create the device:
94
197
  *
95
- * - Создания класса
96
- * - Назначение праметров устройства
97
- * - Создание портов
98
- * - Назначение функций вызова
99
- * - Создание соединений между устройствами
100
- * - Линковка Shares устройства
198
+ * - Creating a class
199
+ * - Assigning device prameters
200
+ * - Creating ports
201
+ * - Assigning call functions
202
+ * - Creating connections between devices
203
+ * - Linking device Shares
101
204
  *
102
- * Необходимо использовать для осуществления начала основной работы устройства
103
- * например, инициализация подключений, создание таймеров и тп.
205
+ * Must be used to start basic operation of the device
206
+ * e.g. initialization of connections, creation of timers, etc.
104
207
  */
105
208
  process(): void;
106
209
  /**
107
- * По аналогии с `process` но асинхронный, загрузчик будет ждать выполнения всех
108
- * методов `processPromise` всех устройств.
210
+ * Similar to `process` but asynchronous, the loader will wait for the execution of all the
211
+ * `processPromise` methods of all devices.
109
212
  *
110
- * Используется, когда есть необходимость перед запуском стойки выполнить
111
- * и дождаться выполнения асинхронного кода (инициализация некоторых файловых баз данных и тп)
213
+ * Used when there is a need to execute before starting the rack
214
+ * and wait for asynchronous code to execute (initialization of some file databases, etc.)
112
215
  */
113
216
  processPromise(): Promise<void>;
114
- stop(): void;
115
- stopPromise(): Promise<void>;
116
217
  /**
117
- * Метод заменяется загрузчиком стойки, после чего, вызов этого метода приводит
118
- * к постановке в очередь устройства на обновление данных `Shares`
218
+ * Myby todo?
219
+ *
220
+ * stop() { return }
221
+ * async stopPromise() { return }
222
+ */
223
+ /**
224
+ * Queues device shares data updates for external consumers
225
+ *
226
+ * @see shares
119
227
  */
120
228
  render(): boolean;
121
229
  /**
122
- * Метод заменяется загрузчиком стойки, после чего, вызов этого метода приводит
123
- * к сохранение в локальное файловое хранилище данных `Storage`
230
+ * Save device storage
231
+ *
232
+ * @see storage
124
233
  */
125
234
  save(): boolean;
126
235
  /**
127
- * Метод заменяется загрузчиком стойки, после чего, вызов этого метода приводит
128
- * к отправке сообщению об ошибке
236
+ * Write metric value
129
237
  *
130
- * @param {string} data Сообщение об ошибке
131
- * @param {any} trace Непосредственно объект ошибки, или объект который поможет разобратся в случившейся ситуации
238
+ * @param path Registered metric path
239
+ * @param value value record
240
+ * @param modify Write modify 'last' | 'first' | 'max' | 'min' | 'avg' | 'sum'
132
241
  */
133
- error(data: string, trace: any): boolean;
242
+ metric(path: string, value: number, modify?: 'last' | 'first' | 'max' | 'min' | 'avg' | 'sum'): boolean;
134
243
  /**
135
- * Метод заменяется загрузчиком стойки, после чего, вызов этого метода приводит
136
- * к отправке информационного сообщения
137
- *
138
- * @param {string} data Сообщение об ошибке
139
- * @param {any} trace Дополнительная информация
244
+ * @param data Message
245
+ * @param trace Trace info (object needed)
140
246
  */
141
- notify(data: string, trace: any): boolean;
247
+ terminal(data: string, trace: {
248
+ [key: string]: any;
249
+ }, ...args: any[]): boolean;
142
250
  /**
143
- * Метод заменяется загрузчиком стойки, после чего, вызов этого метода приводит
144
- * к отправке оповещения
145
- *
146
- * @param {string} data Сообщение об ошибке
147
- * @param {any} trace Дополнительная информация
251
+ * @param data Message
252
+ * @param trace Trace info (object needed)
148
253
  */
149
- alert(data: string, trace: any): boolean;
254
+ notify(data: string, trace: {
255
+ [key: string]: any;
256
+ }, ...args: any[]): boolean;
150
257
  /**
151
- * Метод заменяется загрузчиком стойки, после чего, вызов этого метода приводит
152
- * к отправке отладочной информации
258
+ * @param data Message
259
+ * @param trace Trace info (object needed)
260
+ */
261
+ event(data: string, trace: {
262
+ [key: string]: any;
263
+ }, ...args: any[]): boolean;
264
+ /**
265
+ * @param data Message
266
+ * @param trace Trace info (object needed)
267
+ */
268
+ alert(data: string, trace: {
269
+ [key: string]: any;
270
+ }, ...args: any[]): boolean;
271
+ /**
272
+ * @param data Message
273
+ * @param trace Trace info (object needed)
274
+ */
275
+ error(data: string, trace: {
276
+ [key: string]: any;
277
+ }, ...args: any[]): boolean;
278
+ /**
279
+ * Make & emit device event
153
280
  *
154
- * @param {string} data Сообщение об ошибке
155
- * @param {any} trace Дополнительная информация
281
+ * @param type event type
282
+ * @param data event data string
283
+ * @param trace additional information
156
284
  */
157
- terminal(data: string, trace: any): boolean;
285
+ protected makeEvent(type: string, data: string, trace: {
286
+ [key: string]: any;
287
+ }, args: any[]): boolean;
158
288
  /**
159
- * Метод заменяется загрузчиком стойки, после чего, вызов этого метода приводит
160
- * к отправке сообщения о событии
289
+ * Adding processing for the incoming port
161
290
  *
162
- * @param {string} data Сообщение об ошибке
163
- * @param {any} trace Дополнительная информация
291
+ * @param name Port name in 'port.name' format
292
+ * @param action CallBack function to execute
164
293
  */
165
- protected event(type: string, data: string, trace: any): boolean;
294
+ addInputHandler(name: string, action: (data: any) => any): void;
166
295
  /**
167
- * Сообщает стойке, о том, что устройство не может дальше работать
168
- * и произошла критическая ошибка
296
+ * Adding a handle for the action
169
297
  *
170
- * Требует создание ошибки устройства DeviceError
298
+ * @param name Action name in the format 'action.name'
299
+ * @param action CallBack function to execute
300
+ */
301
+ addActionHandler(name: string, action: (data: any) => any): void;
302
+ /**
303
+ * Informs the rack that the unit cannot continue to operate.
304
+ * and a critical error has occurred
171
305
  *
306
+ * Requires DeviceError to be created
172
307
  */
173
308
  terminate(error: Error, action: string): boolean;
174
309
  }