appwrite-utils-cli 1.5.2 → 1.6.1

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 (233) hide show
  1. package/CHANGELOG.md +199 -0
  2. package/README.md +251 -29
  3. package/dist/adapters/AdapterFactory.d.ts +10 -3
  4. package/dist/adapters/AdapterFactory.js +213 -17
  5. package/dist/adapters/TablesDBAdapter.js +60 -17
  6. package/dist/backups/operations/bucketBackup.d.ts +19 -0
  7. package/dist/backups/operations/bucketBackup.js +197 -0
  8. package/dist/backups/operations/collectionBackup.d.ts +30 -0
  9. package/dist/backups/operations/collectionBackup.js +201 -0
  10. package/dist/backups/operations/comprehensiveBackup.d.ts +25 -0
  11. package/dist/backups/operations/comprehensiveBackup.js +238 -0
  12. package/dist/backups/schemas/bucketManifest.d.ts +93 -0
  13. package/dist/backups/schemas/bucketManifest.js +33 -0
  14. package/dist/backups/schemas/comprehensiveManifest.d.ts +108 -0
  15. package/dist/backups/schemas/comprehensiveManifest.js +32 -0
  16. package/dist/backups/tracking/centralizedTracking.d.ts +34 -0
  17. package/dist/backups/tracking/centralizedTracking.js +274 -0
  18. package/dist/cli/commands/configCommands.d.ts +8 -0
  19. package/dist/cli/commands/configCommands.js +160 -0
  20. package/dist/cli/commands/databaseCommands.d.ts +13 -0
  21. package/dist/cli/commands/databaseCommands.js +479 -0
  22. package/dist/cli/commands/functionCommands.d.ts +7 -0
  23. package/dist/cli/commands/functionCommands.js +289 -0
  24. package/dist/cli/commands/schemaCommands.d.ts +7 -0
  25. package/dist/cli/commands/schemaCommands.js +134 -0
  26. package/dist/cli/commands/transferCommands.d.ts +5 -0
  27. package/dist/cli/commands/transferCommands.js +384 -0
  28. package/dist/collections/attributes.d.ts +5 -4
  29. package/dist/collections/attributes.js +539 -246
  30. package/dist/collections/indexes.js +39 -37
  31. package/dist/collections/methods.d.ts +2 -16
  32. package/dist/collections/methods.js +90 -538
  33. package/dist/collections/transferOperations.d.ts +7 -0
  34. package/dist/collections/transferOperations.js +331 -0
  35. package/dist/collections/wipeOperations.d.ts +16 -0
  36. package/dist/collections/wipeOperations.js +328 -0
  37. package/dist/config/configMigration.d.ts +87 -0
  38. package/dist/config/configMigration.js +390 -0
  39. package/dist/config/configValidation.d.ts +66 -0
  40. package/dist/config/configValidation.js +358 -0
  41. package/dist/config/yamlConfig.d.ts +455 -1
  42. package/dist/config/yamlConfig.js +145 -52
  43. package/dist/databases/methods.js +3 -2
  44. package/dist/databases/setup.d.ts +1 -2
  45. package/dist/databases/setup.js +9 -87
  46. package/dist/examples/yamlTerminologyExample.d.ts +42 -0
  47. package/dist/examples/yamlTerminologyExample.js +269 -0
  48. package/dist/functions/deployments.js +11 -10
  49. package/dist/functions/methods.d.ts +1 -1
  50. package/dist/functions/methods.js +5 -4
  51. package/dist/init.js +9 -9
  52. package/dist/interactiveCLI.d.ts +8 -17
  53. package/dist/interactiveCLI.js +209 -1172
  54. package/dist/main.js +364 -21
  55. package/dist/migrations/afterImportActions.js +22 -30
  56. package/dist/migrations/appwriteToX.js +71 -25
  57. package/dist/migrations/dataLoader.js +35 -26
  58. package/dist/migrations/importController.js +29 -30
  59. package/dist/migrations/relationships.js +13 -12
  60. package/dist/migrations/services/ImportOrchestrator.js +16 -19
  61. package/dist/migrations/transfer.js +46 -46
  62. package/dist/migrations/yaml/YamlImportConfigLoader.d.ts +3 -1
  63. package/dist/migrations/yaml/YamlImportConfigLoader.js +6 -3
  64. package/dist/migrations/yaml/YamlImportIntegration.d.ts +9 -3
  65. package/dist/migrations/yaml/YamlImportIntegration.js +22 -11
  66. package/dist/migrations/yaml/generateImportSchemas.d.ts +14 -1
  67. package/dist/migrations/yaml/generateImportSchemas.js +736 -7
  68. package/dist/schemas/authUser.d.ts +1 -1
  69. package/dist/setupController.js +3 -2
  70. package/dist/shared/backupMetadataSchema.d.ts +94 -0
  71. package/dist/shared/backupMetadataSchema.js +38 -0
  72. package/dist/shared/backupTracking.d.ts +18 -0
  73. package/dist/shared/backupTracking.js +176 -0
  74. package/dist/shared/confirmationDialogs.js +15 -15
  75. package/dist/shared/errorUtils.d.ts +54 -0
  76. package/dist/shared/errorUtils.js +95 -0
  77. package/dist/shared/functionManager.js +20 -19
  78. package/dist/shared/indexManager.js +12 -11
  79. package/dist/shared/jsonSchemaGenerator.js +10 -26
  80. package/dist/shared/logging.d.ts +51 -0
  81. package/dist/shared/logging.js +70 -0
  82. package/dist/shared/messageFormatter.d.ts +2 -0
  83. package/dist/shared/messageFormatter.js +10 -0
  84. package/dist/shared/migrationHelpers.d.ts +6 -16
  85. package/dist/shared/migrationHelpers.js +24 -21
  86. package/dist/shared/operationLogger.d.ts +8 -1
  87. package/dist/shared/operationLogger.js +11 -24
  88. package/dist/shared/operationQueue.d.ts +28 -1
  89. package/dist/shared/operationQueue.js +268 -66
  90. package/dist/shared/operationsTable.d.ts +26 -0
  91. package/dist/shared/operationsTable.js +286 -0
  92. package/dist/shared/operationsTableSchema.d.ts +48 -0
  93. package/dist/shared/operationsTableSchema.js +35 -0
  94. package/dist/shared/relationshipExtractor.d.ts +56 -0
  95. package/dist/shared/relationshipExtractor.js +138 -0
  96. package/dist/shared/schemaGenerator.d.ts +19 -1
  97. package/dist/shared/schemaGenerator.js +56 -75
  98. package/dist/storage/backupCompression.d.ts +20 -0
  99. package/dist/storage/backupCompression.js +67 -0
  100. package/dist/storage/methods.d.ts +16 -2
  101. package/dist/storage/methods.js +98 -14
  102. package/dist/users/methods.js +9 -8
  103. package/dist/utils/configDiscovery.d.ts +78 -0
  104. package/dist/utils/configDiscovery.js +430 -0
  105. package/dist/utils/directoryUtils.d.ts +22 -0
  106. package/dist/utils/directoryUtils.js +59 -0
  107. package/dist/utils/getClientFromConfig.d.ts +17 -8
  108. package/dist/utils/getClientFromConfig.js +162 -17
  109. package/dist/utils/helperFunctions.d.ts +16 -2
  110. package/dist/utils/helperFunctions.js +19 -5
  111. package/dist/utils/loadConfigs.d.ts +34 -9
  112. package/dist/utils/loadConfigs.js +236 -316
  113. package/dist/utils/pathResolvers.d.ts +53 -0
  114. package/dist/utils/pathResolvers.js +72 -0
  115. package/dist/utils/projectConfig.d.ts +119 -0
  116. package/dist/utils/projectConfig.js +171 -0
  117. package/dist/utils/retryFailedPromises.js +4 -2
  118. package/dist/utils/sessionAuth.d.ts +48 -0
  119. package/dist/utils/sessionAuth.js +164 -0
  120. package/dist/utils/sessionPreservationExample.d.ts +1666 -0
  121. package/dist/utils/sessionPreservationExample.js +101 -0
  122. package/dist/utils/setupFiles.js +301 -41
  123. package/dist/utils/typeGuards.d.ts +35 -0
  124. package/dist/utils/typeGuards.js +57 -0
  125. package/dist/utils/versionDetection.js +145 -9
  126. package/dist/utils/yamlConverter.d.ts +53 -3
  127. package/dist/utils/yamlConverter.js +232 -13
  128. package/dist/utils/yamlLoader.d.ts +70 -0
  129. package/dist/utils/yamlLoader.js +263 -0
  130. package/dist/utilsController.d.ts +36 -3
  131. package/dist/utilsController.js +186 -56
  132. package/package.json +12 -2
  133. package/src/adapters/AdapterFactory.ts +263 -35
  134. package/src/adapters/TablesDBAdapter.ts +225 -36
  135. package/src/backups/operations/bucketBackup.ts +277 -0
  136. package/src/backups/operations/collectionBackup.ts +310 -0
  137. package/src/backups/operations/comprehensiveBackup.ts +342 -0
  138. package/src/backups/schemas/bucketManifest.ts +78 -0
  139. package/src/backups/schemas/comprehensiveManifest.ts +76 -0
  140. package/src/backups/tracking/centralizedTracking.ts +352 -0
  141. package/src/cli/commands/configCommands.ts +194 -0
  142. package/src/cli/commands/databaseCommands.ts +635 -0
  143. package/src/cli/commands/functionCommands.ts +379 -0
  144. package/src/cli/commands/schemaCommands.ts +163 -0
  145. package/src/cli/commands/transferCommands.ts +457 -0
  146. package/src/collections/attributes.ts +900 -621
  147. package/src/collections/attributes.ts.backup +1555 -0
  148. package/src/collections/indexes.ts +116 -114
  149. package/src/collections/methods.ts +295 -968
  150. package/src/collections/transferOperations.ts +516 -0
  151. package/src/collections/wipeOperations.ts +501 -0
  152. package/src/config/README.md +274 -0
  153. package/src/config/configMigration.ts +575 -0
  154. package/src/config/configValidation.ts +445 -0
  155. package/src/config/yamlConfig.ts +168 -55
  156. package/src/databases/methods.ts +3 -2
  157. package/src/databases/setup.ts +11 -138
  158. package/src/examples/yamlTerminologyExample.ts +341 -0
  159. package/src/functions/deployments.ts +14 -12
  160. package/src/functions/methods.ts +11 -11
  161. package/src/functions/templates/hono-typescript/README.md +286 -0
  162. package/src/functions/templates/hono-typescript/package.json +26 -0
  163. package/src/functions/templates/hono-typescript/src/adapters/request.ts +74 -0
  164. package/src/functions/templates/hono-typescript/src/adapters/response.ts +106 -0
  165. package/src/functions/templates/hono-typescript/src/app.ts +180 -0
  166. package/src/functions/templates/hono-typescript/src/context.ts +103 -0
  167. package/src/functions/templates/hono-typescript/src/index.ts +54 -0
  168. package/src/functions/templates/hono-typescript/src/middleware/appwrite.ts +119 -0
  169. package/src/functions/templates/hono-typescript/tsconfig.json +20 -0
  170. package/src/functions/templates/typescript-node/package.json +2 -1
  171. package/src/functions/templates/typescript-node/src/context.ts +103 -0
  172. package/src/functions/templates/typescript-node/src/index.ts +18 -12
  173. package/src/functions/templates/uv/pyproject.toml +1 -0
  174. package/src/functions/templates/uv/src/context.py +125 -0
  175. package/src/functions/templates/uv/src/index.py +35 -5
  176. package/src/init.ts +9 -11
  177. package/src/interactiveCLI.ts +274 -1563
  178. package/src/main.ts +418 -24
  179. package/src/migrations/afterImportActions.ts +71 -44
  180. package/src/migrations/appwriteToX.ts +100 -34
  181. package/src/migrations/dataLoader.ts +48 -34
  182. package/src/migrations/importController.ts +44 -39
  183. package/src/migrations/relationships.ts +28 -18
  184. package/src/migrations/services/ImportOrchestrator.ts +24 -27
  185. package/src/migrations/transfer.ts +159 -121
  186. package/src/migrations/yaml/YamlImportConfigLoader.ts +11 -4
  187. package/src/migrations/yaml/YamlImportIntegration.ts +47 -20
  188. package/src/migrations/yaml/generateImportSchemas.ts +751 -12
  189. package/src/setupController.ts +3 -2
  190. package/src/shared/backupMetadataSchema.ts +93 -0
  191. package/src/shared/backupTracking.ts +211 -0
  192. package/src/shared/confirmationDialogs.ts +19 -19
  193. package/src/shared/errorUtils.ts +110 -0
  194. package/src/shared/functionManager.ts +21 -20
  195. package/src/shared/indexManager.ts +12 -11
  196. package/src/shared/jsonSchemaGenerator.ts +38 -52
  197. package/src/shared/logging.ts +75 -0
  198. package/src/shared/messageFormatter.ts +14 -1
  199. package/src/shared/migrationHelpers.ts +45 -38
  200. package/src/shared/operationLogger.ts +11 -36
  201. package/src/shared/operationQueue.ts +322 -93
  202. package/src/shared/operationsTable.ts +338 -0
  203. package/src/shared/operationsTableSchema.ts +60 -0
  204. package/src/shared/relationshipExtractor.ts +214 -0
  205. package/src/shared/schemaGenerator.ts +179 -219
  206. package/src/storage/backupCompression.ts +88 -0
  207. package/src/storage/methods.ts +131 -34
  208. package/src/users/methods.ts +11 -9
  209. package/src/utils/configDiscovery.ts +502 -0
  210. package/src/utils/directoryUtils.ts +61 -0
  211. package/src/utils/getClientFromConfig.ts +205 -22
  212. package/src/utils/helperFunctions.ts +23 -5
  213. package/src/utils/loadConfigs.ts +313 -345
  214. package/src/utils/pathResolvers.ts +81 -0
  215. package/src/utils/projectConfig.ts +299 -0
  216. package/src/utils/retryFailedPromises.ts +4 -2
  217. package/src/utils/sessionAuth.ts +230 -0
  218. package/src/utils/setupFiles.ts +322 -54
  219. package/src/utils/typeGuards.ts +65 -0
  220. package/src/utils/versionDetection.ts +218 -64
  221. package/src/utils/yamlConverter.ts +296 -13
  222. package/src/utils/yamlLoader.ts +364 -0
  223. package/src/utilsController.ts +314 -110
  224. package/tests/README.md +497 -0
  225. package/tests/adapters/AdapterFactory.test.ts +277 -0
  226. package/tests/integration/syncOperations.test.ts +463 -0
  227. package/tests/jest.config.js +25 -0
  228. package/tests/migration/configMigration.test.ts +546 -0
  229. package/tests/setup.ts +62 -0
  230. package/tests/testUtils.ts +340 -0
  231. package/tests/utils/loadConfigs.test.ts +350 -0
  232. package/tests/validation/configValidation.test.ts +412 -0
  233. package/src/utils/schemaStrings.ts +0 -517
@@ -1,7 +1,8 @@
1
1
  import { indexSchema } from "appwrite-utils";
2
2
  import { Databases, IndexType, Query } from "node-appwrite";
3
- import { delay, tryAwaitWithRetry } from "../utils/helperFunctions.js";
4
- import chalk from "chalk";
3
+ import { delay, tryAwaitWithRetry, calculateExponentialBackoff } from "../utils/helperFunctions.js";
4
+ import { isLegacyDatabases } from "../utils/typeGuards.js";
5
+ import { MessageFormatter } from "../shared/messageFormatter.js";
5
6
  /**
6
7
  * Wait for index to become available, with retry logic for stuck indexes and exponential backoff
7
8
  */
@@ -11,64 +12,64 @@ retryCount = 0, maxRetries = 5) => {
11
12
  let checkInterval = 2000; // Start with 2 seconds
12
13
  // Calculate exponential backoff: 2s, 4s, 8s, 16s, 30s (capped at 30s)
13
14
  if (retryCount > 0) {
14
- const exponentialDelay = Math.min(2000 * Math.pow(2, retryCount), 30000);
15
- console.log(chalk.blue(`Waiting for index '${indexKey}' to become available (retry ${retryCount}, backoff: ${exponentialDelay}ms)...`));
15
+ const exponentialDelay = calculateExponentialBackoff(retryCount);
16
+ MessageFormatter.info(`Waiting for index '${indexKey}' to become available (retry ${retryCount}, backoff: ${exponentialDelay}ms)...`);
16
17
  await delay(exponentialDelay);
17
18
  }
18
19
  else {
19
- console.log(chalk.blue(`Waiting for index '${indexKey}' to become available...`));
20
+ MessageFormatter.info(`Waiting for index '${indexKey}' to become available...`);
20
21
  }
21
22
  while (Date.now() - startTime < maxWaitTime) {
22
23
  try {
23
- const indexList = await (db instanceof Databases
24
+ const indexList = await (isLegacyDatabases(db)
24
25
  ? db.listIndexes(dbId, collectionId)
25
26
  : db.listIndexes({ databaseId: dbId, tableId: collectionId }));
26
- const indexes = (db instanceof Databases)
27
+ const indexes = isLegacyDatabases(db)
27
28
  ? indexList.indexes
28
29
  : (indexList.data || indexList.indexes || []);
29
30
  const index = indexes.find((idx) => idx.key === indexKey);
30
31
  if (!index) {
31
- console.log(chalk.red(`Index '${indexKey}' not found`));
32
+ MessageFormatter.error(`Index '${indexKey}' not found in database '${dbId}' collection '${collectionId}'`);
32
33
  return false;
33
34
  }
34
- if (db instanceof Databases) {
35
- console.log(chalk.gray(`Index '${indexKey}' status: ${index.status}`));
35
+ if (isLegacyDatabases(db)) {
36
+ MessageFormatter.debug(`Index '${indexKey}' status: ${index.status}`);
36
37
  }
37
38
  else {
38
- console.log(chalk.gray(`Index '${indexKey}' detected (TablesDB)`));
39
+ MessageFormatter.debug(`Index '${indexKey}' detected (TablesDB)`);
39
40
  }
40
41
  switch (index.status) {
41
42
  case 'available':
42
- console.log(chalk.green(`✅ Index '${indexKey}' is now available`));
43
+ MessageFormatter.success(`Index '${indexKey}' is now available (type: ${index.type}, attributes: [${index.attributes.join(', ')}])`);
43
44
  return true;
44
45
  case 'failed':
45
- console.log(chalk.red(`❌ Index '${indexKey}' failed: ${index.error}`));
46
+ MessageFormatter.error(`Index '${indexKey}' failed: ${index.error} (type: ${index.type}, attributes: [${index.attributes.join(', ')}])`);
46
47
  return false;
47
48
  case 'stuck':
48
- console.log(chalk.yellow(`⚠️ Index '${indexKey}' is stuck, will retry...`));
49
+ MessageFormatter.warning(`Index '${indexKey}' is stuck, will retry... (type: ${index.type}, attributes: [${index.attributes.join(', ')}])`);
49
50
  return false;
50
51
  case 'processing':
51
52
  // Continue waiting
52
53
  break;
53
54
  case 'deleting':
54
- console.log(chalk.yellow(`Index '${indexKey}' is being deleted`));
55
+ MessageFormatter.warning(`Index '${indexKey}' is being deleted`);
55
56
  break;
56
57
  default:
57
- console.log(chalk.yellow(`Unknown status '${index.status}' for index '${indexKey}'`));
58
+ MessageFormatter.warning(`Unknown status '${index.status}' for index '${indexKey}'`);
58
59
  break;
59
60
  }
60
61
  await delay(checkInterval);
61
62
  }
62
63
  catch (error) {
63
- console.log(chalk.red(`Error checking index status: ${error}`));
64
+ MessageFormatter.error(`Error checking index '${indexKey}' status in database '${dbId}' collection '${collectionId}': ${error}`);
64
65
  return false;
65
66
  }
66
67
  }
67
68
  // Timeout reached
68
- console.log(chalk.yellow(`⏰ Timeout waiting for index '${indexKey}' (${maxWaitTime}ms)`));
69
+ MessageFormatter.warning(`Timeout waiting for index '${indexKey}' (${maxWaitTime}ms)`);
69
70
  // If we have retries left and this isn't the last retry, try recreating
70
71
  if (retryCount < maxRetries) {
71
- console.log(chalk.yellow(`🔄 Retrying index creation (attempt ${retryCount + 1}/${maxRetries})`));
72
+ MessageFormatter.info(`Retrying index '${indexKey}' creation (attempt ${retryCount + 1}/${maxRetries})`);
72
73
  return false; // Signal that we need to retry
73
74
  }
74
75
  return false;
@@ -77,15 +78,15 @@ retryCount = 0, maxRetries = 5) => {
77
78
  * Enhanced index creation with proper status monitoring and retry logic
78
79
  */
79
80
  export const createOrUpdateIndexWithStatusCheck = async (dbId, db, collectionId, collection, index, retryCount = 0, maxRetries = 3) => {
80
- console.log(chalk.blue(`Creating/updating index '${index.key}' (attempt ${retryCount + 1}/${maxRetries + 1})`));
81
+ MessageFormatter.info(`Creating/updating index '${index.key}' (attempt ${retryCount + 1}/${maxRetries + 1}) - type: ${index.type}, attributes: [${index.attributes.join(', ')}]`);
81
82
  try {
82
83
  // First, validate that all required attributes exist
83
84
  const freshCollection = await db.getCollection(dbId, collectionId);
84
85
  const existingAttributeKeys = freshCollection.attributes.map((attr) => attr.key);
85
86
  const missingAttributes = index.attributes.filter(attr => !existingAttributeKeys.includes(attr));
86
87
  if (missingAttributes.length > 0) {
87
- console.log(chalk.red(`❌ Index '${index.key}' cannot be created: missing attributes [${missingAttributes.join(', ')}]`));
88
- console.log(chalk.red(`Available attributes: [${existingAttributeKeys.join(', ')}]`));
88
+ MessageFormatter.error(`Index '${index.key}' cannot be created: missing attributes [${missingAttributes.join(', ')}] (type: ${index.type})`);
89
+ MessageFormatter.error(`Available attributes: [${existingAttributeKeys.join(', ')}]`);
89
90
  return false; // Don't retry if attributes are missing
90
91
  }
91
92
  // Try to create/update the index using existing logic
@@ -98,28 +99,28 @@ export const createOrUpdateIndexWithStatusCheck = async (dbId, db, collectionId,
98
99
  }
99
100
  // If not successful and we have retries left, just retry the index creation
100
101
  if (retryCount < maxRetries) {
101
- console.log(chalk.yellow(`Index '${index.key}' failed/stuck, retrying (${retryCount + 1}/${maxRetries})...`));
102
+ MessageFormatter.warning(`Index '${index.key}' failed/stuck, retrying (${retryCount + 1}/${maxRetries}) - type: ${index.type}, attributes: [${index.attributes.join(', ')}]`);
102
103
  // Wait a bit before retry
103
104
  await new Promise(resolve => setTimeout(resolve, 2000 * (retryCount + 1)));
104
105
  // Retry the index creation
105
106
  return await createOrUpdateIndexWithStatusCheck(dbId, db, collectionId, collection, index, retryCount + 1, maxRetries);
106
107
  }
107
- console.log(chalk.red(`❌ Failed to create index '${index.key}' after ${maxRetries + 1} attempts`));
108
+ MessageFormatter.error(`Failed to create index '${index.key}' after ${maxRetries + 1} attempts (type: ${index.type}, attributes: [${index.attributes.join(', ')}])`);
108
109
  return false;
109
110
  }
110
111
  catch (error) {
111
112
  const errorMessage = error instanceof Error ? error.message : String(error);
112
- console.log(chalk.red(`Error creating index '${index.key}': ${errorMessage}`));
113
+ MessageFormatter.error(`Error creating index '${index.key}': ${errorMessage} (type: ${index.type}, attributes: [${index.attributes.join(', ')}])`);
113
114
  // Check if this is a permanent error that shouldn't be retried
114
115
  if (errorMessage.toLowerCase().includes('not found') ||
115
116
  errorMessage.toLowerCase().includes('missing') ||
116
117
  errorMessage.toLowerCase().includes('does not exist') ||
117
118
  errorMessage.toLowerCase().includes('attribute') && errorMessage.toLowerCase().includes('not found')) {
118
- console.log(chalk.red(`❌ Index '${index.key}' has permanent error - not retrying`));
119
+ MessageFormatter.error(`Index '${index.key}' has permanent error - not retrying (type: ${index.type})`);
119
120
  return false;
120
121
  }
121
122
  if (retryCount < maxRetries) {
122
- console.log(chalk.yellow(`Retrying index '${index.key}' due to error...`));
123
+ MessageFormatter.warning(`Retrying index '${index.key}' due to error... (type: ${index.type}, attributes: [${index.attributes.join(', ')}])`);
123
124
  // Wait a bit before retry
124
125
  await delay(2000);
125
126
  return await createOrUpdateIndexWithStatusCheck(dbId, db, collectionId, collection, index, retryCount + 1, maxRetries);
@@ -131,44 +132,45 @@ export const createOrUpdateIndexWithStatusCheck = async (dbId, db, collectionId,
131
132
  * Enhanced index creation with status monitoring for all indexes
132
133
  */
133
134
  export const createOrUpdateIndexesWithStatusCheck = async (dbId, db, collectionId, collection, indexes) => {
134
- console.log(chalk.blue(`Creating/updating ${indexes.length} indexes with status monitoring...`));
135
+ MessageFormatter.info(`Creating/updating ${indexes.length} indexes with status monitoring for collection '${collectionId}'`);
135
136
  let indexesToProcess = [...indexes];
136
137
  let overallRetryCount = 0;
137
138
  const maxOverallRetries = 3;
138
139
  while (indexesToProcess.length > 0 && overallRetryCount < maxOverallRetries) {
139
140
  const remainingIndexes = [...indexesToProcess];
140
141
  indexesToProcess = []; // Reset for next iteration
141
- console.log(chalk.blue(`\n=== Attempt ${overallRetryCount + 1}/${maxOverallRetries} - Processing ${remainingIndexes.length} indexes ===`));
142
+ MessageFormatter.info(`\n=== Attempt ${overallRetryCount + 1}/${maxOverallRetries} - Processing ${remainingIndexes.length} indexes ===`);
142
143
  for (const index of remainingIndexes) {
143
- console.log(chalk.blue(`\n--- Processing index: ${index.key} ---`));
144
+ MessageFormatter.info(`\n--- Processing index: ${index.key} (type: ${index.type}, attributes: [${index.attributes.join(', ')}]) ---`);
144
145
  const success = await createOrUpdateIndexWithStatusCheck(dbId, db, collectionId, collection, index);
145
146
  if (success) {
146
- console.log(chalk.green(`✅ Successfully created index: ${index.key}`));
147
+ MessageFormatter.success(`Successfully created index: ${index.key} (type: ${index.type})`);
147
148
  // Add delay between successful indexes
148
149
  await delay(1000);
149
150
  }
150
151
  else {
151
- console.log(chalk.red(`❌ Failed to create index: ${index.key}, will retry in next round`));
152
+ MessageFormatter.error(`Failed to create index: ${index.key} (type: ${index.type}), will retry in next round`);
152
153
  indexesToProcess.push(index); // Add back to retry list
153
154
  }
154
155
  }
155
156
  if (indexesToProcess.length === 0) {
156
- console.log(chalk.green(`\n✅ Successfully created all ${indexes.length} indexes`));
157
+ MessageFormatter.success(`\nSuccessfully created all ${indexes.length} indexes for collection '${collectionId}'`);
157
158
  return true;
158
159
  }
159
160
  overallRetryCount++;
160
161
  if (overallRetryCount < maxOverallRetries) {
161
- console.log(chalk.yellow(`\n⏳ Waiting 5 seconds before retrying ${indexesToProcess.length} failed indexes...`));
162
+ MessageFormatter.warning(`\nWaiting 5 seconds before retrying ${indexesToProcess.length} failed indexes...`);
162
163
  await delay(5000);
163
164
  }
164
165
  }
165
166
  // If we get here, some indexes still failed after all retries
166
167
  if (indexesToProcess.length > 0) {
167
- console.log(chalk.red(`\n❌ Failed to create ${indexesToProcess.length} indexes after ${maxOverallRetries} attempts: ${indexesToProcess.map(i => i.key).join(', ')}`));
168
- console.log(chalk.red(`This may indicate a fundamental issue with the index definitions or Appwrite instance`));
168
+ const failedIndexKeys = indexesToProcess.map(i => `${i.key} (${i.type})`).join(', ');
169
+ MessageFormatter.error(`\nFailed to create ${indexesToProcess.length} indexes after ${maxOverallRetries} attempts: ${failedIndexKeys}`);
170
+ MessageFormatter.error(`This may indicate a fundamental issue with the index definitions or Appwrite instance`);
169
171
  return false;
170
172
  }
171
- console.log(chalk.green(`\n✅ Successfully created all ${indexes.length} indexes`));
173
+ MessageFormatter.success(`\nSuccessfully created all ${indexes.length} indexes for collection '${collectionId}'`);
172
174
  return true;
173
175
  };
174
176
  export const createOrUpdateIndex = async (dbId, db, collectionId, index) => {
@@ -1,19 +1,11 @@
1
1
  import { Databases, type Models } from "node-appwrite";
2
2
  import type { AppwriteConfig, CollectionCreate } from "appwrite-utils";
3
3
  import type { DatabaseAdapter } from "../adapters/DatabaseAdapter.js";
4
+ export { wipeDatabase, wipeCollection, wipeAllTables, wipeTableRows, } from "./wipeOperations.js";
5
+ export { transferDocumentsBetweenDbsLocalToLocal, transferDocumentsBetweenDbsLocalToRemote, } from "./transferOperations.js";
4
6
  export declare const documentExists: (db: Databases | DatabaseAdapter, dbId: string, targetCollectionId: string, toCreateObject: any) => Promise<Models.Document | null>;
5
7
  export declare const checkForCollection: (db: Databases | DatabaseAdapter, dbId: string, collection: Partial<CollectionCreate>) => Promise<Models.Collection | null>;
6
8
  export declare const fetchAndCacheCollectionByName: (db: Databases | DatabaseAdapter, dbId: string, collectionName: string) => Promise<Models.Collection | undefined>;
7
- export declare const wipeDatabase: (database: Databases, databaseId: string) => Promise<{
8
- collectionId: string;
9
- collectionName: string;
10
- }[]>;
11
- export declare const wipeCollection: (database: Databases, databaseId: string, collectionId: string) => Promise<void>;
12
- export declare const wipeAllTables: (adapter: DatabaseAdapter, databaseId: string) => Promise<{
13
- tableId: string;
14
- tableName: string;
15
- }[]>;
16
- export declare const wipeTableRows: (adapter: DatabaseAdapter, databaseId: string, tableId: string) => Promise<void>;
17
9
  export declare const generateSchemas: (config: AppwriteConfig, appwriteFolderPath: string) => Promise<void>;
18
10
  export declare const createOrUpdateCollections: (database: Databases, databaseId: string, config: AppwriteConfig, deletedCollections?: {
19
11
  collectionId: string;
@@ -25,9 +17,3 @@ export declare const createOrUpdateCollectionsViaAdapter: (adapter: DatabaseAdap
25
17
  }[], selectedCollections?: Models.Collection[]) => Promise<void>;
26
18
  export declare const generateMockData: (database: Databases, databaseId: string, configCollections: any[]) => Promise<void>;
27
19
  export declare const fetchAllCollections: (dbId: string, database: Databases) => Promise<Models.Collection[]>;
28
- /**
29
- * Transfers all documents from one collection to another in a different database
30
- * within the same Appwrite Project
31
- */
32
- export declare const transferDocumentsBetweenDbsLocalToLocal: (db: Databases, fromDbId: string, toDbId: string, fromCollId: string, toCollId: string) => Promise<void>;
33
- export declare const transferDocumentsBetweenDbsLocalToRemote: (localDb: Databases, endpoint: string, projectId: string, apiKey: string, fromDbId: string, toDbId: string, fromCollId: string, toCollId: string) => Promise<void>;