@njdamstra/appwrite-utils-cli 1.8.9 → 1.10.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.
- package/CHANGELOG.md +16 -0
- package/CONFIG_TODO.md +1189 -0
- package/SELECTION_DIALOGS.md +146 -0
- package/SERVICE_IMPLEMENTATION_REPORT.md +462 -0
- package/dist/adapters/index.d.ts +7 -8
- package/dist/adapters/index.js +7 -9
- package/dist/backups/operations/bucketBackup.js +2 -2
- package/dist/backups/operations/collectionBackup.d.ts +1 -1
- package/dist/backups/operations/collectionBackup.js +3 -3
- package/dist/backups/operations/comprehensiveBackup.d.ts +1 -1
- package/dist/backups/operations/comprehensiveBackup.js +2 -2
- package/dist/backups/tracking/centralizedTracking.d.ts +1 -1
- package/dist/backups/tracking/centralizedTracking.js +2 -2
- package/dist/cli/commands/configCommands.js +51 -7
- package/dist/cli/commands/databaseCommands.d.ts +1 -0
- package/dist/cli/commands/databaseCommands.js +119 -9
- package/dist/cli/commands/functionCommands.js +3 -3
- package/dist/cli/commands/importFileCommands.d.ts +7 -0
- package/dist/cli/commands/importFileCommands.js +674 -0
- package/dist/cli/commands/schemaCommands.js +3 -3
- package/dist/cli/commands/storageCommands.js +2 -3
- package/dist/cli/commands/transferCommands.js +3 -5
- package/dist/collections/attributes.d.ts +1 -1
- package/dist/collections/attributes.js +85 -35
- package/dist/collections/indexes.js +2 -4
- package/dist/collections/methods.d.ts +1 -1
- package/dist/collections/methods.js +111 -192
- package/dist/collections/tableOperations.d.ts +1 -0
- package/dist/collections/tableOperations.js +90 -23
- package/dist/collections/transferOperations.d.ts +1 -1
- package/dist/collections/transferOperations.js +3 -4
- package/dist/collections/wipeOperations.d.ts +4 -3
- package/dist/collections/wipeOperations.js +112 -39
- package/dist/databases/methods.js +2 -2
- package/dist/databases/setup.js +2 -2
- package/dist/examples/yamlTerminologyExample.js +2 -2
- package/dist/functions/deployments.d.ts +1 -1
- package/dist/functions/deployments.js +5 -5
- package/dist/functions/fnConfigDiscovery.js +2 -2
- package/dist/functions/methods.js +16 -4
- package/dist/init.js +1 -1
- package/dist/interactiveCLI.d.ts +6 -1
- package/dist/interactiveCLI.js +64 -10
- package/dist/main.js +130 -177
- package/dist/migrations/afterImportActions.js +2 -3
- package/dist/migrations/appwriteToX.d.ts +97 -1
- package/dist/migrations/appwriteToX.js +9 -7
- package/dist/migrations/comprehensiveTransfer.js +3 -5
- package/dist/migrations/dataLoader.d.ts +194 -2
- package/dist/migrations/dataLoader.js +2 -5
- package/dist/migrations/importController.js +3 -4
- package/dist/migrations/importDataActions.js +3 -3
- package/dist/migrations/relationships.js +1 -2
- package/dist/migrations/services/DataTransformationService.js +2 -2
- package/dist/migrations/services/FileHandlerService.js +1 -1
- package/dist/migrations/services/ImportOrchestrator.js +4 -4
- package/dist/migrations/services/RateLimitManager.js +1 -1
- package/dist/migrations/services/RelationshipResolver.js +1 -1
- package/dist/migrations/services/UserMappingService.js +1 -1
- package/dist/migrations/services/ValidationService.js +1 -1
- package/dist/migrations/transfer.d.ts +8 -4
- package/dist/migrations/transfer.js +106 -55
- package/dist/migrations/yaml/YamlImportConfigLoader.js +1 -1
- package/dist/migrations/yaml/YamlImportIntegration.js +2 -2
- package/dist/migrations/yaml/generateImportSchemas.js +1 -1
- package/dist/setupCommands.d.ts +1 -1
- package/dist/setupCommands.js +5 -6
- package/dist/setupController.js +1 -1
- package/dist/shared/backupTracking.d.ts +1 -1
- package/dist/shared/backupTracking.js +2 -2
- package/dist/shared/confirmationDialogs.js +1 -1
- package/dist/shared/migrationHelpers.d.ts +1 -1
- package/dist/shared/migrationHelpers.js +3 -3
- package/dist/shared/operationQueue.d.ts +1 -1
- package/dist/shared/operationQueue.js +2 -3
- package/dist/shared/operationsTable.d.ts +1 -1
- package/dist/shared/operationsTable.js +2 -2
- package/dist/shared/progressManager.js +1 -1
- package/dist/shared/selectionDialogs.js +9 -8
- package/dist/storage/methods.js +4 -4
- package/dist/storage/schemas.d.ts +386 -2
- package/dist/tables/indexManager.d.ts +65 -0
- package/dist/tables/indexManager.js +294 -0
- package/dist/types.d.ts +2 -2
- package/dist/types.js +1 -1
- package/dist/users/methods.js +2 -3
- package/dist/utils/configMigration.js +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/loadConfigs.d.ts +2 -2
- package/dist/utils/loadConfigs.js +6 -7
- package/dist/utils/setupFiles.js +5 -7
- package/dist/utilsController.d.ts +15 -8
- package/dist/utilsController.js +57 -28
- package/package.json +8 -4
- package/src/adapters/index.ts +8 -34
- package/src/backups/operations/bucketBackup.ts +2 -2
- package/src/backups/operations/collectionBackup.ts +4 -4
- package/src/backups/operations/comprehensiveBackup.ts +3 -3
- package/src/backups/tracking/centralizedTracking.ts +3 -3
- package/src/cli/commands/configCommands.ts +72 -8
- package/src/cli/commands/databaseCommands.ts +161 -9
- package/src/cli/commands/functionCommands.ts +4 -3
- package/src/cli/commands/importFileCommands.ts +815 -0
- package/src/cli/commands/schemaCommands.ts +3 -3
- package/src/cli/commands/storageCommands.ts +2 -3
- package/src/cli/commands/transferCommands.ts +3 -6
- package/src/collections/attributes.ts +155 -39
- package/src/collections/indexes.ts +5 -7
- package/src/collections/methods.ts +115 -150
- package/src/collections/tableOperations.ts +92 -21
- package/src/collections/transferOperations.ts +4 -5
- package/src/collections/wipeOperations.ts +154 -51
- package/src/databases/methods.ts +2 -2
- package/src/databases/setup.ts +2 -2
- package/src/examples/yamlTerminologyExample.ts +2 -2
- package/src/functions/deployments.ts +6 -5
- package/src/functions/fnConfigDiscovery.ts +2 -2
- package/src/functions/methods.ts +19 -6
- package/src/init.ts +1 -1
- package/src/interactiveCLI.ts +78 -13
- package/src/main.ts +143 -287
- package/src/migrations/afterImportActions.ts +2 -3
- package/src/migrations/appwriteToX.ts +12 -8
- package/src/migrations/comprehensiveTransfer.ts +6 -6
- package/src/migrations/dataLoader.ts +2 -5
- package/src/migrations/importController.ts +3 -4
- package/src/migrations/importDataActions.ts +3 -3
- package/src/migrations/relationships.ts +1 -2
- package/src/migrations/services/DataTransformationService.ts +2 -2
- package/src/migrations/services/FileHandlerService.ts +1 -1
- package/src/migrations/services/ImportOrchestrator.ts +4 -4
- package/src/migrations/services/RateLimitManager.ts +1 -1
- package/src/migrations/services/RelationshipResolver.ts +1 -1
- package/src/migrations/services/UserMappingService.ts +1 -1
- package/src/migrations/services/ValidationService.ts +1 -1
- package/src/migrations/transfer.ts +126 -83
- package/src/migrations/yaml/YamlImportConfigLoader.ts +1 -1
- package/src/migrations/yaml/YamlImportIntegration.ts +2 -2
- package/src/migrations/yaml/generateImportSchemas.ts +1 -1
- package/src/setupCommands.ts +5 -6
- package/src/setupController.ts +1 -1
- package/src/shared/backupTracking.ts +3 -3
- package/src/shared/confirmationDialogs.ts +1 -1
- package/src/shared/migrationHelpers.ts +4 -4
- package/src/shared/operationQueue.ts +3 -4
- package/src/shared/operationsTable.ts +3 -3
- package/src/shared/progressManager.ts +1 -1
- package/src/shared/selectionDialogs.ts +9 -8
- package/src/storage/methods.ts +4 -4
- package/src/tables/indexManager.ts +409 -0
- package/src/types.ts +2 -2
- package/src/users/methods.ts +2 -3
- package/src/utils/configMigration.ts +1 -1
- package/src/utils/index.ts +1 -1
- package/src/utils/loadConfigs.ts +15 -7
- package/src/utils/setupFiles.ts +5 -7
- package/src/utilsController.ts +86 -32
- package/dist/adapters/AdapterFactory.d.ts +0 -94
- package/dist/adapters/AdapterFactory.js +0 -405
- package/dist/adapters/DatabaseAdapter.d.ts +0 -233
- package/dist/adapters/DatabaseAdapter.js +0 -50
- package/dist/adapters/LegacyAdapter.d.ts +0 -50
- package/dist/adapters/LegacyAdapter.js +0 -612
- package/dist/adapters/TablesDBAdapter.d.ts +0 -45
- package/dist/adapters/TablesDBAdapter.js +0 -571
- package/dist/config/ConfigManager.d.ts +0 -445
- package/dist/config/ConfigManager.js +0 -625
- package/dist/config/configMigration.d.ts +0 -87
- package/dist/config/configMigration.js +0 -390
- package/dist/config/configValidation.d.ts +0 -66
- package/dist/config/configValidation.js +0 -358
- package/dist/config/index.d.ts +0 -8
- package/dist/config/index.js +0 -7
- package/dist/config/services/ConfigDiscoveryService.d.ts +0 -126
- package/dist/config/services/ConfigDiscoveryService.js +0 -374
- package/dist/config/services/ConfigLoaderService.d.ts +0 -129
- package/dist/config/services/ConfigLoaderService.js +0 -540
- package/dist/config/services/ConfigMergeService.d.ts +0 -208
- package/dist/config/services/ConfigMergeService.js +0 -308
- package/dist/config/services/ConfigValidationService.d.ts +0 -214
- package/dist/config/services/ConfigValidationService.js +0 -310
- package/dist/config/services/SessionAuthService.d.ts +0 -225
- package/dist/config/services/SessionAuthService.js +0 -456
- package/dist/config/services/__tests__/ConfigMergeService.test.d.ts +0 -1
- package/dist/config/services/__tests__/ConfigMergeService.test.js +0 -271
- package/dist/config/services/index.d.ts +0 -13
- package/dist/config/services/index.js +0 -10
- package/dist/config/yamlConfig.d.ts +0 -722
- package/dist/config/yamlConfig.js +0 -702
- package/dist/functions/pathResolution.d.ts +0 -37
- package/dist/functions/pathResolution.js +0 -185
- package/dist/shared/attributeMapper.d.ts +0 -20
- package/dist/shared/attributeMapper.js +0 -203
- package/dist/shared/errorUtils.d.ts +0 -54
- package/dist/shared/errorUtils.js +0 -95
- package/dist/shared/functionManager.d.ts +0 -48
- package/dist/shared/functionManager.js +0 -336
- package/dist/shared/indexManager.d.ts +0 -24
- package/dist/shared/indexManager.js +0 -151
- package/dist/shared/jsonSchemaGenerator.d.ts +0 -50
- package/dist/shared/jsonSchemaGenerator.js +0 -290
- package/dist/shared/logging.d.ts +0 -61
- package/dist/shared/logging.js +0 -116
- package/dist/shared/messageFormatter.d.ts +0 -39
- package/dist/shared/messageFormatter.js +0 -162
- package/dist/shared/pydanticModelGenerator.d.ts +0 -17
- package/dist/shared/pydanticModelGenerator.js +0 -615
- package/dist/shared/schemaGenerator.d.ts +0 -40
- package/dist/shared/schemaGenerator.js +0 -556
- package/dist/utils/ClientFactory.d.ts +0 -87
- package/dist/utils/ClientFactory.js +0 -212
- package/dist/utils/configDiscovery.d.ts +0 -78
- package/dist/utils/configDiscovery.js +0 -472
- package/dist/utils/constantsGenerator.d.ts +0 -31
- package/dist/utils/constantsGenerator.js +0 -321
- package/dist/utils/dataConverters.d.ts +0 -46
- package/dist/utils/dataConverters.js +0 -139
- package/dist/utils/directoryUtils.d.ts +0 -22
- package/dist/utils/directoryUtils.js +0 -59
- package/dist/utils/getClientFromConfig.d.ts +0 -39
- package/dist/utils/getClientFromConfig.js +0 -199
- package/dist/utils/helperFunctions.d.ts +0 -63
- package/dist/utils/helperFunctions.js +0 -156
- package/dist/utils/pathResolvers.d.ts +0 -53
- package/dist/utils/pathResolvers.js +0 -72
- package/dist/utils/projectConfig.d.ts +0 -119
- package/dist/utils/projectConfig.js +0 -171
- package/dist/utils/retryFailedPromises.d.ts +0 -2
- package/dist/utils/retryFailedPromises.js +0 -23
- package/dist/utils/sessionAuth.d.ts +0 -48
- package/dist/utils/sessionAuth.js +0 -164
- package/dist/utils/typeGuards.d.ts +0 -35
- package/dist/utils/typeGuards.js +0 -57
- package/dist/utils/validationRules.d.ts +0 -43
- package/dist/utils/validationRules.js +0 -42
- package/dist/utils/versionDetection.d.ts +0 -58
- package/dist/utils/versionDetection.js +0 -251
- package/dist/utils/yamlConverter.d.ts +0 -100
- package/dist/utils/yamlConverter.js +0 -428
- package/dist/utils/yamlLoader.d.ts +0 -70
- package/dist/utils/yamlLoader.js +0 -267
- package/src/adapters/AdapterFactory.ts +0 -510
- package/src/adapters/DatabaseAdapter.ts +0 -306
- package/src/adapters/LegacyAdapter.ts +0 -841
- package/src/adapters/TablesDBAdapter.ts +0 -773
- package/src/config/ConfigManager.ts +0 -808
- package/src/config/README.md +0 -274
- package/src/config/configMigration.ts +0 -575
- package/src/config/configValidation.ts +0 -445
- package/src/config/index.ts +0 -10
- package/src/config/services/ConfigDiscoveryService.ts +0 -463
- package/src/config/services/ConfigLoaderService.ts +0 -740
- package/src/config/services/ConfigMergeService.ts +0 -388
- package/src/config/services/ConfigValidationService.ts +0 -394
- package/src/config/services/SessionAuthService.ts +0 -565
- package/src/config/services/__tests__/ConfigMergeService.test.ts +0 -351
- package/src/config/services/index.ts +0 -29
- package/src/config/yamlConfig.ts +0 -761
- package/src/functions/pathResolution.ts +0 -227
- package/src/shared/attributeMapper.ts +0 -229
- package/src/shared/errorUtils.ts +0 -110
- package/src/shared/functionManager.ts +0 -525
- package/src/shared/indexManager.ts +0 -254
- package/src/shared/jsonSchemaGenerator.ts +0 -383
- package/src/shared/logging.ts +0 -149
- package/src/shared/messageFormatter.ts +0 -208
- package/src/shared/pydanticModelGenerator.ts +0 -618
- package/src/shared/schemaGenerator.ts +0 -644
- package/src/utils/ClientFactory.ts +0 -240
- package/src/utils/configDiscovery.ts +0 -557
- package/src/utils/constantsGenerator.ts +0 -369
- package/src/utils/dataConverters.ts +0 -159
- package/src/utils/directoryUtils.ts +0 -61
- package/src/utils/getClientFromConfig.ts +0 -257
- package/src/utils/helperFunctions.ts +0 -228
- package/src/utils/pathResolvers.ts +0 -81
- package/src/utils/projectConfig.ts +0 -299
- package/src/utils/retryFailedPromises.ts +0 -29
- package/src/utils/sessionAuth.ts +0 -230
- package/src/utils/typeGuards.ts +0 -65
- package/src/utils/validationRules.ts +0 -88
- package/src/utils/versionDetection.ts +0 -292
- package/src/utils/yamlConverter.ts +0 -542
- package/src/utils/yamlLoader.ts +0 -371
package/src/utilsController.ts
CHANGED
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
findAppwriteConfig,
|
|
16
16
|
findFunctionsDir,
|
|
17
17
|
} from "./utils/loadConfigs.js";
|
|
18
|
-
import { normalizeFunctionName, validateFunctionDirectory } from '
|
|
18
|
+
import { normalizeFunctionName, validateFunctionDirectory } from '@njdamstra/appwrite-utils-helpers';
|
|
19
19
|
import { UsersController } from "./users/methods.js";
|
|
20
20
|
import { AppwriteToX } from "./migrations/appwriteToX.js";
|
|
21
21
|
import { ImportController } from "./migrations/importController.js";
|
|
@@ -56,10 +56,10 @@ import {
|
|
|
56
56
|
transferUsersLocalToRemote,
|
|
57
57
|
type TransferOptions,
|
|
58
58
|
} from "./migrations/transfer.js";
|
|
59
|
-
import { getClient, getClientWithAuth } from "
|
|
60
|
-
import { getAdapterFromConfig } from "
|
|
61
|
-
import type { DatabaseAdapter } from '
|
|
62
|
-
import { hasSessionAuth, findSessionByEndpointAndProject, isValidSessionCookie, type SessionAuthInfo } from "
|
|
59
|
+
import { getClient, getClientWithAuth } from "@njdamstra/appwrite-utils-helpers";
|
|
60
|
+
import { getAdapterFromConfig } from "@njdamstra/appwrite-utils-helpers";
|
|
61
|
+
import type { DatabaseAdapter } from '@njdamstra/appwrite-utils-helpers';
|
|
62
|
+
import { hasSessionAuth, findSessionByEndpointAndProject, isValidSessionCookie, type SessionAuthInfo } from "@njdamstra/appwrite-utils-helpers";
|
|
63
63
|
import { fetchAllDatabases } from "./databases/methods.js";
|
|
64
64
|
import {
|
|
65
65
|
listFunctions,
|
|
@@ -68,20 +68,24 @@ import {
|
|
|
68
68
|
import chalk from "chalk";
|
|
69
69
|
import { deployLocalFunction } from "./functions/deployments.js";
|
|
70
70
|
import fs from "node:fs";
|
|
71
|
-
import { configureLogging, updateLogger, logger } from "./shared/logging.js";
|
|
72
|
-
import { MessageFormatter, Messages } from "./shared/messageFormatter.js";
|
|
73
|
-
import { SchemaGenerator } from "./shared/schemaGenerator.js";
|
|
74
|
-
import { findYamlConfig } from "./config/yamlConfig.js";
|
|
75
|
-
import { createImportSchemas } from "./migrations/yaml/generateImportSchemas.js";
|
|
76
71
|
import {
|
|
72
|
+
configureLogging,
|
|
73
|
+
updateLogger,
|
|
74
|
+
logger,
|
|
75
|
+
MessageFormatter,
|
|
76
|
+
Messages,
|
|
77
|
+
SchemaGenerator,
|
|
78
|
+
findYamlConfig,
|
|
77
79
|
validateCollectionsTablesConfig,
|
|
78
80
|
reportValidationResults,
|
|
79
81
|
validateWithStrictMode,
|
|
82
|
+
ConfigManager,
|
|
80
83
|
type ValidationResult
|
|
81
|
-
} from "
|
|
82
|
-
import {
|
|
83
|
-
import { ClientFactory } from "
|
|
84
|
+
} from "@njdamstra/appwrite-utils-helpers";
|
|
85
|
+
import { createImportSchemas } from "./migrations/yaml/generateImportSchemas.js";
|
|
86
|
+
import { ClientFactory } from "@njdamstra/appwrite-utils-helpers";
|
|
84
87
|
import type { DatabaseSelection, BucketSelection } from "./shared/selectionDialogs.js";
|
|
88
|
+
import { clearProcessingState, processQueue } from "./shared/operationQueue.js";
|
|
85
89
|
|
|
86
90
|
export interface SetupOptions {
|
|
87
91
|
databases?: Models.Database[];
|
|
@@ -98,6 +102,19 @@ export interface SetupOptions {
|
|
|
98
102
|
shouldWriteFile?: boolean;
|
|
99
103
|
}
|
|
100
104
|
|
|
105
|
+
export interface ControllerInitOptions {
|
|
106
|
+
validate?: boolean;
|
|
107
|
+
strictMode?: boolean;
|
|
108
|
+
useSession?: boolean;
|
|
109
|
+
sessionCookie?: string;
|
|
110
|
+
preferJson?: boolean;
|
|
111
|
+
overrides?: {
|
|
112
|
+
appwriteEndpoint?: string;
|
|
113
|
+
appwriteProject?: string;
|
|
114
|
+
appwriteKey?: string;
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
|
|
101
118
|
export class UtilsController {
|
|
102
119
|
// ──────────────────────────────────────────────────
|
|
103
120
|
// SINGLETON PATTERN
|
|
@@ -247,8 +264,8 @@ export class UtilsController {
|
|
|
247
264
|
}
|
|
248
265
|
}
|
|
249
266
|
|
|
250
|
-
async init(options:
|
|
251
|
-
const { validate = false, strictMode = false } = options;
|
|
267
|
+
async init(options: ControllerInitOptions = {}) {
|
|
268
|
+
const { validate = false, strictMode = false, preferJson = false, useSession, sessionCookie, overrides } = options;
|
|
252
269
|
const configManager = ConfigManager.getInstance();
|
|
253
270
|
|
|
254
271
|
// Load config if not already loaded
|
|
@@ -257,6 +274,10 @@ export class UtilsController {
|
|
|
257
274
|
configDir: this.currentUserDir,
|
|
258
275
|
validate,
|
|
259
276
|
strictMode,
|
|
277
|
+
preferJson,
|
|
278
|
+
useSession,
|
|
279
|
+
explicitSessionCookie: sessionCookie,
|
|
280
|
+
overrides,
|
|
260
281
|
});
|
|
261
282
|
}
|
|
262
283
|
|
|
@@ -504,7 +525,8 @@ export class UtilsController {
|
|
|
504
525
|
this.appwriteServer,
|
|
505
526
|
functionName,
|
|
506
527
|
functionConfig,
|
|
507
|
-
functionPath
|
|
528
|
+
functionPath,
|
|
529
|
+
this.appwriteFolderPath
|
|
508
530
|
);
|
|
509
531
|
}
|
|
510
532
|
|
|
@@ -628,7 +650,6 @@ export class UtilsController {
|
|
|
628
650
|
// Ensure we don't carry state between databases in a multi-db push
|
|
629
651
|
// This resets processed sets and name->id mapping per database
|
|
630
652
|
try {
|
|
631
|
-
const { clearProcessingState } = await import('./shared/operationQueue.js');
|
|
632
653
|
clearProcessingState();
|
|
633
654
|
} catch {}
|
|
634
655
|
|
|
@@ -656,6 +677,15 @@ export class UtilsController {
|
|
|
656
677
|
collections
|
|
657
678
|
);
|
|
658
679
|
}
|
|
680
|
+
|
|
681
|
+
// Safety net: Process any remaining queued operations to complete relationship sync
|
|
682
|
+
try {
|
|
683
|
+
MessageFormatter.info(`🔄 Processing final operation queue for database ${database.$id}`, { prefix: "UtilsController" });
|
|
684
|
+
await processQueue(this.adapter || this.database!, database.$id);
|
|
685
|
+
MessageFormatter.info(`✅ Operation queue processing completed`, { prefix: "UtilsController" });
|
|
686
|
+
} catch (error) {
|
|
687
|
+
MessageFormatter.error(`Failed to process operation queue`, error instanceof Error ? error : new Error(String(error)), { prefix: 'UtilsController' });
|
|
688
|
+
}
|
|
659
689
|
}
|
|
660
690
|
|
|
661
691
|
async generateSchemas() {
|
|
@@ -878,22 +908,40 @@ export class UtilsController {
|
|
|
878
908
|
|
|
879
909
|
// Convert database selections to Models.Database format
|
|
880
910
|
const selectedDatabases: Models.Database[] = [];
|
|
911
|
+
const serverDatabases = await fetchAllDatabases(this.database);
|
|
912
|
+
const configuredDatabases = this.config?.databases || [];
|
|
881
913
|
|
|
882
914
|
for (const dbSelection of databaseSelections) {
|
|
883
|
-
//
|
|
884
|
-
const
|
|
885
|
-
const database = databases.find(db => db.$id === dbSelection.databaseId);
|
|
886
|
-
|
|
887
|
-
if (database) {
|
|
888
|
-
selectedDatabases.push(database);
|
|
889
|
-
MessageFormatter.info(`Selected database: ${database.name} (${database.$id})`, { prefix: "Controller" });
|
|
915
|
+
// First try to find on server
|
|
916
|
+
const serverDb = serverDatabases.find(db => db.$id === dbSelection.databaseId);
|
|
890
917
|
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
}
|
|
918
|
+
if (serverDb) {
|
|
919
|
+
selectedDatabases.push(serverDb);
|
|
920
|
+
MessageFormatter.info(`Selected database: ${serverDb.name} (${serverDb.$id})`, { prefix: "Controller" });
|
|
895
921
|
} else {
|
|
896
|
-
|
|
922
|
+
// Database doesn't exist on server - check if it's in local config
|
|
923
|
+
const configDb = configuredDatabases.find((db: any) => db.$id === dbSelection.databaseId);
|
|
924
|
+
|
|
925
|
+
if (configDb) {
|
|
926
|
+
// Create a pseudo-database object that ensureDatabasesExist will create
|
|
927
|
+
const dbId = configDb.$id;
|
|
928
|
+
selectedDatabases.push({
|
|
929
|
+
$id: dbId,
|
|
930
|
+
name: configDb.name || dbId,
|
|
931
|
+
$createdAt: new Date().toISOString(),
|
|
932
|
+
$updatedAt: new Date().toISOString(),
|
|
933
|
+
enabled: true,
|
|
934
|
+
} as Models.Database);
|
|
935
|
+
MessageFormatter.info(`Selected database: ${configDb.name || dbId} (${dbId}) [will be created]`, { prefix: "Controller" });
|
|
936
|
+
} else {
|
|
937
|
+
MessageFormatter.warning(`Database with ID ${dbSelection.databaseId} not found in server or local config`, { prefix: "Controller" });
|
|
938
|
+
continue;
|
|
939
|
+
}
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
// Log selected tables for this database
|
|
943
|
+
if (dbSelection.tableIds && dbSelection.tableIds.length > 0) {
|
|
944
|
+
MessageFormatter.info(` Tables: ${dbSelection.tableIds.join(', ')}`, { prefix: "Controller" });
|
|
897
945
|
}
|
|
898
946
|
}
|
|
899
947
|
|
|
@@ -916,7 +964,10 @@ export class UtilsController {
|
|
|
916
964
|
const databaseCollectionsMap = new Map<string, any[]>();
|
|
917
965
|
|
|
918
966
|
// Get all collections/tables from config (they're at the root level, not nested in databases)
|
|
919
|
-
const allCollections =
|
|
967
|
+
const allCollections = [
|
|
968
|
+
...(this.config?.collections || []),
|
|
969
|
+
...(this.config?.tables || [])
|
|
970
|
+
];
|
|
920
971
|
|
|
921
972
|
// Create database-specific collection mapping to preserve relationships
|
|
922
973
|
for (const dbSelection of databaseSelections) {
|
|
@@ -1044,13 +1095,16 @@ export class UtilsController {
|
|
|
1044
1095
|
options.transferProject!,
|
|
1045
1096
|
options.transferKey!,
|
|
1046
1097
|
fromDb.$id,
|
|
1047
|
-
targetDb.$id
|
|
1098
|
+
targetDb.$id,
|
|
1099
|
+
options.collections
|
|
1048
1100
|
);
|
|
1049
1101
|
} else {
|
|
1050
1102
|
await transferDatabaseLocalToLocal(
|
|
1051
1103
|
sourceClient,
|
|
1052
1104
|
fromDb.$id,
|
|
1053
|
-
targetDb.$id
|
|
1105
|
+
targetDb.$id,
|
|
1106
|
+
options.collections,
|
|
1107
|
+
this.adapter
|
|
1054
1108
|
);
|
|
1055
1109
|
}
|
|
1056
1110
|
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AdapterFactory - Unified Client Creation with Automatic API Detection
|
|
3
|
-
*
|
|
4
|
-
* This factory creates the appropriate database adapter (TablesDB or Legacy)
|
|
5
|
-
* based on version detection and configuration. It handles dynamic SDK imports
|
|
6
|
-
* and provides a single entry point for all database operations.
|
|
7
|
-
*/
|
|
8
|
-
import type { AppwriteConfig } from "@njdamstra/appwrite-utils";
|
|
9
|
-
import { type ApiMode, type VersionDetectionResult } from "../utils/versionDetection.js";
|
|
10
|
-
import type { DatabaseAdapter } from './DatabaseAdapter.js';
|
|
11
|
-
export interface AdapterFactoryConfig {
|
|
12
|
-
appwriteEndpoint: string;
|
|
13
|
-
appwriteProject: string;
|
|
14
|
-
appwriteKey?: string;
|
|
15
|
-
apiMode?: 'auto' | 'legacy' | 'tablesdb';
|
|
16
|
-
forceRefresh?: boolean;
|
|
17
|
-
sessionCookie?: string;
|
|
18
|
-
authMethod?: 'session' | 'apikey' | 'auto';
|
|
19
|
-
preConfiguredClient?: any;
|
|
20
|
-
}
|
|
21
|
-
export interface AdapterFactoryResult {
|
|
22
|
-
adapter: DatabaseAdapter;
|
|
23
|
-
apiMode: ApiMode;
|
|
24
|
-
detectionResult?: VersionDetectionResult;
|
|
25
|
-
client: any;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* AdapterFactory - Main factory class for creating database adapters
|
|
29
|
-
*/
|
|
30
|
-
export declare class AdapterFactory {
|
|
31
|
-
private static cache;
|
|
32
|
-
private static readonly CACHE_DURATION;
|
|
33
|
-
/**
|
|
34
|
-
* Create a database adapter based on configuration and detection
|
|
35
|
-
*/
|
|
36
|
-
static create(config: AdapterFactoryConfig): Promise<AdapterFactoryResult>;
|
|
37
|
-
/**
|
|
38
|
-
* Create adapter from AppwriteConfig (convenience method)
|
|
39
|
-
*/
|
|
40
|
-
static createFromConfig(config: AppwriteConfig, forceRefresh?: boolean): Promise<AdapterFactoryResult>;
|
|
41
|
-
/**
|
|
42
|
-
* Create specific adapter type (internal method)
|
|
43
|
-
*/
|
|
44
|
-
private static createAdapter;
|
|
45
|
-
/**
|
|
46
|
-
* Create TablesDB adapter with dynamic import
|
|
47
|
-
*/
|
|
48
|
-
private static createTablesDBAdapter;
|
|
49
|
-
/**
|
|
50
|
-
* Create Legacy adapter with dynamic import
|
|
51
|
-
*/
|
|
52
|
-
private static createLegacyAdapter;
|
|
53
|
-
/**
|
|
54
|
-
* Get cached adapter if available and not expired
|
|
55
|
-
*/
|
|
56
|
-
private static getCachedAdapter;
|
|
57
|
-
/**
|
|
58
|
-
* Cache adapter instance
|
|
59
|
-
*/
|
|
60
|
-
private static setCachedAdapter;
|
|
61
|
-
/**
|
|
62
|
-
* Clear adapter cache (useful for testing)
|
|
63
|
-
*/
|
|
64
|
-
static clearCache(): void;
|
|
65
|
-
/**
|
|
66
|
-
* Validate authentication configuration
|
|
67
|
-
*/
|
|
68
|
-
private static validateAuthConfig;
|
|
69
|
-
/**
|
|
70
|
-
* Test connection and API capabilities
|
|
71
|
-
*/
|
|
72
|
-
static testConnection(config: AdapterFactoryConfig): Promise<{
|
|
73
|
-
success: boolean;
|
|
74
|
-
apiMode: ApiMode;
|
|
75
|
-
capabilities: string[];
|
|
76
|
-
error?: string;
|
|
77
|
-
}>;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Convenience function for quick adapter creation
|
|
81
|
-
*/
|
|
82
|
-
export declare function createDatabaseAdapter(endpoint: string, project: string, apiKey?: string, mode?: 'auto' | 'legacy' | 'tablesdb', sessionCookie?: string): Promise<DatabaseAdapter>;
|
|
83
|
-
/**
|
|
84
|
-
* Helper function to get adapter metadata without creating full adapter
|
|
85
|
-
*/
|
|
86
|
-
export declare function getApiCapabilities(endpoint: string, project: string, apiKey?: string, sessionCookie?: string): Promise<{
|
|
87
|
-
apiMode: ApiMode;
|
|
88
|
-
terminology: {
|
|
89
|
-
container: string;
|
|
90
|
-
item: string;
|
|
91
|
-
service: string;
|
|
92
|
-
};
|
|
93
|
-
capabilities: string[];
|
|
94
|
-
}>;
|