@vybestack/llxprt-code 0.1.18-nightly.250808.f9b79d74 → 0.1.18-nightly.250811.b0db22c6
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/dist/package.json +5 -3
- package/dist/src/auth/gemini-oauth-provider.d.ts +15 -0
- package/dist/src/auth/gemini-oauth-provider.js +33 -0
- package/dist/src/auth/gemini-oauth-provider.js.map +1 -0
- package/dist/src/auth/oauth-manager.d.ts +103 -0
- package/dist/src/auth/oauth-manager.js +326 -0
- package/dist/src/auth/oauth-manager.js.map +1 -0
- package/dist/src/auth/oauth-manager.spec.d.ts +6 -0
- package/dist/src/auth/oauth-manager.spec.js +523 -0
- package/dist/src/auth/oauth-manager.spec.js.map +1 -0
- package/dist/src/auth/qwen-oauth-provider.d.ts +14 -0
- package/dist/src/auth/qwen-oauth-provider.js +75 -0
- package/dist/src/auth/qwen-oauth-provider.js.map +1 -0
- package/dist/src/auth/types.d.ts +7 -0
- package/dist/src/auth/types.js +7 -0
- package/dist/src/auth/types.js.map +1 -0
- package/dist/src/config/auth.js +9 -0
- package/dist/src/config/auth.js.map +1 -1
- package/dist/src/config/config.js +93 -43
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/keyBindings.d.ts +66 -0
- package/dist/src/config/keyBindings.js +136 -0
- package/dist/src/config/keyBindings.js.map +1 -0
- package/dist/src/config/settings.d.ts +3 -59
- package/dist/src/config/settings.js +17 -1
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +587 -0
- package/dist/src/config/settingsSchema.js +565 -0
- package/dist/src/config/settingsSchema.js.map +1 -0
- package/dist/src/gemini.js +12 -109
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +1 -1
- package/dist/src/generated/git-commit.js +1 -1
- package/dist/src/nonInteractiveCli.js +0 -1
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/providers/logging/git-stats-service-impl.d.ts +19 -0
- package/dist/src/providers/logging/git-stats-service-impl.js +25 -0
- package/dist/src/providers/logging/git-stats-service-impl.js.map +1 -0
- package/dist/src/providers/logging/git-stats.d.ts +43 -0
- package/dist/src/providers/logging/git-stats.js +137 -0
- package/dist/src/providers/logging/git-stats.js.map +1 -0
- package/dist/src/providers/providerManagerInstance.js +39 -4
- package/dist/src/providers/providerManagerInstance.js.map +1 -1
- package/dist/src/services/BuiltinCommandLoader.js +4 -0
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/services/todo-continuation/todoContinuationService.d.ts +172 -0
- package/dist/src/services/todo-continuation/todoContinuationService.js +387 -0
- package/dist/src/services/todo-continuation/todoContinuationService.js.map +1 -0
- package/dist/src/services/todo-continuation/todoContinuationService.spec.d.ts +6 -0
- package/dist/src/services/todo-continuation/todoContinuationService.spec.js +385 -0
- package/dist/src/services/todo-continuation/todoContinuationService.spec.js.map +1 -0
- package/dist/src/ui/App.js +76 -26
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/colors.d.ts +5 -0
- package/dist/src/ui/colors.js +51 -0
- package/dist/src/ui/colors.js.map +1 -1
- package/dist/src/ui/commands/authCommand.d.ts +11 -1
- package/dist/src/ui/commands/authCommand.js +143 -48
- package/dist/src/ui/commands/authCommand.js.map +1 -1
- package/dist/src/ui/commands/chatCommand.js +16 -0
- package/dist/src/ui/commands/chatCommand.js.map +1 -1
- package/dist/src/ui/commands/ideCommand.js +67 -31
- package/dist/src/ui/commands/ideCommand.js.map +1 -1
- package/dist/src/ui/commands/keyfileCommand.js +15 -12
- package/dist/src/ui/commands/keyfileCommand.js.map +1 -1
- package/dist/src/ui/commands/loggingCommand.d.ts +15 -0
- package/dist/src/ui/commands/loggingCommand.js +421 -0
- package/dist/src/ui/commands/loggingCommand.js.map +1 -0
- package/dist/src/ui/commands/privacyCommand.d.ts +3 -0
- package/dist/src/ui/commands/privacyCommand.js +6 -3
- package/dist/src/ui/commands/privacyCommand.js.map +1 -1
- package/dist/src/ui/commands/settingsCommand.d.ts +7 -0
- package/dist/src/ui/commands/settingsCommand.js +16 -0
- package/dist/src/ui/commands/settingsCommand.js.map +1 -0
- package/dist/src/ui/commands/setupGithubCommand.js +21 -2
- package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
- package/dist/src/ui/commands/types.d.ts +14 -2
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/components/AuthDialog.js +13 -56
- package/dist/src/ui/components/AuthDialog.js.map +1 -1
- package/dist/src/ui/components/AuthInProgress.js +3 -3
- package/dist/src/ui/components/AuthInProgress.js.map +1 -1
- package/dist/src/ui/components/ContextUsageDisplay.d.ts +10 -0
- package/dist/src/ui/components/ContextUsageDisplay.js +27 -0
- package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -0
- package/dist/src/ui/components/FolderTrustDialog.d.ts +16 -0
- package/dist/src/ui/components/FolderTrustDialog.js +38 -0
- package/dist/src/ui/components/FolderTrustDialog.js.map +1 -0
- package/dist/src/ui/components/Footer.js +132 -15
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.d.ts +1 -0
- package/dist/src/ui/components/InputPrompt.js +87 -31
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/LoggingDialog.d.ts +37 -0
- package/dist/src/ui/components/LoggingDialog.js +155 -0
- package/dist/src/ui/components/LoggingDialog.js.map +1 -0
- package/dist/src/ui/components/MemoryUsageDisplay.js +6 -4
- package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
- package/dist/src/ui/components/ProviderDialog.js +100 -26
- package/dist/src/ui/components/ProviderDialog.js.map +1 -1
- package/dist/src/ui/components/ProviderModelDialog.js +99 -27
- package/dist/src/ui/components/ProviderModelDialog.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.d.ts +14 -0
- package/dist/src/ui/components/SettingsDialog.js +247 -0
- package/dist/src/ui/components/SettingsDialog.js.map +1 -0
- package/dist/src/ui/components/ThemeDialog.js +4 -15
- package/dist/src/ui/components/ThemeDialog.js.map +1 -1
- package/dist/src/ui/components/TodoPanel.js +93 -18
- package/dist/src/ui/components/TodoPanel.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js +85 -7
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
- package/dist/src/ui/contexts/SettingsContext.d.ts +9 -0
- package/dist/src/ui/contexts/SettingsContext.js +15 -0
- package/dist/src/ui/contexts/SettingsContext.js.map +1 -0
- package/dist/src/ui/hooks/atCommandProcessor.js +21 -0
- package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +6 -2
- package/dist/src/ui/hooks/slashCommandProcessor.js +142 -113
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useAtCompletion.js +1 -1
- package/dist/src/ui/hooks/useAuthCommand.js +14 -0
- package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
- package/dist/src/ui/hooks/useConsoleMessages.js +7 -0
- package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
- package/dist/src/ui/hooks/useFolderTrust.d.ts +11 -0
- package/dist/src/ui/hooks/useFolderTrust.js +22 -0
- package/dist/src/ui/hooks/useFolderTrust.js.map +1 -0
- package/dist/src/ui/hooks/useGeminiStream.js +14 -3
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useResponsive.d.ts +14 -0
- package/dist/src/ui/hooks/useResponsive.js +19 -0
- package/dist/src/ui/hooks/useResponsive.js.map +1 -0
- package/dist/src/ui/hooks/useSettingsCommand.d.ts +10 -0
- package/dist/src/ui/hooks/useSettingsCommand.js +21 -0
- package/dist/src/ui/hooks/useSettingsCommand.js.map +1 -0
- package/dist/src/ui/hooks/useTodoContinuation.d.ts +31 -0
- package/dist/src/ui/hooks/useTodoContinuation.js +148 -0
- package/dist/src/ui/hooks/useTodoContinuation.js.map +1 -0
- package/dist/src/ui/hooks/useTodoContinuation.spec.d.ts +6 -0
- package/dist/src/ui/hooks/useTodoContinuation.spec.js +378 -0
- package/dist/src/ui/hooks/useTodoContinuation.spec.js.map +1 -0
- package/dist/src/ui/keyMatchers.d.ts +26 -0
- package/dist/src/ui/keyMatchers.js +68 -0
- package/dist/src/ui/keyMatchers.js.map +1 -0
- package/dist/src/ui/privacy/PrivacyNotice.js +10 -4
- package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -1
- package/dist/src/ui/themes/semantic-resolver.d.ts +12 -0
- package/dist/src/ui/themes/semantic-resolver.js +32 -0
- package/dist/src/ui/themes/semantic-resolver.js.map +1 -0
- package/dist/src/ui/themes/semantic-tokens.d.ts +52 -0
- package/dist/src/ui/themes/semantic-tokens.js +7 -0
- package/dist/src/ui/themes/semantic-tokens.js.map +1 -0
- package/dist/src/ui/themes/theme-compat.d.ts +34 -0
- package/dist/src/ui/themes/theme-compat.js +65 -0
- package/dist/src/ui/themes/theme-compat.js.map +1 -0
- package/dist/src/ui/themes/theme-manager.d.ts +8 -0
- package/dist/src/ui/themes/theme-manager.js +18 -0
- package/dist/src/ui/themes/theme-manager.js.map +1 -1
- package/dist/src/ui/utils/CodeColorizer.d.ts +2 -1
- package/dist/src/ui/utils/CodeColorizer.js +4 -3
- package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
- package/dist/src/ui/utils/MarkdownDisplay.js +4 -2
- package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
- package/dist/src/ui/utils/commandUtils.d.ts +1 -0
- package/dist/src/ui/utils/commandUtils.js +22 -1
- package/dist/src/ui/utils/commandUtils.js.map +1 -1
- package/dist/src/ui/utils/responsive.d.ts +16 -0
- package/dist/src/ui/utils/responsive.js +111 -0
- package/dist/src/ui/utils/responsive.js.map +1 -0
- package/dist/src/utils/cleanup.d.ts +2 -2
- package/dist/src/utils/cleanup.js +2 -2
- package/dist/src/utils/cleanup.js.map +1 -1
- package/dist/src/utils/dialogScopeUtils.d.ts +31 -0
- package/dist/src/utils/dialogScopeUtils.js +48 -0
- package/dist/src/utils/dialogScopeUtils.js.map +1 -0
- package/dist/src/utils/gitUtils.d.ts +9 -0
- package/dist/src/utils/gitUtils.js +17 -0
- package/dist/src/utils/gitUtils.js.map +1 -1
- package/dist/src/utils/privacy/ConversationDataRedactor.d.ts +75 -0
- package/dist/src/utils/privacy/ConversationDataRedactor.js +412 -0
- package/dist/src/utils/privacy/ConversationDataRedactor.js.map +1 -0
- package/dist/src/utils/privacy/PrivacyManager.d.ts +58 -0
- package/dist/src/utils/privacy/PrivacyManager.js +133 -0
- package/dist/src/utils/privacy/PrivacyManager.js.map +1 -0
- package/dist/src/utils/sandbox.js +10 -0
- package/dist/src/utils/sandbox.js.map +1 -1
- package/dist/src/utils/settingsUtils.d.ts +126 -0
- package/dist/src/utils/settingsUtils.js +327 -0
- package/dist/src/utils/settingsUtils.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -3
- package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +0 -12
- package/dist/src/ui/components/IDEContextDetailDisplay.js +0 -17
- package/dist/src/ui/components/IDEContextDetailDisplay.js.map +0 -1
@@ -0,0 +1,327 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Google LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
import { SETTINGS_SCHEMA, } from '../config/settingsSchema.js';
|
7
|
+
// The schema is now nested, but many parts of the UI and logic work better
|
8
|
+
// with a flattened structure and dot-notation keys. This section flattens the
|
9
|
+
// schema into a map for easier lookups.
|
10
|
+
function flattenSchema(schema, prefix = '') {
|
11
|
+
let result = {};
|
12
|
+
for (const key in schema) {
|
13
|
+
const newKey = prefix ? `${prefix}.${key}` : key;
|
14
|
+
const definition = schema[key];
|
15
|
+
result[newKey] = { ...definition, key: newKey };
|
16
|
+
if (definition.properties) {
|
17
|
+
result = { ...result, ...flattenSchema(definition.properties, newKey) };
|
18
|
+
}
|
19
|
+
}
|
20
|
+
return result;
|
21
|
+
}
|
22
|
+
const FLATTENED_SCHEMA = flattenSchema(SETTINGS_SCHEMA);
|
23
|
+
/**
|
24
|
+
* Get all settings grouped by category
|
25
|
+
*/
|
26
|
+
export function getSettingsByCategory() {
|
27
|
+
const categories = {};
|
28
|
+
Object.values(FLATTENED_SCHEMA).forEach((definition) => {
|
29
|
+
const category = definition.category;
|
30
|
+
if (!categories[category]) {
|
31
|
+
categories[category] = [];
|
32
|
+
}
|
33
|
+
categories[category].push(definition);
|
34
|
+
});
|
35
|
+
return categories;
|
36
|
+
}
|
37
|
+
/**
|
38
|
+
* Get a setting definition by key
|
39
|
+
*/
|
40
|
+
export function getSettingDefinition(key) {
|
41
|
+
return FLATTENED_SCHEMA[key];
|
42
|
+
}
|
43
|
+
/**
|
44
|
+
* Check if a setting requires restart
|
45
|
+
*/
|
46
|
+
export function requiresRestart(key) {
|
47
|
+
return FLATTENED_SCHEMA[key]?.requiresRestart ?? false;
|
48
|
+
}
|
49
|
+
/**
|
50
|
+
* Get the default value for a setting
|
51
|
+
*/
|
52
|
+
export function getDefaultValue(key) {
|
53
|
+
return FLATTENED_SCHEMA[key]?.default;
|
54
|
+
}
|
55
|
+
/**
|
56
|
+
* Get all setting keys that require restart
|
57
|
+
*/
|
58
|
+
export function getRestartRequiredSettings() {
|
59
|
+
return Object.values(FLATTENED_SCHEMA)
|
60
|
+
.filter((definition) => definition.requiresRestart)
|
61
|
+
.map((definition) => definition.key);
|
62
|
+
}
|
63
|
+
/**
|
64
|
+
* Recursively gets a value from a nested object using a key path array.
|
65
|
+
*/
|
66
|
+
function getNestedValue(obj, path) {
|
67
|
+
const [first, ...rest] = path;
|
68
|
+
if (!first || !(first in obj)) {
|
69
|
+
return undefined;
|
70
|
+
}
|
71
|
+
const value = obj[first];
|
72
|
+
if (rest.length === 0) {
|
73
|
+
return value;
|
74
|
+
}
|
75
|
+
if (value && typeof value === 'object' && value !== null) {
|
76
|
+
return getNestedValue(value, rest);
|
77
|
+
}
|
78
|
+
return undefined;
|
79
|
+
}
|
80
|
+
/**
|
81
|
+
* Get the effective value for a setting, considering inheritance from higher scopes
|
82
|
+
* Always returns a value (never undefined) - falls back to default if not set anywhere
|
83
|
+
*/
|
84
|
+
export function getEffectiveValue(key, settings, mergedSettings) {
|
85
|
+
const definition = getSettingDefinition(key);
|
86
|
+
if (!definition) {
|
87
|
+
return undefined;
|
88
|
+
}
|
89
|
+
const path = key.split('.');
|
90
|
+
// Check the current scope's settings first
|
91
|
+
let value = getNestedValue(settings, path);
|
92
|
+
if (value !== undefined) {
|
93
|
+
return value;
|
94
|
+
}
|
95
|
+
// Check the merged settings for an inherited value
|
96
|
+
value = getNestedValue(mergedSettings, path);
|
97
|
+
if (value !== undefined) {
|
98
|
+
return value;
|
99
|
+
}
|
100
|
+
// Return default value if no value is set anywhere
|
101
|
+
return definition.default;
|
102
|
+
}
|
103
|
+
/**
|
104
|
+
* Get all setting keys from the schema
|
105
|
+
*/
|
106
|
+
export function getAllSettingKeys() {
|
107
|
+
return Object.keys(FLATTENED_SCHEMA);
|
108
|
+
}
|
109
|
+
/**
|
110
|
+
* Get settings by type
|
111
|
+
*/
|
112
|
+
export function getSettingsByType(type) {
|
113
|
+
return Object.values(FLATTENED_SCHEMA).filter((definition) => definition.type === type);
|
114
|
+
}
|
115
|
+
/**
|
116
|
+
* Get settings that require restart
|
117
|
+
*/
|
118
|
+
export function getSettingsRequiringRestart() {
|
119
|
+
return Object.values(FLATTENED_SCHEMA).filter((definition) => definition.requiresRestart);
|
120
|
+
}
|
121
|
+
/**
|
122
|
+
* Validate if a setting key exists in the schema
|
123
|
+
*/
|
124
|
+
export function isValidSettingKey(key) {
|
125
|
+
return key in FLATTENED_SCHEMA;
|
126
|
+
}
|
127
|
+
/**
|
128
|
+
* Get the category for a setting
|
129
|
+
*/
|
130
|
+
export function getSettingCategory(key) {
|
131
|
+
return FLATTENED_SCHEMA[key]?.category;
|
132
|
+
}
|
133
|
+
/**
|
134
|
+
* Check if a setting should be shown in the settings dialog
|
135
|
+
*/
|
136
|
+
export function shouldShowInDialog(key) {
|
137
|
+
return FLATTENED_SCHEMA[key]?.showInDialog ?? true; // Default to true for backward compatibility
|
138
|
+
}
|
139
|
+
/**
|
140
|
+
* Get all settings that should be shown in the dialog, grouped by category
|
141
|
+
*/
|
142
|
+
export function getDialogSettingsByCategory() {
|
143
|
+
const categories = {};
|
144
|
+
Object.values(FLATTENED_SCHEMA)
|
145
|
+
.filter((definition) => definition.showInDialog !== false)
|
146
|
+
.forEach((definition) => {
|
147
|
+
const category = definition.category;
|
148
|
+
if (!categories[category]) {
|
149
|
+
categories[category] = [];
|
150
|
+
}
|
151
|
+
categories[category].push(definition);
|
152
|
+
});
|
153
|
+
return categories;
|
154
|
+
}
|
155
|
+
/**
|
156
|
+
* Get settings by type that should be shown in the dialog
|
157
|
+
*/
|
158
|
+
export function getDialogSettingsByType(type) {
|
159
|
+
return Object.values(FLATTENED_SCHEMA).filter((definition) => definition.type === type && definition.showInDialog !== false);
|
160
|
+
}
|
161
|
+
/**
|
162
|
+
* Get all setting keys that should be shown in the dialog
|
163
|
+
*/
|
164
|
+
export function getDialogSettingKeys() {
|
165
|
+
return Object.values(FLATTENED_SCHEMA)
|
166
|
+
.filter((definition) => definition.showInDialog !== false)
|
167
|
+
.map((definition) => definition.key);
|
168
|
+
}
|
169
|
+
// ============================================================================
|
170
|
+
// BUSINESS LOGIC UTILITIES (Higher-level utilities for setting operations)
|
171
|
+
// ============================================================================
|
172
|
+
/**
|
173
|
+
* Get the current value for a setting in a specific scope
|
174
|
+
* Always returns a value (never undefined) - falls back to default if not set anywhere
|
175
|
+
*/
|
176
|
+
export function getSettingValue(key, settings, mergedSettings) {
|
177
|
+
const definition = getSettingDefinition(key);
|
178
|
+
if (!definition) {
|
179
|
+
return false; // Default fallback for invalid settings
|
180
|
+
}
|
181
|
+
const value = getEffectiveValue(key, settings, mergedSettings);
|
182
|
+
// Ensure we return a boolean value, converting from the more general type
|
183
|
+
if (typeof value === 'boolean') {
|
184
|
+
return value;
|
185
|
+
}
|
186
|
+
// Fall back to default value, ensuring it's a boolean
|
187
|
+
const defaultValue = definition.default;
|
188
|
+
if (typeof defaultValue === 'boolean') {
|
189
|
+
return defaultValue;
|
190
|
+
}
|
191
|
+
return false; // Final fallback
|
192
|
+
}
|
193
|
+
/**
|
194
|
+
* Check if a setting value is modified from its default
|
195
|
+
*/
|
196
|
+
export function isSettingModified(key, value) {
|
197
|
+
const defaultValue = getDefaultValue(key);
|
198
|
+
// Handle type comparison properly
|
199
|
+
if (typeof defaultValue === 'boolean') {
|
200
|
+
return value !== defaultValue;
|
201
|
+
}
|
202
|
+
// If default is not a boolean, consider it modified if value is true
|
203
|
+
return value === true;
|
204
|
+
}
|
205
|
+
/**
|
206
|
+
* Check if a setting exists in the original settings file for a scope
|
207
|
+
*/
|
208
|
+
export function settingExistsInScope(key, scopeSettings) {
|
209
|
+
const path = key.split('.');
|
210
|
+
const value = getNestedValue(scopeSettings, path);
|
211
|
+
return value !== undefined;
|
212
|
+
}
|
213
|
+
/**
|
214
|
+
* Recursively sets a value in a nested object using a key path array.
|
215
|
+
*/
|
216
|
+
function setNestedValue(obj, path, value) {
|
217
|
+
const [first, ...rest] = path;
|
218
|
+
if (!first) {
|
219
|
+
return obj;
|
220
|
+
}
|
221
|
+
if (rest.length === 0) {
|
222
|
+
obj[first] = value;
|
223
|
+
return obj;
|
224
|
+
}
|
225
|
+
if (!obj[first] || typeof obj[first] !== 'object') {
|
226
|
+
obj[first] = {};
|
227
|
+
}
|
228
|
+
setNestedValue(obj[first], rest, value);
|
229
|
+
return obj;
|
230
|
+
}
|
231
|
+
/**
|
232
|
+
* Set a setting value in the pending settings
|
233
|
+
*/
|
234
|
+
export function setPendingSettingValue(key, value, pendingSettings) {
|
235
|
+
const path = key.split('.');
|
236
|
+
const newSettings = JSON.parse(JSON.stringify(pendingSettings));
|
237
|
+
setNestedValue(newSettings, path, value);
|
238
|
+
return newSettings;
|
239
|
+
}
|
240
|
+
/**
|
241
|
+
* Check if any modified settings require a restart
|
242
|
+
*/
|
243
|
+
export function hasRestartRequiredSettings(modifiedSettings) {
|
244
|
+
return Array.from(modifiedSettings).some((key) => requiresRestart(key));
|
245
|
+
}
|
246
|
+
/**
|
247
|
+
* Get the restart required settings from a set of modified settings
|
248
|
+
*/
|
249
|
+
export function getRestartRequiredFromModified(modifiedSettings) {
|
250
|
+
return Array.from(modifiedSettings).filter((key) => requiresRestart(key));
|
251
|
+
}
|
252
|
+
/**
|
253
|
+
* Save modified settings to the appropriate scope
|
254
|
+
*/
|
255
|
+
export function saveModifiedSettings(modifiedSettings, pendingSettings, loadedSettings, scope) {
|
256
|
+
modifiedSettings.forEach((settingKey) => {
|
257
|
+
const path = settingKey.split('.');
|
258
|
+
const value = getNestedValue(pendingSettings, path);
|
259
|
+
if (value === undefined) {
|
260
|
+
return;
|
261
|
+
}
|
262
|
+
const existsInOriginalFile = settingExistsInScope(settingKey, loadedSettings.forScope(scope).settings);
|
263
|
+
const isDefaultValue = value === getDefaultValue(settingKey);
|
264
|
+
if (existsInOriginalFile || !isDefaultValue) {
|
265
|
+
// This is tricky because setValue only works on top-level keys.
|
266
|
+
// We need to set the whole parent object.
|
267
|
+
const [parentKey] = path;
|
268
|
+
if (parentKey) {
|
269
|
+
// Ensure value is a boolean for setPendingSettingValue
|
270
|
+
const booleanValue = typeof value === 'boolean' ? value : false;
|
271
|
+
const newParentValue = setPendingSettingValue(settingKey, booleanValue, loadedSettings.forScope(scope).settings)[parentKey];
|
272
|
+
loadedSettings.setValue(scope, parentKey, newParentValue);
|
273
|
+
}
|
274
|
+
}
|
275
|
+
});
|
276
|
+
}
|
277
|
+
/**
|
278
|
+
* Get the display value for a setting, showing current scope value with default change indicator
|
279
|
+
*/
|
280
|
+
export function getDisplayValue(key, settings, _mergedSettings, modifiedSettings, pendingSettings) {
|
281
|
+
// Prioritize pending changes if user has modified this setting
|
282
|
+
let value;
|
283
|
+
if (pendingSettings && settingExistsInScope(key, pendingSettings)) {
|
284
|
+
// Show the value from the pending (unsaved) edits when it exists
|
285
|
+
value = getSettingValue(key, pendingSettings, {});
|
286
|
+
}
|
287
|
+
else if (settingExistsInScope(key, settings)) {
|
288
|
+
// Show the value defined at the current scope if present
|
289
|
+
value = getSettingValue(key, settings, {});
|
290
|
+
}
|
291
|
+
else {
|
292
|
+
// Fall back to the schema default when the key is unset in this scope
|
293
|
+
const defaultValue = getDefaultValue(key);
|
294
|
+
value = typeof defaultValue === 'boolean' ? defaultValue : false;
|
295
|
+
}
|
296
|
+
const valueString = String(value);
|
297
|
+
// Check if value is different from default OR if it's in modified settings OR if there are pending changes
|
298
|
+
const defaultValue = getDefaultValue(key);
|
299
|
+
const isChangedFromDefault = typeof defaultValue === 'boolean' ? value !== defaultValue : value === true;
|
300
|
+
const isInModifiedSettings = modifiedSettings.has(key);
|
301
|
+
const hasPendingChanges = pendingSettings && settingExistsInScope(key, pendingSettings);
|
302
|
+
// Add * indicator when value differs from default, is in modified settings, or has pending changes
|
303
|
+
if (isChangedFromDefault || isInModifiedSettings || hasPendingChanges) {
|
304
|
+
return `${valueString}*`; // * indicates changed from default value
|
305
|
+
}
|
306
|
+
return valueString;
|
307
|
+
}
|
308
|
+
/**
|
309
|
+
* Check if a setting doesn't exist in current scope (should be greyed out)
|
310
|
+
*/
|
311
|
+
export function isDefaultValue(key, settings) {
|
312
|
+
return !settingExistsInScope(key, settings);
|
313
|
+
}
|
314
|
+
/**
|
315
|
+
* Check if a setting value is inherited (not set at current scope)
|
316
|
+
*/
|
317
|
+
export function isValueInherited(key, settings, _mergedSettings) {
|
318
|
+
return !settingExistsInScope(key, settings);
|
319
|
+
}
|
320
|
+
/**
|
321
|
+
* Get the effective value for display, considering inheritance
|
322
|
+
* Always returns a boolean value (never undefined)
|
323
|
+
*/
|
324
|
+
export function getEffectiveDisplayValue(key, settings, mergedSettings) {
|
325
|
+
return getSettingValue(key, settings, mergedSettings);
|
326
|
+
}
|
327
|
+
//# sourceMappingURL=settingsUtils.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"settingsUtils.js","sourceRoot":"","sources":["../../../src/utils/settingsUtils.ts"],"names":[],"mappings":"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"}
|