@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.
- package/README.md +33 -7
- package/dist/blt +2 -6
- package/dist/blt.d.ts.map +1 -1
- package/dist/blt.js.map +1 -1
- 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/image.js +1 -1
- package/dist/commands/image.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.d.ts.map +1 -1
- package/dist/commands/version/update.js +26 -2
- package/dist/commands/version/update.js.map +1 -1
- package/dist/commands/version.d.ts.map +1 -1
- package/dist/commands/version.js +23 -1
- package/dist/commands/version.js.map +1 -1
- 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": "
|
|
191
|
+
"commit": "c79d284f8d2a3df00af85740cc64010587d12b08",
|
|
188
192
|
"branch": "main",
|
|
189
|
-
"time": "2026-01-
|
|
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.
|
|
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
|
-
|
|
257
|
-
# From the CLI project directory
|
|
258
|
-
bun run src/commands/version/update.ts
|
|
274
|
+
You can manually update version information:
|
|
259
275
|
|
|
260
|
-
|
|
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
|
-
|
|
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":";
|
|
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,
|
|
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
|
|
@@ -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 @@
|
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bucket.d.ts","sourceRoot":"","sources":["../../src/commands/bucket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"bucket.d.ts","sourceRoot":"","sources":["../../src/commands/bucket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAQ7C;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAO,EAAE,OAAO,QAmIrD"}
|