@nemigo/helpers 0.13.3 → 1.5.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.
Files changed (111) hide show
  1. package/dist/aggregator.d.ts +33 -0
  2. package/dist/aggregator.js +44 -0
  3. package/dist/array.d.ts +33 -0
  4. package/dist/array.js +24 -0
  5. package/dist/async/context.d.ts +73 -0
  6. package/dist/async/context.js +90 -0
  7. package/dist/async/future.d.ts +54 -0
  8. package/dist/async/future.js +71 -0
  9. package/dist/async/index.d.ts +56 -27
  10. package/dist/async/index.js +63 -58
  11. package/dist/async/loader.d.ts +67 -0
  12. package/dist/async/loader.js +101 -0
  13. package/dist/async/queue.d.ts +51 -0
  14. package/dist/async/queue.js +84 -0
  15. package/dist/cases.d.ts +31 -21
  16. package/dist/cases.js +41 -37
  17. package/dist/clean.d.ts +44 -26
  18. package/dist/clean.js +67 -42
  19. package/dist/color/types.d.ts +31 -0
  20. package/dist/color/types.js +1 -0
  21. package/dist/datetime/delta.d.ts +28 -0
  22. package/dist/datetime/delta.js +65 -0
  23. package/dist/datetime/format.d.ts +53 -0
  24. package/dist/datetime/format.js +119 -0
  25. package/dist/datetime/index.d.ts +6 -0
  26. package/dist/datetime/index.js +22 -0
  27. package/dist/datetime/plural.d.ts +77 -0
  28. package/dist/datetime/plural.js +78 -0
  29. package/dist/emitter.d.ts +29 -17
  30. package/dist/emitter.js +35 -21
  31. package/dist/explorer.d.ts +22 -29
  32. package/dist/explorer.js +18 -16
  33. package/dist/files.d.ts +31 -2
  34. package/dist/files.js +33 -8
  35. package/dist/fish.d.ts +29 -0
  36. package/dist/fish.js +70 -0
  37. package/dist/html/cookie.d.ts +48 -0
  38. package/dist/html/cookie.js +37 -0
  39. package/dist/html/events.d.ts +133 -0
  40. package/dist/html/events.js +139 -0
  41. package/dist/html/index.d.ts +31 -0
  42. package/dist/html/index.js +61 -0
  43. package/dist/index.d.ts +38 -40
  44. package/dist/index.js +43 -56
  45. package/dist/jiff/apply.d.ts +93 -0
  46. package/dist/jiff/apply.js +64 -0
  47. package/dist/jiff/extract.d.ts +7 -0
  48. package/dist/jiff/extract.js +82 -0
  49. package/dist/jiff/types.d.ts +57 -0
  50. package/dist/jiff/types.js +1 -0
  51. package/dist/lens.d.ts +20 -31
  52. package/dist/lens.js +22 -37
  53. package/dist/msgpack.d.ts +11 -26
  54. package/dist/msgpack.js +9 -21
  55. package/dist/mutate.d.ts +70 -0
  56. package/dist/mutate.js +130 -0
  57. package/dist/omitter.d.ts +54 -34
  58. package/dist/omitter.js +33 -25
  59. package/dist/path.d.ts +20 -1
  60. package/dist/path.js +21 -2
  61. package/dist/phymath/format.d.ts +60 -0
  62. package/dist/phymath/format.js +34 -0
  63. package/dist/phymath/index.d.ts +30 -30
  64. package/dist/phymath/index.js +41 -33
  65. package/dist/promoter.d.ts +20 -12
  66. package/dist/promoter.js +24 -17
  67. package/dist/random.d.ts +20 -21
  68. package/dist/random.js +22 -23
  69. package/dist/rubles.d.ts +24 -0
  70. package/dist/rubles.js +24 -0
  71. package/dist/script.d.ts +60 -13
  72. package/dist/script.js +46 -10
  73. package/dist/string.d.ts +46 -92
  74. package/dist/string.js +46 -171
  75. package/dist/types.d.ts +144 -25
  76. package/dist/url/index.d.ts +12 -0
  77. package/dist/url/index.js +17 -0
  78. package/dist/url/params.d.ts +141 -0
  79. package/dist/{url.js → url/params.js} +90 -18
  80. package/dist/url/slug.d.ts +28 -0
  81. package/dist/url/slug.js +102 -0
  82. package/dist/veil.d.ts +14 -0
  83. package/dist/veil.js +26 -0
  84. package/dist/xod.d.ts +237 -16
  85. package/dist/xod.js +192 -18
  86. package/dist/zipper.d.ts +22 -4
  87. package/dist/zipper.js +22 -5
  88. package/package.json +82 -34
  89. package/dist/async/space.d.ts +0 -8
  90. package/dist/async/space.js +0 -31
  91. package/dist/cleanup.d.ts +0 -9
  92. package/dist/cleanup.js +0 -18
  93. package/dist/colors.d.ts +0 -539
  94. package/dist/colors.js +0 -888
  95. package/dist/cookie.d.ts +0 -60
  96. package/dist/cookie.js +0 -48
  97. package/dist/datetime.d.ts +0 -82
  98. package/dist/datetime.js +0 -161
  99. package/dist/format.d.ts +0 -36
  100. package/dist/format.js +0 -26
  101. package/dist/future.d.ts +0 -51
  102. package/dist/future.js +0 -71
  103. package/dist/html.d.ts +0 -145
  104. package/dist/html.js +0 -205
  105. package/dist/humanly.d.ts +0 -9
  106. package/dist/humanly.js +0 -93
  107. package/dist/lru.d.ts +0 -77
  108. package/dist/lru.js +0 -128
  109. package/dist/queue.d.ts +0 -40
  110. package/dist/queue.js +0 -56
  111. package/dist/url.d.ts +0 -61
@@ -0,0 +1,93 @@
1
+ import type { JiffPatch, Patch } from "./types.js";
2
+ /**
3
+ * Кастомный патч или `never`. Вспомогательный тип для {@link jiffApply}
4
+ */
5
+ export type NeverPatch = Patch<string> | never;
6
+ /**
7
+ * Ошибка последовательности патчей из {@link jiffApply}
8
+ */
9
+ export interface JIFF_PROPERTY_ERROR<CustomPatch extends NeverPatch = never> {
10
+ /**
11
+ * Нарушена последовательность, ключ не найден
12
+ */
13
+ type: "property";
14
+ /**
15
+ * Патч, который вызвал ошибку
16
+ */
17
+ patch: CustomPatch | JiffPatch;
18
+ /**
19
+ * Переданный в функцию объект
20
+ */
21
+ obj: object;
22
+ /**
23
+ * Объект, к которому применяется патч
24
+ */
25
+ cursor: object;
26
+ /**
27
+ * Ключ, который был не найден
28
+ */
29
+ property: string;
30
+ }
31
+ /**
32
+ * Ошибка патча из {@link jiffApply}
33
+ */
34
+ export interface JIFF_PATCH_ERROR<CustomPatch extends NeverPatch = never> {
35
+ /**
36
+ * - "path" - невалидный путь в патче
37
+ * - "operation" - неизвестная операция в патче
38
+ */
39
+ type: "path" | "operation";
40
+ /**
41
+ * Патч, который вызвал ошибку
42
+ */
43
+ patch: CustomPatch | JiffPatch;
44
+ /**
45
+ * Переданный в функцию объект
46
+ */
47
+ obj: object;
48
+ /**
49
+ * Для совместимости с {@link JIFF_PROPERTY_ERROR}
50
+ */
51
+ cursor?: never;
52
+ /**
53
+ * Для совместимости с {@link JIFF_PROPERTY_ERROR}
54
+ */
55
+ property?: never;
56
+ }
57
+ /**
58
+ * Типы ошибок для {@link jiffApply}
59
+ */
60
+ export type JIFF_ERROR<CustomPatch extends NeverPatch = never> = JIFF_PATCH_ERROR<CustomPatch> | JIFF_PROPERTY_ERROR<CustomPatch>;
61
+ /**
62
+ * Дополнительные возможности {@link jiffApply}
63
+ */
64
+ export interface JiffApplyProps<CustomPatch extends NeverPatch = never> {
65
+ /**
66
+ * Обработка ошибок
67
+ */
68
+ onerror?: (err: JIFF_ERROR<CustomPatch>) => void;
69
+ /**
70
+ * Обработка кастомных патчей
71
+ *
72
+ * @template CustomPatch
73
+ * @param patch - Патч
74
+ * @param cursor - Текущий объект-курсор
75
+ * @param target - Целевое свойство
76
+ * @returns `true` если патч успешно обработан, `false` в противном случае
77
+ */
78
+ custom?: (patch: CustomPatch, cursor: Record<string, unknown>, target: string) => boolean;
79
+ }
80
+ /**
81
+ * Применяет массив JSON-патчей к объекту
82
+ *
83
+ * Если патч неизвестен или нарушена последовательность модификации (`add "/foo/bar"` должен быть применён после `add "/foo"`) объекта,
84
+ * вызывает `props.onerror`, но объект будет изменён согласно патчам независимо от наличия ошибок
85
+ *
86
+ * @template CustomPatch - Типы пользовательских патчей (если используются), обработка через {@link JiffApplyProps.custom}
87
+ * @param obj - Объект, к которому применяется патч
88
+ * @param jiff - Массив патчей для применения
89
+ * @param [props] - Дополнительные возможности обработки патчей
90
+ *
91
+ * @see https://jsonpatch.com/ Документация стандарта
92
+ */
93
+ export declare function jiffApply<CustomPatch extends NeverPatch = never>(obj: object, jiff: (CustomPatch | JiffPatch)[], props?: JiffApplyProps<CustomPatch>): void;
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Применяет массив JSON-патчей к объекту
3
+ *
4
+ * Если патч неизвестен или нарушена последовательность модификации (`add "/foo/bar"` должен быть применён после `add "/foo"`) объекта,
5
+ * вызывает `props.onerror`, но объект будет изменён согласно патчам независимо от наличия ошибок
6
+ *
7
+ * @template CustomPatch - Типы пользовательских патчей (если используются), обработка через {@link JiffApplyProps.custom}
8
+ * @param obj - Объект, к которому применяется патч
9
+ * @param jiff - Массив патчей для применения
10
+ * @param [props] - Дополнительные возможности обработки патчей
11
+ *
12
+ * @see https://jsonpatch.com/ Документация стандарта
13
+ */
14
+ export function jiffApply(obj, jiff, props) {
15
+ for (const patch of jiff) {
16
+ // Разделение пути патча на массив сегментов ("/foo/bar" -> ["foo", "bar"])
17
+ const path = patch.path.split("/").slice(1);
18
+ // Извлекаем последний сегмент пути как целевой элемент ("bar")
19
+ const target = path.pop();
20
+ if (!target) {
21
+ // Если путь невалидный (например, пустой), вызываем onerror с ошибкой типа "path"
22
+ props?.onerror?.({ type: "path", obj, patch });
23
+ continue;
24
+ }
25
+ // Начинаем с основного объекта
26
+ let cursor = obj;
27
+ for (const property of path) {
28
+ if (!(property in cursor)) {
29
+ // Ожидаемый ключ не найден
30
+ cursor[property] = {};
31
+ props?.onerror?.({ type: "property", property, obj, cursor, patch });
32
+ }
33
+ // Вложенный объект
34
+ cursor = cursor[property];
35
+ }
36
+ // Для патчей "remove" и "replace" проверяем существование целевого элемента
37
+ if (patch.op === "remove" || patch.op === "replace") {
38
+ if (!(target in cursor)) {
39
+ // Ожидаемый ключ не найден
40
+ cursor[target] = {};
41
+ props?.onerror?.({ type: "property", property: target, obj, cursor, patch });
42
+ }
43
+ }
44
+ switch (patch.op) {
45
+ case "remove":
46
+ if (Array.isArray(cursor))
47
+ cursor.splice(Number(target), 1);
48
+ else
49
+ delete cursor[target];
50
+ break;
51
+ case "replace":
52
+ case "add":
53
+ // Для операций "replace" и "add" устанавливаем новое значение
54
+ cursor[target] = patch.value;
55
+ break;
56
+ default:
57
+ // Если патч неизвестный, пытаемся применить кастомный обработчик
58
+ if (props?.custom?.(patch, cursor, target))
59
+ continue;
60
+ // В случае неизвестной операции вызываем onerror
61
+ props?.onerror?.({ type: "operation", obj, patch });
62
+ }
63
+ }
64
+ }
@@ -0,0 +1,7 @@
1
+ import type { JiffPatch } from "./types.js";
2
+ /**
3
+ * Генерирует список патчей для преобразования исходного объекта в целевой
4
+ *
5
+ * @see https://jsonpatch.com/ Документация стандарта
6
+ */
7
+ export declare function jiffExtract(source: object, target: object): JiffPatch[];
@@ -0,0 +1,82 @@
1
+ import { isObject, isSameType } from "../index.js";
2
+ const handleArrayDifference = (sourceArr, targetArr, currentPath, diffs) => {
3
+ // Удаление лишних элементов
4
+ for (let i = sourceArr.length - 1; i >= targetArr.length; i--) {
5
+ diffs.remove.push({
6
+ op: "remove",
7
+ path: `/${[...currentPath, i].join("/")}`,
8
+ });
9
+ }
10
+ // Обработка существующих элементов
11
+ for (let i = 0; i < Math.max(sourceArr.length, targetArr.length); i++) {
12
+ const path = [...currentPath, i];
13
+ const sourceItem = sourceArr[i];
14
+ const targetItem = targetArr[i];
15
+ if (i >= targetArr.length) {
16
+ // Элементы за пределами targetArr уже обработаны в удалении
17
+ continue;
18
+ }
19
+ if (i >= sourceArr.length) {
20
+ // Добавление новых элементов обрабатываем здесь
21
+ diffs.add.push({
22
+ op: "add",
23
+ path: `/${path.join("/")}`,
24
+ value: targetItem,
25
+ });
26
+ continue;
27
+ }
28
+ compareValues(sourceItem, targetItem, path, diffs);
29
+ }
30
+ };
31
+ const handleObjectDifference = (sourceObj, targetObj, currentPath, diffs) => {
32
+ // Удаление отсутствующих свойств
33
+ Object.keys(sourceObj).forEach((key) => {
34
+ if (!(key in targetObj)) {
35
+ diffs.remove.push({
36
+ op: "remove",
37
+ path: `/${[...currentPath, key].join("/")}`,
38
+ });
39
+ }
40
+ });
41
+ // Обработка существующих и новых свойств
42
+ Object.entries(targetObj).forEach(([key, targetValue]) => {
43
+ const path = [...currentPath, key];
44
+ const sourceValue = sourceObj[key];
45
+ if (!(key in sourceObj)) {
46
+ diffs.add.push({ op: "add", path: `/${path.join("/")}`, value: targetValue });
47
+ }
48
+ else {
49
+ compareValues(sourceValue, targetValue, path, diffs);
50
+ }
51
+ });
52
+ };
53
+ const compareValues = (source, target, currentPath, diffs) => {
54
+ if (!isSameType(source, target)) {
55
+ diffs.replace.push({ op: "replace", path: `/${currentPath.join("/")}`, value: target });
56
+ return;
57
+ }
58
+ if (Array.isArray(target)) {
59
+ handleArrayDifference(source, target, currentPath, diffs);
60
+ }
61
+ else if (isObject(target)) {
62
+ handleObjectDifference(source, target, currentPath, diffs);
63
+ }
64
+ else if (source !== target) {
65
+ diffs.replace.push({ op: "replace", path: `/${currentPath.join("/")}`, value: target });
66
+ }
67
+ };
68
+ //...
69
+ /**
70
+ * Генерирует список патчей для преобразования исходного объекта в целевой
71
+ *
72
+ * @see https://jsonpatch.com/ Документация стандарта
73
+ */
74
+ export function jiffExtract(source, target) {
75
+ const diffs = {
76
+ remove: [],
77
+ replace: [],
78
+ add: [],
79
+ };
80
+ compareValues(source, target, [], diffs);
81
+ return [...diffs.remove.reverse(), ...diffs.replace, ...diffs.add];
82
+ }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Интерфейс базового патча, который описывает операцию изменения объекта
3
+ *
4
+ * @see https://jsonpatch.com Документация стандарта
5
+ */
6
+ export interface Patch<O extends string> {
7
+ /**
8
+ * Путь к изменяемому элементу в объекте
9
+ *
10
+ * @example "/foo/bar"
11
+ */
12
+ path: string;
13
+ /**
14
+ * Тип операции патча
15
+ *
16
+ * @example "add" | "remove" | "replace"
17
+ */
18
+ op: O;
19
+ }
20
+ /**
21
+ * Патч добавления значения ("add")
22
+ *
23
+ * @see https://jsonpatch.com Документация стандарта
24
+ */
25
+ export interface JiffAddPatch<V = unknown> extends Patch<"add"> {
26
+ /**
27
+ * Значение, которое будет добавлено по указанному пути
28
+ */
29
+ value: V;
30
+ }
31
+ /**
32
+ * Патч удаления значения ("remove")
33
+ *
34
+ * Поле `value` типа `never`, так как для удаления значения оно не требуется
35
+ *
36
+ * @see https://jsonpatch.com Документация стандарта
37
+ */
38
+ export interface JiffRemovePatch extends Patch<"remove"> {
39
+ value?: never;
40
+ }
41
+ /**
42
+ * Патч для замены значения ("replace")
43
+ *
44
+ * @see https://jsonpatch.com Документация стандарта
45
+ */
46
+ export interface JiffReplacePatch<V = unknown> extends Patch<"replace"> {
47
+ /**
48
+ * Новое значение, которое заменит старое
49
+ */
50
+ value: V;
51
+ }
52
+ /**
53
+ * Поддерживаемые патчи: добавление, удаление и замена значений
54
+ *
55
+ * @see https://jsonpatch.com Документация стандарта
56
+ */
57
+ export type JiffPatch<V = unknown> = JiffAddPatch<V> | JiffRemovePatch | JiffReplacePatch<V>;
@@ -0,0 +1 @@
1
+ export {};
package/dist/lens.d.ts CHANGED
@@ -1,9 +1,13 @@
1
+ import type { KEYS } from "./types.js";
1
2
  /**
2
- * Режим работы линзы:
3
+ * Режим работы линзы {@link Lens}:
3
4
  * - `"exclude"` (исключение)
4
5
  * - `"include"` (включение)
5
6
  */
6
7
  export type LensMode = "exclude" | "include";
8
+ /**
9
+ * Схема для {@link Lens}, определяющая, какие ключи включить или исключить
10
+ */
7
11
  export type LensSchema<O> = {
8
12
  [K in keyof O]?: boolean;
9
13
  };
@@ -27,38 +31,23 @@ export interface LensConfig<O> {
27
31
  /**
28
32
  * Линза для фильтрации на основе схемы и режима
29
33
  *
30
- * @template O - Тип объект для схемы, с которой работает линза
34
+ * @template O - Тип-объект для схемы, с которой работает линза
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * // В режиме "exclude" с schema: { id: true }
39
+ * lens.check("id"); // false (исключен)
40
+ * lens.check("name"); // true (не исключен)
41
+ *
42
+ * // В режиме "include" с schema: { email: true }
43
+ * lens.check("email"); // true (включен)
44
+ * lens.check("phone"); // false (не включен)
45
+ * ```
31
46
  */
32
47
  export declare class Lens<O> {
33
- /**
34
- * Режим работы линзы {@link LensMode}
35
- *
36
- * @default "exclude"
37
- */
38
- _mode: LensMode;
39
- /**
40
- * Схема, определяющая, какие ключи включить или исключить
41
- *
42
- * @default {}
43
- */
44
- _schema: LensSchema<O>;
45
- /**
46
- * Создаёт экземпляр линзы
47
- *
48
- * @param config - Конфигурация линзы {@link LensConfig}
49
- */
48
+ __mode: LensMode;
49
+ __schema: LensSchema<O>;
50
50
  constructor(config: LensConfig<O>);
51
- /**
52
- * Пересборка под другую конфигурацию
53
- *
54
- * @param config - Конфигурация линзы {@link LensConfig}
55
- */
56
51
  reconstruct(config: LensConfig<O>): void;
57
- /**
58
- * Проверяет, должен ли ключ быть включён в результат
59
- *
60
- * @param key - Ключ для проверки
61
- * @returns `true`, если ключ должен быть включён, иначе `false`
62
- */
63
- get(key: keyof O): boolean;
52
+ check(key: KEYS<O>): boolean;
64
53
  }
package/dist/lens.js CHANGED
@@ -1,50 +1,35 @@
1
1
  /**
2
2
  * Линза для фильтрации на основе схемы и режима
3
3
  *
4
- * @template O - Тип объект для схемы, с которой работает линза
4
+ * @template O - Тип-объект для схемы, с которой работает линза
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * // В режиме "exclude" с schema: { id: true }
9
+ * lens.check("id"); // false (исключен)
10
+ * lens.check("name"); // true (не исключен)
11
+ *
12
+ * // В режиме "include" с schema: { email: true }
13
+ * lens.check("email"); // true (включен)
14
+ * lens.check("phone"); // false (не включен)
15
+ * ```
5
16
  */
6
17
  export class Lens {
7
- /**
8
- * Режим работы линзы {@link LensMode}
9
- *
10
- * @default "exclude"
11
- */
12
- _mode;
13
- /**
14
- * Схема, определяющая, какие ключи включить или исключить
15
- *
16
- * @default {}
17
- */
18
- _schema;
19
- /**
20
- * Создаёт экземпляр линзы
21
- *
22
- * @param config - Конфигурация линзы {@link LensConfig}
23
- */
18
+ __mode;
19
+ __schema;
24
20
  constructor(config) {
25
21
  this.reconstruct(config);
26
22
  }
27
- /**
28
- * Пересборка под другую конфигурацию
29
- *
30
- * @param config - Конфигурация линзы {@link LensConfig}
31
- */
32
23
  reconstruct(config) {
33
- this._mode = config.mode ?? "exclude";
34
- this._schema = config.schema ?? {};
24
+ this.__mode = config.mode ?? "exclude";
25
+ this.__schema = config.schema ?? {};
35
26
  }
36
- /**
37
- * Проверяет, должен ли ключ быть включён в результат
38
- *
39
- * @param key - Ключ для проверки
40
- * @returns `true`, если ключ должен быть включён, иначе `false`
41
- */
42
- get(key) {
43
- if (this._mode === "exclude") {
44
- // Если в конфиге есть ключ в режиме исключения, то key false. Если нет — то true
45
- return !this._schema[key];
27
+ check(key) {
28
+ if (this.__mode === "exclude") {
29
+ // Если в конфиге есть ключ в режиме исключения, то key false. Если нет - то true
30
+ return !this.__schema[key];
46
31
  }
47
- // Если в конфиге есть ключ, то key true. Если нет то false
48
- return !!this._schema[key];
32
+ // Если в конфиге есть ключ, то key true. Если нет - то false
33
+ return !!this.__schema[key];
49
34
  }
50
35
  }
package/dist/msgpack.d.ts CHANGED
@@ -1,42 +1,27 @@
1
1
  /**
2
- * Данные в формате MSGPACK
2
+ * Данные в формате {@link https://msgpack.org MSGPACK}
3
3
  *
4
- * @template Data - Исходный объект данных
4
+ * @template Data - Исходные данные
5
5
  * @template Pack - Флаг, определяющий, упакованы данные или нет
6
6
  *
7
7
  * @remarks Поля __meta с исходными данными **НЕ** существует. Только для типизации
8
- *
9
- * @see https://jsr.io/@std/msgpack Документация используемого пакета
10
- * @see https://msgpack.org/ Документация стандарта MSGPACK
11
8
  */
12
- export type MSGPACK<Data, Pack extends boolean = true> = (Pack extends true ? number[] : Data) & {
9
+ export type MSGPACK<Data, Pack extends boolean = true> = (Pack extends true ? Uint8Array<ArrayBuffer> : Data) & {
13
10
  __meta: Data;
14
11
  };
15
12
  /**
16
- * Декодирует данные из формата MSGPACK в исходный объект
17
- *
18
- * Использует функцию {@link _decode} из пакета `@std/msgpack` для декодирования
19
- *
20
- * @template Data - Тип исходного объекта
21
- * @param {MSGPACK<Data>} data - Данные в формате MSGPACK для декодирования
22
- * @returns {Data} Декодированный объект
13
+ * Декодирует данные из формата {@link https://msgpack.org MSGPACK}
23
14
  *
24
- * @see https://jsr.io/@std/msgpack Документация используемого пакета
25
- * @see https://msgpack.org/ Документация стандарта MSGPACK
15
+ * Использует функцию {@link decode} из {@link https://jsr.io/@std/msgpack @std/msgpack}
26
16
  */
27
- export declare const decode: <Data>(data: MSGPACK<Data>) => Data;
17
+ export declare const depack: <Data>(data: MSGPACK<Data>) => Data;
28
18
  /**
29
- * Кодирует исходный объект в формат MSGPACK.
30
- * Объект **НЕ** должен содержать методы, `null` и `undefined`
19
+ * Кодирует исходный объект в формат {@link https://msgpack.org MSGPACK}
31
20
  *
32
- * Использует функцию {@link _encode} из пакета `@std/msgpack` для кодирования
21
+ * @remarks Объект **НЕ** должен содержать методы, `null` и `undefined`
33
22
  *
34
- * @template Data - Тип исходного объекта
35
- * @param {Data} data - Объект для кодирования
36
- * @returns {MSGPACK<Data>} Объект, закодированный в формат MSGPACK
37
- * @throws {Error} Выбрасывает ошибку, если есть не поддерживаемые типы данных
23
+ * Использует функцию {@link encode} из {@link https://jsr.io/@std/msgpack @std/msgpack}
38
24
  *
39
- * @see https://jsr.io/@std/msgpack Документация используемого пакета
40
- * @see https://msgpack.org/ Документация стандарта MSGPACK
25
+ * @throws {Error} Выбрасывает ошибку, если есть не поддерживаемые типы данных
41
26
  */
42
- export declare const encode: <Data>(data: Data) => MSGPACK<Data>;
27
+ export declare const enpack: <Data>(data: Data) => MSGPACK<Data>;
package/dist/msgpack.js CHANGED
@@ -1,29 +1,17 @@
1
- import { decode as _decode, encode as _encode } from "@std/msgpack";
1
+ import { decode, encode } from "@std/msgpack";
2
2
  /**
3
- * Декодирует данные из формата MSGPACK в исходный объект
3
+ * Декодирует данные из формата {@link https://msgpack.org MSGPACK}
4
4
  *
5
- * Использует функцию {@link _decode} из пакета `@std/msgpack` для декодирования
6
- *
7
- * @template Data - Тип исходного объекта
8
- * @param {MSGPACK<Data>} data - Данные в формате MSGPACK для декодирования
9
- * @returns {Data} Декодированный объект
10
- *
11
- * @see https://jsr.io/@std/msgpack Документация используемого пакета
12
- * @see https://msgpack.org/ Документация стандарта MSGPACK
5
+ * Использует функцию {@link decode} из {@link https://jsr.io/@std/msgpack @std/msgpack}
13
6
  */
14
- export const decode = (data) => _decode(new Uint8Array(data));
7
+ export const depack = (data) => decode(new Uint8Array(data));
15
8
  /**
16
- * Кодирует исходный объект в формат MSGPACK.
17
- * Объект **НЕ** должен содержать методы, `null` и `undefined`
9
+ * Кодирует исходный объект в формат {@link https://msgpack.org MSGPACK}
18
10
  *
19
- * Использует функцию {@link _encode} из пакета `@std/msgpack` для кодирования
11
+ * @remarks Объект **НЕ** должен содержать методы, `null` и `undefined`
20
12
  *
21
- * @template Data - Тип исходного объекта
22
- * @param {Data} data - Объект для кодирования
23
- * @returns {MSGPACK<Data>} Объект, закодированный в формат MSGPACK
24
- * @throws {Error} Выбрасывает ошибку, если есть не поддерживаемые типы данных
13
+ * Использует функцию {@link encode} из {@link https://jsr.io/@std/msgpack @std/msgpack}
25
14
  *
26
- * @see https://jsr.io/@std/msgpack Документация используемого пакета
27
- * @see https://msgpack.org/ Документация стандарта MSGPACK
15
+ * @throws {Error} Выбрасывает ошибку, если есть не поддерживаемые типы данных
28
16
  */
29
- export const encode = (data) => Array.from(_encode(data));
17
+ export const enpack = (data) => encode(data);
@@ -0,0 +1,70 @@
1
+ import type { AnyFunc, Args, Return, ThisFuncCopy } from "./types.js";
2
+ /**
3
+ * Рекурсивно модифицирует объект, приводя его структуру к виду целевого объекта.
4
+ * Использует внутри {@link deepMutateArray}
5
+ *
6
+ * Удаляет лишние свойства, обновляет существующие и добавляет новые.
7
+ * Работает **мутативно** — изменяет исходный объект напрямую
8
+ *
9
+ * @remarks **НЕ** предназначен для работы с декларативными методами (могут потерять `this`)
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const source = { a: 1, b: 2, c: 3 };
14
+ * const target = { a: 10, d: 40 };
15
+ *
16
+ * deepMutateObject(source, target);
17
+ * // source теперь: { a: 10, d: 40 }
18
+ * // свойства b и c удалены, a обновлено, d добавлено
19
+ * ```
20
+ */
21
+ export declare const deepMutateObject: (source: object, target: object) => void;
22
+ /**
23
+ * Рекурсивно модифицирует массив, приводя его к виду целевого массива.
24
+ * Использует внутри {@link deepMutateObject}
25
+ *
26
+ * Обрезает лишние элементы, обновляет существующие и добавляет новые.
27
+ * Работает **мутативно** — изменяет исходный массив напрямую
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * const complexSource = [
32
+ * { id: 1, name: "John" },
33
+ * { id: 2, name: "Jane" }
34
+ * ];
35
+ * const complexTarget = [
36
+ * { id: 1, name: "Johnny" },
37
+ * { id: 3, name: "Bob" }
38
+ * ];
39
+ *
40
+ * deepMutateArray(complexSource, complexTarget);
41
+ *
42
+ * // complexSource теперь: [
43
+ * // { id: 1, name: "Johnny" },
44
+ * // { id: 3, name: "Bob" }
45
+ * // ]
46
+ * ```
47
+ */
48
+ export declare const deepMutateArray: (source: unknown[], target: unknown[]) => void;
49
+ /**
50
+ * Контекст для {@link inject}
51
+ */
52
+ export interface injectContext<O extends Record<K, AnyFunc>, K extends keyof O> {
53
+ self: O;
54
+ method: ThisFuncCopy<O, O[K]>;
55
+ args: Args<O[K]>;
56
+ }
57
+ /**
58
+ * Заменяет метод объекта обёрткой, передающей управление указанной функции
59
+ *
60
+ * Обёртка предоставляет контекст с оригинальным объектом, прокси-методом через {@link Reflect.apply} для вызова
61
+ * исходной реализации и аргументами вызова
62
+ *
63
+ * @param self - Объект, метод которого будет заменён
64
+ * @param key - Ключ метода в объекте
65
+ * @param func - Функция-обработчик, получающая контекст вызова
66
+ * @param [dynamic=false] - Использовать связывание `this` при вызове, что позволяет переносить цепочки на другие объекты
67
+ *
68
+ * @throws {TypeError} Если `self[key]` не является функцией
69
+ */
70
+ export declare const inject: <O extends Record<K, AnyFunc>, K extends keyof O>(self: O, key: K, func: (ctx: {}) => Return<O[K]>, dynamic?: boolean) => void;