bytekit 0.1.12
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/LICENSE +21 -0
- package/README.md +2241 -0
- package/bin/sutils.js +9 -0
- package/dist/api-client.d.ts +2 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +2 -0
- package/dist/api-client.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +401 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/type-generator.d.ts +12 -0
- package/dist/cli/type-generator.d.ts.map +1 -0
- package/dist/cli/type-generator.js +152 -0
- package/dist/cli/type-generator.js.map +1 -0
- package/dist/date-utils.d.ts +2 -0
- package/dist/date-utils.d.ts.map +1 -0
- package/dist/date-utils.js +2 -0
- package/dist/date-utils.js.map +1 -0
- package/dist/debug.d.ts +2 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +2 -0
- package/dist/debug.js.map +1 -0
- package/dist/env-manager.d.ts +2 -0
- package/dist/env-manager.d.ts.map +1 -0
- package/dist/env-manager.js +2 -0
- package/dist/env-manager.js.map +1 -0
- package/dist/file-upload.d.ts +2 -0
- package/dist/file-upload.d.ts.map +1 -0
- package/dist/file-upload.js +2 -0
- package/dist/file-upload.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +2 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +2 -0
- package/dist/logger.js.map +1 -0
- package/dist/profiler.d.ts +2 -0
- package/dist/profiler.d.ts.map +1 -0
- package/dist/profiler.js +2 -0
- package/dist/profiler.js.map +1 -0
- package/dist/response-validator.d.ts +2 -0
- package/dist/response-validator.d.ts.map +1 -0
- package/dist/response-validator.js +2 -0
- package/dist/response-validator.js.map +1 -0
- package/dist/retry-policy.d.ts +2 -0
- package/dist/retry-policy.d.ts.map +1 -0
- package/dist/retry-policy.js +2 -0
- package/dist/retry-policy.js.map +1 -0
- package/dist/storage-utils.d.ts +2 -0
- package/dist/storage-utils.d.ts.map +1 -0
- package/dist/storage-utils.js +2 -0
- package/dist/storage-utils.js.map +1 -0
- package/dist/streaming.d.ts +2 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +2 -0
- package/dist/streaming.js.map +1 -0
- package/dist/string-utils.d.ts +2 -0
- package/dist/string-utils.d.ts.map +1 -0
- package/dist/string-utils.js +2 -0
- package/dist/string-utils.js.map +1 -0
- package/dist/utils/core/ApiClient.d.ts +94 -0
- package/dist/utils/core/ApiClient.d.ts.map +1 -0
- package/dist/utils/core/ApiClient.js +291 -0
- package/dist/utils/core/ApiClient.js.map +1 -0
- package/dist/utils/core/ErrorBoundary.d.ts +141 -0
- package/dist/utils/core/ErrorBoundary.d.ts.map +1 -0
- package/dist/utils/core/ErrorBoundary.js +322 -0
- package/dist/utils/core/ErrorBoundary.js.map +1 -0
- package/dist/utils/core/Logger.d.ts +39 -0
- package/dist/utils/core/Logger.d.ts.map +1 -0
- package/dist/utils/core/Logger.js +154 -0
- package/dist/utils/core/Logger.js.map +1 -0
- package/dist/utils/core/Profiler.d.ts +8 -0
- package/dist/utils/core/Profiler.d.ts.map +1 -0
- package/dist/utils/core/Profiler.js +18 -0
- package/dist/utils/core/Profiler.js.map +1 -0
- package/dist/utils/core/RateLimiter.d.ts +74 -0
- package/dist/utils/core/RateLimiter.d.ts.map +1 -0
- package/dist/utils/core/RateLimiter.js +170 -0
- package/dist/utils/core/RateLimiter.js.map +1 -0
- package/dist/utils/core/RequestCache.d.ts +64 -0
- package/dist/utils/core/RequestCache.d.ts.map +1 -0
- package/dist/utils/core/RequestCache.js +139 -0
- package/dist/utils/core/RequestCache.js.map +1 -0
- package/dist/utils/core/RequestDeduplicator.d.ts +41 -0
- package/dist/utils/core/RequestDeduplicator.d.ts.map +1 -0
- package/dist/utils/core/RequestDeduplicator.js +83 -0
- package/dist/utils/core/RequestDeduplicator.js.map +1 -0
- package/dist/utils/core/ResponseValidator.d.ts +26 -0
- package/dist/utils/core/ResponseValidator.d.ts.map +1 -0
- package/dist/utils/core/ResponseValidator.js +140 -0
- package/dist/utils/core/ResponseValidator.js.map +1 -0
- package/dist/utils/core/RetryPolicy.d.ts +43 -0
- package/dist/utils/core/RetryPolicy.d.ts.map +1 -0
- package/dist/utils/core/RetryPolicy.js +119 -0
- package/dist/utils/core/RetryPolicy.js.map +1 -0
- package/dist/utils/core/debug.d.ts +46 -0
- package/dist/utils/core/debug.d.ts.map +1 -0
- package/dist/utils/core/debug.js +83 -0
- package/dist/utils/core/debug.js.map +1 -0
- package/dist/utils/core/index.d.ts +11 -0
- package/dist/utils/core/index.d.ts.map +1 -0
- package/dist/utils/core/index.js +11 -0
- package/dist/utils/core/index.js.map +1 -0
- package/dist/utils/helpers/ArrayUtils.d.ts +134 -0
- package/dist/utils/helpers/ArrayUtils.d.ts.map +1 -0
- package/dist/utils/helpers/ArrayUtils.js +301 -0
- package/dist/utils/helpers/ArrayUtils.js.map +1 -0
- package/dist/utils/helpers/CacheManager.d.ts +67 -0
- package/dist/utils/helpers/CacheManager.d.ts.map +1 -0
- package/dist/utils/helpers/CacheManager.js +222 -0
- package/dist/utils/helpers/CacheManager.js.map +1 -0
- package/dist/utils/helpers/CompressionUtils.d.ts +80 -0
- package/dist/utils/helpers/CompressionUtils.d.ts.map +1 -0
- package/dist/utils/helpers/CompressionUtils.js +224 -0
- package/dist/utils/helpers/CompressionUtils.js.map +1 -0
- package/dist/utils/helpers/CryptoUtils.d.ts +70 -0
- package/dist/utils/helpers/CryptoUtils.d.ts.map +1 -0
- package/dist/utils/helpers/CryptoUtils.js +215 -0
- package/dist/utils/helpers/CryptoUtils.js.map +1 -0
- package/dist/utils/helpers/DateUtils.d.ts +31 -0
- package/dist/utils/helpers/DateUtils.d.ts.map +1 -0
- package/dist/utils/helpers/DateUtils.js +104 -0
- package/dist/utils/helpers/DateUtils.js.map +1 -0
- package/dist/utils/helpers/DiffUtils.d.ts +61 -0
- package/dist/utils/helpers/DiffUtils.d.ts.map +1 -0
- package/dist/utils/helpers/DiffUtils.js +249 -0
- package/dist/utils/helpers/DiffUtils.js.map +1 -0
- package/dist/utils/helpers/EnvManager.d.ts +7 -0
- package/dist/utils/helpers/EnvManager.d.ts.map +1 -0
- package/dist/utils/helpers/EnvManager.js +19 -0
- package/dist/utils/helpers/EnvManager.js.map +1 -0
- package/dist/utils/helpers/EventEmitter.d.ts +78 -0
- package/dist/utils/helpers/EventEmitter.d.ts.map +1 -0
- package/dist/utils/helpers/EventEmitter.js +208 -0
- package/dist/utils/helpers/EventEmitter.js.map +1 -0
- package/dist/utils/helpers/FileUploadHelper.d.ts +44 -0
- package/dist/utils/helpers/FileUploadHelper.d.ts.map +1 -0
- package/dist/utils/helpers/FileUploadHelper.js +127 -0
- package/dist/utils/helpers/FileUploadHelper.js.map +1 -0
- package/dist/utils/helpers/FormUtils.d.ts +162 -0
- package/dist/utils/helpers/FormUtils.d.ts.map +1 -0
- package/dist/utils/helpers/FormUtils.js +378 -0
- package/dist/utils/helpers/FormUtils.js.map +1 -0
- package/dist/utils/helpers/ObjectUtils.d.ts +102 -0
- package/dist/utils/helpers/ObjectUtils.d.ts.map +1 -0
- package/dist/utils/helpers/ObjectUtils.js +297 -0
- package/dist/utils/helpers/ObjectUtils.js.map +1 -0
- package/dist/utils/helpers/PaginationHelper.d.ts +127 -0
- package/dist/utils/helpers/PaginationHelper.d.ts.map +1 -0
- package/dist/utils/helpers/PaginationHelper.js +259 -0
- package/dist/utils/helpers/PaginationHelper.js.map +1 -0
- package/dist/utils/helpers/PollingHelper.d.ts +64 -0
- package/dist/utils/helpers/PollingHelper.d.ts.map +1 -0
- package/dist/utils/helpers/PollingHelper.js +131 -0
- package/dist/utils/helpers/PollingHelper.js.map +1 -0
- package/dist/utils/helpers/StorageUtils.d.ts +9 -0
- package/dist/utils/helpers/StorageUtils.d.ts.map +1 -0
- package/dist/utils/helpers/StorageUtils.js +33 -0
- package/dist/utils/helpers/StorageUtils.js.map +1 -0
- package/dist/utils/helpers/StreamingHelper.d.ts +35 -0
- package/dist/utils/helpers/StreamingHelper.d.ts.map +1 -0
- package/dist/utils/helpers/StreamingHelper.js +167 -0
- package/dist/utils/helpers/StreamingHelper.js.map +1 -0
- package/dist/utils/helpers/StringUtils.d.ts +42 -0
- package/dist/utils/helpers/StringUtils.d.ts.map +1 -0
- package/dist/utils/helpers/StringUtils.js +173 -0
- package/dist/utils/helpers/StringUtils.js.map +1 -0
- package/dist/utils/helpers/TimeUtils.d.ts +87 -0
- package/dist/utils/helpers/TimeUtils.d.ts.map +1 -0
- package/dist/utils/helpers/TimeUtils.js +234 -0
- package/dist/utils/helpers/TimeUtils.js.map +1 -0
- package/dist/utils/helpers/Validator.d.ts +31 -0
- package/dist/utils/helpers/Validator.d.ts.map +1 -0
- package/dist/utils/helpers/Validator.js +156 -0
- package/dist/utils/helpers/Validator.js.map +1 -0
- package/dist/utils/helpers/WebSocketHelper.d.ts +63 -0
- package/dist/utils/helpers/WebSocketHelper.d.ts.map +1 -0
- package/dist/utils/helpers/WebSocketHelper.js +200 -0
- package/dist/utils/helpers/WebSocketHelper.js.map +1 -0
- package/dist/utils/helpers/index.d.ts +20 -0
- package/dist/utils/helpers/index.d.ts.map +1 -0
- package/dist/utils/helpers/index.js +20 -0
- package/dist/utils/helpers/index.js.map +1 -0
- package/dist/utils/index.d.ts +21 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +21 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/validator.d.ts +2 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +2 -0
- package/dist/validator.js.map +1 -0
- package/dist/websocket.d.ts +2 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +2 -0
- package/dist/websocket.js.map +1 -0
- package/package.json +189 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
const MS_PER_UNIT = {
|
|
2
|
+
milliseconds: 1,
|
|
3
|
+
seconds: 1000,
|
|
4
|
+
minutes: 60000,
|
|
5
|
+
hours: 3600000,
|
|
6
|
+
days: 86400000,
|
|
7
|
+
};
|
|
8
|
+
const ROUNDING_FUNCTIONS = {
|
|
9
|
+
floor: Math.floor,
|
|
10
|
+
ceil: Math.ceil,
|
|
11
|
+
round: Math.round,
|
|
12
|
+
trunc: Math.trunc,
|
|
13
|
+
};
|
|
14
|
+
const toDate = (value) => {
|
|
15
|
+
if (value === null || value === undefined)
|
|
16
|
+
return null;
|
|
17
|
+
if (value instanceof Date && !Number.isNaN(value.getTime()))
|
|
18
|
+
return new Date(value.getTime());
|
|
19
|
+
if (typeof value === "number" && Number.isFinite(value))
|
|
20
|
+
return new Date(value);
|
|
21
|
+
if (typeof value === "string") {
|
|
22
|
+
const parsed = new Date(value);
|
|
23
|
+
return Number.isNaN(parsed.getTime()) ? null : parsed;
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
};
|
|
27
|
+
const requireDate = (value) => {
|
|
28
|
+
const date = toDate(value);
|
|
29
|
+
if (!date)
|
|
30
|
+
throw new TypeError("Invalid date input");
|
|
31
|
+
return date;
|
|
32
|
+
};
|
|
33
|
+
const pad = (value) => value.toString().padStart(2, "0");
|
|
34
|
+
const calculateDurationMs = ({ days = 0, hours = 0, minutes = 0, seconds = 0, milliseconds = 0, } = {}) => days * MS_PER_UNIT.days +
|
|
35
|
+
hours * MS_PER_UNIT.hours +
|
|
36
|
+
minutes * MS_PER_UNIT.minutes +
|
|
37
|
+
seconds * MS_PER_UNIT.seconds +
|
|
38
|
+
milliseconds;
|
|
39
|
+
export const DateUtils = {
|
|
40
|
+
parse(value) {
|
|
41
|
+
return toDate(value);
|
|
42
|
+
},
|
|
43
|
+
isValid(value) {
|
|
44
|
+
return Boolean(toDate(value));
|
|
45
|
+
},
|
|
46
|
+
toISODate(value) {
|
|
47
|
+
const date = requireDate(value);
|
|
48
|
+
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
|
|
49
|
+
},
|
|
50
|
+
startOfDay(value) {
|
|
51
|
+
const date = requireDate(value);
|
|
52
|
+
date.setHours(0, 0, 0, 0);
|
|
53
|
+
return date;
|
|
54
|
+
},
|
|
55
|
+
endOfDay(value) {
|
|
56
|
+
const date = requireDate(value);
|
|
57
|
+
date.setHours(23, 59, 59, 999);
|
|
58
|
+
return date;
|
|
59
|
+
},
|
|
60
|
+
add(value, duration = {}) {
|
|
61
|
+
const date = requireDate(value);
|
|
62
|
+
const result = new Date(date.getTime());
|
|
63
|
+
result.setTime(result.getTime() + calculateDurationMs(duration));
|
|
64
|
+
return result;
|
|
65
|
+
},
|
|
66
|
+
diff(a, b, options = {}) {
|
|
67
|
+
const start = requireDate(a);
|
|
68
|
+
const end = requireDate(b);
|
|
69
|
+
const { unit = "milliseconds", absolute = false, rounding = "floor" } = options;
|
|
70
|
+
const diffMs = end.getTime() - start.getTime();
|
|
71
|
+
const value = diffMs / MS_PER_UNIT[unit];
|
|
72
|
+
const rounded = ROUNDING_FUNCTIONS[rounding](value);
|
|
73
|
+
return absolute ? Math.abs(rounded) : rounded;
|
|
74
|
+
},
|
|
75
|
+
diffInDays(a, b, options = {}) {
|
|
76
|
+
const { rounding = "ceil", ...rest } = options;
|
|
77
|
+
return DateUtils.diff(a, b, {
|
|
78
|
+
...rest,
|
|
79
|
+
rounding,
|
|
80
|
+
unit: "days",
|
|
81
|
+
});
|
|
82
|
+
},
|
|
83
|
+
isSameDay(a, b) {
|
|
84
|
+
const first = requireDate(a);
|
|
85
|
+
const second = requireDate(b);
|
|
86
|
+
return (first.getFullYear() === second.getFullYear() &&
|
|
87
|
+
first.getMonth() === second.getMonth() &&
|
|
88
|
+
first.getDate() === second.getDate());
|
|
89
|
+
},
|
|
90
|
+
isBefore(a, b) {
|
|
91
|
+
return requireDate(a).getTime() < requireDate(b).getTime();
|
|
92
|
+
},
|
|
93
|
+
isAfter(a, b) {
|
|
94
|
+
return requireDate(a).getTime() > requireDate(b).getTime();
|
|
95
|
+
},
|
|
96
|
+
format(date, locale = "es-AR") {
|
|
97
|
+
return date.toLocaleDateString(locale, {
|
|
98
|
+
year: "numeric",
|
|
99
|
+
month: "short",
|
|
100
|
+
day: "2-digit",
|
|
101
|
+
});
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=DateUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateUtils.js","sourceRoot":"","sources":["../../../src/utils/helpers/DateUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diff and patch utilities for tracking changes
|
|
3
|
+
* Deep comparison, change detection, and patch generation
|
|
4
|
+
*/
|
|
5
|
+
export interface DiffResult {
|
|
6
|
+
changed: string[];
|
|
7
|
+
added: string[];
|
|
8
|
+
removed: string[];
|
|
9
|
+
}
|
|
10
|
+
export interface Patch {
|
|
11
|
+
op: "add" | "remove" | "replace";
|
|
12
|
+
path: string;
|
|
13
|
+
value?: unknown;
|
|
14
|
+
oldValue?: unknown;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Diff utilities for comparing objects and tracking changes
|
|
18
|
+
*/
|
|
19
|
+
export declare class DiffUtils {
|
|
20
|
+
/**
|
|
21
|
+
* Deep compare two values
|
|
22
|
+
*/
|
|
23
|
+
static deepEqual(a: unknown, b: unknown): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Diff two objects and return changed, added, removed keys
|
|
26
|
+
*/
|
|
27
|
+
static diff(oldObj: Record<string, unknown>, newObj: Record<string, unknown>): DiffResult;
|
|
28
|
+
/**
|
|
29
|
+
* Create patches from old to new object
|
|
30
|
+
*/
|
|
31
|
+
static createPatch(oldObj: Record<string, unknown>, newObj: Record<string, unknown>): Patch[];
|
|
32
|
+
/**
|
|
33
|
+
* Apply patches to object
|
|
34
|
+
*/
|
|
35
|
+
static applyPatch(obj: Record<string, unknown>, patches: Patch[]): Record<string, unknown>;
|
|
36
|
+
/**
|
|
37
|
+
* Reverse patches (undo)
|
|
38
|
+
*/
|
|
39
|
+
static reversePatch(patches: Patch[]): Patch[];
|
|
40
|
+
/**
|
|
41
|
+
* Get nested value using dot notation
|
|
42
|
+
*/
|
|
43
|
+
private static getNestedValue;
|
|
44
|
+
/**
|
|
45
|
+
* Set nested value using dot notation
|
|
46
|
+
*/
|
|
47
|
+
private static setNestedValue;
|
|
48
|
+
/**
|
|
49
|
+
* Deep diff with nested paths
|
|
50
|
+
*/
|
|
51
|
+
static deepDiff(oldObj: unknown, newObj: unknown, prefix?: string): DiffResult;
|
|
52
|
+
/**
|
|
53
|
+
* Merge two objects with conflict resolution
|
|
54
|
+
*/
|
|
55
|
+
static merge(obj1: Record<string, unknown>, obj2: Record<string, unknown>, strategy?: "first" | "second" | "merge"): Record<string, unknown>;
|
|
56
|
+
/**
|
|
57
|
+
* Get summary of changes
|
|
58
|
+
*/
|
|
59
|
+
static getSummary(diff: DiffResult): string;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=DiffUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiffUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/helpers/DiffUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,KAAK;IAClB,EAAE,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,SAAS;IAClB;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO;IA6BjD;;OAEG;IACH,MAAM,CAAC,IAAI,CACP,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,UAAU;IA2Bb;;OAEG;IACH,MAAM,CAAC,WAAW,CACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,KAAK,EAAE;IAmCV;;OAEG;IACH,MAAM,CAAC,UAAU,CACb,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,OAAO,EAAE,KAAK,EAAE,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAoB1B;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE;IAqB9C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAY7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAmB7B;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,SAAK,GAAG,UAAU;IAoD1E;;OAEG;IACH,MAAM,CAAC,KAAK,CACR,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,QAAQ,GAAE,OAAO,GAAG,QAAQ,GAAG,OAAiB,GACjD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IA4B1B;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;CAS9C"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diff and patch utilities for tracking changes
|
|
3
|
+
* Deep comparison, change detection, and patch generation
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Diff utilities for comparing objects and tracking changes
|
|
7
|
+
*/
|
|
8
|
+
export class DiffUtils {
|
|
9
|
+
/**
|
|
10
|
+
* Deep compare two values
|
|
11
|
+
*/
|
|
12
|
+
static deepEqual(a, b) {
|
|
13
|
+
if (a === b)
|
|
14
|
+
return true;
|
|
15
|
+
if (a == null || b == null)
|
|
16
|
+
return a === b;
|
|
17
|
+
if (typeof a !== typeof b)
|
|
18
|
+
return false;
|
|
19
|
+
if (typeof a === "object") {
|
|
20
|
+
const aKeys = Object.keys(a);
|
|
21
|
+
const bKeys = Object.keys(b);
|
|
22
|
+
if (aKeys.length !== bKeys.length)
|
|
23
|
+
return false;
|
|
24
|
+
for (const key of aKeys) {
|
|
25
|
+
if (!bKeys.includes(key))
|
|
26
|
+
return false;
|
|
27
|
+
if (!this.deepEqual(a[key], b[key])) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Diff two objects and return changed, added, removed keys
|
|
37
|
+
*/
|
|
38
|
+
static diff(oldObj, newObj) {
|
|
39
|
+
const changed = [];
|
|
40
|
+
const added = [];
|
|
41
|
+
const removed = [];
|
|
42
|
+
const oldKeys = new Set(Object.keys(oldObj));
|
|
43
|
+
const newKeys = new Set(Object.keys(newObj));
|
|
44
|
+
// Find changed and removed
|
|
45
|
+
for (const key of oldKeys) {
|
|
46
|
+
if (!newKeys.has(key)) {
|
|
47
|
+
removed.push(key);
|
|
48
|
+
}
|
|
49
|
+
else if (!this.deepEqual(oldObj[key], newObj[key])) {
|
|
50
|
+
changed.push(key);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Find added
|
|
54
|
+
for (const key of newKeys) {
|
|
55
|
+
if (!oldKeys.has(key)) {
|
|
56
|
+
added.push(key);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return { changed, added, removed };
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Create patches from old to new object
|
|
63
|
+
*/
|
|
64
|
+
static createPatch(oldObj, newObj) {
|
|
65
|
+
const patches = [];
|
|
66
|
+
const diff = this.diff(oldObj, newObj);
|
|
67
|
+
// Handle removed
|
|
68
|
+
for (const key of diff.removed) {
|
|
69
|
+
patches.push({
|
|
70
|
+
op: "remove",
|
|
71
|
+
path: key,
|
|
72
|
+
oldValue: oldObj[key],
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
// Handle changed
|
|
76
|
+
for (const key of diff.changed) {
|
|
77
|
+
patches.push({
|
|
78
|
+
op: "replace",
|
|
79
|
+
path: key,
|
|
80
|
+
value: newObj[key],
|
|
81
|
+
oldValue: oldObj[key],
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
// Handle added
|
|
85
|
+
for (const key of diff.added) {
|
|
86
|
+
patches.push({
|
|
87
|
+
op: "add",
|
|
88
|
+
path: key,
|
|
89
|
+
value: newObj[key],
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return patches;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Apply patches to object
|
|
96
|
+
*/
|
|
97
|
+
static applyPatch(obj, patches) {
|
|
98
|
+
const result = { ...obj };
|
|
99
|
+
for (const patch of patches) {
|
|
100
|
+
switch (patch.op) {
|
|
101
|
+
case "add":
|
|
102
|
+
result[patch.path] = patch.value;
|
|
103
|
+
break;
|
|
104
|
+
case "remove":
|
|
105
|
+
delete result[patch.path];
|
|
106
|
+
break;
|
|
107
|
+
case "replace":
|
|
108
|
+
result[patch.path] = patch.value;
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Reverse patches (undo)
|
|
116
|
+
*/
|
|
117
|
+
static reversePatch(patches) {
|
|
118
|
+
return patches.map((patch) => {
|
|
119
|
+
switch (patch.op) {
|
|
120
|
+
case "add":
|
|
121
|
+
return { op: "remove", path: patch.path };
|
|
122
|
+
case "remove":
|
|
123
|
+
return {
|
|
124
|
+
op: "add",
|
|
125
|
+
path: patch.path,
|
|
126
|
+
value: patch.oldValue,
|
|
127
|
+
};
|
|
128
|
+
case "replace":
|
|
129
|
+
return {
|
|
130
|
+
op: "replace",
|
|
131
|
+
path: patch.path,
|
|
132
|
+
value: patch.oldValue,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get nested value using dot notation
|
|
139
|
+
*/
|
|
140
|
+
static getNestedValue(obj, path) {
|
|
141
|
+
const keys = path.split(".");
|
|
142
|
+
let current = obj;
|
|
143
|
+
for (const key of keys) {
|
|
144
|
+
if (current == null)
|
|
145
|
+
return undefined;
|
|
146
|
+
current = current[key];
|
|
147
|
+
}
|
|
148
|
+
return current;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Set nested value using dot notation
|
|
152
|
+
*/
|
|
153
|
+
static setNestedValue(obj, path, value) {
|
|
154
|
+
const keys = path.split(".");
|
|
155
|
+
let current = obj;
|
|
156
|
+
for (let i = 0; i < keys.length - 1; i++) {
|
|
157
|
+
const key = keys[i];
|
|
158
|
+
if (!(key in current)) {
|
|
159
|
+
current[key] = {};
|
|
160
|
+
}
|
|
161
|
+
current = current[key];
|
|
162
|
+
}
|
|
163
|
+
current[keys[keys.length - 1]] = value;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Deep diff with nested paths
|
|
167
|
+
*/
|
|
168
|
+
static deepDiff(oldObj, newObj, prefix = "") {
|
|
169
|
+
const result = { changed: [], added: [], removed: [] };
|
|
170
|
+
if (typeof oldObj !== "object" ||
|
|
171
|
+
oldObj === null ||
|
|
172
|
+
typeof newObj !== "object" ||
|
|
173
|
+
newObj === null) {
|
|
174
|
+
if (!this.deepEqual(oldObj, newObj)) {
|
|
175
|
+
result.changed.push(prefix || "root");
|
|
176
|
+
}
|
|
177
|
+
return result;
|
|
178
|
+
}
|
|
179
|
+
const oldKeys = new Set(Object.keys(oldObj));
|
|
180
|
+
const newKeys = new Set(Object.keys(newObj));
|
|
181
|
+
for (const key of oldKeys) {
|
|
182
|
+
const path = prefix ? `${prefix}.${key}` : key;
|
|
183
|
+
if (!newKeys.has(key)) {
|
|
184
|
+
result.removed.push(path);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
const oldVal = oldObj[key];
|
|
188
|
+
const newVal = newObj[key];
|
|
189
|
+
if (typeof oldVal === "object" &&
|
|
190
|
+
oldVal !== null &&
|
|
191
|
+
typeof newVal === "object" &&
|
|
192
|
+
newVal !== null) {
|
|
193
|
+
const nested = this.deepDiff(oldVal, newVal, path);
|
|
194
|
+
result.changed.push(...nested.changed);
|
|
195
|
+
result.added.push(...nested.added);
|
|
196
|
+
result.removed.push(...nested.removed);
|
|
197
|
+
}
|
|
198
|
+
else if (!this.deepEqual(oldVal, newVal)) {
|
|
199
|
+
result.changed.push(path);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
for (const key of newKeys) {
|
|
204
|
+
if (!oldKeys.has(key)) {
|
|
205
|
+
const path = prefix ? `${prefix}.${key}` : key;
|
|
206
|
+
result.added.push(path);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return result;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Merge two objects with conflict resolution
|
|
213
|
+
*/
|
|
214
|
+
static merge(obj1, obj2, strategy = "merge") {
|
|
215
|
+
if (strategy === "first")
|
|
216
|
+
return { ...obj1 };
|
|
217
|
+
if (strategy === "second")
|
|
218
|
+
return { ...obj2 };
|
|
219
|
+
const result = { ...obj1 };
|
|
220
|
+
for (const key of Object.keys(obj2)) {
|
|
221
|
+
const val1 = result[key];
|
|
222
|
+
const val2 = obj2[key];
|
|
223
|
+
if (typeof val1 === "object" &&
|
|
224
|
+
val1 !== null &&
|
|
225
|
+
typeof val2 === "object" &&
|
|
226
|
+
val2 !== null) {
|
|
227
|
+
result[key] = this.merge(val1, val2);
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
result[key] = val2;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return result;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Get summary of changes
|
|
237
|
+
*/
|
|
238
|
+
static getSummary(diff) {
|
|
239
|
+
const parts = [];
|
|
240
|
+
if (diff.changed.length > 0)
|
|
241
|
+
parts.push(`${diff.changed.length} changed`);
|
|
242
|
+
if (diff.added.length > 0)
|
|
243
|
+
parts.push(`${diff.added.length} added`);
|
|
244
|
+
if (diff.removed.length > 0)
|
|
245
|
+
parts.push(`${diff.removed.length} removed`);
|
|
246
|
+
return parts.join(", ") || "no changes";
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=DiffUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiffUtils.js","sourceRoot":"","sources":["../../../src/utils/helpers/DiffUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnvManager.d.ts","sourceRoot":"","sources":["../../../src/utils/helpers/EnvManager.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAU;IACnB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;IAE3D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKrC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAM7B,MAAM;CAIT"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export class EnvManager {
|
|
2
|
+
isBrowser = typeof window !== "undefined";
|
|
3
|
+
get(name) {
|
|
4
|
+
if (this.isBrowser)
|
|
5
|
+
return import.meta?.env?.[name];
|
|
6
|
+
return process?.env?.[name];
|
|
7
|
+
}
|
|
8
|
+
require(name) {
|
|
9
|
+
const value = this.get(name);
|
|
10
|
+
if (!value)
|
|
11
|
+
throw new Error(`Missing environment variable: ${name}`);
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
isProd() {
|
|
15
|
+
const mode = this.get("NODE_ENV") || this.get("MODE");
|
|
16
|
+
return mode === "production";
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=EnvManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnvManager.js","sourceRoot":"","sources":["../../../src/utils/helpers/EnvManager.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAU;IACF,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IAE3D,GAAG,CAAC,IAAY;QACZ,IAAI,IAAI,CAAC,SAAS;YAAE,OAAQ,MAAM,CAAC,IAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC7D,OAAO,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,IAAY;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;QACrE,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtD,OAAO,IAAI,KAAK,YAAY,CAAC;IACjC,CAAC;CACJ"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event emitter for pub/sub pattern
|
|
3
|
+
* Framework-agnostic event system
|
|
4
|
+
*/
|
|
5
|
+
export type EventListener<T = unknown> = (data: T) => void | Promise<void>;
|
|
6
|
+
export type EventListenerWithError<T = unknown> = (data: T, error?: Error) => void | Promise<void>;
|
|
7
|
+
export interface EventEmitterOptions {
|
|
8
|
+
maxListeners?: number;
|
|
9
|
+
captureRejections?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Event emitter for pub/sub communication
|
|
13
|
+
*/
|
|
14
|
+
export declare class EventEmitter<Events extends Record<string, unknown> = Record<string, unknown>> {
|
|
15
|
+
private eventMap;
|
|
16
|
+
private onceMap;
|
|
17
|
+
private maxListeners;
|
|
18
|
+
private captureRejections;
|
|
19
|
+
private errorHandlers;
|
|
20
|
+
constructor(options?: EventEmitterOptions);
|
|
21
|
+
/**
|
|
22
|
+
* Register event listener
|
|
23
|
+
*/
|
|
24
|
+
on<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this;
|
|
25
|
+
/**
|
|
26
|
+
* Register one-time event listener
|
|
27
|
+
*/
|
|
28
|
+
once<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this;
|
|
29
|
+
/**
|
|
30
|
+
* Remove event listener
|
|
31
|
+
*/
|
|
32
|
+
off<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this;
|
|
33
|
+
/**
|
|
34
|
+
* Remove all listeners for event
|
|
35
|
+
*/
|
|
36
|
+
removeAllListeners<K extends keyof Events>(event?: K): this;
|
|
37
|
+
/**
|
|
38
|
+
* Emit event
|
|
39
|
+
*/
|
|
40
|
+
emit<K extends keyof Events>(event: K, data: Events[K]): Promise<boolean>;
|
|
41
|
+
/**
|
|
42
|
+
* Emit event synchronously
|
|
43
|
+
*/
|
|
44
|
+
emitSync<K extends keyof Events>(event: K, data: Events[K]): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Register error handler
|
|
47
|
+
*/
|
|
48
|
+
onError(listener: EventListenerWithError): this;
|
|
49
|
+
/**
|
|
50
|
+
* Handle error
|
|
51
|
+
*/
|
|
52
|
+
private handleError;
|
|
53
|
+
/**
|
|
54
|
+
* Get listener count for event
|
|
55
|
+
*/
|
|
56
|
+
listenerCount<K extends keyof Events>(event: K): number;
|
|
57
|
+
/**
|
|
58
|
+
* Get all listeners for event
|
|
59
|
+
*/
|
|
60
|
+
getListeners<K extends keyof Events>(event: K): EventListener<Events[K]>[];
|
|
61
|
+
/**
|
|
62
|
+
* Get all event names
|
|
63
|
+
*/
|
|
64
|
+
eventNames(): (keyof Events)[];
|
|
65
|
+
/**
|
|
66
|
+
* Set max listeners
|
|
67
|
+
*/
|
|
68
|
+
setMaxListeners(n: number): this;
|
|
69
|
+
/**
|
|
70
|
+
* Get max listeners
|
|
71
|
+
*/
|
|
72
|
+
getMaxListeners(): number;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Factory function for creating event emitters
|
|
76
|
+
*/
|
|
77
|
+
export declare function createEventEmitter<Events extends Record<string, unknown> = Record<string, unknown>>(options?: EventEmitterOptions): EventEmitter<Events>;
|
|
78
|
+
//# sourceMappingURL=EventEmitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventEmitter.d.ts","sourceRoot":"","sources":["../../../src/utils/helpers/EventEmitter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3E,MAAM,MAAM,sBAAsB,CAAC,CAAC,GAAG,OAAO,IAAI,CAC9C,IAAI,EAAE,CAAC,EACP,KAAK,CAAC,EAAE,KAAK,KACZ,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,MAAM,WAAW,mBAAmB;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,YAAY,CACrB,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAEhE,OAAO,CAAC,QAAQ,CAA8C;IAC9D,OAAO,CAAC,OAAO,CAA8C;IAC7D,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,iBAAiB,CAAU;IACnC,OAAO,CAAC,aAAa,CAA0C;gBAEnD,OAAO,GAAE,mBAAwB;IAK7C;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,MAAM,EACrB,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GACnC,IAAI;IAkBP;;OAEG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,MAAM,EACvB,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GACnC,IAAI;IAuBP;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,MAAM,EACtB,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GACnC,IAAI;IAcP;;OAEG;IACH,kBAAkB,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI;IAW3D;;OAEG;IACG,IAAI,CAAC,CAAC,SAAS,MAAM,MAAM,EAC7B,KAAK,EAAE,CAAC,EACR,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAChB,OAAO,CAAC,OAAO,CAAC;IAqCnB;;OAEG;IACH,QAAQ,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO;IAqBpE;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAK/C;;OAEG;IACH,OAAO,CAAC,WAAW;IAUnB;;OAEG;IACH,aAAa,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM;IAKvD;;OAEG;IACH,YAAY,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;IAO1E;;OAEG;IACH,UAAU,IAAI,CAAC,MAAM,MAAM,CAAC,EAAE;IAI9B;;OAEG;IACH,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKhC;;OAEG;IACH,eAAe,IAAI,MAAM;CAG5B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAC9B,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,OAAO,CAAC,EAAE,mBAAmB,GAAG,YAAY,CAAC,MAAM,CAAC,CAErD"}
|