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.
- package/README.md +33 -4
- package/docs/Bootstrap.md +77 -0
- package/docs/Container.md +124 -0
- package/docs/Device.md +272 -0
- package/docs/FastStart.md +111 -0
- package/docs/Structure.md +148 -0
- package/lib/Bootstrap.d.ts +79 -0
- package/lib/Bootstrap.js +103 -0
- package/lib/Container.d.ts +202 -6
- package/lib/Container.js +295 -27
- package/lib/IServiceStructure.d.ts +8 -0
- package/lib/IStructureDevice.d.ts +5 -0
- package/lib/ImportManager.d.ts +85 -3
- package/lib/ImportManager.js +122 -16
- package/lib/MainProcess.d.ts +30 -3
- package/lib/MainProcess.js +28 -6
- package/lib/Utility.d.ts +15 -21
- package/lib/Utility.js +40 -40
- package/lib/actions/Action.d.ts +10 -0
- package/lib/actions/Action.js +10 -0
- package/lib/actions/BasicAction.d.ts +60 -0
- package/lib/actions/BasicAction.js +62 -0
- package/lib/actions/GlobalAction.d.ts +5 -0
- package/lib/actions/GlobalAction.js +5 -0
- package/lib/actions/IAction.d.ts +7 -0
- package/lib/actions/ILocalAction.d.ts +7 -0
- package/lib/boot/BootClass.d.ts +93 -0
- package/lib/boot/BootClass.js +101 -0
- package/lib/boot/DeviceFileStorage.d.ts +38 -0
- package/lib/boot/DeviceFileStorage.js +112 -0
- package/lib/boot/DeviceManager.d.ts +190 -0
- package/lib/boot/DeviceManager.js +311 -0
- package/lib/boot/DeviceMetrics.d.ts +82 -0
- package/lib/boot/DeviceMetrics.js +128 -0
- package/lib/boot/StructureStorage.d.ts +59 -0
- package/lib/boot/StructureStorage.js +125 -0
- package/lib/errors/CoreError.d.ts +42 -25
- package/lib/errors/CoreError.js +44 -24
- package/lib/errors/ErrorManager.d.ts +18 -20
- package/lib/errors/ErrorManager.js +23 -22
- package/lib/index.d.ts +20 -4
- package/lib/index.js +28 -4
- package/lib/metrics/BasicMetric.d.ts +49 -0
- package/lib/metrics/BasicMetric.js +79 -0
- package/lib/metrics/IMetricSettings.d.ts +32 -0
- package/lib/metrics/IMetricSettings.js +2 -0
- package/lib/metrics/IvMs.d.ts +9 -0
- package/lib/metrics/IvMs.js +22 -0
- package/lib/metrics/IvS.d.ts +9 -0
- package/lib/metrics/IvS.js +22 -0
- package/lib/metrics/IvUs.d.ts +9 -0
- package/lib/metrics/IvUs.js +22 -0
- package/lib/metrics/Metric.d.ts +17 -0
- package/lib/metrics/Metric.js +27 -0
- package/lib/ports/BasicPort.d.ts +39 -0
- package/lib/ports/BasicPort.js +39 -0
- package/lib/ports/ILocalPort.d.ts +7 -0
- package/lib/ports/IPort.d.ts +7 -0
- package/lib/ports/Port.d.ts +10 -0
- package/lib/ports/Port.js +10 -0
- package/lib/ports/ReturnPort.d.ts +5 -0
- package/lib/ports/ReturnPort.js +5 -0
- package/lib/service/Device.d.ts +213 -78
- package/lib/service/Device.js +185 -83
- package/lib/service/DeviceConnect.d.ts +4 -8
- package/lib/service/DeviceConnect.js +4 -8
- package/lib/service/DevicePort.d.ts +15 -6
- package/lib/service/DevicePort.js +29 -12
- package/lib/service/IDeviceEvent.d.ts +4 -1
- package/lib/validator/IValidationProblem.d.ts +7 -0
- package/lib/validator/IValidationRule.d.ts +12 -0
- package/lib/validator/IValidationSubrule.d.ts +2 -0
- package/lib/validator/Rule.d.ts +6 -2
- package/lib/validator/Rule.js +12 -2
- package/lib/validator/Validator.d.ts +48 -3
- package/lib/validator/Validator.js +70 -18
- package/lib/validator/types/AnyType.d.ts +17 -0
- package/lib/validator/types/AnyType.js +34 -0
- package/lib/validator/types/ArrayType.d.ts +37 -4
- package/lib/validator/types/ArrayType.js +42 -6
- package/lib/validator/types/BasicType.d.ts +67 -7
- package/lib/validator/types/BasicType.js +74 -8
- package/lib/validator/types/BooleanType.d.ts +23 -0
- package/lib/validator/types/BooleanType.js +47 -0
- package/lib/validator/types/FunctionType.d.ts +17 -0
- package/lib/validator/types/FunctionType.js +38 -0
- package/lib/validator/types/NumberType.d.ts +40 -5
- package/lib/validator/types/NumberType.js +53 -14
- package/lib/validator/types/ObjectType.d.ts +32 -5
- package/lib/validator/types/ObjectType.js +42 -8
- package/lib/validator/types/StringType.d.ts +30 -5
- package/lib/validator/types/StringType.js +33 -7
- package/package.json +15 -14
- package/src/Bootstrap.ts +122 -0
- package/src/Container.ts +411 -43
- package/src/IServiceStructure.ts +9 -0
- package/src/IStructureDevice.ts +5 -0
- package/src/ImportManager.ts +119 -11
- package/src/MainProcess.ts +53 -8
- package/src/Utility.ts +35 -36
- package/src/actions/Action.ts +12 -0
- package/src/actions/BasicAction.ts +63 -0
- package/src/actions/GlobalAction.ts +5 -0
- package/src/actions/IAction.ts +7 -0
- package/src/actions/ILocalAction.ts +7 -0
- package/src/boot/BootClass.ts +117 -0
- package/src/boot/DeviceFileStorage.ts +96 -0
- package/src/boot/DeviceManager.ts +346 -0
- package/src/boot/DeviceMetrics.ts +129 -0
- package/src/boot/StructureStorage.ts +108 -0
- package/src/errors/CoreError.ts +52 -26
- package/src/errors/ErrorManager.ts +46 -33
- package/src/index.ts +30 -6
- package/src/metrics/BasicMetric.ts +84 -0
- package/src/metrics/IMetricSettings.ts +38 -0
- package/src/metrics/IvMs.ts +18 -0
- package/src/metrics/IvS.ts +18 -0
- package/src/metrics/IvUs.ts +17 -0
- package/src/metrics/Metric.ts +25 -0
- package/src/ports/BasicPort.ts +39 -0
- package/src/ports/ILocalPort.ts +7 -0
- package/src/ports/IPort.ts +7 -0
- package/src/ports/Port.ts +11 -1
- package/src/ports/ReturnPort.ts +5 -0
- package/src/service/Device.ts +234 -103
- package/src/service/DeviceConnect.ts +4 -8
- package/src/service/DevicePort.ts +30 -11
- package/src/service/IDeviceEvent.ts +4 -1
- package/src/validator/IValidationProblem.ts +7 -0
- package/src/validator/IValidationRule.ts +12 -0
- package/src/validator/IValidationSubrule.ts +3 -0
- package/src/validator/Rule.ts +16 -2
- package/src/validator/Validator.ts +74 -23
- package/src/validator/types/AnyType.ts +32 -0
- package/src/validator/types/ArrayType.ts +43 -7
- package/src/validator/types/BasicType.ts +78 -9
- package/src/validator/types/BooleanType.ts +49 -0
- package/src/validator/types/FunctionType.ts +39 -0
- package/src/validator/types/NumberType.ts +53 -15
- package/src/validator/types/ObjectType.ts +52 -14
- package/src/validator/types/StringType.ts +34 -10
- package/docs/RU-README.md +0 -6
- package/lib/DeviceManager.d.ts +0 -32
- package/lib/DeviceManager.js +0 -143
- package/lib/test.d.ts +0 -1
- package/lib/test.js +0 -58
- package/src/DeviceManager.ts +0 -124
- package/src/test.ts +0 -82
package/lib/service/Device.d.ts
CHANGED
|
@@ -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
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
-
*
|
|
45
|
-
*
|
|
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
|
-
/**
|
|
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
|
-
*
|
|
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
|
-
* -
|
|
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
|
-
*
|
|
108
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
|
131
|
-
* @param
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
155
|
-
* @param
|
|
281
|
+
* @param type event type
|
|
282
|
+
* @param data event data string
|
|
283
|
+
* @param trace additional information
|
|
156
284
|
*/
|
|
157
|
-
|
|
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
|
|
163
|
-
* @param
|
|
291
|
+
* @param name Port name in 'port.name' format
|
|
292
|
+
* @param action CallBack function to execute
|
|
164
293
|
*/
|
|
165
|
-
|
|
294
|
+
addInputHandler(name: string, action: (data: any) => any): void;
|
|
166
295
|
/**
|
|
167
|
-
*
|
|
168
|
-
* и произошла критическая ошибка
|
|
296
|
+
* Adding a handle for the action
|
|
169
297
|
*
|
|
170
|
-
*
|
|
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
|
}
|