@codemarc/blt 1.4.5 → 1.4.6
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 +17 -1
- package/dist/commands/bucket/clear.d.ts +9 -0
- package/dist/commands/bucket/clear.d.ts.map +1 -0
- package/dist/commands/bucket/clear.js +105 -0
- package/dist/commands/bucket/clear.js.map +1 -0
- package/dist/commands/bucket.d.ts.map +1 -1
- package/dist/commands/bucket.js +21 -0
- package/dist/commands/bucket.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -56,7 +56,7 @@ blt deploy schema
|
|
|
56
56
|
| `blt version` | Update, string, sql |
|
|
57
57
|
| `blt build` | Schema (DDL), data (instance) |
|
|
58
58
|
| `blt deploy` | Schema, data, sql file |
|
|
59
|
-
| `blt bucket` | names, list, upload, download, url
|
|
59
|
+
| `blt bucket` | names, list, upload, download, url, clear |
|
|
60
60
|
| `blt show` | schema, counts, env, db, repo |
|
|
61
61
|
| `blt cleanup` | generated, tags |
|
|
62
62
|
|
|
@@ -392,6 +392,22 @@ blt bucket url my-bucket docs/file.pdf --signed --expires-in 7200
|
|
|
392
392
|
- `--signed` — Generate signed URL (default: false)
|
|
393
393
|
- `--expires-in <seconds>` — Signed URL expiry (default: 3600).
|
|
394
394
|
|
|
395
|
+
### `blt bucket clear <bucket-name>`
|
|
396
|
+
|
|
397
|
+
Remove all files from a bucket. Requires `--yes` to confirm. Use `--dry-run` to preview.
|
|
398
|
+
|
|
399
|
+
```bash
|
|
400
|
+
blt bucket clear my-bucket --yes
|
|
401
|
+
blt bucket clear avatars --prefix bae/ --dry-run
|
|
402
|
+
blt bucket clear avatars --prefix bae/ --yes
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
**Options:**
|
|
406
|
+
|
|
407
|
+
- `-p, --prefix <prefix>` — Only clear files under this path prefix
|
|
408
|
+
- `--dry-run` — Show what would be deleted without deleting
|
|
409
|
+
- `-y, --yes` — Skip confirmation prompt (required to actually delete)
|
|
410
|
+
|
|
395
411
|
---
|
|
396
412
|
|
|
397
413
|
## Show Commands
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clear.d.ts","sourceRoot":"","sources":["../../../src/commands/bucket/clear.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAsD5C,wBAAsB,WAAW,CAChC,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,EAC5B,OAAO,EAAE;IACR,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;CACb,EACD,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAyEf"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import debug from "debug";
|
|
2
|
+
import { getSupabaseClient } from "../../utils/supabase";
|
|
3
|
+
const log = debug("blt:bucket");
|
|
4
|
+
const REMOVE_BATCH_SIZE = 1000;
|
|
5
|
+
async function listAllFilePaths(bucketName, prefix) {
|
|
6
|
+
const supabase = getSupabaseClient();
|
|
7
|
+
const paths = [];
|
|
8
|
+
async function listAtPath(currentPrefix) {
|
|
9
|
+
let offset = 0;
|
|
10
|
+
const limit = 1000;
|
|
11
|
+
while (true) {
|
|
12
|
+
const { data, error } = await supabase.storage
|
|
13
|
+
.from(bucketName)
|
|
14
|
+
.list(currentPrefix, {
|
|
15
|
+
limit,
|
|
16
|
+
offset,
|
|
17
|
+
sortBy: { column: "name", order: "asc" },
|
|
18
|
+
});
|
|
19
|
+
if (error) {
|
|
20
|
+
throw error;
|
|
21
|
+
}
|
|
22
|
+
if (!data?.length)
|
|
23
|
+
break;
|
|
24
|
+
for (const item of data) {
|
|
25
|
+
const itemPath = currentPrefix ? `${currentPrefix}/${item.name}` : item.name;
|
|
26
|
+
// Files have id; folder prefixes have id: null
|
|
27
|
+
if (item.id != null) {
|
|
28
|
+
paths.push(itemPath);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
await listAtPath(itemPath);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (data.length < limit)
|
|
35
|
+
break;
|
|
36
|
+
offset += limit;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
await listAtPath(prefix);
|
|
40
|
+
return paths;
|
|
41
|
+
}
|
|
42
|
+
export async function clearBucket(args, options, logger) {
|
|
43
|
+
try {
|
|
44
|
+
const bucketName = args.bucketName;
|
|
45
|
+
const prefix = options.prefix;
|
|
46
|
+
const dryRun = options.dryRun;
|
|
47
|
+
const yes = options.yes;
|
|
48
|
+
log("Clearing bucket: %s", bucketName);
|
|
49
|
+
const supabase = getSupabaseClient();
|
|
50
|
+
// Verify bucket exists
|
|
51
|
+
const { data: buckets, error: listError } = await supabase.storage.listBuckets();
|
|
52
|
+
if (listError) {
|
|
53
|
+
logger.error("Error listing buckets:", listError.message);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
if (!buckets?.some((b) => b.name === bucketName)) {
|
|
57
|
+
logger.error(`Bucket not found: ${bucketName}`);
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
const filePaths = await listAllFilePaths(bucketName, prefix);
|
|
61
|
+
if (filePaths.length === 0) {
|
|
62
|
+
logger.info("No files to clear");
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const scope = prefix ? `prefix "${prefix}"` : "entire bucket";
|
|
66
|
+
logger.info(`Found ${filePaths.length} file(s) in ${scope}`);
|
|
67
|
+
if (dryRun) {
|
|
68
|
+
logger.info("");
|
|
69
|
+
logger.info("DRY RUN - Files that would be deleted:");
|
|
70
|
+
for (const p of filePaths.slice(0, 20)) {
|
|
71
|
+
logger.info(` ${p}`);
|
|
72
|
+
}
|
|
73
|
+
if (filePaths.length > 20) {
|
|
74
|
+
logger.info(` ... and ${filePaths.length - 20} more`);
|
|
75
|
+
}
|
|
76
|
+
logger.info("");
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (!yes) {
|
|
80
|
+
logger.warn(`This will permanently delete ${filePaths.length} file(s).`);
|
|
81
|
+
logger.warn("Run with --yes to confirm.");
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
let deletedCount = 0;
|
|
85
|
+
for (let i = 0; i < filePaths.length; i += REMOVE_BATCH_SIZE) {
|
|
86
|
+
const batch = filePaths.slice(i, i + REMOVE_BATCH_SIZE);
|
|
87
|
+
const { error } = await supabase.storage
|
|
88
|
+
.from(bucketName)
|
|
89
|
+
.remove(batch);
|
|
90
|
+
if (error) {
|
|
91
|
+
logger.error(`Error deleting batch: ${error.message}`);
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
deletedCount += batch.length;
|
|
95
|
+
logger.info(`Deleted ${deletedCount}/${filePaths.length}...`);
|
|
96
|
+
}
|
|
97
|
+
logger.info("");
|
|
98
|
+
logger.info(`Cleared ${deletedCount} file(s)`);
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
logger.error("Error:", error.message);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=clear.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clear.js","sourceRoot":"","sources":["../../../src/commands/bucket/clear.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bucket.d.ts","sourceRoot":"","sources":["../../src/commands/bucket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"bucket.d.ts","sourceRoot":"","sources":["../../src/commands/bucket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAS7C;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAO,EAAE,OAAO,QA4JrD"}
|
package/dist/commands/bucket.js
CHANGED
|
@@ -4,6 +4,7 @@ import { uploadFile } from "./bucket/upload";
|
|
|
4
4
|
import { uploadFolder } from "./bucket/upload-folder";
|
|
5
5
|
import { downloadFile } from "./bucket/download";
|
|
6
6
|
import { getFileUrl } from "./bucket/url";
|
|
7
|
+
import { clearBucket } from "./bucket/clear";
|
|
7
8
|
/**
|
|
8
9
|
* Register bucket commands with the CLI program
|
|
9
10
|
*/
|
|
@@ -22,6 +23,7 @@ Available operations:
|
|
|
22
23
|
upload-folder Upload all files in a folder to a bucket
|
|
23
24
|
download Download a file from a bucket
|
|
24
25
|
url Get public or signed URL for a file
|
|
26
|
+
clear Remove all files from a bucket (or prefix)
|
|
25
27
|
|
|
26
28
|
Run 'blt bucket <operation> --help' for more information on a specific command.
|
|
27
29
|
`;
|
|
@@ -109,6 +111,25 @@ Run 'blt bucket <operation> --help' for more information on a specific command.
|
|
|
109
111
|
.action(async ({ args, logger }) => {
|
|
110
112
|
await downloadFile({ bucketName: args.bucketName, remotePath: args.remotePath, localPath: args.localPath }, logger);
|
|
111
113
|
});
|
|
114
|
+
// Clear all files from a bucket
|
|
115
|
+
program
|
|
116
|
+
.command("bucket clear", "Remove all files from a bucket (or prefix)")
|
|
117
|
+
.hide()
|
|
118
|
+
.argument("<bucket-name>", "Name of the bucket")
|
|
119
|
+
.option("-p, --prefix <prefix>", "Only clear files under this path prefix", {
|
|
120
|
+
default: "",
|
|
121
|
+
})
|
|
122
|
+
.option("--dry-run", "Show what would be deleted without deleting", {
|
|
123
|
+
default: false,
|
|
124
|
+
})
|
|
125
|
+
.option("-y, --yes", "Skip confirmation prompt", { default: false })
|
|
126
|
+
.action(async ({ args, options, logger }) => {
|
|
127
|
+
await clearBucket({ bucketName: args.bucketName }, {
|
|
128
|
+
prefix: options.prefix,
|
|
129
|
+
dryRun: options.dryRun,
|
|
130
|
+
yes: options.yes,
|
|
131
|
+
}, logger);
|
|
132
|
+
});
|
|
112
133
|
// Get public URL for a file
|
|
113
134
|
program
|
|
114
135
|
.command("bucket url", "Get public URL for a file")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bucket.js","sourceRoot":"","sources":["../../src/commands/bucket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"bucket.js","sourceRoot":"","sources":["../../src/commands/bucket.ts"],"names":[],"mappings":"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"}
|