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,17 +1,16 @@
|
|
|
1
1
|
import { converterFunctions, tryAwaitWithRetry } from "appwrite-utils";
|
|
2
2
|
import { Client, Databases, IndexType, Query, Storage, Users, } from "node-appwrite";
|
|
3
3
|
import { InputFile } from "node-appwrite/file";
|
|
4
|
-
import { getAppwriteClient } from "
|
|
4
|
+
import { getAppwriteClient } from "appwrite-utils-helpers";
|
|
5
5
|
// Legacy attribute helpers retained only for local-to-local flows if needed
|
|
6
6
|
import { parseAttribute } from "appwrite-utils";
|
|
7
7
|
import chalk from "chalk";
|
|
8
8
|
import { fetchAllCollections } from "../collections/methods.js";
|
|
9
|
-
import { MessageFormatter } from "
|
|
10
|
-
import { LegacyAdapter } from "../adapters/LegacyAdapter.js";
|
|
9
|
+
import { MessageFormatter, mapToCreateAttributeParams } from "appwrite-utils-helpers";
|
|
11
10
|
import { ProgressManager } from "../shared/progressManager.js";
|
|
12
|
-
import { getClient, getAdapter } from "
|
|
11
|
+
import { getClient, getAdapter } from "appwrite-utils-helpers";
|
|
13
12
|
import { diffTableColumns } from "../collections/tableOperations.js";
|
|
14
|
-
import {
|
|
13
|
+
import {} from "appwrite-utils-helpers";
|
|
15
14
|
export const transferStorageLocalToLocal = async (storage, fromBucketId, toBucketId) => {
|
|
16
15
|
MessageFormatter.info(`Transferring files from ${fromBucketId} to ${toBucketId}`, { prefix: "Transfer" });
|
|
17
16
|
let lastFileId;
|
|
@@ -130,51 +129,98 @@ export const transferStorageLocalToRemote = async (localStorage, endpoint, proje
|
|
|
130
129
|
// Document transfer functions moved to collections/methods.ts with enhanced UX
|
|
131
130
|
// Remote document transfer functions moved to collections/methods.ts with enhanced UX
|
|
132
131
|
/**
|
|
133
|
-
* Transfers all collections and documents from one local database to another local database.
|
|
132
|
+
* Transfers all tables/collections and documents from one local database to another local database.
|
|
133
|
+
* Uses the DatabaseAdapter for unified TablesDB / legacy support.
|
|
134
134
|
*
|
|
135
|
-
* @param {Databases} localDb - The local database instance.
|
|
135
|
+
* @param {Databases} localDb - The local database instance (kept for signature compat).
|
|
136
136
|
* @param {string} fromDbId - The ID of the source database.
|
|
137
137
|
* @param {string} targetDbId - The ID of the target database.
|
|
138
|
+
* @param {string[]} collectionIds - Optional filter: specific table/collection IDs to transfer. undefined = all, empty array = none.
|
|
139
|
+
* @param {DatabaseAdapter} adapter - The database adapter (TablesDB or Legacy).
|
|
138
140
|
* @return {Promise<void>} A promise that resolves when the transfer is complete.
|
|
139
141
|
*/
|
|
140
|
-
export const transferDatabaseLocalToLocal = async (localDb, fromDbId, targetDbId) => {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
142
|
+
export const transferDatabaseLocalToLocal = async (localDb, fromDbId, targetDbId, collectionIds, adapter) => {
|
|
143
|
+
if (!adapter) {
|
|
144
|
+
throw new Error("DatabaseAdapter is required for transferDatabaseLocalToLocal");
|
|
145
|
+
}
|
|
146
|
+
const dbAdapter = adapter;
|
|
147
|
+
MessageFormatter.info(`Starting database transfer from ${fromDbId} to ${targetDbId} (mode: ${dbAdapter.getApiMode()})`, { prefix: "Transfer" });
|
|
148
|
+
// Get all tables/collections from source database via adapter
|
|
149
|
+
const sourceListRes = await dbAdapter.listTables({ databaseId: fromDbId, queries: [Query.limit(500)] });
|
|
150
|
+
let sourceTables = sourceListRes.tables || sourceListRes.collections || sourceListRes.data || [];
|
|
151
|
+
// Filter by collectionIds if provided (match by $id or by name)
|
|
152
|
+
if (collectionIds !== undefined) {
|
|
153
|
+
if (collectionIds.length === 0) {
|
|
154
|
+
MessageFormatter.info("No tables/collections selected for transfer, skipping.", { prefix: "Transfer" });
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const idSet = new Set(collectionIds);
|
|
158
|
+
sourceTables = sourceTables.filter((c) => idSet.has(c.$id) || idSet.has(c.name));
|
|
159
|
+
}
|
|
160
|
+
MessageFormatter.info(`Found ${sourceTables.length} tables/collections in source database`, { prefix: "Transfer" });
|
|
161
|
+
// Process each table/collection
|
|
162
|
+
for (const table of sourceTables) {
|
|
163
|
+
MessageFormatter.processing(`Processing table: ${table.name} (${table.$id})`, { prefix: "Transfer" });
|
|
148
164
|
try {
|
|
149
|
-
//
|
|
150
|
-
let
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
165
|
+
// Check if table exists in target via adapter
|
|
166
|
+
let targetTableId = table.$id;
|
|
167
|
+
let targetTableData;
|
|
168
|
+
try {
|
|
169
|
+
const existingRes = await dbAdapter.getTable({ databaseId: targetDbId, tableId: table.$id });
|
|
170
|
+
targetTableData = existingRes.data || (existingRes.tables && existingRes.tables[0]);
|
|
171
|
+
if (targetTableData) {
|
|
172
|
+
MessageFormatter.info(`Table ${table.name} exists in target database`, { prefix: "Transfer" });
|
|
173
|
+
// Update table if needed
|
|
174
|
+
const securityField = table.rowSecurity ?? table.documentSecurity ?? false;
|
|
175
|
+
const targetSecurity = targetTableData.rowSecurity ?? targetTableData.documentSecurity ?? false;
|
|
176
|
+
if (targetTableData.name !== table.name ||
|
|
177
|
+
JSON.stringify(targetTableData.$permissions) !== JSON.stringify(table.$permissions) ||
|
|
178
|
+
targetSecurity !== securityField ||
|
|
179
|
+
targetTableData.enabled !== table.enabled) {
|
|
180
|
+
await tryAwaitWithRetry(async () => dbAdapter.updateTable({
|
|
181
|
+
databaseId: targetDbId,
|
|
182
|
+
id: table.$id,
|
|
183
|
+
name: table.name,
|
|
184
|
+
permissions: table.$permissions,
|
|
185
|
+
documentSecurity: table.documentSecurity,
|
|
186
|
+
rowSecurity: table.rowSecurity,
|
|
187
|
+
enabled: table.enabled,
|
|
188
|
+
}));
|
|
189
|
+
MessageFormatter.success(`Table ${table.name} updated`, { prefix: "Transfer" });
|
|
190
|
+
}
|
|
164
191
|
}
|
|
165
192
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
193
|
+
catch {
|
|
194
|
+
// Table does not exist in target, create it
|
|
195
|
+
targetTableData = null;
|
|
169
196
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
197
|
+
if (!targetTableData) {
|
|
198
|
+
MessageFormatter.progress(`Creating table ${table.name} in target database...`, { prefix: "Transfer" });
|
|
199
|
+
const createRes = await tryAwaitWithRetry(async () => dbAdapter.createTable({
|
|
200
|
+
databaseId: targetDbId,
|
|
201
|
+
id: table.$id,
|
|
202
|
+
name: table.name,
|
|
203
|
+
permissions: table.$permissions,
|
|
204
|
+
documentSecurity: table.documentSecurity,
|
|
205
|
+
rowSecurity: table.rowSecurity,
|
|
206
|
+
enabled: table.enabled,
|
|
207
|
+
}));
|
|
208
|
+
targetTableData = createRes.data || (createRes.tables && createRes.tables[0]);
|
|
209
|
+
}
|
|
210
|
+
// Create attributes via adapter
|
|
211
|
+
MessageFormatter.info(`Creating attributes for ${table.name} via adapter...`, { prefix: 'Transfer' });
|
|
212
|
+
// Fetch existing attributes in target to skip already-created ones
|
|
213
|
+
const targetTableRes = await dbAdapter.getTable({ databaseId: targetDbId, tableId: targetTableId });
|
|
214
|
+
const targetInfo = targetTableRes.data || (targetTableRes.tables && targetTableRes.tables[0]);
|
|
215
|
+
const existingAttrs = targetInfo?.attributes || targetInfo?.columns || [];
|
|
216
|
+
const existingKeys = new Set(existingAttrs.map((a) => a.key || a.$id));
|
|
217
|
+
const uniformAttrs = (table.attributes || []).map((attr) => parseAttribute(attr));
|
|
174
218
|
const nonRel = uniformAttrs.filter((a) => a.type !== 'relationship');
|
|
175
219
|
for (const attr of nonRel) {
|
|
176
|
-
|
|
177
|
-
|
|
220
|
+
if (existingKeys.has(attr.key))
|
|
221
|
+
continue;
|
|
222
|
+
const params = mapToCreateAttributeParams(attr, { databaseId: targetDbId, tableId: targetTableId });
|
|
223
|
+
await dbAdapter.createAttribute(params);
|
|
178
224
|
await new Promise((r) => setTimeout(r, 150));
|
|
179
225
|
}
|
|
180
226
|
// Wait for attributes to become available
|
|
@@ -184,8 +230,9 @@ export const transferDatabaseLocalToLocal = async (localDb, fromDbId, targetDbId
|
|
|
184
230
|
let lastStatus = '';
|
|
185
231
|
while (Date.now() - start < maxWait) {
|
|
186
232
|
try {
|
|
187
|
-
const tableRes = await
|
|
188
|
-
const
|
|
233
|
+
const tableRes = await dbAdapter.getTable({ databaseId: targetDbId, tableId: targetTableId });
|
|
234
|
+
const tInfo = tableRes.data || (tableRes.tables && tableRes.tables[0]);
|
|
235
|
+
const attrs = tInfo?.attributes || tInfo?.columns || [];
|
|
189
236
|
const found = attrs.find((a) => a.key === attr.key);
|
|
190
237
|
if (found) {
|
|
191
238
|
if (found.status === 'available')
|
|
@@ -208,16 +255,18 @@ export const transferDatabaseLocalToLocal = async (localDb, fromDbId, targetDbId
|
|
|
208
255
|
// Relationship attributes
|
|
209
256
|
const rels = uniformAttrs.filter((a) => a.type === 'relationship');
|
|
210
257
|
for (const attr of rels) {
|
|
211
|
-
|
|
212
|
-
|
|
258
|
+
if (existingKeys.has(attr.key))
|
|
259
|
+
continue;
|
|
260
|
+
const params = mapToCreateAttributeParams(attr, { databaseId: targetDbId, tableId: targetTableId });
|
|
261
|
+
await dbAdapter.createAttribute(params);
|
|
213
262
|
await new Promise((r) => setTimeout(r, 150));
|
|
214
263
|
}
|
|
215
264
|
// Handle indexes via adapter (create or update)
|
|
216
|
-
for (const idx of
|
|
265
|
+
for (const idx of (table.indexes || [])) {
|
|
217
266
|
try {
|
|
218
|
-
await
|
|
267
|
+
await dbAdapter.createIndex({
|
|
219
268
|
databaseId: targetDbId,
|
|
220
|
-
tableId:
|
|
269
|
+
tableId: targetTableId,
|
|
221
270
|
key: idx.key,
|
|
222
271
|
type: idx.type,
|
|
223
272
|
attributes: idx.attributes,
|
|
@@ -229,10 +278,10 @@ export const transferDatabaseLocalToLocal = async (localDb, fromDbId, targetDbId
|
|
|
229
278
|
catch (e) {
|
|
230
279
|
// Try update path by deleting and recreating if necessary
|
|
231
280
|
try {
|
|
232
|
-
await
|
|
233
|
-
await
|
|
281
|
+
await dbAdapter.deleteIndex({ databaseId: targetDbId, tableId: targetTableId, key: idx.key });
|
|
282
|
+
await dbAdapter.createIndex({
|
|
234
283
|
databaseId: targetDbId,
|
|
235
|
-
tableId:
|
|
284
|
+
tableId: targetTableId,
|
|
236
285
|
key: idx.key,
|
|
237
286
|
type: idx.type,
|
|
238
287
|
attributes: idx.attributes,
|
|
@@ -246,20 +295,24 @@ export const transferDatabaseLocalToLocal = async (localDb, fromDbId, targetDbId
|
|
|
246
295
|
}
|
|
247
296
|
}
|
|
248
297
|
}
|
|
249
|
-
// Transfer documents
|
|
250
|
-
const { transferDocumentsBetweenDbsLocalToLocal } = await import("../collections/
|
|
251
|
-
await transferDocumentsBetweenDbsLocalToLocal(
|
|
298
|
+
// Transfer documents/rows via adapter
|
|
299
|
+
const { transferDocumentsBetweenDbsLocalToLocal } = await import("../collections/transferOperations.js");
|
|
300
|
+
await transferDocumentsBetweenDbsLocalToLocal(dbAdapter, fromDbId, targetDbId, table.$id, targetTableId);
|
|
252
301
|
}
|
|
253
302
|
catch (error) {
|
|
254
|
-
MessageFormatter.error(`Error processing
|
|
303
|
+
MessageFormatter.error(`Error processing table ${table.name}`, error instanceof Error ? error : new Error(String(error)), { prefix: "Transfer" });
|
|
255
304
|
}
|
|
256
305
|
}
|
|
257
306
|
};
|
|
258
|
-
export const transferDatabaseLocalToRemote = async (localDb, endpoint, projectId, apiKey, fromDbId, toDbId) => {
|
|
307
|
+
export const transferDatabaseLocalToRemote = async (localDb, endpoint, projectId, apiKey, fromDbId, toDbId, collectionIds) => {
|
|
259
308
|
const client = getAppwriteClient(endpoint, projectId, apiKey);
|
|
260
309
|
const remoteDb = new Databases(client);
|
|
261
310
|
// Get all collections from source database
|
|
262
|
-
|
|
311
|
+
let sourceCollections = await fetchAllCollections(fromDbId, localDb);
|
|
312
|
+
if (collectionIds && collectionIds.length > 0) {
|
|
313
|
+
const idSet = new Set(collectionIds);
|
|
314
|
+
sourceCollections = sourceCollections.filter((c) => idSet.has(c.$id));
|
|
315
|
+
}
|
|
263
316
|
MessageFormatter.info(`Found ${sourceCollections.length} collections in source database`, { prefix: "Transfer" });
|
|
264
317
|
// Process each collection
|
|
265
318
|
for (const collection of sourceCollections) {
|
|
@@ -2,7 +2,7 @@ import { z } from "zod";
|
|
|
2
2
|
import path from "path";
|
|
3
3
|
import fs from "fs";
|
|
4
4
|
import yaml from "js-yaml";
|
|
5
|
-
import { logger } from
|
|
5
|
+
import { logger } from 'appwrite-utils-helpers';
|
|
6
6
|
// YAML Import Configuration Schema
|
|
7
7
|
export const YamlImportConfigSchema = z.object({
|
|
8
8
|
source: z.object({
|
|
@@ -278,57 +278,57 @@ export class YamlImportConfigLoader {
|
|
|
278
278
|
// Create README file
|
|
279
279
|
const readmePath = path.join(importDir, "README.md");
|
|
280
280
|
if (!fs.existsSync(readmePath)) {
|
|
281
|
-
const readmeContent = `# Import Configurations
|
|
282
|
-
|
|
283
|
-
This directory contains YAML-based import configurations for the Appwrite Utils CLI.
|
|
284
|
-
|
|
285
|
-
## Structure
|
|
286
|
-
|
|
287
|
-
- \`collections/\` - Collection-specific import configurations
|
|
288
|
-
- \`templates/\` - Template configurations for reference
|
|
289
|
-
- \`*.yaml\` - Individual import configuration files
|
|
290
|
-
|
|
291
|
-
## Configuration Format
|
|
292
|
-
|
|
293
|
-
Each YAML file defines:
|
|
294
|
-
- **source**: Data source configuration (file, type, basePath)
|
|
295
|
-
- **target**: Target collection and operation type
|
|
296
|
-
- **mapping**: Field mappings, transformations, and relationships
|
|
297
|
-
- **options**: Import options (batch size, validation, etc.)
|
|
298
|
-
|
|
299
|
-
## Example
|
|
300
|
-
|
|
301
|
-
\`\`\`yaml
|
|
302
|
-
source:
|
|
303
|
-
file: "importData/users.json"
|
|
304
|
-
basePath: "RECORDS"
|
|
305
|
-
type: "json"
|
|
306
|
-
|
|
307
|
-
target:
|
|
308
|
-
collection: "Users"
|
|
309
|
-
type: "create"
|
|
310
|
-
primaryKey: "id"
|
|
311
|
-
createUsers: true
|
|
312
|
-
|
|
313
|
-
mapping:
|
|
314
|
-
attributes:
|
|
315
|
-
- oldKey: "user_id"
|
|
316
|
-
targetKey: "userId"
|
|
317
|
-
converters: ["anyToString"]
|
|
318
|
-
- oldKey: "profile_image"
|
|
319
|
-
targetKey: "avatar"
|
|
320
|
-
fileData:
|
|
321
|
-
path: "assets/profiles/{user_id}.jpg"
|
|
322
|
-
name: "{firstName}_{lastName}_avatar"
|
|
323
|
-
|
|
324
|
-
options:
|
|
325
|
-
batchSize: 50
|
|
326
|
-
continueOnError: true
|
|
327
|
-
\`\`\`
|
|
328
|
-
|
|
329
|
-
## Usage
|
|
330
|
-
|
|
331
|
-
The CLI will automatically detect and load YAML import configurations during the import process.
|
|
281
|
+
const readmeContent = `# Import Configurations
|
|
282
|
+
|
|
283
|
+
This directory contains YAML-based import configurations for the Appwrite Utils CLI.
|
|
284
|
+
|
|
285
|
+
## Structure
|
|
286
|
+
|
|
287
|
+
- \`collections/\` - Collection-specific import configurations
|
|
288
|
+
- \`templates/\` - Template configurations for reference
|
|
289
|
+
- \`*.yaml\` - Individual import configuration files
|
|
290
|
+
|
|
291
|
+
## Configuration Format
|
|
292
|
+
|
|
293
|
+
Each YAML file defines:
|
|
294
|
+
- **source**: Data source configuration (file, type, basePath)
|
|
295
|
+
- **target**: Target collection and operation type
|
|
296
|
+
- **mapping**: Field mappings, transformations, and relationships
|
|
297
|
+
- **options**: Import options (batch size, validation, etc.)
|
|
298
|
+
|
|
299
|
+
## Example
|
|
300
|
+
|
|
301
|
+
\`\`\`yaml
|
|
302
|
+
source:
|
|
303
|
+
file: "importData/users.json"
|
|
304
|
+
basePath: "RECORDS"
|
|
305
|
+
type: "json"
|
|
306
|
+
|
|
307
|
+
target:
|
|
308
|
+
collection: "Users"
|
|
309
|
+
type: "create"
|
|
310
|
+
primaryKey: "id"
|
|
311
|
+
createUsers: true
|
|
312
|
+
|
|
313
|
+
mapping:
|
|
314
|
+
attributes:
|
|
315
|
+
- oldKey: "user_id"
|
|
316
|
+
targetKey: "userId"
|
|
317
|
+
converters: ["anyToString"]
|
|
318
|
+
- oldKey: "profile_image"
|
|
319
|
+
targetKey: "avatar"
|
|
320
|
+
fileData:
|
|
321
|
+
path: "assets/profiles/{user_id}.jpg"
|
|
322
|
+
name: "{firstName}_{lastName}_avatar"
|
|
323
|
+
|
|
324
|
+
options:
|
|
325
|
+
batchSize: 50
|
|
326
|
+
continueOnError: true
|
|
327
|
+
\`\`\`
|
|
328
|
+
|
|
329
|
+
## Usage
|
|
330
|
+
|
|
331
|
+
The CLI will automatically detect and load YAML import configurations during the import process.
|
|
332
332
|
`;
|
|
333
333
|
fs.writeFileSync(readmePath, readmeContent);
|
|
334
334
|
logger.info(`Created README: ${readmePath}`);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { YamlImportConfigLoader } from "./YamlImportConfigLoader.js";
|
|
2
2
|
import { createImportSchemas, createImportExamples } from "./generateImportSchemas.js";
|
|
3
|
-
import { logger } from
|
|
4
|
-
import { normalizeYamlData, usesTableTerminology, convertTerminology } from "
|
|
3
|
+
import { logger } from 'appwrite-utils-helpers';
|
|
4
|
+
import { normalizeYamlData, usesTableTerminology, convertTerminology } from "appwrite-utils-helpers";
|
|
5
5
|
import path from "path";
|
|
6
6
|
import fs from "fs";
|
|
7
7
|
import yaml from "js-yaml";
|