@njdamstra/appwrite-utils-cli 1.8.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/README.md +1133 -0
- package/dist/adapters/AdapterFactory.d.ts +94 -0
- package/dist/adapters/AdapterFactory.js +405 -0
- package/dist/adapters/DatabaseAdapter.d.ts +233 -0
- package/dist/adapters/DatabaseAdapter.js +50 -0
- package/dist/adapters/LegacyAdapter.d.ts +50 -0
- package/dist/adapters/LegacyAdapter.js +612 -0
- package/dist/adapters/TablesDBAdapter.d.ts +45 -0
- package/dist/adapters/TablesDBAdapter.js +571 -0
- package/dist/adapters/index.d.ts +11 -0
- package/dist/adapters/index.js +12 -0
- package/dist/backups/operations/bucketBackup.d.ts +19 -0
- package/dist/backups/operations/bucketBackup.js +197 -0
- package/dist/backups/operations/collectionBackup.d.ts +30 -0
- package/dist/backups/operations/collectionBackup.js +201 -0
- package/dist/backups/operations/comprehensiveBackup.d.ts +25 -0
- package/dist/backups/operations/comprehensiveBackup.js +238 -0
- package/dist/backups/schemas/bucketManifest.d.ts +93 -0
- package/dist/backups/schemas/bucketManifest.js +33 -0
- package/dist/backups/schemas/comprehensiveManifest.d.ts +108 -0
- package/dist/backups/schemas/comprehensiveManifest.js +32 -0
- package/dist/backups/tracking/centralizedTracking.d.ts +34 -0
- package/dist/backups/tracking/centralizedTracking.js +274 -0
- package/dist/cli/commands/configCommands.d.ts +8 -0
- package/dist/cli/commands/configCommands.js +166 -0
- package/dist/cli/commands/databaseCommands.d.ts +13 -0
- package/dist/cli/commands/databaseCommands.js +554 -0
- package/dist/cli/commands/functionCommands.d.ts +7 -0
- package/dist/cli/commands/functionCommands.js +330 -0
- package/dist/cli/commands/schemaCommands.d.ts +7 -0
- package/dist/cli/commands/schemaCommands.js +169 -0
- package/dist/cli/commands/storageCommands.d.ts +5 -0
- package/dist/cli/commands/storageCommands.js +143 -0
- package/dist/cli/commands/transferCommands.d.ts +5 -0
- package/dist/cli/commands/transferCommands.js +384 -0
- package/dist/collections/attributes.d.ts +13 -0
- package/dist/collections/attributes.js +1364 -0
- package/dist/collections/indexes.d.ts +12 -0
- package/dist/collections/indexes.js +217 -0
- package/dist/collections/methods.d.ts +19 -0
- package/dist/collections/methods.js +682 -0
- package/dist/collections/tableOperations.d.ts +86 -0
- package/dist/collections/tableOperations.js +434 -0
- package/dist/collections/transferOperations.d.ts +8 -0
- package/dist/collections/transferOperations.js +412 -0
- package/dist/collections/wipeOperations.d.ts +16 -0
- package/dist/collections/wipeOperations.js +233 -0
- package/dist/config/ConfigManager.d.ts +445 -0
- package/dist/config/ConfigManager.js +625 -0
- package/dist/config/configMigration.d.ts +87 -0
- package/dist/config/configMigration.js +390 -0
- package/dist/config/configValidation.d.ts +66 -0
- package/dist/config/configValidation.js +358 -0
- package/dist/config/index.d.ts +8 -0
- package/dist/config/index.js +7 -0
- package/dist/config/services/ConfigDiscoveryService.d.ts +126 -0
- package/dist/config/services/ConfigDiscoveryService.js +374 -0
- package/dist/config/services/ConfigLoaderService.d.ts +129 -0
- package/dist/config/services/ConfigLoaderService.js +540 -0
- package/dist/config/services/ConfigMergeService.d.ts +208 -0
- package/dist/config/services/ConfigMergeService.js +308 -0
- package/dist/config/services/ConfigValidationService.d.ts +214 -0
- package/dist/config/services/ConfigValidationService.js +310 -0
- package/dist/config/services/SessionAuthService.d.ts +225 -0
- package/dist/config/services/SessionAuthService.js +456 -0
- package/dist/config/services/__tests__/ConfigMergeService.test.d.ts +1 -0
- package/dist/config/services/__tests__/ConfigMergeService.test.js +271 -0
- package/dist/config/services/index.d.ts +13 -0
- package/dist/config/services/index.js +10 -0
- package/dist/config/yamlConfig.d.ts +722 -0
- package/dist/config/yamlConfig.js +702 -0
- package/dist/databases/methods.d.ts +6 -0
- package/dist/databases/methods.js +35 -0
- package/dist/databases/setup.d.ts +5 -0
- package/dist/databases/setup.js +45 -0
- package/dist/examples/yamlTerminologyExample.d.ts +42 -0
- package/dist/examples/yamlTerminologyExample.js +272 -0
- package/dist/functions/deployments.d.ts +4 -0
- package/dist/functions/deployments.js +146 -0
- package/dist/functions/fnConfigDiscovery.d.ts +3 -0
- package/dist/functions/fnConfigDiscovery.js +108 -0
- package/dist/functions/methods.d.ts +16 -0
- package/dist/functions/methods.js +162 -0
- package/dist/functions/pathResolution.d.ts +37 -0
- package/dist/functions/pathResolution.js +185 -0
- package/dist/functions/templates/count-docs-in-collection/README.md +54 -0
- package/dist/functions/templates/count-docs-in-collection/src/main.ts +159 -0
- package/dist/functions/templates/count-docs-in-collection/src/request.ts +9 -0
- package/dist/functions/templates/hono-typescript/README.md +286 -0
- package/dist/functions/templates/hono-typescript/src/adapters/request.ts +74 -0
- package/dist/functions/templates/hono-typescript/src/adapters/response.ts +106 -0
- package/dist/functions/templates/hono-typescript/src/app.ts +180 -0
- package/dist/functions/templates/hono-typescript/src/context.ts +103 -0
- package/dist/functions/templates/hono-typescript/src/index.ts +54 -0
- package/dist/functions/templates/hono-typescript/src/middleware/appwrite.ts +119 -0
- package/dist/functions/templates/typescript-node/README.md +32 -0
- package/dist/functions/templates/typescript-node/src/context.ts +103 -0
- package/dist/functions/templates/typescript-node/src/index.ts +29 -0
- package/dist/functions/templates/uv/README.md +31 -0
- package/dist/functions/templates/uv/pyproject.toml +30 -0
- package/dist/functions/templates/uv/src/__init__.py +0 -0
- package/dist/functions/templates/uv/src/context.py +125 -0
- package/dist/functions/templates/uv/src/index.py +46 -0
- package/dist/init.d.ts +2 -0
- package/dist/init.js +57 -0
- package/dist/interactiveCLI.d.ts +31 -0
- package/dist/interactiveCLI.js +898 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +1172 -0
- package/dist/migrations/afterImportActions.d.ts +17 -0
- package/dist/migrations/afterImportActions.js +306 -0
- package/dist/migrations/appwriteToX.d.ts +211 -0
- package/dist/migrations/appwriteToX.js +491 -0
- package/dist/migrations/comprehensiveTransfer.d.ts +147 -0
- package/dist/migrations/comprehensiveTransfer.js +1317 -0
- package/dist/migrations/dataLoader.d.ts +753 -0
- package/dist/migrations/dataLoader.js +1250 -0
- package/dist/migrations/importController.d.ts +23 -0
- package/dist/migrations/importController.js +268 -0
- package/dist/migrations/importDataActions.d.ts +50 -0
- package/dist/migrations/importDataActions.js +230 -0
- package/dist/migrations/relationships.d.ts +29 -0
- package/dist/migrations/relationships.js +204 -0
- package/dist/migrations/services/DataTransformationService.d.ts +55 -0
- package/dist/migrations/services/DataTransformationService.js +158 -0
- package/dist/migrations/services/FileHandlerService.d.ts +75 -0
- package/dist/migrations/services/FileHandlerService.js +236 -0
- package/dist/migrations/services/ImportOrchestrator.d.ts +97 -0
- package/dist/migrations/services/ImportOrchestrator.js +485 -0
- package/dist/migrations/services/RateLimitManager.d.ts +138 -0
- package/dist/migrations/services/RateLimitManager.js +279 -0
- package/dist/migrations/services/RelationshipResolver.d.ts +120 -0
- package/dist/migrations/services/RelationshipResolver.js +332 -0
- package/dist/migrations/services/UserMappingService.d.ts +109 -0
- package/dist/migrations/services/UserMappingService.js +277 -0
- package/dist/migrations/services/ValidationService.d.ts +74 -0
- package/dist/migrations/services/ValidationService.js +260 -0
- package/dist/migrations/transfer.d.ts +26 -0
- package/dist/migrations/transfer.js +608 -0
- package/dist/migrations/yaml/YamlImportConfigLoader.d.ts +131 -0
- package/dist/migrations/yaml/YamlImportConfigLoader.js +383 -0
- package/dist/migrations/yaml/YamlImportIntegration.d.ts +93 -0
- package/dist/migrations/yaml/YamlImportIntegration.js +341 -0
- package/dist/migrations/yaml/generateImportSchemas.d.ts +30 -0
- package/dist/migrations/yaml/generateImportSchemas.js +1327 -0
- package/dist/schemas/authUser.d.ts +24 -0
- package/dist/schemas/authUser.js +17 -0
- package/dist/setup.d.ts +2 -0
- package/dist/setup.js +5 -0
- package/dist/setupCommands.d.ts +58 -0
- package/dist/setupCommands.js +490 -0
- package/dist/setupController.d.ts +9 -0
- package/dist/setupController.js +34 -0
- package/dist/shared/attributeMapper.d.ts +20 -0
- package/dist/shared/attributeMapper.js +203 -0
- package/dist/shared/backupMetadataSchema.d.ts +94 -0
- package/dist/shared/backupMetadataSchema.js +38 -0
- package/dist/shared/backupTracking.d.ts +18 -0
- package/dist/shared/backupTracking.js +176 -0
- package/dist/shared/confirmationDialogs.d.ts +75 -0
- package/dist/shared/confirmationDialogs.js +236 -0
- package/dist/shared/errorUtils.d.ts +54 -0
- package/dist/shared/errorUtils.js +95 -0
- package/dist/shared/functionManager.d.ts +48 -0
- package/dist/shared/functionManager.js +336 -0
- package/dist/shared/indexManager.d.ts +24 -0
- package/dist/shared/indexManager.js +151 -0
- package/dist/shared/jsonSchemaGenerator.d.ts +50 -0
- package/dist/shared/jsonSchemaGenerator.js +290 -0
- package/dist/shared/logging.d.ts +61 -0
- package/dist/shared/logging.js +116 -0
- package/dist/shared/messageFormatter.d.ts +39 -0
- package/dist/shared/messageFormatter.js +162 -0
- package/dist/shared/migrationHelpers.d.ts +61 -0
- package/dist/shared/migrationHelpers.js +145 -0
- package/dist/shared/operationLogger.d.ts +10 -0
- package/dist/shared/operationLogger.js +12 -0
- package/dist/shared/operationQueue.d.ts +40 -0
- package/dist/shared/operationQueue.js +311 -0
- package/dist/shared/operationsTable.d.ts +26 -0
- package/dist/shared/operationsTable.js +286 -0
- package/dist/shared/operationsTableSchema.d.ts +48 -0
- package/dist/shared/operationsTableSchema.js +35 -0
- package/dist/shared/progressManager.d.ts +62 -0
- package/dist/shared/progressManager.js +215 -0
- package/dist/shared/pydanticModelGenerator.d.ts +17 -0
- package/dist/shared/pydanticModelGenerator.js +615 -0
- package/dist/shared/relationshipExtractor.d.ts +56 -0
- package/dist/shared/relationshipExtractor.js +138 -0
- package/dist/shared/schemaGenerator.d.ts +40 -0
- package/dist/shared/schemaGenerator.js +556 -0
- package/dist/shared/selectionDialogs.d.ts +214 -0
- package/dist/shared/selectionDialogs.js +544 -0
- package/dist/storage/backupCompression.d.ts +20 -0
- package/dist/storage/backupCompression.js +67 -0
- package/dist/storage/methods.d.ts +32 -0
- package/dist/storage/methods.js +472 -0
- package/dist/storage/schemas.d.ts +842 -0
- package/dist/storage/schemas.js +175 -0
- package/dist/types.d.ts +4 -0
- package/dist/types.js +3 -0
- package/dist/users/methods.d.ts +16 -0
- package/dist/users/methods.js +277 -0
- package/dist/utils/ClientFactory.d.ts +87 -0
- package/dist/utils/ClientFactory.js +212 -0
- package/dist/utils/configDiscovery.d.ts +78 -0
- package/dist/utils/configDiscovery.js +472 -0
- package/dist/utils/configMigration.d.ts +1 -0
- package/dist/utils/configMigration.js +261 -0
- package/dist/utils/constantsGenerator.d.ts +31 -0
- package/dist/utils/constantsGenerator.js +321 -0
- package/dist/utils/dataConverters.d.ts +46 -0
- package/dist/utils/dataConverters.js +139 -0
- package/dist/utils/directoryUtils.d.ts +22 -0
- package/dist/utils/directoryUtils.js +59 -0
- package/dist/utils/getClientFromConfig.d.ts +39 -0
- package/dist/utils/getClientFromConfig.js +199 -0
- package/dist/utils/helperFunctions.d.ts +63 -0
- package/dist/utils/helperFunctions.js +156 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/loadConfigs.d.ts +50 -0
- package/dist/utils/loadConfigs.js +358 -0
- package/dist/utils/pathResolvers.d.ts +53 -0
- package/dist/utils/pathResolvers.js +72 -0
- package/dist/utils/projectConfig.d.ts +119 -0
- package/dist/utils/projectConfig.js +171 -0
- package/dist/utils/retryFailedPromises.d.ts +2 -0
- package/dist/utils/retryFailedPromises.js +23 -0
- package/dist/utils/sessionAuth.d.ts +48 -0
- package/dist/utils/sessionAuth.js +164 -0
- package/dist/utils/setupFiles.d.ts +4 -0
- package/dist/utils/setupFiles.js +1192 -0
- package/dist/utils/typeGuards.d.ts +35 -0
- package/dist/utils/typeGuards.js +57 -0
- package/dist/utils/validationRules.d.ts +43 -0
- package/dist/utils/validationRules.js +42 -0
- package/dist/utils/versionDetection.d.ts +58 -0
- package/dist/utils/versionDetection.js +251 -0
- package/dist/utils/yamlConverter.d.ts +100 -0
- package/dist/utils/yamlConverter.js +428 -0
- package/dist/utils/yamlLoader.d.ts +70 -0
- package/dist/utils/yamlLoader.js +267 -0
- package/dist/utilsController.d.ts +106 -0
- package/dist/utilsController.js +863 -0
- package/package.json +75 -0
- package/scripts/copy-templates.ts +23 -0
- package/src/adapters/AdapterFactory.ts +510 -0
- package/src/adapters/DatabaseAdapter.ts +306 -0
- package/src/adapters/LegacyAdapter.ts +841 -0
- package/src/adapters/TablesDBAdapter.ts +773 -0
- package/src/adapters/index.ts +37 -0
- package/src/backups/operations/bucketBackup.ts +277 -0
- package/src/backups/operations/collectionBackup.ts +310 -0
- package/src/backups/operations/comprehensiveBackup.ts +342 -0
- package/src/backups/schemas/bucketManifest.ts +78 -0
- package/src/backups/schemas/comprehensiveManifest.ts +76 -0
- package/src/backups/tracking/centralizedTracking.ts +352 -0
- package/src/cli/commands/configCommands.ts +201 -0
- package/src/cli/commands/databaseCommands.ts +749 -0
- package/src/cli/commands/functionCommands.ts +418 -0
- package/src/cli/commands/schemaCommands.ts +200 -0
- package/src/cli/commands/storageCommands.ts +152 -0
- package/src/cli/commands/transferCommands.ts +457 -0
- package/src/collections/attributes.ts +2054 -0
- package/src/collections/attributes.ts.backup +1555 -0
- package/src/collections/indexes.ts +352 -0
- package/src/collections/methods.ts +745 -0
- package/src/collections/tableOperations.ts +506 -0
- package/src/collections/transferOperations.ts +590 -0
- package/src/collections/wipeOperations.ts +346 -0
- package/src/config/ConfigManager.ts +808 -0
- package/src/config/README.md +274 -0
- package/src/config/configMigration.ts +575 -0
- package/src/config/configValidation.ts +445 -0
- package/src/config/index.ts +10 -0
- package/src/config/services/ConfigDiscoveryService.ts +463 -0
- package/src/config/services/ConfigLoaderService.ts +740 -0
- package/src/config/services/ConfigMergeService.ts +388 -0
- package/src/config/services/ConfigValidationService.ts +394 -0
- package/src/config/services/SessionAuthService.ts +565 -0
- package/src/config/services/__tests__/ConfigMergeService.test.ts +351 -0
- package/src/config/services/index.ts +29 -0
- package/src/config/yamlConfig.ts +761 -0
- package/src/databases/methods.ts +49 -0
- package/src/databases/setup.ts +77 -0
- package/src/examples/yamlTerminologyExample.ts +346 -0
- package/src/functions/deployments.ts +220 -0
- package/src/functions/fnConfigDiscovery.ts +103 -0
- package/src/functions/methods.ts +271 -0
- package/src/functions/pathResolution.ts +227 -0
- package/src/functions/templates/count-docs-in-collection/README.md +54 -0
- package/src/functions/templates/count-docs-in-collection/src/main.ts +159 -0
- package/src/functions/templates/count-docs-in-collection/src/request.ts +9 -0
- package/src/functions/templates/hono-typescript/README.md +286 -0
- package/src/functions/templates/hono-typescript/src/adapters/request.ts +74 -0
- package/src/functions/templates/hono-typescript/src/adapters/response.ts +106 -0
- package/src/functions/templates/hono-typescript/src/app.ts +180 -0
- package/src/functions/templates/hono-typescript/src/context.ts +103 -0
- package/src/functions/templates/hono-typescript/src/index.ts +54 -0
- package/src/functions/templates/hono-typescript/src/middleware/appwrite.ts +119 -0
- package/src/functions/templates/typescript-node/README.md +32 -0
- package/src/functions/templates/typescript-node/src/context.ts +103 -0
- package/src/functions/templates/typescript-node/src/index.ts +29 -0
- package/src/functions/templates/uv/README.md +31 -0
- package/src/functions/templates/uv/pyproject.toml +30 -0
- package/src/functions/templates/uv/src/__init__.py +0 -0
- package/src/functions/templates/uv/src/context.py +125 -0
- package/src/functions/templates/uv/src/index.py +46 -0
- package/src/init.ts +62 -0
- package/src/interactiveCLI.ts +1136 -0
- package/src/main.ts +1661 -0
- package/src/migrations/afterImportActions.ts +580 -0
- package/src/migrations/appwriteToX.ts +664 -0
- package/src/migrations/comprehensiveTransfer.ts +2285 -0
- package/src/migrations/dataLoader.ts +1702 -0
- package/src/migrations/importController.ts +428 -0
- package/src/migrations/importDataActions.ts +315 -0
- package/src/migrations/relationships.ts +334 -0
- package/src/migrations/services/DataTransformationService.ts +196 -0
- package/src/migrations/services/FileHandlerService.ts +311 -0
- package/src/migrations/services/ImportOrchestrator.ts +666 -0
- package/src/migrations/services/RateLimitManager.ts +363 -0
- package/src/migrations/services/RelationshipResolver.ts +461 -0
- package/src/migrations/services/UserMappingService.ts +345 -0
- package/src/migrations/services/ValidationService.ts +349 -0
- package/src/migrations/transfer.ts +1068 -0
- package/src/migrations/yaml/YamlImportConfigLoader.ts +439 -0
- package/src/migrations/yaml/YamlImportIntegration.ts +446 -0
- package/src/migrations/yaml/generateImportSchemas.ts +1354 -0
- package/src/schemas/authUser.ts +23 -0
- package/src/setup.ts +8 -0
- package/src/setupCommands.ts +603 -0
- package/src/setupController.ts +43 -0
- package/src/shared/attributeMapper.ts +229 -0
- package/src/shared/backupMetadataSchema.ts +93 -0
- package/src/shared/backupTracking.ts +211 -0
- package/src/shared/confirmationDialogs.ts +327 -0
- package/src/shared/errorUtils.ts +110 -0
- package/src/shared/functionManager.ts +525 -0
- package/src/shared/indexManager.ts +254 -0
- package/src/shared/jsonSchemaGenerator.ts +383 -0
- package/src/shared/logging.ts +149 -0
- package/src/shared/messageFormatter.ts +208 -0
- package/src/shared/migrationHelpers.ts +232 -0
- package/src/shared/operationLogger.ts +20 -0
- package/src/shared/operationQueue.ts +377 -0
- package/src/shared/operationsTable.ts +338 -0
- package/src/shared/operationsTableSchema.ts +60 -0
- package/src/shared/progressManager.ts +278 -0
- package/src/shared/pydanticModelGenerator.ts +618 -0
- package/src/shared/relationshipExtractor.ts +214 -0
- package/src/shared/schemaGenerator.ts +644 -0
- package/src/shared/selectionDialogs.ts +749 -0
- package/src/storage/backupCompression.ts +88 -0
- package/src/storage/methods.ts +698 -0
- package/src/storage/schemas.ts +205 -0
- package/src/types/node-appwrite-tablesdb.d.ts +44 -0
- package/src/types.ts +9 -0
- package/src/users/methods.ts +359 -0
- package/src/utils/ClientFactory.ts +240 -0
- package/src/utils/configDiscovery.ts +557 -0
- package/src/utils/configMigration.ts +348 -0
- package/src/utils/constantsGenerator.ts +369 -0
- package/src/utils/dataConverters.ts +159 -0
- package/src/utils/directoryUtils.ts +61 -0
- package/src/utils/getClientFromConfig.ts +257 -0
- package/src/utils/helperFunctions.ts +228 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/loadConfigs.ts +449 -0
- package/src/utils/pathResolvers.ts +81 -0
- package/src/utils/projectConfig.ts +299 -0
- package/src/utils/retryFailedPromises.ts +29 -0
- package/src/utils/sessionAuth.ts +230 -0
- package/src/utils/setupFiles.ts +1238 -0
- package/src/utils/typeGuards.ts +65 -0
- package/src/utils/validationRules.ts +88 -0
- package/src/utils/versionDetection.ts +292 -0
- package/src/utils/yamlConverter.ts +542 -0
- package/src/utils/yamlLoader.ts +371 -0
- package/src/utilsController.ts +1203 -0
- package/tests/README.md +497 -0
- package/tests/adapters/AdapterFactory.test.ts +277 -0
- package/tests/integration/syncOperations.test.ts +463 -0
- package/tests/jest.config.js +25 -0
- package/tests/migration/configMigration.test.ts +546 -0
- package/tests/setup.ts +62 -0
- package/tests/testUtils.ts +340 -0
- package/tests/utils/loadConfigs.test.ts +350 -0
- package/tests/validation/configValidation.test.ts +412 -0
- package/tsconfig.json +44 -0
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import inquirer from "inquirer";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { MessageFormatter } from "./messageFormatter.js";
|
|
4
|
+
export class ConfirmationDialogs {
|
|
5
|
+
/**
|
|
6
|
+
* Shows a confirmation dialog for destructive operations
|
|
7
|
+
*/
|
|
8
|
+
static async confirmDestructiveOperation(options) {
|
|
9
|
+
if (options.skipConfirmation) {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
MessageFormatter.warning(`You are about to perform a destructive operation:`, { skipLogging: true });
|
|
13
|
+
MessageFormatter.error(`Operation: ${options.operation}`, undefined, { skipLogging: true });
|
|
14
|
+
MessageFormatter.warning(`Targets: ${options.targets.join(", ")}`, { skipLogging: true });
|
|
15
|
+
if (options.consequences && options.consequences.length > 0) {
|
|
16
|
+
MessageFormatter.error("This will:", undefined, { skipLogging: true });
|
|
17
|
+
options.consequences.forEach(consequence => {
|
|
18
|
+
MessageFormatter.error(` • ${consequence}`, undefined, { skipLogging: true });
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
MessageFormatter.error("⚠️ THIS ACTION CANNOT BE UNDONE!", undefined, { skipLogging: true });
|
|
22
|
+
if (options.requireExplicitConfirmation && options.confirmationText) {
|
|
23
|
+
const { confirmation } = await inquirer.prompt([{
|
|
24
|
+
type: 'input',
|
|
25
|
+
name: 'confirmation',
|
|
26
|
+
message: chalk.red(`Type "${options.confirmationText}" to confirm:`),
|
|
27
|
+
validate: (input) => {
|
|
28
|
+
return input === options.confirmationText ||
|
|
29
|
+
chalk.red(`Please type exactly: ${options.confirmationText}`);
|
|
30
|
+
}
|
|
31
|
+
}]);
|
|
32
|
+
return confirmation === options.confirmationText;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
const { confirmed } = await inquirer.prompt([{
|
|
36
|
+
type: 'confirm',
|
|
37
|
+
name: 'confirmed',
|
|
38
|
+
message: chalk.red('Are you absolutely sure you want to continue?'),
|
|
39
|
+
default: false
|
|
40
|
+
}]);
|
|
41
|
+
return confirmed;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Prompts user about creating a backup before a destructive operation
|
|
46
|
+
*/
|
|
47
|
+
static async promptForBackup(options) {
|
|
48
|
+
const message = options.backupMessage ||
|
|
49
|
+
`Create a backup before performing ${options.operation} on: ${options.targets.join(", ")}?`;
|
|
50
|
+
MessageFormatter.info("🛡️ Backup Recommendation", { skipLogging: true });
|
|
51
|
+
if (options.recommendBackup !== false) {
|
|
52
|
+
MessageFormatter.warning("It's strongly recommended to create a backup before proceeding.", { skipLogging: true });
|
|
53
|
+
}
|
|
54
|
+
const { choice } = await inquirer.prompt([{
|
|
55
|
+
type: 'list',
|
|
56
|
+
name: 'choice',
|
|
57
|
+
message,
|
|
58
|
+
choices: [
|
|
59
|
+
{ name: '🛡️ Yes, create backup first', value: 'yes' },
|
|
60
|
+
{ name: '⚠️ No, proceed without backup', value: 'no' },
|
|
61
|
+
{ name: '❌ Cancel operation', value: 'skip' }
|
|
62
|
+
],
|
|
63
|
+
default: 'yes'
|
|
64
|
+
}]);
|
|
65
|
+
return choice;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Shows a final confirmation before proceeding with an operation
|
|
69
|
+
*/
|
|
70
|
+
static async finalConfirmation(operation, details) {
|
|
71
|
+
MessageFormatter.success(`Ready to perform: ${operation}`, { skipLogging: true });
|
|
72
|
+
if (details && details.length > 0) {
|
|
73
|
+
MessageFormatter.debug("Details:", undefined, { skipLogging: true });
|
|
74
|
+
details.forEach(detail => {
|
|
75
|
+
MessageFormatter.debug(` • ${detail}`, undefined, { skipLogging: true });
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
const { proceed } = await inquirer.prompt([{
|
|
79
|
+
type: 'confirm',
|
|
80
|
+
name: 'proceed',
|
|
81
|
+
message: 'Proceed with this operation?',
|
|
82
|
+
default: true
|
|
83
|
+
}]);
|
|
84
|
+
return proceed;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Specialized confirmation for database wiping
|
|
88
|
+
*/
|
|
89
|
+
static async confirmDatabaseWipe(databaseNames, options = {}) {
|
|
90
|
+
const consequences = [
|
|
91
|
+
"Delete all documents in the specified databases",
|
|
92
|
+
"Remove all collections and their data",
|
|
93
|
+
];
|
|
94
|
+
if (options.includeStorage) {
|
|
95
|
+
consequences.push("Delete all files in associated storage buckets");
|
|
96
|
+
}
|
|
97
|
+
if (options.includeUsers) {
|
|
98
|
+
consequences.push("Delete all user accounts");
|
|
99
|
+
}
|
|
100
|
+
return this.confirmDestructiveOperation({
|
|
101
|
+
operation: "Database Wipe",
|
|
102
|
+
targets: databaseNames,
|
|
103
|
+
consequences,
|
|
104
|
+
requireExplicitConfirmation: true,
|
|
105
|
+
confirmationText: "DELETE ALL DATA",
|
|
106
|
+
skipConfirmation: options.skipConfirmation,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Specialized confirmation for collection wiping
|
|
111
|
+
*/
|
|
112
|
+
static async confirmCollectionWipe(databaseName, collectionNames, options = {}) {
|
|
113
|
+
return this.confirmDestructiveOperation({
|
|
114
|
+
operation: "Collection Wipe",
|
|
115
|
+
targets: collectionNames.map(name => `${databaseName}.${name}`),
|
|
116
|
+
consequences: [
|
|
117
|
+
"Delete all documents in the specified collections",
|
|
118
|
+
"Keep the collection structure intact",
|
|
119
|
+
],
|
|
120
|
+
requireExplicitConfirmation: collectionNames.length > 5,
|
|
121
|
+
confirmationText: "DELETE DOCUMENTS",
|
|
122
|
+
skipConfirmation: options.skipConfirmation,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Specialized confirmation for function deployment
|
|
127
|
+
*/
|
|
128
|
+
static async confirmFunctionDeployment(functionNames, options = {}) {
|
|
129
|
+
if (options.skipConfirmation) {
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
const consequences = ["Replace existing function code"];
|
|
133
|
+
if (options.isProduction) {
|
|
134
|
+
consequences.push("Affect production environment");
|
|
135
|
+
}
|
|
136
|
+
if (options.hasBreakingChanges) {
|
|
137
|
+
consequences.push("Potentially break existing integrations");
|
|
138
|
+
}
|
|
139
|
+
return this.confirmDestructiveOperation({
|
|
140
|
+
operation: "Function Deployment",
|
|
141
|
+
targets: functionNames,
|
|
142
|
+
consequences: consequences.length > 1 ? consequences : undefined,
|
|
143
|
+
requireExplicitConfirmation: options.isProduction || options.hasBreakingChanges,
|
|
144
|
+
confirmationText: options.isProduction ? "DEPLOY TO PRODUCTION" : "DEPLOY",
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Shows operation summary and asks for final confirmation
|
|
149
|
+
*/
|
|
150
|
+
static async showOperationSummary(title, summary, options = {}) {
|
|
151
|
+
MessageFormatter.section(`${title} Summary`);
|
|
152
|
+
Object.entries(summary).forEach(([key, value]) => {
|
|
153
|
+
const formattedKey = key.replace(/([A-Z])/g, ' $1').replace(/^./, str => str.toUpperCase());
|
|
154
|
+
if (Array.isArray(value)) {
|
|
155
|
+
MessageFormatter.info(`● ${formattedKey}:`, { skipLogging: true });
|
|
156
|
+
value.forEach(item => {
|
|
157
|
+
MessageFormatter.debug(` • ${item}`, undefined, { skipLogging: true });
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
MessageFormatter.info(`● ${formattedKey}: ${String(value)}`, { skipLogging: true });
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
if (options.warningMessage) {
|
|
165
|
+
MessageFormatter.warning(`⚠️ ${options.warningMessage}`, { skipLogging: true });
|
|
166
|
+
}
|
|
167
|
+
if (options.confirmationRequired !== false) {
|
|
168
|
+
const { confirmed } = await inquirer.prompt([{
|
|
169
|
+
type: 'confirm',
|
|
170
|
+
name: 'confirmed',
|
|
171
|
+
message: 'Continue with this operation?',
|
|
172
|
+
default: true
|
|
173
|
+
}]);
|
|
174
|
+
return confirmed;
|
|
175
|
+
}
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Interactive selection with confirmation
|
|
180
|
+
*/
|
|
181
|
+
static async selectWithConfirmation(items, options) {
|
|
182
|
+
const choices = items.map((item, index) => ({
|
|
183
|
+
name: options.displayProperty ? String(item[options.displayProperty]) : String(item),
|
|
184
|
+
value: item,
|
|
185
|
+
}));
|
|
186
|
+
const prompt = options.multiSelect ? 'checkbox' : 'list';
|
|
187
|
+
const { selection } = await inquirer.prompt([{
|
|
188
|
+
type: prompt,
|
|
189
|
+
name: 'selection',
|
|
190
|
+
message: options.message,
|
|
191
|
+
choices,
|
|
192
|
+
validate: options.validator ? (input) => {
|
|
193
|
+
const result = options.validator(Array.isArray(input) ? input : [input]);
|
|
194
|
+
return result;
|
|
195
|
+
} : undefined,
|
|
196
|
+
}]);
|
|
197
|
+
const selectedItems = Array.isArray(selection) ? selection : [selection];
|
|
198
|
+
if (options.confirmMessage) {
|
|
199
|
+
const confirmMessage = options.confirmMessage.replace('{count}', selectedItems.length.toString());
|
|
200
|
+
const { confirmed } = await inquirer.prompt([{
|
|
201
|
+
type: 'confirm',
|
|
202
|
+
name: 'confirmed',
|
|
203
|
+
message: confirmMessage,
|
|
204
|
+
default: true
|
|
205
|
+
}]);
|
|
206
|
+
if (!confirmed) {
|
|
207
|
+
return [];
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return selectedItems;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Confirms overwriting an existing file or directory
|
|
214
|
+
*/
|
|
215
|
+
static async confirmOverwrite(target) {
|
|
216
|
+
const { confirmed } = await inquirer.prompt([{
|
|
217
|
+
type: 'confirm',
|
|
218
|
+
name: 'confirmed',
|
|
219
|
+
message: chalk.yellow(`${target} already exists. Overwrite?`),
|
|
220
|
+
default: false
|
|
221
|
+
}]);
|
|
222
|
+
return confirmed;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Confirms removal of a file
|
|
226
|
+
*/
|
|
227
|
+
static async confirmRemoval(target) {
|
|
228
|
+
const { confirmed } = await inquirer.prompt([{
|
|
229
|
+
type: 'confirm',
|
|
230
|
+
name: 'confirmed',
|
|
231
|
+
message: chalk.red(target),
|
|
232
|
+
default: false
|
|
233
|
+
}]);
|
|
234
|
+
return confirmed;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared error handling utilities for consistent error processing
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Extracts error message from unknown error type
|
|
6
|
+
* @param error - Error of unknown type
|
|
7
|
+
* @returns String error message
|
|
8
|
+
*/
|
|
9
|
+
export declare function getErrorMessage(error: unknown): string;
|
|
10
|
+
/**
|
|
11
|
+
* Normalizes unknown error to Error instance
|
|
12
|
+
* @param error - Error of unknown type
|
|
13
|
+
* @returns Normalized Error object
|
|
14
|
+
*/
|
|
15
|
+
export declare function normalizeError(error: unknown): Error;
|
|
16
|
+
/**
|
|
17
|
+
* Checks if error is a conflict error (409)
|
|
18
|
+
* @param error - Error object to check
|
|
19
|
+
* @returns True if error is a conflict (duplicate resource)
|
|
20
|
+
*/
|
|
21
|
+
export declare function isConflictError(error: any): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Checks if error is a Cloudflare error (522)
|
|
24
|
+
* @param error - Error object to check
|
|
25
|
+
* @returns True if error is from Cloudflare connection timeout
|
|
26
|
+
*/
|
|
27
|
+
export declare function isCloudflareError(error: any): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Checks if error is authentication/authorization related
|
|
30
|
+
* @param error - Error object to check
|
|
31
|
+
* @returns True if error is auth-related (401, 403)
|
|
32
|
+
*/
|
|
33
|
+
export declare function isAuthError(error: any): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Error categorization helpers for smart fallback logic
|
|
36
|
+
*/
|
|
37
|
+
/**
|
|
38
|
+
* Checks if an error is retryable (network issues, rate limits, etc.)
|
|
39
|
+
* @param errorMessage - Error message to check
|
|
40
|
+
* @returns True if error is retryable
|
|
41
|
+
*/
|
|
42
|
+
export declare function isRetryableError(errorMessage: string): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Checks if an error indicates bulk operations are not supported
|
|
45
|
+
* @param errorMessage - Error message to check
|
|
46
|
+
* @returns True if bulk operations not supported
|
|
47
|
+
*/
|
|
48
|
+
export declare function isBulkNotSupportedError(errorMessage: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Checks if an error is critical (authentication, authorization, permissions)
|
|
51
|
+
* @param errorMessage - Error message to check
|
|
52
|
+
* @returns True if error is critical
|
|
53
|
+
*/
|
|
54
|
+
export declare function isCriticalError(errorMessage: string): boolean;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared error handling utilities for consistent error processing
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Extracts error message from unknown error type
|
|
6
|
+
* @param error - Error of unknown type
|
|
7
|
+
* @returns String error message
|
|
8
|
+
*/
|
|
9
|
+
export function getErrorMessage(error) {
|
|
10
|
+
return error instanceof Error ? error.message : String(error);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Normalizes unknown error to Error instance
|
|
14
|
+
* @param error - Error of unknown type
|
|
15
|
+
* @returns Normalized Error object
|
|
16
|
+
*/
|
|
17
|
+
export function normalizeError(error) {
|
|
18
|
+
return error instanceof Error ? error : new Error(String(error));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Checks if error is a conflict error (409)
|
|
22
|
+
* @param error - Error object to check
|
|
23
|
+
* @returns True if error is a conflict (duplicate resource)
|
|
24
|
+
*/
|
|
25
|
+
export function isConflictError(error) {
|
|
26
|
+
return error?.code === 409 || (error?.message?.toLowerCase().includes('already exists') ?? false);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Checks if error is a Cloudflare error (522)
|
|
30
|
+
* @param error - Error object to check
|
|
31
|
+
* @returns True if error is from Cloudflare connection timeout
|
|
32
|
+
*/
|
|
33
|
+
export function isCloudflareError(error) {
|
|
34
|
+
return error?.code === 522 || error?.code === "522";
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Checks if error is authentication/authorization related
|
|
38
|
+
* @param error - Error object to check
|
|
39
|
+
* @returns True if error is auth-related (401, 403)
|
|
40
|
+
*/
|
|
41
|
+
export function isAuthError(error) {
|
|
42
|
+
const code = error?.code;
|
|
43
|
+
return code === 401 || code === 403 || code === "401" || code === "403";
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Error categorization helpers for smart fallback logic
|
|
47
|
+
*/
|
|
48
|
+
/**
|
|
49
|
+
* Checks if an error is retryable (network issues, rate limits, etc.)
|
|
50
|
+
* @param errorMessage - Error message to check
|
|
51
|
+
* @returns True if error is retryable
|
|
52
|
+
*/
|
|
53
|
+
export function isRetryableError(errorMessage) {
|
|
54
|
+
const retryableErrors = [
|
|
55
|
+
"rate limit",
|
|
56
|
+
"timeout",
|
|
57
|
+
"network",
|
|
58
|
+
"temporary",
|
|
59
|
+
"503",
|
|
60
|
+
"502",
|
|
61
|
+
"429"
|
|
62
|
+
];
|
|
63
|
+
return retryableErrors.some(error => errorMessage.toLowerCase().includes(error));
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Checks if an error indicates bulk operations are not supported
|
|
67
|
+
* @param errorMessage - Error message to check
|
|
68
|
+
* @returns True if bulk operations not supported
|
|
69
|
+
*/
|
|
70
|
+
export function isBulkNotSupportedError(errorMessage) {
|
|
71
|
+
const notSupportedErrors = [
|
|
72
|
+
"method not found",
|
|
73
|
+
"not implemented",
|
|
74
|
+
"unsupported",
|
|
75
|
+
"not available",
|
|
76
|
+
"404"
|
|
77
|
+
];
|
|
78
|
+
return notSupportedErrors.some(error => errorMessage.toLowerCase().includes(error));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Checks if an error is critical (authentication, authorization, permissions)
|
|
82
|
+
* @param errorMessage - Error message to check
|
|
83
|
+
* @returns True if error is critical
|
|
84
|
+
*/
|
|
85
|
+
export function isCriticalError(errorMessage) {
|
|
86
|
+
const criticalErrors = [
|
|
87
|
+
"authentication",
|
|
88
|
+
"authorization",
|
|
89
|
+
"permission",
|
|
90
|
+
"forbidden",
|
|
91
|
+
"401",
|
|
92
|
+
"403"
|
|
93
|
+
];
|
|
94
|
+
return criticalErrors.some(error => errorMessage.toLowerCase().includes(error));
|
|
95
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Client, type Models } from "node-appwrite";
|
|
2
|
+
import { type AppwriteFunction } from "@njdamstra/appwrite-utils";
|
|
3
|
+
export interface FunctionSearchOptions {
|
|
4
|
+
searchPaths?: string[];
|
|
5
|
+
caseSensitive?: boolean;
|
|
6
|
+
allowFuzzyMatch?: boolean;
|
|
7
|
+
verbose?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface FunctionDeploymentOptions {
|
|
10
|
+
activate?: boolean;
|
|
11
|
+
entrypoint?: string;
|
|
12
|
+
commands?: string;
|
|
13
|
+
ignored?: string[];
|
|
14
|
+
verbose?: boolean;
|
|
15
|
+
forceRedeploy?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare class FunctionManager {
|
|
18
|
+
private client;
|
|
19
|
+
private functions;
|
|
20
|
+
constructor(client: Client);
|
|
21
|
+
/**
|
|
22
|
+
* Improved function directory detection with multiple strategies
|
|
23
|
+
*/
|
|
24
|
+
findFunctionDirectory(functionName: string, options?: FunctionSearchOptions): Promise<string | null>;
|
|
25
|
+
private generateNameVariations;
|
|
26
|
+
private getStandardFunctionPaths;
|
|
27
|
+
private recursiveDirectorySearch;
|
|
28
|
+
private shouldSkipDirectory;
|
|
29
|
+
private isValidFunctionDirectory;
|
|
30
|
+
/**
|
|
31
|
+
* Enhanced function deployment with better error handling and validation
|
|
32
|
+
*/
|
|
33
|
+
deployFunction(functionConfig: AppwriteFunction, functionPath: string, options?: FunctionDeploymentOptions): Promise<Models.Deployment>;
|
|
34
|
+
private createFunction;
|
|
35
|
+
private updateFunction;
|
|
36
|
+
private executePredeployCommands;
|
|
37
|
+
private createDeployment;
|
|
38
|
+
getFunction(functionId: string): Promise<Models.Function>;
|
|
39
|
+
listFunctions(): Promise<Models.FunctionList>;
|
|
40
|
+
deleteFunction(functionId: string): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Validate function configuration
|
|
43
|
+
*/
|
|
44
|
+
validateFunctionConfig(functionConfig: AppwriteFunction): {
|
|
45
|
+
valid: boolean;
|
|
46
|
+
errors: string[];
|
|
47
|
+
};
|
|
48
|
+
}
|