appwrite-utils-cli 1.9.6 → 1.11.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/CONFIG_TODO.md +1189 -1189
- package/README.md +1004 -1004
- package/SELECTION_DIALOGS.md +145 -145
- package/SERVICE_IMPLEMENTATION_REPORT.md +462 -462
- package/package.json +6 -3
- package/scripts/copy-templates.ts +23 -23
- package/src/adapters/index.ts +11 -37
- package/src/backups/operations/bucketBackup.ts +277 -277
- package/src/backups/operations/collectionBackup.ts +310 -310
- package/src/backups/operations/comprehensiveBackup.ts +342 -342
- package/src/backups/schemas/bucketManifest.ts +78 -78
- package/src/backups/schemas/comprehensiveManifest.ts +76 -76
- package/src/backups/tracking/centralizedTracking.ts +352 -352
- package/src/cli/commands/configCommands.ts +265 -201
- package/src/cli/commands/databaseCommands.ts +931 -879
- package/src/cli/commands/functionCommands.ts +333 -332
- package/src/cli/commands/importFileCommands.ts +815 -0
- package/src/cli/commands/schemaCommands.ts +141 -141
- package/src/cli/commands/storageCommands.ts +2 -3
- package/src/cli/commands/transferCommands.ts +454 -457
- package/src/collections/attributes.ts.backup +1555 -1555
- package/src/collections/{attributes.ts → columns.ts} +15 -44
- package/src/collections/indexes.ts +350 -352
- package/src/collections/methods.ts +714 -815
- package/src/collections/tableOperations.ts +57 -21
- package/src/collections/transferOperations.ts +376 -377
- package/src/collections/wipeOperations.ts +449 -346
- package/src/databases/methods.ts +49 -49
- package/src/databases/setup.ts +77 -77
- package/src/examples/yamlTerminologyExample.ts +346 -346
- package/src/functions/deployments.ts +221 -220
- package/src/functions/fnConfigDiscovery.ts +2 -2
- package/src/functions/methods.ts +284 -284
- package/src/functions/templates/count-docs-in-collection/README.md +53 -53
- package/src/functions/templates/count-docs-in-collection/src/main.ts +159 -159
- package/src/functions/templates/count-docs-in-collection/src/request.ts +8 -8
- package/src/functions/templates/hono-typescript/README.md +285 -285
- package/src/functions/templates/hono-typescript/src/adapters/request.ts +73 -73
- package/src/functions/templates/hono-typescript/src/adapters/response.ts +105 -105
- package/src/functions/templates/hono-typescript/src/app.ts +179 -179
- package/src/functions/templates/hono-typescript/src/context.ts +102 -102
- package/src/functions/templates/hono-typescript/src/{index.ts → main.ts} +53 -53
- package/src/functions/templates/hono-typescript/src/middleware/appwrite.ts +118 -118
- package/src/functions/templates/typescript-node/README.md +31 -31
- package/src/functions/templates/typescript-node/src/context.ts +102 -102
- package/src/functions/templates/typescript-node/src/{index.ts → main.ts} +29 -29
- package/src/functions/templates/uv/README.md +30 -30
- package/src/functions/templates/uv/pyproject.toml +29 -29
- package/src/functions/templates/uv/src/context.py +124 -124
- package/src/functions/templates/uv/src/{index.py → main.py} +45 -45
- package/src/init.ts +62 -62
- package/src/interactiveCLI.ts +1095 -1030
- package/src/main.ts +1517 -1670
- package/src/migrations/afterImportActions.ts +579 -580
- package/src/migrations/appwriteToX.ts +634 -630
- package/src/migrations/comprehensiveTransfer.ts +2149 -2149
- package/src/migrations/dataLoader.ts +1729 -1702
- package/src/migrations/importController.ts +440 -428
- package/src/migrations/importDataActions.ts +315 -315
- package/src/migrations/relationships.ts +333 -334
- package/src/migrations/services/DataTransformationService.ts +195 -195
- package/src/migrations/services/FileHandlerService.ts +310 -310
- package/src/migrations/services/ImportOrchestrator.ts +674 -665
- package/src/migrations/services/RateLimitManager.ts +362 -362
- package/src/migrations/services/RelationshipResolver.ts +460 -460
- package/src/migrations/services/UserMappingService.ts +344 -344
- package/src/migrations/services/ValidationService.ts +333 -333
- package/src/migrations/transfer.ts +987 -942
- package/src/migrations/yaml/YamlImportConfigLoader.ts +438 -438
- package/src/migrations/yaml/YamlImportIntegration.ts +438 -438
- package/src/migrations/yaml/generateImportSchemas.ts +1347 -1347
- package/src/schemas/authUser.ts +23 -23
- package/src/setup.ts +8 -8
- package/src/setupCommands.ts +5 -6
- package/src/setupController.ts +42 -42
- package/src/shared/backupMetadataSchema.ts +93 -93
- package/src/shared/backupTracking.ts +211 -211
- package/src/shared/confirmationDialogs.ts +326 -326
- package/src/shared/migrationHelpers.ts +232 -232
- package/src/shared/operationLogger.ts +20 -20
- package/src/shared/operationQueue.ts +326 -327
- package/src/shared/operationsTable.ts +338 -338
- package/src/shared/operationsTableSchema.ts +60 -60
- package/src/shared/progressManager.ts +277 -277
- package/src/shared/relationshipExtractor.ts +214 -214
- package/src/shared/selectionDialogs.ts +775 -722
- package/src/storage/backupCompression.ts +88 -88
- package/src/storage/methods.ts +695 -682
- package/src/storage/schemas.ts +205 -205
- package/src/tables/indexManager.ts +409 -0
- package/src/types/node-appwrite-tablesdb.d.ts +43 -43
- package/src/types.ts +9 -9
- package/src/users/methods.ts +358 -359
- package/src/utils/configMigration.ts +347 -347
- package/src/utils/index.ts +2 -2
- package/src/utils/loadConfigs.ts +457 -449
- package/src/utils/setupFiles.ts +1236 -1238
- package/src/utilsController.ts +1263 -1213
- package/tests/README.md +496 -496
- package/tests/adapters/AdapterFactory.test.ts +276 -276
- package/tests/integration/syncOperations.test.ts +462 -462
- package/tests/jest.config.js +24 -24
- package/tests/migration/configMigration.test.ts +545 -545
- package/tests/setup.ts +61 -61
- package/tests/testUtils.ts +339 -339
- package/tests/utils/loadConfigs.test.ts +349 -349
- package/tests/validation/configValidation.test.ts +411 -411
- package/tsconfig.json +44 -44
- 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/dist/adapters/AdapterFactory.d.ts +0 -94
- package/dist/adapters/AdapterFactory.js +0 -405
- package/dist/adapters/DatabaseAdapter.d.ts +0 -242
- package/dist/adapters/DatabaseAdapter.js +0 -50
- package/dist/adapters/LegacyAdapter.d.ts +0 -50
- package/dist/adapters/LegacyAdapter.js +0 -612
- package/dist/adapters/TablesDBAdapter.d.ts +0 -45
- package/dist/adapters/TablesDBAdapter.js +0 -596
- package/dist/adapters/index.d.ts +0 -11
- package/dist/adapters/index.js +0 -12
- package/dist/backups/operations/bucketBackup.d.ts +0 -19
- package/dist/backups/operations/bucketBackup.js +0 -197
- package/dist/backups/operations/collectionBackup.d.ts +0 -30
- package/dist/backups/operations/collectionBackup.js +0 -201
- package/dist/backups/operations/comprehensiveBackup.d.ts +0 -25
- package/dist/backups/operations/comprehensiveBackup.js +0 -238
- package/dist/backups/schemas/bucketManifest.d.ts +0 -93
- package/dist/backups/schemas/bucketManifest.js +0 -33
- package/dist/backups/schemas/comprehensiveManifest.d.ts +0 -108
- package/dist/backups/schemas/comprehensiveManifest.js +0 -32
- package/dist/backups/tracking/centralizedTracking.d.ts +0 -34
- package/dist/backups/tracking/centralizedTracking.js +0 -274
- package/dist/cli/commands/configCommands.d.ts +0 -8
- package/dist/cli/commands/configCommands.js +0 -166
- package/dist/cli/commands/databaseCommands.d.ts +0 -14
- package/dist/cli/commands/databaseCommands.js +0 -644
- package/dist/cli/commands/functionCommands.d.ts +0 -7
- package/dist/cli/commands/functionCommands.js +0 -330
- package/dist/cli/commands/schemaCommands.d.ts +0 -7
- package/dist/cli/commands/schemaCommands.js +0 -169
- package/dist/cli/commands/storageCommands.d.ts +0 -5
- package/dist/cli/commands/storageCommands.js +0 -143
- package/dist/cli/commands/transferCommands.d.ts +0 -5
- package/dist/cli/commands/transferCommands.js +0 -384
- package/dist/collections/attributes.d.ts +0 -13
- package/dist/collections/attributes.js +0 -1364
- package/dist/collections/indexes.d.ts +0 -12
- package/dist/collections/indexes.js +0 -217
- package/dist/collections/methods.d.ts +0 -19
- package/dist/collections/methods.js +0 -734
- package/dist/collections/tableOperations.d.ts +0 -86
- package/dist/collections/tableOperations.js +0 -434
- package/dist/collections/transferOperations.d.ts +0 -8
- package/dist/collections/transferOperations.js +0 -412
- package/dist/collections/wipeOperations.d.ts +0 -16
- package/dist/collections/wipeOperations.js +0 -233
- package/dist/config/ConfigManager.d.ts +0 -450
- package/dist/config/ConfigManager.js +0 -625
- package/dist/config/configMigration.d.ts +0 -87
- package/dist/config/configMigration.js +0 -390
- package/dist/config/configValidation.d.ts +0 -66
- package/dist/config/configValidation.js +0 -358
- package/dist/config/index.d.ts +0 -8
- package/dist/config/index.js +0 -7
- package/dist/config/services/ConfigDiscoveryService.d.ts +0 -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/databases/methods.d.ts +0 -6
- package/dist/databases/methods.js +0 -35
- package/dist/databases/setup.d.ts +0 -5
- package/dist/databases/setup.js +0 -45
- package/dist/examples/yamlTerminologyExample.d.ts +0 -42
- package/dist/examples/yamlTerminologyExample.js +0 -272
- package/dist/functions/deployments.d.ts +0 -4
- package/dist/functions/deployments.js +0 -146
- package/dist/functions/fnConfigDiscovery.d.ts +0 -3
- package/dist/functions/fnConfigDiscovery.js +0 -108
- package/dist/functions/methods.d.ts +0 -16
- package/dist/functions/methods.js +0 -174
- package/dist/functions/pathResolution.d.ts +0 -37
- package/dist/functions/pathResolution.js +0 -185
- package/dist/functions/templates/count-docs-in-collection/README.md +0 -54
- package/dist/functions/templates/count-docs-in-collection/package.json +0 -25
- package/dist/functions/templates/count-docs-in-collection/src/main.ts +0 -159
- package/dist/functions/templates/count-docs-in-collection/src/request.ts +0 -9
- package/dist/functions/templates/count-docs-in-collection/tsconfig.json +0 -28
- package/dist/functions/templates/hono-typescript/README.md +0 -286
- package/dist/functions/templates/hono-typescript/package.json +0 -26
- package/dist/functions/templates/hono-typescript/src/adapters/request.ts +0 -74
- package/dist/functions/templates/hono-typescript/src/adapters/response.ts +0 -106
- package/dist/functions/templates/hono-typescript/src/app.ts +0 -180
- package/dist/functions/templates/hono-typescript/src/context.ts +0 -103
- package/dist/functions/templates/hono-typescript/src/index.ts +0 -54
- package/dist/functions/templates/hono-typescript/src/middleware/appwrite.ts +0 -119
- package/dist/functions/templates/hono-typescript/tsconfig.json +0 -20
- package/dist/functions/templates/typescript-node/README.md +0 -32
- package/dist/functions/templates/typescript-node/package.json +0 -25
- package/dist/functions/templates/typescript-node/src/context.ts +0 -103
- package/dist/functions/templates/typescript-node/src/index.ts +0 -29
- package/dist/functions/templates/typescript-node/tsconfig.json +0 -28
- package/dist/functions/templates/uv/README.md +0 -31
- package/dist/functions/templates/uv/pyproject.toml +0 -30
- package/dist/functions/templates/uv/src/__init__.py +0 -0
- package/dist/functions/templates/uv/src/context.py +0 -125
- package/dist/functions/templates/uv/src/index.py +0 -46
- package/dist/init.d.ts +0 -2
- package/dist/init.js +0 -57
- package/dist/interactiveCLI.d.ts +0 -31
- package/dist/interactiveCLI.js +0 -898
- package/dist/main.d.ts +0 -2
- package/dist/main.js +0 -1180
- package/dist/migrations/afterImportActions.d.ts +0 -17
- package/dist/migrations/afterImportActions.js +0 -306
- package/dist/migrations/appwriteToX.d.ts +0 -211
- package/dist/migrations/appwriteToX.js +0 -491
- package/dist/migrations/comprehensiveTransfer.d.ts +0 -147
- package/dist/migrations/comprehensiveTransfer.js +0 -1317
- package/dist/migrations/dataLoader.d.ts +0 -753
- package/dist/migrations/dataLoader.js +0 -1250
- package/dist/migrations/importController.d.ts +0 -23
- package/dist/migrations/importController.js +0 -268
- package/dist/migrations/importDataActions.d.ts +0 -50
- package/dist/migrations/importDataActions.js +0 -230
- package/dist/migrations/relationships.d.ts +0 -29
- package/dist/migrations/relationships.js +0 -204
- package/dist/migrations/services/DataTransformationService.d.ts +0 -55
- package/dist/migrations/services/DataTransformationService.js +0 -158
- package/dist/migrations/services/FileHandlerService.d.ts +0 -75
- package/dist/migrations/services/FileHandlerService.js +0 -236
- package/dist/migrations/services/ImportOrchestrator.d.ts +0 -97
- package/dist/migrations/services/ImportOrchestrator.js +0 -485
- package/dist/migrations/services/RateLimitManager.d.ts +0 -138
- package/dist/migrations/services/RateLimitManager.js +0 -279
- package/dist/migrations/services/RelationshipResolver.d.ts +0 -120
- package/dist/migrations/services/RelationshipResolver.js +0 -332
- package/dist/migrations/services/UserMappingService.d.ts +0 -109
- package/dist/migrations/services/UserMappingService.js +0 -277
- package/dist/migrations/services/ValidationService.d.ts +0 -74
- package/dist/migrations/services/ValidationService.js +0 -260
- package/dist/migrations/transfer.d.ts +0 -26
- package/dist/migrations/transfer.js +0 -608
- package/dist/migrations/yaml/YamlImportConfigLoader.d.ts +0 -131
- package/dist/migrations/yaml/YamlImportConfigLoader.js +0 -383
- package/dist/migrations/yaml/YamlImportIntegration.d.ts +0 -93
- package/dist/migrations/yaml/YamlImportIntegration.js +0 -341
- package/dist/migrations/yaml/generateImportSchemas.d.ts +0 -30
- package/dist/migrations/yaml/generateImportSchemas.js +0 -1327
- package/dist/schemas/authUser.d.ts +0 -24
- package/dist/schemas/authUser.js +0 -17
- package/dist/setup.d.ts +0 -2
- package/dist/setup.js +0 -5
- package/dist/setupCommands.d.ts +0 -58
- package/dist/setupCommands.js +0 -490
- package/dist/setupController.d.ts +0 -9
- package/dist/setupController.js +0 -34
- package/dist/shared/attributeMapper.d.ts +0 -20
- package/dist/shared/attributeMapper.js +0 -203
- package/dist/shared/backupMetadataSchema.d.ts +0 -94
- package/dist/shared/backupMetadataSchema.js +0 -38
- package/dist/shared/backupTracking.d.ts +0 -18
- package/dist/shared/backupTracking.js +0 -176
- package/dist/shared/confirmationDialogs.d.ts +0 -75
- package/dist/shared/confirmationDialogs.js +0 -236
- 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/indexManager.d.ts +0 -24
- package/dist/shared/indexManager.js +0 -151
- package/dist/shared/jsonSchemaGenerator.d.ts +0 -50
- package/dist/shared/jsonSchemaGenerator.js +0 -290
- package/dist/shared/logging.d.ts +0 -61
- package/dist/shared/logging.js +0 -116
- package/dist/shared/messageFormatter.d.ts +0 -39
- package/dist/shared/messageFormatter.js +0 -162
- package/dist/shared/migrationHelpers.d.ts +0 -61
- package/dist/shared/migrationHelpers.js +0 -145
- package/dist/shared/operationLogger.d.ts +0 -10
- package/dist/shared/operationLogger.js +0 -12
- package/dist/shared/operationQueue.d.ts +0 -40
- package/dist/shared/operationQueue.js +0 -311
- package/dist/shared/operationsTable.d.ts +0 -26
- package/dist/shared/operationsTable.js +0 -286
- package/dist/shared/operationsTableSchema.d.ts +0 -48
- package/dist/shared/operationsTableSchema.js +0 -35
- package/dist/shared/progressManager.d.ts +0 -62
- package/dist/shared/progressManager.js +0 -215
- package/dist/shared/pydanticModelGenerator.d.ts +0 -17
- package/dist/shared/pydanticModelGenerator.js +0 -615
- package/dist/shared/relationshipExtractor.d.ts +0 -56
- package/dist/shared/relationshipExtractor.js +0 -138
- package/dist/shared/schemaGenerator.d.ts +0 -40
- package/dist/shared/schemaGenerator.js +0 -556
- package/dist/shared/selectionDialogs.d.ts +0 -214
- package/dist/shared/selectionDialogs.js +0 -544
- package/dist/storage/backupCompression.d.ts +0 -20
- package/dist/storage/backupCompression.js +0 -67
- package/dist/storage/methods.d.ts +0 -32
- package/dist/storage/methods.js +0 -472
- package/dist/storage/schemas.d.ts +0 -842
- package/dist/storage/schemas.js +0 -175
- package/dist/types.d.ts +0 -4
- package/dist/types.js +0 -3
- package/dist/users/methods.d.ts +0 -16
- package/dist/users/methods.js +0 -277
- 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/configMigration.d.ts +0 -1
- package/dist/utils/configMigration.js +0 -261
- 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/index.d.ts +0 -2
- package/dist/utils/index.js +0 -2
- package/dist/utils/loadConfigs.d.ts +0 -50
- package/dist/utils/loadConfigs.js +0 -358
- 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/setupFiles.d.ts +0 -4
- package/dist/utils/setupFiles.js +0 -1192
- 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/dist/utilsController.d.ts +0 -107
- package/dist/utilsController.js +0 -873
- package/src/adapters/AdapterFactory.ts +0 -510
- package/src/adapters/DatabaseAdapter.ts +0 -318
- package/src/adapters/LegacyAdapter.ts +0 -841
- package/src/adapters/TablesDBAdapter.ts +0 -815
- package/src/config/ConfigManager.ts +0 -817
- 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/functions/pathResolution.ts +0 -227
- package/src/functions/templates/count-docs-in-collection/package.json +0 -25
- package/src/functions/templates/count-docs-in-collection/tsconfig.json +0 -28
- package/src/functions/templates/hono-typescript/package.json +0 -26
- package/src/functions/templates/hono-typescript/tsconfig.json +0 -20
- package/src/functions/templates/typescript-node/package.json +0 -25
- package/src/functions/templates/typescript-node/tsconfig.json +0 -28
- package/src/shared/attributeMapper.ts +0 -229
- package/src/shared/errorUtils.ts +0 -110
- package/src/shared/functionManager.ts +0 -537
- package/src/shared/indexManager.ts +0 -254
- package/src/shared/jsonSchemaGenerator.ts +0 -383
- package/src/shared/logging.ts +0 -149
- package/src/shared/messageFormatter.ts +0 -208
- package/src/shared/pydanticModelGenerator.ts +0 -618
- package/src/shared/schemaGenerator.ts +0 -644
- package/src/utils/ClientFactory.ts +0 -240
- package/src/utils/configDiscovery.ts +0 -557
- package/src/utils/constantsGenerator.ts +0 -369
- package/src/utils/dataConverters.ts +0 -159
- package/src/utils/directoryUtils.ts +0 -61
- package/src/utils/getClientFromConfig.ts +0 -257
- package/src/utils/helperFunctions.ts +0 -228
- package/src/utils/pathResolvers.ts +0 -81
- package/src/utils/projectConfig.ts +0 -340
- package/src/utils/retryFailedPromises.ts +0 -29
- package/src/utils/sessionAuth.ts +0 -230
- package/src/utils/typeGuards.ts +0 -65
- package/src/utils/validationRules.ts +0 -88
- package/src/utils/versionDetection.ts +0 -292
- package/src/utils/yamlConverter.ts +0 -542
- package/src/utils/yamlLoader.ts +0 -371
- package/tmp-sync-test/.appwrite/collections/TestCollection.yaml +0 -7
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
[project]
|
|
2
|
-
name = "{{functionName}}"
|
|
3
|
-
version = "0.1.0"
|
|
4
|
-
description = "Appwrite Python function using UV"
|
|
5
|
-
authors = [{name = "Your Name", email = "you@example.com"}]
|
|
6
|
-
readme = "README.md"
|
|
7
|
-
requires-python = ">=3.9"
|
|
8
|
-
dependencies = [
|
|
9
|
-
"appwrite>=7.0.1",
|
|
10
|
-
"pydantic>=2.0.0",
|
|
11
|
-
]
|
|
12
|
-
|
|
13
|
-
[build-system]
|
|
14
|
-
requires = ["hatchling"]
|
|
15
|
-
build-backend = "hatchling.build"
|
|
16
|
-
|
|
17
|
-
[tool.uv]
|
|
18
|
-
dev-dependencies = [
|
|
19
|
-
"pytest>=7.0.0",
|
|
20
|
-
"black>=23.0.0",
|
|
21
|
-
"ruff>=0.1.0",
|
|
22
|
-
]
|
|
23
|
-
|
|
24
|
-
[tool.ruff]
|
|
25
|
-
line-length = 88
|
|
26
|
-
target-version = "py39"
|
|
27
|
-
|
|
28
|
-
[tool.ruff.lint]
|
|
29
|
-
select = ["E", "F", "W", "I"]
|
|
1
|
+
[project]
|
|
2
|
+
name = "{{functionName}}"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "Appwrite Python function using UV"
|
|
5
|
+
authors = [{name = "Your Name", email = "you@example.com"}]
|
|
6
|
+
readme = "README.md"
|
|
7
|
+
requires-python = ">=3.9"
|
|
8
|
+
dependencies = [
|
|
9
|
+
"appwrite>=7.0.1",
|
|
10
|
+
"pydantic>=2.0.0",
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
[build-system]
|
|
14
|
+
requires = ["hatchling"]
|
|
15
|
+
build-backend = "hatchling.build"
|
|
16
|
+
|
|
17
|
+
[tool.uv]
|
|
18
|
+
dev-dependencies = [
|
|
19
|
+
"pytest>=7.0.0",
|
|
20
|
+
"black>=23.0.0",
|
|
21
|
+
"ruff>=0.1.0",
|
|
22
|
+
]
|
|
23
|
+
|
|
24
|
+
[tool.ruff]
|
|
25
|
+
line-length = 88
|
|
26
|
+
target-version = "py39"
|
|
27
|
+
|
|
28
|
+
[tool.ruff.lint]
|
|
29
|
+
select = ["E", "F", "W", "I"]
|
|
30
30
|
ignore = ["E501"]
|
|
@@ -1,125 +1,125 @@
|
|
|
1
|
-
from collections.abc import Callable
|
|
2
|
-
from typing import Any, Literal, Protocol
|
|
3
|
-
|
|
4
|
-
from pydantic import BaseModel, Field
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class AppwriteHeaders(BaseModel):
|
|
8
|
-
"""Appwrite request headers"""
|
|
9
|
-
|
|
10
|
-
x_appwrite_trigger: Literal["http", "schedule", "event"] | None = Field(
|
|
11
|
-
None, alias="x-appwrite-trigger"
|
|
12
|
-
)
|
|
13
|
-
x_appwrite_event: str | None = Field(None, alias="x-appwrite-event")
|
|
14
|
-
x_appwrite_key: str | None = Field(None, alias="x-appwrite-key")
|
|
15
|
-
x_appwrite_user_id: str | None = Field(None, alias="x-appwrite-user-id")
|
|
16
|
-
x_appwrite_user_jwt: str | None = Field(None, alias="x-appwrite-user-jwt")
|
|
17
|
-
x_appwrite_country_code: str | None = Field(None, alias="x-appwrite-country-code")
|
|
18
|
-
x_appwrite_continent_code: str | None = Field(
|
|
19
|
-
None, alias="x-appwrite-continent-code"
|
|
20
|
-
)
|
|
21
|
-
x_appwrite_continent_eu: str | None = Field(None, alias="x-appwrite-continent-eu")
|
|
22
|
-
|
|
23
|
-
# Allow additional headers
|
|
24
|
-
model_config = {"extra": "allow", "populate_by_name": True}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class AppwriteEnv(BaseModel):
|
|
28
|
-
"""Appwrite environment variables"""
|
|
29
|
-
|
|
30
|
-
APPWRITE_FUNCTION_API_ENDPOINT: str
|
|
31
|
-
APPWRITE_VERSION: str
|
|
32
|
-
APPWRITE_REGION: str
|
|
33
|
-
APPWRITE_FUNCTION_API_KEY: str | None = None
|
|
34
|
-
APPWRITE_FUNCTION_ID: str
|
|
35
|
-
APPWRITE_FUNCTION_NAME: str
|
|
36
|
-
APPWRITE_FUNCTION_DEPLOYMENT: str
|
|
37
|
-
APPWRITE_FUNCTION_PROJECT_ID: str
|
|
38
|
-
APPWRITE_FUNCTION_RUNTIME_NAME: str
|
|
39
|
-
APPWRITE_FUNCTION_RUNTIME_VERSION: str
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
class AppwriteRequest(Protocol):
|
|
43
|
-
"""Appwrite function request object with proper callable typing"""
|
|
44
|
-
|
|
45
|
-
bodyText: str | None
|
|
46
|
-
bodyJson: dict[str, Any] | str | None
|
|
47
|
-
body: Any
|
|
48
|
-
headers: dict[str, str]
|
|
49
|
-
scheme: Literal["http", "https"] | None
|
|
50
|
-
method: Literal["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD"]
|
|
51
|
-
url: str | None
|
|
52
|
-
host: str | None
|
|
53
|
-
port: int | str | None
|
|
54
|
-
path: str | None
|
|
55
|
-
queryString: str | None
|
|
56
|
-
query: dict[str, str | list[str]] | None
|
|
57
|
-
variables: dict[str, str] | None
|
|
58
|
-
payload: str | None
|
|
59
|
-
|
|
60
|
-
async def text(self) -> str: ...
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
class AppwriteResponse(Protocol):
|
|
64
|
-
"""Appwrite function response object with proper callable typing"""
|
|
65
|
-
|
|
66
|
-
def json(
|
|
67
|
-
self,
|
|
68
|
-
data: Any,
|
|
69
|
-
status: int | None = None,
|
|
70
|
-
headers: dict[str, str] | None = None,
|
|
71
|
-
) -> None: ...
|
|
72
|
-
|
|
73
|
-
def text(
|
|
74
|
-
self,
|
|
75
|
-
body: str,
|
|
76
|
-
status: int | None = None,
|
|
77
|
-
headers: dict[str, str] | None = None,
|
|
78
|
-
) -> None: ...
|
|
79
|
-
|
|
80
|
-
def empty(self) -> None: ...
|
|
81
|
-
|
|
82
|
-
def binary(self, data: bytes) -> None: ...
|
|
83
|
-
|
|
84
|
-
def redirect(self, url: str, status: int | None = None) -> None: ...
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
class AppwriteContext(Protocol):
|
|
88
|
-
"""Complete Appwrite function context with proper typing"""
|
|
89
|
-
|
|
90
|
-
req: AppwriteRequest
|
|
91
|
-
res: AppwriteResponse
|
|
92
|
-
|
|
93
|
-
def log(self, message: str) -> None: ...
|
|
94
|
-
|
|
95
|
-
def error(self, message: str) -> None: ...
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
# Alternative: BaseModel version for cases where you need Pydantic features
|
|
99
|
-
# but want proper typing hints
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
class AppwriteRequestModel(BaseModel):
|
|
103
|
-
"""Pydantic model for request validation (if needed)"""
|
|
104
|
-
|
|
105
|
-
bodyText: str | None = None
|
|
106
|
-
bodyJson: dict[str, Any] | str | None = None
|
|
107
|
-
body: Any = None
|
|
108
|
-
headers: dict[str, str] = Field(default_factory=dict)
|
|
109
|
-
scheme: Literal["http", "https"] | None = None
|
|
110
|
-
method: Literal["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD"]
|
|
111
|
-
url: str | None = None
|
|
112
|
-
host: str | None = None
|
|
113
|
-
port: int | str | None = None
|
|
114
|
-
path: str | None = None
|
|
115
|
-
queryString: str | None = None
|
|
116
|
-
query: dict[str, str | list[str]] | None = None
|
|
117
|
-
variables: dict[str, str] | None = None
|
|
118
|
-
payload: str | None = None
|
|
119
|
-
|
|
120
|
-
model_config = {"arbitrary_types_allowed": True}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
# Type alias for the log/error functions
|
|
124
|
-
LogFunction = Callable[[str], None]
|
|
1
|
+
from collections.abc import Callable
|
|
2
|
+
from typing import Any, Literal, Protocol
|
|
3
|
+
|
|
4
|
+
from pydantic import BaseModel, Field
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class AppwriteHeaders(BaseModel):
|
|
8
|
+
"""Appwrite request headers"""
|
|
9
|
+
|
|
10
|
+
x_appwrite_trigger: Literal["http", "schedule", "event"] | None = Field(
|
|
11
|
+
None, alias="x-appwrite-trigger"
|
|
12
|
+
)
|
|
13
|
+
x_appwrite_event: str | None = Field(None, alias="x-appwrite-event")
|
|
14
|
+
x_appwrite_key: str | None = Field(None, alias="x-appwrite-key")
|
|
15
|
+
x_appwrite_user_id: str | None = Field(None, alias="x-appwrite-user-id")
|
|
16
|
+
x_appwrite_user_jwt: str | None = Field(None, alias="x-appwrite-user-jwt")
|
|
17
|
+
x_appwrite_country_code: str | None = Field(None, alias="x-appwrite-country-code")
|
|
18
|
+
x_appwrite_continent_code: str | None = Field(
|
|
19
|
+
None, alias="x-appwrite-continent-code"
|
|
20
|
+
)
|
|
21
|
+
x_appwrite_continent_eu: str | None = Field(None, alias="x-appwrite-continent-eu")
|
|
22
|
+
|
|
23
|
+
# Allow additional headers
|
|
24
|
+
model_config = {"extra": "allow", "populate_by_name": True}
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class AppwriteEnv(BaseModel):
|
|
28
|
+
"""Appwrite environment variables"""
|
|
29
|
+
|
|
30
|
+
APPWRITE_FUNCTION_API_ENDPOINT: str
|
|
31
|
+
APPWRITE_VERSION: str
|
|
32
|
+
APPWRITE_REGION: str
|
|
33
|
+
APPWRITE_FUNCTION_API_KEY: str | None = None
|
|
34
|
+
APPWRITE_FUNCTION_ID: str
|
|
35
|
+
APPWRITE_FUNCTION_NAME: str
|
|
36
|
+
APPWRITE_FUNCTION_DEPLOYMENT: str
|
|
37
|
+
APPWRITE_FUNCTION_PROJECT_ID: str
|
|
38
|
+
APPWRITE_FUNCTION_RUNTIME_NAME: str
|
|
39
|
+
APPWRITE_FUNCTION_RUNTIME_VERSION: str
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class AppwriteRequest(Protocol):
|
|
43
|
+
"""Appwrite function request object with proper callable typing"""
|
|
44
|
+
|
|
45
|
+
bodyText: str | None
|
|
46
|
+
bodyJson: dict[str, Any] | str | None
|
|
47
|
+
body: Any
|
|
48
|
+
headers: dict[str, str]
|
|
49
|
+
scheme: Literal["http", "https"] | None
|
|
50
|
+
method: Literal["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD"]
|
|
51
|
+
url: str | None
|
|
52
|
+
host: str | None
|
|
53
|
+
port: int | str | None
|
|
54
|
+
path: str | None
|
|
55
|
+
queryString: str | None
|
|
56
|
+
query: dict[str, str | list[str]] | None
|
|
57
|
+
variables: dict[str, str] | None
|
|
58
|
+
payload: str | None
|
|
59
|
+
|
|
60
|
+
async def text(self) -> str: ...
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class AppwriteResponse(Protocol):
|
|
64
|
+
"""Appwrite function response object with proper callable typing"""
|
|
65
|
+
|
|
66
|
+
def json(
|
|
67
|
+
self,
|
|
68
|
+
data: Any,
|
|
69
|
+
status: int | None = None,
|
|
70
|
+
headers: dict[str, str] | None = None,
|
|
71
|
+
) -> None: ...
|
|
72
|
+
|
|
73
|
+
def text(
|
|
74
|
+
self,
|
|
75
|
+
body: str,
|
|
76
|
+
status: int | None = None,
|
|
77
|
+
headers: dict[str, str] | None = None,
|
|
78
|
+
) -> None: ...
|
|
79
|
+
|
|
80
|
+
def empty(self) -> None: ...
|
|
81
|
+
|
|
82
|
+
def binary(self, data: bytes) -> None: ...
|
|
83
|
+
|
|
84
|
+
def redirect(self, url: str, status: int | None = None) -> None: ...
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
class AppwriteContext(Protocol):
|
|
88
|
+
"""Complete Appwrite function context with proper typing"""
|
|
89
|
+
|
|
90
|
+
req: AppwriteRequest
|
|
91
|
+
res: AppwriteResponse
|
|
92
|
+
|
|
93
|
+
def log(self, message: str) -> None: ...
|
|
94
|
+
|
|
95
|
+
def error(self, message: str) -> None: ...
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
# Alternative: BaseModel version for cases where you need Pydantic features
|
|
99
|
+
# but want proper typing hints
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
class AppwriteRequestModel(BaseModel):
|
|
103
|
+
"""Pydantic model for request validation (if needed)"""
|
|
104
|
+
|
|
105
|
+
bodyText: str | None = None
|
|
106
|
+
bodyJson: dict[str, Any] | str | None = None
|
|
107
|
+
body: Any = None
|
|
108
|
+
headers: dict[str, str] = Field(default_factory=dict)
|
|
109
|
+
scheme: Literal["http", "https"] | None = None
|
|
110
|
+
method: Literal["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD"]
|
|
111
|
+
url: str | None = None
|
|
112
|
+
host: str | None = None
|
|
113
|
+
port: int | str | None = None
|
|
114
|
+
path: str | None = None
|
|
115
|
+
queryString: str | None = None
|
|
116
|
+
query: dict[str, str | list[str]] | None = None
|
|
117
|
+
variables: dict[str, str] | None = None
|
|
118
|
+
payload: str | None = None
|
|
119
|
+
|
|
120
|
+
model_config = {"arbitrary_types_allowed": True}
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
# Type alias for the log/error functions
|
|
124
|
+
LogFunction = Callable[[str], None]
|
|
125
125
|
ErrorFunction = Callable[[str], None]
|
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
import os
|
|
2
|
-
from appwrite.client import Client
|
|
3
|
-
from context import AppwriteContext, AppwriteHeaders, AppwriteRequestModel
|
|
4
|
-
|
|
5
|
-
def main(context: AppwriteContext):
|
|
6
|
-
req = context.req
|
|
7
|
-
res = context.res
|
|
8
|
-
log = context.log
|
|
9
|
-
error = context.error
|
|
10
|
-
|
|
11
|
-
# Optional: Validate request headers using Pydantic
|
|
12
|
-
try:
|
|
13
|
-
headers = AppwriteHeaders.model_validate(req.headers)
|
|
14
|
-
log("Headers validation successful")
|
|
15
|
-
except Exception as validation_error:
|
|
16
|
-
error(f"Headers validation failed: {validation_error}")
|
|
17
|
-
|
|
18
|
-
# Optional: Validate full request using Pydantic model
|
|
19
|
-
try:
|
|
20
|
-
request_model = AppwriteRequestModel.model_validate({
|
|
21
|
-
'method': req.method,
|
|
22
|
-
'headers': req.headers,
|
|
23
|
-
'path': req.path,
|
|
24
|
-
'url': req.url,
|
|
25
|
-
'body': req.body,
|
|
26
|
-
'bodyText': req.bodyText,
|
|
27
|
-
'bodyJson': req.bodyJson
|
|
28
|
-
})
|
|
29
|
-
log("Request validation successful")
|
|
30
|
-
except Exception as validation_error:
|
|
31
|
-
error(f"Request validation failed: {validation_error}")
|
|
32
|
-
|
|
33
|
-
client = Client()
|
|
34
|
-
client.set_endpoint(os.getenv('APPWRITE_FUNCTION_ENDPOINT'))
|
|
35
|
-
client.set_project(os.getenv('APPWRITE_FUNCTION_PROJECT_ID'))
|
|
36
|
-
client.set_key(os.getenv('APPWRITE_FUNCTION_API_KEY'))
|
|
37
|
-
|
|
38
|
-
log(f"Processing {req.method} request to {req.path}")
|
|
39
|
-
|
|
40
|
-
return res.json({
|
|
41
|
-
'message': 'Hello from Python function!',
|
|
42
|
-
'functionName': '{{functionName}}',
|
|
43
|
-
'method': req.method,
|
|
44
|
-
'path': req.path,
|
|
45
|
-
'headers': req.headers
|
|
1
|
+
import os
|
|
2
|
+
from appwrite.client import Client
|
|
3
|
+
from context import AppwriteContext, AppwriteHeaders, AppwriteRequestModel
|
|
4
|
+
|
|
5
|
+
def main(context: AppwriteContext):
|
|
6
|
+
req = context.req
|
|
7
|
+
res = context.res
|
|
8
|
+
log = context.log
|
|
9
|
+
error = context.error
|
|
10
|
+
|
|
11
|
+
# Optional: Validate request headers using Pydantic
|
|
12
|
+
try:
|
|
13
|
+
headers = AppwriteHeaders.model_validate(req.headers)
|
|
14
|
+
log("Headers validation successful")
|
|
15
|
+
except Exception as validation_error:
|
|
16
|
+
error(f"Headers validation failed: {validation_error}")
|
|
17
|
+
|
|
18
|
+
# Optional: Validate full request using Pydantic model
|
|
19
|
+
try:
|
|
20
|
+
request_model = AppwriteRequestModel.model_validate({
|
|
21
|
+
'method': req.method,
|
|
22
|
+
'headers': req.headers,
|
|
23
|
+
'path': req.path,
|
|
24
|
+
'url': req.url,
|
|
25
|
+
'body': req.body,
|
|
26
|
+
'bodyText': req.bodyText,
|
|
27
|
+
'bodyJson': req.bodyJson
|
|
28
|
+
})
|
|
29
|
+
log("Request validation successful")
|
|
30
|
+
except Exception as validation_error:
|
|
31
|
+
error(f"Request validation failed: {validation_error}")
|
|
32
|
+
|
|
33
|
+
client = Client()
|
|
34
|
+
client.set_endpoint(os.getenv('APPWRITE_FUNCTION_ENDPOINT'))
|
|
35
|
+
client.set_project(os.getenv('APPWRITE_FUNCTION_PROJECT_ID'))
|
|
36
|
+
client.set_key(os.getenv('APPWRITE_FUNCTION_API_KEY'))
|
|
37
|
+
|
|
38
|
+
log(f"Processing {req.method} request to {req.path}")
|
|
39
|
+
|
|
40
|
+
return res.json({
|
|
41
|
+
'message': 'Hello from Python function!',
|
|
42
|
+
'functionName': '{{functionName}}',
|
|
43
|
+
'method': req.method,
|
|
44
|
+
'path': req.path,
|
|
45
|
+
'headers': req.headers
|
|
46
46
|
})
|
package/src/init.ts
CHANGED
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import inquirer from "inquirer";
|
|
3
|
-
import { createEmptyCollection, setupDirsFiles } from "./utils/setupFiles.js";
|
|
4
|
-
import { MessageFormatter } from "
|
|
5
|
-
|
|
6
|
-
MessageFormatter.banner("Appwrite Utils CLI Tool by Zach Handley", "For more information, visit https://github.com/zachhandley/appwrite-utils");
|
|
7
|
-
|
|
8
|
-
async function main() {
|
|
9
|
-
const answers = await inquirer.prompt([
|
|
10
|
-
{
|
|
11
|
-
type: "list",
|
|
12
|
-
name: "action",
|
|
13
|
-
message: "What would you like to do?",
|
|
14
|
-
choices: [
|
|
15
|
-
"Create collection config file",
|
|
16
|
-
"Create function (not available)",
|
|
17
|
-
"Setup directories and files",
|
|
18
|
-
"Setup directories and files with example data",
|
|
19
|
-
"Exit",
|
|
20
|
-
],
|
|
21
|
-
},
|
|
22
|
-
]);
|
|
23
|
-
|
|
24
|
-
switch (answers.action) {
|
|
25
|
-
case "Create collection config file":
|
|
26
|
-
const { collectionName } = await inquirer.prompt([
|
|
27
|
-
{
|
|
28
|
-
type: "input",
|
|
29
|
-
name: "collectionName",
|
|
30
|
-
message: "Enter the name of the collection:",
|
|
31
|
-
validate: (input) =>
|
|
32
|
-
input.trim() !== "" || "Collection name cannot be empty.",
|
|
33
|
-
},
|
|
34
|
-
]);
|
|
35
|
-
MessageFormatter.progress(`Creating collection config file for '${collectionName}'...`, { prefix: "Init" });
|
|
36
|
-
createEmptyCollection(collectionName);
|
|
37
|
-
break;
|
|
38
|
-
case "Create function (not available)":
|
|
39
|
-
MessageFormatter.warning("This feature is not available yet.", { prefix: "Init" });
|
|
40
|
-
break;
|
|
41
|
-
case "Setup directories and files":
|
|
42
|
-
MessageFormatter.progress("Setting up directories and files...", { prefix: "Init" });
|
|
43
|
-
setupDirsFiles(false); // Assuming false means no example data
|
|
44
|
-
break;
|
|
45
|
-
case "Setup directories and files with example data":
|
|
46
|
-
MessageFormatter.progress("Setting up directories and files with example data...", { prefix: "Init" });
|
|
47
|
-
setupDirsFiles(true); // Assuming false means no example data
|
|
48
|
-
break;
|
|
49
|
-
case "Exit":
|
|
50
|
-
MessageFormatter.info("Exiting...", { prefix: "Init" });
|
|
51
|
-
process.exit(0);
|
|
52
|
-
break;
|
|
53
|
-
default:
|
|
54
|
-
MessageFormatter.warning("Invalid option, please try again.", { prefix: "Init" });
|
|
55
|
-
break;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
main().catch((error) => {
|
|
60
|
-
MessageFormatter.error("An error occurred", error instanceof Error ? error : new Error(String(error)), { prefix: "Init" });
|
|
61
|
-
process.exit(1);
|
|
62
|
-
});
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import inquirer from "inquirer";
|
|
3
|
+
import { createEmptyCollection, setupDirsFiles } from "./utils/setupFiles.js";
|
|
4
|
+
import { MessageFormatter } from "appwrite-utils-helpers";
|
|
5
|
+
|
|
6
|
+
MessageFormatter.banner("Appwrite Utils CLI Tool by Zach Handley", "For more information, visit https://github.com/zachhandley/appwrite-utils");
|
|
7
|
+
|
|
8
|
+
async function main() {
|
|
9
|
+
const answers = await inquirer.prompt([
|
|
10
|
+
{
|
|
11
|
+
type: "list",
|
|
12
|
+
name: "action",
|
|
13
|
+
message: "What would you like to do?",
|
|
14
|
+
choices: [
|
|
15
|
+
"Create collection config file",
|
|
16
|
+
"Create function (not available)",
|
|
17
|
+
"Setup directories and files",
|
|
18
|
+
"Setup directories and files with example data",
|
|
19
|
+
"Exit",
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
]);
|
|
23
|
+
|
|
24
|
+
switch (answers.action) {
|
|
25
|
+
case "Create collection config file":
|
|
26
|
+
const { collectionName } = await inquirer.prompt([
|
|
27
|
+
{
|
|
28
|
+
type: "input",
|
|
29
|
+
name: "collectionName",
|
|
30
|
+
message: "Enter the name of the collection:",
|
|
31
|
+
validate: (input) =>
|
|
32
|
+
input.trim() !== "" || "Collection name cannot be empty.",
|
|
33
|
+
},
|
|
34
|
+
]);
|
|
35
|
+
MessageFormatter.progress(`Creating collection config file for '${collectionName}'...`, { prefix: "Init" });
|
|
36
|
+
createEmptyCollection(collectionName);
|
|
37
|
+
break;
|
|
38
|
+
case "Create function (not available)":
|
|
39
|
+
MessageFormatter.warning("This feature is not available yet.", { prefix: "Init" });
|
|
40
|
+
break;
|
|
41
|
+
case "Setup directories and files":
|
|
42
|
+
MessageFormatter.progress("Setting up directories and files...", { prefix: "Init" });
|
|
43
|
+
setupDirsFiles(false); // Assuming false means no example data
|
|
44
|
+
break;
|
|
45
|
+
case "Setup directories and files with example data":
|
|
46
|
+
MessageFormatter.progress("Setting up directories and files with example data...", { prefix: "Init" });
|
|
47
|
+
setupDirsFiles(true); // Assuming false means no example data
|
|
48
|
+
break;
|
|
49
|
+
case "Exit":
|
|
50
|
+
MessageFormatter.info("Exiting...", { prefix: "Init" });
|
|
51
|
+
process.exit(0);
|
|
52
|
+
break;
|
|
53
|
+
default:
|
|
54
|
+
MessageFormatter.warning("Invalid option, please try again.", { prefix: "Init" });
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
main().catch((error) => {
|
|
60
|
+
MessageFormatter.error("An error occurred", error instanceof Error ? error : new Error(String(error)), { prefix: "Init" });
|
|
61
|
+
process.exit(1);
|
|
62
|
+
});
|