@google/gemini-cli-core 0.2.0-preview.0 → 0.3.0-nightly.20250822.15c62bad

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/README.md +32 -2
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/code_assist/oauth2.js +9 -15
  6. package/dist/src/code_assist/oauth2.js.map +1 -1
  7. package/dist/src/code_assist/oauth2.test.js +6 -4
  8. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  9. package/dist/src/config/config.d.ts +7 -2
  10. package/dist/src/config/config.js +14 -10
  11. package/dist/src/config/config.js.map +1 -1
  12. package/dist/src/config/config.test.js +3 -2
  13. package/dist/src/config/config.test.js.map +1 -1
  14. package/dist/src/config/storage.d.ts +32 -0
  15. package/dist/src/config/storage.js +90 -0
  16. package/dist/src/config/storage.js.map +1 -0
  17. package/dist/src/config/storage.test.js +43 -0
  18. package/dist/src/config/storage.test.js.map +1 -0
  19. package/dist/src/core/contentGenerator.js +3 -2
  20. package/dist/src/core/contentGenerator.js.map +1 -1
  21. package/dist/src/core/coreToolScheduler.d.ts +2 -3
  22. package/dist/src/core/coreToolScheduler.js +1 -1
  23. package/dist/src/core/coreToolScheduler.js.map +1 -1
  24. package/dist/src/core/coreToolScheduler.test.js +10 -11
  25. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  26. package/dist/src/core/logger.d.ts +3 -1
  27. package/dist/src/core/logger.js +4 -3
  28. package/dist/src/core/logger.js.map +1 -1
  29. package/dist/src/core/logger.test.js +17 -16
  30. package/dist/src/core/logger.test.js.map +1 -1
  31. package/dist/src/core/nonInteractiveToolExecutor.d.ts +3 -5
  32. package/dist/src/core/nonInteractiveToolExecutor.js +14 -122
  33. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
  34. package/dist/src/core/nonInteractiveToolExecutor.test.js +56 -53
  35. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  36. package/dist/src/core/turn.js +4 -4
  37. package/dist/src/core/turn.js.map +1 -1
  38. package/dist/src/core/turn.test.js +19 -0
  39. package/dist/src/core/turn.test.js.map +1 -1
  40. package/dist/src/generated/git-commit.d.ts +2 -2
  41. package/dist/src/generated/git-commit.js +2 -2
  42. package/dist/src/generated/git-commit.js.map +1 -1
  43. package/dist/src/ide/ide-client.d.ts +4 -2
  44. package/dist/src/ide/ide-client.js +82 -11
  45. package/dist/src/ide/ide-client.js.map +1 -1
  46. package/dist/src/ide/ide-client.test.js +141 -33
  47. package/dist/src/ide/ide-client.test.js.map +1 -1
  48. package/dist/src/ide/ideContext.d.ts +5 -5
  49. package/dist/src/index.d.ts +2 -0
  50. package/dist/src/index.js +2 -0
  51. package/dist/src/index.js.map +1 -1
  52. package/dist/src/mcp/oauth-token-storage.d.ts +0 -2
  53. package/dist/src/mcp/oauth-token-storage.js +2 -5
  54. package/dist/src/mcp/oauth-token-storage.js.map +1 -1
  55. package/dist/src/mcp/oauth-token-storage.test.js +1 -0
  56. package/dist/src/mcp/oauth-token-storage.test.js.map +1 -1
  57. package/dist/src/services/chatRecordingService.js +2 -2
  58. package/dist/src/services/chatRecordingService.js.map +1 -1
  59. package/dist/src/services/chatRecordingService.test.js +5 -3
  60. package/dist/src/services/chatRecordingService.test.js.map +1 -1
  61. package/dist/src/services/gitService.d.ts +3 -1
  62. package/dist/src/services/gitService.js +4 -5
  63. package/dist/src/services/gitService.js.map +1 -1
  64. package/dist/src/services/gitService.test.js +17 -14
  65. package/dist/src/services/gitService.test.js.map +1 -1
  66. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +3 -1
  67. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +25 -7
  68. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  69. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +66 -9
  70. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  71. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +4 -1
  72. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +6 -0
  73. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  74. package/dist/src/telemetry/loggers.js +3 -0
  75. package/dist/src/telemetry/loggers.js.map +1 -1
  76. package/dist/src/telemetry/loggers.test.js +4 -0
  77. package/dist/src/telemetry/loggers.test.js.map +1 -1
  78. package/dist/src/telemetry/types.d.ts +5 -1
  79. package/dist/src/telemetry/types.js +14 -1
  80. package/dist/src/telemetry/types.js.map +1 -1
  81. package/dist/src/tools/glob.js +13 -2
  82. package/dist/src/tools/glob.js.map +1 -1
  83. package/dist/src/tools/glob.test.js +23 -1
  84. package/dist/src/tools/glob.test.js.map +1 -1
  85. package/dist/src/tools/grep.js +5 -0
  86. package/dist/src/tools/grep.js.map +1 -1
  87. package/dist/src/tools/grep.test.js +11 -0
  88. package/dist/src/tools/grep.test.js.map +1 -1
  89. package/dist/src/tools/ls.js +9 -4
  90. package/dist/src/tools/ls.js.map +1 -1
  91. package/dist/src/tools/ls.test.js +5 -0
  92. package/dist/src/tools/ls.test.js.map +1 -1
  93. package/dist/src/tools/mcp-client.d.ts +7 -0
  94. package/dist/src/tools/mcp-client.js +26 -21
  95. package/dist/src/tools/mcp-client.js.map +1 -1
  96. package/dist/src/tools/mcp-client.test.js +26 -1
  97. package/dist/src/tools/mcp-client.test.js.map +1 -1
  98. package/dist/src/tools/mcp-tool.js +12 -2
  99. package/dist/src/tools/mcp-tool.js.map +1 -1
  100. package/dist/src/tools/mcp-tool.test.js +15 -3
  101. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  102. package/dist/src/tools/memoryTool.js +7 -2
  103. package/dist/src/tools/memoryTool.js.map +1 -1
  104. package/dist/src/tools/memoryTool.test.js +13 -1
  105. package/dist/src/tools/memoryTool.test.js.map +1 -1
  106. package/dist/src/tools/read-file.js +2 -30
  107. package/dist/src/tools/read-file.js.map +1 -1
  108. package/dist/src/tools/read-file.test.js +1 -1
  109. package/dist/src/tools/read-many-files.js +7 -7
  110. package/dist/src/tools/read-many-files.js.map +1 -1
  111. package/dist/src/tools/read-many-files.test.js +21 -0
  112. package/dist/src/tools/read-many-files.test.js.map +1 -1
  113. package/dist/src/tools/tool-error.d.ts +16 -1
  114. package/dist/src/tools/tool-error.js +24 -0
  115. package/dist/src/tools/tool-error.js.map +1 -1
  116. package/dist/src/tools/tool-registry.js +7 -1
  117. package/dist/src/tools/tool-registry.js.map +1 -1
  118. package/dist/src/tools/tool-registry.test.js +71 -1
  119. package/dist/src/tools/tool-registry.test.js.map +1 -1
  120. package/dist/src/tools/tools.d.ts +1 -5
  121. package/dist/src/tools/tools.js.map +1 -1
  122. package/dist/src/tools/tools.test.js +0 -1
  123. package/dist/src/tools/tools.test.js.map +1 -1
  124. package/dist/src/tools/web-fetch.js +9 -6
  125. package/dist/src/tools/web-fetch.js.map +1 -1
  126. package/dist/src/tools/web-fetch.test.js +55 -16
  127. package/dist/src/tools/web-fetch.test.js.map +1 -1
  128. package/dist/src/tools/web-search.js +5 -0
  129. package/dist/src/tools/web-search.js.map +1 -1
  130. package/dist/src/tools/web-search.test.js +3 -1
  131. package/dist/src/tools/web-search.test.js.map +1 -1
  132. package/dist/src/utils/editCorrector.test.js +1 -0
  133. package/dist/src/utils/editCorrector.test.js.map +1 -1
  134. package/dist/src/utils/fileUtils.d.ts +2 -7
  135. package/dist/src/utils/fileUtils.js +14 -17
  136. package/dist/src/utils/fileUtils.js.map +1 -1
  137. package/dist/src/utils/filesearch/fileSearch.js +2 -1
  138. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  139. package/dist/src/utils/filesearch/fileSearch.test.js +22 -0
  140. package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -1
  141. package/dist/src/utils/installationManager.d.ts +16 -0
  142. package/dist/src/utils/installationManager.js +50 -0
  143. package/dist/src/utils/installationManager.js.map +1 -0
  144. package/dist/src/utils/installationManager.test.js +83 -0
  145. package/dist/src/utils/installationManager.test.js.map +1 -0
  146. package/dist/src/utils/memoryDiscovery.js +54 -20
  147. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  148. package/dist/src/utils/memoryDiscovery.test.js +37 -0
  149. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  150. package/dist/src/utils/paths.d.ts +0 -17
  151. package/dist/src/utils/paths.js +0 -26
  152. package/dist/src/utils/paths.js.map +1 -1
  153. package/dist/src/utils/userAccountManager.d.ts +20 -0
  154. package/dist/src/utils/userAccountManager.js +114 -0
  155. package/dist/src/utils/userAccountManager.js.map +1 -0
  156. package/dist/src/utils/userAccountManager.test.d.ts +6 -0
  157. package/dist/src/utils/{user_account.test.js → userAccountManager.test.js} +33 -30
  158. package/dist/src/utils/userAccountManager.test.js.map +1 -0
  159. package/dist/tsconfig.tsbuildinfo +1 -1
  160. package/package.json +1 -1
  161. package/dist/src/utils/user_account.d.ts +0 -9
  162. package/dist/src/utils/user_account.js +0 -109
  163. package/dist/src/utils/user_account.js.map +0 -1
  164. package/dist/src/utils/user_account.test.js.map +0 -1
  165. package/dist/src/utils/user_id.d.ts +0 -11
  166. package/dist/src/utils/user_id.js +0 -49
  167. package/dist/src/utils/user_id.js.map +0 -1
  168. package/dist/src/utils/user_id.test.js +0 -21
  169. package/dist/src/utils/user_id.test.js.map +0 -1
  170. /package/dist/src/{utils/user_account.test.d.ts → config/storage.test.d.ts} +0 -0
  171. /package/dist/src/utils/{user_id.test.d.ts → installationManager.test.d.ts} +0 -0
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest';
7
- import { cacheGoogleAccount, getCachedGoogleAccount, clearCachedGoogleAccount, getLifetimeGoogleAccounts, } from './user_account.js';
7
+ import { UserAccountManager } from './userAccountManager.js';
8
8
  import * as fs from 'node:fs';
9
9
  import * as os from 'node:os';
10
10
  import path from 'node:path';
@@ -15,12 +15,15 @@ vi.mock('os', async (importOriginal) => {
15
15
  homedir: vi.fn(),
16
16
  };
17
17
  });
18
- describe('user_account', () => {
18
+ describe('UserAccountManager', () => {
19
19
  let tempHomeDir;
20
- const accountsFile = () => path.join(tempHomeDir, '.gemini', 'google_accounts.json');
20
+ let userAccountManager;
21
+ let accountsFile;
21
22
  beforeEach(() => {
22
23
  tempHomeDir = fs.mkdtempSync(path.join(os.tmpdir(), 'gemini-cli-test-home-'));
23
24
  os.homedir.mockReturnValue(tempHomeDir);
25
+ accountsFile = () => path.join(tempHomeDir, '.gemini', 'google_accounts.json');
26
+ userAccountManager = new UserAccountManager();
24
27
  });
25
28
  afterEach(() => {
26
29
  fs.rmSync(tempHomeDir, { recursive: true, force: true });
@@ -28,7 +31,7 @@ describe('user_account', () => {
28
31
  });
29
32
  describe('cacheGoogleAccount', () => {
30
33
  it('should create directory and write initial account file', async () => {
31
- await cacheGoogleAccount('test1@google.com');
34
+ await userAccountManager.cacheGoogleAccount('test1@google.com');
32
35
  // Verify Google Account ID was cached
33
36
  expect(fs.existsSync(accountsFile())).toBe(true);
34
37
  expect(fs.readFileSync(accountsFile(), 'utf-8')).toBe(JSON.stringify({ active: 'test1@google.com', old: [] }, null, 2));
@@ -36,7 +39,7 @@ describe('user_account', () => {
36
39
  it('should update active account and move previous to old', async () => {
37
40
  fs.mkdirSync(path.dirname(accountsFile()), { recursive: true });
38
41
  fs.writeFileSync(accountsFile(), JSON.stringify({ active: 'test2@google.com', old: ['test1@google.com'] }, null, 2));
39
- await cacheGoogleAccount('test3@google.com');
42
+ await userAccountManager.cacheGoogleAccount('test3@google.com');
40
43
  expect(fs.readFileSync(accountsFile(), 'utf-8')).toBe(JSON.stringify({
41
44
  active: 'test3@google.com',
42
45
  old: ['test1@google.com', 'test2@google.com'],
@@ -45,8 +48,8 @@ describe('user_account', () => {
45
48
  it('should not add a duplicate to the old list', async () => {
46
49
  fs.mkdirSync(path.dirname(accountsFile()), { recursive: true });
47
50
  fs.writeFileSync(accountsFile(), JSON.stringify({ active: 'test1@google.com', old: ['test2@google.com'] }, null, 2));
48
- await cacheGoogleAccount('test2@google.com');
49
- await cacheGoogleAccount('test1@google.com');
51
+ await userAccountManager.cacheGoogleAccount('test2@google.com');
52
+ await userAccountManager.cacheGoogleAccount('test1@google.com');
50
53
  expect(fs.readFileSync(accountsFile(), 'utf-8')).toBe(JSON.stringify({ active: 'test1@google.com', old: ['test2@google.com'] }, null, 2));
51
54
  });
52
55
  it('should handle corrupted JSON by starting fresh', async () => {
@@ -55,7 +58,7 @@ describe('user_account', () => {
55
58
  const consoleLogSpy = vi
56
59
  .spyOn(console, 'log')
57
60
  .mockImplementation(() => { });
58
- await cacheGoogleAccount('test1@google.com');
61
+ await userAccountManager.cacheGoogleAccount('test1@google.com');
59
62
  expect(consoleLogSpy).toHaveBeenCalled();
60
63
  expect(JSON.parse(fs.readFileSync(accountsFile(), 'utf-8'))).toEqual({
61
64
  active: 'test1@google.com',
@@ -68,7 +71,7 @@ describe('user_account', () => {
68
71
  const consoleLogSpy = vi
69
72
  .spyOn(console, 'log')
70
73
  .mockImplementation(() => { });
71
- await cacheGoogleAccount('test2@google.com');
74
+ await userAccountManager.cacheGoogleAccount('test2@google.com');
72
75
  expect(consoleLogSpy).toHaveBeenCalled();
73
76
  expect(JSON.parse(fs.readFileSync(accountsFile(), 'utf-8'))).toEqual({
74
77
  active: 'test2@google.com',
@@ -80,17 +83,17 @@ describe('user_account', () => {
80
83
  it('should return the active account if file exists and is valid', () => {
81
84
  fs.mkdirSync(path.dirname(accountsFile()), { recursive: true });
82
85
  fs.writeFileSync(accountsFile(), JSON.stringify({ active: 'active@google.com', old: [] }, null, 2));
83
- const account = getCachedGoogleAccount();
86
+ const account = userAccountManager.getCachedGoogleAccount();
84
87
  expect(account).toBe('active@google.com');
85
88
  });
86
89
  it('should return null if file does not exist', () => {
87
- const account = getCachedGoogleAccount();
90
+ const account = userAccountManager.getCachedGoogleAccount();
88
91
  expect(account).toBeNull();
89
92
  });
90
93
  it('should return null if file is empty', () => {
91
94
  fs.mkdirSync(path.dirname(accountsFile()), { recursive: true });
92
95
  fs.writeFileSync(accountsFile(), '');
93
- const account = getCachedGoogleAccount();
96
+ const account = userAccountManager.getCachedGoogleAccount();
94
97
  expect(account).toBeNull();
95
98
  });
96
99
  it('should return null and log if file is corrupted', () => {
@@ -99,14 +102,14 @@ describe('user_account', () => {
99
102
  const consoleLogSpy = vi
100
103
  .spyOn(console, 'log')
101
104
  .mockImplementation(() => { });
102
- const account = getCachedGoogleAccount();
105
+ const account = userAccountManager.getCachedGoogleAccount();
103
106
  expect(account).toBeNull();
104
107
  expect(consoleLogSpy).toHaveBeenCalled();
105
108
  });
106
109
  it('should return null if active key is missing', () => {
107
110
  fs.mkdirSync(path.dirname(accountsFile()), { recursive: true });
108
111
  fs.writeFileSync(accountsFile(), JSON.stringify({ old: [] }));
109
- const account = getCachedGoogleAccount();
112
+ const account = userAccountManager.getCachedGoogleAccount();
110
113
  expect(account).toBeNull();
111
114
  });
112
115
  });
@@ -114,7 +117,7 @@ describe('user_account', () => {
114
117
  it('should set active to null and move it to old', async () => {
115
118
  fs.mkdirSync(path.dirname(accountsFile()), { recursive: true });
116
119
  fs.writeFileSync(accountsFile(), JSON.stringify({ active: 'active@google.com', old: ['old1@google.com'] }, null, 2));
117
- await clearCachedGoogleAccount();
120
+ await userAccountManager.clearCachedGoogleAccount();
118
121
  const stored = JSON.parse(fs.readFileSync(accountsFile(), 'utf-8'));
119
122
  expect(stored.active).toBeNull();
120
123
  expect(stored.old).toEqual(['old1@google.com', 'active@google.com']);
@@ -122,7 +125,7 @@ describe('user_account', () => {
122
125
  it('should handle empty file gracefully', async () => {
123
126
  fs.mkdirSync(path.dirname(accountsFile()), { recursive: true });
124
127
  fs.writeFileSync(accountsFile(), '');
125
- await clearCachedGoogleAccount();
128
+ await userAccountManager.clearCachedGoogleAccount();
126
129
  const stored = JSON.parse(fs.readFileSync(accountsFile(), 'utf-8'));
127
130
  expect(stored.active).toBeNull();
128
131
  expect(stored.old).toEqual([]);
@@ -133,7 +136,7 @@ describe('user_account', () => {
133
136
  const consoleLogSpy = vi
134
137
  .spyOn(console, 'log')
135
138
  .mockImplementation(() => { });
136
- await clearCachedGoogleAccount();
139
+ await userAccountManager.clearCachedGoogleAccount();
137
140
  expect(consoleLogSpy).toHaveBeenCalled();
138
141
  const stored = JSON.parse(fs.readFileSync(accountsFile(), 'utf-8'));
139
142
  expect(stored.active).toBeNull();
@@ -142,7 +145,7 @@ describe('user_account', () => {
142
145
  it('should be idempotent if active account is already null', async () => {
143
146
  fs.mkdirSync(path.dirname(accountsFile()), { recursive: true });
144
147
  fs.writeFileSync(accountsFile(), JSON.stringify({ active: null, old: ['old1@google.com'] }, null, 2));
145
- await clearCachedGoogleAccount();
148
+ await userAccountManager.clearCachedGoogleAccount();
146
149
  const stored = JSON.parse(fs.readFileSync(accountsFile(), 'utf-8'));
147
150
  expect(stored.active).toBeNull();
148
151
  expect(stored.old).toEqual(['old1@google.com']);
@@ -153,7 +156,7 @@ describe('user_account', () => {
153
156
  active: 'active@google.com',
154
157
  old: ['active@google.com'],
155
158
  }, null, 2));
156
- await clearCachedGoogleAccount();
159
+ await userAccountManager.clearCachedGoogleAccount();
157
160
  const stored = JSON.parse(fs.readFileSync(accountsFile(), 'utf-8'));
158
161
  expect(stored.active).toBeNull();
159
162
  expect(stored.old).toEqual(['active@google.com']);
@@ -161,26 +164,26 @@ describe('user_account', () => {
161
164
  });
162
165
  describe('getLifetimeGoogleAccounts', () => {
163
166
  it('should return 0 if the file does not exist', () => {
164
- expect(getLifetimeGoogleAccounts()).toBe(0);
167
+ expect(userAccountManager.getLifetimeGoogleAccounts()).toBe(0);
165
168
  });
166
169
  it('should return 0 if the file is empty', () => {
167
170
  fs.mkdirSync(path.dirname(accountsFile()), { recursive: true });
168
171
  fs.writeFileSync(accountsFile(), '');
169
- expect(getLifetimeGoogleAccounts()).toBe(0);
172
+ expect(userAccountManager.getLifetimeGoogleAccounts()).toBe(0);
170
173
  });
171
174
  it('should return 0 if the file is corrupted', () => {
172
175
  fs.mkdirSync(path.dirname(accountsFile()), { recursive: true });
173
176
  fs.writeFileSync(accountsFile(), 'invalid json');
174
- const consoleLogSpy = vi
177
+ const consoleDebugSpy = vi
175
178
  .spyOn(console, 'log')
176
179
  .mockImplementation(() => { });
177
- expect(getLifetimeGoogleAccounts()).toBe(0);
178
- expect(consoleLogSpy).toHaveBeenCalled();
180
+ expect(userAccountManager.getLifetimeGoogleAccounts()).toBe(0);
181
+ expect(consoleDebugSpy).toHaveBeenCalled();
179
182
  });
180
183
  it('should return 1 if there is only an active account', () => {
181
184
  fs.mkdirSync(path.dirname(accountsFile()), { recursive: true });
182
185
  fs.writeFileSync(accountsFile(), JSON.stringify({ active: 'test1@google.com', old: [] }));
183
- expect(getLifetimeGoogleAccounts()).toBe(1);
186
+ expect(userAccountManager.getLifetimeGoogleAccounts()).toBe(1);
184
187
  });
185
188
  it('should correctly count old accounts when active is null', () => {
186
189
  fs.mkdirSync(path.dirname(accountsFile()), { recursive: true });
@@ -188,7 +191,7 @@ describe('user_account', () => {
188
191
  active: null,
189
192
  old: ['test1@google.com', 'test2@google.com'],
190
193
  }));
191
- expect(getLifetimeGoogleAccounts()).toBe(2);
194
+ expect(userAccountManager.getLifetimeGoogleAccounts()).toBe(2);
192
195
  });
193
196
  it('should correctly count both active and old accounts', () => {
194
197
  fs.mkdirSync(path.dirname(accountsFile()), { recursive: true });
@@ -196,7 +199,7 @@ describe('user_account', () => {
196
199
  active: 'test3@google.com',
197
200
  old: ['test1@google.com', 'test2@google.com'],
198
201
  }));
199
- expect(getLifetimeGoogleAccounts()).toBe(3);
202
+ expect(userAccountManager.getLifetimeGoogleAccounts()).toBe(3);
200
203
  });
201
204
  it('should handle valid JSON with incorrect schema by returning 0', () => {
202
205
  fs.mkdirSync(path.dirname(accountsFile()), { recursive: true });
@@ -204,7 +207,7 @@ describe('user_account', () => {
204
207
  const consoleLogSpy = vi
205
208
  .spyOn(console, 'log')
206
209
  .mockImplementation(() => { });
207
- expect(getLifetimeGoogleAccounts()).toBe(0);
210
+ expect(userAccountManager.getLifetimeGoogleAccounts()).toBe(0);
208
211
  expect(consoleLogSpy).toHaveBeenCalled();
209
212
  });
210
213
  it('should not double count if active account is also in old list', () => {
@@ -213,8 +216,8 @@ describe('user_account', () => {
213
216
  active: 'test1@google.com',
214
217
  old: ['test1@google.com', 'test2@google.com'],
215
218
  }));
216
- expect(getLifetimeGoogleAccounts()).toBe(2);
219
+ expect(userAccountManager.getLifetimeGoogleAccounts()).toBe(2);
217
220
  });
218
221
  });
219
222
  });
220
- //# sourceMappingURL=user_account.test.js.map
223
+ //# sourceMappingURL=userAccountManager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userAccountManager.test.js","sourceRoot":"","sources":["../../../src/utils/userAccountManager.test.ts"],"names":[],"mappings":"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"}