@mirta/basics 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.
- package/dist/index.d.ts +13 -9
- package/dist/index.mjs +13 -7
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -26,9 +26,10 @@ declare const isString: (value: unknown) => value is string;
|
|
|
26
26
|
declare const isNumber: (value: unknown) => value is number;
|
|
27
27
|
/** Сужает диапазон множества типов до boolean */
|
|
28
28
|
declare const isBoolean: (value: unknown) => value is boolean;
|
|
29
|
+
declare const isFunction: (value: unknown) => value is ((...args: unknown[]) => unknown);
|
|
29
30
|
|
|
30
|
-
type EventHandler
|
|
31
|
-
interface Event<
|
|
31
|
+
type EventHandler = (...args: unknown[]) => void;
|
|
32
|
+
interface Event<THandler extends EventHandler> {
|
|
32
33
|
/**
|
|
33
34
|
* Подписывает на событие, есть возможность отписки.
|
|
34
35
|
* @example
|
|
@@ -41,7 +42,7 @@ interface Event<TArgs> {
|
|
|
41
42
|
* subscription.off()
|
|
42
43
|
* ```
|
|
43
44
|
**/
|
|
44
|
-
on: (handler:
|
|
45
|
+
on: (handler: THandler) => {
|
|
45
46
|
off: () => void;
|
|
46
47
|
};
|
|
47
48
|
/**
|
|
@@ -54,7 +55,7 @@ interface Event<TArgs> {
|
|
|
54
55
|
* stateChanged.once(() => { ... })
|
|
55
56
|
* ```
|
|
56
57
|
**/
|
|
57
|
-
once: (handler:
|
|
58
|
+
once: (handler: THandler) => void;
|
|
58
59
|
/**
|
|
59
60
|
* Отписывает указанный обработчик от прослушивания события.
|
|
60
61
|
* @example
|
|
@@ -69,7 +70,9 @@ interface Event<TArgs> {
|
|
|
69
70
|
* stateChanged.off(handler)
|
|
70
71
|
* ```
|
|
71
72
|
**/
|
|
72
|
-
off: (handler:
|
|
73
|
+
off: (handler: THandler) => void;
|
|
74
|
+
}
|
|
75
|
+
interface EventRaiser<THandler extends EventHandler> extends Event<THandler> {
|
|
73
76
|
/**
|
|
74
77
|
* Объявляет всем подписчикам о наступлении события.
|
|
75
78
|
* @example
|
|
@@ -80,7 +83,8 @@ interface Event<TArgs> {
|
|
|
80
83
|
* stateChanged.raise()
|
|
81
84
|
* ```
|
|
82
85
|
**/
|
|
83
|
-
raise: (args:
|
|
86
|
+
raise: (...args: Parameters<THandler>) => void;
|
|
87
|
+
withoutRaise: () => Event<THandler>;
|
|
84
88
|
}
|
|
85
89
|
/**
|
|
86
90
|
* Построитель экземпляра события.
|
|
@@ -103,7 +107,7 @@ interface Event<TArgs> {
|
|
|
103
107
|
* countChanged.raise(100)
|
|
104
108
|
* ```
|
|
105
109
|
*/
|
|
106
|
-
declare function useEvent<
|
|
110
|
+
declare function useEvent<THandler extends EventHandler>(): EventRaiser<THandler>;
|
|
107
111
|
|
|
108
|
-
export { debounce, isBoolean, isNumber, isString, throttle, useEvent };
|
|
109
|
-
export type { Event, EventHandler };
|
|
112
|
+
export { debounce, isBoolean, isFunction, isNumber, isString, throttle, useEvent };
|
|
113
|
+
export type { Event, EventHandler, EventRaiser };
|
package/dist/index.mjs
CHANGED
|
@@ -97,6 +97,7 @@ const isString = (value) => typeof value === 'string';
|
|
|
97
97
|
const isNumber = (value) => typeof value === 'number';
|
|
98
98
|
/** Сужает диапазон множества типов до boolean */
|
|
99
99
|
const isBoolean = (value) => typeof value === 'boolean';
|
|
100
|
+
const isFunction = (value) => typeof value === 'function';
|
|
100
101
|
|
|
101
102
|
/**
|
|
102
103
|
* Построитель экземпляра события.
|
|
@@ -136,24 +137,29 @@ function useEvent() {
|
|
|
136
137
|
};
|
|
137
138
|
}
|
|
138
139
|
function once(handler) {
|
|
139
|
-
const wrapper = (args) => {
|
|
140
|
-
handler(args);
|
|
140
|
+
const wrapper = ((...args) => {
|
|
141
|
+
handler(...args);
|
|
141
142
|
off(wrapper);
|
|
142
|
-
};
|
|
143
|
+
});
|
|
143
144
|
handlers.push(wrapper);
|
|
144
145
|
}
|
|
145
|
-
|
|
146
|
+
const raise = (...args) => {
|
|
146
147
|
// Защита от сдвига в массиве при выполнении once.
|
|
147
148
|
const handlersCopy = handlers.concat();
|
|
148
149
|
for (let i = 0, len = handlersCopy.length; i < len; i++)
|
|
149
|
-
(handlersCopy[i])(args);
|
|
150
|
-
}
|
|
150
|
+
(handlersCopy[i])(...args);
|
|
151
|
+
};
|
|
151
152
|
return {
|
|
152
153
|
on,
|
|
153
154
|
once,
|
|
154
155
|
off,
|
|
155
156
|
raise,
|
|
157
|
+
withoutRaise: () => ({
|
|
158
|
+
on,
|
|
159
|
+
once,
|
|
160
|
+
off,
|
|
161
|
+
}),
|
|
156
162
|
};
|
|
157
163
|
}
|
|
158
164
|
|
|
159
|
-
export { debounce, isBoolean, isNumber, isString, throttle, useEvent };
|
|
165
|
+
export { debounce, isBoolean, isFunction, isNumber, isString, throttle, useEvent };
|