@mirta/globals 0.0.6 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/types/wb-rules.d.ts +195 -148
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mirta/globals",
3
3
  "description": "Complete set of types for wb-rule development in TypeScript",
4
- "version": "0.0.6",
4
+ "version": "0.1.0",
5
5
  "license": "Unlicense",
6
6
  "keywords": [
7
7
  "mirta",
@@ -4,7 +4,7 @@
4
4
  * @example
5
5
  * ```ts
6
6
  * interface A { value: number }
7
- * interface B { readonly: boolean }
7
+ * interface B { isReadonly: boolean }
8
8
  *
9
9
  * type C = A & B
10
10
  * // A & B
@@ -12,9 +12,10 @@
12
12
  * type D = Expand<A & B>
13
13
  * // {
14
14
  * // value: number;
15
- * // readonly: boolean;
15
+ * // isReadonly: boolean;
16
16
  * // }
17
17
  * ```
18
+ * @since 0.0.4
18
19
  **/
19
20
  declare type Expand<T> = { [K in keyof T]: T[K] } & {}
20
21
 
@@ -76,12 +77,7 @@ declare namespace WbRules {
76
77
  /** Тип значения топика MQTT. */
77
78
  type MqttValue = string | number | boolean
78
79
 
79
- type DevControl = Record<string, MqttValue>
80
-
81
- type Dev = Expand<
82
- Record<`${string}/${string}`, MqttValue>
83
- & Record<string, DevControl>
84
- >
80
+ type Dev = Record<string, MqttValue | Record<string, MqttValue>>
85
81
 
86
82
  interface MqttMessage {
87
83
  topic: string
@@ -120,7 +116,11 @@ declare namespace WbRules {
120
116
  ): void
121
117
  }
122
118
 
123
- // Соответствие типа контрола и его данных
119
+ /**
120
+ * Соответствие типа контрола его типу значения.
121
+ * @since 0.0.4
122
+ *
123
+ **/
124
124
  interface TypeMappings {
125
125
  /** A control that displays a value as text. */
126
126
  'text': string
@@ -140,16 +140,6 @@ declare namespace WbRules {
140
140
 
141
141
  type ControlType = Expand<keyof TypeMappings>
142
142
 
143
- // enum ControlType {
144
- // SWITCH = 'switch',
145
- // ALARM = 'alarm',
146
- // PUSHBUTTON = 'pushbutton',
147
- // RANGE = 'range',
148
- // RGB = 'rgb',
149
- // TEXT = 'text',
150
- // VALUE = 'value'
151
- // }
152
-
153
143
  /**
154
144
  * Объект настроек передаваемого в контрол значения.
155
145
  */
@@ -231,112 +221,144 @@ declare namespace WbRules {
231
221
  getValue(): string | number | boolean
232
222
  }
233
223
 
234
- type MaybeValueEnum<TControl>
235
- = TControl extends 'value'
236
- ? { units?: string, enum?: Record<number, TitleLocalized> }
237
- : never
238
-
239
- type MaybeTextEnum<TControl>
240
- = TControl extends 'text'
241
- ? { enum?: Record<string, TitleLocalized> }
242
- : never
243
-
244
- type TypeDef<TControl, TValue> = {
224
+ /**
225
+ * Базовые определения контрола.
226
+ * @since 0.1.0
227
+ *
228
+ **/
229
+ interface BaseControlType<TControl, TValue> {
245
230
  /** Тип контрола, публикуемый в MQTT-топике. */
246
231
  type: TControl
247
232
  /** Значение по умолчанию. */
248
233
  value?: TValue
249
- } & (MaybeValueEnum<TControl> | MaybeTextEnum<TControl> | {})
234
+ }
250
235
 
251
- type TypeMapper<K extends keyof TypeMappings>
252
- = K extends infer TControl
253
- ? TypeDef<TControl, TypeMappings[K]>
254
- : never
236
+ /**
237
+ * Расширяет тип Text дополнительными свойствами.
238
+ * @since 0.1.0
239
+ *
240
+ **/
241
+ interface __TextControlTypeExtension {
255
242
 
256
- type MappedTypes = TypeMapper<keyof TypeMappings>
243
+ /**
244
+ * Задаёт подписи к значениям.
245
+ *
246
+ * Используется, когда количество значений
247
+ * ограничено - например, при перечислении дней недели.
248
+ *
249
+ **/
250
+ enum?: Record<string, Title>
251
+ }
252
+
253
+ /**
254
+ * Расширяет тип Value дополнительными свойствами.
255
+ * @since 0.1.0
256
+ *
257
+ **/
258
+ interface __ValueControlTypeExtension {
257
259
 
258
- type ControlOptions = Expand<MappedTypes & {
259
260
  /**
260
- * имя, публикуемое в MQTT-топике
261
- */
261
+ * Задаёт подписи к значениям.
262
+ *
263
+ * Используется, когда количество значений
264
+ * ограничено - например, при перечислении дней недели.
265
+ *
266
+ **/
267
+ enum?: Record<number, WbRules.Title>
268
+
269
+ /** Задаёт минимально допустимое значение. */
270
+ min?: number
271
+
272
+ /** Задаёт максимально допустимое значение. */
273
+ max?: number
274
+
275
+ /** Определяет количество знаков после запятой. */
276
+ precision?: number
277
+
278
+ units?: string
279
+ }
280
+
281
+ /**
282
+ * Расширяет тип Range дополнительными свойствами.
283
+ * @since 0.1.0
284
+ *
285
+ **/
286
+ interface __RangeControlTypeExtension {
287
+
288
+ /** Задаёт минимально допустимое значение. */
289
+ min?: number
290
+
291
+ /** Задаёт максимально допустимое значение. */
292
+ max?: number
293
+
294
+ /** Определяет количество знаков после запятой. */
295
+ precision?: number
296
+ }
297
+
298
+ /**
299
+ * Добавляет расширенные свойства, соответственно типу контрола.
300
+ * @since 0.1.0
301
+ *
302
+ **/
303
+ type ControlTypeExtension<TControl>
304
+ = TControl extends 'text'
305
+ ? __TextControlTypeExtension
306
+ : TControl extends 'value'
307
+ ? __ValueControlTypeExtension
308
+ : TControl extends 'range'
309
+ ? __RangeControlTypeExtension
310
+ : {}
311
+
312
+ type __MappedControlTypes<
313
+ K extends keyof TypeMappings = keyof TypeMappings
314
+ >
315
+ = K extends infer TControl
316
+ ? BaseControlType<TControl, TypeMappings[K]> & ControlTypeExtension<TControl>
317
+ : never
318
+
319
+ /**
320
+ * Параметры контрола.
321
+ *
322
+ **/
323
+ type ControlOptions = Expand<__MappedControlTypes & {
324
+
325
+ /**
326
+ * Заголовок, публикуемый в MQTT-топике (meta/title)
327
+ *
328
+ **/
262
329
  title?: Title
330
+
263
331
  /**
264
- * когда задано истинное значение, при запуске контроллера параметр всегда устанавливается в значение по умолчанию.
332
+ * Когда задано истинное значение, при запуске контроллера параметр всегда устанавливается в значение по умолчанию.
265
333
  * Иначе он будет установлен в последнее сохранённое значение.
266
- */
334
+ *
335
+ **/
267
336
  forceDefault?: boolean
337
+
268
338
  /**
269
- * когда задано истинное значение, параметр объявляется read-only
270
- */
339
+ * Когда задано истинное значение, параметр становится доступным только для чтения.
340
+ *
341
+ **/
271
342
  readonly?: boolean
272
- precision?: number
343
+
273
344
  /**
274
- * когда задано истинное значение, при описании контрола в коде фактическое создание его в mqtt происходить
275
- * не будет до тех пор, пока этому контролу не будет присвоено какое-то значение
276
- * (например dev[deviceID][controlID] = "string")
277
- */
345
+ * Когда задано истинное значение, при описании контрола в коде фактическое создание его в MQTT происходить
346
+ * не будет до тех пор, пока этому контролу не будет присвоено какое-либо значение.
347
+ *
348
+ * @example
349
+ * ```ts
350
+ * dev[deviceID][controlID] = "string"
351
+ * ```
352
+ **/
278
353
  lazyInit?: boolean
354
+
279
355
  /**
280
- * Порядок следования полей
281
- */
356
+ * Порядок следования полей.
357
+ *
358
+ **/
282
359
  order?: number
283
- /**
284
- * для параметра типа range может задавать его максимально допустимое значение
285
- */
286
- max?: number
287
- /**
288
- * для параметра типа range может задавать его минимально допустимое значение
289
- */
290
- min?: number
291
360
  }>
292
361
 
293
- // /**
294
- // * Конфигурация контрола.
295
- // */
296
- // interface ControlOptions<TControlType, TValueType> {
297
- // /**
298
- // * имя, публикуемое в MQTT-топике
299
- // */
300
- // title?: Title
301
- // /**
302
- // * тип, публикуемый в MQTT-топике
303
- // * @see ControlType
304
- // */
305
- // type: TControlType
306
- // /**
307
- // * значение параметра по умолчанию
308
- // */
309
- // value?: TValueType
310
- // /**
311
- // * когда задано истинное значение, при запуске контроллера параметр всегда устанавливается в значение по умолчанию.
312
- // * Иначе он будет установлен в последнее сохранённое значение.
313
- // */
314
- // forceDefault?: boolean
315
- // /**
316
- // * когда задано истинное значение, параметр объявляется read-only
317
- // */
318
- // readonly?: boolean
319
- // precision?: number
320
- // /**
321
- // * когда задано истинное значение, при описании контрола в коде фактическое создание его в mqtt происходить
322
- // * не будет до тех пор, пока этому контролу не будет присвоено какое-то значение
323
- // * (например dev[deviceID][controlID] = "string")
324
- // */
325
- // lazyInit?: boolean
326
- // /**
327
- // * Порядок следования полей
328
- // */
329
- // order?: number
330
- // /**
331
- // * для параметра типа range может задавать его максимально допустимое значение
332
- // */
333
- // max?: number
334
- // /**
335
- // * для параметра типа range может задавать его минимально допустимое значение
336
- // */
337
- // min?: number
338
- // }
339
-
340
362
  /**
341
363
  * Интерфейс устройства
342
364
  */
@@ -366,11 +388,12 @@ declare namespace WbRules {
366
388
  }
367
389
 
368
390
  /**
369
- * Функция, вызываемая при завершении процесса
391
+ * Функция, вызываемая при завершении процесса.
370
392
  * @param exitCode код возврата процесса
371
- * @param capturedOutput захваченный stdout процесса в виде строки в случае, когда задана опция captureOutput
372
- * @param capturedErrorOutput захваченный stderr процесса в виде строки в случае, когда задана опция captureErrorOutput
373
- */
393
+ * @param capturedOutput захваченный stdout процесса в виде строки в случае, когда задана опция {@link SpawnOptions.captureOutput}
394
+ * @param capturedErrorOutput захваченный stderr процесса в виде строки в случае, когда задана опция {@link SpawnOptions.captureErrorOutput}
395
+ *
396
+ **/
374
397
  type ExitCallback = (
375
398
  exitCode: number,
376
399
  capturedOutput?: string,
@@ -378,23 +401,30 @@ declare namespace WbRules {
378
401
  ) => void
379
402
 
380
403
  interface SpawnOptions {
404
+
381
405
  /**
382
- * Если true, захватить stdout процесса и передать его в виде строки в exitCallback
383
- */
406
+ * Если true, захватить stdout процесса и передать его в виде строки в {@link exitCallback}
407
+ *
408
+ **/
384
409
  captureOutput?: boolean
410
+
385
411
  /**
386
- * Если true, захватить stderr процесса и передать его в виде строки в exitCallback.
412
+ * Если true, захватить stderr процесса и передать его в виде строки в {@link exitCallback}.
387
413
  * Если данный параметр не задан, то stderr дочернего процесса направляется в stderr процесса wb-rules
388
- */
414
+ *
415
+ **/
389
416
  captureErrorOutput?: boolean
417
+
390
418
  /**
391
- * Строка, которую следует использовать в качестве содержимого stdin процесса
392
- */
419
+ * Строка, которую следует использовать в качестве содержимого stdin процесса.
420
+ *
421
+ **/
393
422
  input?: string
394
423
 
395
424
  /**
396
- * Функция, вызываемая при завершении процесса
397
- */
425
+ * Функция, вызываемая при завершении процесса.
426
+ *
427
+ **/
398
428
  exitCallback?: ExitCallback
399
429
  }
400
430
 
@@ -409,42 +439,48 @@ declare namespace WbRules {
409
439
 
410
440
  declare namespace NodeJS {
411
441
  interface Module {
412
- /**
413
- * Хранит данные, общие для всех экземпляров данного модуля.
414
- */
442
+ /** Хранит данные, общие для всех экземпляров данного модуля. */
415
443
  static: WbRules.ModuleStatic
416
444
  }
417
445
  }
418
446
 
447
+ /**
448
+ * Путь к текущему сценарию wb-rules (точке входа), даже в модулях.
449
+ * Пример строки: `/etc/wb-rules/my-script.js`
450
+ *
451
+ **/
452
+ declare var __filename: string
453
+
454
+ /** Используется для вывода сообщений в журнал контроллера и отладочную консоль. */
419
455
  declare var log: WbRules.Log
420
456
 
421
- /**
422
- * Объект доступа к MQTT-топикам устройства
423
- */
457
+ /** Объект доступа к MQTT-топикам устройства. */
424
458
  declare var dev: WbRules.Dev
425
459
 
426
- /**
427
- * Объект доступа к именованным таймерам
428
- */
460
+ /** Объект доступа к именованным таймера. */
429
461
  declare var timers: WbRules.TimerCollection
430
462
 
431
463
  /**
432
464
  * Создаёт правило обработки.
433
465
  * @param ruleName Название правила.
434
466
  * @param options Конфигурация правила.
435
- */
467
+ *
468
+ **/
436
469
  declare function defineRule(name: string, options: WbRules.RuleOptions): void
470
+
437
471
  /**
438
472
  * Создаёт анонимное правило обработки.
439
473
  * @param options Конфигурация правила.
440
- */
474
+ *
475
+ **/
441
476
  declare function defineRule(options: WbRules.RuleOptions): void
442
477
 
443
478
  /**
444
479
  * Создаёт виртуальное устройство.
445
480
  * @param deviceId Идентификатор устройства.
446
481
  * @param options Конфигурация устройства.
447
- */
482
+ *
483
+ **/
448
484
  declare function defineVirtualDevice(
449
485
  deviceId: string,
450
486
  options: WbRules.DeviceOptions
@@ -453,23 +489,25 @@ declare function defineVirtualDevice(
453
489
  /**
454
490
  * Позволяет получить объект для работы с указанным устройством.
455
491
  * @param deviceId Идентификатор устройства.
456
- */
492
+ *
493
+ **/
457
494
  declare function getDevice(deviceId: string): WbRules.Device | undefined
458
495
 
459
496
  /**
460
497
  * Позволяет получить объект для работы с указанным контролом устройства.
461
498
  * @param controlPath Строка в формате "deviceId/controlId"
462
- */
499
+ *
500
+ **/
463
501
  declare function getControl(controlPath: string): WbRules.Control | undefined
464
502
 
465
503
  /**
466
504
  * Запускает периодический таймер с указанным интервалом.
505
+ * К таймеру можно обратиться через `timers.<name>` внутри when при работе с {@link defineRule}.
467
506
  *
468
- * К таймеру можно обратиться через `timers.<name>` внутри when при работе с `defineRule`.
469
- *
470
- * @param name Идентификатор таймера в глобальном наборе `timers`.
507
+ * @param name Идентификатор таймера в глобальном наборе {@link timers}.
471
508
  * @param delay Интервал срабатывания, в миллисекундах
472
- */
509
+ *
510
+ **/
473
511
  declare function startTicker(name: string, interval: number): void
474
512
 
475
513
  /**
@@ -478,7 +516,7 @@ declare function startTicker(name: string, interval: number): void
478
516
  *
479
517
  * см. [руководство по однократным таймерам](https://github.com/wirenboard/wb-rules?tab=readme-ov-file#однократные)
480
518
  *
481
- * @param name Идентификатор таймера в глобальном наборе `timers`.
519
+ * @param name Идентификатор таймера в глобальном наборе {@link timers}.
482
520
  * @param delay
483
521
  *
484
522
  * Используется при работе с определениями правил:
@@ -502,16 +540,16 @@ declare function startTicker(name: string, interval: number): void
502
540
  * })
503
541
  *
504
542
  * ```
505
- *
506
543
  */
507
544
  declare function startTimer(name: string, delay: number): void
508
545
 
509
546
  /**
510
- * Запуск внешних процессов
547
+ * Запуск внешних процессов.
511
548
  * @param cmd
512
549
  * @param args
513
550
  * @param options
514
- */
551
+ *
552
+ **/
515
553
  declare function spawn(
516
554
  cmd: string,
517
555
  args: string[],
@@ -540,17 +578,25 @@ declare function readConfig(
540
578
  */
541
579
  declare function defineAlias(alias: string, controlPath: string): void
542
580
 
543
- /**
544
- * Следует учесть, что функция format и xformat съедают одинарные квадратные скобки!
545
- * Поэтому, если необходимо их вывести, то нужно дублировать.
546
- */
547
581
  interface String {
582
+ /**
583
+ * Осуществляет последовательную замену подстрок `{}` в указанной строке
584
+ * на строковые представления своих аргументов и возвращает результирующую строку.
585
+ * @param args
586
+ */
548
587
  format(...args: (string | number | boolean)[]): string
588
+
589
+ /**
590
+ * Осуществляет последовательную замену подстрок `{}` в указанной строке
591
+ * на строковые представления своих аргументов и возвращает результирующую строку.
592
+ *
593
+ * @warning В отличие от {@link format}, выполняет код внутри строки! Не использовать для обработки значений, вводимых пользователем.
594
+ */
549
595
  xformat(...args: (string | number | boolean)[]): string
550
596
  }
551
597
 
552
598
  /**
553
- * Подписаться на топик (допустимы символы # и +)
599
+ * Подписывает на прослушивание топика MQTT (допустимы символы # и +).
554
600
  * @param topic
555
601
  * @param callback
556
602
  */
@@ -560,17 +606,18 @@ declare function trackMqtt(
560
606
  ): void
561
607
 
562
608
  /**
563
- * Публикация сообщений в MQTT
564
- * Важно: не используйте publish() для изменения значения параметров устройств.
609
+ * Публикация сообщений в MQTT.
610
+ *
611
+ * Внимание! Не используйте `publish()` для изменения значения параметров устройств.
565
612
  * @param topic
566
613
  * @param payload
567
- * @param QoS
614
+ * @param qos
568
615
  * @param retain
569
616
  */
570
617
  declare function publish(
571
618
  topic: string,
572
619
  value: WbRules.MqttValue,
573
- QoS?: number,
620
+ qos?: number,
574
621
  retain?: boolean
575
622
  ): void
576
623