@google/gemini-cli 0.5.0-nightly.20250908.4693137b → 0.5.0-preview
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 +2 -2
- package/dist/src/commands/extensions/install.js +5 -12
- package/dist/src/commands/extensions/install.js.map +1 -1
- package/dist/src/commands/extensions/install.test.js +1 -16
- package/dist/src/commands/extensions/install.test.js.map +1 -1
- package/dist/src/config/config.js +1 -0
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/extension.d.ts +1 -0
- package/dist/src/config/extension.js +70 -46
- package/dist/src/config/extension.js.map +1 -1
- package/dist/src/config/settings.js +2 -2
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +31 -6
- package/dist/src/config/settingsSchema.js +24 -3
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/config/settingsSchema.test.js +62 -55
- package/dist/src/config/settingsSchema.test.js.map +1 -1
- package/dist/src/gemini.js +4 -37
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/nonInteractiveCli.js +75 -73
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/ui/AppContainer.js +40 -136
- package/dist/src/ui/AppContainer.js.map +1 -1
- package/dist/src/ui/AppContainer.test.js +199 -16
- package/dist/src/ui/AppContainer.test.js.map +1 -1
- package/dist/src/ui/components/AppHeader.js +5 -2
- package/dist/src/ui/components/AppHeader.js.map +1 -1
- package/dist/src/ui/components/Composer.js +2 -1
- package/dist/src/ui/components/Composer.js.map +1 -1
- package/dist/src/ui/components/ConfigInitDisplay.d.ts +6 -0
- package/dist/src/ui/components/ConfigInitDisplay.js +37 -0
- package/dist/src/ui/components/ConfigInitDisplay.js.map +1 -0
- package/dist/src/ui/components/DialogManager.js +2 -3
- package/dist/src/ui/components/DialogManager.js.map +1 -1
- package/dist/src/ui/components/GeminiRespondingSpinner.d.ts +5 -0
- package/dist/src/ui/components/GeminiRespondingSpinner.js +5 -1
- package/dist/src/ui/components/GeminiRespondingSpinner.js.map +1 -1
- package/dist/src/ui/components/ProQuotaDialog.d.ts +2 -2
- package/dist/src/ui/components/ProQuotaDialog.js +2 -2
- package/dist/src/ui/components/ProQuotaDialog.js.map +1 -1
- package/dist/src/ui/components/ProQuotaDialog.test.js +3 -3
- package/dist/src/ui/components/ProQuotaDialog.test.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.js +20 -5
- package/dist/src/ui/components/SettingsDialog.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.test.js +144 -79
- package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
- package/dist/src/ui/components/ThemeDialog.js +10 -27
- package/dist/src/ui/components/ThemeDialog.js.map +1 -1
- package/dist/src/ui/components/ThemeDialog.test.d.ts +6 -0
- package/dist/src/ui/components/ThemeDialog.test.js +65 -0
- package/dist/src/ui/components/ThemeDialog.test.js.map +1 -0
- package/dist/src/ui/components/shared/EnumSelector.d.ts +18 -0
- package/dist/src/ui/components/shared/EnumSelector.js +44 -0
- package/dist/src/ui/components/shared/EnumSelector.js.map +1 -0
- package/dist/src/ui/components/shared/EnumSelector.test.d.ts +6 -0
- package/dist/src/ui/components/shared/EnumSelector.test.js +70 -0
- package/dist/src/ui/components/shared/EnumSelector.test.js.map +1 -0
- package/dist/src/ui/components/shared/ScopeSelector.d.ts +19 -0
- package/dist/src/ui/components/shared/ScopeSelector.js +11 -0
- package/dist/src/ui/components/shared/ScopeSelector.js.map +1 -0
- package/dist/src/ui/contexts/UIStateContext.d.ts +8 -2
- package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
- package/dist/src/ui/hooks/useFolderTrust.d.ts +1 -2
- package/dist/src/ui/hooks/useFolderTrust.js +21 -8
- package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +36 -34
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useMessageQueue.d.ts +2 -1
- package/dist/src/ui/hooks/useMessageQueue.js +5 -3
- package/dist/src/ui/hooks/useMessageQueue.js.map +1 -1
- package/dist/src/ui/hooks/useMessageQueue.test.js +9 -0
- package/dist/src/ui/hooks/useMessageQueue.test.js.map +1 -1
- package/dist/src/ui/hooks/useQuotaAndFallback.d.ts +21 -0
- package/dist/src/ui/hooks/useQuotaAndFallback.js +122 -0
- package/dist/src/ui/hooks/useQuotaAndFallback.js.map +1 -0
- package/dist/src/ui/hooks/useQuotaAndFallback.test.d.ts +6 -0
- package/dist/src/ui/hooks/useQuotaAndFallback.test.js +269 -0
- package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +1 -0
- package/dist/src/utils/settingsUtils.d.ts +16 -6
- package/dist/src/utils/settingsUtils.js +35 -25
- package/dist/src/utils/settingsUtils.js.map +1 -1
- package/dist/src/utils/settingsUtils.test.js +418 -156
- package/dist/src/utils/settingsUtils.test.js.map +1 -1
- package/dist/src/zed-integration/schema.d.ts +4 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/dist/google-gemini-cli-0.3.4.tgz +0 -0
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { vi, describe, it, expect, beforeEach, afterEach, } from 'vitest';
|
|
7
|
+
import { act, renderHook } from '@testing-library/react';
|
|
8
|
+
import { UserTierId, AuthType, isGenericQuotaExceededError, isProQuotaExceededError, makeFakeConfig, } from '@google/gemini-cli-core';
|
|
9
|
+
import { useQuotaAndFallback } from './useQuotaAndFallback.js';
|
|
10
|
+
import { AuthState, MessageType } from '../types.js';
|
|
11
|
+
// Mock the error checking functions from the core package to control test scenarios
|
|
12
|
+
vi.mock('@google/gemini-cli-core', async (importOriginal) => {
|
|
13
|
+
const original = await importOriginal();
|
|
14
|
+
return {
|
|
15
|
+
...original,
|
|
16
|
+
isGenericQuotaExceededError: vi.fn(),
|
|
17
|
+
isProQuotaExceededError: vi.fn(),
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
describe('useQuotaAndFallback', () => {
|
|
21
|
+
let mockConfig;
|
|
22
|
+
let mockHistoryManager;
|
|
23
|
+
let mockSetAuthState;
|
|
24
|
+
let mockSetModelSwitchedFromQuotaError;
|
|
25
|
+
let setFallbackHandlerSpy;
|
|
26
|
+
const mockedIsGenericQuotaExceededError = isGenericQuotaExceededError;
|
|
27
|
+
const mockedIsProQuotaExceededError = isProQuotaExceededError;
|
|
28
|
+
beforeEach(() => {
|
|
29
|
+
mockConfig = makeFakeConfig();
|
|
30
|
+
// Spy on the method that requires the private field and mock its return.
|
|
31
|
+
// This is cleaner than modifying the config class for tests.
|
|
32
|
+
vi.spyOn(mockConfig, 'getContentGeneratorConfig').mockReturnValue({
|
|
33
|
+
model: 'gemini-pro',
|
|
34
|
+
authType: AuthType.LOGIN_WITH_GOOGLE,
|
|
35
|
+
});
|
|
36
|
+
mockHistoryManager = {
|
|
37
|
+
addItem: vi.fn(),
|
|
38
|
+
history: [],
|
|
39
|
+
updateItem: vi.fn(),
|
|
40
|
+
clearItems: vi.fn(),
|
|
41
|
+
loadHistory: vi.fn(),
|
|
42
|
+
};
|
|
43
|
+
mockSetAuthState = vi.fn();
|
|
44
|
+
mockSetModelSwitchedFromQuotaError = vi.fn();
|
|
45
|
+
setFallbackHandlerSpy = vi.spyOn(mockConfig, 'setFallbackModelHandler');
|
|
46
|
+
vi.spyOn(mockConfig, 'setQuotaErrorOccurred');
|
|
47
|
+
mockedIsGenericQuotaExceededError.mockReturnValue(false);
|
|
48
|
+
mockedIsProQuotaExceededError.mockReturnValue(false);
|
|
49
|
+
});
|
|
50
|
+
afterEach(() => {
|
|
51
|
+
vi.clearAllMocks();
|
|
52
|
+
});
|
|
53
|
+
it('should register a fallback handler on initialization', () => {
|
|
54
|
+
renderHook(() => useQuotaAndFallback({
|
|
55
|
+
config: mockConfig,
|
|
56
|
+
historyManager: mockHistoryManager,
|
|
57
|
+
userTier: UserTierId.FREE,
|
|
58
|
+
setAuthState: mockSetAuthState,
|
|
59
|
+
setModelSwitchedFromQuotaError: mockSetModelSwitchedFromQuotaError,
|
|
60
|
+
}));
|
|
61
|
+
expect(setFallbackHandlerSpy).toHaveBeenCalledTimes(1);
|
|
62
|
+
expect(setFallbackHandlerSpy.mock.calls[0][0]).toBeInstanceOf(Function);
|
|
63
|
+
});
|
|
64
|
+
describe('Fallback Handler Logic', () => {
|
|
65
|
+
// Helper function to render the hook and extract the registered handler
|
|
66
|
+
const getRegisteredHandler = (userTier = UserTierId.FREE) => {
|
|
67
|
+
renderHook((props) => useQuotaAndFallback({
|
|
68
|
+
config: mockConfig,
|
|
69
|
+
historyManager: mockHistoryManager,
|
|
70
|
+
userTier: props.userTier,
|
|
71
|
+
setAuthState: mockSetAuthState,
|
|
72
|
+
setModelSwitchedFromQuotaError: mockSetModelSwitchedFromQuotaError,
|
|
73
|
+
}), { initialProps: { userTier } });
|
|
74
|
+
return setFallbackHandlerSpy.mock.calls[0][0];
|
|
75
|
+
};
|
|
76
|
+
it('should return null and take no action if already in fallback mode', async () => {
|
|
77
|
+
vi.spyOn(mockConfig, 'isInFallbackMode').mockReturnValue(true);
|
|
78
|
+
const handler = getRegisteredHandler();
|
|
79
|
+
const result = await handler('gemini-pro', 'gemini-flash', new Error());
|
|
80
|
+
expect(result).toBeNull();
|
|
81
|
+
expect(mockHistoryManager.addItem).not.toHaveBeenCalled();
|
|
82
|
+
});
|
|
83
|
+
it('should return null and take no action if authType is not LOGIN_WITH_GOOGLE', async () => {
|
|
84
|
+
// Override the default mock from beforeEach for this specific test
|
|
85
|
+
vi.spyOn(mockConfig, 'getContentGeneratorConfig').mockReturnValue({
|
|
86
|
+
model: 'gemini-pro',
|
|
87
|
+
authType: AuthType.USE_GEMINI,
|
|
88
|
+
});
|
|
89
|
+
const handler = getRegisteredHandler();
|
|
90
|
+
const result = await handler('gemini-pro', 'gemini-flash', new Error());
|
|
91
|
+
expect(result).toBeNull();
|
|
92
|
+
expect(mockHistoryManager.addItem).not.toHaveBeenCalled();
|
|
93
|
+
});
|
|
94
|
+
describe('Automatic Fallback Scenarios', () => {
|
|
95
|
+
const testCases = [
|
|
96
|
+
{
|
|
97
|
+
errorType: 'generic',
|
|
98
|
+
tier: UserTierId.FREE,
|
|
99
|
+
expectedMessageSnippets: [
|
|
100
|
+
'Automatically switching from model-A to model-B',
|
|
101
|
+
'upgrade to a Gemini Code Assist Standard or Enterprise plan',
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
errorType: 'generic',
|
|
106
|
+
tier: UserTierId.STANDARD, // Paid tier
|
|
107
|
+
expectedMessageSnippets: [
|
|
108
|
+
'Automatically switching from model-A to model-B',
|
|
109
|
+
'switch to using a paid API key from AI Studio',
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
errorType: 'other',
|
|
114
|
+
tier: UserTierId.FREE,
|
|
115
|
+
expectedMessageSnippets: [
|
|
116
|
+
'Automatically switching from model-A to model-B for faster responses',
|
|
117
|
+
'upgrade to a Gemini Code Assist Standard or Enterprise plan',
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
errorType: 'other',
|
|
122
|
+
tier: UserTierId.LEGACY, // Paid tier
|
|
123
|
+
expectedMessageSnippets: [
|
|
124
|
+
'Automatically switching from model-A to model-B for faster responses',
|
|
125
|
+
'switch to using a paid API key from AI Studio',
|
|
126
|
+
],
|
|
127
|
+
},
|
|
128
|
+
];
|
|
129
|
+
for (const { errorType, tier, expectedMessageSnippets } of testCases) {
|
|
130
|
+
it(`should handle ${errorType} error for ${tier} tier correctly`, async () => {
|
|
131
|
+
mockedIsGenericQuotaExceededError.mockReturnValue(errorType === 'generic');
|
|
132
|
+
const handler = getRegisteredHandler(tier);
|
|
133
|
+
const result = await handler('model-A', 'model-B', new Error('quota exceeded'));
|
|
134
|
+
// Automatic fallbacks should return 'stop'
|
|
135
|
+
expect(result).toBe('stop');
|
|
136
|
+
expect(mockHistoryManager.addItem).toHaveBeenCalledWith(expect.objectContaining({ type: MessageType.INFO }), expect.any(Number));
|
|
137
|
+
const message = mockHistoryManager.addItem.mock.calls[0][0]
|
|
138
|
+
.text;
|
|
139
|
+
for (const snippet of expectedMessageSnippets) {
|
|
140
|
+
expect(message).toContain(snippet);
|
|
141
|
+
}
|
|
142
|
+
expect(mockSetModelSwitchedFromQuotaError).toHaveBeenCalledWith(true);
|
|
143
|
+
expect(mockConfig.setQuotaErrorOccurred).toHaveBeenCalledWith(true);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
describe('Interactive Fallback (Pro Quota Error)', () => {
|
|
148
|
+
beforeEach(() => {
|
|
149
|
+
mockedIsProQuotaExceededError.mockReturnValue(true);
|
|
150
|
+
});
|
|
151
|
+
it('should set an interactive request and wait for user choice', async () => {
|
|
152
|
+
const { result } = renderHook(() => useQuotaAndFallback({
|
|
153
|
+
config: mockConfig,
|
|
154
|
+
historyManager: mockHistoryManager,
|
|
155
|
+
userTier: UserTierId.FREE,
|
|
156
|
+
setAuthState: mockSetAuthState,
|
|
157
|
+
setModelSwitchedFromQuotaError: mockSetModelSwitchedFromQuotaError,
|
|
158
|
+
}));
|
|
159
|
+
const handler = setFallbackHandlerSpy.mock
|
|
160
|
+
.calls[0][0];
|
|
161
|
+
// Call the handler but do not await it, to check the intermediate state
|
|
162
|
+
const promise = handler('gemini-pro', 'gemini-flash', new Error('pro quota'));
|
|
163
|
+
await act(async () => { });
|
|
164
|
+
// The hook should now have a pending request for the UI to handle
|
|
165
|
+
expect(result.current.proQuotaRequest).not.toBeNull();
|
|
166
|
+
expect(result.current.proQuotaRequest?.failedModel).toBe('gemini-pro');
|
|
167
|
+
// Simulate the user choosing to continue with the fallback model
|
|
168
|
+
act(() => {
|
|
169
|
+
result.current.handleProQuotaChoice('continue');
|
|
170
|
+
});
|
|
171
|
+
// The original promise from the handler should now resolve
|
|
172
|
+
const intent = await promise;
|
|
173
|
+
expect(intent).toBe('retry');
|
|
174
|
+
// The pending request should be cleared from the state
|
|
175
|
+
expect(result.current.proQuotaRequest).toBeNull();
|
|
176
|
+
});
|
|
177
|
+
it('should handle race conditions by stopping subsequent requests', async () => {
|
|
178
|
+
const { result } = renderHook(() => useQuotaAndFallback({
|
|
179
|
+
config: mockConfig,
|
|
180
|
+
historyManager: mockHistoryManager,
|
|
181
|
+
userTier: UserTierId.FREE,
|
|
182
|
+
setAuthState: mockSetAuthState,
|
|
183
|
+
setModelSwitchedFromQuotaError: mockSetModelSwitchedFromQuotaError,
|
|
184
|
+
}));
|
|
185
|
+
const handler = setFallbackHandlerSpy.mock
|
|
186
|
+
.calls[0][0];
|
|
187
|
+
const promise1 = handler('gemini-pro', 'gemini-flash', new Error('pro quota 1'));
|
|
188
|
+
await act(async () => { });
|
|
189
|
+
const firstRequest = result.current.proQuotaRequest;
|
|
190
|
+
expect(firstRequest).not.toBeNull();
|
|
191
|
+
const result2 = await handler('gemini-pro', 'gemini-flash', new Error('pro quota 2'));
|
|
192
|
+
// The lock should have stopped the second request
|
|
193
|
+
expect(result2).toBe('stop');
|
|
194
|
+
expect(result.current.proQuotaRequest).toBe(firstRequest);
|
|
195
|
+
act(() => {
|
|
196
|
+
result.current.handleProQuotaChoice('continue');
|
|
197
|
+
});
|
|
198
|
+
const intent1 = await promise1;
|
|
199
|
+
expect(intent1).toBe('retry');
|
|
200
|
+
expect(result.current.proQuotaRequest).toBeNull();
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
describe('handleProQuotaChoice', () => {
|
|
205
|
+
beforeEach(() => {
|
|
206
|
+
mockedIsProQuotaExceededError.mockReturnValue(true);
|
|
207
|
+
});
|
|
208
|
+
it('should do nothing if there is no pending pro quota request', () => {
|
|
209
|
+
const { result } = renderHook(() => useQuotaAndFallback({
|
|
210
|
+
config: mockConfig,
|
|
211
|
+
historyManager: mockHistoryManager,
|
|
212
|
+
userTier: UserTierId.FREE,
|
|
213
|
+
setAuthState: mockSetAuthState,
|
|
214
|
+
setModelSwitchedFromQuotaError: mockSetModelSwitchedFromQuotaError,
|
|
215
|
+
}));
|
|
216
|
+
act(() => {
|
|
217
|
+
result.current.handleProQuotaChoice('auth');
|
|
218
|
+
});
|
|
219
|
+
expect(mockSetAuthState).not.toHaveBeenCalled();
|
|
220
|
+
expect(mockHistoryManager.addItem).not.toHaveBeenCalled();
|
|
221
|
+
});
|
|
222
|
+
it('should resolve intent to "auth" and trigger auth state update', async () => {
|
|
223
|
+
const { result } = renderHook(() => useQuotaAndFallback({
|
|
224
|
+
config: mockConfig,
|
|
225
|
+
historyManager: mockHistoryManager,
|
|
226
|
+
userTier: UserTierId.FREE,
|
|
227
|
+
setAuthState: mockSetAuthState,
|
|
228
|
+
setModelSwitchedFromQuotaError: mockSetModelSwitchedFromQuotaError,
|
|
229
|
+
}));
|
|
230
|
+
const handler = setFallbackHandlerSpy.mock
|
|
231
|
+
.calls[0][0];
|
|
232
|
+
const promise = handler('gemini-pro', 'gemini-flash', new Error('pro quota'));
|
|
233
|
+
await act(async () => { }); // Allow state to update
|
|
234
|
+
act(() => {
|
|
235
|
+
result.current.handleProQuotaChoice('auth');
|
|
236
|
+
});
|
|
237
|
+
const intent = await promise;
|
|
238
|
+
expect(intent).toBe('auth');
|
|
239
|
+
expect(mockSetAuthState).toHaveBeenCalledWith(AuthState.Updating);
|
|
240
|
+
expect(result.current.proQuotaRequest).toBeNull();
|
|
241
|
+
});
|
|
242
|
+
it('should resolve intent to "retry" and add info message on continue', async () => {
|
|
243
|
+
const { result } = renderHook(() => useQuotaAndFallback({
|
|
244
|
+
config: mockConfig,
|
|
245
|
+
historyManager: mockHistoryManager,
|
|
246
|
+
userTier: UserTierId.FREE,
|
|
247
|
+
setAuthState: mockSetAuthState,
|
|
248
|
+
setModelSwitchedFromQuotaError: mockSetModelSwitchedFromQuotaError,
|
|
249
|
+
}));
|
|
250
|
+
const handler = setFallbackHandlerSpy.mock
|
|
251
|
+
.calls[0][0];
|
|
252
|
+
// The first `addItem` call is for the initial quota error message
|
|
253
|
+
const promise = handler('gemini-pro', 'gemini-flash', new Error('pro quota'));
|
|
254
|
+
await act(async () => { }); // Allow state to update
|
|
255
|
+
act(() => {
|
|
256
|
+
result.current.handleProQuotaChoice('continue');
|
|
257
|
+
});
|
|
258
|
+
const intent = await promise;
|
|
259
|
+
expect(intent).toBe('retry');
|
|
260
|
+
expect(result.current.proQuotaRequest).toBeNull();
|
|
261
|
+
// Check for the second "Switched to fallback model" message
|
|
262
|
+
expect(mockHistoryManager.addItem).toHaveBeenCalledTimes(2);
|
|
263
|
+
const lastCall = mockHistoryManager.addItem.mock.calls[1][0];
|
|
264
|
+
expect(lastCall.type).toBe(MessageType.INFO);
|
|
265
|
+
expect(lastCall.text).toContain('Switched to fallback model.');
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
//# sourceMappingURL=useQuotaAndFallback.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useQuotaAndFallback.test.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useQuotaAndFallback.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,13 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import type { Settings, SettingScope, LoadedSettings } from '../config/settings.js';
|
|
7
|
-
import type { SettingDefinition } from '../config/settingsSchema.js';
|
|
7
|
+
import type { SettingDefinition, SettingsType, SettingsValue } from '../config/settingsSchema.js';
|
|
8
|
+
type FlattenedSchema = Record<string, SettingDefinition & {
|
|
9
|
+
key: string;
|
|
10
|
+
}>;
|
|
11
|
+
/** Returns a flattened schema, the first call is memoized for future requests. */
|
|
12
|
+
export declare function getFlattenedSchema(): FlattenedSchema;
|
|
13
|
+
declare function clearFlattenedSchema(): void;
|
|
8
14
|
/**
|
|
9
15
|
* Get all settings grouped by category
|
|
10
16
|
*/
|
|
@@ -24,7 +30,7 @@ export declare function requiresRestart(key: string): boolean;
|
|
|
24
30
|
/**
|
|
25
31
|
* Get the default value for a setting
|
|
26
32
|
*/
|
|
27
|
-
export declare function getDefaultValue(key: string):
|
|
33
|
+
export declare function getDefaultValue(key: string): SettingsValue;
|
|
28
34
|
/**
|
|
29
35
|
* Get all setting keys that require restart
|
|
30
36
|
*/
|
|
@@ -37,7 +43,7 @@ export declare function getNestedValue(obj: Record<string, unknown>, path: strin
|
|
|
37
43
|
* Get the effective value for a setting, considering inheritance from higher scopes
|
|
38
44
|
* Always returns a value (never undefined) - falls back to default if not set anywhere
|
|
39
45
|
*/
|
|
40
|
-
export declare function getEffectiveValue(key: string, settings: Settings, mergedSettings: Settings):
|
|
46
|
+
export declare function getEffectiveValue(key: string, settings: Settings, mergedSettings: Settings): SettingsValue;
|
|
41
47
|
/**
|
|
42
48
|
* Get all setting keys from the schema
|
|
43
49
|
*/
|
|
@@ -45,7 +51,7 @@ export declare function getAllSettingKeys(): string[];
|
|
|
45
51
|
/**
|
|
46
52
|
* Get settings by type
|
|
47
53
|
*/
|
|
48
|
-
export declare function getSettingsByType(type:
|
|
54
|
+
export declare function getSettingsByType(type: SettingsType): Array<SettingDefinition & {
|
|
49
55
|
key: string;
|
|
50
56
|
}>;
|
|
51
57
|
/**
|
|
@@ -75,7 +81,7 @@ export declare function getDialogSettingsByCategory(): Record<string, Array<Sett
|
|
|
75
81
|
/**
|
|
76
82
|
* Get settings by type that should be shown in the dialog
|
|
77
83
|
*/
|
|
78
|
-
export declare function getDialogSettingsByType(type:
|
|
84
|
+
export declare function getDialogSettingsByType(type: SettingsType): Array<SettingDefinition & {
|
|
79
85
|
key: string;
|
|
80
86
|
}>;
|
|
81
87
|
/**
|
|
@@ -102,7 +108,7 @@ export declare function setPendingSettingValue(key: string, value: boolean, pend
|
|
|
102
108
|
/**
|
|
103
109
|
* Generic setter: Set a setting value (boolean, number, string, etc.) in the pending settings
|
|
104
110
|
*/
|
|
105
|
-
export declare function setPendingSettingValueAny(key: string, value:
|
|
111
|
+
export declare function setPendingSettingValueAny(key: string, value: SettingsValue, pendingSettings: Settings): Settings;
|
|
106
112
|
/**
|
|
107
113
|
* Check if any modified settings require a restart
|
|
108
114
|
*/
|
|
@@ -132,3 +138,7 @@ export declare function isValueInherited(key: string, settings: Settings, _merge
|
|
|
132
138
|
* Always returns a boolean value (never undefined)
|
|
133
139
|
*/
|
|
134
140
|
export declare function getEffectiveDisplayValue(key: string, settings: Settings, mergedSettings: Settings): boolean;
|
|
141
|
+
export declare const TEST_ONLY: {
|
|
142
|
+
clearFlattenedSchema: typeof clearFlattenedSchema;
|
|
143
|
+
};
|
|
144
|
+
export {};
|
|
@@ -3,10 +3,7 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
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.
|
|
6
|
+
import { getSettingsSchema } from '../config/settingsSchema.js';
|
|
10
7
|
function flattenSchema(schema, prefix = '') {
|
|
11
8
|
let result = {};
|
|
12
9
|
for (const key in schema) {
|
|
@@ -19,13 +16,21 @@ function flattenSchema(schema, prefix = '') {
|
|
|
19
16
|
}
|
|
20
17
|
return result;
|
|
21
18
|
}
|
|
22
|
-
|
|
19
|
+
let _FLATTENED_SCHEMA;
|
|
20
|
+
/** Returns a flattened schema, the first call is memoized for future requests. */
|
|
21
|
+
export function getFlattenedSchema() {
|
|
22
|
+
return (_FLATTENED_SCHEMA ??
|
|
23
|
+
(_FLATTENED_SCHEMA = flattenSchema(getSettingsSchema())));
|
|
24
|
+
}
|
|
25
|
+
function clearFlattenedSchema() {
|
|
26
|
+
_FLATTENED_SCHEMA = undefined;
|
|
27
|
+
}
|
|
23
28
|
/**
|
|
24
29
|
* Get all settings grouped by category
|
|
25
30
|
*/
|
|
26
31
|
export function getSettingsByCategory() {
|
|
27
32
|
const categories = {};
|
|
28
|
-
Object.values(
|
|
33
|
+
Object.values(getFlattenedSchema()).forEach((definition) => {
|
|
29
34
|
const category = definition.category;
|
|
30
35
|
if (!categories[category]) {
|
|
31
36
|
categories[category] = [];
|
|
@@ -38,25 +43,25 @@ export function getSettingsByCategory() {
|
|
|
38
43
|
* Get a setting definition by key
|
|
39
44
|
*/
|
|
40
45
|
export function getSettingDefinition(key) {
|
|
41
|
-
return
|
|
46
|
+
return getFlattenedSchema()[key];
|
|
42
47
|
}
|
|
43
48
|
/**
|
|
44
49
|
* Check if a setting requires restart
|
|
45
50
|
*/
|
|
46
51
|
export function requiresRestart(key) {
|
|
47
|
-
return
|
|
52
|
+
return getFlattenedSchema()[key]?.requiresRestart ?? false;
|
|
48
53
|
}
|
|
49
54
|
/**
|
|
50
55
|
* Get the default value for a setting
|
|
51
56
|
*/
|
|
52
57
|
export function getDefaultValue(key) {
|
|
53
|
-
return
|
|
58
|
+
return getFlattenedSchema()[key]?.default;
|
|
54
59
|
}
|
|
55
60
|
/**
|
|
56
61
|
* Get all setting keys that require restart
|
|
57
62
|
*/
|
|
58
63
|
export function getRestartRequiredSettings() {
|
|
59
|
-
return Object.values(
|
|
64
|
+
return Object.values(getFlattenedSchema())
|
|
60
65
|
.filter((definition) => definition.requiresRestart)
|
|
61
66
|
.map((definition) => definition.key);
|
|
62
67
|
}
|
|
@@ -104,44 +109,44 @@ export function getEffectiveValue(key, settings, mergedSettings) {
|
|
|
104
109
|
* Get all setting keys from the schema
|
|
105
110
|
*/
|
|
106
111
|
export function getAllSettingKeys() {
|
|
107
|
-
return Object.keys(
|
|
112
|
+
return Object.keys(getFlattenedSchema());
|
|
108
113
|
}
|
|
109
114
|
/**
|
|
110
115
|
* Get settings by type
|
|
111
116
|
*/
|
|
112
117
|
export function getSettingsByType(type) {
|
|
113
|
-
return Object.values(
|
|
118
|
+
return Object.values(getFlattenedSchema()).filter((definition) => definition.type === type);
|
|
114
119
|
}
|
|
115
120
|
/**
|
|
116
121
|
* Get settings that require restart
|
|
117
122
|
*/
|
|
118
123
|
export function getSettingsRequiringRestart() {
|
|
119
|
-
return Object.values(
|
|
124
|
+
return Object.values(getFlattenedSchema()).filter((definition) => definition.requiresRestart);
|
|
120
125
|
}
|
|
121
126
|
/**
|
|
122
127
|
* Validate if a setting key exists in the schema
|
|
123
128
|
*/
|
|
124
129
|
export function isValidSettingKey(key) {
|
|
125
|
-
return key in
|
|
130
|
+
return key in getFlattenedSchema();
|
|
126
131
|
}
|
|
127
132
|
/**
|
|
128
133
|
* Get the category for a setting
|
|
129
134
|
*/
|
|
130
135
|
export function getSettingCategory(key) {
|
|
131
|
-
return
|
|
136
|
+
return getFlattenedSchema()[key]?.category;
|
|
132
137
|
}
|
|
133
138
|
/**
|
|
134
139
|
* Check if a setting should be shown in the settings dialog
|
|
135
140
|
*/
|
|
136
141
|
export function shouldShowInDialog(key) {
|
|
137
|
-
return
|
|
142
|
+
return getFlattenedSchema()[key]?.showInDialog ?? true; // Default to true for backward compatibility
|
|
138
143
|
}
|
|
139
144
|
/**
|
|
140
145
|
* Get all settings that should be shown in the dialog, grouped by category
|
|
141
146
|
*/
|
|
142
147
|
export function getDialogSettingsByCategory() {
|
|
143
148
|
const categories = {};
|
|
144
|
-
Object.values(
|
|
149
|
+
Object.values(getFlattenedSchema())
|
|
145
150
|
.filter((definition) => definition.showInDialog !== false)
|
|
146
151
|
.forEach((definition) => {
|
|
147
152
|
const category = definition.category;
|
|
@@ -156,13 +161,13 @@ export function getDialogSettingsByCategory() {
|
|
|
156
161
|
* Get settings by type that should be shown in the dialog
|
|
157
162
|
*/
|
|
158
163
|
export function getDialogSettingsByType(type) {
|
|
159
|
-
return Object.values(
|
|
164
|
+
return Object.values(getFlattenedSchema()).filter((definition) => definition.type === type && definition.showInDialog !== false);
|
|
160
165
|
}
|
|
161
166
|
/**
|
|
162
167
|
* Get all setting keys that should be shown in the dialog
|
|
163
168
|
*/
|
|
164
169
|
export function getDialogSettingKeys() {
|
|
165
|
-
return Object.values(
|
|
170
|
+
return Object.values(getFlattenedSchema())
|
|
166
171
|
.filter((definition) => definition.showInDialog !== false)
|
|
167
172
|
.map((definition) => definition.key);
|
|
168
173
|
}
|
|
@@ -280,24 +285,28 @@ export function saveModifiedSettings(modifiedSettings, pendingSettings, loadedSe
|
|
|
280
285
|
*/
|
|
281
286
|
export function getDisplayValue(key, settings, _mergedSettings, modifiedSettings, pendingSettings) {
|
|
282
287
|
// Prioritize pending changes if user has modified this setting
|
|
288
|
+
const definition = getSettingDefinition(key);
|
|
283
289
|
let value;
|
|
284
290
|
if (pendingSettings && settingExistsInScope(key, pendingSettings)) {
|
|
285
291
|
// Show the value from the pending (unsaved) edits when it exists
|
|
286
|
-
value =
|
|
292
|
+
value = getEffectiveValue(key, pendingSettings, {});
|
|
287
293
|
}
|
|
288
294
|
else if (settingExistsInScope(key, settings)) {
|
|
289
295
|
// Show the value defined at the current scope if present
|
|
290
|
-
value =
|
|
296
|
+
value = getEffectiveValue(key, settings, {});
|
|
291
297
|
}
|
|
292
298
|
else {
|
|
293
299
|
// Fall back to the schema default when the key is unset in this scope
|
|
294
|
-
|
|
295
|
-
|
|
300
|
+
value = getDefaultValue(key);
|
|
301
|
+
}
|
|
302
|
+
let valueString = String(value);
|
|
303
|
+
if (definition?.type === 'enum' && definition.options) {
|
|
304
|
+
const option = definition.options?.find((option) => option.value === value);
|
|
305
|
+
valueString = option?.label ?? `${value}`;
|
|
296
306
|
}
|
|
297
|
-
const valueString = String(value);
|
|
298
307
|
// Check if value is different from default OR if it's in modified settings OR if there are pending changes
|
|
299
308
|
const defaultValue = getDefaultValue(key);
|
|
300
|
-
const isChangedFromDefault =
|
|
309
|
+
const isChangedFromDefault = value !== defaultValue;
|
|
301
310
|
const isInModifiedSettings = modifiedSettings.has(key);
|
|
302
311
|
// Mark as modified if setting exists in current scope OR is in modified settings
|
|
303
312
|
if (settingExistsInScope(key, settings) || isInModifiedSettings) {
|
|
@@ -327,4 +336,5 @@ export function isValueInherited(key, settings, _mergedSettings) {
|
|
|
327
336
|
export function getEffectiveDisplayValue(key, settings, mergedSettings) {
|
|
328
337
|
return getSettingValue(key, settings, mergedSettings);
|
|
329
338
|
}
|
|
339
|
+
export const TEST_ONLY = { clearFlattenedSchema };
|
|
330
340
|
//# sourceMappingURL=settingsUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settingsUtils.js","sourceRoot":"","sources":["../../../src/utils/settingsUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"settingsUtils.js","sourceRoot":"","sources":["../../../src/utils/settingsUtils.ts"],"names":[],"mappings":"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"}
|