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