typetify 2.1.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/CHANGELOG.md +131 -0
  2. package/README.md +108 -0
  3. package/dist/async/index.js +1 -49
  4. package/dist/async/index.mjs +1 -4
  5. package/dist/chunk-272Z3AXV.js +1 -0
  6. package/dist/chunk-2YRFWQ6M.mjs +1 -0
  7. package/dist/chunk-35CB7HNN.js +1 -0
  8. package/dist/chunk-4JG7CFRK.js +1 -0
  9. package/dist/chunk-5FBZYPQM.mjs +1 -0
  10. package/dist/chunk-5XQRYI2Q.mjs +1 -0
  11. package/dist/chunk-6HA2SN23.js +1 -0
  12. package/dist/chunk-6NWIIOHH.js +1 -0
  13. package/dist/chunk-6WGRWYAD.js +1 -0
  14. package/dist/chunk-7LBL6CYT.js +1 -0
  15. package/dist/chunk-7UMXGQE4.mjs +1 -0
  16. package/dist/chunk-7XHBEA63.js +1 -0
  17. package/dist/chunk-B3R73UK5.mjs +1 -0
  18. package/dist/chunk-BLUG7TSP.js +1 -0
  19. package/dist/chunk-EAHFED6V.mjs +1 -0
  20. package/dist/chunk-EKSHS4DL.mjs +1 -0
  21. package/dist/chunk-F76ECQKE.js +1 -0
  22. package/dist/chunk-FHCBXSNA.js +1 -0
  23. package/dist/chunk-GKOA3XGQ.js +1 -0
  24. package/dist/chunk-GQIJLGEZ.mjs +1 -0
  25. package/dist/chunk-I4YSQ4HB.js +1 -0
  26. package/dist/chunk-JZXLCA2E.mjs +1 -0
  27. package/dist/chunk-M5OMYDI7.mjs +1 -0
  28. package/dist/chunk-MB77QAOC.mjs +1 -0
  29. package/dist/chunk-MPY3WRLG.mjs +1 -0
  30. package/dist/chunk-NENRAPOL.mjs +1 -0
  31. package/dist/chunk-NOW4Q26G.mjs +1 -0
  32. package/dist/chunk-P4UNM7SF.js +1 -0
  33. package/dist/chunk-P5E2JDCX.mjs +1 -0
  34. package/dist/chunk-Q7SUL7MD.js +1 -0
  35. package/dist/chunk-QKNZICUO.mjs +1 -0
  36. package/dist/chunk-RHMANSTA.mjs +1 -0
  37. package/dist/chunk-SF64HETW.js +1 -0
  38. package/dist/chunk-T66YO63J.js +1 -0
  39. package/dist/chunk-TNK6EVQK.mjs +1 -0
  40. package/dist/chunk-TSJFKV3R.js +1 -0
  41. package/dist/chunk-TVCWWECJ.mjs +1 -0
  42. package/dist/chunk-U7MK5AR5.mjs +1 -0
  43. package/dist/chunk-W5I352FJ.js +1 -0
  44. package/dist/chunk-WAT4QJB2.js +1 -0
  45. package/dist/chunk-WCG5ODRX.mjs +1 -0
  46. package/dist/chunk-WDFIRO2J.js +1 -0
  47. package/dist/chunk-WOT6VMZA.js +1 -0
  48. package/dist/chunk-WS743BFA.js +1 -0
  49. package/dist/chunk-WWU7P2L2.mjs +1 -0
  50. package/dist/chunk-XPY5CWKZ.mjs +1 -0
  51. package/dist/collection/index.d.mts +125 -1
  52. package/dist/collection/index.d.ts +125 -1
  53. package/dist/collection/index.js +1 -125
  54. package/dist/collection/index.mjs +1 -4
  55. package/dist/color/index.d.mts +274 -0
  56. package/dist/color/index.d.ts +274 -0
  57. package/dist/color/index.js +1 -0
  58. package/dist/color/index.mjs +1 -0
  59. package/dist/core/index.js +1 -41
  60. package/dist/core/index.mjs +1 -4
  61. package/dist/decorator/index.js +1 -57
  62. package/dist/decorator/index.mjs +1 -4
  63. package/dist/dom/index.d.mts +353 -0
  64. package/dist/dom/index.d.ts +353 -0
  65. package/dist/dom/index.js +1 -0
  66. package/dist/dom/index.mjs +1 -0
  67. package/dist/dx/index.js +1 -53
  68. package/dist/dx/index.mjs +1 -4
  69. package/dist/flow/index.js +1 -50
  70. package/dist/flow/index.mjs +1 -5
  71. package/dist/fn/index.js +1 -37
  72. package/dist/fn/index.mjs +1 -4
  73. package/dist/guards/index.js +1 -233
  74. package/dist/guards/index.mjs +1 -4
  75. package/dist/index.d.mts +482 -410
  76. package/dist/index.d.ts +482 -410
  77. package/dist/index.js +3 -2507
  78. package/dist/index.mjs +3 -1546
  79. package/dist/input/index.js +1 -74
  80. package/dist/input/index.mjs +1 -5
  81. package/dist/iterator/index.js +1 -85
  82. package/dist/iterator/index.mjs +1 -4
  83. package/dist/logic/index.js +1 -201
  84. package/dist/logic/index.mjs +1 -4
  85. package/dist/math/index.js +1 -45
  86. package/dist/math/index.mjs +1 -4
  87. package/dist/narrowing/index.js +1 -141
  88. package/dist/narrowing/index.mjs +1 -4
  89. package/dist/object/index.d.mts +137 -1
  90. package/dist/object/index.d.ts +137 -1
  91. package/dist/object/index.js +1 -113
  92. package/dist/object/index.mjs +1 -4
  93. package/dist/result/index.js +1 -86
  94. package/dist/result/index.mjs +1 -5
  95. package/dist/schema/index.js +1 -110
  96. package/dist/schema/index.mjs +1 -5
  97. package/dist/storage/index.d.mts +197 -0
  98. package/dist/storage/index.d.ts +197 -0
  99. package/dist/storage/index.js +1 -0
  100. package/dist/storage/index.mjs +1 -0
  101. package/dist/string/index.d.mts +201 -1
  102. package/dist/string/index.d.ts +201 -1
  103. package/dist/string/index.js +1 -49
  104. package/dist/string/index.mjs +1 -4
  105. package/dist/typed/index.js +1 -193
  106. package/dist/typed/index.mjs +1 -4
  107. package/package.json +23 -3
  108. package/dist/async/index.js.map +0 -1
  109. package/dist/async/index.mjs.map +0 -1
  110. package/dist/chunk-2LJ6NZ6K.js +0 -108
  111. package/dist/chunk-2LJ6NZ6K.js.map +0 -1
  112. package/dist/chunk-4NXETABV.mjs +0 -116
  113. package/dist/chunk-4NXETABV.mjs.map +0 -1
  114. package/dist/chunk-6ZBTL74K.js +0 -129
  115. package/dist/chunk-6ZBTL74K.js.map +0 -1
  116. package/dist/chunk-7G4ZSMQX.js +0 -470
  117. package/dist/chunk-7G4ZSMQX.js.map +0 -1
  118. package/dist/chunk-CN3GYRJN.mjs +0 -137
  119. package/dist/chunk-CN3GYRJN.mjs.map +0 -1
  120. package/dist/chunk-CNTE6ZVH.js +0 -359
  121. package/dist/chunk-CNTE6ZVH.js.map +0 -1
  122. package/dist/chunk-CWHYQWNU.mjs +0 -224
  123. package/dist/chunk-CWHYQWNU.mjs.map +0 -1
  124. package/dist/chunk-DBENOSTA.js +0 -156
  125. package/dist/chunk-DBENOSTA.js.map +0 -1
  126. package/dist/chunk-DWIG5GF2.js +0 -135
  127. package/dist/chunk-DWIG5GF2.js.map +0 -1
  128. package/dist/chunk-EAUTTWTQ.mjs +0 -231
  129. package/dist/chunk-EAUTTWTQ.mjs.map +0 -1
  130. package/dist/chunk-FEX5C4OH.mjs +0 -1007
  131. package/dist/chunk-FEX5C4OH.mjs.map +0 -1
  132. package/dist/chunk-FN553YPU.js +0 -441
  133. package/dist/chunk-FN553YPU.js.map +0 -1
  134. package/dist/chunk-FT2EK4AM.mjs +0 -420
  135. package/dist/chunk-FT2EK4AM.mjs.map +0 -1
  136. package/dist/chunk-FXWYPHA3.mjs +0 -13
  137. package/dist/chunk-FXWYPHA3.mjs.map +0 -1
  138. package/dist/chunk-GS3PP67B.js +0 -200
  139. package/dist/chunk-GS3PP67B.js.map +0 -1
  140. package/dist/chunk-IGA3VEZM.mjs +0 -503
  141. package/dist/chunk-IGA3VEZM.mjs.map +0 -1
  142. package/dist/chunk-J5LGTIGS.mjs +0 -9
  143. package/dist/chunk-J5LGTIGS.mjs.map +0 -1
  144. package/dist/chunk-JB6UXRKD.mjs +0 -97
  145. package/dist/chunk-JB6UXRKD.mjs.map +0 -1
  146. package/dist/chunk-JQAQV75V.js +0 -561
  147. package/dist/chunk-JQAQV75V.js.map +0 -1
  148. package/dist/chunk-JQHUBZ4M.js +0 -88
  149. package/dist/chunk-JQHUBZ4M.js.map +0 -1
  150. package/dist/chunk-LT7JK7RJ.js +0 -87
  151. package/dist/chunk-LT7JK7RJ.js.map +0 -1
  152. package/dist/chunk-N6IUADIP.mjs +0 -414
  153. package/dist/chunk-N6IUADIP.mjs.map +0 -1
  154. package/dist/chunk-OEJK37LO.mjs +0 -328
  155. package/dist/chunk-OEJK37LO.mjs.map +0 -1
  156. package/dist/chunk-OKB3MS5F.js +0 -547
  157. package/dist/chunk-OKB3MS5F.js.map +0 -1
  158. package/dist/chunk-OPVES6W2.js +0 -16
  159. package/dist/chunk-OPVES6W2.js.map +0 -1
  160. package/dist/chunk-OWNUKWXV.js +0 -291
  161. package/dist/chunk-OWNUKWXV.js.map +0 -1
  162. package/dist/chunk-POD52NJ3.mjs +0 -526
  163. package/dist/chunk-POD52NJ3.mjs.map +0 -1
  164. package/dist/chunk-PQTXSQ4P.js +0 -369
  165. package/dist/chunk-PQTXSQ4P.js.map +0 -1
  166. package/dist/chunk-PZ5AY32C.js +0 -11
  167. package/dist/chunk-PZ5AY32C.js.map +0 -1
  168. package/dist/chunk-QFR7DVAJ.mjs +0 -63
  169. package/dist/chunk-QFR7DVAJ.mjs.map +0 -1
  170. package/dist/chunk-S535LAXW.js +0 -1054
  171. package/dist/chunk-S535LAXW.js.map +0 -1
  172. package/dist/chunk-SGQNLTRK.js +0 -73
  173. package/dist/chunk-SGQNLTRK.js.map +0 -1
  174. package/dist/chunk-SRDWUHDY.mjs +0 -188
  175. package/dist/chunk-SRDWUHDY.mjs.map +0 -1
  176. package/dist/chunk-TXU7NTT4.js +0 -249
  177. package/dist/chunk-TXU7NTT4.js.map +0 -1
  178. package/dist/chunk-TZEWREAC.mjs +0 -277
  179. package/dist/chunk-TZEWREAC.mjs.map +0 -1
  180. package/dist/chunk-V6CWFDIJ.mjs +0 -123
  181. package/dist/chunk-V6CWFDIJ.mjs.map +0 -1
  182. package/dist/chunk-X55EORNF.js +0 -259
  183. package/dist/chunk-X55EORNF.js.map +0 -1
  184. package/dist/chunk-YBJC5WMX.mjs +0 -341
  185. package/dist/chunk-YBJC5WMX.mjs.map +0 -1
  186. package/dist/chunk-YOPAXITF.mjs +0 -75
  187. package/dist/chunk-YOPAXITF.mjs.map +0 -1
  188. package/dist/chunk-ZE4FDBRI.mjs +0 -79
  189. package/dist/chunk-ZE4FDBRI.mjs.map +0 -1
  190. package/dist/collection/index.js.map +0 -1
  191. package/dist/collection/index.mjs.map +0 -1
  192. package/dist/core/index.js.map +0 -1
  193. package/dist/core/index.mjs.map +0 -1
  194. package/dist/decorator/index.js.map +0 -1
  195. package/dist/decorator/index.mjs.map +0 -1
  196. package/dist/dx/index.js.map +0 -1
  197. package/dist/dx/index.mjs.map +0 -1
  198. package/dist/flow/index.js.map +0 -1
  199. package/dist/flow/index.mjs.map +0 -1
  200. package/dist/fn/index.js.map +0 -1
  201. package/dist/fn/index.mjs.map +0 -1
  202. package/dist/guards/index.js.map +0 -1
  203. package/dist/guards/index.mjs.map +0 -1
  204. package/dist/index.js.map +0 -1
  205. package/dist/index.mjs.map +0 -1
  206. package/dist/input/index.js.map +0 -1
  207. package/dist/input/index.mjs.map +0 -1
  208. package/dist/iterator/index.js.map +0 -1
  209. package/dist/iterator/index.mjs.map +0 -1
  210. package/dist/logic/index.js.map +0 -1
  211. package/dist/logic/index.mjs.map +0 -1
  212. package/dist/math/index.js.map +0 -1
  213. package/dist/math/index.mjs.map +0 -1
  214. package/dist/narrowing/index.js.map +0 -1
  215. package/dist/narrowing/index.mjs.map +0 -1
  216. package/dist/object/index.js.map +0 -1
  217. package/dist/object/index.mjs.map +0 -1
  218. package/dist/result/index.js.map +0 -1
  219. package/dist/result/index.mjs.map +0 -1
  220. package/dist/schema/index.js.map +0 -1
  221. package/dist/schema/index.mjs.map +0 -1
  222. package/dist/string/index.js.map +0 -1
  223. package/dist/string/index.mjs.map +0 -1
  224. package/dist/typed/index.js.map +0 -1
  225. package/dist/typed/index.mjs.map +0 -1
@@ -1,328 +0,0 @@
1
- import { __export } from './chunk-J5LGTIGS.mjs';
2
-
3
- // src/collection/index.ts
4
- var collection_exports = {};
5
- __export(collection_exports, {
6
- chunk: () => chunk,
7
- compact: () => compact,
8
- countBy: () => countBy,
9
- difference: () => difference,
10
- drop: () => drop,
11
- dropWhile: () => dropWhile,
12
- findLast: () => findLast,
13
- first: () => first,
14
- flatten: () => flatten,
15
- groupBy: () => groupBy,
16
- head: () => head,
17
- indexBy: () => indexBy,
18
- init: () => init,
19
- intersection: () => intersection,
20
- last: () => last,
21
- maxBy: () => maxBy,
22
- minBy: () => minBy,
23
- partition: () => partition,
24
- range: () => range,
25
- sample: () => sample,
26
- shuffle: () => shuffle,
27
- sortBy: () => sortBy,
28
- sumBy: () => sumBy,
29
- tail: () => tail,
30
- take: () => take,
31
- takeWhile: () => takeWhile,
32
- unique: () => unique,
33
- unzip: () => unzip,
34
- zip: () => zip
35
- });
36
-
37
- // src/collection/unique.ts
38
- function unique(array, keyFn) {
39
- if (!keyFn) {
40
- return [...new Set(array)];
41
- }
42
- const seen = /* @__PURE__ */ new Set();
43
- const result = [];
44
- for (const item of array) {
45
- const key = keyFn(item);
46
- if (!seen.has(key)) {
47
- seen.add(key);
48
- result.push(item);
49
- }
50
- }
51
- return result;
52
- }
53
-
54
- // src/collection/groupBy.ts
55
- function groupBy(array, keyFn) {
56
- const result = {};
57
- for (const item of array) {
58
- const key = keyFn(item);
59
- if (!(key in result)) {
60
- result[key] = [];
61
- }
62
- result[key].push(item);
63
- }
64
- return result;
65
- }
66
-
67
- // src/collection/indexBy.ts
68
- function indexBy(array, keyFn) {
69
- const result = {};
70
- for (const item of array) {
71
- const key = keyFn(item);
72
- result[key] = item;
73
- }
74
- return result;
75
- }
76
-
77
- // src/collection/partition.ts
78
- function partition(array, predicate) {
79
- const pass = [];
80
- const fail = [];
81
- for (const item of array) {
82
- if (predicate(item)) {
83
- pass.push(item);
84
- } else {
85
- fail.push(item);
86
- }
87
- }
88
- return [pass, fail];
89
- }
90
-
91
- // src/collection/chunk.ts
92
- function chunk(array, size) {
93
- if (size <= 0) {
94
- throw new Error("Chunk size must be greater than 0");
95
- }
96
- const result = [];
97
- for (let i = 0; i < array.length; i += size) {
98
- result.push(array.slice(i, i + size));
99
- }
100
- return result;
101
- }
102
-
103
- // src/collection/compact.ts
104
- function compact(array) {
105
- return array.filter((item) => item !== null && item !== void 0);
106
- }
107
-
108
- // src/collection/flatten.ts
109
- function flatten(array) {
110
- const result = [];
111
- for (const item of array) {
112
- if (Array.isArray(item)) {
113
- result.push(...item);
114
- } else {
115
- result.push(item);
116
- }
117
- }
118
- return result;
119
- }
120
-
121
- // src/collection/sortBy.ts
122
- function sortBy(array, keyFn, order = "asc") {
123
- const sorted = [...array].sort((a, b) => {
124
- const keyA = keyFn(a);
125
- const keyB = keyFn(b);
126
- if (keyA < keyB) return -1;
127
- if (keyA > keyB) return 1;
128
- return 0;
129
- });
130
- return order === "desc" ? sorted.reverse() : sorted;
131
- }
132
-
133
- // src/collection/first.ts
134
- function first(array) {
135
- return array[0];
136
- }
137
-
138
- // src/collection/last.ts
139
- function last(array) {
140
- return array[array.length - 1];
141
- }
142
-
143
- // src/collection/range.ts
144
- function range(start, end, step = 1) {
145
- if (step === 0) {
146
- throw new Error("Step cannot be 0");
147
- }
148
- const result = [];
149
- if (step > 0) {
150
- for (let i = start; i < end; i += step) {
151
- result.push(i);
152
- }
153
- } else {
154
- for (let i = start; i > end; i += step) {
155
- result.push(i);
156
- }
157
- }
158
- return result;
159
- }
160
-
161
- // src/collection/shuffle.ts
162
- function shuffle(array) {
163
- const result = [...array];
164
- for (let i = result.length - 1; i > 0; i--) {
165
- const j = Math.floor(Math.random() * (i + 1));
166
- const temp = result[i];
167
- result[i] = result[j];
168
- result[j] = temp;
169
- }
170
- return result;
171
- }
172
-
173
- // src/collection/sample.ts
174
- function sample(array) {
175
- if (array.length === 0) {
176
- return void 0;
177
- }
178
- const index = Math.floor(Math.random() * array.length);
179
- return array[index];
180
- }
181
-
182
- // src/collection/zip.ts
183
- function zip(a, b) {
184
- const length = Math.min(a.length, b.length);
185
- const result = [];
186
- for (let i = 0; i < length; i++) {
187
- result.push([a[i], b[i]]);
188
- }
189
- return result;
190
- }
191
-
192
- // src/collection/unzip.ts
193
- function unzip(array) {
194
- const a = [];
195
- const b = [];
196
- for (const [first2, second] of array) {
197
- a.push(first2);
198
- b.push(second);
199
- }
200
- return [a, b];
201
- }
202
-
203
- // src/collection/difference.ts
204
- function difference(a, b) {
205
- const setB = new Set(b);
206
- return a.filter((item) => !setB.has(item));
207
- }
208
-
209
- // src/collection/intersection.ts
210
- function intersection(a, b) {
211
- const setB = new Set(b);
212
- return a.filter((item) => setB.has(item));
213
- }
214
-
215
- // src/collection/take.ts
216
- function take(arr, n) {
217
- if (n <= 0) return [];
218
- return arr.slice(0, n);
219
- }
220
-
221
- // src/collection/drop.ts
222
- function drop(arr, n) {
223
- if (n <= 0) return [...arr];
224
- return arr.slice(n);
225
- }
226
-
227
- // src/collection/takeWhile.ts
228
- function takeWhile(arr, predicate) {
229
- const result = [];
230
- for (let i = 0; i < arr.length; i++) {
231
- const item = arr[i];
232
- if (!predicate(item, i)) break;
233
- result.push(item);
234
- }
235
- return result;
236
- }
237
-
238
- // src/collection/dropWhile.ts
239
- function dropWhile(arr, predicate) {
240
- let startIndex = 0;
241
- for (let i = 0; i < arr.length; i++) {
242
- if (!predicate(arr[i], i)) {
243
- startIndex = i;
244
- break;
245
- }
246
- startIndex = arr.length;
247
- }
248
- return arr.slice(startIndex);
249
- }
250
-
251
- // src/collection/findLast.ts
252
- function findLast(arr, predicate) {
253
- for (let i = arr.length - 1; i >= 0; i--) {
254
- const item = arr[i];
255
- if (predicate(item, i)) return item;
256
- }
257
- return void 0;
258
- }
259
-
260
- // src/collection/countBy.ts
261
- function countBy(arr, fn) {
262
- const result = {};
263
- for (const item of arr) {
264
- const key = fn(item);
265
- result[key] = (result[key] ?? 0) + 1;
266
- }
267
- return result;
268
- }
269
-
270
- // src/collection/maxBy.ts
271
- function maxBy(arr, fn) {
272
- if (arr.length === 0) return void 0;
273
- let maxItem = arr[0];
274
- let maxValue = fn(maxItem);
275
- for (let i = 1; i < arr.length; i++) {
276
- const item = arr[i];
277
- const value = fn(item);
278
- if (value > maxValue) {
279
- maxValue = value;
280
- maxItem = item;
281
- }
282
- }
283
- return maxItem;
284
- }
285
-
286
- // src/collection/minBy.ts
287
- function minBy(arr, fn) {
288
- if (arr.length === 0) return void 0;
289
- let minItem = arr[0];
290
- let minValue = fn(minItem);
291
- for (let i = 1; i < arr.length; i++) {
292
- const item = arr[i];
293
- const value = fn(item);
294
- if (value < minValue) {
295
- minValue = value;
296
- minItem = item;
297
- }
298
- }
299
- return minItem;
300
- }
301
-
302
- // src/collection/sumBy.ts
303
- function sumBy(arr, fn) {
304
- let sum = 0;
305
- for (const item of arr) {
306
- sum += fn(item);
307
- }
308
- return sum;
309
- }
310
-
311
- // src/collection/head.ts
312
- function head(arr) {
313
- return arr[0];
314
- }
315
-
316
- // src/collection/tail.ts
317
- function tail(arr) {
318
- return arr.slice(1);
319
- }
320
-
321
- // src/collection/init.ts
322
- function init(arr) {
323
- return arr.slice(0, -1);
324
- }
325
-
326
- export { chunk, collection_exports, compact, countBy, difference, drop, dropWhile, findLast, first, flatten, groupBy, head, indexBy, init, intersection, last, maxBy, minBy, partition, range, sample, shuffle, sortBy, sumBy, tail, take, takeWhile, unique, unzip, zip };
327
- //# sourceMappingURL=chunk-OEJK37LO.mjs.map
328
- //# sourceMappingURL=chunk-OEJK37LO.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/collection/index.ts","../src/collection/unique.ts","../src/collection/groupBy.ts","../src/collection/indexBy.ts","../src/collection/partition.ts","../src/collection/chunk.ts","../src/collection/compact.ts","../src/collection/flatten.ts","../src/collection/sortBy.ts","../src/collection/first.ts","../src/collection/last.ts","../src/collection/range.ts","../src/collection/shuffle.ts","../src/collection/sample.ts","../src/collection/zip.ts","../src/collection/unzip.ts","../src/collection/difference.ts","../src/collection/intersection.ts","../src/collection/take.ts","../src/collection/drop.ts","../src/collection/takeWhile.ts","../src/collection/dropWhile.ts","../src/collection/findLast.ts","../src/collection/countBy.ts","../src/collection/maxBy.ts","../src/collection/minBy.ts","../src/collection/sumBy.ts","../src/collection/head.ts","../src/collection/tail.ts","../src/collection/init.ts"],"names":["first"],"mappings":"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","file":"chunk-OEJK37LO.mjs","sourcesContent":["export { unique } from './unique'\nexport { groupBy } from './groupBy'\nexport { indexBy } from './indexBy'\nexport { partition } from './partition'\nexport { chunk } from './chunk'\nexport { compact } from './compact'\nexport { flatten } from './flatten'\nexport { sortBy } from './sortBy'\nexport { first } from './first'\nexport { last } from './last'\nexport { range } from './range'\nexport { shuffle } from './shuffle'\nexport { sample } from './sample'\nexport { zip } from './zip'\nexport { unzip } from './unzip'\nexport { difference } from './difference'\nexport { intersection } from './intersection'\nexport { take } from './take'\nexport { drop } from './drop'\nexport { takeWhile } from './takeWhile'\nexport { dropWhile } from './dropWhile'\nexport { findLast } from './findLast'\nexport { countBy } from './countBy'\nexport { maxBy } from './maxBy'\nexport { minBy } from './minBy'\nexport { sumBy } from './sumBy'\nexport { head } from './head'\nexport { tail } from './tail'\nexport { init } from './init'\n","/**\n * Returns an array with unique values.\n * Optionally accepts a key function to determine uniqueness.\n *\n * @example\n * unique([1, 2, 2, 3]) // [1, 2, 3]\n * unique([{ id: 1 }, { id: 1 }, { id: 2 }], item => item.id) // [{ id: 1 }, { id: 2 }]\n */\nexport function unique<T>(array: readonly T[]): T[]\nexport function unique<T, K>(\n array: readonly T[],\n keyFn: (item: T) => K\n): T[]\nexport function unique<T, K>(\n array: readonly T[],\n keyFn?: (item: T) => K\n): T[] {\n if (!keyFn) {\n return [...new Set(array)]\n }\n\n const seen = new Set<K>()\n const result: T[] = []\n\n for (const item of array) {\n const key = keyFn(item)\n if (!seen.has(key)) {\n seen.add(key)\n result.push(item)\n }\n }\n\n return result\n}\n","/**\n * Groups array elements by a key function.\n *\n * @example\n * const users = [\n * { name: 'Alice', role: 'admin' },\n * { name: 'Bob', role: 'user' },\n * { name: 'Charlie', role: 'admin' },\n * ]\n * groupBy(users, user => user.role)\n * // { admin: [{ name: 'Alice', ... }, { name: 'Charlie', ... }], user: [{ name: 'Bob', ... }] }\n */\nexport function groupBy<T, K extends PropertyKey>(\n array: readonly T[],\n keyFn: (item: T) => K\n): Record<K, T[]> {\n const result = {} as Record<K, T[]>\n\n for (const item of array) {\n const key = keyFn(item)\n if (!(key in result)) {\n result[key] = []\n }\n result[key].push(item)\n }\n\n return result\n}\n","/**\n * Creates an object indexed by a key function.\n * If multiple items have the same key, the last one wins.\n *\n * @example\n * const users = [\n * { id: 1, name: 'Alice' },\n * { id: 2, name: 'Bob' },\n * ]\n * indexBy(users, user => user.id)\n * // { 1: { id: 1, name: 'Alice' }, 2: { id: 2, name: 'Bob' } }\n */\nexport function indexBy<T, K extends PropertyKey>(\n array: readonly T[],\n keyFn: (item: T) => K\n): Record<K, T> {\n const result = {} as Record<K, T>\n\n for (const item of array) {\n const key = keyFn(item)\n result[key] = item\n }\n\n return result\n}\n","/**\n * Splits an array into two arrays based on a predicate.\n * First array contains items that pass, second contains items that fail.\n *\n * @example\n * const [evens, odds] = partition([1, 2, 3, 4], n => n % 2 === 0)\n * // evens: [2, 4], odds: [1, 3]\n */\nexport function partition<T>(\n array: readonly T[],\n predicate: (item: T) => boolean\n): [T[], T[]] {\n const pass: T[] = []\n const fail: T[] = []\n\n for (const item of array) {\n if (predicate(item)) {\n pass.push(item)\n } else {\n fail.push(item)\n }\n }\n\n return [pass, fail]\n}\n","/**\n * Splits an array into chunks of the specified size.\n *\n * @example\n * chunk([1, 2, 3, 4, 5], 2)\n * // [[1, 2], [3, 4], [5]]\n */\nexport function chunk<T>(array: readonly T[], size: number): T[][] {\n if (size <= 0) {\n throw new Error('Chunk size must be greater than 0')\n }\n\n const result: T[][] = []\n\n for (let i = 0; i < array.length; i += size) {\n result.push(array.slice(i, i + size))\n }\n\n return result\n}\n","/**\n * Removes null and undefined values from an array.\n * Properly narrows the type.\n *\n * @example\n * compact([1, null, 2, undefined, 3])\n * // [1, 2, 3] with type number[]\n */\nexport function compact<T>(array: readonly (T | null | undefined)[]): T[] {\n return array.filter((item): item is T => item !== null && item !== undefined)\n}\n","/**\n * Flattens an array one level deep.\n *\n * @example\n * flatten([[1, 2], [3, 4], [5]])\n * // [1, 2, 3, 4, 5]\n */\nexport function flatten<T>(array: readonly (T | readonly T[])[]): T[] {\n const result: T[] = []\n\n for (const item of array) {\n if (Array.isArray(item)) {\n result.push(...item)\n } else {\n result.push(item as T)\n }\n }\n\n return result\n}\n","/**\n * Sorts an array by a key function. Returns a new array.\n *\n * @example\n * const users = [{ name: 'Bob' }, { name: 'Alice' }]\n * sortBy(users, user => user.name)\n * // [{ name: 'Alice' }, { name: 'Bob' }]\n */\nexport function sortBy<T>(\n array: readonly T[],\n keyFn: (item: T) => string | number,\n order: 'asc' | 'desc' = 'asc'\n): T[] {\n const sorted = [...array].sort((a, b) => {\n const keyA = keyFn(a)\n const keyB = keyFn(b)\n\n if (keyA < keyB) return -1\n if (keyA > keyB) return 1\n return 0\n })\n\n return order === 'desc' ? sorted.reverse() : sorted\n}\n","/**\n * Returns the first element of an array, or undefined if empty.\n *\n * @example\n * first([1, 2, 3]) // 1\n * first([]) // undefined\n */\nexport function first<T>(array: readonly T[]): T | undefined {\n return array[0]\n}\n","/**\n * Returns the last element of an array, or undefined if empty.\n *\n * @example\n * last([1, 2, 3]) // 3\n * last([]) // undefined\n */\nexport function last<T>(array: readonly T[]): T | undefined {\n return array[array.length - 1]\n}\n","/**\n * Creates an array of numbers from start to end (exclusive).\n *\n * @example\n * range(0, 5) // [0, 1, 2, 3, 4]\n * range(1, 10, 2) // [1, 3, 5, 7, 9]\n */\nexport function range(start: number, end: number, step: number = 1): number[] {\n if (step === 0) {\n throw new Error('Step cannot be 0')\n }\n\n const result: number[] = []\n\n if (step > 0) {\n for (let i = start; i < end; i += step) {\n result.push(i)\n }\n } else {\n for (let i = start; i > end; i += step) {\n result.push(i)\n }\n }\n\n return result\n}\n","/**\n * Returns a new array with elements randomly shuffled.\n * Uses Fisher-Yates algorithm.\n *\n * @example\n * shuffle([1, 2, 3, 4, 5])\n * // [3, 1, 5, 2, 4] (random order)\n */\nexport function shuffle<T>(array: readonly T[]): T[] {\n const result = [...array]\n\n for (let i = result.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1))\n const temp = result[i]\n result[i] = result[j]!\n result[j] = temp!\n }\n\n return result\n}\n","/**\n * Returns a random element from an array.\n *\n * @example\n * sample([1, 2, 3, 4, 5]) // random element\n * sample([]) // undefined\n */\nexport function sample<T>(array: readonly T[]): T | undefined {\n if (array.length === 0) {\n return undefined\n }\n\n const index = Math.floor(Math.random() * array.length)\n return array[index]\n}\n","/**\n * Zips two arrays together into an array of tuples.\n * Stops at the shorter array.\n *\n * @example\n * zip([1, 2, 3], ['a', 'b', 'c'])\n * // [[1, 'a'], [2, 'b'], [3, 'c']]\n */\nexport function zip<A, B>(a: readonly A[], b: readonly B[]): [A, B][] {\n const length = Math.min(a.length, b.length)\n const result: [A, B][] = []\n\n for (let i = 0; i < length; i++) {\n result.push([a[i]!, b[i]!])\n }\n\n return result\n}\n","/**\n * Unzips an array of tuples into two arrays.\n *\n * @example\n * unzip([[1, 'a'], [2, 'b'], [3, 'c']])\n * // [[1, 2, 3], ['a', 'b', 'c']]\n */\nexport function unzip<A, B>(array: readonly (readonly [A, B])[]): [A[], B[]] {\n const a: A[] = []\n const b: B[] = []\n\n for (const [first, second] of array) {\n a.push(first)\n b.push(second)\n }\n\n return [a, b]\n}\n","/**\n * Returns elements in the first array that are not in the second.\n *\n * @example\n * difference([1, 2, 3, 4], [2, 4])\n * // [1, 3]\n */\nexport function difference<T>(a: readonly T[], b: readonly T[]): T[] {\n const setB = new Set(b)\n return a.filter((item) => !setB.has(item))\n}\n","/**\n * Returns elements that exist in both arrays.\n *\n * @example\n * intersection([1, 2, 3], [2, 3, 4])\n * // [2, 3]\n */\nexport function intersection<T>(a: readonly T[], b: readonly T[]): T[] {\n const setB = new Set(b)\n return a.filter((item) => setB.has(item))\n}\n","/**\n * Returns the first n elements of an array.\n *\n * @example\n * take([1, 2, 3, 4, 5], 3) // [1, 2, 3]\n * take([1, 2], 5) // [1, 2]\n */\nexport function take<T>(arr: readonly T[], n: number): T[] {\n if (n <= 0) return []\n return arr.slice(0, n)\n}\n","/**\n * Returns all but the first n elements of an array.\n *\n * @example\n * drop([1, 2, 3, 4, 5], 2) // [3, 4, 5]\n * drop([1, 2], 5) // []\n */\nexport function drop<T>(arr: readonly T[], n: number): T[] {\n if (n <= 0) return [...arr]\n return arr.slice(n)\n}\n","/**\n * Returns elements from the beginning of an array while the predicate returns true.\n *\n * @example\n * takeWhile([1, 2, 3, 4, 1], n => n < 3) // [1, 2]\n * takeWhile([5, 1, 2], n => n < 3) // []\n */\nexport function takeWhile<T>(\n arr: readonly T[],\n predicate: (item: T, index: number) => boolean\n): T[] {\n const result: T[] = []\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i]!\n if (!predicate(item, i)) break\n result.push(item)\n }\n return result\n}\n","/**\n * Drops elements from the beginning of an array while the predicate returns true.\n *\n * @example\n * dropWhile([1, 2, 3, 4, 1], n => n < 3) // [3, 4, 1]\n * dropWhile([5, 1, 2], n => n < 3) // [5, 1, 2]\n */\nexport function dropWhile<T>(\n arr: readonly T[],\n predicate: (item: T, index: number) => boolean\n): T[] {\n let startIndex = 0\n for (let i = 0; i < arr.length; i++) {\n if (!predicate(arr[i]!, i)) {\n startIndex = i\n break\n }\n startIndex = arr.length\n }\n return arr.slice(startIndex)\n}\n","/**\n * Returns the last element in an array that satisfies the predicate.\n *\n * @example\n * findLast([1, 2, 3, 4], n => n % 2 === 0) // 4\n * findLast([1, 3, 5], n => n % 2 === 0) // undefined\n */\nexport function findLast<T>(\n arr: readonly T[],\n predicate: (item: T, index: number) => boolean\n): T | undefined {\n for (let i = arr.length - 1; i >= 0; i--) {\n const item = arr[i]!\n if (predicate(item, i)) return item\n }\n return undefined\n}\n","/**\n * Creates an object counting occurrences of each key returned by the function.\n *\n * @example\n * countBy([1, 2, 3, 4, 5], n => n % 2 === 0 ? 'even' : 'odd')\n * // { odd: 3, even: 2 }\n *\n * countBy(['one', 'two', 'three'], s => s.length)\n * // { 3: 2, 5: 1 }\n */\nexport function countBy<T>(\n arr: readonly T[],\n fn: (item: T) => PropertyKey\n): Record<PropertyKey, number> {\n const result: Record<PropertyKey, number> = {}\n for (const item of arr) {\n const key = fn(item)\n result[key] = (result[key] ?? 0) + 1\n }\n return result\n}\n","/**\n * Returns the element with the maximum value according to the function.\n *\n * @example\n * maxBy([{ age: 20 }, { age: 30 }, { age: 25 }], u => u.age)\n * // { age: 30 }\n *\n * maxBy([], u => u.age) // undefined\n */\nexport function maxBy<T>(\n arr: readonly T[],\n fn: (item: T) => number\n): T | undefined {\n if (arr.length === 0) return undefined\n\n let maxItem = arr[0]!\n let maxValue = fn(maxItem)\n\n for (let i = 1; i < arr.length; i++) {\n const item = arr[i]!\n const value = fn(item)\n if (value > maxValue) {\n maxValue = value\n maxItem = item\n }\n }\n\n return maxItem\n}\n","/**\n * Returns the element with the minimum value according to the function.\n *\n * @example\n * minBy([{ age: 20 }, { age: 30 }, { age: 25 }], u => u.age)\n * // { age: 20 }\n *\n * minBy([], u => u.age) // undefined\n */\nexport function minBy<T>(\n arr: readonly T[],\n fn: (item: T) => number\n): T | undefined {\n if (arr.length === 0) return undefined\n\n let minItem = arr[0]!\n let minValue = fn(minItem)\n\n for (let i = 1; i < arr.length; i++) {\n const item = arr[i]!\n const value = fn(item)\n if (value < minValue) {\n minValue = value\n minItem = item\n }\n }\n\n return minItem\n}\n","/**\n * Sums the values returned by the function for each element.\n *\n * @example\n * sumBy([{ price: 10 }, { price: 20 }, { price: 30 }], item => item.price)\n * // 60\n *\n * sumBy([], item => item.price) // 0\n */\nexport function sumBy<T>(\n arr: readonly T[],\n fn: (item: T) => number\n): number {\n let sum = 0\n for (const item of arr) {\n sum += fn(item)\n }\n return sum\n}\n","/**\n * Returns the first element of an array, or undefined if empty.\n * Alias for first().\n *\n * @example\n * head([1, 2, 3]) // 1\n * head([]) // undefined\n */\nexport function head<T>(arr: readonly T[]): T | undefined {\n return arr[0]\n}\n","/**\n * Returns all elements except the first.\n *\n * @example\n * tail([1, 2, 3]) // [2, 3]\n * tail([1]) // []\n * tail([]) // []\n */\nexport function tail<T>(arr: readonly T[]): T[] {\n return arr.slice(1)\n}\n","/**\n * Returns all elements except the last.\n *\n * @example\n * init([1, 2, 3]) // [1, 2]\n * init([1]) // []\n * init([]) // []\n */\nexport function init<T>(arr: readonly T[]): T[] {\n return arr.slice(0, -1)\n}\n"]}