@mirta/basics 0.0.7 → 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 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<TArgs> = (args: TArgs) => void;
31
- interface Event<TArgs> {
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: EventHandler<TArgs>) => {
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: EventHandler<TArgs>) => void;
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: EventHandler<TArgs>) => void;
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: TArgs) => void;
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<TArgs = void>(): Event<TArgs>;
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
- function raise(args) {
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 };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mirta/basics",
3
3
  "description": "Utility functions providing core functionality for the Mirta Framework.",
4
- "version": "0.0.7",
4
+ "version": "0.1.0",
5
5
  "license": "Unlicense",
6
6
  "keywords": [
7
7
  "mirta",