@mirta/globals 0.3.5 → 0.4.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.
- package/eslint/index.d.ts +3 -0
- package/eslint/index.js +3 -0
- package/package.json +2 -1
- package/types/index.d.ts +1 -0
- package/types/utils.d.ts +69 -0
- package/types/wb-rules.d.ts +77 -47
package/eslint/index.d.ts
CHANGED
|
@@ -7,6 +7,9 @@ declare interface GlobalsMirta {
|
|
|
7
7
|
readonly 'cron': false
|
|
8
8
|
readonly 'timers': false
|
|
9
9
|
readonly 'defineRule': false
|
|
10
|
+
readonly 'disableRule': false
|
|
11
|
+
readonly 'enableRule': false
|
|
12
|
+
readonly 'runRule': false
|
|
10
13
|
readonly 'defineAlias': false
|
|
11
14
|
readonly 'defineVirtualDevice': false
|
|
12
15
|
readonly 'getDevice': false
|
package/eslint/index.js
CHANGED
|
@@ -7,6 +7,9 @@ export default {
|
|
|
7
7
|
'cron': 'readonly',
|
|
8
8
|
'timers': 'readonly',
|
|
9
9
|
'defineRule': 'readonly',
|
|
10
|
+
'disableRule': 'readonly',
|
|
11
|
+
'enableRule': 'readonly',
|
|
12
|
+
'runRule': 'readonly',
|
|
10
13
|
'defineAlias': 'readonly',
|
|
11
14
|
'defineVirtualDevice': 'readonly',
|
|
12
15
|
'getDevice': 'readonly',
|
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.
|
|
4
|
+
"version": "0.4.0",
|
|
5
5
|
"license": "Unlicense",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"mirta",
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"LICENSE",
|
|
15
15
|
"README.md"
|
|
16
16
|
],
|
|
17
|
+
"types": "./types/index.d.ts",
|
|
17
18
|
"exports": {
|
|
18
19
|
".": {
|
|
19
20
|
"types": "./types/index.d.ts"
|
package/types/index.d.ts
CHANGED
package/types/utils.d.ts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Используется для нормализации составных типов.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* interface A { value: number }
|
|
7
|
+
* interface B { isReadonly: boolean }
|
|
8
|
+
*
|
|
9
|
+
* type C = A & B
|
|
10
|
+
* // A & B
|
|
11
|
+
*
|
|
12
|
+
* type D = Expand<A & B>
|
|
13
|
+
* // {
|
|
14
|
+
* // value: number;
|
|
15
|
+
* // isReadonly: boolean;
|
|
16
|
+
* // }
|
|
17
|
+
* ```
|
|
18
|
+
* @since 0.0.4
|
|
19
|
+
*
|
|
20
|
+
**/
|
|
21
|
+
declare type Expand<T> = { [K in keyof T]: T[K] } & {}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Разрешает частичное заполнение полей объекта, но требует наличия хотя бы одного поля.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* interface SafeRange {
|
|
29
|
+
* minValue: number
|
|
30
|
+
* maxValue: number
|
|
31
|
+
* }
|
|
32
|
+
*
|
|
33
|
+
* // Корректное объявление
|
|
34
|
+
* const a: AtLeastOne<SafeRange> = {
|
|
35
|
+
* minValue: 0
|
|
36
|
+
* }
|
|
37
|
+
*
|
|
38
|
+
* // Ошибка - требуется хотя бы одно из обязательных полей
|
|
39
|
+
* const b: AtLeastOne<SafeRange> = { }
|
|
40
|
+
* ```
|
|
41
|
+
* @since 0.3.3
|
|
42
|
+
*
|
|
43
|
+
**/
|
|
44
|
+
declare type AtLeastOne<T, U = { [K in keyof T]: Pick<T, K> }> = Partial<T> & U[keyof U]
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Утилита для создания "брендированных типов" (branded types).
|
|
48
|
+
*
|
|
49
|
+
* Позволяет создавать типобезопасные псевдонимы простых типов, предотвращая их взаимозаменяемость.
|
|
50
|
+
* Полезно для разграничения значений, имеющих одинаковый базовый тип, но разное назначение.
|
|
51
|
+
*
|
|
52
|
+
* На уровне JavaScript это не оказывает влияния (исчезает при компиляции),
|
|
53
|
+
* однако при работе с TypeScript обеспечивает строгую проверку типов.
|
|
54
|
+
*
|
|
55
|
+
* @template TValue - Базовый тип (например, string, number)
|
|
56
|
+
* @template TBrand - Уникальная метка, определяющая семантику типа
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* type UserID = Branded<string, 'UserID'>
|
|
60
|
+
* type OrderID = Branded<string, 'OrderID'>
|
|
61
|
+
*
|
|
62
|
+
* const userId: UserID = 'user-123' as UserID
|
|
63
|
+
* const orderId: OrderID = userId // Ошибка: типы 'UserID' и 'OrderID' несовместимы
|
|
64
|
+
*
|
|
65
|
+
* @since 0.4.0
|
|
66
|
+
*
|
|
67
|
+
**/
|
|
68
|
+
declare type Branded<TValue, TBrand extends string | symbol>
|
|
69
|
+
= TValue & { readonly __brand: TBrand }
|
package/types/wb-rules.d.ts
CHANGED
|
@@ -1,50 +1,6 @@
|
|
|
1
|
+
/// <reference path="./utils.d.ts" />
|
|
1
2
|
/// <reference path="./wb-rules/alarms.d.ts" />
|
|
2
3
|
|
|
3
|
-
/**
|
|
4
|
-
* Используется для нормализации составных типов.
|
|
5
|
-
*
|
|
6
|
-
* @example
|
|
7
|
-
* ```ts
|
|
8
|
-
* interface A { value: number }
|
|
9
|
-
* interface B { isReadonly: boolean }
|
|
10
|
-
*
|
|
11
|
-
* type C = A & B
|
|
12
|
-
* // A & B
|
|
13
|
-
*
|
|
14
|
-
* type D = Expand<A & B>
|
|
15
|
-
* // {
|
|
16
|
-
* // value: number;
|
|
17
|
-
* // isReadonly: boolean;
|
|
18
|
-
* // }
|
|
19
|
-
* ```
|
|
20
|
-
* @since 0.0.4
|
|
21
|
-
*
|
|
22
|
-
**/
|
|
23
|
-
declare type Expand<T> = { [K in keyof T]: T[K] } & {}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Разрешает частичное заполнение полей объекта, но требует наличия хотя бы одного поля.
|
|
27
|
-
*
|
|
28
|
-
* @example
|
|
29
|
-
* ```ts
|
|
30
|
-
* interface SafeRange {
|
|
31
|
-
* minValue: number
|
|
32
|
-
* maxValue: number
|
|
33
|
-
* }
|
|
34
|
-
*
|
|
35
|
-
* // Корректное объявление
|
|
36
|
-
* const a: AtLeastOne<SafeRange> = {
|
|
37
|
-
* minValue: 0
|
|
38
|
-
* }
|
|
39
|
-
*
|
|
40
|
-
* // Ошибка - требуется хотя бы одно из обязательных полей
|
|
41
|
-
* const b: AtLeastOne<SafeRange> = { }
|
|
42
|
-
* ```
|
|
43
|
-
* @since 0.3.3
|
|
44
|
-
*
|
|
45
|
-
**/
|
|
46
|
-
declare type AtLeastOne<T, U = { [K in keyof T]: Pick<T, K> }> = Partial<T> & U[keyof U]
|
|
47
|
-
|
|
48
4
|
/** Типы и интерфейсы правил wb-rules */
|
|
49
5
|
declare namespace WbRules {
|
|
50
6
|
|
|
@@ -216,6 +172,31 @@ declare namespace WbRules {
|
|
|
216
172
|
): void
|
|
217
173
|
}
|
|
218
174
|
|
|
175
|
+
/**
|
|
176
|
+
* Дескриптор, возвращаемый функцией {@link defineRule}.
|
|
177
|
+
*
|
|
178
|
+
* Используется для управления правилом: отключение,
|
|
179
|
+
* включение, принудительный запуск.
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```ts
|
|
183
|
+
* const cabinetLightRule = defineRule('cabinet_light', {
|
|
184
|
+
* whenChanged: 'motion/sensor',
|
|
185
|
+
* then: (newValue) => dev['light/power'] = newValue
|
|
186
|
+
* })
|
|
187
|
+
*
|
|
188
|
+
* // Отключить правило
|
|
189
|
+
* disableRule(cabinetLightRule)
|
|
190
|
+
*
|
|
191
|
+
* // Включить снова
|
|
192
|
+
* enableRule(cabinetLightRule)
|
|
193
|
+
* ```
|
|
194
|
+
*
|
|
195
|
+
* @since 0.4.0
|
|
196
|
+
*
|
|
197
|
+
**/
|
|
198
|
+
type RuleHandle = Branded<number, 'WbRules.RuleHandle'>
|
|
199
|
+
|
|
219
200
|
/**
|
|
220
201
|
* Соответствие типа контрола его типу значения.
|
|
221
202
|
* @since 0.0.4
|
|
@@ -716,14 +697,63 @@ declare function cron(spec: string): WbRules.CronEntry
|
|
|
716
697
|
* @param options Конфигурация правила.
|
|
717
698
|
*
|
|
718
699
|
**/
|
|
719
|
-
declare function defineRule(name: string, options: WbRules.RuleOptions):
|
|
700
|
+
declare function defineRule(name: string, options: WbRules.RuleOptions): WbRules.RuleHandle
|
|
720
701
|
|
|
721
702
|
/**
|
|
722
703
|
* Создаёт анонимное правило обработки.
|
|
723
704
|
* @param options Конфигурация правила.
|
|
724
705
|
*
|
|
725
706
|
**/
|
|
726
|
-
declare function defineRule(options: WbRules.RuleOptions):
|
|
707
|
+
declare function defineRule(options: WbRules.RuleOptions): WbRules.RuleHandle
|
|
708
|
+
|
|
709
|
+
/**
|
|
710
|
+
* Отключает правило. Оно перестаёт реагировать на события.
|
|
711
|
+
* Сохраняется в памяти — можно включить снова.
|
|
712
|
+
*
|
|
713
|
+
* @param rule - Дескриптор правила, возвращённый {@link defineRule}.
|
|
714
|
+
*
|
|
715
|
+
* @example
|
|
716
|
+
* ```ts
|
|
717
|
+
* const cabinetLightRule = defineRule({ ... })
|
|
718
|
+
* disableRule(cabinetLightRule)
|
|
719
|
+
* ```
|
|
720
|
+
* @since 0.4.0
|
|
721
|
+
*
|
|
722
|
+
**/
|
|
723
|
+
declare function disableRule(rule: WbRules.RuleHandle): void
|
|
724
|
+
|
|
725
|
+
/**
|
|
726
|
+
* Включает ранее отключённое правило.
|
|
727
|
+
*
|
|
728
|
+
* @param rule - Дескриптор правила, возвращённый {@link defineRule}.
|
|
729
|
+
*
|
|
730
|
+
* @example
|
|
731
|
+
* ```ts
|
|
732
|
+
* enableRule(cabinetLightRule)
|
|
733
|
+
* ```
|
|
734
|
+
* @since 0.4.0
|
|
735
|
+
*
|
|
736
|
+
**/
|
|
737
|
+
declare function enableRule(rule: WbRules.RuleHandle): void
|
|
738
|
+
|
|
739
|
+
/**
|
|
740
|
+
* Запускает правило по его дескриптору.
|
|
741
|
+
*
|
|
742
|
+
* @warning
|
|
743
|
+
* Контекст вызова будет пустым:
|
|
744
|
+
* - `newValue = undefined`
|
|
745
|
+
* - `deviceId = undefined`
|
|
746
|
+
* - `controlId = undefined`
|
|
747
|
+
*
|
|
748
|
+
* Не используйте `runRule` для правил, зависящих от этих значений.
|
|
749
|
+
* Вместо этого выносите общую логику в отдельную функцию и вызывайте её напрямую.
|
|
750
|
+
*
|
|
751
|
+
* @param rule - Дескриптор правила, возвращённый {@link defineRule}.
|
|
752
|
+
*
|
|
753
|
+
* @since 0.4.0
|
|
754
|
+
*
|
|
755
|
+
**/
|
|
756
|
+
declare function runRule(rule: WbRules.RuleHandle): void
|
|
727
757
|
|
|
728
758
|
/**
|
|
729
759
|
* Создаёт виртуальное устройство.
|