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
package/dist/utils/setupFiles.js
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import { mkdirSync, writeFileSync, existsSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { findAppwriteConfig } from "./loadConfigs.js";
|
|
4
|
-
import { loadYamlConfig } from "
|
|
5
|
-
import { fetchServerVersion, isVersionAtLeast } from
|
|
6
|
-
import { findYamlConfig } from "../config/yamlConfig.js";
|
|
4
|
+
import { loadYamlConfig, findYamlConfig, generateYamlConfigTemplate } from "appwrite-utils-helpers";
|
|
5
|
+
import { fetchServerVersion, isVersionAtLeast } from 'appwrite-utils-helpers';
|
|
7
6
|
import { ID } from "node-appwrite";
|
|
8
7
|
import { ulid } from "ulidx";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { MessageFormatter } from "../shared/messageFormatter.js";
|
|
8
|
+
import { loadAppwriteProjectConfig, findAppwriteProjectConfig, getProjectDirectoryName, isTablesDBProject } from 'appwrite-utils-helpers';
|
|
9
|
+
import { hasSessionAuth, getSessionAuth } from 'appwrite-utils-helpers';
|
|
10
|
+
import { MessageFormatter } from "appwrite-utils-helpers";
|
|
13
11
|
// Example base configuration using types from appwrite-utils
|
|
14
12
|
const baseConfig = {
|
|
15
13
|
appwriteEndpoint: "https://cloud.appwrite.io/v1",
|
|
@@ -86,31 +84,31 @@ const baseConfig = {
|
|
|
86
84
|
const collectionsConfig = [
|
|
87
85
|
{
|
|
88
86
|
name: "ExampleCollection",
|
|
89
|
-
content: `import type { CollectionCreate } from "appwrite-utils";
|
|
90
|
-
|
|
91
|
-
const ExampleCollection: Partial<CollectionCreate> = {
|
|
92
|
-
name: 'ExampleCollection',
|
|
93
|
-
$id: '${ulid()}',
|
|
94
|
-
documentSecurity: false,
|
|
95
|
-
enabled: true,
|
|
96
|
-
$permissions: [
|
|
97
|
-
{ permission: 'read', target: 'any' },
|
|
98
|
-
{ permission: 'create', target: 'users' },
|
|
99
|
-
{ permission: 'update', target: 'users' },
|
|
100
|
-
{ permission: 'delete', target: 'users' }
|
|
101
|
-
],
|
|
102
|
-
attributes: [
|
|
103
|
-
{ key: 'alterEgoName', type: 'string', size: 255, required: false },
|
|
104
|
-
// Add more attributes here
|
|
105
|
-
],
|
|
106
|
-
indexes: [
|
|
107
|
-
{ key: 'alterEgoName_search', type: 'fulltext', attributes: ['alterEgoName'] }
|
|
108
|
-
],
|
|
109
|
-
importDefs: [
|
|
110
|
-
// Define import definitions here
|
|
111
|
-
]
|
|
112
|
-
};
|
|
113
|
-
|
|
87
|
+
content: `import type { CollectionCreate } from "appwrite-utils";
|
|
88
|
+
|
|
89
|
+
const ExampleCollection: Partial<CollectionCreate> = {
|
|
90
|
+
name: 'ExampleCollection',
|
|
91
|
+
$id: '${ulid()}',
|
|
92
|
+
documentSecurity: false,
|
|
93
|
+
enabled: true,
|
|
94
|
+
$permissions: [
|
|
95
|
+
{ permission: 'read', target: 'any' },
|
|
96
|
+
{ permission: 'create', target: 'users' },
|
|
97
|
+
{ permission: 'update', target: 'users' },
|
|
98
|
+
{ permission: 'delete', target: 'users' }
|
|
99
|
+
],
|
|
100
|
+
attributes: [
|
|
101
|
+
{ key: 'alterEgoName', type: 'string', size: 255, required: false },
|
|
102
|
+
// Add more attributes here
|
|
103
|
+
],
|
|
104
|
+
indexes: [
|
|
105
|
+
{ key: 'alterEgoName_search', type: 'fulltext', attributes: ['alterEgoName'] }
|
|
106
|
+
],
|
|
107
|
+
importDefs: [
|
|
108
|
+
// Define import definitions here
|
|
109
|
+
]
|
|
110
|
+
};
|
|
111
|
+
|
|
114
112
|
export default ExampleCollection;`,
|
|
115
113
|
},
|
|
116
114
|
// Add more collections here
|
|
@@ -118,16 +116,16 @@ export default ExampleCollection;`,
|
|
|
118
116
|
// Define our YAML files
|
|
119
117
|
// Define our YAML files
|
|
120
118
|
const configFileExample = `d`;
|
|
121
|
-
export const customDefinitionsFile = `import type { ConverterFunctions, ValidationRules, AfterImportActions } from "appwrite-utils";
|
|
122
|
-
|
|
123
|
-
export const customConverterFunctions: ConverterFunctions = {
|
|
124
|
-
// Add your custom converter functions here
|
|
125
|
-
}
|
|
126
|
-
export const customValidationRules: ValidationRules = {
|
|
127
|
-
// Add your custom validation rules here
|
|
128
|
-
}
|
|
129
|
-
export const customAfterImportActions: AfterImportActions = {
|
|
130
|
-
// Add your custom after import actions here
|
|
119
|
+
export const customDefinitionsFile = `import type { ConverterFunctions, ValidationRules, AfterImportActions } from "appwrite-utils";
|
|
120
|
+
|
|
121
|
+
export const customConverterFunctions: ConverterFunctions = {
|
|
122
|
+
// Add your custom converter functions here
|
|
123
|
+
}
|
|
124
|
+
export const customValidationRules: ValidationRules = {
|
|
125
|
+
// Add your custom validation rules here
|
|
126
|
+
}
|
|
127
|
+
export const customAfterImportActions: AfterImportActions = {
|
|
128
|
+
// Add your custom after import actions here
|
|
131
129
|
}`;
|
|
132
130
|
export const createEmptyCollection = (collectionName) => {
|
|
133
131
|
const currentDir = process.cwd();
|
|
@@ -159,37 +157,37 @@ export const createEmptyCollection = (collectionName) => {
|
|
|
159
157
|
}
|
|
160
158
|
if (isYamlProject) {
|
|
161
159
|
// Create YAML collection
|
|
162
|
-
const yamlCollection = `# yaml-language-server: $schema=../.yaml_schemas/collection.schema.json
|
|
163
|
-
# Collection Definition: ${collectionName}
|
|
164
|
-
name: ${collectionName}
|
|
165
|
-
id: ${ulid()}
|
|
166
|
-
documentSecurity: false
|
|
167
|
-
enabled: true
|
|
168
|
-
permissions:
|
|
169
|
-
- permission: read
|
|
170
|
-
target: any
|
|
171
|
-
- permission: create
|
|
172
|
-
target: users
|
|
173
|
-
- permission: update
|
|
174
|
-
target: users
|
|
175
|
-
- permission: delete
|
|
176
|
-
target: users
|
|
177
|
-
attributes:
|
|
178
|
-
# Add your attributes here
|
|
179
|
-
# Example:
|
|
180
|
-
# - key: title
|
|
181
|
-
# type: string
|
|
182
|
-
# size: 255
|
|
183
|
-
# required: true
|
|
184
|
-
# description: "The title of the item"
|
|
185
|
-
indexes:
|
|
186
|
-
# Add your indexes here
|
|
187
|
-
# Example:
|
|
188
|
-
# - key: title_search
|
|
189
|
-
# type: fulltext
|
|
190
|
-
# attributes:
|
|
191
|
-
# - title
|
|
192
|
-
importDefs: []
|
|
160
|
+
const yamlCollection = `# yaml-language-server: $schema=../.yaml_schemas/collection.schema.json
|
|
161
|
+
# Collection Definition: ${collectionName}
|
|
162
|
+
name: ${collectionName}
|
|
163
|
+
id: ${ulid()}
|
|
164
|
+
documentSecurity: false
|
|
165
|
+
enabled: true
|
|
166
|
+
permissions:
|
|
167
|
+
- permission: read
|
|
168
|
+
target: any
|
|
169
|
+
- permission: create
|
|
170
|
+
target: users
|
|
171
|
+
- permission: update
|
|
172
|
+
target: users
|
|
173
|
+
- permission: delete
|
|
174
|
+
target: users
|
|
175
|
+
attributes:
|
|
176
|
+
# Add your attributes here
|
|
177
|
+
# Example:
|
|
178
|
+
# - key: title
|
|
179
|
+
# type: string
|
|
180
|
+
# size: 255
|
|
181
|
+
# required: true
|
|
182
|
+
# description: "The title of the item"
|
|
183
|
+
indexes:
|
|
184
|
+
# Add your indexes here
|
|
185
|
+
# Example:
|
|
186
|
+
# - key: title_search
|
|
187
|
+
# type: fulltext
|
|
188
|
+
# attributes:
|
|
189
|
+
# - title
|
|
190
|
+
importDefs: []
|
|
193
191
|
`;
|
|
194
192
|
const collectionFilePath = path.join(collectionsFolder, `${collectionName}.yaml`);
|
|
195
193
|
writeFileSync(collectionFilePath, yamlCollection);
|
|
@@ -197,27 +195,27 @@ importDefs: []
|
|
|
197
195
|
}
|
|
198
196
|
else {
|
|
199
197
|
// Create TypeScript collection
|
|
200
|
-
const emptyCollection = `import type { CollectionCreate } from "appwrite-utils";
|
|
201
|
-
|
|
202
|
-
const ${collectionName}: Partial<CollectionCreate> = {
|
|
203
|
-
$id: '${ulid()}',
|
|
204
|
-
documentSecurity: false,
|
|
205
|
-
enabled: true,
|
|
206
|
-
name: '${collectionName}',
|
|
207
|
-
$permissions: [
|
|
208
|
-
{ permission: 'read', target: 'any' },
|
|
209
|
-
{ permission: 'create', target: 'users' },
|
|
210
|
-
{ permission: 'update', target: 'users' },
|
|
211
|
-
{ permission: 'delete', target: 'users' }
|
|
212
|
-
],
|
|
213
|
-
attributes: [
|
|
214
|
-
// Add more attributes here
|
|
215
|
-
],
|
|
216
|
-
indexes: [
|
|
217
|
-
// Add more indexes here
|
|
218
|
-
],
|
|
219
|
-
};
|
|
220
|
-
|
|
198
|
+
const emptyCollection = `import type { CollectionCreate } from "appwrite-utils";
|
|
199
|
+
|
|
200
|
+
const ${collectionName}: Partial<CollectionCreate> = {
|
|
201
|
+
$id: '${ulid()}',
|
|
202
|
+
documentSecurity: false,
|
|
203
|
+
enabled: true,
|
|
204
|
+
name: '${collectionName}',
|
|
205
|
+
$permissions: [
|
|
206
|
+
{ permission: 'read', target: 'any' },
|
|
207
|
+
{ permission: 'create', target: 'users' },
|
|
208
|
+
{ permission: 'update', target: 'users' },
|
|
209
|
+
{ permission: 'delete', target: 'users' }
|
|
210
|
+
],
|
|
211
|
+
attributes: [
|
|
212
|
+
// Add more attributes here
|
|
213
|
+
],
|
|
214
|
+
indexes: [
|
|
215
|
+
// Add more indexes here
|
|
216
|
+
],
|
|
217
|
+
};
|
|
218
|
+
|
|
221
219
|
export default ${collectionName};`;
|
|
222
220
|
const collectionFilePath = path.join(collectionsFolder, `${collectionName}.ts`);
|
|
223
221
|
writeFileSync(collectionFilePath, emptyCollection);
|
|
@@ -307,11 +305,11 @@ export const setupDirsFiles = async (example = false, currentDir, useYaml = true
|
|
|
307
305
|
writeFileSync(appwriteConfigFile, configFileExample);
|
|
308
306
|
}
|
|
309
307
|
else {
|
|
310
|
-
const baseConfigContent = `import { type AppwriteConfig } from "appwrite-utils";
|
|
311
|
-
|
|
312
|
-
const appwriteConfig: AppwriteConfig = ${JSON.stringify(baseConfig, null, 2)};
|
|
313
|
-
|
|
314
|
-
export default appwriteConfig;
|
|
308
|
+
const baseConfigContent = `import { type AppwriteConfig } from "appwrite-utils";
|
|
309
|
+
|
|
310
|
+
const appwriteConfig: AppwriteConfig = ${JSON.stringify(baseConfig, null, 2)};
|
|
311
|
+
|
|
312
|
+
export default appwriteConfig;
|
|
315
313
|
`;
|
|
316
314
|
writeFileSync(appwriteConfigFile, baseConfigContent);
|
|
317
315
|
}
|
|
@@ -342,48 +340,48 @@ export default appwriteConfig;
|
|
|
342
340
|
containerName: "Collection",
|
|
343
341
|
fieldName: "Attribute"
|
|
344
342
|
};
|
|
345
|
-
const yamlExample = `# yaml-language-server: $schema=../.yaml_schemas/${terminology.schemaRef}
|
|
346
|
-
# Example ${terminology.containerName} Definition
|
|
347
|
-
name: Example${terminology.containerName}
|
|
348
|
-
id: example_${terminology.container}_${Date.now()}
|
|
349
|
-
${terminology.security}: false
|
|
350
|
-
enabled: true
|
|
351
|
-
permissions:
|
|
352
|
-
- permission: read
|
|
353
|
-
target: any
|
|
354
|
-
- permission: create
|
|
355
|
-
target: users
|
|
356
|
-
- permission: update
|
|
357
|
-
target: users
|
|
358
|
-
- permission: delete
|
|
359
|
-
target: users
|
|
360
|
-
${terminology.fields}:
|
|
361
|
-
- key: title
|
|
362
|
-
type: string
|
|
363
|
-
size: 255
|
|
364
|
-
required: true
|
|
365
|
-
description: "The title of the item"
|
|
366
|
-
- key: description
|
|
367
|
-
type: string
|
|
368
|
-
size: 1000
|
|
369
|
-
required: false
|
|
370
|
-
description: "A longer description"
|
|
371
|
-
- key: isActive
|
|
372
|
-
type: boolean
|
|
373
|
-
required: false
|
|
374
|
-
default: true${useTables ? `
|
|
375
|
-
- key: uniqueCode
|
|
376
|
-
type: string
|
|
377
|
-
size: 50
|
|
378
|
-
required: false
|
|
379
|
-
unique: true
|
|
380
|
-
description: "Unique identifier code (TablesDB feature)"` : ''}
|
|
381
|
-
indexes:
|
|
382
|
-
- key: title_search
|
|
383
|
-
type: fulltext
|
|
384
|
-
attributes:
|
|
385
|
-
- title
|
|
386
|
-
importDefs: []
|
|
343
|
+
const yamlExample = `# yaml-language-server: $schema=../.yaml_schemas/${terminology.schemaRef}
|
|
344
|
+
# Example ${terminology.containerName} Definition
|
|
345
|
+
name: Example${terminology.containerName}
|
|
346
|
+
id: example_${terminology.container}_${Date.now()}
|
|
347
|
+
${terminology.security}: false
|
|
348
|
+
enabled: true
|
|
349
|
+
permissions:
|
|
350
|
+
- permission: read
|
|
351
|
+
target: any
|
|
352
|
+
- permission: create
|
|
353
|
+
target: users
|
|
354
|
+
- permission: update
|
|
355
|
+
target: users
|
|
356
|
+
- permission: delete
|
|
357
|
+
target: users
|
|
358
|
+
${terminology.fields}:
|
|
359
|
+
- key: title
|
|
360
|
+
type: string
|
|
361
|
+
size: 255
|
|
362
|
+
required: true
|
|
363
|
+
description: "The title of the item"
|
|
364
|
+
- key: description
|
|
365
|
+
type: string
|
|
366
|
+
size: 1000
|
|
367
|
+
required: false
|
|
368
|
+
description: "A longer description"
|
|
369
|
+
- key: isActive
|
|
370
|
+
type: boolean
|
|
371
|
+
required: false
|
|
372
|
+
default: true${useTables ? `
|
|
373
|
+
- key: uniqueCode
|
|
374
|
+
type: string
|
|
375
|
+
size: 50
|
|
376
|
+
required: false
|
|
377
|
+
unique: true
|
|
378
|
+
description: "Unique identifier code (TablesDB feature)"` : ''}
|
|
379
|
+
indexes:
|
|
380
|
+
- key: title_search
|
|
381
|
+
type: fulltext
|
|
382
|
+
attributes:
|
|
383
|
+
- title
|
|
384
|
+
importDefs: []
|
|
387
385
|
`;
|
|
388
386
|
const yamlExamplePath = path.join(collectionsFolder, `Example${terminology.containerName}.yaml`);
|
|
389
387
|
writeFileSync(yamlExamplePath, yamlExample);
|
|
@@ -2,8 +2,8 @@ import { Client, Databases, Storage, type Models } from "node-appwrite";
|
|
|
2
2
|
import { type AppwriteConfig, type AppwriteFunction, type Specification } from "appwrite-utils";
|
|
3
3
|
import { type AfterImportActions, type ConverterFunctions, type ValidationRules } from "appwrite-utils";
|
|
4
4
|
import { type TransferOptions } from "./migrations/transfer.js";
|
|
5
|
-
import type { DatabaseAdapter } from '
|
|
6
|
-
import { type ValidationResult } from "
|
|
5
|
+
import type { DatabaseAdapter } from 'appwrite-utils-helpers';
|
|
6
|
+
import { type ValidationResult } from "appwrite-utils-helpers";
|
|
7
7
|
import type { DatabaseSelection, BucketSelection } from "./shared/selectionDialogs.js";
|
|
8
8
|
export interface SetupOptions {
|
|
9
9
|
databases?: Models.Database[];
|
|
@@ -19,6 +19,18 @@ export interface SetupOptions {
|
|
|
19
19
|
checkDuplicates?: boolean;
|
|
20
20
|
shouldWriteFile?: boolean;
|
|
21
21
|
}
|
|
22
|
+
export interface ControllerInitOptions {
|
|
23
|
+
validate?: boolean;
|
|
24
|
+
strictMode?: boolean;
|
|
25
|
+
useSession?: boolean;
|
|
26
|
+
sessionCookie?: string;
|
|
27
|
+
preferJson?: boolean;
|
|
28
|
+
overrides?: {
|
|
29
|
+
appwriteEndpoint?: string;
|
|
30
|
+
appwriteProject?: string;
|
|
31
|
+
appwriteKey?: string;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
22
34
|
export declare class UtilsController {
|
|
23
35
|
private static instance;
|
|
24
36
|
private isInitialized;
|
|
@@ -50,15 +62,10 @@ export declare class UtilsController {
|
|
|
50
62
|
appwriteProject?: string;
|
|
51
63
|
appwriteKey?: string;
|
|
52
64
|
});
|
|
53
|
-
init(options?:
|
|
54
|
-
validate?: boolean;
|
|
55
|
-
strictMode?: boolean;
|
|
56
|
-
useSession?: boolean;
|
|
57
|
-
sessionCookie?: string;
|
|
58
|
-
preferJson?: boolean;
|
|
59
|
-
}): Promise<void>;
|
|
65
|
+
init(options?: ControllerInitOptions): Promise<void>;
|
|
60
66
|
reloadConfig(): Promise<void>;
|
|
61
67
|
ensureDatabaseConfigBucketsExist(databases?: Models.Database[]): Promise<void>;
|
|
68
|
+
pushGlobalBuckets(selectedBucketIds?: string[]): Promise<void>;
|
|
62
69
|
ensureDatabasesExist(databases?: Models.Database[]): Promise<void>;
|
|
63
70
|
ensureCollectionsExist(database: Models.Database, collections?: Models.Collection[]): Promise<void>;
|
|
64
71
|
getDatabasesByIds(ids: string[]): Promise<Models.Database[] | undefined>;
|
package/dist/utilsController.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Client, Databases, Query, Storage, Users, } from "node-appwrite";
|
|
2
2
|
import {} from "appwrite-utils";
|
|
3
3
|
import { findAppwriteConfig, findFunctionsDir, } from "./utils/loadConfigs.js";
|
|
4
|
-
import { normalizeFunctionName, validateFunctionDirectory } from '
|
|
4
|
+
import { normalizeFunctionName, validateFunctionDirectory } from 'appwrite-utils-helpers';
|
|
5
5
|
import { UsersController } from "./users/methods.js";
|
|
6
6
|
import { AppwriteToX } from "./migrations/appwriteToX.js";
|
|
7
7
|
import { ImportController } from "./migrations/importController.js";
|
|
@@ -9,27 +9,22 @@ import { ImportDataActions } from "./migrations/importDataActions.js";
|
|
|
9
9
|
import { ensureDatabasesExist, wipeOtherDatabases, ensureCollectionsExist, } from "./databases/setup.js";
|
|
10
10
|
import { createOrUpdateCollections, createOrUpdateCollectionsViaAdapter, wipeDatabase, generateSchemas, fetchAllCollections, wipeCollection, } from "./collections/methods.js";
|
|
11
11
|
import { wipeAllTables, wipeTableRows } from "./collections/methods.js";
|
|
12
|
-
import { backupDatabase, ensureDatabaseConfigBucketsExist, wipeDocumentStorage, } from "./storage/methods.js";
|
|
12
|
+
import { backupDatabase, ensureDatabaseConfigBucketsExist, ensureGlobalBucketsExist, wipeDocumentStorage, } from "./storage/methods.js";
|
|
13
13
|
import path from "path";
|
|
14
14
|
import { converterFunctions, validationRules, } from "appwrite-utils";
|
|
15
15
|
import { afterImportActions } from "./migrations/afterImportActions.js";
|
|
16
16
|
import { transferDatabaseLocalToLocal, transferDatabaseLocalToRemote, transferStorageLocalToLocal, transferStorageLocalToRemote, transferUsersLocalToRemote, } from "./migrations/transfer.js";
|
|
17
|
-
import { getClient, getClientWithAuth } from "
|
|
18
|
-
import { getAdapterFromConfig } from "
|
|
19
|
-
import { hasSessionAuth, findSessionByEndpointAndProject, isValidSessionCookie } from "
|
|
17
|
+
import { getClient, getClientWithAuth } from "appwrite-utils-helpers";
|
|
18
|
+
import { getAdapterFromConfig } from "appwrite-utils-helpers";
|
|
19
|
+
import { hasSessionAuth, findSessionByEndpointAndProject, isValidSessionCookie } from "appwrite-utils-helpers";
|
|
20
20
|
import { fetchAllDatabases } from "./databases/methods.js";
|
|
21
21
|
import { listFunctions, updateFunctionSpecifications, } from "./functions/methods.js";
|
|
22
22
|
import chalk from "chalk";
|
|
23
23
|
import { deployLocalFunction } from "./functions/deployments.js";
|
|
24
24
|
import fs from "node:fs";
|
|
25
|
-
import { configureLogging, updateLogger, logger } from "
|
|
26
|
-
import { MessageFormatter, Messages } from "./shared/messageFormatter.js";
|
|
27
|
-
import { SchemaGenerator } from "./shared/schemaGenerator.js";
|
|
28
|
-
import { findYamlConfig } from "./config/yamlConfig.js";
|
|
25
|
+
import { configureLogging, updateLogger, logger, MessageFormatter, Messages, SchemaGenerator, findYamlConfig, validateCollectionsTablesConfig, reportValidationResults, validateWithStrictMode, ConfigManager } from "appwrite-utils-helpers";
|
|
29
26
|
import { createImportSchemas } from "./migrations/yaml/generateImportSchemas.js";
|
|
30
|
-
import {
|
|
31
|
-
import { ConfigManager } from "./config/ConfigManager.js";
|
|
32
|
-
import { ClientFactory } from "./utils/ClientFactory.js";
|
|
27
|
+
import { ClientFactory } from "appwrite-utils-helpers";
|
|
33
28
|
import { clearProcessingState, processQueue } from "./shared/operationQueue.js";
|
|
34
29
|
export class UtilsController {
|
|
35
30
|
// ──────────────────────────────────────────────────
|
|
@@ -152,7 +147,7 @@ export class UtilsController {
|
|
|
152
147
|
}
|
|
153
148
|
}
|
|
154
149
|
async init(options = {}) {
|
|
155
|
-
const { validate = false, strictMode = false, preferJson = false } = options;
|
|
150
|
+
const { validate = false, strictMode = false, preferJson = false, useSession, sessionCookie, overrides } = options;
|
|
156
151
|
const configManager = ConfigManager.getInstance();
|
|
157
152
|
// Load config if not already loaded
|
|
158
153
|
if (!configManager.hasConfig()) {
|
|
@@ -161,6 +156,9 @@ export class UtilsController {
|
|
|
161
156
|
validate,
|
|
162
157
|
strictMode,
|
|
163
158
|
preferJson,
|
|
159
|
+
useSession,
|
|
160
|
+
explicitSessionCookie: sessionCookie,
|
|
161
|
+
overrides,
|
|
164
162
|
});
|
|
165
163
|
}
|
|
166
164
|
const config = configManager.getConfig();
|
|
@@ -224,6 +222,18 @@ export class UtilsController {
|
|
|
224
222
|
}
|
|
225
223
|
await ensureDatabaseConfigBucketsExist(this.storage, this.config, databases);
|
|
226
224
|
}
|
|
225
|
+
async pushGlobalBuckets(selectedBucketIds) {
|
|
226
|
+
await this.init();
|
|
227
|
+
if (!this.storage) {
|
|
228
|
+
MessageFormatter.error("Storage not initialized", undefined, { prefix: "Controller" });
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
if (!this.config) {
|
|
232
|
+
MessageFormatter.error("Config not initialized", undefined, { prefix: "Controller" });
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
await ensureGlobalBucketsExist(this.storage, this.config, selectedBucketIds);
|
|
236
|
+
}
|
|
227
237
|
async ensureDatabasesExist(databases) {
|
|
228
238
|
await this.init();
|
|
229
239
|
if (!this.config) {
|
|
@@ -353,7 +363,7 @@ export class UtilsController {
|
|
|
353
363
|
MessageFormatter.error(`Function ${functionName} not found in config`, undefined, { prefix: "Controller" });
|
|
354
364
|
return;
|
|
355
365
|
}
|
|
356
|
-
await deployLocalFunction(this.appwriteServer, functionName, functionConfig, functionPath);
|
|
366
|
+
await deployLocalFunction(this.appwriteServer, functionName, functionConfig, functionPath, this.appwriteFolderPath);
|
|
357
367
|
}
|
|
358
368
|
async syncFunctions() {
|
|
359
369
|
await this.init();
|
|
@@ -648,72 +658,87 @@ export class UtilsController {
|
|
|
648
658
|
MessageFormatter.progress("Starting selective push (local config → Appwrite)...", { prefix: "Controller" });
|
|
649
659
|
// Convert database selections to Models.Database format
|
|
650
660
|
const selectedDatabases = [];
|
|
661
|
+
const serverDatabases = await fetchAllDatabases(this.database);
|
|
662
|
+
const configuredDatabases = this.config?.databases || [];
|
|
651
663
|
for (const dbSelection of databaseSelections) {
|
|
652
|
-
//
|
|
653
|
-
const
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
MessageFormatter.info(`Selected database: ${database.name} (${database.$id})`, { prefix: "Controller" });
|
|
658
|
-
// Log selected tables for this database
|
|
659
|
-
if (dbSelection.tableIds && dbSelection.tableIds.length > 0) {
|
|
660
|
-
MessageFormatter.info(` Tables: ${dbSelection.tableIds.join(', ')}`, { prefix: "Controller" });
|
|
661
|
-
}
|
|
664
|
+
// First try to find on server
|
|
665
|
+
const serverDb = serverDatabases.find(db => db.$id === dbSelection.databaseId);
|
|
666
|
+
if (serverDb) {
|
|
667
|
+
selectedDatabases.push(serverDb);
|
|
668
|
+
MessageFormatter.info(`Selected database: ${serverDb.name} (${serverDb.$id})`, { prefix: "Controller" });
|
|
662
669
|
}
|
|
663
670
|
else {
|
|
664
|
-
|
|
671
|
+
// Database doesn't exist on server - check if it's in local config
|
|
672
|
+
const configDb = configuredDatabases.find((db) => db.$id === dbSelection.databaseId);
|
|
673
|
+
if (configDb) {
|
|
674
|
+
// Create a pseudo-database object that ensureDatabasesExist will create
|
|
675
|
+
const dbId = configDb.$id;
|
|
676
|
+
selectedDatabases.push({
|
|
677
|
+
$id: dbId,
|
|
678
|
+
name: configDb.name || dbId,
|
|
679
|
+
$createdAt: new Date().toISOString(),
|
|
680
|
+
$updatedAt: new Date().toISOString(),
|
|
681
|
+
enabled: true,
|
|
682
|
+
});
|
|
683
|
+
MessageFormatter.info(`Selected database: ${configDb.name || dbId} (${dbId}) [will be created]`, { prefix: "Controller" });
|
|
684
|
+
}
|
|
685
|
+
else {
|
|
686
|
+
MessageFormatter.warning(`Database with ID ${dbSelection.databaseId} not found in server or local config`, { prefix: "Controller" });
|
|
687
|
+
continue;
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
// Log selected tables for this database
|
|
691
|
+
if (dbSelection.tableIds && dbSelection.tableIds.length > 0) {
|
|
692
|
+
MessageFormatter.info(` Tables: ${dbSelection.tableIds.join(', ')}`, { prefix: "Controller" });
|
|
665
693
|
}
|
|
666
694
|
}
|
|
667
|
-
if (selectedDatabases.length === 0) {
|
|
668
|
-
MessageFormatter.warning("No valid databases selected for push", { prefix: "Controller" });
|
|
695
|
+
if (selectedDatabases.length === 0 && (!bucketSelections || bucketSelections.length === 0)) {
|
|
696
|
+
MessageFormatter.warning("No valid databases or buckets selected for push", { prefix: "Controller" });
|
|
669
697
|
return;
|
|
670
698
|
}
|
|
671
|
-
//
|
|
699
|
+
// Push global/root-level buckets if any were selected
|
|
672
700
|
if (bucketSelections && bucketSelections.length > 0) {
|
|
673
701
|
MessageFormatter.info(`Selected ${bucketSelections.length} buckets:`, { prefix: "Controller" });
|
|
674
702
|
for (const bucketSelection of bucketSelections) {
|
|
675
703
|
const dbInfo = bucketSelection.databaseId ? ` (DB: ${bucketSelection.databaseId})` : '';
|
|
676
704
|
MessageFormatter.info(` - ${bucketSelection.bucketName} (${bucketSelection.bucketId})${dbInfo}`, { prefix: "Controller" });
|
|
677
705
|
}
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
const
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
706
|
+
const selectedGlobalBucketIds = bucketSelections.map(bs => bs.bucketId);
|
|
707
|
+
await this.pushGlobalBuckets(selectedGlobalBucketIds);
|
|
708
|
+
}
|
|
709
|
+
// Database + tables push
|
|
710
|
+
if (selectedDatabases.length > 0) {
|
|
711
|
+
const databaseCollectionsMap = new Map();
|
|
712
|
+
const allCollections = [
|
|
713
|
+
...(this.config?.collections || []),
|
|
714
|
+
...(this.config?.tables || [])
|
|
715
|
+
];
|
|
716
|
+
for (const dbSelection of databaseSelections) {
|
|
717
|
+
const collectionsForDatabase = [];
|
|
718
|
+
for (const collection of allCollections) {
|
|
719
|
+
const collectionId = collection.$id || collection.id;
|
|
720
|
+
if (dbSelection.tableIds.includes(collectionId)) {
|
|
721
|
+
collectionsForDatabase.push(collection);
|
|
722
|
+
const source = collection._isFromTablesDir ? 'tables/' : 'collections/';
|
|
723
|
+
MessageFormatter.info(` - Selected: ${collection.name || collectionId} → ${dbSelection.databaseId} [${source}]`, { prefix: "Controller" });
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
databaseCollectionsMap.set(dbSelection.databaseId, collectionsForDatabase);
|
|
727
|
+
}
|
|
728
|
+
const totalSelectedCollections = Array.from(databaseCollectionsMap.values())
|
|
729
|
+
.reduce((total, collections) => total + collections.length, 0);
|
|
730
|
+
MessageFormatter.info(`Pushing ${totalSelectedCollections} selected tables to ${databaseCollectionsMap.size} databases`, { prefix: "Controller" });
|
|
731
|
+
await this.ensureDatabasesExist(selectedDatabases);
|
|
732
|
+
await this.ensureDatabaseConfigBucketsExist(selectedDatabases);
|
|
733
|
+
for (const database of selectedDatabases) {
|
|
734
|
+
const collectionsForThisDatabase = databaseCollectionsMap.get(database.$id) || [];
|
|
735
|
+
if (collectionsForThisDatabase.length > 0) {
|
|
736
|
+
MessageFormatter.info(`Pushing ${collectionsForThisDatabase.length} tables to database ${database.$id} (${database.name})`, { prefix: "Controller" });
|
|
737
|
+
await this.createOrUpdateCollections(database, undefined, collectionsForThisDatabase);
|
|
738
|
+
}
|
|
739
|
+
else {
|
|
740
|
+
MessageFormatter.info(`No tables selected for database ${database.$id} (${database.name})`, { prefix: "Controller" });
|
|
696
741
|
}
|
|
697
|
-
}
|
|
698
|
-
databaseCollectionsMap.set(dbSelection.databaseId, collectionsForDatabase);
|
|
699
|
-
MessageFormatter.info(`Database ${dbSelection.databaseId}: ${collectionsForDatabase.length} collections selected`, { prefix: "Controller" });
|
|
700
|
-
}
|
|
701
|
-
// Calculate total collections for logging
|
|
702
|
-
const totalSelectedCollections = Array.from(databaseCollectionsMap.values())
|
|
703
|
-
.reduce((total, collections) => total + collections.length, 0);
|
|
704
|
-
MessageFormatter.info(`Pushing ${totalSelectedCollections} selected tables/collections to ${databaseCollectionsMap.size} databases`, { prefix: "Controller" });
|
|
705
|
-
// Ensure databases exist
|
|
706
|
-
await this.ensureDatabasesExist(selectedDatabases);
|
|
707
|
-
await this.ensureDatabaseConfigBucketsExist(selectedDatabases);
|
|
708
|
-
// Create/update collections with database-specific context
|
|
709
|
-
for (const database of selectedDatabases) {
|
|
710
|
-
const collectionsForThisDatabase = databaseCollectionsMap.get(database.$id) || [];
|
|
711
|
-
if (collectionsForThisDatabase.length > 0) {
|
|
712
|
-
MessageFormatter.info(`Pushing ${collectionsForThisDatabase.length} collections to database ${database.$id} (${database.name})`, { prefix: "Controller" });
|
|
713
|
-
await this.createOrUpdateCollections(database, undefined, collectionsForThisDatabase);
|
|
714
|
-
}
|
|
715
|
-
else {
|
|
716
|
-
MessageFormatter.info(`No collections selected for database ${database.$id} (${database.name})`, { prefix: "Controller" });
|
|
717
742
|
}
|
|
718
743
|
}
|
|
719
744
|
MessageFormatter.success("Selective push completed successfully! Local config pushed to Appwrite.", { prefix: "Controller" });
|
|
@@ -770,10 +795,10 @@ export class UtilsController {
|
|
|
770
795
|
return;
|
|
771
796
|
}
|
|
772
797
|
if (options.isRemote && targetClient) {
|
|
773
|
-
await transferDatabaseLocalToRemote(sourceClient, options.transferEndpoint, options.transferProject, options.transferKey, fromDb.$id, targetDb.$id);
|
|
798
|
+
await transferDatabaseLocalToRemote(sourceClient, options.transferEndpoint, options.transferProject, options.transferKey, fromDb.$id, targetDb.$id, options.collections);
|
|
774
799
|
}
|
|
775
800
|
else {
|
|
776
|
-
await transferDatabaseLocalToLocal(sourceClient, fromDb.$id, targetDb.$id);
|
|
801
|
+
await transferDatabaseLocalToLocal(sourceClient, fromDb.$id, targetDb.$id, options.collections, this.adapter);
|
|
777
802
|
}
|
|
778
803
|
}
|
|
779
804
|
if (options.transferUsers) {
|
package/package.json
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appwrite-utils-cli",
|
|
3
3
|
"description": "Appwrite Utility Functions to help with database management, data conversion, data import, migrations, and much more. Meant to be used as a CLI tool, I do not recommend installing this in frontend environments.",
|
|
4
|
-
"version": "1.
|
|
5
|
-
"main": "
|
|
4
|
+
"version": "1.12.0",
|
|
5
|
+
"main": "dist/main.js",
|
|
6
6
|
"type": "module",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
7
10
|
"repository": {
|
|
8
11
|
"type": "git",
|
|
9
12
|
"url": "https://github.com/zachhandley/AppwriteUtils"
|
|
@@ -39,7 +42,8 @@
|
|
|
39
42
|
"@types/inquirer": "^9.0.8",
|
|
40
43
|
"@types/json-schema": "^7.0.15",
|
|
41
44
|
"@types/yargs": "^17.0.33",
|
|
42
|
-
"appwrite-utils": "
|
|
45
|
+
"appwrite-utils": "^1.9.0",
|
|
46
|
+
"appwrite-utils-helpers": "^0.3.0",
|
|
43
47
|
"chalk": "^5.4.1",
|
|
44
48
|
"cli-progress": "^3.12.0",
|
|
45
49
|
"commander": "^12.1.0",
|
|
@@ -54,6 +58,7 @@
|
|
|
54
58
|
"nanostores": "^0.10.3",
|
|
55
59
|
"node-appwrite": "^20.2.1",
|
|
56
60
|
"p-limit": "^6.2.0",
|
|
61
|
+
"papaparse": "^5.5.3",
|
|
57
62
|
"tar": "^7.4.3",
|
|
58
63
|
"tsx": "^4.20.3",
|
|
59
64
|
"ulidx": "^2.4.1",
|
|
@@ -69,6 +74,7 @@
|
|
|
69
74
|
"@types/jszip": "^3.4.1",
|
|
70
75
|
"@types/lodash": "^4.17.18",
|
|
71
76
|
"@types/luxon": "^3.6.2",
|
|
77
|
+
"@types/papaparse": "^5.5.2",
|
|
72
78
|
"jest": "^29.7.0",
|
|
73
79
|
"ts-jest": "^29.1.2",
|
|
74
80
|
"typescript": "^5.8.3"
|