appwrite-utils-cli 1.9.7 → 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.
- package/README.md +1004 -1004
- 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.js +156 -104
- 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 → columns.d.ts} +1 -1
- package/dist/collections/{attributes.js → columns.js} +15 -9
- package/dist/collections/indexes.js +1 -3
- package/dist/collections/methods.d.ts +1 -1
- package/dist/collections/methods.js +38 -20
- package/dist/collections/tableOperations.d.ts +1 -0
- package/dist/collections/tableOperations.js +30 -11
- 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 +6 -6
- package/dist/functions/fnConfigDiscovery.js +2 -2
- package/dist/functions/methods.js +2 -2
- package/dist/functions/templates/count-docs-in-collection/README.md +53 -53
- package/dist/functions/templates/count-docs-in-collection/src/main.ts +159 -159
- package/dist/functions/templates/count-docs-in-collection/src/request.ts +8 -8
- package/dist/functions/templates/hono-typescript/README.md +285 -285
- package/dist/functions/templates/hono-typescript/src/adapters/request.ts +73 -73
- package/dist/functions/templates/hono-typescript/src/adapters/response.ts +105 -105
- package/dist/functions/templates/hono-typescript/src/app.ts +179 -179
- package/dist/functions/templates/hono-typescript/src/context.ts +102 -102
- package/{src/functions/templates/hono-typescript/src/index.ts → dist/functions/templates/hono-typescript/src/main.ts} +53 -53
- package/dist/functions/templates/hono-typescript/src/middleware/appwrite.ts +118 -118
- package/dist/functions/templates/typescript-node/README.md +31 -31
- package/dist/functions/templates/typescript-node/src/context.ts +102 -102
- package/dist/functions/templates/typescript-node/src/{index.ts → main.ts} +29 -29
- package/dist/functions/templates/uv/README.md +30 -30
- package/dist/functions/templates/uv/pyproject.toml +29 -29
- package/dist/functions/templates/uv/src/context.py +124 -124
- package/dist/functions/templates/uv/src/{index.py → main.py} +45 -45
- package/dist/init.js +1 -1
- package/dist/interactiveCLI.d.ts +6 -1
- package/dist/interactiveCLI.js +79 -25
- package/dist/main.js +125 -180
- package/dist/migrations/afterImportActions.js +2 -3
- package/dist/migrations/appwriteToX.d.ts +1 -1
- package/dist/migrations/appwriteToX.js +10 -8
- package/dist/migrations/comprehensiveTransfer.js +3 -5
- package/dist/migrations/dataLoader.d.ts +4 -2
- package/dist/migrations/dataLoader.js +42 -20
- package/dist/migrations/importController.d.ts +2 -0
- package/dist/migrations/importController.js +39 -24
- 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.d.ts +2 -0
- package/dist/migrations/services/ImportOrchestrator.js +15 -7
- 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 +108 -55
- package/dist/migrations/yaml/YamlImportConfigLoader.js +52 -52
- package/dist/migrations/yaml/YamlImportIntegration.js +2 -2
- package/dist/migrations/yaml/generateImportSchemas.js +174 -174
- 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 +4 -4
- package/dist/shared/operationQueue.d.ts +1 -1
- package/dist/shared/operationQueue.js +3 -4
- package/dist/shared/operationsTable.d.ts +1 -1
- package/dist/shared/operationsTable.js +35 -34
- package/dist/shared/operationsTableSchema.d.ts +3 -3
- package/dist/shared/operationsTableSchema.js +2 -2
- package/dist/shared/progressManager.js +1 -1
- package/dist/shared/selectionDialogs.d.ts +6 -0
- package/dist/shared/selectionDialogs.js +56 -12
- package/dist/storage/methods.d.ts +12 -0
- package/dist/storage/methods.js +92 -89
- package/dist/storage/schemas.d.ts +2 -2
- package/dist/tables/indexManager.d.ts +1 -1
- package/dist/tables/indexManager.js +2 -2
- 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 +139 -141
- package/dist/utilsController.d.ts +16 -9
- package/dist/utilsController.js +93 -68
- package/package.json +9 -3
- package/.appwrite/.yaml_schemas/appwrite-config.schema.json +0 -380
- package/.appwrite/.yaml_schemas/collection.schema.json +0 -255
- package/.appwrite/collections/Categories.yaml +0 -182
- package/.appwrite/collections/ExampleCollection.yaml +0 -36
- package/.appwrite/collections/Posts.yaml +0 -227
- package/.appwrite/collections/Users.yaml +0 -149
- package/.appwrite/config.yaml +0 -109
- package/.appwrite/import/README.md +0 -148
- package/.appwrite/import/categories-import.yaml +0 -129
- package/.appwrite/import/posts-import.yaml +0 -208
- package/.appwrite/import/users-import.yaml +0 -130
- package/.appwrite/importData/categories.json +0 -194
- package/.appwrite/importData/posts.json +0 -270
- package/.appwrite/importData/users.json +0 -220
- package/.appwrite/schemas/categories.json +0 -128
- package/.appwrite/schemas/exampleCollection.json +0 -52
- package/.appwrite/schemas/posts.json +0 -173
- package/.appwrite/schemas/users.json +0 -125
- package/CHANGELOG.md +0 -35
- package/CONFIG_TODO.md +0 -1189
- package/SELECTION_DIALOGS.md +0 -146
- package/SERVICE_IMPLEMENTATION_REPORT.md +0 -462
- package/dist/adapters/AdapterFactory.d.ts +0 -94
- package/dist/adapters/AdapterFactory.js +0 -420
- package/dist/adapters/DatabaseAdapter.d.ts +0 -243
- package/dist/adapters/DatabaseAdapter.js +0 -50
- package/dist/adapters/LegacyAdapter.d.ts +0 -50
- package/dist/adapters/LegacyAdapter.js +0 -615
- package/dist/adapters/TablesDBAdapter.d.ts +0 -45
- package/dist/adapters/TablesDBAdapter.js +0 -611
- package/dist/config/ConfigManager.d.ts +0 -450
- package/dist/config/ConfigManager.js +0 -650
- 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 -122
- package/dist/config/services/ConfigDiscoveryService.js +0 -322
- package/dist/config/services/ConfigLoaderService.d.ts +0 -129
- package/dist/config/services/ConfigLoaderService.js +0 -535
- 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/functions/templates/count-docs-in-collection/package.json +0 -25
- package/dist/functions/templates/count-docs-in-collection/tsconfig.json +0 -28
- package/dist/functions/templates/hono-typescript/package.json +0 -26
- package/dist/functions/templates/hono-typescript/src/index.ts +0 -54
- package/dist/functions/templates/hono-typescript/tsconfig.json +0 -20
- package/dist/functions/templates/typescript-node/package.json +0 -25
- package/dist/functions/templates/typescript-node/tsconfig.json +0 -28
- 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 -348
- 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 -122
- package/dist/utils/projectConfig.js +0 -206
- 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/scripts/copy-templates.ts +0 -23
- package/src/adapters/AdapterFactory.ts +0 -529
- package/src/adapters/DatabaseAdapter.ts +0 -319
- package/src/adapters/LegacyAdapter.ts +0 -844
- package/src/adapters/TablesDBAdapter.ts +0 -823
- package/src/adapters/index.ts +0 -37
- package/src/backups/operations/bucketBackup.ts +0 -277
- package/src/backups/operations/collectionBackup.ts +0 -310
- package/src/backups/operations/comprehensiveBackup.ts +0 -342
- package/src/backups/schemas/bucketManifest.ts +0 -78
- package/src/backups/schemas/comprehensiveManifest.ts +0 -76
- package/src/backups/tracking/centralizedTracking.ts +0 -352
- package/src/cli/commands/configCommands.ts +0 -201
- package/src/cli/commands/databaseCommands.ts +0 -879
- package/src/cli/commands/functionCommands.ts +0 -418
- package/src/cli/commands/schemaCommands.ts +0 -200
- package/src/cli/commands/storageCommands.ts +0 -152
- package/src/cli/commands/transferCommands.ts +0 -457
- package/src/collections/attributes.ts +0 -2020
- package/src/collections/attributes.ts.backup +0 -1555
- package/src/collections/indexes.ts +0 -352
- package/src/collections/methods.ts +0 -700
- package/src/collections/tableOperations.ts +0 -521
- package/src/collections/transferOperations.ts +0 -590
- package/src/collections/wipeOperations.ts +0 -346
- package/src/config/ConfigManager.ts +0 -849
- 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 -410
- package/src/config/services/ConfigLoaderService.ts +0 -732
- 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/databases/methods.ts +0 -49
- package/src/databases/setup.ts +0 -77
- package/src/examples/yamlTerminologyExample.ts +0 -346
- package/src/functions/deployments.ts +0 -220
- package/src/functions/fnConfigDiscovery.ts +0 -103
- package/src/functions/methods.ts +0 -284
- package/src/functions/pathResolution.ts +0 -227
- package/src/functions/templates/count-docs-in-collection/README.md +0 -54
- package/src/functions/templates/count-docs-in-collection/package.json +0 -25
- package/src/functions/templates/count-docs-in-collection/src/main.ts +0 -159
- package/src/functions/templates/count-docs-in-collection/src/request.ts +0 -9
- package/src/functions/templates/count-docs-in-collection/tsconfig.json +0 -28
- package/src/functions/templates/hono-typescript/README.md +0 -286
- package/src/functions/templates/hono-typescript/package.json +0 -26
- package/src/functions/templates/hono-typescript/src/adapters/request.ts +0 -74
- package/src/functions/templates/hono-typescript/src/adapters/response.ts +0 -106
- package/src/functions/templates/hono-typescript/src/app.ts +0 -180
- package/src/functions/templates/hono-typescript/src/context.ts +0 -103
- package/src/functions/templates/hono-typescript/src/middleware/appwrite.ts +0 -119
- package/src/functions/templates/hono-typescript/tsconfig.json +0 -20
- package/src/functions/templates/typescript-node/README.md +0 -32
- package/src/functions/templates/typescript-node/package.json +0 -25
- package/src/functions/templates/typescript-node/src/context.ts +0 -103
- package/src/functions/templates/typescript-node/src/index.ts +0 -29
- package/src/functions/templates/typescript-node/tsconfig.json +0 -28
- package/src/functions/templates/uv/README.md +0 -31
- package/src/functions/templates/uv/pyproject.toml +0 -30
- package/src/functions/templates/uv/src/__init__.py +0 -0
- package/src/functions/templates/uv/src/context.py +0 -125
- package/src/functions/templates/uv/src/index.py +0 -46
- package/src/init.ts +0 -62
- package/src/interactiveCLI.ts +0 -1136
- package/src/main.ts +0 -1670
- package/src/migrations/afterImportActions.ts +0 -580
- package/src/migrations/appwriteToX.ts +0 -664
- package/src/migrations/comprehensiveTransfer.ts +0 -2285
- package/src/migrations/dataLoader.ts +0 -1702
- package/src/migrations/importController.ts +0 -428
- package/src/migrations/importDataActions.ts +0 -315
- package/src/migrations/relationships.ts +0 -334
- package/src/migrations/services/DataTransformationService.ts +0 -196
- package/src/migrations/services/FileHandlerService.ts +0 -311
- package/src/migrations/services/ImportOrchestrator.ts +0 -666
- package/src/migrations/services/RateLimitManager.ts +0 -363
- package/src/migrations/services/RelationshipResolver.ts +0 -461
- package/src/migrations/services/UserMappingService.ts +0 -345
- package/src/migrations/services/ValidationService.ts +0 -349
- package/src/migrations/transfer.ts +0 -1068
- package/src/migrations/yaml/YamlImportConfigLoader.ts +0 -439
- package/src/migrations/yaml/YamlImportIntegration.ts +0 -446
- package/src/migrations/yaml/generateImportSchemas.ts +0 -1354
- package/src/schemas/authUser.ts +0 -23
- package/src/setup.ts +0 -8
- package/src/setupCommands.ts +0 -603
- package/src/setupController.ts +0 -43
- package/src/shared/attributeMapper.ts +0 -229
- package/src/shared/backupMetadataSchema.ts +0 -93
- package/src/shared/backupTracking.ts +0 -211
- package/src/shared/confirmationDialogs.ts +0 -327
- package/src/shared/errorUtils.ts +0 -110
- package/src/shared/functionManager.ts +0 -537
- package/src/shared/jsonSchemaGenerator.ts +0 -383
- package/src/shared/logging.ts +0 -149
- package/src/shared/messageFormatter.ts +0 -208
- package/src/shared/migrationHelpers.ts +0 -232
- package/src/shared/operationLogger.ts +0 -20
- package/src/shared/operationQueue.ts +0 -377
- package/src/shared/operationsTable.ts +0 -338
- package/src/shared/operationsTableSchema.ts +0 -60
- package/src/shared/progressManager.ts +0 -278
- package/src/shared/pydanticModelGenerator.ts +0 -618
- package/src/shared/relationshipExtractor.ts +0 -214
- package/src/shared/schemaGenerator.ts +0 -644
- package/src/shared/selectionDialogs.ts +0 -749
- package/src/storage/backupCompression.ts +0 -88
- package/src/storage/methods.ts +0 -698
- package/src/storage/schemas.ts +0 -205
- package/src/tables/indexManager.ts +0 -409
- package/src/types/node-appwrite-tablesdb.d.ts +0 -44
- package/src/types.ts +0 -9
- package/src/users/methods.ts +0 -359
- package/src/utils/ClientFactory.ts +0 -240
- package/src/utils/configDiscovery.ts +0 -557
- package/src/utils/configMigration.ts +0 -348
- 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/index.ts +0 -2
- package/src/utils/loadConfigs.ts +0 -449
- package/src/utils/pathResolvers.ts +0 -81
- package/src/utils/projectConfig.ts +0 -340
- package/src/utils/retryFailedPromises.ts +0 -29
- package/src/utils/sessionAuth.ts +0 -230
- package/src/utils/setupFiles.ts +0 -1238
- 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 +0 -1213
- package/tests/README.md +0 -497
- package/tests/adapters/AdapterFactory.test.ts +0 -277
- package/tests/integration/syncOperations.test.ts +0 -463
- package/tests/jest.config.js +0 -25
- package/tests/migration/configMigration.test.ts +0 -546
- package/tests/setup.ts +0 -62
- package/tests/testUtils.ts +0 -340
- package/tests/utils/loadConfigs.test.ts +0 -350
- package/tests/validation/configValidation.test.ts +0 -412
- package/tmp-sync-test/.appwrite/collections/TestCollection.yaml +0 -7
- package/tsconfig.json +0 -44
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
import { AttributeMappingsSchema, CollectionCreateSchema, importDefSchema, } from "appwrite-utils";
|
|
2
2
|
import path from "path";
|
|
3
3
|
import fs from "fs";
|
|
4
|
-
import { convertObjectByAttributeMappings } from "
|
|
4
|
+
import { convertObjectByAttributeMappings } from "appwrite-utils-helpers";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import { checkForCollection } from "../collections/methods.js";
|
|
7
7
|
import { ID, Users } from "node-appwrite";
|
|
8
|
-
import { logger } from "
|
|
8
|
+
import { logger, AdapterFactory, MessageFormatter } from "appwrite-utils-helpers";
|
|
9
9
|
import { findOrCreateOperation, updateOperation } from "../shared/migrationHelpers.js";
|
|
10
10
|
import { AuthUserCreateSchema } from "../schemas/authUser.js";
|
|
11
|
-
import { LegacyAdapter } from "../adapters/LegacyAdapter.js";
|
|
12
11
|
import { UsersController } from "../users/methods.js";
|
|
13
|
-
import { finalizeByAttributeMap } from "../utils/helperFunctions.js";
|
|
14
12
|
import { isEmpty } from "es-toolkit/compat";
|
|
15
|
-
import { MessageFormatter } from "../shared/messageFormatter.js";
|
|
16
13
|
// Define a schema for the structure of collection import data using Zod for validation
|
|
17
14
|
export const CollectionImportDataSchema = z.object({
|
|
18
15
|
// Optional collection creation schema
|
|
@@ -50,6 +47,14 @@ export class DataLoader {
|
|
|
50
47
|
userIdSet = new Set();
|
|
51
48
|
userExistsMap = new Map();
|
|
52
49
|
shouldWriteFile = false;
|
|
50
|
+
_adapter = null;
|
|
51
|
+
async getAdapter() {
|
|
52
|
+
if (!this._adapter) {
|
|
53
|
+
const { adapter } = await AdapterFactory.createFromConfig(this.config);
|
|
54
|
+
this._adapter = adapter;
|
|
55
|
+
}
|
|
56
|
+
return this._adapter;
|
|
57
|
+
}
|
|
53
58
|
// Constructor to initialize the DataLoader with necessary configurations
|
|
54
59
|
constructor(appwriteFolderPath, importDataActions, database, config, shouldWriteFile) {
|
|
55
60
|
this.appwriteFolderPath = appwriteFolderPath;
|
|
@@ -221,7 +226,7 @@ export class DataLoader {
|
|
|
221
226
|
// Run additional converter functions on the converted item, if any
|
|
222
227
|
return this.importDataActions.runConverterFunctions(convertedItem, attributeMappings);
|
|
223
228
|
}
|
|
224
|
-
async setupMaps(dbId) {
|
|
229
|
+
async setupMaps(dbId, specificCollections) {
|
|
225
230
|
// Initialize the users collection in the import map
|
|
226
231
|
this.importMap.set(this.getCollectionKey("users"), {
|
|
227
232
|
data: [],
|
|
@@ -236,6 +241,11 @@ export class DataLoader {
|
|
|
236
241
|
for (let index = 0; index < this.config.collections.length; index++) {
|
|
237
242
|
const collectionConfig = this.config.collections[index];
|
|
238
243
|
let collection = CollectionCreateSchema.parse(collectionConfig);
|
|
244
|
+
// Skip collections not in the specific list if one was provided
|
|
245
|
+
if (specificCollections && specificCollections.length > 0 &&
|
|
246
|
+
!specificCollections.includes(collection.name)) {
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
239
249
|
// Check if the collection exists in the database
|
|
240
250
|
const collectionExists = await checkForCollection(this.database, db.$id, collection);
|
|
241
251
|
if (!collectionExists) {
|
|
@@ -250,11 +260,15 @@ export class DataLoader {
|
|
|
250
260
|
collectionConfig.$id = collectionExists.$id;
|
|
251
261
|
collection.$id = collectionExists.$id;
|
|
252
262
|
this.config.collections[index] = collectionConfig;
|
|
253
|
-
// Find or create an import operation for the collection
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
263
|
+
// Find or create an import operation for the collection (non-fatal)
|
|
264
|
+
try {
|
|
265
|
+
const adapter = await this.getAdapter();
|
|
266
|
+
const collectionImportOperation = await findOrCreateOperation(adapter, dbId, "importData", collection.$id);
|
|
267
|
+
this.collectionImportOperations.set(this.getCollectionKey(collection.name), collectionImportOperation.$id);
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
MessageFormatter.warning(`Operations tracking unavailable for ${collection.name}, import will proceed without it`, { prefix: "Import" });
|
|
271
|
+
}
|
|
258
272
|
// Initialize the collection in the import map
|
|
259
273
|
this.importMap.set(this.getCollectionKey(collection.name), {
|
|
260
274
|
collection: collection,
|
|
@@ -302,14 +316,17 @@ export class DataLoader {
|
|
|
302
316
|
return allUsers;
|
|
303
317
|
}
|
|
304
318
|
// Main method to start the data loading process for a given database ID
|
|
305
|
-
async start(dbId) {
|
|
319
|
+
async start(dbId, specificCollections) {
|
|
306
320
|
MessageFormatter.divider();
|
|
307
321
|
MessageFormatter.info(`Starting data setup for database: ${dbId}`, { prefix: "Data" });
|
|
308
322
|
MessageFormatter.divider();
|
|
309
|
-
|
|
310
|
-
const
|
|
311
|
-
|
|
312
|
-
|
|
323
|
+
// Only fetch users if we're importing users or no specific collections specified
|
|
324
|
+
const needsUsers = !specificCollections || specificCollections.length === 0 ||
|
|
325
|
+
specificCollections.some(c => this.getCollectionKey(c) === this.getCollectionKey(this.config.usersCollectionName));
|
|
326
|
+
if (needsUsers) {
|
|
327
|
+
const allUsers = await this.getAllUsers();
|
|
328
|
+
MessageFormatter.info(`Fetched ${allUsers.length} users`, { prefix: "Data" });
|
|
329
|
+
}
|
|
313
330
|
// Iterate over the configured databases to find the matching one
|
|
314
331
|
for (const db of this.config.databases) {
|
|
315
332
|
if (db.$id !== dbId) {
|
|
@@ -321,6 +338,11 @@ export class DataLoader {
|
|
|
321
338
|
// Iterate over the configured collections to process each
|
|
322
339
|
for (const collectionConfig of this.config.collections) {
|
|
323
340
|
const collection = collectionConfig;
|
|
341
|
+
// Skip collections not in the specific list
|
|
342
|
+
if (specificCollections && specificCollections.length > 0 &&
|
|
343
|
+
!specificCollections.includes(collection.name)) {
|
|
344
|
+
continue;
|
|
345
|
+
}
|
|
324
346
|
// Determine if this is the users collection
|
|
325
347
|
let isUsersCollection = this.getCollectionKey(this.config.usersCollectionName) ===
|
|
326
348
|
this.getCollectionKey(collection.name);
|
|
@@ -754,7 +776,7 @@ export class DataLoader {
|
|
|
754
776
|
this.oldIdToNewIdPerCollectionMap
|
|
755
777
|
.set(this.getCollectionKey(collection.name), oldIdToNewIdMap)
|
|
756
778
|
.get(this.getCollectionKey(collection.name));
|
|
757
|
-
const adapter =
|
|
779
|
+
const adapter = await this.getAdapter();
|
|
758
780
|
if (!operationId) {
|
|
759
781
|
const collectionImportOperation = await findOrCreateOperation(adapter, db.$id, "importData", collection.$id);
|
|
760
782
|
// Store the operation ID in the map
|
|
@@ -763,7 +785,7 @@ export class DataLoader {
|
|
|
763
785
|
}
|
|
764
786
|
if (operationId) {
|
|
765
787
|
await updateOperation(adapter, db.$id, operationId, {
|
|
766
|
-
status: "
|
|
788
|
+
status: "in_progress",
|
|
767
789
|
total: rawData.length,
|
|
768
790
|
});
|
|
769
791
|
}
|
|
@@ -907,7 +929,7 @@ export class DataLoader {
|
|
|
907
929
|
// Load the raw data based on the import definition
|
|
908
930
|
const rawData = this.loadData(importDef);
|
|
909
931
|
let operationId = this.collectionImportOperations.get(this.getCollectionKey(collection.name));
|
|
910
|
-
const adapter =
|
|
932
|
+
const adapter = await this.getAdapter();
|
|
911
933
|
if (!operationId) {
|
|
912
934
|
const collectionImportOperation = await findOrCreateOperation(adapter, db.$id, "importData", collection.$id);
|
|
913
935
|
// Store the operation ID in the map
|
|
@@ -916,7 +938,7 @@ export class DataLoader {
|
|
|
916
938
|
}
|
|
917
939
|
if (operationId) {
|
|
918
940
|
await updateOperation(adapter, db.$id, operationId, {
|
|
919
|
-
status: "
|
|
941
|
+
status: "in_progress",
|
|
920
942
|
total: rawData.length,
|
|
921
943
|
});
|
|
922
944
|
}
|
|
@@ -15,6 +15,8 @@ export declare class ImportController {
|
|
|
15
15
|
private hasImportedUsers;
|
|
16
16
|
private postImportActionsQueue;
|
|
17
17
|
private databasesToRun;
|
|
18
|
+
private _adapter;
|
|
19
|
+
private getAdapter;
|
|
18
20
|
constructor(config: AppwriteConfig, database: Databases, storage: Storage, appwriteFolderPath: string, importDataActions: ImportDataActions, setupOptions: SetupOptions, databasesToRun?: Models.Database[]);
|
|
19
21
|
run(specificCollections?: string[]): Promise<void>;
|
|
20
22
|
updateOthersToFinalData(updatedDb: Models.Database, targetDb: Models.Database): Promise<void>;
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { AppwriteException, ID, Query, } from "node-appwrite";
|
|
2
|
-
import { areCollectionNamesSame, tryAwaitWithRetry } from "
|
|
2
|
+
import { areCollectionNamesSame, tryAwaitWithRetry } from "appwrite-utils-helpers";
|
|
3
3
|
import { resolveAndUpdateRelationships } from "./relationships.js";
|
|
4
4
|
import { UsersController } from "../users/methods.js";
|
|
5
|
-
import { logger } from "
|
|
5
|
+
import { logger, AdapterFactory } from "appwrite-utils-helpers";
|
|
6
6
|
import { updateOperation } from "../shared/migrationHelpers.js";
|
|
7
|
-
import { LegacyAdapter } from "../adapters/LegacyAdapter.js";
|
|
8
7
|
import { BatchSchema, OperationCreateSchema, OperationSchema, } from "../storage/schemas.js";
|
|
9
8
|
import { DataLoader } from "./dataLoader.js";
|
|
10
9
|
import { transferDatabaseLocalToLocal, transferStorageLocalToLocal, } from "./transfer.js";
|
|
11
|
-
import { MessageFormatter } from "
|
|
10
|
+
import { MessageFormatter } from "appwrite-utils-helpers";
|
|
12
11
|
import { ProgressManager } from "../shared/progressManager.js";
|
|
13
12
|
export class ImportController {
|
|
14
13
|
config;
|
|
@@ -22,6 +21,14 @@ export class ImportController {
|
|
|
22
21
|
hasImportedUsers = false;
|
|
23
22
|
postImportActionsQueue = [];
|
|
24
23
|
databasesToRun;
|
|
24
|
+
_adapter = null;
|
|
25
|
+
async getAdapter() {
|
|
26
|
+
if (!this._adapter) {
|
|
27
|
+
const { adapter } = await AdapterFactory.createFromConfig(this.config);
|
|
28
|
+
this._adapter = adapter;
|
|
29
|
+
}
|
|
30
|
+
return this._adapter;
|
|
31
|
+
}
|
|
25
32
|
constructor(config, database, storage, appwriteFolderPath, importDataActions, setupOptions, databasesToRun) {
|
|
26
33
|
this.config = config;
|
|
27
34
|
this.database = database;
|
|
@@ -50,8 +57,8 @@ export class ImportController {
|
|
|
50
57
|
if (!databaseRan) {
|
|
51
58
|
databaseRan = db;
|
|
52
59
|
dataLoader = new DataLoader(this.appwriteFolderPath, this.importDataActions, this.database, this.config, this.setupOptions.shouldWriteFile);
|
|
53
|
-
await dataLoader.setupMaps(db.$id);
|
|
54
|
-
await dataLoader.start(db.$id);
|
|
60
|
+
await dataLoader.setupMaps(db.$id, specificCollections);
|
|
61
|
+
await dataLoader.start(db.$id, specificCollections);
|
|
55
62
|
await this.importCollections(db, dataLoader, specificCollections);
|
|
56
63
|
await resolveAndUpdateRelationships(db.$id, this.database, this.config);
|
|
57
64
|
await this.executePostImportActions(db.$id, dataLoader, specificCollections);
|
|
@@ -166,16 +173,19 @@ export class ImportController {
|
|
|
166
173
|
MessageFormatter.success("Finished importing users", { prefix: "Import" });
|
|
167
174
|
}
|
|
168
175
|
}
|
|
169
|
-
if (!importOperationId) {
|
|
170
|
-
// Skip further processing if no import operation is found
|
|
171
|
-
continue;
|
|
172
|
-
}
|
|
173
176
|
let importOperation = null;
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
177
|
+
if (importOperationId) {
|
|
178
|
+
try {
|
|
179
|
+
importOperation = await this.database.getDocument("migrations", "currentOperations", importOperationId);
|
|
180
|
+
const adapter = await this.getAdapter();
|
|
181
|
+
await updateOperation(adapter, db.$id, importOperation.$id, {
|
|
182
|
+
status: "in_progress",
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
importOperation = null;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
179
189
|
const collectionData = dataLoader.importMap.get(dataLoader.getCollectionKey(collection.name));
|
|
180
190
|
MessageFormatter.processing(`Processing collection: ${collection.name}...`, { prefix: "Import" });
|
|
181
191
|
if (!collectionData) {
|
|
@@ -213,18 +223,23 @@ export class ImportController {
|
|
|
213
223
|
await Promise.all(batchPromises);
|
|
214
224
|
MessageFormatter.success(`Completed batch ${i + 1} of ${dataSplit.length}`, { prefix: "Import" });
|
|
215
225
|
if (importOperation) {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
226
|
+
try {
|
|
227
|
+
const opAdapter = await this.getAdapter();
|
|
228
|
+
await updateOperation(opAdapter, db.$id, importOperation.$id, {
|
|
229
|
+
progress: processedItems,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
catch { /* operations tracking is non-fatal */ }
|
|
220
233
|
}
|
|
221
234
|
}
|
|
222
|
-
// After all batches are processed, update the operation status to completed
|
|
223
235
|
if (importOperation) {
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
236
|
+
try {
|
|
237
|
+
const opAdapter = await this.getAdapter();
|
|
238
|
+
await updateOperation(opAdapter, db.$id, importOperation.$id, {
|
|
239
|
+
status: "completed",
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
catch { /* operations tracking is non-fatal */ }
|
|
228
243
|
}
|
|
229
244
|
}
|
|
230
245
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {} from "node-appwrite";
|
|
2
2
|
import { validationRules, } from "appwrite-utils";
|
|
3
3
|
import { converterFunctions } from "appwrite-utils";
|
|
4
|
-
import { convertObjectBySchema } from "
|
|
4
|
+
import { convertObjectBySchema } from "appwrite-utils-helpers";
|
|
5
5
|
import {} from "appwrite-utils";
|
|
6
6
|
import { afterImportActions } from "./afterImportActions.js";
|
|
7
|
-
import { logger } from "
|
|
8
|
-
import { tryAwaitWithRetry } from "
|
|
7
|
+
import { logger } from "appwrite-utils-helpers";
|
|
8
|
+
import { tryAwaitWithRetry } from "appwrite-utils-helpers";
|
|
9
9
|
export class ImportDataActions {
|
|
10
10
|
db;
|
|
11
11
|
storage;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Databases, Query } from "node-appwrite";
|
|
2
2
|
import { fetchAllCollections } from "../collections/methods.js";
|
|
3
|
-
import { logger } from "
|
|
4
|
-
import { MessageFormatter } from "../shared/messageFormatter.js";
|
|
3
|
+
import { logger, MessageFormatter } from "appwrite-utils-helpers";
|
|
5
4
|
/**
|
|
6
5
|
* Finds collections that have defined relationship attributes.
|
|
7
6
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { convertObjectByAttributeMappings } from "
|
|
2
|
-
import { logger } from
|
|
1
|
+
import { convertObjectByAttributeMappings } from "appwrite-utils-helpers";
|
|
2
|
+
import { logger } from 'appwrite-utils-helpers';
|
|
3
3
|
/**
|
|
4
4
|
* Service responsible for data transformation during import.
|
|
5
5
|
* Extracted from DataLoader to provide focused, testable transformation logic.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import path from "path";
|
|
2
2
|
import fs from "fs";
|
|
3
|
-
import { logger } from
|
|
3
|
+
import { logger } from 'appwrite-utils-helpers';
|
|
4
4
|
import { RateLimitManager } from "./RateLimitManager.js";
|
|
5
5
|
/**
|
|
6
6
|
* Service responsible for file handling during import.
|
|
@@ -26,6 +26,8 @@ export declare class ImportOrchestrator {
|
|
|
26
26
|
private collectionImportOperations;
|
|
27
27
|
private hasImportedUsers;
|
|
28
28
|
private batchLimit;
|
|
29
|
+
private _adapter;
|
|
30
|
+
private getAdapter;
|
|
29
31
|
constructor(config: AppwriteConfig, database: Databases, storage: Storage, appwriteFolderPath: string, importDataActions: ImportDataActions, setupOptions: SetupOptions, databasesToRun?: Models.Database[], rateLimitConfig?: Partial<RateLimitConfig>);
|
|
30
32
|
/**
|
|
31
33
|
* Main entry point for the import process.
|
|
@@ -8,12 +8,12 @@ import { UserMappingService } from "./UserMappingService.js";
|
|
|
8
8
|
import { ValidationService } from "./ValidationService.js";
|
|
9
9
|
import { RelationshipResolver } from "./RelationshipResolver.js";
|
|
10
10
|
import { UsersController } from "../../users/methods.js";
|
|
11
|
-
import { logger } from
|
|
12
|
-
import { MessageFormatter } from
|
|
11
|
+
import { logger } from 'appwrite-utils-helpers';
|
|
12
|
+
import { MessageFormatter } from 'appwrite-utils-helpers';
|
|
13
13
|
import { ProgressManager } from "../../shared/progressManager.js";
|
|
14
|
-
import { tryAwaitWithRetry } from "
|
|
14
|
+
import { tryAwaitWithRetry } from "appwrite-utils-helpers";
|
|
15
15
|
import { updateOperation, findOrCreateOperation } from "../../shared/migrationHelpers.js";
|
|
16
|
-
import {
|
|
16
|
+
import { AdapterFactory } from 'appwrite-utils-helpers';
|
|
17
17
|
import { resolveAndUpdateRelationships } from "../relationships.js";
|
|
18
18
|
// Enhanced rate limiting configuration - now managed by RateLimitManager
|
|
19
19
|
/**
|
|
@@ -42,6 +42,14 @@ export class ImportOrchestrator {
|
|
|
42
42
|
collectionImportOperations = new Map();
|
|
43
43
|
hasImportedUsers = false;
|
|
44
44
|
batchLimit = 50; // Preserve existing batch size
|
|
45
|
+
_adapter = null;
|
|
46
|
+
async getAdapter() {
|
|
47
|
+
if (!this._adapter) {
|
|
48
|
+
const { adapter } = await AdapterFactory.createFromConfig(this.config);
|
|
49
|
+
this._adapter = adapter;
|
|
50
|
+
}
|
|
51
|
+
return this._adapter;
|
|
52
|
+
}
|
|
45
53
|
constructor(config, database, storage, appwriteFolderPath, importDataActions, setupOptions, databasesToRun, rateLimitConfig) {
|
|
46
54
|
this.config = config;
|
|
47
55
|
this.database = database;
|
|
@@ -147,7 +155,7 @@ export class ImportOrchestrator {
|
|
|
147
155
|
collection.$id = existingCollection.$id;
|
|
148
156
|
this.config.collections[index] = collectionConfig;
|
|
149
157
|
// Find or create an import operation for the collection
|
|
150
|
-
const adapter =
|
|
158
|
+
const adapter = await this.getAdapter();
|
|
151
159
|
const collectionImportOperation = await findOrCreateOperation(adapter, dbId, "importData", collection.$id);
|
|
152
160
|
this.collectionImportOperations.set(this.getCollectionKey(collection.name), collectionImportOperation.$id);
|
|
153
161
|
// Initialize the collection in the import map
|
|
@@ -353,7 +361,7 @@ export class ImportOrchestrator {
|
|
|
353
361
|
}
|
|
354
362
|
logger.info(`Importing collection: ${collection.name} (${collectionData.data.length} items)`);
|
|
355
363
|
const operationId = this.collectionImportOperations.get(this.getCollectionKey(collection.name));
|
|
356
|
-
const adapter =
|
|
364
|
+
const adapter = await this.getAdapter();
|
|
357
365
|
if (operationId) {
|
|
358
366
|
await updateOperation(adapter, db.$id, operationId, { status: "in_progress" });
|
|
359
367
|
}
|
|
@@ -461,7 +469,7 @@ export class ImportOrchestrator {
|
|
|
461
469
|
const operationId = this.collectionImportOperations.get(this.getCollectionKey(collection.name));
|
|
462
470
|
if (operationId) {
|
|
463
471
|
const updateData = total ? { status, total } : { status };
|
|
464
|
-
const adapter =
|
|
472
|
+
const adapter = await this.getAdapter();
|
|
465
473
|
await updateOperation(adapter, db.$id, operationId, updateData);
|
|
466
474
|
}
|
|
467
475
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { ID } from "node-appwrite";
|
|
3
3
|
import { AuthUserCreateSchema } from "../../schemas/authUser.js";
|
|
4
|
-
import { logger } from
|
|
4
|
+
import { logger } from 'appwrite-utils-helpers';
|
|
5
5
|
/**
|
|
6
6
|
* Service responsible for user mapping and deduplication during import.
|
|
7
7
|
* Preserves all existing sophisticated user handling logic from DataLoader.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Databases, Storage, Users, type Models } from "node-appwrite";
|
|
2
|
+
import { type DatabaseAdapter } from "appwrite-utils-helpers";
|
|
2
3
|
export interface TransferOptions {
|
|
3
4
|
fromDb: Models.Database | undefined;
|
|
4
5
|
targetDb: Models.Database | undefined;
|
|
@@ -14,13 +15,16 @@ export interface TransferOptions {
|
|
|
14
15
|
export declare const transferStorageLocalToLocal: (storage: Storage, fromBucketId: string, toBucketId: string) => Promise<void>;
|
|
15
16
|
export declare const transferStorageLocalToRemote: (localStorage: Storage, endpoint: string, projectId: string, apiKey: string, fromBucketId: string, toBucketId: string) => Promise<void>;
|
|
16
17
|
/**
|
|
17
|
-
* Transfers all collections and documents from one local database to another local database.
|
|
18
|
+
* Transfers all tables/collections and documents from one local database to another local database.
|
|
19
|
+
* Uses the DatabaseAdapter for unified TablesDB / legacy support.
|
|
18
20
|
*
|
|
19
|
-
* @param {Databases} localDb - The local database instance.
|
|
21
|
+
* @param {Databases} localDb - The local database instance (kept for signature compat).
|
|
20
22
|
* @param {string} fromDbId - The ID of the source database.
|
|
21
23
|
* @param {string} targetDbId - The ID of the target database.
|
|
24
|
+
* @param {string[]} collectionIds - Optional filter: specific table/collection IDs to transfer. undefined = all, empty array = none.
|
|
25
|
+
* @param {DatabaseAdapter} adapter - The database adapter (TablesDB or Legacy).
|
|
22
26
|
* @return {Promise<void>} A promise that resolves when the transfer is complete.
|
|
23
27
|
*/
|
|
24
|
-
export declare const transferDatabaseLocalToLocal: (localDb: Databases, fromDbId: string, targetDbId: string) => Promise<void>;
|
|
25
|
-
export declare const transferDatabaseLocalToRemote: (localDb: Databases, endpoint: string, projectId: string, apiKey: string, fromDbId: string, toDbId: string) => Promise<void>;
|
|
28
|
+
export declare const transferDatabaseLocalToLocal: (localDb: Databases, fromDbId: string, targetDbId: string, collectionIds?: string[], adapter?: DatabaseAdapter) => Promise<void>;
|
|
29
|
+
export declare const transferDatabaseLocalToRemote: (localDb: Databases, endpoint: string, projectId: string, apiKey: string, fromDbId: string, toDbId: string, collectionIds?: string[]) => Promise<void>;
|
|
26
30
|
export declare const transferUsersLocalToRemote: (localUsers: Users, endpoint: string, projectId: string, apiKey: string) => Promise<void>;
|