indusagi-coding-agent 0.1.23 → 0.1.24

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 (213) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +2 -0
  3. package/dist/cli/args.d.ts +117 -1
  4. package/dist/cli/args.d.ts.map +1 -1
  5. package/dist/cli/args.js +221 -52
  6. package/dist/cli/args.js.map +1 -1
  7. package/dist/cli/config-selector.d.ts +58 -2
  8. package/dist/cli/config-selector.d.ts.map +1 -1
  9. package/dist/cli/config-selector.js +130 -12
  10. package/dist/cli/config-selector.js.map +1 -1
  11. package/dist/cli/file-processor.d.ts +70 -2
  12. package/dist/cli/file-processor.d.ts.map +1 -1
  13. package/dist/cli/file-processor.js +240 -15
  14. package/dist/cli/file-processor.js.map +1 -1
  15. package/dist/cli/list-models.d.ts +63 -3
  16. package/dist/cli/list-models.d.ts.map +1 -1
  17. package/dist/cli/list-models.js +202 -27
  18. package/dist/cli/list-models.js.map +1 -1
  19. package/dist/cli/login-handler.d.ts +82 -8
  20. package/dist/cli/login-handler.d.ts.map +1 -1
  21. package/dist/cli/login-handler.js +410 -77
  22. package/dist/cli/login-handler.js.map +1 -1
  23. package/dist/cli/session-picker.d.ts +74 -2
  24. package/dist/cli/session-picker.d.ts.map +1 -1
  25. package/dist/cli/session-picker.js +236 -12
  26. package/dist/cli/session-picker.js.map +1 -1
  27. package/dist/core/agent-session.d.ts +214 -9
  28. package/dist/core/agent-session.d.ts.map +1 -1
  29. package/dist/core/agent-session.js +214 -9
  30. package/dist/core/agent-session.js.map +1 -1
  31. package/dist/core/bash-executor.d.ts +302 -12
  32. package/dist/core/bash-executor.d.ts.map +1 -1
  33. package/dist/core/bash-executor.js +302 -12
  34. package/dist/core/bash-executor.js.map +1 -1
  35. package/dist/core/diagnostics.d.ts +191 -0
  36. package/dist/core/diagnostics.d.ts.map +1 -1
  37. package/dist/core/diagnostics.js +142 -0
  38. package/dist/core/diagnostics.js.map +1 -1
  39. package/dist/core/event-bus.d.ts +146 -0
  40. package/dist/core/event-bus.d.ts.map +1 -1
  41. package/dist/core/event-bus.js +93 -0
  42. package/dist/core/event-bus.js.map +1 -1
  43. package/dist/core/export-html/ansi-to-html.d.ts +4 -0
  44. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  45. package/dist/core/export-html/ansi-to-html.js +4 -0
  46. package/dist/core/export-html/ansi-to-html.js.map +1 -1
  47. package/dist/core/export-html/index.d.ts +128 -0
  48. package/dist/core/export-html/index.d.ts.map +1 -1
  49. package/dist/core/export-html/index.js +128 -0
  50. package/dist/core/export-html/index.js.map +1 -1
  51. package/dist/core/export-html/tool-renderer.d.ts +4 -0
  52. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  53. package/dist/core/export-html/tool-renderer.js +4 -0
  54. package/dist/core/export-html/tool-renderer.js.map +1 -1
  55. package/dist/core/keybindings.d.ts +142 -0
  56. package/dist/core/keybindings.d.ts.map +1 -1
  57. package/dist/core/keybindings.js +142 -0
  58. package/dist/core/keybindings.js.map +1 -1
  59. package/dist/core/model-registry.d.ts +98 -1
  60. package/dist/core/model-registry.d.ts.map +1 -1
  61. package/dist/core/model-registry.js +98 -1
  62. package/dist/core/model-registry.js.map +1 -1
  63. package/dist/core/model-resolver.d.ts +99 -1
  64. package/dist/core/model-resolver.d.ts.map +1 -1
  65. package/dist/core/model-resolver.js +99 -1
  66. package/dist/core/model-resolver.js.map +1 -1
  67. package/dist/core/prompt-templates.js.map +1 -1
  68. package/dist/core/session-manager.d.ts +127 -0
  69. package/dist/core/session-manager.d.ts.map +1 -1
  70. package/dist/core/session-manager.js +125 -0
  71. package/dist/core/session-manager.js.map +1 -1
  72. package/dist/core/skills.js.map +1 -1
  73. package/dist/core/subagents.js.map +1 -1
  74. package/dist/core/tools/bash.d.ts +391 -11
  75. package/dist/core/tools/bash.d.ts.map +1 -1
  76. package/dist/core/tools/bash.js +269 -2
  77. package/dist/core/tools/bash.js.map +1 -1
  78. package/dist/core/tools/edit.d.ts +284 -6
  79. package/dist/core/tools/edit.d.ts.map +1 -1
  80. package/dist/core/tools/edit.js +238 -0
  81. package/dist/core/tools/edit.js.map +1 -1
  82. package/dist/core/tools/find.d.ts +169 -5
  83. package/dist/core/tools/find.d.ts.map +1 -1
  84. package/dist/core/tools/find.js +136 -0
  85. package/dist/core/tools/find.js.map +1 -1
  86. package/dist/core/tools/grep.d.ts +285 -5
  87. package/dist/core/tools/grep.d.ts.map +1 -1
  88. package/dist/core/tools/grep.js +247 -0
  89. package/dist/core/tools/grep.js.map +1 -1
  90. package/dist/core/tools/ls.d.ts +6 -0
  91. package/dist/core/tools/ls.d.ts.map +1 -1
  92. package/dist/core/tools/ls.js +6 -0
  93. package/dist/core/tools/ls.js.map +1 -1
  94. package/dist/core/tools/read.d.ts +308 -7
  95. package/dist/core/tools/read.d.ts.map +1 -1
  96. package/dist/core/tools/read.js +231 -0
  97. package/dist/core/tools/read.js.map +1 -1
  98. package/dist/core/tools/webfetch.d.ts +118 -3
  99. package/dist/core/tools/webfetch.d.ts.map +1 -1
  100. package/dist/core/tools/webfetch.js +118 -3
  101. package/dist/core/tools/webfetch.js.map +1 -1
  102. package/dist/core/tools/websearch.d.ts +130 -3
  103. package/dist/core/tools/websearch.d.ts.map +1 -1
  104. package/dist/core/tools/websearch.js +130 -3
  105. package/dist/core/tools/websearch.js.map +1 -1
  106. package/dist/core/tools/write.d.ts +251 -5
  107. package/dist/core/tools/write.d.ts.map +1 -1
  108. package/dist/core/tools/write.js +210 -0
  109. package/dist/core/tools/write.js.map +1 -1
  110. package/dist/modes/interactive/components/assistant-message.d.ts +164 -1
  111. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  112. package/dist/modes/interactive/components/assistant-message.js +164 -1
  113. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  114. package/dist/modes/interactive/components/bash-execution.d.ts +297 -1
  115. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  116. package/dist/modes/interactive/components/bash-execution.js +297 -1
  117. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  118. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  119. package/dist/modes/interactive/components/tool-execution.js +251 -1
  120. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  121. package/dist/modes/interactive/components/user-message.d.ts +186 -1
  122. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  123. package/dist/modes/interactive/components/user-message.js +186 -1
  124. package/dist/modes/interactive/components/user-message.js.map +1 -1
  125. package/dist/modes/interactive/interactive-mode.d.ts +1567 -13
  126. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  127. package/dist/modes/interactive/interactive-mode.js +1567 -13
  128. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  129. package/dist/modes/interactive/theme/theme.d.ts +422 -0
  130. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  131. package/dist/modes/interactive/theme/theme.js +422 -0
  132. package/dist/modes/interactive/theme/theme.js.map +1 -1
  133. package/dist/modes/print-mode.d.ts +538 -5
  134. package/dist/modes/print-mode.d.ts.map +1 -1
  135. package/dist/modes/print-mode.js +538 -5
  136. package/dist/modes/print-mode.js.map +1 -1
  137. package/dist/modes/rpc/rpc-client.d.ts +921 -8
  138. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  139. package/dist/modes/rpc/rpc-client.js +921 -8
  140. package/dist/modes/rpc/rpc-client.js.map +1 -1
  141. package/dist/modes/rpc/rpc-mode.d.ts +802 -9
  142. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  143. package/dist/modes/rpc/rpc-mode.js +802 -9
  144. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  145. package/dist/modes/rpc/rpc-types.d.ts +356 -3
  146. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  147. package/dist/modes/rpc/rpc-types.js +356 -3
  148. package/dist/modes/rpc/rpc-types.js.map +1 -1
  149. package/dist/modes/shared.d.ts +386 -0
  150. package/dist/modes/shared.d.ts.map +1 -0
  151. package/dist/modes/shared.js +543 -0
  152. package/dist/modes/shared.js.map +1 -0
  153. package/dist/utils/array.d.ts +389 -0
  154. package/dist/utils/array.d.ts.map +1 -0
  155. package/dist/utils/array.js +585 -0
  156. package/dist/utils/array.js.map +1 -0
  157. package/dist/utils/color-formatter.d.ts +318 -0
  158. package/dist/utils/color-formatter.d.ts.map +1 -0
  159. package/dist/utils/color-formatter.js +442 -0
  160. package/dist/utils/color-formatter.js.map +1 -0
  161. package/dist/utils/data-transformer.d.ts +326 -0
  162. package/dist/utils/data-transformer.d.ts.map +1 -0
  163. package/dist/utils/data-transformer.js +512 -0
  164. package/dist/utils/data-transformer.js.map +1 -0
  165. package/dist/utils/date-formatter.d.ts +281 -0
  166. package/dist/utils/date-formatter.d.ts.map +1 -0
  167. package/dist/utils/date-formatter.js +503 -0
  168. package/dist/utils/date-formatter.js.map +1 -0
  169. package/dist/utils/error-handler.d.ts +541 -0
  170. package/dist/utils/error-handler.d.ts.map +1 -0
  171. package/dist/utils/error-handler.js +726 -0
  172. package/dist/utils/error-handler.js.map +1 -0
  173. package/dist/utils/file-operations.d.ts +297 -0
  174. package/dist/utils/file-operations.d.ts.map +1 -0
  175. package/dist/utils/file-operations.js +505 -0
  176. package/dist/utils/file-operations.js.map +1 -0
  177. package/dist/utils/frontmatter.d.ts +268 -6
  178. package/dist/utils/frontmatter.d.ts.map +1 -1
  179. package/dist/utils/frontmatter.js +500 -21
  180. package/dist/utils/frontmatter.js.map +1 -1
  181. package/dist/utils/json-formatter.d.ts +259 -0
  182. package/dist/utils/json-formatter.d.ts.map +1 -0
  183. package/dist/utils/json-formatter.js +517 -0
  184. package/dist/utils/json-formatter.js.map +1 -0
  185. package/dist/utils/logger.d.ts +176 -0
  186. package/dist/utils/logger.d.ts.map +1 -0
  187. package/dist/utils/logger.js +346 -0
  188. package/dist/utils/logger.js.map +1 -0
  189. package/dist/utils/markdown-formatter.d.ts +211 -0
  190. package/dist/utils/markdown-formatter.d.ts.map +1 -0
  191. package/dist/utils/markdown-formatter.js +482 -0
  192. package/dist/utils/markdown-formatter.js.map +1 -0
  193. package/dist/utils/path-validator.d.ts +603 -0
  194. package/dist/utils/path-validator.d.ts.map +1 -0
  195. package/dist/utils/path-validator.js +870 -0
  196. package/dist/utils/path-validator.js.map +1 -0
  197. package/dist/utils/string-formatter.d.ts +609 -0
  198. package/dist/utils/string-formatter.d.ts.map +1 -0
  199. package/dist/utils/string-formatter.js +806 -0
  200. package/dist/utils/string-formatter.js.map +1 -0
  201. package/dist/utils/type-guards.d.ts +629 -0
  202. package/dist/utils/type-guards.d.ts.map +1 -0
  203. package/dist/utils/type-guards.js +662 -0
  204. package/dist/utils/type-guards.js.map +1 -0
  205. package/docs/COMPLETE-GUIDE.md +300 -0
  206. package/docs/MODES-ARCHITECTURE.md +565 -0
  207. package/docs/PRINT-MODE-GUIDE.md +456 -0
  208. package/docs/RPC-GUIDE.md +705 -0
  209. package/docs/UTILS-IMPLEMENTATION-SUMMARY.md +647 -0
  210. package/docs/UTILS-MODULE-OVERVIEW.md +1480 -0
  211. package/docs/UTILS-QA-CHECKLIST.md +1061 -0
  212. package/docs/UTILS-USAGE-GUIDE.md +1419 -0
  213. package/package.json +1 -1
@@ -0,0 +1,585 @@
1
+ /**
2
+ * @fileoverview Advanced array manipulation utilities with functional programming patterns
3
+ *
4
+ * This module provides:
5
+ * - Array grouping and partitioning
6
+ * - Unique value extraction
7
+ * - Flattening and chunking
8
+ * - Sorting and searching
9
+ * - Array zipping and pairing
10
+ * - Filtering and transforming
11
+ * - Set operations (union, intersection, difference)
12
+ * - Performance optimized with O(n) complexity notes
13
+ *
14
+ * @example
15
+ * import { groupBy, unique, flatten, chunk, sortBy } from './array';
16
+ *
17
+ * const items = [{ id: 1, type: 'A' }, { id: 2, type: 'B' }];
18
+ * const grouped = groupBy(items, item => item.type);
19
+ * const flattened = flatten([1, [2, [3, [4]]]]);
20
+ *
21
+ * @author indusagi
22
+ * @version 1.0.0
23
+ */
24
+ /**
25
+ * Group array items by key function
26
+ * @param items - Array to group
27
+ * @param keyFn - Function to determine grouping key
28
+ * @returns Object with grouped arrays
29
+ *
30
+ * Performance: O(n) where n = array length
31
+ *
32
+ * @example
33
+ * const users = [
34
+ * { name: 'John', role: 'admin' },
35
+ * { name: 'Jane', role: 'user' },
36
+ * { name: 'Bob', role: 'admin' }
37
+ * ];
38
+ * const byRole = groupBy(users, u => u.role);
39
+ * // {
40
+ * // admin: [{ name: 'John', role: 'admin' }, { name: 'Bob', role: 'admin' }],
41
+ * // user: [{ name: 'Jane', role: 'user' }]
42
+ * // }
43
+ */
44
+ export function groupBy(items, keyFn) {
45
+ const result = {};
46
+ items.forEach((item, index) => {
47
+ const key = keyFn(item, index);
48
+ if (!(key in result)) {
49
+ result[key] = [];
50
+ }
51
+ result[key].push(item);
52
+ });
53
+ return result;
54
+ }
55
+ /**
56
+ * Get unique items from array
57
+ * @param items - Array with potential duplicates
58
+ * @param keyFn - Optional function to determine uniqueness
59
+ * @returns Array with unique items (preserves order of first occurrence)
60
+ *
61
+ * Performance: O(n) with Set, very efficient
62
+ *
63
+ * @example
64
+ * unique([1, 2, 2, 3, 3, 3, 4]);
65
+ * // [1, 2, 3, 4]
66
+ *
67
+ * @example
68
+ * const users = [
69
+ * { id: 1, name: 'John' },
70
+ * { id: 2, name: 'Jane' },
71
+ * { id: 1, name: 'John' }
72
+ * ];
73
+ * const unique_ = unique(users, u => u.id);
74
+ * // [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]
75
+ */
76
+ export function unique(items, keyFn) {
77
+ const seen = new Set();
78
+ const result = [];
79
+ for (const item of items) {
80
+ const key = keyFn ? keyFn(item) : item;
81
+ if (!seen.has(key)) {
82
+ seen.add(key);
83
+ result.push(item);
84
+ }
85
+ }
86
+ return result;
87
+ }
88
+ /**
89
+ * Flatten nested array to specified depth
90
+ * @param items - Nested array
91
+ * @param depth - Flattening depth (default: Infinity)
92
+ * @returns Flattened array
93
+ *
94
+ * Performance: O(n) where n = total items at all levels
95
+ *
96
+ * @example
97
+ * flatten([1, [2, [3, [4]]]]);
98
+ * // [1, 2, 3, 4]
99
+ *
100
+ * @example
101
+ * flatten([1, [2, [3, [4]]]], 1);
102
+ * // [1, 2, [3, [4]]]
103
+ *
104
+ * @example
105
+ * flatten([1, [2, 3], [4, [5, 6]]]);
106
+ * // [1, 2, 3, 4, 5, 6]
107
+ */
108
+ export function flatten(items, depth = Infinity) {
109
+ if (depth <= 0) {
110
+ return items;
111
+ }
112
+ const result = [];
113
+ for (const item of items) {
114
+ if (Array.isArray(item)) {
115
+ result.push(...flatten(item, depth - 1));
116
+ }
117
+ else {
118
+ result.push(item);
119
+ }
120
+ }
121
+ return result;
122
+ }
123
+ /**
124
+ * Split array into chunks of specified size
125
+ * @param items - Array to chunk
126
+ * @param size - Chunk size
127
+ * @returns Array of chunks
128
+ *
129
+ * Performance: O(n) where n = array length
130
+ *
131
+ * @example
132
+ * chunk([1, 2, 3, 4, 5], 2);
133
+ * // [[1, 2], [3, 4], [5]]
134
+ *
135
+ * @example
136
+ * chunk(['a', 'b', 'c', 'd', 'e', 'f'], 3);
137
+ * // [['a', 'b', 'c'], ['d', 'e', 'f']]
138
+ */
139
+ export function chunk(items, size) {
140
+ if (size <= 0) {
141
+ throw new Error('Chunk size must be greater than 0');
142
+ }
143
+ const result = [];
144
+ for (let i = 0; i < items.length; i += size) {
145
+ result.push(items.slice(i, i + size));
146
+ }
147
+ return result;
148
+ }
149
+ /**
150
+ * Sort array by criteria
151
+ * @param items - Array to sort
152
+ * @param compareFn - Comparison function
153
+ * @returns Sorted array (creates new array)
154
+ *
155
+ * Performance: O(n log n)
156
+ *
157
+ * @example
158
+ * const users = [
159
+ * { name: 'Charlie', age: 30 },
160
+ * { name: 'Alice', age: 25 },
161
+ * { name: 'Bob', age: 25 }
162
+ * ];
163
+ * const sorted = sortBy(users, (a, b) => {
164
+ * if (a.age !== b.age) return a.age - b.age;
165
+ * return a.name.localeCompare(b.name);
166
+ * });
167
+ */
168
+ export function sortBy(items, compareFn) {
169
+ return [...items].sort(compareFn);
170
+ }
171
+ /**
172
+ * Find index of item matching predicate
173
+ * @param items - Array to search
174
+ * @param predicate - Test function
175
+ * @returns Index of first match or -1
176
+ *
177
+ * Performance: O(n) worst case
178
+ *
179
+ * @example
180
+ * const items = [10, 20, 30, 40];
181
+ * findIndex(items, x => x > 25); // 2
182
+ *
183
+ * @example
184
+ * const users = [{ id: 1 }, { id: 2 }, { id: 3 }];
185
+ * findIndex(users, u => u.id === 2); // 1
186
+ */
187
+ export function findIndex(items, predicate) {
188
+ for (let i = 0; i < items.length; i++) {
189
+ if (predicate(items[i], i)) {
190
+ return i;
191
+ }
192
+ }
193
+ return -1;
194
+ }
195
+ /**
196
+ * Find last index of item matching predicate
197
+ * @param items - Array to search
198
+ * @param predicate - Test function
199
+ * @returns Index of last match or -1
200
+ *
201
+ * @example
202
+ * const items = [10, 20, 30, 20, 40];
203
+ * findLastIndex(items, x => x === 20); // 3
204
+ */
205
+ export function findLastIndex(items, predicate) {
206
+ for (let i = items.length - 1; i >= 0; i--) {
207
+ if (predicate(items[i], i)) {
208
+ return i;
209
+ }
210
+ }
211
+ return -1;
212
+ }
213
+ /**
214
+ * Partition array into two arrays based on predicate
215
+ * @param items - Array to partition
216
+ * @param predicate - Test function
217
+ * @returns Tuple of [passing, failing]
218
+ *
219
+ * Performance: O(n)
220
+ *
221
+ * @example
222
+ * const numbers = [1, 2, 3, 4, 5, 6];
223
+ * const [even, odd] = partition(numbers, x => x % 2 === 0);
224
+ * // even: [2, 4, 6]
225
+ * // odd: [1, 3, 5]
226
+ *
227
+ * @example
228
+ * const users = [
229
+ * { name: 'John', active: true },
230
+ * { name: 'Jane', active: false },
231
+ * { name: 'Bob', active: true }
232
+ * ];
233
+ * const [active, inactive] = partition(users, u => u.active);
234
+ */
235
+ export function partition(items, predicate) {
236
+ const passing = [];
237
+ const failing = [];
238
+ for (const item of items) {
239
+ if (predicate(item)) {
240
+ passing.push(item);
241
+ }
242
+ else {
243
+ failing.push(item);
244
+ }
245
+ }
246
+ return [passing, failing];
247
+ }
248
+ /**
249
+ * Zip arrays together
250
+ * @param arrays - Arrays to zip
251
+ * @returns Array of tuples
252
+ *
253
+ * Performance: O(n) where n = length of shortest array
254
+ *
255
+ * @example
256
+ * const names = ['John', 'Jane', 'Bob'];
257
+ * const ages = [30, 28, 25];
258
+ * const zipped = zip(names, ages);
259
+ * // [['John', 30], ['Jane', 28], ['Bob', 25]]
260
+ *
261
+ * @example
262
+ * const a = [1, 2, 3];
263
+ * const b = ['a', 'b', 'c'];
264
+ * const c = [true, false, true];
265
+ * const result = zip(a, b, c);
266
+ * // [[1, 'a', true], [2, 'b', false], [3, 'c', true]]
267
+ */
268
+ export function zip(...arrays) {
269
+ if (arrays.length === 0) {
270
+ return [];
271
+ }
272
+ const minLength = Math.min(...arrays.map((arr) => arr.length));
273
+ const result = [];
274
+ for (let i = 0; i < minLength; i++) {
275
+ const tuple = arrays.map((arr) => arr[i]);
276
+ result.push(tuple);
277
+ }
278
+ return result;
279
+ }
280
+ /**
281
+ * Unzip array of tuples
282
+ * @param items - Array of tuples
283
+ * @returns Array of arrays
284
+ *
285
+ * @example
286
+ * const zipped = [['John', 30], ['Jane', 28], ['Bob', 25]];
287
+ * const [names, ages] = unzip(zipped);
288
+ * // names: ['John', 'Jane', 'Bob']
289
+ * // ages: [30, 28, 25]
290
+ */
291
+ export function unzip(items) {
292
+ if (items.length === 0) {
293
+ return [];
294
+ }
295
+ const length = items[0].length;
296
+ const result = Array.from({ length }, () => []);
297
+ for (const item of items) {
298
+ for (let i = 0; i < length; i++) {
299
+ result[i].push(item[i]);
300
+ }
301
+ }
302
+ return result;
303
+ }
304
+ /**
305
+ * Get first n items from array
306
+ * @param items - Array
307
+ * @param n - Number of items
308
+ * @returns First n items
309
+ *
310
+ * @example
311
+ * take([1, 2, 3, 4, 5], 3); // [1, 2, 3]
312
+ */
313
+ export function take(items, n) {
314
+ return items.slice(0, Math.max(0, n));
315
+ }
316
+ /**
317
+ * Remove first n items from array
318
+ * @param items - Array
319
+ * @param n - Number of items to skip
320
+ * @returns Items after first n
321
+ *
322
+ * @example
323
+ * drop([1, 2, 3, 4, 5], 2); // [3, 4, 5]
324
+ */
325
+ export function drop(items, n) {
326
+ return items.slice(Math.max(0, n));
327
+ }
328
+ /**
329
+ * Get last n items from array
330
+ * @param items - Array
331
+ * @param n - Number of items
332
+ * @returns Last n items
333
+ *
334
+ * @example
335
+ * takeLast([1, 2, 3, 4, 5], 2); // [4, 5]
336
+ */
337
+ export function takeLast(items, n) {
338
+ return items.slice(Math.max(0, items.length - n));
339
+ }
340
+ /**
341
+ * Remove last n items from array
342
+ * @param items - Array
343
+ * @param n - Number of items to remove
344
+ * @returns Items excluding last n
345
+ *
346
+ * @example
347
+ * dropLast([1, 2, 3, 4, 5], 2); // [1, 2, 3]
348
+ */
349
+ export function dropLast(items, n) {
350
+ return items.slice(0, Math.max(0, items.length - n));
351
+ }
352
+ /**
353
+ * Find union of arrays (all unique items from all arrays)
354
+ * @param arrays - Arrays to union
355
+ * @returns Array of unique items from all arrays
356
+ *
357
+ * Performance: O(n) where n = total items
358
+ *
359
+ * @example
360
+ * union([1, 2, 3], [2, 3, 4], [3, 4, 5]);
361
+ * // [1, 2, 3, 4, 5]
362
+ */
363
+ export function union(...arrays) {
364
+ const seen = new Set();
365
+ const result = [];
366
+ for (const array of arrays) {
367
+ for (const item of array) {
368
+ if (!seen.has(item)) {
369
+ seen.add(item);
370
+ result.push(item);
371
+ }
372
+ }
373
+ }
374
+ return result;
375
+ }
376
+ /**
377
+ * Find intersection of arrays (items present in all arrays)
378
+ * @param arrays - Arrays to intersect
379
+ * @returns Array of items present in all arrays
380
+ *
381
+ * Performance: O(n*m) where n = first array, m = other arrays
382
+ *
383
+ * @example
384
+ * intersection([1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]);
385
+ * // [3, 4]
386
+ */
387
+ export function intersection(...arrays) {
388
+ if (arrays.length === 0) {
389
+ return [];
390
+ }
391
+ const [first, ...rest] = arrays;
392
+ const otherSets = rest.map((arr) => new Set(arr));
393
+ return first.filter((item) => otherSets.every((set) => set.has(item)));
394
+ }
395
+ /**
396
+ * Find difference (items in first array not in others)
397
+ * @param first - First array
398
+ * @param rest - Other arrays to subtract
399
+ * @returns Items in first but not in others
400
+ *
401
+ * Performance: O(n+m) where n = first, m = total other items
402
+ *
403
+ * @example
404
+ * difference([1, 2, 3, 4], [2, 3], [4]);
405
+ * // [1]
406
+ */
407
+ export function difference(first, ...rest) {
408
+ const otherSet = new Set();
409
+ for (const array of rest) {
410
+ for (const item of array) {
411
+ otherSet.add(item);
412
+ }
413
+ }
414
+ return first.filter((item) => !otherSet.has(item));
415
+ }
416
+ /**
417
+ * Remove duplicates while preserving order
418
+ * @param items - Array with potential duplicates
419
+ * @returns Array without duplicates
420
+ *
421
+ * @example
422
+ * compact([1, 2, 2, 3, 3, 3, 4, null, undefined]);
423
+ * // [1, 2, 3, 4, null, undefined]
424
+ */
425
+ export function compact(items) {
426
+ const seen = new Set();
427
+ const result = [];
428
+ for (const item of items) {
429
+ if (item !== null && item !== undefined && !seen.has(item)) {
430
+ seen.add(item);
431
+ result.push(item);
432
+ }
433
+ }
434
+ return result;
435
+ }
436
+ /**
437
+ * Filter and map in one operation
438
+ * @param items - Array to transform
439
+ * @param fn - Function returning value or null/undefined to filter
440
+ * @returns Filtered and mapped array
441
+ *
442
+ * Performance: O(n)
443
+ *
444
+ * @example
445
+ * const items = [1, 2, 3, 4, 5];
446
+ * const result = mapFilter(items, x => x > 2 ? x * 2 : null);
447
+ * // [6, 8, 10]
448
+ */
449
+ export function mapFilter(items, fn) {
450
+ const result = [];
451
+ for (const item of items) {
452
+ const mapped = fn(item);
453
+ if (mapped != null) {
454
+ result.push(mapped);
455
+ }
456
+ }
457
+ return result;
458
+ }
459
+ /**
460
+ * Shuffle array randomly
461
+ * @param items - Array to shuffle
462
+ * @returns Shuffled copy of array
463
+ *
464
+ * @example
465
+ * shuffle([1, 2, 3, 4, 5]);
466
+ * // [3, 1, 4, 5, 2] (random order)
467
+ */
468
+ export function shuffle(items) {
469
+ const arr = [...items];
470
+ for (let i = arr.length - 1; i > 0; i--) {
471
+ const j = Math.floor(Math.random() * (i + 1));
472
+ [arr[i], arr[j]] = [arr[j], arr[i]];
473
+ }
474
+ return arr;
475
+ }
476
+ /**
477
+ * Get random item from array
478
+ * @param items - Array to sample from
479
+ * @returns Random item or undefined if empty
480
+ *
481
+ * @example
482
+ * const item = sample([1, 2, 3, 4, 5]);
483
+ * // One random item from the array
484
+ */
485
+ export function sample(items) {
486
+ if (items.length === 0) {
487
+ return undefined;
488
+ }
489
+ return items[Math.floor(Math.random() * items.length)];
490
+ }
491
+ /**
492
+ * Get multiple random items from array
493
+ * @param items - Array to sample from
494
+ * @param n - Number of items to sample
495
+ * @returns Array of random items
496
+ *
497
+ * @example
498
+ * sampleSize([1, 2, 3, 4, 5], 3);
499
+ * // [2, 4, 1] (3 random items)
500
+ */
501
+ export function sampleSize(items, n) {
502
+ const shuffled = shuffle(items);
503
+ return shuffled.slice(0, Math.max(0, Math.min(n, items.length)));
504
+ }
505
+ /**
506
+ * Find item with minimum value
507
+ * @param items - Array to search
508
+ * @param compareFn - Function to get comparable value
509
+ * @returns Item with minimum value or undefined
510
+ *
511
+ * @example
512
+ * const items = [{ val: 10 }, { val: 5 }, { val: 20 }];
513
+ * const min = minBy(items, x => x.val);
514
+ * // { val: 5 }
515
+ */
516
+ export function minBy(items, compareFn) {
517
+ if (items.length === 0)
518
+ return undefined;
519
+ let minItem = items[0];
520
+ let minValue = compareFn(minItem);
521
+ for (let i = 1; i < items.length; i++) {
522
+ const value = compareFn(items[i]);
523
+ if (value < minValue) {
524
+ minValue = value;
525
+ minItem = items[i];
526
+ }
527
+ }
528
+ return minItem;
529
+ }
530
+ /**
531
+ * Find item with maximum value
532
+ * @param items - Array to search
533
+ * @param compareFn - Function to get comparable value
534
+ * @returns Item with maximum value or undefined
535
+ *
536
+ * @example
537
+ * const items = [{ val: 10 }, { val: 5 }, { val: 20 }];
538
+ * const max = maxBy(items, x => x.val);
539
+ * // { val: 20 }
540
+ */
541
+ export function maxBy(items, compareFn) {
542
+ if (items.length === 0)
543
+ return undefined;
544
+ let maxItem = items[0];
545
+ let maxValue = compareFn(maxItem);
546
+ for (let i = 1; i < items.length; i++) {
547
+ const value = compareFn(items[i]);
548
+ if (value > maxValue) {
549
+ maxValue = value;
550
+ maxItem = items[i];
551
+ }
552
+ }
553
+ return maxItem;
554
+ }
555
+ /**
556
+ * Sum array values
557
+ * @param items - Array to sum
558
+ * @param fn - Optional function to get numeric value
559
+ * @returns Sum of array
560
+ *
561
+ * @example
562
+ * sum([1, 2, 3, 4]); // 10
563
+ *
564
+ * @example
565
+ * const items = [{ val: 10 }, { val: 20 }];
566
+ * sum(items, x => x.val); // 30
567
+ */
568
+ export function sum(items, fn) {
569
+ return items.reduce((acc, item) => acc + (fn ? fn(item) : item), 0);
570
+ }
571
+ /**
572
+ * Average array values
573
+ * @param items - Array to average
574
+ * @param fn - Optional function to get numeric value
575
+ * @returns Average of array
576
+ *
577
+ * @example
578
+ * average([1, 2, 3, 4]); // 2.5
579
+ */
580
+ export function average(items, fn) {
581
+ if (items.length === 0)
582
+ return 0;
583
+ return sum(items, fn) / items.length;
584
+ }
585
+ //# sourceMappingURL=array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/utils/array.ts"],"names":[],"mappings":"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"}