appwrite-utils-cli 1.11.0 → 1.12.0

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 (250) hide show
  1. package/{src/adapters/index.ts → dist/adapters/index.d.ts} +0 -1
  2. package/dist/adapters/index.js +10 -0
  3. package/dist/backups/operations/bucketBackup.d.ts +19 -0
  4. package/dist/backups/operations/bucketBackup.js +197 -0
  5. package/dist/backups/operations/collectionBackup.d.ts +30 -0
  6. package/dist/backups/operations/collectionBackup.js +201 -0
  7. package/dist/backups/operations/comprehensiveBackup.d.ts +25 -0
  8. package/dist/backups/operations/comprehensiveBackup.js +238 -0
  9. package/dist/backups/schemas/bucketManifest.d.ts +93 -0
  10. package/dist/backups/schemas/bucketManifest.js +33 -0
  11. package/dist/backups/schemas/comprehensiveManifest.d.ts +108 -0
  12. package/dist/backups/schemas/comprehensiveManifest.js +32 -0
  13. package/dist/backups/tracking/centralizedTracking.d.ts +34 -0
  14. package/dist/backups/tracking/centralizedTracking.js +274 -0
  15. package/dist/cli/commands/configCommands.d.ts +8 -0
  16. package/dist/cli/commands/configCommands.js +210 -0
  17. package/dist/cli/commands/databaseCommands.d.ts +14 -0
  18. package/dist/cli/commands/databaseCommands.js +696 -0
  19. package/dist/cli/commands/functionCommands.d.ts +7 -0
  20. package/dist/cli/commands/functionCommands.js +330 -0
  21. package/dist/cli/commands/importFileCommands.d.ts +7 -0
  22. package/dist/cli/commands/importFileCommands.js +674 -0
  23. package/dist/cli/commands/schemaCommands.d.ts +7 -0
  24. package/dist/cli/commands/schemaCommands.js +169 -0
  25. package/dist/cli/commands/storageCommands.d.ts +5 -0
  26. package/dist/cli/commands/storageCommands.js +142 -0
  27. package/dist/cli/commands/transferCommands.d.ts +5 -0
  28. package/dist/cli/commands/transferCommands.js +382 -0
  29. package/dist/collections/columns.d.ts +13 -0
  30. package/dist/collections/columns.js +1339 -0
  31. package/dist/collections/indexes.d.ts +12 -0
  32. package/dist/collections/indexes.js +215 -0
  33. package/dist/collections/methods.d.ts +19 -0
  34. package/dist/collections/methods.js +605 -0
  35. package/dist/collections/tableOperations.d.ts +87 -0
  36. package/dist/collections/tableOperations.js +466 -0
  37. package/dist/collections/transferOperations.d.ts +8 -0
  38. package/dist/collections/transferOperations.js +411 -0
  39. package/dist/collections/wipeOperations.d.ts +17 -0
  40. package/dist/collections/wipeOperations.js +306 -0
  41. package/dist/databases/methods.d.ts +6 -0
  42. package/dist/databases/methods.js +35 -0
  43. package/dist/databases/setup.d.ts +5 -0
  44. package/dist/databases/setup.js +45 -0
  45. package/dist/examples/yamlTerminologyExample.d.ts +42 -0
  46. package/dist/examples/yamlTerminologyExample.js +272 -0
  47. package/dist/functions/deployments.d.ts +4 -0
  48. package/dist/functions/deployments.js +146 -0
  49. package/dist/functions/fnConfigDiscovery.d.ts +3 -0
  50. package/dist/functions/fnConfigDiscovery.js +108 -0
  51. package/dist/functions/methods.d.ts +16 -0
  52. package/dist/functions/methods.js +174 -0
  53. package/dist/init.d.ts +2 -0
  54. package/dist/init.js +57 -0
  55. package/dist/interactiveCLI.d.ts +36 -0
  56. package/dist/interactiveCLI.js +952 -0
  57. package/dist/main.d.ts +2 -0
  58. package/dist/main.js +1125 -0
  59. package/dist/migrations/afterImportActions.d.ts +17 -0
  60. package/dist/migrations/afterImportActions.js +305 -0
  61. package/dist/migrations/appwriteToX.d.ts +211 -0
  62. package/dist/migrations/appwriteToX.js +493 -0
  63. package/dist/migrations/comprehensiveTransfer.d.ts +147 -0
  64. package/dist/migrations/comprehensiveTransfer.js +1315 -0
  65. package/dist/migrations/dataLoader.d.ts +755 -0
  66. package/dist/migrations/dataLoader.js +1272 -0
  67. package/dist/migrations/importController.d.ts +25 -0
  68. package/dist/migrations/importController.js +283 -0
  69. package/dist/migrations/importDataActions.d.ts +50 -0
  70. package/dist/migrations/importDataActions.js +230 -0
  71. package/dist/migrations/relationships.d.ts +29 -0
  72. package/dist/migrations/relationships.js +203 -0
  73. package/dist/migrations/services/DataTransformationService.d.ts +55 -0
  74. package/dist/migrations/services/DataTransformationService.js +158 -0
  75. package/dist/migrations/services/FileHandlerService.d.ts +75 -0
  76. package/dist/migrations/services/FileHandlerService.js +236 -0
  77. package/dist/migrations/services/ImportOrchestrator.d.ts +99 -0
  78. package/dist/migrations/services/ImportOrchestrator.js +493 -0
  79. package/dist/migrations/services/RateLimitManager.d.ts +138 -0
  80. package/dist/migrations/services/RateLimitManager.js +279 -0
  81. package/dist/migrations/services/RelationshipResolver.d.ts +120 -0
  82. package/dist/migrations/services/RelationshipResolver.js +332 -0
  83. package/dist/migrations/services/UserMappingService.d.ts +109 -0
  84. package/dist/migrations/services/UserMappingService.js +277 -0
  85. package/dist/migrations/services/ValidationService.d.ts +74 -0
  86. package/dist/migrations/services/ValidationService.js +260 -0
  87. package/dist/migrations/transfer.d.ts +30 -0
  88. package/dist/migrations/transfer.js +661 -0
  89. package/dist/migrations/yaml/YamlImportConfigLoader.d.ts +131 -0
  90. package/dist/migrations/yaml/YamlImportConfigLoader.js +383 -0
  91. package/dist/migrations/yaml/YamlImportIntegration.d.ts +93 -0
  92. package/dist/migrations/yaml/YamlImportIntegration.js +341 -0
  93. package/dist/migrations/yaml/generateImportSchemas.d.ts +30 -0
  94. package/dist/migrations/yaml/generateImportSchemas.js +1327 -0
  95. package/dist/schemas/authUser.d.ts +24 -0
  96. package/dist/schemas/authUser.js +17 -0
  97. package/dist/setup.d.ts +2 -0
  98. package/{src/setup.ts → dist/setup.js} +0 -3
  99. package/dist/setupCommands.d.ts +58 -0
  100. package/dist/setupCommands.js +489 -0
  101. package/dist/setupController.d.ts +9 -0
  102. package/dist/setupController.js +34 -0
  103. package/dist/shared/backupMetadataSchema.d.ts +94 -0
  104. package/dist/shared/backupMetadataSchema.js +38 -0
  105. package/dist/shared/backupTracking.d.ts +18 -0
  106. package/dist/shared/backupTracking.js +176 -0
  107. package/dist/shared/confirmationDialogs.d.ts +75 -0
  108. package/dist/shared/confirmationDialogs.js +236 -0
  109. package/dist/shared/migrationHelpers.d.ts +61 -0
  110. package/dist/shared/migrationHelpers.js +145 -0
  111. package/{src/shared/operationLogger.ts → dist/shared/operationLogger.d.ts} +1 -11
  112. package/dist/shared/operationLogger.js +12 -0
  113. package/dist/shared/operationQueue.d.ts +40 -0
  114. package/dist/shared/operationQueue.js +310 -0
  115. package/dist/shared/operationsTable.d.ts +26 -0
  116. package/dist/shared/operationsTable.js +287 -0
  117. package/dist/shared/operationsTableSchema.d.ts +48 -0
  118. package/dist/shared/operationsTableSchema.js +35 -0
  119. package/dist/shared/progressManager.d.ts +62 -0
  120. package/dist/shared/progressManager.js +215 -0
  121. package/dist/shared/relationshipExtractor.d.ts +56 -0
  122. package/dist/shared/relationshipExtractor.js +138 -0
  123. package/dist/shared/selectionDialogs.d.ts +220 -0
  124. package/dist/shared/selectionDialogs.js +588 -0
  125. package/dist/storage/backupCompression.d.ts +20 -0
  126. package/dist/storage/backupCompression.js +67 -0
  127. package/dist/storage/methods.d.ts +44 -0
  128. package/dist/storage/methods.js +475 -0
  129. package/dist/storage/schemas.d.ts +842 -0
  130. package/dist/storage/schemas.js +175 -0
  131. package/dist/tables/indexManager.d.ts +65 -0
  132. package/dist/tables/indexManager.js +294 -0
  133. package/{src/types.ts → dist/types.d.ts} +1 -6
  134. package/dist/types.js +3 -0
  135. package/dist/users/methods.d.ts +16 -0
  136. package/dist/users/methods.js +276 -0
  137. package/dist/utils/configMigration.d.ts +1 -0
  138. package/dist/utils/configMigration.js +261 -0
  139. package/dist/utils/index.js +2 -0
  140. package/dist/utils/loadConfigs.d.ts +50 -0
  141. package/dist/utils/loadConfigs.js +357 -0
  142. package/dist/utils/setupFiles.d.ts +4 -0
  143. package/dist/utils/setupFiles.js +1190 -0
  144. package/dist/utilsController.d.ts +114 -0
  145. package/dist/utilsController.js +898 -0
  146. package/package.json +6 -3
  147. package/CHANGELOG.md +0 -35
  148. package/CONFIG_TODO.md +0 -1189
  149. package/SELECTION_DIALOGS.md +0 -146
  150. package/SERVICE_IMPLEMENTATION_REPORT.md +0 -462
  151. package/scripts/copy-templates.ts +0 -23
  152. package/src/backups/operations/bucketBackup.ts +0 -277
  153. package/src/backups/operations/collectionBackup.ts +0 -310
  154. package/src/backups/operations/comprehensiveBackup.ts +0 -342
  155. package/src/backups/schemas/bucketManifest.ts +0 -78
  156. package/src/backups/schemas/comprehensiveManifest.ts +0 -76
  157. package/src/backups/tracking/centralizedTracking.ts +0 -352
  158. package/src/cli/commands/configCommands.ts +0 -265
  159. package/src/cli/commands/databaseCommands.ts +0 -931
  160. package/src/cli/commands/functionCommands.ts +0 -419
  161. package/src/cli/commands/importFileCommands.ts +0 -815
  162. package/src/cli/commands/schemaCommands.ts +0 -200
  163. package/src/cli/commands/storageCommands.ts +0 -151
  164. package/src/cli/commands/transferCommands.ts +0 -454
  165. package/src/collections/attributes.ts.backup +0 -1555
  166. package/src/collections/columns.ts +0 -2025
  167. package/src/collections/indexes.ts +0 -350
  168. package/src/collections/methods.ts +0 -714
  169. package/src/collections/tableOperations.ts +0 -542
  170. package/src/collections/transferOperations.ts +0 -589
  171. package/src/collections/wipeOperations.ts +0 -449
  172. package/src/databases/methods.ts +0 -49
  173. package/src/databases/setup.ts +0 -77
  174. package/src/examples/yamlTerminologyExample.ts +0 -346
  175. package/src/functions/deployments.ts +0 -221
  176. package/src/functions/fnConfigDiscovery.ts +0 -103
  177. package/src/functions/methods.ts +0 -284
  178. package/src/init.ts +0 -62
  179. package/src/interactiveCLI.ts +0 -1201
  180. package/src/main.ts +0 -1517
  181. package/src/migrations/afterImportActions.ts +0 -579
  182. package/src/migrations/appwriteToX.ts +0 -668
  183. package/src/migrations/comprehensiveTransfer.ts +0 -2285
  184. package/src/migrations/dataLoader.ts +0 -1729
  185. package/src/migrations/importController.ts +0 -440
  186. package/src/migrations/importDataActions.ts +0 -315
  187. package/src/migrations/relationships.ts +0 -333
  188. package/src/migrations/services/DataTransformationService.ts +0 -196
  189. package/src/migrations/services/FileHandlerService.ts +0 -311
  190. package/src/migrations/services/ImportOrchestrator.ts +0 -675
  191. package/src/migrations/services/RateLimitManager.ts +0 -363
  192. package/src/migrations/services/RelationshipResolver.ts +0 -461
  193. package/src/migrations/services/UserMappingService.ts +0 -345
  194. package/src/migrations/services/ValidationService.ts +0 -349
  195. package/src/migrations/transfer.ts +0 -1113
  196. package/src/migrations/yaml/YamlImportConfigLoader.ts +0 -439
  197. package/src/migrations/yaml/YamlImportIntegration.ts +0 -446
  198. package/src/migrations/yaml/generateImportSchemas.ts +0 -1354
  199. package/src/schemas/authUser.ts +0 -23
  200. package/src/setupCommands.ts +0 -602
  201. package/src/setupController.ts +0 -43
  202. package/src/shared/backupMetadataSchema.ts +0 -93
  203. package/src/shared/backupTracking.ts +0 -211
  204. package/src/shared/confirmationDialogs.ts +0 -327
  205. package/src/shared/migrationHelpers.ts +0 -232
  206. package/src/shared/operationQueue.ts +0 -376
  207. package/src/shared/operationsTable.ts +0 -338
  208. package/src/shared/operationsTableSchema.ts +0 -60
  209. package/src/shared/progressManager.ts +0 -278
  210. package/src/shared/relationshipExtractor.ts +0 -214
  211. package/src/shared/selectionDialogs.ts +0 -802
  212. package/src/storage/backupCompression.ts +0 -88
  213. package/src/storage/methods.ts +0 -711
  214. package/src/storage/schemas.ts +0 -205
  215. package/src/tables/indexManager.ts +0 -409
  216. package/src/types/node-appwrite-tablesdb.d.ts +0 -44
  217. package/src/users/methods.ts +0 -358
  218. package/src/utils/configMigration.ts +0 -348
  219. package/src/utils/loadConfigs.ts +0 -457
  220. package/src/utils/setupFiles.ts +0 -1236
  221. package/src/utilsController.ts +0 -1263
  222. package/tests/README.md +0 -497
  223. package/tests/adapters/AdapterFactory.test.ts +0 -277
  224. package/tests/integration/syncOperations.test.ts +0 -463
  225. package/tests/jest.config.js +0 -25
  226. package/tests/migration/configMigration.test.ts +0 -546
  227. package/tests/setup.ts +0 -62
  228. package/tests/testUtils.ts +0 -340
  229. package/tests/utils/loadConfigs.test.ts +0 -350
  230. package/tests/validation/configValidation.test.ts +0 -412
  231. package/tsconfig.json +0 -44
  232. /package/{src → dist}/functions/templates/count-docs-in-collection/README.md +0 -0
  233. /package/{src → dist}/functions/templates/count-docs-in-collection/src/main.ts +0 -0
  234. /package/{src → dist}/functions/templates/count-docs-in-collection/src/request.ts +0 -0
  235. /package/{src → dist}/functions/templates/hono-typescript/README.md +0 -0
  236. /package/{src → dist}/functions/templates/hono-typescript/src/adapters/request.ts +0 -0
  237. /package/{src → dist}/functions/templates/hono-typescript/src/adapters/response.ts +0 -0
  238. /package/{src → dist}/functions/templates/hono-typescript/src/app.ts +0 -0
  239. /package/{src → dist}/functions/templates/hono-typescript/src/context.ts +0 -0
  240. /package/{src → dist}/functions/templates/hono-typescript/src/main.ts +0 -0
  241. /package/{src → dist}/functions/templates/hono-typescript/src/middleware/appwrite.ts +0 -0
  242. /package/{src → dist}/functions/templates/typescript-node/README.md +0 -0
  243. /package/{src → dist}/functions/templates/typescript-node/src/context.ts +0 -0
  244. /package/{src → dist}/functions/templates/typescript-node/src/main.ts +0 -0
  245. /package/{src → dist}/functions/templates/uv/README.md +0 -0
  246. /package/{src → dist}/functions/templates/uv/pyproject.toml +0 -0
  247. /package/{src → dist}/functions/templates/uv/src/__init__.py +0 -0
  248. /package/{src → dist}/functions/templates/uv/src/context.py +0 -0
  249. /package/{src → dist}/functions/templates/uv/src/main.py +0 -0
  250. /package/{src/utils/index.ts → dist/utils/index.d.ts} +0 -0
@@ -1,277 +0,0 @@
1
- import { jest } from '@jest/globals';
2
- import { TestUtils } from '../testUtils';
3
- import { AdapterFactory } from '../../src/adapters/AdapterFactory';
4
- import { LegacyAdapter } from '../../src/adapters/LegacyAdapter';
5
- import { TablesDBAdapter } from '../../src/adapters/TablesDBAdapter';
6
- import { DatabaseAdapter } from '../../src/adapters/DatabaseAdapter';
7
-
8
- // Mock the adapters
9
- jest.mock('../../src/adapters/LegacyAdapter');
10
- jest.mock('../../src/adapters/TablesDBAdapter');
11
- jest.mock('../../src/adapters/DatabaseAdapter');
12
-
13
- // Mock version detection
14
- jest.mock('../../src/utils/versionDetection', () => ({
15
- detectAppwriteVersionCached: jest.fn(),
16
- fetchServerVersion: jest.fn(),
17
- isVersionAtLeast: jest.fn(),
18
- }));
19
-
20
- import { detectAppwriteVersionCached, isVersionAtLeast } from '../../src/utils/versionDetection';
21
-
22
- describe('AdapterFactory - Dual API Support', () => {
23
- let mockConfig: any;
24
-
25
- beforeEach(() => {
26
- jest.clearAllMocks();
27
- mockConfig = TestUtils.createTestAppwriteConfig();
28
- });
29
-
30
- describe('Adapter Selection Logic', () => {
31
- it('should create LegacyAdapter for old Appwrite versions', async () => {
32
- (detectAppwriteVersionCached as jest.Mock).mockResolvedValue({
33
- serverVersion: '1.5.0',
34
- apiMode: 'database',
35
- });
36
- (isVersionAtLeast as jest.Mock).mockReturnValue(false);
37
-
38
- const adapter = await AdapterFactory.createAdapter(mockConfig);
39
-
40
- expect(LegacyAdapter).toHaveBeenCalledWith(expect.anything(), mockConfig);
41
- expect(adapter).toBeInstanceOf(LegacyAdapter);
42
- });
43
-
44
- it('should create DatabaseAdapter for Appwrite 1.6.0+ in database mode', async () => {
45
- (detectAppwriteVersionCached as jest.Mock).mockResolvedValue({
46
- serverVersion: '1.6.0',
47
- apiMode: 'database',
48
- });
49
- (isVersionAtLeast as jest.Mock).mockReturnValue(true);
50
-
51
- const adapter = await AdapterFactory.createAdapter(mockConfig);
52
-
53
- expect(DatabaseAdapter).toHaveBeenCalledWith(expect.anything(), mockConfig);
54
- expect(adapter).toBeInstanceOf(DatabaseAdapter);
55
- });
56
-
57
- it('should create TablesDBAdapter for Appwrite 1.8.0+ in tablesdb mode', async () => {
58
- (detectAppwriteVersionCached as jest.Mock).mockResolvedValue({
59
- serverVersion: '1.8.0',
60
- apiMode: 'tablesdb',
61
- });
62
- (isVersionAtLeast as jest.Mock).mockReturnValue(true);
63
-
64
- const adapter = await AdapterFactory.createAdapter(mockConfig);
65
-
66
- expect(TablesDBAdapter).toHaveBeenCalledWith(expect.anything(), mockConfig);
67
- expect(adapter).toBeInstanceOf(TablesDBAdapter);
68
- });
69
-
70
- it('should force TablesDBAdapter when explicitly specified in config', async () => {
71
- (detectAppwriteVersionCached as jest.Mock).mockResolvedValue({
72
- serverVersion: '1.6.0',
73
- apiMode: 'database',
74
- });
75
-
76
- const configWithForce = {
77
- ...mockConfig,
78
- forceTablesAPI: true,
79
- };
80
-
81
- const adapter = await AdapterFactory.createAdapter(configWithForce);
82
-
83
- expect(TablesDBAdapter).toHaveBeenCalledWith(expect.anything(), configWithForce);
84
- expect(adapter).toBeInstanceOf(TablesDBAdapter);
85
- });
86
-
87
- it('should force DatabaseAdapter when explicitly specified in config', async () => {
88
- (detectAppwriteVersionCached as jest.Mock).mockResolvedValue({
89
- serverVersion: '1.8.0',
90
- apiMode: 'tablesdb',
91
- });
92
-
93
- const configWithForce = {
94
- ...mockConfig,
95
- forceDatabaseAPI: true,
96
- };
97
-
98
- const adapter = await AdapterFactory.createAdapter(configWithForce);
99
-
100
- expect(DatabaseAdapter).toHaveBeenCalledWith(expect.anything(), configWithForce);
101
- expect(adapter).toBeInstanceOf(DatabaseAdapter);
102
- });
103
- });
104
-
105
- describe('Configuration Validation', () => {
106
- it('should validate database configuration for DatabaseAdapter', async () => {
107
- (detectAppwriteVersionCached as jest.Mock).mockResolvedValue({
108
- serverVersion: '1.6.0',
109
- apiMode: 'database',
110
- });
111
-
112
- const configWithMissingDB = {
113
- ...mockConfig,
114
- databases: [],
115
- };
116
-
117
- await expect(AdapterFactory.createAdapter(configWithMissingDB))
118
- .rejects.toThrow('Database configuration required');
119
- });
120
-
121
- it('should validate table configurations for TablesDBAdapter', async () => {
122
- (detectAppwriteVersionCached as jest.Mock).mockResolvedValue({
123
- serverVersion: '1.8.0',
124
- apiMode: 'tablesdb',
125
- });
126
-
127
- const configWithTablesButNoDatabaseIds = {
128
- ...mockConfig,
129
- collections: [
130
- TestUtils.createTestTable({
131
- databaseId: undefined, // Missing required databaseId
132
- })
133
- ],
134
- };
135
-
136
- await expect(AdapterFactory.createAdapter(configWithTablesButNoDatabaseIds))
137
- .rejects.toThrow('Table configurations must include databaseId');
138
- });
139
- });
140
-
141
- describe('Mixed Configuration Handling', () => {
142
- it('should handle mixed collections and tables for appropriate adapter', async () => {
143
- (detectAppwriteVersionCached as jest.Mock).mockResolvedValue({
144
- serverVersion: '1.8.0',
145
- apiMode: 'tablesdb',
146
- });
147
-
148
- const mixedConfig = {
149
- ...mockConfig,
150
- collections: [
151
- TestUtils.createTestCollection(), // Regular collection
152
- TestUtils.createTestTable(), // Table with _isFromTablesDir
153
- ],
154
- };
155
-
156
- const adapter = await AdapterFactory.createAdapter(mixedConfig);
157
-
158
- expect(TablesDBAdapter).toHaveBeenCalledWith(expect.anything(), mixedConfig);
159
- expect(adapter).toBeInstanceOf(TablesDBAdapter);
160
- });
161
-
162
- it('should filter out inappropriate configurations per adapter', async () => {
163
- (detectAppwriteVersionCached as jest.Mock).mockResolvedValue({
164
- serverVersion: '1.6.0',
165
- apiMode: 'database',
166
- });
167
-
168
- const mixedConfig = {
169
- ...mockConfig,
170
- collections: [
171
- TestUtils.createTestCollection(), // Regular collection
172
- TestUtils.createTestTable(), // Table (should be filtered for DatabaseAdapter)
173
- ],
174
- };
175
-
176
- const adapter = await AdapterFactory.createAdapter(mixedConfig);
177
-
178
- expect(DatabaseAdapter).toHaveBeenCalledWith(
179
- expect.anything(),
180
- expect.objectContaining({
181
- collections: expect.arrayContaining([
182
- expect.not.objectContaining({ _isFromTablesDir: true })
183
- ])
184
- })
185
- );
186
- });
187
- });
188
-
189
- describe('Error Handling', () => {
190
- it('should handle version detection failures gracefully', async () => {
191
- (detectAppwriteVersionCached as jest.Mock).mockRejectedValue(new Error('Network error'));
192
-
193
- // Should fall back to LegacyAdapter
194
- const adapter = await AdapterFactory.createAdapter(mockConfig);
195
-
196
- expect(LegacyAdapter).toHaveBeenCalledWith(expect.anything(), mockConfig);
197
- expect(adapter).toBeInstanceOf(LegacyAdapter);
198
- });
199
-
200
- it('should handle invalid server versions', async () => {
201
- (detectAppwriteVersionCached as jest.Mock).mockResolvedValue({
202
- serverVersion: 'invalid-version',
203
- apiMode: 'unknown',
204
- });
205
-
206
- const adapter = await AdapterFactory.createAdapter(mockConfig);
207
-
208
- expect(LegacyAdapter).toHaveBeenCalledWith(expect.anything(), mockConfig);
209
- expect(adapter).toBeInstanceOf(LegacyAdapter);
210
- });
211
- });
212
-
213
- describe('Client Configuration', () => {
214
- it('should pass correct client configuration to each adapter', async () => {
215
- (detectAppwriteVersionCached as jest.Mock).mockResolvedValue({
216
- serverVersion: '1.8.0',
217
- apiMode: 'tablesdb',
218
- });
219
-
220
- await AdapterFactory.createAdapter(mockConfig);
221
-
222
- expect(TablesDBAdapter).toHaveBeenCalledWith(
223
- expect.objectContaining({
224
- setEndpoint: expect.any(Function),
225
- setProject: expect.any(Function),
226
- setKey: expect.any(Function),
227
- }),
228
- mockConfig
229
- );
230
- });
231
-
232
- it('should handle custom endpoint configurations', async () => {
233
- const customConfig = {
234
- ...mockConfig,
235
- appwriteEndpoint: 'https://custom.appwrite.server/v1',
236
- };
237
-
238
- await AdapterFactory.createAdapter(customConfig);
239
-
240
- // Verify that the adapter receives the custom endpoint configuration
241
- expect(TablesDBAdapter || DatabaseAdapter || LegacyAdapter).toHaveBeenCalledWith(
242
- expect.anything(),
243
- expect.objectContaining({
244
- appwriteEndpoint: 'https://custom.appwrite.server/v1',
245
- })
246
- );
247
- });
248
- });
249
-
250
- describe('Caching and Performance', () => {
251
- it('should cache adapter instances for same configuration', async () => {
252
- (detectAppwriteVersionCached as jest.Mock).mockResolvedValue({
253
- serverVersion: '1.6.0',
254
- apiMode: 'database',
255
- });
256
-
257
- const adapter1 = await AdapterFactory.createAdapter(mockConfig);
258
- const adapter2 = await AdapterFactory.createAdapter(mockConfig);
259
-
260
- // Should reuse the same instance or create efficiently
261
- expect(DatabaseAdapter).toHaveBeenCalledTimes(2);
262
- });
263
-
264
- it('should use cached version detection results', async () => {
265
- (detectAppwriteVersionCached as jest.Mock).mockResolvedValue({
266
- serverVersion: '1.6.0',
267
- apiMode: 'database',
268
- });
269
-
270
- await AdapterFactory.createAdapter(mockConfig);
271
- await AdapterFactory.createAdapter(mockConfig);
272
-
273
- // Version detection should be called but may be cached
274
- expect(detectAppwriteVersionCached).toHaveBeenCalled();
275
- });
276
- });
277
- });