@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.
- package/README.md +133 -7
- package/dist/blt +28 -0
- package/dist/blt.d.ts +3 -0
- package/dist/blt.d.ts.map +1 -0
- package/dist/blt.js.map +1 -0
- package/dist/commands/bucket/download.d.ts +7 -0
- package/dist/commands/bucket/download.d.ts.map +1 -0
- package/dist/commands/bucket/download.js +28 -0
- package/dist/commands/bucket/download.js.map +1 -0
- package/dist/commands/bucket/list.d.ts +9 -0
- package/dist/commands/bucket/list.d.ts.map +1 -0
- package/dist/commands/bucket/list.js +69 -0
- package/dist/commands/bucket/list.js.map +1 -0
- package/dist/commands/bucket/names.d.ts +5 -0
- package/dist/commands/bucket/names.d.ts.map +1 -0
- package/dist/commands/bucket/names.js +53 -0
- package/dist/commands/bucket/names.js.map +1 -0
- package/dist/commands/bucket/upload-folder.d.ts +10 -0
- package/dist/commands/bucket/upload-folder.d.ts.map +1 -0
- package/dist/commands/bucket/upload-folder.js +84 -0
- package/dist/commands/bucket/upload-folder.js.map +1 -0
- package/dist/commands/bucket/upload.d.ts +9 -0
- package/dist/commands/bucket/upload.d.ts.map +1 -0
- package/dist/commands/bucket/upload.js +32 -0
- package/dist/commands/bucket/upload.js.map +1 -0
- package/dist/commands/bucket/url.d.ts +9 -0
- package/dist/commands/bucket/url.d.ts.map +1 -0
- package/dist/commands/bucket/url.js +32 -0
- package/dist/commands/bucket/url.js.map +1 -0
- package/dist/commands/bucket/utils.d.ts +3 -0
- package/dist/commands/bucket/utils.d.ts.map +1 -0
- package/dist/commands/bucket/utils.js +28 -0
- package/dist/commands/bucket/utils.js.map +1 -0
- package/dist/commands/bucket.d.ts +3 -0
- package/dist/commands/bucket.d.ts.map +1 -1
- package/dist/commands/bucket.js +53 -325
- package/dist/commands/bucket.js.map +1 -1
- package/dist/commands/check.js +7 -13
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/cleanup.js +12 -48
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/data.js +37 -43
- package/dist/commands/data.js.map +1 -1
- package/dist/commands/env.js +3 -6
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/image/color.js +12 -52
- package/dist/commands/image/color.js.map +1 -1
- package/dist/commands/image/convert.js +28 -68
- package/dist/commands/image/convert.js.map +1 -1
- package/dist/commands/image/enhance.js +12 -52
- package/dist/commands/image/enhance.js.map +1 -1
- package/dist/commands/image/sharpen.js +24 -64
- package/dist/commands/image/sharpen.js.map +1 -1
- package/dist/commands/image.js +10 -13
- package/dist/commands/image.js.map +1 -1
- package/dist/commands/repo.js +3 -9
- package/dist/commands/repo.js.map +1 -1
- package/dist/commands/version/sql.d.ts +6 -0
- package/dist/commands/version/sql.d.ts.map +1 -0
- package/dist/commands/version/sql.js +35 -0
- package/dist/commands/version/sql.js.map +1 -0
- package/dist/commands/version/string.d.ts +13 -0
- package/dist/commands/version/string.d.ts.map +1 -0
- package/dist/commands/version/string.js +52 -0
- package/dist/commands/version/string.js.map +1 -0
- package/dist/commands/version/update-version.d.ts +3 -0
- package/dist/commands/version/update-version.d.ts.map +1 -0
- package/dist/commands/version/update-version.js +97 -0
- package/dist/commands/version/update-version.js.map +1 -0
- package/dist/commands/version/update.d.ts +8 -0
- package/dist/commands/version/update.d.ts.map +1 -0
- package/dist/commands/version/update.js +195 -0
- package/dist/commands/version/update.js.map +1 -0
- package/dist/commands/version.d.ts +6 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +66 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/config/config.js +11 -15
- package/dist/config/config.js.map +1 -1
- package/dist/lib/constants.js +4 -8
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/data-generator.js +27 -31
- package/dist/lib/data-generator.js.map +1 -1
- package/dist/lib/database-runner.js +17 -25
- package/dist/lib/database-runner.js.map +1 -1
- package/dist/lib/instance-discovery.js +14 -19
- package/dist/lib/instance-discovery.js.map +1 -1
- package/dist/lib/schema-discovery.js +18 -24
- package/dist/lib/schema-discovery.js.map +1 -1
- package/dist/lib/sql-builder.js +22 -29
- package/dist/lib/sql-builder.js.map +1 -1
- package/dist/lib/version-types.d.ts +77 -0
- package/dist/lib/version-types.d.ts.map +1 -0
- package/dist/lib/version-types.js +8 -0
- package/dist/lib/version-types.js.map +1 -0
- package/dist/lib/yaml-converter.js +17 -60
- package/dist/lib/yaml-converter.js.map +1 -1
- package/dist/utils/supabase.js +5 -11
- package/dist/utils/supabase.js.map +1 -1
- 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 [
|
|
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
|
|
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
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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
|
-
|
|
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@
|
|
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 @@
|
|
|
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
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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
|