s3-cli-js
Version:
A TypeScript-based npm package that replaces AWS CLI for S3 operations using presigned URLs
83 lines • 3.13 kB
JavaScript
;
/**
* 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