@lowentry/utils 2.0.2 → 2.0.3

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 (169) hide show
  1. package/dist/src/LeTypes.d.ts +73 -0
  2. package/dist/src/LeTypes.d.ts.map +1 -0
  3. package/dist/src/LeTypes.js +235 -0
  4. package/dist/src/LeTypes.js.map +1 -0
  5. package/dist/src/LeUtils.d.ts +745 -0
  6. package/dist/src/LeUtils.d.ts.map +1 -0
  7. package/dist/src/LeUtils.js +3168 -0
  8. package/dist/src/LeUtils.js.map +1 -0
  9. package/dist/src/classes/EventEmitter.d.ts +51 -0
  10. package/dist/src/classes/EventEmitter.d.ts.map +1 -0
  11. package/dist/src/classes/EventEmitter.js +94 -0
  12. package/dist/src/classes/EventEmitter.js.map +1 -0
  13. package/dist/src/classes/LinkedList.d.ts +35 -0
  14. package/dist/src/classes/LinkedList.d.ts.map +1 -0
  15. package/dist/src/classes/LinkedList.js +99 -0
  16. package/dist/src/classes/LinkedList.js.map +1 -0
  17. package/dist/src/classes/SerializableMap.d.ts +14 -0
  18. package/dist/src/classes/SerializableMap.d.ts.map +1 -0
  19. package/dist/src/classes/SerializableMap.js +27 -0
  20. package/dist/src/classes/SerializableMap.js.map +1 -0
  21. package/dist/src/classes/TreeSet.d.ts +123 -0
  22. package/dist/src/classes/TreeSet.d.ts.map +1 -0
  23. package/dist/src/classes/TreeSet.js +210 -0
  24. package/dist/src/classes/TreeSet.js.map +1 -0
  25. package/dist/src/index.d.ts +148 -0
  26. package/dist/src/index.d.ts.map +1 -0
  27. package/dist/src/index.js +13 -0
  28. package/dist/src/index.js.map +1 -0
  29. package/dist/tests/CustomClasses.test.d.ts +2 -0
  30. package/dist/tests/CustomClasses.test.d.ts.map +1 -0
  31. package/dist/tests/CustomClasses.test.js +138 -0
  32. package/dist/tests/CustomClasses.test.js.map +1 -0
  33. package/dist/tests/LeClasses.EventEmitter.test.d.ts +2 -0
  34. package/dist/tests/LeClasses.EventEmitter.test.d.ts.map +1 -0
  35. package/dist/tests/LeClasses.EventEmitter.test.js +39 -0
  36. package/dist/tests/LeClasses.EventEmitter.test.js.map +1 -0
  37. package/dist/tests/LeClasses.LinkedList.test.d.ts +2 -0
  38. package/dist/tests/LeClasses.LinkedList.test.d.ts.map +1 -0
  39. package/dist/tests/LeClasses.LinkedList.test.js +36 -0
  40. package/dist/tests/LeClasses.LinkedList.test.js.map +1 -0
  41. package/dist/tests/LeClasses.SerializableMap.test.d.ts +2 -0
  42. package/dist/tests/LeClasses.SerializableMap.test.d.ts.map +1 -0
  43. package/dist/tests/LeClasses.SerializableMap.test.js +25 -0
  44. package/dist/tests/LeClasses.SerializableMap.test.js.map +1 -0
  45. package/dist/tests/LeClasses.TreeSet.test.d.ts +2 -0
  46. package/dist/tests/LeClasses.TreeSet.test.d.ts.map +1 -0
  47. package/dist/tests/LeClasses.TreeSet.test.js +28 -0
  48. package/dist/tests/LeClasses.TreeSet.test.js.map +1 -0
  49. package/dist/tests/LeTypes.ARRAY.test.d.ts +2 -0
  50. package/dist/tests/LeTypes.ARRAY.test.d.ts.map +1 -0
  51. package/dist/tests/LeTypes.ARRAY.test.js +103 -0
  52. package/dist/tests/LeTypes.ARRAY.test.js.map +1 -0
  53. package/dist/tests/LeTypes.BOOL.test.d.ts +2 -0
  54. package/dist/tests/LeTypes.BOOL.test.d.ts.map +1 -0
  55. package/dist/tests/LeTypes.BOOL.test.js +138 -0
  56. package/dist/tests/LeTypes.BOOL.test.js.map +1 -0
  57. package/dist/tests/LeTypes.FLOAT.test.d.ts +2 -0
  58. package/dist/tests/LeTypes.FLOAT.test.d.ts.map +1 -0
  59. package/dist/tests/LeTypes.FLOAT.test.js +120 -0
  60. package/dist/tests/LeTypes.FLOAT.test.js.map +1 -0
  61. package/dist/tests/LeTypes.FLOAT_ANY.test.d.ts +2 -0
  62. package/dist/tests/LeTypes.FLOAT_ANY.test.d.ts.map +1 -0
  63. package/dist/tests/LeTypes.FLOAT_ANY.test.js +47 -0
  64. package/dist/tests/LeTypes.FLOAT_ANY.test.js.map +1 -0
  65. package/dist/tests/LeTypes.INT.test.d.ts +2 -0
  66. package/dist/tests/LeTypes.INT.test.d.ts.map +1 -0
  67. package/dist/tests/LeTypes.INT.test.js +80 -0
  68. package/dist/tests/LeTypes.INT.test.js.map +1 -0
  69. package/dist/tests/LeTypes.INT_ANY.test.d.ts +2 -0
  70. package/dist/tests/LeTypes.INT_ANY.test.d.ts.map +1 -0
  71. package/dist/tests/LeTypes.INT_ANY.test.js +37 -0
  72. package/dist/tests/LeTypes.INT_ANY.test.js.map +1 -0
  73. package/dist/tests/LeTypes.ISSET.test.d.ts +2 -0
  74. package/dist/tests/LeTypes.ISSET.test.d.ts.map +1 -0
  75. package/dist/tests/LeTypes.ISSET.test.js +113 -0
  76. package/dist/tests/LeTypes.ISSET.test.js.map +1 -0
  77. package/dist/tests/LeTypes.IS_ARRAY.test.d.ts +2 -0
  78. package/dist/tests/LeTypes.IS_ARRAY.test.d.ts.map +1 -0
  79. package/dist/tests/LeTypes.IS_ARRAY.test.js +81 -0
  80. package/dist/tests/LeTypes.IS_ARRAY.test.js.map +1 -0
  81. package/dist/tests/LeTypes.IS_OBJECT.test.d.ts +2 -0
  82. package/dist/tests/LeTypes.IS_OBJECT.test.d.ts.map +1 -0
  83. package/dist/tests/LeTypes.IS_OBJECT.test.js +98 -0
  84. package/dist/tests/LeTypes.IS_OBJECT.test.js.map +1 -0
  85. package/dist/tests/LeTypes.LAX.test.d.ts +2 -0
  86. package/dist/tests/LeTypes.LAX.test.d.ts.map +1 -0
  87. package/dist/tests/LeTypes.LAX.test.js +89 -0
  88. package/dist/tests/LeTypes.LAX.test.js.map +1 -0
  89. package/dist/tests/LeTypes.OBJECT.test.d.ts +2 -0
  90. package/dist/tests/LeTypes.OBJECT.test.d.ts.map +1 -0
  91. package/dist/tests/LeTypes.OBJECT.test.js +81 -0
  92. package/dist/tests/LeTypes.OBJECT.test.js.map +1 -0
  93. package/dist/tests/LeTypes.STRING.test.d.ts +2 -0
  94. package/dist/tests/LeTypes.STRING.test.d.ts.map +1 -0
  95. package/dist/tests/LeTypes.STRING.test.js +204 -0
  96. package/dist/tests/LeTypes.STRING.test.js.map +1 -0
  97. package/dist/tests/LeTypes.STRING_ANY.test.d.ts +2 -0
  98. package/dist/tests/LeTypes.STRING_ANY.test.d.ts.map +1 -0
  99. package/dist/tests/LeTypes.STRING_ANY.test.js +58 -0
  100. package/dist/tests/LeTypes.STRING_ANY.test.js.map +1 -0
  101. package/dist/tests/LeUtils.clone.test.d.ts +2 -0
  102. package/dist/tests/LeUtils.clone.test.d.ts.map +1 -0
  103. package/dist/tests/LeUtils.clone.test.js +180 -0
  104. package/dist/tests/LeUtils.clone.test.js.map +1 -0
  105. package/dist/tests/LeUtils.collections.test.d.ts +2 -0
  106. package/dist/tests/LeUtils.collections.test.d.ts.map +1 -0
  107. package/dist/tests/LeUtils.collections.test.js +149 -0
  108. package/dist/tests/LeUtils.collections.test.js.map +1 -0
  109. package/dist/tests/LeUtils.comparison.test.d.ts +2 -0
  110. package/dist/tests/LeUtils.comparison.test.d.ts.map +1 -0
  111. package/dist/tests/LeUtils.comparison.test.js +125 -0
  112. package/dist/tests/LeUtils.comparison.test.js.map +1 -0
  113. package/dist/tests/LeUtils.contains.test.d.ts +2 -0
  114. package/dist/tests/LeUtils.contains.test.d.ts.map +1 -0
  115. package/dist/tests/LeUtils.contains.test.js +52 -0
  116. package/dist/tests/LeUtils.contains.test.js.map +1 -0
  117. package/dist/tests/LeUtils.each.test.d.ts +2 -0
  118. package/dist/tests/LeUtils.each.test.d.ts.map +1 -0
  119. package/dist/tests/LeUtils.each.test.js +267 -0
  120. package/dist/tests/LeUtils.each.test.js.map +1 -0
  121. package/dist/tests/LeUtils.eachAsync.test.d.ts +2 -0
  122. package/dist/tests/LeUtils.eachAsync.test.d.ts.map +1 -0
  123. package/dist/tests/LeUtils.eachAsync.test.js +80 -0
  124. package/dist/tests/LeUtils.eachAsync.test.js.map +1 -0
  125. package/dist/tests/LeUtils.encoding.test.d.ts +2 -0
  126. package/dist/tests/LeUtils.encoding.test.d.ts.map +1 -0
  127. package/dist/tests/LeUtils.encoding.test.js +45 -0
  128. package/dist/tests/LeUtils.encoding.test.js.map +1 -0
  129. package/dist/tests/LeUtils.equals.test.d.ts +2 -0
  130. package/dist/tests/LeUtils.equals.test.d.ts.map +1 -0
  131. package/dist/tests/LeUtils.equals.test.js +328 -0
  132. package/dist/tests/LeUtils.equals.test.js.map +1 -0
  133. package/dist/tests/LeUtils.flatten.test.d.ts +2 -0
  134. package/dist/tests/LeUtils.flatten.test.d.ts.map +1 -0
  135. package/dist/tests/LeUtils.flatten.test.js +30 -0
  136. package/dist/tests/LeUtils.flatten.test.js.map +1 -0
  137. package/dist/tests/LeUtils.misc.test.d.ts +2 -0
  138. package/dist/tests/LeUtils.misc.test.d.ts.map +1 -0
  139. package/dist/tests/LeUtils.misc.test.js +50 -0
  140. package/dist/tests/LeUtils.misc.test.js.map +1 -0
  141. package/dist/tests/LeUtils.misc2.test.d.ts +2 -0
  142. package/dist/tests/LeUtils.misc2.test.d.ts.map +1 -0
  143. package/dist/tests/LeUtils.misc2.test.js +58 -0
  144. package/dist/tests/LeUtils.misc2.test.js.map +1 -0
  145. package/dist/tests/LeUtils.newlyAdded.test.d.ts +2 -0
  146. package/dist/tests/LeUtils.newlyAdded.test.d.ts.map +1 -0
  147. package/dist/tests/LeUtils.newlyAdded.test.js +121 -0
  148. package/dist/tests/LeUtils.newlyAdded.test.js.map +1 -0
  149. package/dist/tests/LeUtils.strings.test.d.ts +2 -0
  150. package/dist/tests/LeUtils.strings.test.d.ts.map +1 -0
  151. package/dist/tests/LeUtils.strings.test.js +125 -0
  152. package/dist/tests/LeUtils.strings.test.js.map +1 -0
  153. package/dist/tests/LeUtils.timing.test.d.ts +2 -0
  154. package/dist/tests/LeUtils.timing.test.d.ts.map +1 -0
  155. package/dist/tests/LeUtils.timing.test.js +72 -0
  156. package/dist/tests/LeUtils.timing.test.js.map +1 -0
  157. package/dist/tests/LeUtils.transactional.test.d.ts +2 -0
  158. package/dist/tests/LeUtils.transactional.test.d.ts.map +1 -0
  159. package/dist/tests/LeUtils.transactional.test.js +39 -0
  160. package/dist/tests/LeUtils.transactional.test.js.map +1 -0
  161. package/dist/tests/setup.d.ts +2 -0
  162. package/dist/tests/setup.d.ts.map +1 -0
  163. package/dist/tests/setup.js +6 -0
  164. package/dist/tests/setup.js.map +1 -0
  165. package/dist/vitest.config.d.ts +3 -0
  166. package/dist/vitest.config.d.ts.map +1 -0
  167. package/dist/vitest.config.js +21 -0
  168. package/dist/vitest.config.js.map +1 -0
  169. package/package.json +1 -1
@@ -0,0 +1,149 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { filter, map, mapToArray, getEmptySimplifiedCollection, sortKeys } from '../src/index';
3
+ /**
4
+ * Collection transformation functions - Tests from old each.test.js
5
+ */
6
+ describe('filter()', () => {
7
+ it('filters array with default truthy predicate', () => {
8
+ const out = filter([0, 1, '', 'x', false, true]);
9
+ expect(out).toEqual([1, 'x', true]);
10
+ });
11
+ it('filters object by custom predicate', () => {
12
+ const res = filter({ a: 1, b: 2, c: 3 }, (v) => v > 1);
13
+ expect(res).toEqual({ b: 2, c: 3 });
14
+ });
15
+ it('filters Map and returns Map', () => {
16
+ const m = new Map([['a', 1], ['b', 2]]);
17
+ const out = filter(m, (v) => v % 2 === 0);
18
+ expect(out instanceof Map).toBe(true);
19
+ expect(out.get('b')).toBe(2);
20
+ });
21
+ it('filters Map with truthy default', () => {
22
+ const m = new Map([['a', 0], ['b', 2]]);
23
+ const res = filter(m);
24
+ expect(res instanceof Map).toBe(true);
25
+ expect([...res.entries()]).toEqual([['b', 2]]);
26
+ });
27
+ it('filters Set returns array', () => {
28
+ const s = new Set([1, 2, 3]);
29
+ const res = filter(s, (v) => v % 2 === 1);
30
+ expect(res).toEqual([1, 3]);
31
+ });
32
+ });
33
+ describe('map()', () => {
34
+ it('maps array elements', () => {
35
+ expect(map([1, 2], (n) => n * 2)).toEqual([2, 4]);
36
+ });
37
+ it('maps object values', () => {
38
+ expect(map({ x: 1 }, (v) => v + 1)).toEqual({ x: 2 });
39
+ });
40
+ it('maps typed array to regular array', () => {
41
+ const ta = new Uint8Array([1, 2]);
42
+ expect(map(ta, (n) => n + 3)).toEqual([4, 5]);
43
+ });
44
+ it('returns Map clone when callback omitted', () => {
45
+ const m = new Map([['k', 5]]);
46
+ const res = map(m);
47
+ expect(res instanceof Map).toBe(true);
48
+ expect(res.get('k')).toBe(5);
49
+ expect(res).not.toBe(m);
50
+ });
51
+ });
52
+ describe('mapToArray()', () => {
53
+ it('maps Map to array', () => {
54
+ const m = new Map([['k', 2]]);
55
+ expect(mapToArray(m, (v) => v * 3)).toEqual([6]);
56
+ });
57
+ it('maps object to array', () => {
58
+ expect(mapToArray({ a: 1, b: 2 }, (v) => v * 2)).toEqual([2, 4]);
59
+ });
60
+ it('maps array to array', () => {
61
+ expect(mapToArray([1, 2], (v) => v + 10)).toEqual([11, 12]);
62
+ });
63
+ });
64
+ describe('getEmptySimplifiedCollection()', () => {
65
+ it('creates empty array for array source', () => {
66
+ const [ok, collection, add] = getEmptySimplifiedCollection([5]);
67
+ expect(ok).toBe(true);
68
+ add(1, 0);
69
+ add(2, 1);
70
+ expect(collection).toEqual([1, 2]);
71
+ });
72
+ it('creates empty Map for Map source', () => {
73
+ const [ok, collection, add] = getEmptySimplifiedCollection(new Map());
74
+ expect(ok).toBe(true);
75
+ add('v', 'k');
76
+ expect(collection instanceof Map).toBe(true);
77
+ expect(collection.get('k')).toBe('v');
78
+ });
79
+ it('creates empty object for plain object source', () => {
80
+ const [ok, collection, add] = getEmptySimplifiedCollection({});
81
+ expect(ok).toBe(true);
82
+ add('val', 'key');
83
+ expect(collection).toEqual({ key: 'val' });
84
+ });
85
+ it('creates empty object for custom iterable (plain)', () => {
86
+ const iterable = {
87
+ *[Symbol.iterator]() {
88
+ yield 1;
89
+ },
90
+ };
91
+ const [ok, collection, add] = getEmptySimplifiedCollection(iterable);
92
+ expect(ok).toBe(true);
93
+ expect(Array.isArray(collection)).toBe(false);
94
+ add(2, '0');
95
+ expect(collection).toEqual({ 0: 2 });
96
+ });
97
+ it('creates empty array for custom iterable (class)', () => {
98
+ class CustomIterable {
99
+ *[Symbol.iterator]() {
100
+ yield 1;
101
+ }
102
+ }
103
+ const iterable = new CustomIterable();
104
+ const [ok, collection, add] = getEmptySimplifiedCollection(iterable);
105
+ expect(ok).toBe(true);
106
+ expect(Array.isArray(collection)).toBe(true);
107
+ add(2, 0);
108
+ expect(collection).toEqual([2]);
109
+ });
110
+ it('creates empty object for function source', () => {
111
+ const fn = () => { };
112
+ const [ok, collection, add] = getEmptySimplifiedCollection(fn);
113
+ expect(ok).toBe(true);
114
+ add('v', 'k');
115
+ expect(collection).toEqual({ k: 'v' });
116
+ });
117
+ it('returns false for null', () => {
118
+ const [ok] = getEmptySimplifiedCollection(null);
119
+ expect(ok).toBe(false);
120
+ });
121
+ it('returns false for undefined', () => {
122
+ const [ok] = getEmptySimplifiedCollection(undefined);
123
+ expect(ok).toBe(false);
124
+ });
125
+ });
126
+ describe('Collections - Validation', () => {
127
+ it('filter() handles null callback (filters truthy)', () => {
128
+ const arr = [1, 2];
129
+ // @ts-ignore
130
+ expect(filter(arr, null)).toStrictEqual(arr);
131
+ expect(filter([0, 1, false, 2], null)).toStrictEqual([1, 2]);
132
+ });
133
+ it('map() handles invalid callback', () => {
134
+ const arr = [1, 2];
135
+ // @ts-ignore
136
+ expect(() => map(arr, 'not a function')).toThrow(TypeError);
137
+ });
138
+ it('mapToArray() handles invalid callback', () => {
139
+ const arr = [1, 2];
140
+ // @ts-ignore
141
+ expect(() => mapToArray(arr, 123)).toThrow(TypeError);
142
+ });
143
+ it('sortKeys() handles invalid comparator', () => {
144
+ const obj = { a: 1 };
145
+ // @ts-ignore
146
+ expect(() => sortKeys(obj, null)).toThrow(TypeError);
147
+ });
148
+ });
149
+ //# sourceMappingURL=LeUtils.collections.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeUtils.collections.test.js","sourceRoot":"","sources":["../../tests/LeUtils.collections.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LeUtils.comparison.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeUtils.comparison.test.d.ts","sourceRoot":"","sources":["../../tests/LeUtils.comparison.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,125 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { compare, compareNumbers, compareNumericStrings, compareNaturalStrings, isEmptyObject, getObjectFieldsCount } from '../src/index';
3
+ /**
4
+ * Comparison functions - for sorting
5
+ */
6
+ describe('compare()', () => {
7
+ it('returns -1 when a < b', () => {
8
+ expect(compare(1, 2)).toBe(-1);
9
+ expect(compare('a', 'b')).toBe(-1);
10
+ });
11
+ it('returns 1 when a > b', () => {
12
+ expect(compare(2, 1)).toBe(1);
13
+ expect(compare('b', 'a')).toBe(1);
14
+ });
15
+ it('returns 0 when a === b', () => {
16
+ expect(compare(5, 5)).toBe(0);
17
+ expect(compare('hello', 'hello')).toBe(0);
18
+ });
19
+ it('handles null', () => {
20
+ expect(compare(null, null)).toBe(0);
21
+ expect(compare(null, 1)).toBe(-1);
22
+ expect(compare(1, null)).toBe(1);
23
+ });
24
+ it('handles undefined', () => {
25
+ expect(compare(undefined, undefined)).toBe(0);
26
+ });
27
+ });
28
+ describe('compareNumbers()', () => {
29
+ it('returns negative when a < b', () => {
30
+ expect(compareNumbers(1, 2)).toBeLessThan(0);
31
+ });
32
+ it('returns positive when a > b', () => {
33
+ expect(compareNumbers(2, 1)).toBeGreaterThan(0);
34
+ });
35
+ it('returns 0 when equal', () => {
36
+ expect(compareNumbers(5, 5)).toBe(0);
37
+ });
38
+ it('handles negatives', () => {
39
+ expect(compareNumbers(-5, -3)).toBeLessThan(0);
40
+ });
41
+ it('handles zero', () => {
42
+ expect(compareNumbers(0, 0)).toBe(0);
43
+ expect(compareNumbers(-1, 0)).toBeLessThan(0);
44
+ });
45
+ it('handles Infinity', () => {
46
+ expect(compareNumbers(Infinity, 100)).toBeGreaterThan(0);
47
+ expect(compareNumbers(-Infinity, 100)).toBeLessThan(0);
48
+ });
49
+ it('handles NaN returns NaN', () => {
50
+ const result = compareNumbers(NaN, 5);
51
+ expect(Number.isNaN(result)).toBe(true);
52
+ });
53
+ });
54
+ describe('compareNumericStrings()', () => {
55
+ it('compares "1.0.0" vs "1.0.1"', () => {
56
+ expect(compareNumericStrings('1.0.0', '1.0.1')).toBeLessThan(0);
57
+ });
58
+ it('compares "1.10" vs "1.2"', () => {
59
+ expect(compareNumericStrings('1.10', '1.2')).toBeGreaterThan(0);
60
+ });
61
+ it('handles equal strings', () => {
62
+ expect(compareNumericStrings('1.2.3', '1.2.3')).toBe(0);
63
+ });
64
+ it('compares by length first (within each part)', () => {
65
+ expect(compareNumericStrings('1.10', '1.9')).toBeGreaterThan(0);
66
+ });
67
+ it('handles different number of parts', () => {
68
+ expect(compareNumericStrings('1.0', '1.0.1')).toBeLessThan(0);
69
+ });
70
+ it('handles whitespace in parts', () => {
71
+ expect(compareNumericStrings('1. 5', '1.5')).toBe(0);
72
+ });
73
+ });
74
+ describe('compareNaturalStrings()', () => {
75
+ it('sorts "file5.txt" before "file10.txt"', () => {
76
+ expect(compareNaturalStrings('file5.txt', 'file10.txt')).toBeLessThan(0);
77
+ });
78
+ it('sorts "file/5/test" before "file/10/test"', () => {
79
+ expect(compareNaturalStrings('file/5/test.txt', 'file/10/test.txt')).toBeLessThan(0);
80
+ });
81
+ it('handles no numbers', () => {
82
+ expect(compareNaturalStrings('abc', 'def')).toBeLessThan(0);
83
+ });
84
+ it('handles equal strings', () => {
85
+ expect(compareNaturalStrings('test', 'test')).toBe(0);
86
+ });
87
+ it('handles numbers vs letters', () => {
88
+ expect(compareNaturalStrings('5', 'a')).toBeLessThan(0);
89
+ });
90
+ it('handles empty strings', () => {
91
+ expect(compareNaturalStrings('', '')).toBe(0);
92
+ expect(compareNaturalStrings('', 'a')).toBeLessThan(0);
93
+ });
94
+ it('handles special characters', () => {
95
+ expect(compareNaturalStrings('a', '_')).toBeGreaterThan(0);
96
+ });
97
+ });
98
+ describe('compareNumericStrings() - Edge Cases', () => {
99
+ it('handles various numeric strings', () => {
100
+ expect(compareNumericStrings('1.2.3', '1.2.4')).toBeLessThan(0);
101
+ expect(compareNumericStrings('1.10', '1.2')).toBeGreaterThan(0);
102
+ expect(compareNumericStrings(' 1.1 ', '1.1')).toBe(0);
103
+ });
104
+ it('handles different number of parts', () => {
105
+ expect(compareNumericStrings('1.2', '1.2.0')).toBeLessThan(0);
106
+ });
107
+ });
108
+ describe('isEmptyObject() / getObjectFieldsCount() - Edge Cases', () => {
109
+ it('handles objects with inherited properties', () => {
110
+ const proto = { a: 1 };
111
+ const obj = Object.create(proto);
112
+ expect(isEmptyObject(obj)).toBe(true);
113
+ expect(getObjectFieldsCount(obj)).toBe(0);
114
+ obj.b = 2;
115
+ expect(isEmptyObject(obj)).toBe(false);
116
+ expect(getObjectFieldsCount(obj)).toBe(1);
117
+ });
118
+ it('handles null/undefined gracefully', () => {
119
+ // Current implementation might crash or return true/0
120
+ // Let's see what happens - actually it just returns true/0
121
+ expect(isEmptyObject(null)).toBe(true);
122
+ expect(getObjectFieldsCount(undefined)).toBe(0);
123
+ });
124
+ });
125
+ //# sourceMappingURL=LeUtils.comparison.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeUtils.comparison.test.js","sourceRoot":"","sources":["../../tests/LeUtils.comparison.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LeUtils.contains.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeUtils.contains.test.d.ts","sourceRoot":"","sources":["../../tests/LeUtils.contains.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { contains, find, findIndex, findIndexValue } from '../src/index';
3
+ /**
4
+ * Search/contains functions
5
+ */
6
+ describe('contains()', () => {
7
+ it('finds value in array', () => {
8
+ expect(contains([1, 2, 3], 2)).toBe(true);
9
+ });
10
+ it('returns false if not found', () => {
11
+ expect(contains([1, 2, 3], 5)).toBe(false);
12
+ });
13
+ it('finds value in object', () => {
14
+ expect(contains({ a: 1, b: 2 }, 2)).toBe(true);
15
+ });
16
+ it('compares by string casting', () => {
17
+ expect(contains([1, 2, 3], '2')).toBe(true); // '2' === '2'
18
+ });
19
+ it('handles null collection', () => {
20
+ expect(contains(null, 1)).toBe(false);
21
+ });
22
+ });
23
+ describe('findIndex()', () => {
24
+ it('finds index in array', () => {
25
+ expect(findIndex([10, 20, 30], (v) => v === 20)).toBe(1);
26
+ });
27
+ it('returns null if not found', () => {
28
+ expect(findIndex([1, 2, 3], (v) => v === 99)).toBe(null);
29
+ });
30
+ it('finds key in object', () => {
31
+ const result = findIndex({ a: 1, b: 2 }, (v) => v === 2);
32
+ expect(result).toBe('b');
33
+ });
34
+ });
35
+ describe('find()', () => {
36
+ it('finds value in array', () => {
37
+ expect(find([10, 20, 30], (v) => v === 20)).toBe(20);
38
+ });
39
+ it('returns null if not found', () => {
40
+ expect(find([1, 2, 3], (v) => v === 99)).toBe(null);
41
+ });
42
+ });
43
+ describe('findIndexValue()', () => {
44
+ it('returns index and value', () => {
45
+ const result = findIndexValue([10, 20, 30], (v) => v === 20);
46
+ expect(result).toEqual({ index: 1, value: 20 });
47
+ });
48
+ it('returns null if not found', () => {
49
+ expect(findIndexValue([1, 2, 3], (v) => v === 99)).toBe(null);
50
+ });
51
+ });
52
+ //# sourceMappingURL=LeUtils.contains.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeUtils.contains.test.js","sourceRoot":"","sources":["../../tests/LeUtils.contains.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LeUtils.each.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeUtils.each.test.d.ts","sourceRoot":"","sources":["../../tests/LeUtils.each.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,267 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { each, supportsEach, eachIterator } from '../src/index';
3
+ /**
4
+ * each() family - Baseline Tests from old each.test.js + comprehensive additions
5
+ */
6
+ describe('each() - Arrays', () => {
7
+ it('iterates array in order', () => {
8
+ const out = [];
9
+ each([1, 2, 3], (v) => {
10
+ out.push(v);
11
+ });
12
+ expect(out).toEqual([1, 2, 3]);
13
+ });
14
+ it('provides value and index', () => {
15
+ const results = [];
16
+ each([10, 20], (v, i) => {
17
+ results.push([v, i]);
18
+ });
19
+ expect(results).toEqual([[10, 0], [20, 1]]);
20
+ });
21
+ it('breaks on return false', () => {
22
+ const out = [];
23
+ each([1, 2, 3], (v) => {
24
+ out.push(v);
25
+ if (v === 2) {
26
+ return false;
27
+ }
28
+ });
29
+ expect(out).toEqual([1, 2]);
30
+ });
31
+ it('returns elements unchanged', () => {
32
+ const arr = [1, 2, 3];
33
+ const result = each(arr, () => { });
34
+ expect(result).toBe(arr);
35
+ });
36
+ });
37
+ describe('each() - Objects', () => {
38
+ it('iterates object properties', () => {
39
+ const out = [];
40
+ each({ a: 1, b: 2 }, (v, k) => {
41
+ out.push([k, v]);
42
+ });
43
+ expect(out).toContainEqual(['a', 1]);
44
+ expect(out).toContainEqual(['b', 2]);
45
+ });
46
+ it('skips prototype properties', () => {
47
+ const proto = { z: 9 };
48
+ const o = Object.create(proto);
49
+ o.a = 1;
50
+ o.b = 2;
51
+ const seen = [];
52
+ each(o, (v) => {
53
+ seen.push(v);
54
+ });
55
+ expect(seen).toEqual([1, 2]); // z not included
56
+ });
57
+ });
58
+ describe('each() - Maps', () => {
59
+ it('iterates Map entries', () => {
60
+ const m = new Map([['a', 1], ['b', 2]]);
61
+ const seen = [];
62
+ each(m, (v, k) => {
63
+ seen.push([k, v]);
64
+ });
65
+ expect(seen).toEqual([['a', 1], ['b', 2]]);
66
+ });
67
+ it('handles empty Map', () => {
68
+ let called = false;
69
+ each(new Map(), () => {
70
+ called = true;
71
+ });
72
+ expect(called).toBe(false);
73
+ });
74
+ });
75
+ describe('each() - Sets', () => {
76
+ it('iterates Set values', () => {
77
+ const s = new Set([10, 20]);
78
+ const seen = [];
79
+ each(s, (v, k) => {
80
+ seen.push([k, v]);
81
+ });
82
+ expect(seen).toEqual([[10, 10], [20, 20]]); // key === value for Sets
83
+ });
84
+ });
85
+ describe('each() - TypedArrays', () => {
86
+ it('iterates TypedArray', () => {
87
+ const ta = new Uint16Array([9, 8]);
88
+ const out = [];
89
+ each(ta, (v, i) => {
90
+ out.push([i, v]);
91
+ });
92
+ expect(out).toEqual([[0, 9], [1, 8]]);
93
+ });
94
+ });
95
+ describe('each() - Custom Iterables', () => {
96
+ it('iterates object with forEach method (plain object)', () => {
97
+ const obj = {
98
+ forEach: (cb) => {
99
+ [1, 2].forEach(cb);
100
+ },
101
+ };
102
+ const seen = [];
103
+ each(obj, (_v, k) => {
104
+ seen.push(k);
105
+ });
106
+ // Iterates object keys, not forEach result
107
+ expect(seen).toEqual(['forEach']);
108
+ });
109
+ it('iterates custom class with forEach method', () => {
110
+ class ForEachObject {
111
+ forEach(cb) {
112
+ [1, 2].forEach(cb);
113
+ }
114
+ }
115
+ const obj = new ForEachObject();
116
+ const seen = [];
117
+ each(obj, (v) => {
118
+ seen.push(v);
119
+ });
120
+ expect(seen).toEqual([1, 2]);
121
+ });
122
+ it('breaks in custom forEach', () => {
123
+ class ForEachObject {
124
+ forEach(cb) {
125
+ [1, 2].forEach(cb);
126
+ }
127
+ }
128
+ const obj = new ForEachObject();
129
+ const seen = [];
130
+ each(obj, (v) => {
131
+ seen.push(v);
132
+ if (v === 1) {
133
+ return false;
134
+ }
135
+ });
136
+ expect(seen).toEqual([1]);
137
+ });
138
+ });
139
+ describe('each() - Null/Undefined', () => {
140
+ it('handles null silently', () => {
141
+ let called = false;
142
+ each(null, () => {
143
+ called = true;
144
+ });
145
+ expect(called).toBe(false);
146
+ });
147
+ it('handles undefined silently', () => {
148
+ let called = false;
149
+ each(undefined, () => {
150
+ called = true;
151
+ });
152
+ expect(called).toBe(false);
153
+ });
154
+ });
155
+ describe('each() - Callback Edge Cases', () => {
156
+ it('logs expected error when callback throws', () => {
157
+ const thrower = () => {
158
+ throw new Error('callback error');
159
+ };
160
+ // ⏳ Expected: callback error
161
+ expect(() => each([1, 2], thrower)).toThrow('callback error');
162
+ });
163
+ it('handles callback not returning false explicitly', () => {
164
+ const out = [];
165
+ each([1, 2, 3], (v) => {
166
+ out.push(v);
167
+ return undefined; // Doesn't break
168
+ });
169
+ expect(out).toEqual([1, 2, 3]);
170
+ });
171
+ });
172
+ describe('supportsEach()', () => {
173
+ it('returns true for arrays', () => {
174
+ expect(supportsEach([1])).toBe(true);
175
+ });
176
+ it('returns true for Maps', () => {
177
+ expect(supportsEach(new Map())).toBe(true);
178
+ });
179
+ it('returns true for Sets', () => {
180
+ expect(supportsEach(new Set())).toBe(true);
181
+ });
182
+ it('returns true for objects', () => {
183
+ expect(supportsEach({})).toBe(true);
184
+ });
185
+ it('returns false for null', () => {
186
+ expect(supportsEach(null)).toBe(false);
187
+ });
188
+ it('returns false for undefined', () => {
189
+ expect(supportsEach(undefined)).toBe(false);
190
+ });
191
+ it('returns false for strings', () => {
192
+ expect(supportsEach('xyz')).toBe(false);
193
+ });
194
+ it('returns false for numbers', () => {
195
+ expect(supportsEach(5)).toBe(false);
196
+ expect(supportsEach(5.55)).toBe(false);
197
+ });
198
+ it('returns false for booleans', () => {
199
+ expect(supportsEach(true)).toBe(false);
200
+ });
201
+ it('returns true for object with forEach', () => {
202
+ const obj = {
203
+ forEach: () => { },
204
+ };
205
+ expect(supportsEach(obj)).toBe(true);
206
+ });
207
+ it('returns true for functions', () => {
208
+ const fn = () => { };
209
+ expect(supportsEach(fn)).toBe(true);
210
+ });
211
+ it('returns true for TypedArrays', () => {
212
+ expect(supportsEach(new Int8Array(2))).toBe(true);
213
+ });
214
+ });
215
+ describe('eachIterator()', () => {
216
+ it('yields [value, key] for Map in order', () => {
217
+ const m = new Map([['a', 1], ['b', 2]]);
218
+ const out = [...eachIterator(m)];
219
+ expect(out).toEqual([[1, 'a'], [2, 'b']]);
220
+ });
221
+ it('yields [value, index] for arrays', () => {
222
+ const out = [...eachIterator([10, 20])];
223
+ expect(out).toEqual([[10, 0], [20, 1]]);
224
+ });
225
+ it('yields nothing for null', () => {
226
+ const out = [...eachIterator(null)];
227
+ expect(out).toEqual([]);
228
+ });
229
+ it('yields nothing for undefined', () => {
230
+ const out = [...eachIterator(undefined)];
231
+ expect(out).toEqual([]);
232
+ });
233
+ it('handles iterable with custom iterator', () => {
234
+ const customIterable = {
235
+ *[Symbol.iterator]() {
236
+ yield 1;
237
+ yield 2;
238
+ },
239
+ };
240
+ const out = [...eachIterator(customIterable)];
241
+ expect(out).toEqual([]);
242
+ });
243
+ it('handles object with forEach', () => {
244
+ const objWithForEach = {
245
+ forEach: (cb) => {
246
+ cb('a', 'x');
247
+ cb('b', 'y');
248
+ },
249
+ };
250
+ const out = [...eachIterator(objWithForEach)];
251
+ expect(out).toEqual([[objWithForEach.forEach, 'forEach']]);
252
+ });
253
+ });
254
+ describe('each() - Validation', () => {
255
+ it('does not crash if callback is not a function', () => {
256
+ const arr = [1, 2];
257
+ // @ts-ignore
258
+ expect(() => each(arr, null)).toThrow(TypeError);
259
+ // @ts-ignore
260
+ expect(() => each(arr, undefined)).toThrow(TypeError);
261
+ // @ts-ignore
262
+ expect(() => each(arr, 'not a function')).toThrow(TypeError);
263
+ // @ts-ignore
264
+ expect(() => each(arr, 123)).toThrow(TypeError);
265
+ });
266
+ });
267
+ //# sourceMappingURL=LeUtils.each.test.js.map