appwrite-utils-cli 1.5.1 → 1.6.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.
- package/CHANGELOG.md +199 -0
- package/README.md +251 -29
- package/dist/adapters/AdapterFactory.d.ts +10 -3
- package/dist/adapters/AdapterFactory.js +213 -17
- package/dist/adapters/TablesDBAdapter.js +60 -17
- package/dist/backups/operations/bucketBackup.d.ts +19 -0
- package/dist/backups/operations/bucketBackup.js +197 -0
- package/dist/backups/operations/collectionBackup.d.ts +30 -0
- package/dist/backups/operations/collectionBackup.js +201 -0
- package/dist/backups/operations/comprehensiveBackup.d.ts +25 -0
- package/dist/backups/operations/comprehensiveBackup.js +238 -0
- package/dist/backups/schemas/bucketManifest.d.ts +93 -0
- package/dist/backups/schemas/bucketManifest.js +33 -0
- package/dist/backups/schemas/comprehensiveManifest.d.ts +108 -0
- package/dist/backups/schemas/comprehensiveManifest.js +32 -0
- package/dist/backups/tracking/centralizedTracking.d.ts +34 -0
- package/dist/backups/tracking/centralizedTracking.js +274 -0
- package/dist/cli/commands/configCommands.d.ts +8 -0
- package/dist/cli/commands/configCommands.js +160 -0
- package/dist/cli/commands/databaseCommands.d.ts +13 -0
- package/dist/cli/commands/databaseCommands.js +478 -0
- package/dist/cli/commands/functionCommands.d.ts +7 -0
- package/dist/cli/commands/functionCommands.js +289 -0
- package/dist/cli/commands/schemaCommands.d.ts +7 -0
- package/dist/cli/commands/schemaCommands.js +134 -0
- package/dist/cli/commands/transferCommands.d.ts +5 -0
- package/dist/cli/commands/transferCommands.js +384 -0
- package/dist/collections/attributes.d.ts +5 -4
- package/dist/collections/attributes.js +539 -246
- package/dist/collections/indexes.js +39 -37
- package/dist/collections/methods.d.ts +2 -16
- package/dist/collections/methods.js +90 -538
- package/dist/collections/transferOperations.d.ts +7 -0
- package/dist/collections/transferOperations.js +331 -0
- package/dist/collections/wipeOperations.d.ts +16 -0
- package/dist/collections/wipeOperations.js +328 -0
- package/dist/config/configMigration.d.ts +87 -0
- package/dist/config/configMigration.js +390 -0
- package/dist/config/configValidation.d.ts +66 -0
- package/dist/config/configValidation.js +358 -0
- package/dist/config/yamlConfig.d.ts +455 -1
- package/dist/config/yamlConfig.js +145 -52
- package/dist/databases/methods.js +3 -2
- package/dist/databases/setup.d.ts +1 -2
- package/dist/databases/setup.js +9 -87
- package/dist/examples/yamlTerminologyExample.d.ts +42 -0
- package/dist/examples/yamlTerminologyExample.js +269 -0
- package/dist/functions/deployments.js +11 -10
- package/dist/functions/methods.d.ts +1 -1
- package/dist/functions/methods.js +5 -4
- package/dist/init.js +9 -9
- package/dist/interactiveCLI.d.ts +8 -17
- package/dist/interactiveCLI.js +186 -1171
- package/dist/main.js +364 -21
- package/dist/migrations/afterImportActions.js +22 -30
- package/dist/migrations/appwriteToX.js +71 -25
- package/dist/migrations/dataLoader.js +35 -26
- package/dist/migrations/importController.js +29 -30
- package/dist/migrations/relationships.js +13 -12
- package/dist/migrations/services/ImportOrchestrator.js +16 -19
- package/dist/migrations/transfer.js +46 -46
- package/dist/migrations/yaml/YamlImportConfigLoader.d.ts +3 -1
- package/dist/migrations/yaml/YamlImportConfigLoader.js +6 -3
- package/dist/migrations/yaml/YamlImportIntegration.d.ts +9 -3
- package/dist/migrations/yaml/YamlImportIntegration.js +22 -11
- package/dist/migrations/yaml/generateImportSchemas.d.ts +14 -1
- package/dist/migrations/yaml/generateImportSchemas.js +736 -7
- package/dist/schemas/authUser.d.ts +1 -1
- package/dist/setupController.js +3 -2
- package/dist/shared/backupMetadataSchema.d.ts +94 -0
- package/dist/shared/backupMetadataSchema.js +38 -0
- package/dist/shared/backupTracking.d.ts +18 -0
- package/dist/shared/backupTracking.js +176 -0
- package/dist/shared/confirmationDialogs.js +15 -15
- package/dist/shared/errorUtils.d.ts +54 -0
- package/dist/shared/errorUtils.js +95 -0
- package/dist/shared/functionManager.js +20 -19
- package/dist/shared/indexManager.js +12 -11
- package/dist/shared/jsonSchemaGenerator.js +10 -26
- package/dist/shared/logging.d.ts +51 -0
- package/dist/shared/logging.js +70 -0
- package/dist/shared/messageFormatter.d.ts +2 -0
- package/dist/shared/messageFormatter.js +10 -0
- package/dist/shared/migrationHelpers.d.ts +6 -16
- package/dist/shared/migrationHelpers.js +24 -21
- package/dist/shared/operationLogger.d.ts +8 -1
- package/dist/shared/operationLogger.js +11 -24
- package/dist/shared/operationQueue.d.ts +28 -1
- package/dist/shared/operationQueue.js +268 -66
- package/dist/shared/operationsTable.d.ts +26 -0
- package/dist/shared/operationsTable.js +286 -0
- package/dist/shared/operationsTableSchema.d.ts +48 -0
- package/dist/shared/operationsTableSchema.js +35 -0
- package/dist/shared/relationshipExtractor.d.ts +56 -0
- package/dist/shared/relationshipExtractor.js +138 -0
- package/dist/shared/schemaGenerator.d.ts +19 -1
- package/dist/shared/schemaGenerator.js +56 -75
- package/dist/storage/backupCompression.d.ts +20 -0
- package/dist/storage/backupCompression.js +67 -0
- package/dist/storage/methods.d.ts +16 -2
- package/dist/storage/methods.js +98 -14
- package/dist/users/methods.js +9 -8
- package/dist/utils/configDiscovery.d.ts +78 -0
- package/dist/utils/configDiscovery.js +430 -0
- package/dist/utils/directoryUtils.d.ts +22 -0
- package/dist/utils/directoryUtils.js +59 -0
- package/dist/utils/getClientFromConfig.d.ts +17 -8
- package/dist/utils/getClientFromConfig.js +162 -17
- package/dist/utils/helperFunctions.d.ts +16 -2
- package/dist/utils/helperFunctions.js +19 -5
- package/dist/utils/loadConfigs.d.ts +34 -9
- package/dist/utils/loadConfigs.js +236 -316
- package/dist/utils/pathResolvers.d.ts +53 -0
- package/dist/utils/pathResolvers.js +72 -0
- package/dist/utils/projectConfig.d.ts +119 -0
- package/dist/utils/projectConfig.js +171 -0
- package/dist/utils/retryFailedPromises.js +4 -2
- package/dist/utils/sessionAuth.d.ts +48 -0
- package/dist/utils/sessionAuth.js +164 -0
- package/dist/utils/sessionPreservationExample.d.ts +1666 -0
- package/dist/utils/sessionPreservationExample.js +101 -0
- package/dist/utils/setupFiles.js +301 -41
- package/dist/utils/typeGuards.d.ts +35 -0
- package/dist/utils/typeGuards.js +57 -0
- package/dist/utils/versionDetection.js +145 -9
- package/dist/utils/yamlConverter.d.ts +53 -3
- package/dist/utils/yamlConverter.js +232 -13
- package/dist/utils/yamlLoader.d.ts +70 -0
- package/dist/utils/yamlLoader.js +263 -0
- package/dist/utilsController.d.ts +36 -3
- package/dist/utilsController.js +186 -56
- package/package.json +12 -2
- package/src/adapters/AdapterFactory.ts +263 -35
- package/src/adapters/TablesDBAdapter.ts +225 -36
- package/src/backups/operations/bucketBackup.ts +277 -0
- package/src/backups/operations/collectionBackup.ts +310 -0
- package/src/backups/operations/comprehensiveBackup.ts +342 -0
- package/src/backups/schemas/bucketManifest.ts +78 -0
- package/src/backups/schemas/comprehensiveManifest.ts +76 -0
- package/src/backups/tracking/centralizedTracking.ts +352 -0
- package/src/cli/commands/configCommands.ts +194 -0
- package/src/cli/commands/databaseCommands.ts +635 -0
- package/src/cli/commands/functionCommands.ts +379 -0
- package/src/cli/commands/schemaCommands.ts +163 -0
- package/src/cli/commands/transferCommands.ts +457 -0
- package/src/collections/attributes.ts +900 -621
- package/src/collections/attributes.ts.backup +1555 -0
- package/src/collections/indexes.ts +116 -114
- package/src/collections/methods.ts +295 -968
- package/src/collections/transferOperations.ts +516 -0
- package/src/collections/wipeOperations.ts +501 -0
- package/src/config/README.md +274 -0
- package/src/config/configMigration.ts +575 -0
- package/src/config/configValidation.ts +445 -0
- package/src/config/yamlConfig.ts +168 -55
- package/src/databases/methods.ts +3 -2
- package/src/databases/setup.ts +11 -138
- package/src/examples/yamlTerminologyExample.ts +341 -0
- package/src/functions/deployments.ts +14 -12
- package/src/functions/methods.ts +11 -11
- package/src/functions/templates/hono-typescript/README.md +286 -0
- package/src/functions/templates/hono-typescript/package.json +26 -0
- package/src/functions/templates/hono-typescript/src/adapters/request.ts +74 -0
- package/src/functions/templates/hono-typescript/src/adapters/response.ts +106 -0
- package/src/functions/templates/hono-typescript/src/app.ts +180 -0
- package/src/functions/templates/hono-typescript/src/context.ts +103 -0
- package/src/functions/templates/hono-typescript/src/index.ts +54 -0
- package/src/functions/templates/hono-typescript/src/middleware/appwrite.ts +119 -0
- package/src/functions/templates/hono-typescript/tsconfig.json +20 -0
- package/src/functions/templates/typescript-node/package.json +2 -1
- package/src/functions/templates/typescript-node/src/context.ts +103 -0
- package/src/functions/templates/typescript-node/src/index.ts +18 -12
- package/src/functions/templates/uv/pyproject.toml +1 -0
- package/src/functions/templates/uv/src/context.py +125 -0
- package/src/functions/templates/uv/src/index.py +35 -5
- package/src/init.ts +9 -11
- package/src/interactiveCLI.ts +276 -1591
- package/src/main.ts +418 -24
- package/src/migrations/afterImportActions.ts +71 -44
- package/src/migrations/appwriteToX.ts +100 -34
- package/src/migrations/dataLoader.ts +48 -34
- package/src/migrations/importController.ts +44 -39
- package/src/migrations/relationships.ts +28 -18
- package/src/migrations/services/ImportOrchestrator.ts +24 -27
- package/src/migrations/transfer.ts +159 -121
- package/src/migrations/yaml/YamlImportConfigLoader.ts +11 -4
- package/src/migrations/yaml/YamlImportIntegration.ts +47 -20
- package/src/migrations/yaml/generateImportSchemas.ts +751 -12
- package/src/setupController.ts +3 -2
- package/src/shared/backupMetadataSchema.ts +93 -0
- package/src/shared/backupTracking.ts +211 -0
- package/src/shared/confirmationDialogs.ts +19 -19
- package/src/shared/errorUtils.ts +110 -0
- package/src/shared/functionManager.ts +21 -20
- package/src/shared/indexManager.ts +12 -11
- package/src/shared/jsonSchemaGenerator.ts +38 -52
- package/src/shared/logging.ts +75 -0
- package/src/shared/messageFormatter.ts +14 -1
- package/src/shared/migrationHelpers.ts +45 -38
- package/src/shared/operationLogger.ts +11 -36
- package/src/shared/operationQueue.ts +322 -93
- package/src/shared/operationsTable.ts +338 -0
- package/src/shared/operationsTableSchema.ts +60 -0
- package/src/shared/relationshipExtractor.ts +214 -0
- package/src/shared/schemaGenerator.ts +179 -219
- package/src/storage/backupCompression.ts +88 -0
- package/src/storage/methods.ts +131 -34
- package/src/users/methods.ts +11 -9
- package/src/utils/configDiscovery.ts +502 -0
- package/src/utils/directoryUtils.ts +61 -0
- package/src/utils/getClientFromConfig.ts +205 -22
- package/src/utils/helperFunctions.ts +23 -5
- package/src/utils/loadConfigs.ts +313 -345
- package/src/utils/pathResolvers.ts +81 -0
- package/src/utils/projectConfig.ts +299 -0
- package/src/utils/retryFailedPromises.ts +4 -2
- package/src/utils/sessionAuth.ts +230 -0
- package/src/utils/setupFiles.ts +322 -54
- package/src/utils/typeGuards.ts +65 -0
- package/src/utils/versionDetection.ts +218 -64
- package/src/utils/yamlConverter.ts +296 -13
- package/src/utils/yamlLoader.ts +364 -0
- package/src/utilsController.ts +314 -110
- package/tests/README.md +497 -0
- package/tests/adapters/AdapterFactory.test.ts +277 -0
- package/tests/integration/syncOperations.test.ts +463 -0
- package/tests/jest.config.js +25 -0
- package/tests/migration/configMigration.test.ts +546 -0
- package/tests/setup.ts +62 -0
- package/tests/testUtils.ts +340 -0
- package/tests/utils/loadConfigs.test.ts +350 -0
- package/tests/validation/configValidation.test.ts +412 -0
- 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
|
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 =
|
15
|
-
|
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
|
-
|
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
|
24
|
+
const indexList = await (isLegacyDatabases(db)
|
24
25
|
? db.listIndexes(dbId, collectionId)
|
25
26
|
: db.listIndexes({ databaseId: dbId, tableId: collectionId }));
|
26
|
-
const indexes = (db
|
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
|
-
|
32
|
+
MessageFormatter.error(`Index '${indexKey}' not found in database '${dbId}' collection '${collectionId}'`);
|
32
33
|
return false;
|
33
34
|
}
|
34
|
-
if (db
|
35
|
-
|
35
|
+
if (isLegacyDatabases(db)) {
|
36
|
+
MessageFormatter.debug(`Index '${indexKey}' status: ${index.status}`);
|
36
37
|
}
|
37
38
|
else {
|
38
|
-
|
39
|
+
MessageFormatter.debug(`Index '${indexKey}' detected (TablesDB)`);
|
39
40
|
}
|
40
41
|
switch (index.status) {
|
41
42
|
case 'available':
|
42
|
-
|
43
|
+
MessageFormatter.success(`Index '${indexKey}' is now available (type: ${index.type}, attributes: [${index.attributes.join(', ')}])`);
|
43
44
|
return true;
|
44
45
|
case 'failed':
|
45
|
-
|
46
|
+
MessageFormatter.error(`Index '${indexKey}' failed: ${index.error} (type: ${index.type}, attributes: [${index.attributes.join(', ')}])`);
|
46
47
|
return false;
|
47
48
|
case 'stuck':
|
48
|
-
|
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
|
-
|
55
|
+
MessageFormatter.warning(`Index '${indexKey}' is being deleted`);
|
55
56
|
break;
|
56
57
|
default:
|
57
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
88
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
142
|
+
MessageFormatter.info(`\n=== Attempt ${overallRetryCount + 1}/${maxOverallRetries} - Processing ${remainingIndexes.length} indexes ===`);
|
142
143
|
for (const index of remainingIndexes) {
|
143
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
168
|
-
|
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
|
-
|
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>;
|