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.
- package/CHANGELOG.md +65 -0
- package/README.md +2 -0
- package/dist/cli/args.d.ts +117 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +221 -52
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts +58 -2
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +130 -12
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/file-processor.d.ts +70 -2
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +240 -15
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/list-models.d.ts +63 -3
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +202 -27
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/login-handler.d.ts +82 -8
- package/dist/cli/login-handler.d.ts.map +1 -1
- package/dist/cli/login-handler.js +410 -77
- package/dist/cli/login-handler.js.map +1 -1
- package/dist/cli/session-picker.d.ts +74 -2
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js +236 -12
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/core/agent-session.d.ts +214 -9
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +214 -9
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bash-executor.d.ts +302 -12
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +302 -12
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/diagnostics.d.ts +191 -0
- package/dist/core/diagnostics.d.ts.map +1 -1
- package/dist/core/diagnostics.js +142 -0
- package/dist/core/diagnostics.js.map +1 -1
- package/dist/core/event-bus.d.ts +146 -0
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js +93 -0
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/export-html/ansi-to-html.d.ts +4 -0
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/dist/core/export-html/ansi-to-html.js +4 -0
- package/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/dist/core/export-html/index.d.ts +128 -0
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js +128 -0
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts +4 -0
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js +4 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/keybindings.d.ts +142 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +142 -0
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/model-registry.d.ts +98 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +98 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +99 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +99 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/session-manager.d.ts +127 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +125 -0
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/subagents.js.map +1 -1
- package/dist/core/tools/bash.d.ts +391 -11
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +269 -2
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts +284 -6
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +238 -0
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts +169 -5
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +136 -0
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +285 -5
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +247 -0
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/ls.d.ts +6 -0
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +6 -0
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts +308 -7
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +231 -0
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/webfetch.d.ts +118 -3
- package/dist/core/tools/webfetch.d.ts.map +1 -1
- package/dist/core/tools/webfetch.js +118 -3
- package/dist/core/tools/webfetch.js.map +1 -1
- package/dist/core/tools/websearch.d.ts +130 -3
- package/dist/core/tools/websearch.d.ts.map +1 -1
- package/dist/core/tools/websearch.js +130 -3
- package/dist/core/tools/websearch.js.map +1 -1
- package/dist/core/tools/write.d.ts +251 -5
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +210 -0
- package/dist/core/tools/write.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +164 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +164 -1
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts +297 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +297 -1
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +251 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +186 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +186 -1
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +1567 -13
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +1567 -13
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts +422 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +422 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/print-mode.d.ts +538 -5
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +538 -5
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +921 -8
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +921 -8
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts +802 -9
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +802 -9
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +356 -3
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js +356 -3
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/shared.d.ts +386 -0
- package/dist/modes/shared.d.ts.map +1 -0
- package/dist/modes/shared.js +543 -0
- package/dist/modes/shared.js.map +1 -0
- package/dist/utils/array.d.ts +389 -0
- package/dist/utils/array.d.ts.map +1 -0
- package/dist/utils/array.js +585 -0
- package/dist/utils/array.js.map +1 -0
- package/dist/utils/color-formatter.d.ts +318 -0
- package/dist/utils/color-formatter.d.ts.map +1 -0
- package/dist/utils/color-formatter.js +442 -0
- package/dist/utils/color-formatter.js.map +1 -0
- package/dist/utils/data-transformer.d.ts +326 -0
- package/dist/utils/data-transformer.d.ts.map +1 -0
- package/dist/utils/data-transformer.js +512 -0
- package/dist/utils/data-transformer.js.map +1 -0
- package/dist/utils/date-formatter.d.ts +281 -0
- package/dist/utils/date-formatter.d.ts.map +1 -0
- package/dist/utils/date-formatter.js +503 -0
- package/dist/utils/date-formatter.js.map +1 -0
- package/dist/utils/error-handler.d.ts +541 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +726 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/file-operations.d.ts +297 -0
- package/dist/utils/file-operations.d.ts.map +1 -0
- package/dist/utils/file-operations.js +505 -0
- package/dist/utils/file-operations.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +268 -6
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +500 -21
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/json-formatter.d.ts +259 -0
- package/dist/utils/json-formatter.d.ts.map +1 -0
- package/dist/utils/json-formatter.js +517 -0
- package/dist/utils/json-formatter.js.map +1 -0
- package/dist/utils/logger.d.ts +176 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +346 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/markdown-formatter.d.ts +211 -0
- package/dist/utils/markdown-formatter.d.ts.map +1 -0
- package/dist/utils/markdown-formatter.js +482 -0
- package/dist/utils/markdown-formatter.js.map +1 -0
- package/dist/utils/path-validator.d.ts +603 -0
- package/dist/utils/path-validator.d.ts.map +1 -0
- package/dist/utils/path-validator.js +870 -0
- package/dist/utils/path-validator.js.map +1 -0
- package/dist/utils/string-formatter.d.ts +609 -0
- package/dist/utils/string-formatter.d.ts.map +1 -0
- package/dist/utils/string-formatter.js +806 -0
- package/dist/utils/string-formatter.js.map +1 -0
- package/dist/utils/type-guards.d.ts +629 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +662 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/docs/COMPLETE-GUIDE.md +300 -0
- package/docs/MODES-ARCHITECTURE.md +565 -0
- package/docs/PRINT-MODE-GUIDE.md +456 -0
- package/docs/RPC-GUIDE.md +705 -0
- package/docs/UTILS-IMPLEMENTATION-SUMMARY.md +647 -0
- package/docs/UTILS-MODULE-OVERVIEW.md +1480 -0
- package/docs/UTILS-QA-CHECKLIST.md +1061 -0
- package/docs/UTILS-USAGE-GUIDE.md +1419 -0
- 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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"}
|