@codemarc/blt 1.0.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 (100) hide show
  1. package/README.md +133 -7
  2. package/dist/blt +28 -0
  3. package/dist/blt.d.ts +3 -0
  4. package/dist/blt.d.ts.map +1 -0
  5. package/dist/blt.js.map +1 -0
  6. package/dist/commands/bucket/download.d.ts +7 -0
  7. package/dist/commands/bucket/download.d.ts.map +1 -0
  8. package/dist/commands/bucket/download.js +28 -0
  9. package/dist/commands/bucket/download.js.map +1 -0
  10. package/dist/commands/bucket/list.d.ts +9 -0
  11. package/dist/commands/bucket/list.d.ts.map +1 -0
  12. package/dist/commands/bucket/list.js +69 -0
  13. package/dist/commands/bucket/list.js.map +1 -0
  14. package/dist/commands/bucket/names.d.ts +5 -0
  15. package/dist/commands/bucket/names.d.ts.map +1 -0
  16. package/dist/commands/bucket/names.js +53 -0
  17. package/dist/commands/bucket/names.js.map +1 -0
  18. package/dist/commands/bucket/upload-folder.d.ts +10 -0
  19. package/dist/commands/bucket/upload-folder.d.ts.map +1 -0
  20. package/dist/commands/bucket/upload-folder.js +84 -0
  21. package/dist/commands/bucket/upload-folder.js.map +1 -0
  22. package/dist/commands/bucket/upload.d.ts +9 -0
  23. package/dist/commands/bucket/upload.d.ts.map +1 -0
  24. package/dist/commands/bucket/upload.js +32 -0
  25. package/dist/commands/bucket/upload.js.map +1 -0
  26. package/dist/commands/bucket/url.d.ts +9 -0
  27. package/dist/commands/bucket/url.d.ts.map +1 -0
  28. package/dist/commands/bucket/url.js +32 -0
  29. package/dist/commands/bucket/url.js.map +1 -0
  30. package/dist/commands/bucket/utils.d.ts +3 -0
  31. package/dist/commands/bucket/utils.d.ts.map +1 -0
  32. package/dist/commands/bucket/utils.js +28 -0
  33. package/dist/commands/bucket/utils.js.map +1 -0
  34. package/dist/commands/bucket.d.ts +3 -0
  35. package/dist/commands/bucket.d.ts.map +1 -1
  36. package/dist/commands/bucket.js +53 -325
  37. package/dist/commands/bucket.js.map +1 -1
  38. package/dist/commands/check.js +7 -13
  39. package/dist/commands/check.js.map +1 -1
  40. package/dist/commands/cleanup.js +12 -48
  41. package/dist/commands/cleanup.js.map +1 -1
  42. package/dist/commands/data.js +37 -43
  43. package/dist/commands/data.js.map +1 -1
  44. package/dist/commands/env.js +3 -6
  45. package/dist/commands/env.js.map +1 -1
  46. package/dist/commands/image/color.js +12 -52
  47. package/dist/commands/image/color.js.map +1 -1
  48. package/dist/commands/image/convert.js +28 -68
  49. package/dist/commands/image/convert.js.map +1 -1
  50. package/dist/commands/image/enhance.js +12 -52
  51. package/dist/commands/image/enhance.js.map +1 -1
  52. package/dist/commands/image/sharpen.js +24 -64
  53. package/dist/commands/image/sharpen.js.map +1 -1
  54. package/dist/commands/image.js +10 -13
  55. package/dist/commands/image.js.map +1 -1
  56. package/dist/commands/repo.js +3 -9
  57. package/dist/commands/repo.js.map +1 -1
  58. package/dist/commands/version/sql.d.ts +6 -0
  59. package/dist/commands/version/sql.d.ts.map +1 -0
  60. package/dist/commands/version/sql.js +35 -0
  61. package/dist/commands/version/sql.js.map +1 -0
  62. package/dist/commands/version/string.d.ts +13 -0
  63. package/dist/commands/version/string.d.ts.map +1 -0
  64. package/dist/commands/version/string.js +52 -0
  65. package/dist/commands/version/string.js.map +1 -0
  66. package/dist/commands/version/update-version.d.ts +3 -0
  67. package/dist/commands/version/update-version.d.ts.map +1 -0
  68. package/dist/commands/version/update-version.js +97 -0
  69. package/dist/commands/version/update-version.js.map +1 -0
  70. package/dist/commands/version/update.d.ts +8 -0
  71. package/dist/commands/version/update.d.ts.map +1 -0
  72. package/dist/commands/version/update.js +195 -0
  73. package/dist/commands/version/update.js.map +1 -0
  74. package/dist/commands/version.d.ts +6 -0
  75. package/dist/commands/version.d.ts.map +1 -0
  76. package/dist/commands/version.js +66 -0
  77. package/dist/commands/version.js.map +1 -0
  78. package/dist/config/config.js +11 -15
  79. package/dist/config/config.js.map +1 -1
  80. package/dist/lib/constants.js +4 -8
  81. package/dist/lib/constants.js.map +1 -1
  82. package/dist/lib/data-generator.js +27 -31
  83. package/dist/lib/data-generator.js.map +1 -1
  84. package/dist/lib/database-runner.js +17 -25
  85. package/dist/lib/database-runner.js.map +1 -1
  86. package/dist/lib/instance-discovery.js +14 -19
  87. package/dist/lib/instance-discovery.js.map +1 -1
  88. package/dist/lib/schema-discovery.js +18 -24
  89. package/dist/lib/schema-discovery.js.map +1 -1
  90. package/dist/lib/sql-builder.js +22 -29
  91. package/dist/lib/sql-builder.js.map +1 -1
  92. package/dist/lib/version-types.d.ts +77 -0
  93. package/dist/lib/version-types.d.ts.map +1 -0
  94. package/dist/lib/version-types.js +8 -0
  95. package/dist/lib/version-types.js.map +1 -0
  96. package/dist/lib/yaml-converter.js +17 -60
  97. package/dist/lib/yaml-converter.js.map +1 -1
  98. package/dist/utils/supabase.js +5 -11
  99. package/dist/utils/supabase.js.map +1 -1
  100. package/package.json +13 -8
package/README.md CHANGED
@@ -6,10 +6,13 @@
6
6
 
7
7
  - **Environment Checking**: Verify environment setup and configuration
8
8
  - **Image Processing**: WebP conversion, sharpening, color manipulation, and enhancement
9
+ - **Version Management**: Update and manage version.json files with build information
9
10
 
10
11
  ## Installation
11
12
 
12
13
  ```bash
14
+ bun install -g @codemarc/blt
15
+ # or
13
16
  npm install -g @codemarc/blt
14
17
  # or
15
18
  yarn global add @codemarc/blt
@@ -46,11 +49,28 @@ Sharpen an image:
46
49
  blt image sharpen ./photo.jpg
47
50
  ```
48
51
 
52
+ ### Version Management
53
+
54
+ Update version.json with current build information:
55
+
56
+ ```bash
57
+ blt version update
58
+ ```
59
+
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`)
63
+ - Component version from `package.json`
64
+ - Runtime information (Bun/Node version)
65
+ - Git commit hash and branch
66
+ - Build timestamp
67
+ - Package manager information
68
+
49
69
  ## Commands
50
70
 
51
71
  ### Environment Commands
52
72
 
53
- #### `blt check [buckets]`
73
+ #### `blt check [all]`
54
74
 
55
75
  Check the environment setup
56
76
 
@@ -129,6 +149,77 @@ blt image color ./logo.png --from red --to blue --tolerance 30
129
149
  - `-q, --quality <quality>`: WebP quality 0-100 (default: 90)
130
150
  - `-z, --tolerance <tolerance>`: Color matching tolerance 0-100 (default: 30)
131
151
 
152
+ ### Version Commands
153
+
154
+ #### `blt version`
155
+
156
+ Show version management help
157
+
158
+ ```bash
159
+ blt version
160
+ ```
161
+
162
+ #### `blt version update`
163
+
164
+ Update `version.json` with current build information
165
+
166
+ ```bash
167
+ blt version update
168
+ ```
169
+
170
+ This command:
171
+ - Creates `version.json` if it doesn't exist
172
+ - Updates existing `version.json` with current information
173
+ - Works from any directory (uses current working directory)
174
+ - Detects component name from `package.json`
175
+ - Generates a unique build number for each update
176
+ - Includes git commit, branch, and build timestamp
177
+ - Captures runtime and package manager versions
178
+
179
+ **Example `version.json` output:**
180
+
181
+ ```json
182
+ {
183
+ "buildnum": "260115212",
184
+ "component": "cli",
185
+ "version": "1.1.0",
186
+ "runtime": {
187
+ "type": "bun",
188
+ "version": "1.3.4"
189
+ },
190
+ "build": {
191
+ "commit": "c79d284f8d2a3df00af85740cc64010587d12b08",
192
+ "branch": "main",
193
+ "time": "2026-01-15T12:04:31.662Z"
194
+ },
195
+ "metadata": {
196
+ "packageManager": "bun",
197
+ "packageManagerVersion": "1.3.4"
198
+ }
199
+ }
200
+ ```
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
+
215
+ The command automatically detects the component name from your `package.json`:
216
+ - `@codemarc/blt` or `blt-cli` → `cli`
217
+ - `blt-core-pos` → `pos`
218
+ - `blt-core-devops` → `devops`
219
+ - `data` → `data`
220
+ - `deploy` → `deploy`
221
+ - `gateway` → `gateway`
222
+
132
223
  ## Environment Variables
133
224
 
134
225
  ### Environment Checking
@@ -144,27 +235,62 @@ The `blt check` command looks for a `.env` file in the current directory and ver
144
235
  Sharp is an optional dependency. Install manually if needed:
145
236
 
146
237
  ```bash
238
+ bun add sharp
239
+ # or
147
240
  npm install sharp
148
241
  ```
149
242
 
150
243
  ## Development
151
244
 
152
- This package is built with TypeScript and targets Node.js 18+.
245
+ This package is built with TypeScript and uses Bun as the runtime.
153
246
 
154
247
  ### Building from Source
155
248
 
156
249
  ```bash
157
250
  git clone https://github.com/codemarc/blt-cli.git
158
251
  cd blt-cli
159
- npm install
160
- npm run build
161
- npm link
252
+ bun install
253
+ bun run build
254
+ bun link
255
+ ```
256
+
257
+ The build process automatically:
258
+ - Compiles TypeScript to JavaScript
259
+ - Updates `version.json` with current build information
260
+ - Sets execute permissions on the built binary
261
+
262
+ ### Running in Development
263
+
264
+ You can run the CLI directly from source using Bun:
265
+
266
+ ```bash
267
+ bun run src/blt.ts check
162
268
  ```
163
269
 
270
+ ### Version Management
271
+
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.
273
+
274
+ You can manually update version information:
275
+
276
+ ```bash
277
+ # From any directory (updates version.json in current directory)
278
+ blt version update
279
+
280
+ # Or from the CLI project directory, run the script directly
281
+ bun run src/commands/version/update.ts
282
+ ```
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
+
164
290
  ### Testing
165
291
 
166
292
  ```bash
167
- npm test
293
+ bun test
168
294
  ```
169
295
 
170
296
  ## License
@@ -173,7 +299,7 @@ MIT License - see [LICENSE](LICENSE) file for details.
173
299
 
174
300
  ## Author
175
301
 
176
- Marc J. Greenberg <marc@Blt.org>
302
+ Marc J. Greenberg <marc@bltwai.com>
177
303
 
178
304
  ## Repository
179
305
 
package/dist/blt ADDED
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env bun
2
+ import { program } from "@caporal/core";
3
+ import imageCommand from "./commands/image";
4
+ import versionCommand from "./commands/version";
5
+ import bucketCommand from "./commands/bucket";
6
+ import { join, dirname } from "node:path";
7
+ import { readFileSync } from "node:fs";
8
+ import { fileURLToPath } from "node:url";
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = dirname(__filename);
11
+ const packageJsonPath = join(__dirname, "..", "package.json");
12
+ export function getPackageVersion() {
13
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8"));
14
+ return packageJson.version;
15
+ }
16
+ program.name("blt")
17
+ .version(getPackageVersion())
18
+ .description("BLT Core Cli");
19
+ imageCommand(program);
20
+ versionCommand(program);
21
+ bucketCommand(program);
22
+ // If no command is provided, show help
23
+ const args = process.argv.slice(2);
24
+ if (args.length === 0) {
25
+ process.argv.push('--help');
26
+ }
27
+ program.run();
28
+ //# sourceMappingURL=blt.js.map
package/dist/blt.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bun
2
+ export declare function getPackageVersion(): string;
3
+ //# sourceMappingURL=blt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blt.d.ts","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AAcA,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C"}
@@ -0,0 +1 @@
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