@codemarc/blt 1.1.0 → 1.2.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.
Files changed (53) hide show
  1. package/README.md +33 -7
  2. package/dist/blt +2 -6
  3. package/dist/blt.d.ts.map +1 -1
  4. package/dist/blt.js.map +1 -1
  5. package/dist/commands/bucket/download.d.ts +7 -0
  6. package/dist/commands/bucket/download.d.ts.map +1 -0
  7. package/dist/commands/bucket/download.js +28 -0
  8. package/dist/commands/bucket/download.js.map +1 -0
  9. package/dist/commands/bucket/list.d.ts +9 -0
  10. package/dist/commands/bucket/list.d.ts.map +1 -0
  11. package/dist/commands/bucket/list.js +69 -0
  12. package/dist/commands/bucket/list.js.map +1 -0
  13. package/dist/commands/bucket/names.d.ts +5 -0
  14. package/dist/commands/bucket/names.d.ts.map +1 -0
  15. package/dist/commands/bucket/names.js +53 -0
  16. package/dist/commands/bucket/names.js.map +1 -0
  17. package/dist/commands/bucket/upload-folder.d.ts +10 -0
  18. package/dist/commands/bucket/upload-folder.d.ts.map +1 -0
  19. package/dist/commands/bucket/upload-folder.js +84 -0
  20. package/dist/commands/bucket/upload-folder.js.map +1 -0
  21. package/dist/commands/bucket/upload.d.ts +9 -0
  22. package/dist/commands/bucket/upload.d.ts.map +1 -0
  23. package/dist/commands/bucket/upload.js +32 -0
  24. package/dist/commands/bucket/upload.js.map +1 -0
  25. package/dist/commands/bucket/url.d.ts +9 -0
  26. package/dist/commands/bucket/url.d.ts.map +1 -0
  27. package/dist/commands/bucket/url.js +32 -0
  28. package/dist/commands/bucket/url.js.map +1 -0
  29. package/dist/commands/bucket/utils.d.ts +3 -0
  30. package/dist/commands/bucket/utils.d.ts.map +1 -0
  31. package/dist/commands/bucket/utils.js +28 -0
  32. package/dist/commands/bucket/utils.js.map +1 -0
  33. package/dist/commands/bucket.d.ts +3 -0
  34. package/dist/commands/bucket.d.ts.map +1 -1
  35. package/dist/commands/bucket.js +53 -325
  36. package/dist/commands/bucket.js.map +1 -1
  37. package/dist/commands/image.js +1 -1
  38. package/dist/commands/image.js.map +1 -1
  39. package/dist/commands/version/sql.d.ts +6 -0
  40. package/dist/commands/version/sql.d.ts.map +1 -0
  41. package/dist/commands/version/sql.js +35 -0
  42. package/dist/commands/version/sql.js.map +1 -0
  43. package/dist/commands/version/string.d.ts +13 -0
  44. package/dist/commands/version/string.d.ts.map +1 -0
  45. package/dist/commands/version/string.js +52 -0
  46. package/dist/commands/version/string.js.map +1 -0
  47. package/dist/commands/version/update.d.ts.map +1 -1
  48. package/dist/commands/version/update.js +26 -2
  49. package/dist/commands/version/update.js.map +1 -1
  50. package/dist/commands/version.d.ts.map +1 -1
  51. package/dist/commands/version.js +23 -1
  52. package/dist/commands/version.js.map +1 -1
  53. package/package.json +2 -1
package/README.md CHANGED
@@ -58,6 +58,8 @@ blt version update
58
58
  ```
59
59
 
60
60
  This command creates or updates a `version.json` file in the current directory with:
61
+ - Build number (generated using `build-number-generator`)
62
+ - Component name (detected from `package.json`)
61
63
  - Component version from `package.json`
62
64
  - Runtime information (Bun/Node version)
63
65
  - Git commit hash and branch
@@ -170,6 +172,7 @@ This command:
170
172
  - Updates existing `version.json` with current information
171
173
  - Works from any directory (uses current working directory)
172
174
  - Detects component name from `package.json`
175
+ - Generates a unique build number for each update
173
176
  - Includes git commit, branch, and build timestamp
174
177
  - Captures runtime and package manager versions
175
178
 
@@ -177,6 +180,7 @@ This command:
177
180
 
178
181
  ```json
179
182
  {
183
+ "buildnum": "260115212",
180
184
  "component": "cli",
181
185
  "version": "1.1.0",
182
186
  "runtime": {
@@ -184,9 +188,9 @@ This command:
184
188
  "version": "1.3.4"
185
189
  },
186
190
  "build": {
187
- "commit": "abc123...",
191
+ "commit": "c79d284f8d2a3df00af85740cc64010587d12b08",
188
192
  "branch": "main",
189
- "time": "2026-01-15T03:52:37.552Z"
193
+ "time": "2026-01-15T12:04:31.662Z"
190
194
  },
191
195
  "metadata": {
192
196
  "packageManager": "bun",
@@ -195,12 +199,26 @@ This command:
195
199
  }
196
200
  ```
197
201
 
202
+ **Version.json Fields:**
203
+
204
+ - `buildnum`: Unique build number generated using `build-number-generator` (e.g., "260115212")
205
+ - `component`: Component name (cli, data, pos, devops, deploy, gateway)
206
+ - `version`: Semantic version from `package.json`
207
+ - `runtime.type`: Runtime type ("bun" or "node")
208
+ - `runtime.version`: Runtime version (e.g., "1.3.4" for Bun, "v25.2.1" for Node)
209
+ - `build.commit`: Full git commit hash
210
+ - `build.branch`: Current git branch name
211
+ - `build.time`: ISO 8601 timestamp of when version.json was updated
212
+ - `metadata.packageManager`: Package manager name ("bun" or "npm")
213
+ - `metadata.packageManagerVersion`: Package manager version
214
+
198
215
  The command automatically detects the component name from your `package.json`:
199
216
  - `@codemarc/blt` or `blt-cli` → `cli`
200
217
  - `blt-core-pos` → `pos`
201
218
  - `blt-core-devops` → `devops`
202
219
  - `data` → `data`
203
220
  - `deploy` → `deploy`
221
+ - `gateway` → `gateway`
204
222
 
205
223
  ## Environment Variables
206
224
 
@@ -251,16 +269,24 @@ bun run src/blt.ts check
251
269
 
252
270
  ### Version Management
253
271
 
254
- The CLI includes a postbuild script that automatically updates `version.json` after each build. You can also manually update version information:
272
+ The CLI includes a postbuild script that automatically updates `version.json` after each build. The build number is automatically generated and incremented on each update.
255
273
 
256
- ```bash
257
- # From the CLI project directory
258
- bun run src/commands/version/update.ts
274
+ You can manually update version information:
259
275
 
260
- # Or using the CLI command (from any directory)
276
+ ```bash
277
+ # From any directory (updates version.json in current directory)
261
278
  blt version update
279
+
280
+ # Or from the CLI project directory, run the script directly
281
+ bun run src/commands/version/update.ts
262
282
  ```
263
283
 
284
+ **Note:** The `blt version update` command works from any directory. It will:
285
+ - Read `package.json` from the current directory
286
+ - Create or update `version.json` in the current directory
287
+ - Use git information from the current directory's repository
288
+ - Generate a new build number for each update
289
+
264
290
  ### Testing
265
291
 
266
292
  ```bash
package/dist/blt CHANGED
@@ -1,13 +1,8 @@
1
1
  #!/usr/bin/env bun
2
2
  import { program } from "@caporal/core";
3
- // import bucketCommand from "./commands/bucket";
4
- // import checkCommand from "./commands/check";
5
- // import cleanupCommand from "./commands/cleanup";
6
- // import dataCommand from "./commands/data";
7
- // import envCommand from "./commands/env";
8
3
  import imageCommand from "./commands/image";
9
4
  import versionCommand from "./commands/version";
10
- // 0import repoCommand from "./commands/repo";
5
+ import bucketCommand from "./commands/bucket";
11
6
  import { join, dirname } from "node:path";
12
7
  import { readFileSync } from "node:fs";
13
8
  import { fileURLToPath } from "node:url";
@@ -23,6 +18,7 @@ program.name("blt")
23
18
  .description("BLT Core Cli");
24
19
  imageCommand(program);
25
20
  versionCommand(program);
21
+ bucketCommand(program);
26
22
  // If no command is provided, show help
27
23
  const args = process.argv.slice(2);
28
24
  if (args.length === 0) {
package/dist/blt.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"blt.d.ts","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AAoBA,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C"}
1
+ {"version":3,"file":"blt.d.ts","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AAcA,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C"}
package/dist/blt.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"blt.js","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,iDAAiD;AACjD,+CAA+C;AAC/C,mDAAmD;AACnD,6CAA6C;AAC7C,2CAA2C;AAC3C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAEhD,8CAA8C;AAE9C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAG,IAAI,EAAE,cAAc,CAAC,CAAC;AAE/D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAGD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;KACjB,OAAO,CAAC,iBAAiB,EAAE,CAAC;KAC5B,WAAW,CAAC,cAAc,CAAC,CAAC;AAE5B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AAE1B,uCAAuC;AACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAGD,OAAO,CAAC,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"blt.js","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAG,IAAI,EAAE,cAAc,CAAC,CAAC;AAE/D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;KACjB,OAAO,CAAC,iBAAiB,EAAE,CAAC;KAC5B,WAAW,CAAC,cAAc,CAAC,CAAC;AAE5B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,aAAa,CAAC,OAAO,CAAC,CAAC;AAEzB,uCAAuC;AACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAGD,OAAO,CAAC,GAAG,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Logger } from "@caporal/core";
2
+ export declare function downloadFile(args: {
3
+ bucketName: string;
4
+ remotePath: string;
5
+ localPath: string;
6
+ }, logger: Logger): Promise<void>;
7
+ //# sourceMappingURL=download.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../src/commands/bucket/download.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAM5C,wBAAsB,YAAY,CACjC,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EACnE,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
@@ -0,0 +1,28 @@
1
+ import debug from "debug";
2
+ import { getSupabaseClient } from "../../utils/supabase";
3
+ const log = debug("blt:bucket");
4
+ export async function downloadFile(args, logger) {
5
+ try {
6
+ log("Downloading file from bucket: %s", args.bucketName);
7
+ const supabase = getSupabaseClient();
8
+ const { data, error } = await supabase.storage
9
+ .from(args.bucketName)
10
+ .download(args.remotePath);
11
+ if (error) {
12
+ logger.error("Error downloading file:", error.message);
13
+ process.exit(1);
14
+ }
15
+ if (!data) {
16
+ logger.error("No data received");
17
+ process.exit(1);
18
+ }
19
+ const buffer = await data.arrayBuffer();
20
+ await Bun.write(args.localPath, buffer);
21
+ logger.info(`Successfully downloaded to: ${args.localPath}`);
22
+ }
23
+ catch (error) {
24
+ logger.error("Error:", error.message);
25
+ process.exit(1);
26
+ }
27
+ }
28
+ //# sourceMappingURL=download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/commands/bucket/download.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;AAEhC,MAAM,CAAC,KAAK,UAAU,YAAY,CACjC,IAAmE,EACnE,MAAc;IAEd,IAAI,CAAC;QACJ,GAAG,CAAC,kCAAkC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;QAErC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO;aAC5C,IAAI,CAAC,IAAI,CAAC,UAAoB,CAAC;aAC/B,QAAQ,CAAC,IAAI,CAAC,UAAoB,CAAC,CAAC;QAEtC,IAAI,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAmB,EAAE,MAAM,CAAC,CAAC;QAElD,MAAM,CAAC,IAAI,CAAC,+BAA+B,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Logger } from "@caporal/core";
2
+ export declare function listBucketFiles(args: {
3
+ bucketName: string;
4
+ }, options: {
5
+ prefix: string;
6
+ limit: number;
7
+ format: string;
8
+ }, logger: Logger): Promise<void>;
9
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/bucket/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAO5C,wBAAsB,eAAe,CACpC,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,EAC5B,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC1D,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAsEf"}
@@ -0,0 +1,69 @@
1
+ import debug from "debug";
2
+ import { getSupabaseClient } from "../../utils/supabase";
3
+ import { formatBytes } from "./utils";
4
+ const log = debug("blt:bucket");
5
+ export async function listBucketFiles(args, options, logger) {
6
+ try {
7
+ log("Listing files in bucket: %s", args.bucketName);
8
+ const supabase = getSupabaseClient();
9
+ const { data, error } = await supabase.storage
10
+ .from(args.bucketName)
11
+ .list(options.prefix, {
12
+ limit: options.limit,
13
+ sortBy: { column: "name", order: "asc" },
14
+ });
15
+ if (error) {
16
+ logger.error("Error listing files:", error.message);
17
+ process.exit(1);
18
+ }
19
+ if (!data || data.length === 0) {
20
+ if (options.format === "json") {
21
+ console.log(JSON.stringify({ files: [], count: 0, totalSize: 0 }, null, 2));
22
+ }
23
+ else {
24
+ logger.info("No files found");
25
+ }
26
+ return;
27
+ }
28
+ const totalSize = data.reduce((acc, file) => acc + (file.metadata?.size || 0), 0);
29
+ if (options.format === "json") {
30
+ const output = {
31
+ bucket: args.bucketName,
32
+ prefix: options.prefix || "/",
33
+ count: data.length,
34
+ totalSize,
35
+ totalSizeFormatted: formatBytes(totalSize),
36
+ files: data.map((file) => ({
37
+ name: file.name,
38
+ id: file.id,
39
+ size: file.metadata?.size || 0,
40
+ sizeFormatted: formatBytes(file.metadata?.size || 0),
41
+ mimetype: file.metadata?.mimetype,
42
+ lastModified: file.metadata?.lastModified,
43
+ createdAt: file.created_at,
44
+ updatedAt: file.updated_at,
45
+ })),
46
+ };
47
+ console.log(JSON.stringify(output, null, 2));
48
+ }
49
+ else {
50
+ logger.info("");
51
+ logger.info(`Found ${data.length} file(s)`);
52
+ logger.info("");
53
+ data.forEach((file) => {
54
+ const size = file.metadata?.size
55
+ ? `(${formatBytes(file.metadata.size)})`
56
+ : "";
57
+ logger.info(`- ${file.name} ${size}`);
58
+ });
59
+ logger.info("");
60
+ logger.info(` Total size: ${formatBytes(totalSize)}`);
61
+ logger.info("");
62
+ }
63
+ }
64
+ catch (error) {
65
+ logger.error("Error:", error.message);
66
+ process.exit(1);
67
+ }
68
+ }
69
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/bucket/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Logger } from "@caporal/core";
2
+ export declare function listBucketNames(options: {
3
+ format: string;
4
+ }, logger: Logger): Promise<void>;
5
+ //# sourceMappingURL=names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../../src/commands/bucket/names.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAM5C,wBAAsB,eAAe,CACpC,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAC3B,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAiDf"}
@@ -0,0 +1,53 @@
1
+ import debug from "debug";
2
+ import { getSupabaseClient } from "../../utils/supabase";
3
+ const log = debug("blt:bucket");
4
+ export async function listBucketNames(options, logger) {
5
+ try {
6
+ log("Listing all buckets");
7
+ const supabase = getSupabaseClient();
8
+ const { data, error } = await supabase.storage.listBuckets();
9
+ if (error) {
10
+ logger.error("Error listing buckets:", error.message);
11
+ process.exit(1);
12
+ }
13
+ if (!data || data.length === 0) {
14
+ if (options.format === "json") {
15
+ console.log(JSON.stringify({ buckets: [], count: 0 }, null, 2));
16
+ }
17
+ else {
18
+ logger.info("No buckets found");
19
+ }
20
+ return;
21
+ }
22
+ if (options.format === "json") {
23
+ const output = {
24
+ count: data.length,
25
+ buckets: data.map((bucket) => ({
26
+ id: bucket.id,
27
+ name: bucket.name,
28
+ public: bucket.public,
29
+ fileSizeLimit: bucket.file_size_limit,
30
+ allowedMimeTypes: bucket.allowed_mime_types,
31
+ createdAt: bucket.created_at,
32
+ updatedAt: bucket.updated_at,
33
+ })),
34
+ };
35
+ console.log(JSON.stringify(output, null, 2));
36
+ }
37
+ else {
38
+ logger.info("");
39
+ logger.info(`Found ${data.length} bucket(s)`);
40
+ logger.info("");
41
+ data.forEach((bucket) => {
42
+ const publicStatus = bucket.public ? "public" : "private";
43
+ logger.info(`- ${bucket.name} (${publicStatus})`);
44
+ });
45
+ logger.info("");
46
+ }
47
+ }
48
+ catch (error) {
49
+ logger.error("Error:", error.message);
50
+ process.exit(1);
51
+ }
52
+ }
53
+ //# sourceMappingURL=names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"names.js","sourceRoot":"","sources":["../../../src/commands/bucket/names.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;AAEhC,MAAM,CAAC,KAAK,UAAU,eAAe,CACpC,OAA2B,EAC3B,MAAc;IAEd,IAAI,CAAC;QACJ,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;QAErC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAE7D,IAAI,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACjC,CAAC;YACD,OAAO;QACR,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG;gBACd,KAAK,EAAE,IAAI,CAAC,MAAM;gBAClB,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBAC9B,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,aAAa,EAAE,MAAM,CAAC,eAAe;oBACrC,gBAAgB,EAAE,MAAM,CAAC,kBAAkB;oBAC3C,SAAS,EAAE,MAAM,CAAC,UAAU;oBAC5B,SAAS,EAAE,MAAM,CAAC,UAAU;iBAC5B,CAAC,CAAC;aACH,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACvB,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC1D,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,KAAK,YAAY,GAAG,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Logger } from "@caporal/core";
2
+ export declare function uploadFolder(args: {
3
+ bucketName: string;
4
+ localFolder: string;
5
+ }, options: {
6
+ remotePrefix: string;
7
+ upsert: boolean;
8
+ dryRun: boolean;
9
+ }, logger: Logger): Promise<void>;
10
+ //# sourceMappingURL=upload-folder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-folder.d.ts","sourceRoot":"","sources":["../../../src/commands/bucket/upload-folder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAS5C,wBAAsB,YAAY,CACjC,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EACjD,OAAO,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,EACnE,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAuFf"}
@@ -0,0 +1,84 @@
1
+ import debug from "debug";
2
+ import { statSync } from "fs";
3
+ import { relative } from "path";
4
+ import { getSupabaseClient } from "../../utils/supabase";
5
+ import { getAllFiles } from "./utils";
6
+ const log = debug("blt:bucket");
7
+ export async function uploadFolder(args, options, logger) {
8
+ try {
9
+ const localFolder = args.localFolder;
10
+ const bucketName = args.bucketName;
11
+ const remotePrefix = options.remotePrefix;
12
+ const upsert = options.upsert;
13
+ const dryRun = options.dryRun;
14
+ log("Uploading folder to bucket: %s", bucketName);
15
+ // Check if folder exists
16
+ try {
17
+ const stat = statSync(localFolder);
18
+ if (!stat.isDirectory()) {
19
+ logger.error(`Not a directory: ${localFolder}`);
20
+ process.exit(1);
21
+ }
22
+ }
23
+ catch {
24
+ logger.error(`Folder not found: ${localFolder}`);
25
+ process.exit(1);
26
+ }
27
+ // Get all files recursively
28
+ const files = getAllFiles(localFolder);
29
+ if (files.length === 0) {
30
+ logger.info("No files found in folder");
31
+ return;
32
+ }
33
+ logger.info(`Found ${files.length} file(s) to upload`);
34
+ logger.info("");
35
+ if (dryRun) {
36
+ logger.info("DRY RUN - Files that would be uploaded:");
37
+ logger.info("");
38
+ }
39
+ const supabase = getSupabaseClient();
40
+ let successCount = 0;
41
+ let errorCount = 0;
42
+ for (const filePath of files) {
43
+ const relativePath = relative(localFolder, filePath);
44
+ const remotePath = remotePrefix
45
+ ? `${remotePrefix}/${relativePath}`
46
+ : relativePath;
47
+ if (dryRun) {
48
+ logger.info(` ${relativePath} → ${remotePath}`);
49
+ continue;
50
+ }
51
+ try {
52
+ const file = Bun.file(filePath);
53
+ const fileBuffer = await file.arrayBuffer();
54
+ const { data, error } = await supabase.storage
55
+ .from(bucketName)
56
+ .upload(remotePath, fileBuffer, {
57
+ upsert,
58
+ contentType: file.type,
59
+ });
60
+ if (error) {
61
+ logger.error(` ✗ ${relativePath}: ${error.message}`);
62
+ errorCount++;
63
+ }
64
+ else {
65
+ logger.info(` ✓ ${relativePath} → ${data.path}`);
66
+ successCount++;
67
+ }
68
+ }
69
+ catch (error) {
70
+ logger.error(` ✗ ${relativePath}: ${error.message}`);
71
+ errorCount++;
72
+ }
73
+ }
74
+ if (!dryRun) {
75
+ logger.info("");
76
+ logger.info(`Completed: ${successCount} succeeded, ${errorCount} failed`);
77
+ }
78
+ }
79
+ catch (error) {
80
+ logger.error("Error:", error.message);
81
+ process.exit(1);
82
+ }
83
+ }
84
+ //# sourceMappingURL=upload-folder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-folder.js","sourceRoot":"","sources":["../../../src/commands/bucket/upload-folder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Logger } from "@caporal/core";
2
+ export declare function uploadFile(args: {
3
+ bucketName: string;
4
+ localPath: string;
5
+ remotePath: string;
6
+ }, options: {
7
+ upsert: boolean;
8
+ }, logger: Logger): Promise<void>;
9
+ //# sourceMappingURL=upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/commands/bucket/upload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAM5C,wBAAsB,UAAU,CAC/B,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EACnE,OAAO,EAAE;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,EAC5B,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
@@ -0,0 +1,32 @@
1
+ import debug from "debug";
2
+ import { getSupabaseClient } from "../../utils/supabase";
3
+ const log = debug("blt:bucket");
4
+ export async function uploadFile(args, options, logger) {
5
+ try {
6
+ log("Uploading file to bucket: %s", args.bucketName);
7
+ const supabase = getSupabaseClient();
8
+ const file = Bun.file(args.localPath);
9
+ const exists = await file.exists();
10
+ if (!exists) {
11
+ logger.error(`File not found: ${args.localPath}`);
12
+ process.exit(1);
13
+ }
14
+ const fileBuffer = await file.arrayBuffer();
15
+ const { data, error } = await supabase.storage
16
+ .from(args.bucketName)
17
+ .upload(args.remotePath, fileBuffer, {
18
+ upsert: options.upsert,
19
+ contentType: file.type,
20
+ });
21
+ if (error) {
22
+ logger.error("Error uploading file:", error.message);
23
+ process.exit(1);
24
+ }
25
+ logger.info(`Successfully uploaded to: ${data.path}`);
26
+ }
27
+ catch (error) {
28
+ logger.error("Error:", error.message);
29
+ process.exit(1);
30
+ }
31
+ }
32
+ //# sourceMappingURL=upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/commands/bucket/upload.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;AAEhC,MAAM,CAAC,KAAK,UAAU,UAAU,CAC/B,IAAmE,EACnE,OAA4B,EAC5B,MAAc;IAEd,IAAI,CAAC;QACJ,GAAG,CAAC,8BAA8B,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;QAErC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAmB,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAEnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO;aAC5C,IAAI,CAAC,IAAI,CAAC,UAAoB,CAAC;aAC/B,MAAM,CAAC,IAAI,CAAC,UAAoB,EAAE,UAAU,EAAE;YAC9C,MAAM,EAAE,OAAO,CAAC,MAAiB;YACjC,WAAW,EAAE,IAAI,CAAC,IAAI;SACtB,CAAC,CAAC;QAEJ,IAAI,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Logger } from "@caporal/core";
2
+ export declare function getFileUrl(args: {
3
+ bucketName: string;
4
+ remotePath: string;
5
+ }, options: {
6
+ signed: boolean;
7
+ expiresIn: number;
8
+ }, logger: Logger): Promise<void>;
9
+ //# sourceMappingURL=url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../../src/commands/bucket/url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAM5C,wBAAsB,UAAU,CAC/B,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EAChD,OAAO,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC/C,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAgCf"}
@@ -0,0 +1,32 @@
1
+ import debug from "debug";
2
+ import { getSupabaseClient } from "../../utils/supabase";
3
+ const log = debug("blt:bucket");
4
+ export async function getFileUrl(args, options, logger) {
5
+ try {
6
+ log("Getting URL for file in bucket: %s", args.bucketName);
7
+ const supabase = getSupabaseClient();
8
+ if (options.signed) {
9
+ const { data, error } = await supabase.storage
10
+ .from(args.bucketName)
11
+ .createSignedUrl(args.remotePath, options.expiresIn);
12
+ if (error) {
13
+ logger.error("Error generating signed URL:", error.message);
14
+ process.exit(1);
15
+ }
16
+ logger.info(`Signed URL (expires in ${options.expiresIn}s):`);
17
+ logger.info(data.signedUrl);
18
+ }
19
+ else {
20
+ const { data } = supabase.storage
21
+ .from(args.bucketName)
22
+ .getPublicUrl(args.remotePath);
23
+ logger.info("Public URL:");
24
+ logger.info(data.publicUrl);
25
+ }
26
+ }
27
+ catch (error) {
28
+ logger.error("Error:", error.message);
29
+ process.exit(1);
30
+ }
31
+ }
32
+ //# sourceMappingURL=url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.js","sourceRoot":"","sources":["../../../src/commands/bucket/url.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;AAEhC,MAAM,CAAC,KAAK,UAAU,UAAU,CAC/B,IAAgD,EAChD,OAA+C,EAC/C,MAAc;IAEd,IAAI,CAAC;QACJ,GAAG,CAAC,oCAAoC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;QAErC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO;iBAC5C,IAAI,CAAC,IAAI,CAAC,UAAoB,CAAC;iBAC/B,eAAe,CACf,IAAI,CAAC,UAAoB,EACzB,OAAO,CAAC,SAAmB,CAC3B,CAAC;YAEH,IAAI,KAAK,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,0BAA0B,OAAO,CAAC,SAAS,KAAK,CAAC,CAAC;YAC9D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACP,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,OAAO;iBAC/B,IAAI,CAAC,IAAI,CAAC,UAAoB,CAAC;iBAC/B,YAAY,CAAC,IAAI,CAAC,UAAoB,CAAC,CAAC;YAE1C,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function formatBytes(bytes: number): string;
2
+ export declare function getAllFiles(dirPath: string, arrayOfFiles?: string[]): string[];
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/commands/bucket/utils.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAkBlF"}
@@ -0,0 +1,28 @@
1
+ import { readdirSync, statSync } from "fs";
2
+ import { join } from "path";
3
+ export function formatBytes(bytes) {
4
+ if (bytes === 0)
5
+ return "0 B";
6
+ const k = 1024;
7
+ const sizes = ["B", "KB", "MB", "GB", "TB"];
8
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
9
+ return `${parseFloat((bytes / k ** i).toFixed(2))} ${sizes[i]}`;
10
+ }
11
+ export function getAllFiles(dirPath, arrayOfFiles = []) {
12
+ const files = readdirSync(dirPath);
13
+ files.forEach((file) => {
14
+ // Skip .DS_Store and other hidden system files
15
+ if (file === ".DS_Store" || file.startsWith("._")) {
16
+ return;
17
+ }
18
+ const filePath = join(dirPath, file);
19
+ if (statSync(filePath).isDirectory()) {
20
+ arrayOfFiles = getAllFiles(filePath, arrayOfFiles);
21
+ }
22
+ else {
23
+ arrayOfFiles.push(filePath);
24
+ }
25
+ });
26
+ return arrayOfFiles;
27
+ }
28
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/commands/bucket/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,UAAU,WAAW,CAAC,KAAa;IACxC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC;IACf,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,OAAO,GAAG,UAAU,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,eAAyB,EAAE;IACvE,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEnC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACtB,+CAA+C;QAC/C,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,OAAO;QACR,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrC,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACtC,YAAY,GAAG,WAAW,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACP,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACrB,CAAC"}
@@ -1,3 +1,6 @@
1
1
  import type { Program } from "@caporal/core";
2
+ /**
3
+ * Register bucket commands with the CLI program
4
+ */
2
5
  export default function bucketCommand(program: Program): void;
3
6
  //# sourceMappingURL=bucket.d.ts.map
@@ -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;AAW7C,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAO,EAAE,OAAO,QAqYrD"}
1
+ {"version":3,"file":"bucket.d.ts","sourceRoot":"","sources":["../../src/commands/bucket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAQ7C;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAO,EAAE,OAAO,QAmIrD"}