@pawells/typescript-common 1.1.5 → 1.1.7
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/build/array/array-range.d.ts.map +1 -1
- package/build/array/array-range.js +4 -2
- package/build/array/array-range.js.map +1 -1
- package/build/function/memoize.d.ts +7 -1
- package/build/function/memoize.d.ts.map +1 -1
- package/build/function/memoize.js +14 -1
- package/build/function/memoize.js.map +1 -1
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +2 -0
- package/build/index.js.map +1 -1
- package/build/lru-cache.d.ts +90 -0
- package/build/lru-cache.d.ts.map +1 -0
- package/build/lru-cache.js +121 -0
- package/build/lru-cache.js.map +1 -0
- package/build/object/clone.d.ts.map +1 -1
- package/build/object/clone.js +5 -1
- package/build/object/clone.js.map +1 -1
- package/build/object/object-diff.d.ts +9 -0
- package/build/object/object-diff.d.ts.map +1 -1
- package/build/object/object-diff.js +9 -0
- package/build/object/object-diff.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array-range.d.ts","sourceRoot":"","sources":["../../src/array/array-range.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,SAAI,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"array-range.d.ts","sourceRoot":"","sources":["../../src/array/array-range.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,SAAI,GAAG,MAAM,EAAE,CAczE"}
|
|
@@ -22,8 +22,10 @@ export function ArrayRange(start, end, step = 1) {
|
|
|
22
22
|
if (step < 0 && start <= end)
|
|
23
23
|
return [];
|
|
24
24
|
const result = [];
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
// Use mathematical iteration count to avoid floating-point accumulation errors
|
|
26
|
+
const iterations = Math.round(Math.abs(end - start) / Math.abs(step));
|
|
27
|
+
for (let i = 0; i < iterations; i++) {
|
|
28
|
+
result.push(start + i * step);
|
|
27
29
|
}
|
|
28
30
|
return result;
|
|
29
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array-range.js","sourceRoot":"","sources":["../../src/array/array-range.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,GAAW,EAAE,IAAI,GAAG,CAAC;IAC9D,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1B,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,GAAG;QAAE,OAAO,EAAE,CAAC;IACxC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,GAAG;QAAE,OAAO,EAAE,CAAC;IAExC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,IAAI,CAAC,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"array-range.js","sourceRoot":"","sources":["../../src/array/array-range.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,GAAW,EAAE,IAAI,GAAG,CAAC;IAC9D,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1B,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,GAAG;QAAE,OAAO,EAAE,CAAC;IACxC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,GAAG;QAAE,OAAO,EAAE,CAAC;IAExC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,+EAA+E;IAC/E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -4,9 +4,12 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Only suitable for **pure functions** with serialisable arguments.
|
|
6
6
|
*
|
|
7
|
+
* Implements LRU (Least Recently Used) eviction when the cache reaches `maxCacheSize`.
|
|
8
|
+
*
|
|
7
9
|
* @template T - The wrapped function type
|
|
8
10
|
* @param fn - The function to memoize
|
|
9
11
|
* @param keyFn - Optional custom cache-key function
|
|
12
|
+
* @param maxCacheSize - Maximum number of cache entries before LRU eviction (default: 1000)
|
|
10
13
|
* @returns A memoized function with the same signature as `fn`
|
|
11
14
|
*
|
|
12
15
|
* @example
|
|
@@ -17,7 +20,10 @@
|
|
|
17
20
|
*
|
|
18
21
|
* // Custom key function:
|
|
19
22
|
* const getUser = Memoize(fetchUser, (id) => `user:${id}`);
|
|
23
|
+
*
|
|
24
|
+
* // With custom cache size:
|
|
25
|
+
* const cached = Memoize(fn, undefined, 500);
|
|
20
26
|
* ```
|
|
21
27
|
*/
|
|
22
|
-
export declare function Memoize<T extends (...args: any[]) => any>(fn: T, keyFn?: (...args: Parameters<T>) => string): T;
|
|
28
|
+
export declare function Memoize<T extends (...args: any[]) => any>(fn: T, keyFn?: (...args: Parameters<T>) => string, maxCacheSize?: number): T;
|
|
23
29
|
//# sourceMappingURL=memoize.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memoize.d.ts","sourceRoot":"","sources":["../../src/function/memoize.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"memoize.d.ts","sourceRoot":"","sources":["../../src/function/memoize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,EAAE,EAAE,CAAC,EACL,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,EAE1C,YAAY,SAAO,GACjB,CAAC,CAqBH"}
|
|
@@ -4,9 +4,12 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Only suitable for **pure functions** with serialisable arguments.
|
|
6
6
|
*
|
|
7
|
+
* Implements LRU (Least Recently Used) eviction when the cache reaches `maxCacheSize`.
|
|
8
|
+
*
|
|
7
9
|
* @template T - The wrapped function type
|
|
8
10
|
* @param fn - The function to memoize
|
|
9
11
|
* @param keyFn - Optional custom cache-key function
|
|
12
|
+
* @param maxCacheSize - Maximum number of cache entries before LRU eviction (default: 1000)
|
|
10
13
|
* @returns A memoized function with the same signature as `fn`
|
|
11
14
|
*
|
|
12
15
|
* @example
|
|
@@ -17,9 +20,14 @@
|
|
|
17
20
|
*
|
|
18
21
|
* // Custom key function:
|
|
19
22
|
* const getUser = Memoize(fetchUser, (id) => `user:${id}`);
|
|
23
|
+
*
|
|
24
|
+
* // With custom cache size:
|
|
25
|
+
* const cached = Memoize(fn, undefined, 500);
|
|
20
26
|
* ```
|
|
21
27
|
*/
|
|
22
|
-
export function Memoize(fn, keyFn
|
|
28
|
+
export function Memoize(fn, keyFn,
|
|
29
|
+
// eslint-disable-next-line no-magic-numbers
|
|
30
|
+
maxCacheSize = 1000) {
|
|
23
31
|
const cache = new Map();
|
|
24
32
|
return function memoized(...args) {
|
|
25
33
|
const key = keyFn ? keyFn(...args) : JSON.stringify(args);
|
|
@@ -27,6 +35,11 @@ export function Memoize(fn, keyFn) {
|
|
|
27
35
|
return cache.get(key);
|
|
28
36
|
}
|
|
29
37
|
const result = fn(...args);
|
|
38
|
+
// Implement LRU eviction: if cache is full, remove oldest entry before adding new one
|
|
39
|
+
if (cache.size >= maxCacheSize) {
|
|
40
|
+
const oldestKey = cache.keys().next().value;
|
|
41
|
+
cache.delete(oldestKey);
|
|
42
|
+
}
|
|
30
43
|
cache.set(key, result);
|
|
31
44
|
return result;
|
|
32
45
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memoize.js","sourceRoot":"","sources":["../../src/function/memoize.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"memoize.js","sourceRoot":"","sources":["../../src/function/memoize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,OAAO,CACtB,EAAK,EACL,KAA0C;AAC1C,4CAA4C;AAC5C,YAAY,GAAG,IAAI;IAEnB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE/C,OAAO,SAAS,QAAQ,CAAC,GAAG,IAAmB;QAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE1D,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAkB,CAAC;QACxC,CAAC;QAED,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI,CAAkB,CAAC;QAE5C,sFAAsF;QACtF,IAAI,KAAK,CAAC,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAe,CAAC;YACtD,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACvB,OAAO,MAAM,CAAC;IACf,CAAM,CAAC;AACR,CAAC"}
|
package/build/index.d.ts
CHANGED
|
@@ -26,6 +26,7 @@ export * as StringUtils from './string/index.js';
|
|
|
26
26
|
export * as TimeUtils from './time/index.js';
|
|
27
27
|
export * as EnumUtils from './enum/index.js';
|
|
28
28
|
export * as FunctionUtils from './function/index.js';
|
|
29
|
+
export { LRUCache } from './lru-cache.js';
|
|
29
30
|
export { ArrayFilter, ArrayContains, Unique, ArrayIntersection, ArrayChunk, ArrayShuffle, ArrayGroupBy, ArrayDifference, ArrayFlatten, ArrayCompact, ArrayPartition, ArrayZip, ArrayRange, ArraySortBy, ArrayCountBy, ArraySample, } from './array/index.js';
|
|
30
31
|
export { CamelCase, PASCAL_CASE, KEBAB_CASE, SNAKE_CASE, SCREAMING_SNAKE_CASE, FormatString, EscapeHTML, StripHTML, Pluralize, WordCount, CountOccurrences, } from './string/index.js';
|
|
31
32
|
export { AssertObject, ObjectClone, TransformObject, ObjectEquals, ObjectFilter, FilterObject, ObjectPick, ObjectOmit, ObjectMerge, MapObject, ObjectHash, ObjectSortKeys, ObjectFromKeyValuePairs, ObjectToKeyValuePairs, ObjectGetPropertyByPath, ObjectSetPropertyByPath, ObjectInvert, ObjectFlatten, ObjectDiff, } from './object/index.js';
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAG/C,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AAGjD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AAGjD,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AAGjD,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAG7C,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAG7C,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EAEN,WAAW,EACX,aAAa,EACb,MAAM,EACN,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,UAAU,EACV,WAAW,EACX,YAAY,EACZ,WAAW,GACX,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAEN,SAAS,EACT,WAAW,EACX,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,SAAS,EACT,SAAS,EACT,SAAS,EACT,gBAAgB,GAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAEN,YAAY,EACZ,WAAW,EACX,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,UAAU,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,cAAc,EACd,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,YAAY,EACZ,aAAa,EACb,UAAU,GACV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAEN,WAAW,EACX,SAAS,GACT,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAEN,QAAQ,EACR,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,aAAa,GACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAEN,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,KAAK,GACL,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAGN,WAAW,EACX,aAAa,EACb,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,aAAa,EACb,UAAU,EACV,YAAY,EACZ,0BAA0B,EAC1B,uBAAuB,EACvB,2BAA2B,EAC3B,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EAEd,cAAc,EACd,SAAS,EACT,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,eAAe,EACf,YAAY,EACZ,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,WAAW,EACX,cAAc,GACd,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAEX,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,MAAM,EACN,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EAEpB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EAEpB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,GACvB,MAAM,oBAAoB,CAAC"}
|
package/build/index.js
CHANGED
|
@@ -35,6 +35,8 @@ export * as TimeUtils from './time/index.js';
|
|
|
35
35
|
export * as EnumUtils from './enum/index.js';
|
|
36
36
|
// Function utilities
|
|
37
37
|
export * as FunctionUtils from './function/index.js';
|
|
38
|
+
// LRU Cache
|
|
39
|
+
export { LRUCache } from './lru-cache.js';
|
|
38
40
|
// Direct exports for commonly used functions
|
|
39
41
|
export {
|
|
40
42
|
// Array utilities
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic Least Recently Used (LRU) Cache implementation.
|
|
3
|
+
*
|
|
4
|
+
* An `LRUCache` maintains a fixed-size cache of key-value pairs.
|
|
5
|
+
* When capacity is reached, the least recently used (oldest) entry is evicted.
|
|
6
|
+
* Both `get()` and `set()` operations update the recency order.
|
|
7
|
+
*
|
|
8
|
+
* @typeParam K - Key type
|
|
9
|
+
* @typeParam V - Value type
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const cache = new LRUCache<string, number>(2);
|
|
14
|
+
* cache.set('a', 1);
|
|
15
|
+
* cache.set('b', 2);
|
|
16
|
+
* cache.set('c', 3); // Evicts 'a' since capacity is 2
|
|
17
|
+
* console.log(cache.get('a')); // undefined
|
|
18
|
+
* console.log(cache.get('b')); // 2
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare class LRUCache<K, V> {
|
|
22
|
+
private readonly _map;
|
|
23
|
+
private readonly _maxSize;
|
|
24
|
+
/**
|
|
25
|
+
* Creates a new `LRUCache` instance.
|
|
26
|
+
*
|
|
27
|
+
* @param maxSize - Maximum number of entries to cache before evicting the least recently used
|
|
28
|
+
* @throws {Error} If maxSize is less than 1
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* const cache = new LRUCache<string, string>(100);
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
constructor(maxSize: number);
|
|
36
|
+
/**
|
|
37
|
+
* The current number of cached entries.
|
|
38
|
+
*/
|
|
39
|
+
get size(): number;
|
|
40
|
+
/**
|
|
41
|
+
* Retrieves a value from the cache by key.
|
|
42
|
+
*
|
|
43
|
+
* Accessing a value marks it as recently used, moving it to the end of the
|
|
44
|
+
* eviction order.
|
|
45
|
+
*
|
|
46
|
+
* @param key - The key to look up
|
|
47
|
+
* @returns The cached value, or `undefined` if not found
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const cache = new LRUCache<string, number>(2);
|
|
52
|
+
* cache.set('a', 1);
|
|
53
|
+
* console.log(cache.get('a')); // 1
|
|
54
|
+
* console.log(cache.get('b')); // undefined
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
get(key: K): V | undefined;
|
|
58
|
+
/**
|
|
59
|
+
* Sets a value in the cache.
|
|
60
|
+
*
|
|
61
|
+
* If the key already exists, its value is updated and it is marked as
|
|
62
|
+
* recently used. If the cache is at capacity and a new key is added,
|
|
63
|
+
* the least recently used (first) entry is evicted.
|
|
64
|
+
*
|
|
65
|
+
* @param key - The key to cache
|
|
66
|
+
* @param value - The value to associate with the key
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* const cache = new LRUCache<string, number>(2);
|
|
71
|
+
* cache.set('a', 1);
|
|
72
|
+
* cache.set('b', 2);
|
|
73
|
+
* cache.set('c', 3); // Evicts 'a' since cache is full
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
set(key: K, value: V): void;
|
|
77
|
+
/**
|
|
78
|
+
* Clears all entries from the cache.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* const cache = new LRUCache<string, number>(10);
|
|
83
|
+
* cache.set('a', 1);
|
|
84
|
+
* cache.clear();
|
|
85
|
+
* console.log(cache.size); // 0
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
clear(): void;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=lru-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lru-cache.d.ts","sourceRoot":"","sources":["../src/lru-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IAExC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC;;;;;;;;;;OAUG;gBACS,OAAO,EAAE,MAAM;IAO3B;;OAEG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;;;;;;;;;;;;;;OAgBG;IACI,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAUjC;;;;;;;;;;;;;;;;;OAiBG;IACI,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAgBlC;;;;;;;;;;OAUG;IACI,KAAK,IAAI,IAAI;CAGpB"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic Least Recently Used (LRU) Cache implementation.
|
|
3
|
+
*
|
|
4
|
+
* An `LRUCache` maintains a fixed-size cache of key-value pairs.
|
|
5
|
+
* When capacity is reached, the least recently used (oldest) entry is evicted.
|
|
6
|
+
* Both `get()` and `set()` operations update the recency order.
|
|
7
|
+
*
|
|
8
|
+
* @typeParam K - Key type
|
|
9
|
+
* @typeParam V - Value type
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const cache = new LRUCache<string, number>(2);
|
|
14
|
+
* cache.set('a', 1);
|
|
15
|
+
* cache.set('b', 2);
|
|
16
|
+
* cache.set('c', 3); // Evicts 'a' since capacity is 2
|
|
17
|
+
* console.log(cache.get('a')); // undefined
|
|
18
|
+
* console.log(cache.get('b')); // 2
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export class LRUCache {
|
|
22
|
+
_map = new Map();
|
|
23
|
+
_maxSize;
|
|
24
|
+
/**
|
|
25
|
+
* Creates a new `LRUCache` instance.
|
|
26
|
+
*
|
|
27
|
+
* @param maxSize - Maximum number of entries to cache before evicting the least recently used
|
|
28
|
+
* @throws {Error} If maxSize is less than 1
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* const cache = new LRUCache<string, string>(100);
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
constructor(maxSize) {
|
|
36
|
+
if (maxSize < 1) {
|
|
37
|
+
throw new Error('LRUCache maxSize must be at least 1');
|
|
38
|
+
}
|
|
39
|
+
this._maxSize = maxSize;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The current number of cached entries.
|
|
43
|
+
*/
|
|
44
|
+
get size() {
|
|
45
|
+
return this._map.size;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Retrieves a value from the cache by key.
|
|
49
|
+
*
|
|
50
|
+
* Accessing a value marks it as recently used, moving it to the end of the
|
|
51
|
+
* eviction order.
|
|
52
|
+
*
|
|
53
|
+
* @param key - The key to look up
|
|
54
|
+
* @returns The cached value, or `undefined` if not found
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```typescript
|
|
58
|
+
* const cache = new LRUCache<string, number>(2);
|
|
59
|
+
* cache.set('a', 1);
|
|
60
|
+
* console.log(cache.get('a')); // 1
|
|
61
|
+
* console.log(cache.get('b')); // undefined
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
get(key) {
|
|
65
|
+
const value = this._map.get(key);
|
|
66
|
+
if (value !== undefined) {
|
|
67
|
+
// Move to end (mark as recently used)
|
|
68
|
+
this._map.delete(key);
|
|
69
|
+
this._map.set(key, value);
|
|
70
|
+
}
|
|
71
|
+
return value;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Sets a value in the cache.
|
|
75
|
+
*
|
|
76
|
+
* If the key already exists, its value is updated and it is marked as
|
|
77
|
+
* recently used. If the cache is at capacity and a new key is added,
|
|
78
|
+
* the least recently used (first) entry is evicted.
|
|
79
|
+
*
|
|
80
|
+
* @param key - The key to cache
|
|
81
|
+
* @param value - The value to associate with the key
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```typescript
|
|
85
|
+
* const cache = new LRUCache<string, number>(2);
|
|
86
|
+
* cache.set('a', 1);
|
|
87
|
+
* cache.set('b', 2);
|
|
88
|
+
* cache.set('c', 3); // Evicts 'a' since cache is full
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
set(key, value) {
|
|
92
|
+
// If key already exists, delete it (will re-add at end)
|
|
93
|
+
if (this._map.has(key)) {
|
|
94
|
+
this._map.delete(key);
|
|
95
|
+
}
|
|
96
|
+
else if (this._map.size >= this._maxSize) {
|
|
97
|
+
// If at capacity and adding a new key, evict the oldest (first) entry
|
|
98
|
+
const firstKey = this._map.keys().next().value;
|
|
99
|
+
if (firstKey !== undefined) {
|
|
100
|
+
this._map.delete(firstKey);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Add at the end (mark as recently used)
|
|
104
|
+
this._map.set(key, value);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Clears all entries from the cache.
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```typescript
|
|
111
|
+
* const cache = new LRUCache<string, number>(10);
|
|
112
|
+
* cache.set('a', 1);
|
|
113
|
+
* cache.clear();
|
|
114
|
+
* console.log(cache.size); // 0
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
clear() {
|
|
118
|
+
this._map.clear();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=lru-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lru-cache.js","sourceRoot":"","sources":["../src/lru-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,QAAQ;IACH,IAAI,GAAG,IAAI,GAAG,EAAQ,CAAC;IAEvB,QAAQ,CAAS;IAElC;;;;;;;;;;OAUG;IACH,YAAY,OAAe;QAC1B,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACvB,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACI,GAAG,CAAC,GAAM;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,sCAAsC;YACtC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACI,GAAG,CAAC,GAAM,EAAE,KAAQ;QAC1B,wDAAwD;QACxD,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5C,sEAAsE;YACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAC/C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC;QACF,CAAC;QAED,yCAAyC;QACzC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;OAUG;IACI,KAAK;QACX,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../../src/object/clone.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../../src/object/clone.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAqDxE;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAAC,MAAM,SAAS,MAAM,EAAE,OAAO,SAAS,MAAM,EAC5E,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9C,OAAO,CAMT"}
|
package/build/object/clone.js
CHANGED
|
@@ -62,7 +62,11 @@ export function ObjectClone(obj, visitedInput) {
|
|
|
62
62
|
if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || typeof obj === 'bigint') {
|
|
63
63
|
return obj;
|
|
64
64
|
}
|
|
65
|
-
|
|
65
|
+
// Provide detailed error message for unsupported types
|
|
66
|
+
const typeName = typeof obj === 'object'
|
|
67
|
+
? obj.constructor.name
|
|
68
|
+
: typeof obj;
|
|
69
|
+
throw new Error(`ObjectClone: ${typeName} objects are not supported. Create a new ${typeName} instance manually.`);
|
|
66
70
|
}
|
|
67
71
|
/**
|
|
68
72
|
* Transforms an object using a transformer function.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clone.js","sourceRoot":"","sources":["../../src/object/clone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,WAAW,CAAI,GAAM,EAAE,YAA8B;IACpE,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,uDAAuD;IACvD,MAAM,OAAO,GAAG,YAAY,IAAI,IAAI,OAAO,EAAE,CAAC;IAE9C,gDAAgD;IAChD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC7C,+BAA+B;QAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAC;QAC3G,CAAC;QAED,8BAA8B;QAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,cAAc;IACd,IAAI,GAAG,YAAY,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAiB,CAAC;IAChD,CAAC;IAED,eAAe;IACf,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAiB,CAAC;IACtE,CAAC;IAED,4BAA4B;IAC5B,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QAChC,sCAAsC;QACtC,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAA0B,CAAC,CAAC;QAChE,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACpC,8BAA8B;YAC9B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;gBACxD,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;YAChD,CAAC;QACF,CAAC,CAAC,CAAC;QACH,OAAO,IAAS,CAAC;IAClB,CAAC;IAED,+CAA+C;IAC/C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC/G,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,
|
|
1
|
+
{"version":3,"file":"clone.js","sourceRoot":"","sources":["../../src/object/clone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,WAAW,CAAI,GAAM,EAAE,YAA8B;IACpE,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,uDAAuD;IACvD,MAAM,OAAO,GAAG,YAAY,IAAI,IAAI,OAAO,EAAE,CAAC;IAE9C,gDAAgD;IAChD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC7C,+BAA+B;QAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAC;QAC3G,CAAC;QAED,8BAA8B;QAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,cAAc;IACd,IAAI,GAAG,YAAY,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAiB,CAAC;IAChD,CAAC;IAED,eAAe;IACf,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAiB,CAAC;IACtE,CAAC;IAED,4BAA4B;IAC5B,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QAChC,sCAAsC;QACtC,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAA0B,CAAC,CAAC;QAChE,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACpC,8BAA8B;YAC9B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;gBACxD,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;YAChD,CAAC;QACF,CAAC,CAAC,CAAC;QACH,OAAO,IAAS,CAAC;IAClB,CAAC;IAED,+CAA+C;IAC/C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC/G,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,uDAAuD;IACvD,MAAM,QAAQ,GAAG,OAAO,GAAG,KAAK,QAAQ;QACvC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI;QACtB,CAAC,CAAC,OAAO,GAAG,CAAC;IACd,MAAM,IAAI,KAAK,CAAC,gBAAgB,QAAQ,4CAA4C,QAAQ,qBAAqB,CAAC,CAAC;AACpH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,eAAe,CAC9B,GAAW,EACX,WAAgD;IAEhD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -19,6 +19,15 @@ export interface IObjectDiffResult {
|
|
|
19
19
|
* - **changed** — keys present in both whose values are not strictly equal
|
|
20
20
|
* (compared via `JSON.stringify` for deep value equality)
|
|
21
21
|
*
|
|
22
|
+
* **Important**: Value comparison uses `JSON.stringify`, which has limitations:
|
|
23
|
+
* - Functions, `undefined`, and `Symbol` values are not compared correctly
|
|
24
|
+
* (they may serialize to `undefined` or be omitted)
|
|
25
|
+
* - Circular references will throw an error
|
|
26
|
+
* - Objects with identical structure but different prototypes are considered equal
|
|
27
|
+
*
|
|
28
|
+
* For values containing functions, `undefined`, symbols, or circular references,
|
|
29
|
+
* consider a custom comparison function or pre-filtering the objects.
|
|
30
|
+
*
|
|
22
31
|
* @param objA - The baseline object ("before")
|
|
23
32
|
* @param objB - The comparison object ("after")
|
|
24
33
|
* @returns {@link IObjectDiffResult}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object-diff.d.ts","sourceRoot":"","sources":["../../src/object/object-diff.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IACjC,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACxD;AAED
|
|
1
|
+
{"version":3,"file":"object-diff.d.ts","sourceRoot":"","sources":["../../src/object/object-diff.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IACjC,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACxD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,UAAU,CACzB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,iBAAiB,CAkBnB"}
|
|
@@ -7,6 +7,15 @@
|
|
|
7
7
|
* - **changed** — keys present in both whose values are not strictly equal
|
|
8
8
|
* (compared via `JSON.stringify` for deep value equality)
|
|
9
9
|
*
|
|
10
|
+
* **Important**: Value comparison uses `JSON.stringify`, which has limitations:
|
|
11
|
+
* - Functions, `undefined`, and `Symbol` values are not compared correctly
|
|
12
|
+
* (they may serialize to `undefined` or be omitted)
|
|
13
|
+
* - Circular references will throw an error
|
|
14
|
+
* - Objects with identical structure but different prototypes are considered equal
|
|
15
|
+
*
|
|
16
|
+
* For values containing functions, `undefined`, symbols, or circular references,
|
|
17
|
+
* consider a custom comparison function or pre-filtering the objects.
|
|
18
|
+
*
|
|
10
19
|
* @param objA - The baseline object ("before")
|
|
11
20
|
* @param objB - The comparison object ("after")
|
|
12
21
|
* @returns {@link IObjectDiffResult}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object-diff.js","sourceRoot":"","sources":["../../src/object/object-diff.ts"],"names":[],"mappings":"AAUA
|
|
1
|
+
{"version":3,"file":"object-diff.js","sourceRoot":"","sources":["../../src/object/object-diff.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,UAAU,CACzB,IAA6B,EAC7B,IAA6B;IAE7B,MAAM,MAAM,GAAsB,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC1E,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEtE,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAE5D,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACpE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1D,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pawells/typescript-common",
|
|
3
3
|
"displayName": "TypeScript Common Utilities",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.7",
|
|
5
5
|
"description": "Shared TypeScript utility library — array, object, string, time, and enum helpers. ESM-only, no runtime dependencies.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./build/index.js",
|