UNPKG

s3-cli-js

Version:

A TypeScript-based npm package that replaces AWS CLI for S3 operations using presigned URLs

83 lines 3.13 kB
"use strict"; /** * Remove bucket command implementation */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.removeBucketCommand = removeBucketCommand; const chalk_1 = __importDefault(require("chalk")); const progress_1 = require("../utils/progress"); /** * Remove an S3 bucket */ async function removeBucketCommand(client, bucketUri, options = {}) { try { if (!(0, progress_1.isS3Uri)(bucketUri)) { throw new Error('Bucket path must be an S3 URI (s3://bucket-name)'); } const { bucket, key } = (0, progress_1.parseS3Uri)(bucketUri); if (key !== '') { throw new Error('Bucket URI should not contain a key path (s3://bucket-name only)'); } // Check if bucket has objects (unless force is used) if (!options.force) { const result = await client.listObjects({ bucket, maxKeys: 1, }); if (result.objects.length > 0) { throw new Error(`Bucket is not empty. Use --force to delete bucket and all its contents, or remove all objects first.`); } } else { // Force delete: remove all objects first console.log(chalk_1.default.yellow(`Force deleting bucket: ${bucket} (removing all objects first)`)); await deleteAllObjects(client, bucket); } console.log(chalk_1.default.blue(`Removing bucket: ${bucket}`)); await client.deleteBucket(bucket); console.log(chalk_1.default.green(`✓ Bucket removed successfully: s3://${bucket}`)); } catch (error) { if (error.name === 'NoSuchBucket') { console.log(chalk_1.default.yellow(`Bucket does not exist: s3://${(0, progress_1.parseS3Uri)(bucketUri).bucket}`)); } else { console.error(chalk_1.default.red(`Error: ${error.message}`)); process.exit(1); } } } /** * Delete all objects in a bucket */ async function deleteAllObjects(client, bucket) { let continuationToken; let totalDeleted = 0; do { const result = await client.listObjects({ bucket, continuationToken, }); if (result.objects.length === 0) { break; } for (const object of result.objects) { try { console.log(chalk_1.default.blue(`delete: s3://${bucket}/${object.key}`)); await client.deleteObject(bucket, object.key); totalDeleted++; } catch (error) { console.error(chalk_1.default.red(`✗ Failed to delete s3://${bucket}/${object.key}: ${error.message}`)); } } continuationToken = result.nextContinuationToken; } while (continuationToken); if (totalDeleted > 0) { console.log(chalk_1.default.green(`✓ Deleted ${totalDeleted} object(s) from bucket`)); } } //# sourceMappingURL=rb.js.map