@endge/utils 0.27.1 → 1.0.0-dev
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/events/EventBus.d.ts +0 -1
- package/dist/events/Subscribable.d.ts +9 -4
- package/dist/serialize/decorators/json.d.ts +0 -9
- package/dist/serialize/decorators/script.d.ts +0 -9
- package/dist/shared/utils/time.d.ts +0 -5
- package/dist/tools/console.d.ts +0 -2
- package/dist/tools/keyboard.d.ts +0 -2
- package/dist/tools/logs.d.ts +0 -7
- package/dist/tools/reflect.d.ts +0 -9
- package/dist/tools/tools.types.d.ts +0 -70
- package/dist/utils.js +8 -4
- package/package.json +5 -1
|
@@ -6,7 +6,6 @@ import { OneOrMany } from '../tools/tools.types';
|
|
|
6
6
|
export type EventCallback<T = any> = (payload: T) => void;
|
|
7
7
|
export type EventList = Record<string, any>;
|
|
8
8
|
export interface EventBusOptions {
|
|
9
|
-
/** При наличии изолирует ошибки подписчиков, включая rejected Promise. */
|
|
10
9
|
onListenerError?: (error: unknown, event: string) => void;
|
|
11
10
|
}
|
|
12
11
|
/**
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
/** Минимальный framework-independent contract объекта с подпиской на изменения. */
|
|
2
1
|
export interface SubscribableLike {
|
|
3
2
|
subscribe: (listener: () => void) => () => void;
|
|
4
3
|
}
|
|
5
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Публикует изменения владельца состояния без зависимости от UI framework.
|
|
6
|
+
*/
|
|
6
7
|
export declare class Subscribable implements SubscribableLike {
|
|
7
8
|
private readonly _subscribers;
|
|
8
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Подписывает listener и возвращает идемпотентную функцию отписки.
|
|
11
|
+
*/
|
|
9
12
|
subscribe(listener: () => void): () => void;
|
|
10
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Уведомляет текущих подписчиков об изменении владельца состояния.
|
|
15
|
+
*/
|
|
11
16
|
notify(): void;
|
|
12
17
|
}
|
|
@@ -26,16 +26,11 @@ export declare function toIsoZDate(value: string): string | null;
|
|
|
26
26
|
export declare function toIsoZDateTime(value: string): string | null;
|
|
27
27
|
export declare function isoToDateInput(value: unknown): string;
|
|
28
28
|
export declare function isoToDateTimeLocalInput(value: unknown): string;
|
|
29
|
-
/** Форматирует DateTime как `HH:mm` в настроенном часовом поясе IANA или локальном поясе браузера. */
|
|
30
29
|
export declare function isoDateTimeToTimeInput(value: unknown, timezone?: unknown): string;
|
|
31
|
-
/** Заменяет только часы и минуты, сохраняя календарную дату DateTime в выбранном часовом поясе. */
|
|
32
30
|
export declare function mergeTimeIntoDateTime(value: unknown, time: unknown, timezone?: unknown): string | null;
|
|
33
31
|
export declare function timeToTimeInput(value: unknown): string;
|
|
34
32
|
export declare function toTimeHHMMSS(value: unknown): string | null;
|
|
35
33
|
export declare function parseDuration(duration: string): string;
|
|
36
34
|
export declare function formatDatetimeTZSpecial(date?: Date | string | object | null, formatString?: string, options?: {}): string;
|
|
37
|
-
/**
|
|
38
|
-
* Возвращает первую найденную IANA-таймзону с данным смещением (например, "+03:00").
|
|
39
|
-
*/
|
|
40
35
|
export declare function parseOffsetToTimezone(offsetStr: string): string | null;
|
|
41
36
|
export declare function getTimezoneOffsetMs(timezone: string): number;
|
package/dist/tools/console.d.ts
CHANGED
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
/** Возвращает строку ограниченной длины без обхода или удержания переданного значения. */
|
|
2
1
|
export declare function consoleValueSummary(value: unknown): string;
|
|
3
|
-
/** Возвращает метаданные Error как текст, не передавая объект Error в Console. */
|
|
4
2
|
export declare function consoleErrorSummary(error: unknown): string;
|
package/dist/tools/keyboard.d.ts
CHANGED
|
@@ -15,7 +15,5 @@ export interface KeyboardStateSnapshot {
|
|
|
15
15
|
code: string[];
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
-
/** Возвращает общий snapshot клавиатуры уровня document, лениво устанавливая один tracker. */
|
|
19
18
|
export declare function getKeyboardStateSnapshot(target: Document): KeyboardStateSnapshot;
|
|
20
|
-
/** Подписывается на общее состояние клавиатуры уровня document и сразу публикует его snapshot. */
|
|
21
19
|
export declare function subscribeKeyboardState(target: Document, listener: (snapshot: KeyboardStateSnapshot) => void): () => void;
|
package/dist/tools/logs.d.ts
CHANGED
|
@@ -18,15 +18,10 @@ import { Subscribable } from '../events/Subscribable';
|
|
|
18
18
|
* }
|
|
19
19
|
*/
|
|
20
20
|
export interface StructuredLogEntry {
|
|
21
|
-
/** Время создания лога (timestamp в ms) */
|
|
22
21
|
timestamp: number;
|
|
23
|
-
/** Уровень лога: _debug, info, warn или error */
|
|
24
22
|
level: 'debug' | 'info' | 'warn' | 'error' | 'success';
|
|
25
|
-
/** Сообщение лога */
|
|
26
23
|
message: string;
|
|
27
|
-
/** Контекст (иерархия вложенности) */
|
|
28
24
|
context: Array<string>;
|
|
29
|
-
/** Дополнительные действия (например, кнопки для лога) */
|
|
30
25
|
actions?: Array<{
|
|
31
26
|
icon: string;
|
|
32
27
|
tooltip?: string;
|
|
@@ -62,9 +57,7 @@ export interface StructuredLogEntry {
|
|
|
62
57
|
* const logs = logger.getLogs()
|
|
63
58
|
*/
|
|
64
59
|
export declare class StructuredLogger extends Subscribable {
|
|
65
|
-
/** Массив всех логов */
|
|
66
60
|
private _logs;
|
|
67
|
-
/** Текущий контекст (иерархия) */
|
|
68
61
|
private _currentContext;
|
|
69
62
|
private _currentActions;
|
|
70
63
|
/**
|
package/dist/tools/reflect.d.ts
CHANGED
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Проверяет, является ли переданная функция конструктором.
|
|
3
|
-
*/
|
|
4
1
|
export declare function isConstructor<T extends new (...args: Array<any>) => any>(fn: any): fn is T;
|
|
5
|
-
/**
|
|
6
|
-
* Утилитарный тип: или конструктор, или фабрика.
|
|
7
|
-
*/
|
|
8
2
|
export type ConstructorOrFactory<T, Args extends Array<any> = Array<any>> = (new (...args: Args) => T) | ((...args: Args) => T);
|
|
9
|
-
/**
|
|
10
|
-
* Универсальный вызов: конструктор или фабрика.
|
|
11
|
-
*/
|
|
12
3
|
export declare function createInstance<T, Args extends Array<any>>(source: ConstructorOrFactory<T, Args>, ...args: Args): T;
|
|
@@ -1,101 +1,31 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Тип, обозначающий возможное отсутствие значения.
|
|
3
|
-
* Аналог Maybe<P> из функционального программирования.
|
|
4
|
-
*/
|
|
5
1
|
export type Maybe<T> = T | null | undefined;
|
|
6
|
-
/**
|
|
7
|
-
* Тип, обозначающий возможное значение null.
|
|
8
|
-
*/
|
|
9
2
|
export type Nullable<T> = T | null;
|
|
10
|
-
/**
|
|
11
|
-
* Тип, обозначающий возможное значение undefined.
|
|
12
|
-
*/
|
|
13
3
|
export type Undefinable<T> = T | undefined;
|
|
14
|
-
/**
|
|
15
|
-
* Тип конструктора для класса.
|
|
16
|
-
* Используется, например, в DI-контейнерах или фабриках.
|
|
17
|
-
*/
|
|
18
4
|
export type Constructor<T = any> = new (...args: Array<any>) => T;
|
|
19
|
-
/**
|
|
20
|
-
* Частичный рекурсивный тип.
|
|
21
|
-
* Делает все поля и вложенные поля необязательными.
|
|
22
|
-
*/
|
|
23
5
|
export type DeepPartial<T> = {
|
|
24
6
|
[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
|
|
25
7
|
};
|
|
26
|
-
/**
|
|
27
|
-
* Тип, исключающий null и undefined.
|
|
28
|
-
*/
|
|
29
8
|
export type NonNullableStrict<T> = T extends null | undefined ? never : T;
|
|
30
|
-
/**
|
|
31
|
-
* Тип, позволяющий переопределить свойства в типе.
|
|
32
|
-
* Аналог расширения типов с заменой полей.
|
|
33
|
-
*/
|
|
34
9
|
export type Override<Base, Overrides> = Omit<Base, keyof Overrides> & Overrides;
|
|
35
|
-
/**
|
|
36
|
-
* Тип для асинхронной функции.
|
|
37
|
-
*/
|
|
38
10
|
export type AsyncFn<Args extends Array<any> = Array<any>, R = any> = (...args: Args) => Promise<R>;
|
|
39
|
-
/**
|
|
40
|
-
* Тип, представляющий значение или промис значения.
|
|
41
|
-
*/
|
|
42
11
|
export type Awaitable<T> = T | Promise<T>;
|
|
43
|
-
/**
|
|
44
|
-
* Тип, представляющий функцию без аргументов и без возвращаемого значения.
|
|
45
|
-
*/
|
|
46
12
|
export type VoidFn = () => void;
|
|
47
|
-
/**
|
|
48
|
-
* Alias для обратной совместимости, используемый legacy-пакетами.
|
|
49
|
-
*/
|
|
50
13
|
export type VoidFunction = VoidFn;
|
|
51
|
-
/**
|
|
52
|
-
* Тип, обозначающий словарь значений.
|
|
53
|
-
*/
|
|
54
14
|
export type Dictionary<T = any> = Record<string, T>;
|
|
55
|
-
/**
|
|
56
|
-
* Нестрогая запись объекта для обратной совместимости.
|
|
57
|
-
*/
|
|
58
15
|
export type AnyRecord = Record<string, any>;
|
|
59
|
-
/**
|
|
60
|
-
* Тип, обозначающий функцию обратного вызова (callback).
|
|
61
|
-
*/
|
|
62
16
|
export type Callback<T = void> = (arg: T) => void;
|
|
63
|
-
/**
|
|
64
|
-
* Тип с возможностью `null`, `undefined` или любого значения.
|
|
65
|
-
*/
|
|
66
17
|
export type Falsy = false | '' | 0 | null | undefined;
|
|
67
|
-
/**
|
|
68
|
-
* Тип, исключающий falsy-значения.
|
|
69
|
-
*/
|
|
70
18
|
export type Truthy<T> = T extends Falsy ? never : T;
|
|
71
|
-
/**
|
|
72
|
-
* Тип, объединяющий `P` или массив `P`.
|
|
73
|
-
*/
|
|
74
19
|
export type MaybeArray<T> = T | Array<T>;
|
|
75
|
-
/**
|
|
76
|
-
* Тип, возвращающий все ключи объекта, значения которых равны заданному типу.
|
|
77
|
-
*/
|
|
78
20
|
export type KeysWithType<T, U> = {
|
|
79
21
|
[K in keyof T]: T[K] extends U ? K : never;
|
|
80
22
|
}[keyof T];
|
|
81
|
-
/**
|
|
82
|
-
* Тип, помечающий, что значение может быть `never` или `void`, и его можно проигнорировать.
|
|
83
|
-
*/
|
|
84
23
|
export type Ignored = never | void;
|
|
85
|
-
/**
|
|
86
|
-
* Универсальный тип для одного или нескольких объектов.
|
|
87
|
-
*/
|
|
88
24
|
export type OneOrMany<T> = T | Array<T>;
|
|
89
|
-
/**
|
|
90
|
-
* Тип для активного состояния с вычисляемым значением.
|
|
91
|
-
*/
|
|
92
25
|
export interface ActiveState<T> {
|
|
93
26
|
value: T;
|
|
94
27
|
computed: T;
|
|
95
28
|
}
|
|
96
|
-
/**
|
|
97
|
-
* Тип для глубокой частичной рекурсии.
|
|
98
|
-
*/
|
|
99
29
|
export type PartialDeep<T> = T extends (...args: Array<any>) => any ? T : T extends Array<infer U> ? Array<PartialDeep<U>> : T extends object ? {
|
|
100
30
|
[K in keyof T]?: PartialDeep<T[K]>;
|
|
101
31
|
} : T;
|
package/dist/utils.js
CHANGED
|
@@ -157,13 +157,17 @@ class U {
|
|
|
157
157
|
constructor() {
|
|
158
158
|
o(this, "_subscribers", /* @__PURE__ */ new Set());
|
|
159
159
|
}
|
|
160
|
-
/**
|
|
160
|
+
/**
|
|
161
|
+
* Подписывает listener и возвращает идемпотентную функцию отписки.
|
|
162
|
+
*/
|
|
161
163
|
subscribe(t) {
|
|
162
164
|
return this._subscribers.add(t), () => {
|
|
163
165
|
this._subscribers.delete(t);
|
|
164
166
|
};
|
|
165
167
|
}
|
|
166
|
-
/**
|
|
168
|
+
/**
|
|
169
|
+
* Уведомляет текущих подписчиков об изменении владельца состояния.
|
|
170
|
+
*/
|
|
167
171
|
notify() {
|
|
168
172
|
for (const t of this._subscribers)
|
|
169
173
|
t();
|
|
@@ -1120,9 +1124,9 @@ function C(r) {
|
|
|
1120
1124
|
class ne extends U {
|
|
1121
1125
|
constructor() {
|
|
1122
1126
|
super(...arguments);
|
|
1123
|
-
|
|
1127
|
+
// Массив всех логов
|
|
1124
1128
|
o(this, "_logs", []);
|
|
1125
|
-
|
|
1129
|
+
// Текущий контекст (иерархия)
|
|
1126
1130
|
o(this, "_currentContext", []);
|
|
1127
1131
|
o(this, "_currentActions", []);
|
|
1128
1132
|
}
|
package/package.json
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@endge/utils",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "1.0.0-dev",
|
|
5
5
|
"private": false,
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/endge-lab/utils.git"
|
|
9
|
+
},
|
|
6
10
|
"sideEffects": false,
|
|
7
11
|
"exports": {
|
|
8
12
|
".": {
|