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,326 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Advanced data transformation utilities with immutability guarantees
|
|
3
|
+
*
|
|
4
|
+
* This module provides:
|
|
5
|
+
* - Deep merge and clone operations
|
|
6
|
+
* - Immutable object transformations
|
|
7
|
+
* - Data selection (pick, omit)
|
|
8
|
+
* - Data flattening and unflattening
|
|
9
|
+
* - Grouping and sorting utilities
|
|
10
|
+
* - Deduplication and unique operations
|
|
11
|
+
* - Value mapping and transformation
|
|
12
|
+
* - Performance-optimized operations with O(n) complexity notes
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* import { deepMerge, deepClone, pick, groupBy } from './data-transformer';
|
|
16
|
+
*
|
|
17
|
+
* const obj1 = { a: 1, b: { c: 2 } };
|
|
18
|
+
* const obj2 = { b: { d: 3 }, e: 4 };
|
|
19
|
+
* const merged = deepMerge(obj1, obj2);
|
|
20
|
+
*
|
|
21
|
+
* @author indusagi
|
|
22
|
+
* @version 1.0.0
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Deep clone an object with full immutability
|
|
26
|
+
* @param obj - Object to clone
|
|
27
|
+
* @returns Deep cloned copy
|
|
28
|
+
*
|
|
29
|
+
* Performance: O(n) where n = total properties at all levels
|
|
30
|
+
* Space: O(n) for new object allocation
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* const original = { a: 1, b: { c: [1, 2, 3] } };
|
|
34
|
+
* const clone = deepClone(original);
|
|
35
|
+
* clone.b.c.push(4);
|
|
36
|
+
* console.log(original.b.c); // [1, 2, 3]
|
|
37
|
+
* console.log(clone.b.c); // [1, 2, 3, 4]
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* // Handle circular references gracefully
|
|
41
|
+
* const circular: any = { a: 1 };
|
|
42
|
+
* circular.self = circular;
|
|
43
|
+
* const cloned = deepClone(circular); // Creates shallow copy for circular ref
|
|
44
|
+
*/
|
|
45
|
+
export declare function deepClone<T>(obj: T): T;
|
|
46
|
+
/**
|
|
47
|
+
* Deep merge multiple objects
|
|
48
|
+
* @param target - Target object
|
|
49
|
+
* @param sources - Source objects to merge
|
|
50
|
+
* @returns Merged object (new instance)
|
|
51
|
+
*
|
|
52
|
+
* Performance: O(n) for each source object
|
|
53
|
+
* Later values override earlier ones
|
|
54
|
+
* Creates new object, does not mutate originals
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* const base = { api: { host: 'localhost', port: 3000 } };
|
|
58
|
+
* const prod = { api: { host: 'api.example.com' } };
|
|
59
|
+
* const merged = deepMerge(base, prod);
|
|
60
|
+
* // { api: { host: 'api.example.com', port: 3000 } }
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* const config1 = { db: { user: 'root' } };
|
|
64
|
+
* const config2 = { db: { password: 'secret' } };
|
|
65
|
+
* const config3 = { api: { timeout: 5000 } };
|
|
66
|
+
* const final = deepMerge(config1, config2, config3);
|
|
67
|
+
*/
|
|
68
|
+
export declare function deepMerge<T extends Record<string, any>>(target: T, ...sources: T[]): T;
|
|
69
|
+
/**
|
|
70
|
+
* Pick specific keys from object
|
|
71
|
+
* @param obj - Source object
|
|
72
|
+
* @param keys - Keys to pick
|
|
73
|
+
* @returns New object with only specified keys
|
|
74
|
+
*
|
|
75
|
+
* Performance: O(k) where k = number of keys to pick
|
|
76
|
+
* Immutable: creates new object
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* const user = { id: 1, name: 'John', email: 'john@example.com', password: 'secret' };
|
|
80
|
+
* const safe = pick(user, ['id', 'name', 'email']);
|
|
81
|
+
* // { id: 1, name: 'John', email: 'john@example.com' }
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* const data = { a: 1, b: 2, c: 3, d: 4 };
|
|
85
|
+
* const subset = pick(data, ['a', 'c']);
|
|
86
|
+
* // { a: 1, c: 3 }
|
|
87
|
+
*/
|
|
88
|
+
export declare function pick<T extends Record<string, any>, K extends keyof T>(obj: T, keys: K[]): Partial<T>;
|
|
89
|
+
/**
|
|
90
|
+
* Omit specific keys from object
|
|
91
|
+
* @param obj - Source object
|
|
92
|
+
* @param keys - Keys to omit
|
|
93
|
+
* @returns New object without specified keys
|
|
94
|
+
*
|
|
95
|
+
* Performance: O(n) where n = total properties
|
|
96
|
+
* Immutable: creates new object
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* const user = { id: 1, name: 'John', email: 'john@example.com', password: 'secret' };
|
|
100
|
+
* const safe = omit(user, ['password']);
|
|
101
|
+
* // { id: 1, name: 'John', email: 'john@example.com' }
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* const config = { dev: true, test: false, prod: true, internal: 'value' };
|
|
105
|
+
* const public_ = omit(config, ['internal']);
|
|
106
|
+
*/
|
|
107
|
+
export declare function omit<T extends Record<string, any>, K extends keyof T>(obj: T, keys: K[]): Partial<T>;
|
|
108
|
+
/**
|
|
109
|
+
* Flatten nested object to single level
|
|
110
|
+
* @param obj - Nested object
|
|
111
|
+
* @param prefix - Key prefix for nested keys
|
|
112
|
+
* @returns Flattened object
|
|
113
|
+
*
|
|
114
|
+
* Performance: O(n) where n = total nested properties
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* const nested = {
|
|
118
|
+
* user: { name: 'John', age: 30 },
|
|
119
|
+
* settings: { theme: 'dark', lang: 'en' }
|
|
120
|
+
* };
|
|
121
|
+
* const flat = flatten(nested);
|
|
122
|
+
* // {
|
|
123
|
+
* // 'user.name': 'John',
|
|
124
|
+
* // 'user.age': 30,
|
|
125
|
+
* // 'settings.theme': 'dark',
|
|
126
|
+
* // 'settings.lang': 'en'
|
|
127
|
+
* // }
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* const deep = { a: { b: { c: { d: 1 } } } };
|
|
131
|
+
* const flat = flatten(deep);
|
|
132
|
+
* // { 'a.b.c.d': 1 }
|
|
133
|
+
*/
|
|
134
|
+
export declare function flatten(obj: any, prefix?: string): Record<string, any>;
|
|
135
|
+
/**
|
|
136
|
+
* Unflatten object from dotted keys
|
|
137
|
+
* @param obj - Flattened object
|
|
138
|
+
* @returns Nested object
|
|
139
|
+
*
|
|
140
|
+
* Performance: O(n) where n = number of keys
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* const flat = {
|
|
144
|
+
* 'user.name': 'John',
|
|
145
|
+
* 'user.age': 30,
|
|
146
|
+
* 'settings.theme': 'dark'
|
|
147
|
+
* };
|
|
148
|
+
* const nested = unflatten(flat);
|
|
149
|
+
* // { user: { name: 'John', age: 30 }, settings: { theme: 'dark' } }
|
|
150
|
+
*/
|
|
151
|
+
export declare function unflatten(obj: Record<string, any>): any;
|
|
152
|
+
/**
|
|
153
|
+
* Group array by key function
|
|
154
|
+
* @param items - Array to group
|
|
155
|
+
* @param keyFn - Function to determine grouping key
|
|
156
|
+
* @returns Object with grouped arrays
|
|
157
|
+
*
|
|
158
|
+
* Performance: O(n) where n = array length
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* const users = [
|
|
162
|
+
* { id: 1, role: 'admin' },
|
|
163
|
+
* { id: 2, role: 'user' },
|
|
164
|
+
* { id: 3, role: 'admin' }
|
|
165
|
+
* ];
|
|
166
|
+
* const byRole = groupBy(users, u => u.role);
|
|
167
|
+
* // { admin: [{id: 1, role: 'admin'}, {id: 3, role: 'admin'}], user: [{id: 2, role: 'user'}] }
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* const words = ['apple', 'apricot', 'banana', 'blueberry'];
|
|
171
|
+
* const byFirstLetter = groupBy(words, w => w[0]);
|
|
172
|
+
* // { a: ['apple', 'apricot'], b: ['banana', 'blueberry'] }
|
|
173
|
+
*/
|
|
174
|
+
export declare function groupBy<T, K extends string | number | symbol>(items: T[], keyFn: (item: T, index: number) => K): Record<K, T[]>;
|
|
175
|
+
/**
|
|
176
|
+
* Sort array by multiple criteria
|
|
177
|
+
* @param items - Array to sort
|
|
178
|
+
* @param compareFn - Comparison function
|
|
179
|
+
* @returns Sorted array (new instance)
|
|
180
|
+
*
|
|
181
|
+
* Performance: O(n log n) typical case
|
|
182
|
+
* Immutable: returns new array
|
|
183
|
+
*
|
|
184
|
+
* @example
|
|
185
|
+
* const users = [
|
|
186
|
+
* { name: 'Charlie', age: 30 },
|
|
187
|
+
* { name: 'Alice', age: 25 },
|
|
188
|
+
* { name: 'Bob', age: 25 }
|
|
189
|
+
* ];
|
|
190
|
+
* const sorted = sortBy(users, (a, b) => {
|
|
191
|
+
* if (a.age !== b.age) return a.age - b.age;
|
|
192
|
+
* return a.name.localeCompare(b.name);
|
|
193
|
+
* });
|
|
194
|
+
*
|
|
195
|
+
* @example
|
|
196
|
+
* const numbers = [3, 1, 4, 1, 5, 9, 2, 6];
|
|
197
|
+
* const sorted = sortBy(numbers, (a, b) => a - b);
|
|
198
|
+
*/
|
|
199
|
+
export declare function sortBy<T>(items: T[], compareFn: (a: T, b: T) => number): T[];
|
|
200
|
+
/**
|
|
201
|
+
* Get unique items from array
|
|
202
|
+
* @param items - Array with potential duplicates
|
|
203
|
+
* @param keyFn - Optional function to determine uniqueness
|
|
204
|
+
* @returns Array with unique items
|
|
205
|
+
*
|
|
206
|
+
* Performance: O(n) with Set, O(n log n) without
|
|
207
|
+
*
|
|
208
|
+
* @example
|
|
209
|
+
* const numbers = [1, 2, 2, 3, 3, 3, 4];
|
|
210
|
+
* const unique = uniqueBy(numbers);
|
|
211
|
+
* // [1, 2, 3, 4]
|
|
212
|
+
*
|
|
213
|
+
* @example
|
|
214
|
+
* const users = [
|
|
215
|
+
* { id: 1, name: 'John' },
|
|
216
|
+
* { id: 2, name: 'Jane' },
|
|
217
|
+
* { id: 1, name: 'John' }
|
|
218
|
+
* ];
|
|
219
|
+
* const unique = uniqueBy(users, u => u.id);
|
|
220
|
+
* // [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]
|
|
221
|
+
*/
|
|
222
|
+
export declare function uniqueBy<T, K = T>(items: T[], keyFn?: (item: T) => K): T[];
|
|
223
|
+
/**
|
|
224
|
+
* Map object values to new values
|
|
225
|
+
* @param obj - Source object
|
|
226
|
+
* @param mapFn - Mapping function
|
|
227
|
+
* @returns New object with mapped values
|
|
228
|
+
*
|
|
229
|
+
* Performance: O(n) where n = number of properties
|
|
230
|
+
* Keys are preserved, only values transform
|
|
231
|
+
*
|
|
232
|
+
* @example
|
|
233
|
+
* const scores = { math: 85, english: 90, science: 88 };
|
|
234
|
+
* const percentages = mapValues(scores, v => `${v}%`);
|
|
235
|
+
* // { math: '85%', english: '90%', science: '88%' }
|
|
236
|
+
*
|
|
237
|
+
* @example
|
|
238
|
+
* const prices = { apple: 0.5, banana: 0.3 };
|
|
239
|
+
* const taxed = mapValues(prices, v => v * 1.1);
|
|
240
|
+
* // { apple: 0.55, banana: 0.33 }
|
|
241
|
+
*/
|
|
242
|
+
export declare function mapValues<T extends Record<string, any>, V>(obj: T, mapFn: (value: T[keyof T], key: string) => V): Record<keyof T, V>;
|
|
243
|
+
/**
|
|
244
|
+
* Transform object keys
|
|
245
|
+
* @param obj - Source object
|
|
246
|
+
* @param transformFn - Key transformation function
|
|
247
|
+
* @returns New object with transformed keys
|
|
248
|
+
*
|
|
249
|
+
* @example
|
|
250
|
+
* const obj = { firstName: 'John', lastName: 'Doe' };
|
|
251
|
+
* const snake = transformKeys(obj, k => k.replace(/([A-Z])/g, '_$1').toLowerCase());
|
|
252
|
+
* // { first_name: 'John', last_name: 'Doe' }
|
|
253
|
+
*/
|
|
254
|
+
export declare function transformKeys<T extends Record<string, any>>(obj: T, transformFn: (key: string) => string): Record<string, any>;
|
|
255
|
+
/**
|
|
256
|
+
* Filter object by predicate
|
|
257
|
+
* @param obj - Source object
|
|
258
|
+
* @param predicate - Filter function
|
|
259
|
+
* @returns New object with filtered entries
|
|
260
|
+
*
|
|
261
|
+
* Performance: O(n) where n = number of properties
|
|
262
|
+
*
|
|
263
|
+
* @example
|
|
264
|
+
* const config = { debug: true, prod: false, test: true, verbose: false };
|
|
265
|
+
* const enabled = filterObject(config, (v) => v === true);
|
|
266
|
+
* // { debug: true, test: true }
|
|
267
|
+
*/
|
|
268
|
+
export declare function filterObject<T extends Record<string, any>>(obj: T, predicate: (value: T[keyof T], key: string) => boolean): Partial<T>;
|
|
269
|
+
/**
|
|
270
|
+
* Invert object keys and values
|
|
271
|
+
* @param obj - Object to invert
|
|
272
|
+
* @returns Inverted object
|
|
273
|
+
*
|
|
274
|
+
* @example
|
|
275
|
+
* const mapping = { en: 'English', es: 'Spanish', fr: 'French' };
|
|
276
|
+
* const inverted = invertObject(mapping);
|
|
277
|
+
* // { English: 'en', Spanish: 'es', French: 'fr' }
|
|
278
|
+
*/
|
|
279
|
+
export declare function invertObject(obj: Record<string, string>): Record<string, string>;
|
|
280
|
+
/**
|
|
281
|
+
* Check if value is empty (null, undefined, empty string, empty array, empty object)
|
|
282
|
+
* @param value - Value to check
|
|
283
|
+
* @returns True if empty
|
|
284
|
+
*
|
|
285
|
+
* @example
|
|
286
|
+
* isEmpty(null); // true
|
|
287
|
+
* isEmpty(undefined); // true
|
|
288
|
+
* isEmpty(''); // true
|
|
289
|
+
* isEmpty([]); // true
|
|
290
|
+
* isEmpty({}); // true
|
|
291
|
+
* isEmpty(0); // false
|
|
292
|
+
*/
|
|
293
|
+
export declare function isEmpty(value: any): boolean;
|
|
294
|
+
/**
|
|
295
|
+
* Get value from object using dot notation path
|
|
296
|
+
* @param obj - Source object
|
|
297
|
+
* @param path - Dot notation path (e.g., 'user.profile.age')
|
|
298
|
+
* @param defaultValue - Default if not found
|
|
299
|
+
* @returns Value at path or default
|
|
300
|
+
*
|
|
301
|
+
* Performance: O(k) where k = path depth
|
|
302
|
+
*
|
|
303
|
+
* @example
|
|
304
|
+
* const user = { profile: { address: { city: 'New York' } } };
|
|
305
|
+
* const city = getPath(user, 'profile.address.city');
|
|
306
|
+
* // 'New York'
|
|
307
|
+
*
|
|
308
|
+
* @example
|
|
309
|
+
* const city = getPath(user, 'profile.country', 'Unknown');
|
|
310
|
+
* // 'Unknown'
|
|
311
|
+
*/
|
|
312
|
+
export declare function getPath<T = any>(obj: any, path: string, defaultValue?: T): T | undefined;
|
|
313
|
+
/**
|
|
314
|
+
* Set value in object using dot notation path
|
|
315
|
+
* @param obj - Target object
|
|
316
|
+
* @param path - Dot notation path
|
|
317
|
+
* @param value - Value to set
|
|
318
|
+
* @returns New object with value set (immutable)
|
|
319
|
+
*
|
|
320
|
+
* @example
|
|
321
|
+
* const user = { profile: { name: 'John' } };
|
|
322
|
+
* const updated = setPath(user, 'profile.age', 30);
|
|
323
|
+
* // { profile: { name: 'John', age: 30 } }
|
|
324
|
+
*/
|
|
325
|
+
export declare function setPath(obj: any, path: string, value: any): any;
|
|
326
|
+
//# sourceMappingURL=data-transformer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-transformer.d.ts","sourceRoot":"","sources":["../../src/utils/data-transformer.ts"],"names":[],"mappings":"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"}
|