@codemarc/blt 1.0.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 (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +184 -0
  3. package/dist/commands/bucket.d.ts +3 -0
  4. package/dist/commands/bucket.d.ts.map +1 -0
  5. package/dist/commands/bucket.js +399 -0
  6. package/dist/commands/bucket.js.map +1 -0
  7. package/dist/commands/check.d.ts +3 -0
  8. package/dist/commands/check.d.ts.map +1 -0
  9. package/dist/commands/check.js +43 -0
  10. package/dist/commands/check.js.map +1 -0
  11. package/dist/commands/cleanup.d.ts +6 -0
  12. package/dist/commands/cleanup.d.ts.map +1 -0
  13. package/dist/commands/cleanup.js +65 -0
  14. package/dist/commands/cleanup.js.map +1 -0
  15. package/dist/commands/data.d.ts +8 -0
  16. package/dist/commands/data.d.ts.map +1 -0
  17. package/dist/commands/data.js +222 -0
  18. package/dist/commands/data.js.map +1 -0
  19. package/dist/commands/env.d.ts +6 -0
  20. package/dist/commands/env.d.ts.map +1 -0
  21. package/dist/commands/env.js +29 -0
  22. package/dist/commands/env.js.map +1 -0
  23. package/dist/commands/image/color.d.ts +12 -0
  24. package/dist/commands/image/color.d.ts.map +1 -0
  25. package/dist/commands/image/color.js +274 -0
  26. package/dist/commands/image/color.js.map +1 -0
  27. package/dist/commands/image/convert.d.ts +11 -0
  28. package/dist/commands/image/convert.d.ts.map +1 -0
  29. package/dist/commands/image/convert.js +230 -0
  30. package/dist/commands/image/convert.js.map +1 -0
  31. package/dist/commands/image/enhance.d.ts +10 -0
  32. package/dist/commands/image/enhance.d.ts.map +1 -0
  33. package/dist/commands/image/enhance.js +174 -0
  34. package/dist/commands/image/enhance.js.map +1 -0
  35. package/dist/commands/image/sharpen.d.ts +13 -0
  36. package/dist/commands/image/sharpen.d.ts.map +1 -0
  37. package/dist/commands/image/sharpen.js +205 -0
  38. package/dist/commands/image/sharpen.js.map +1 -0
  39. package/dist/commands/image.d.ts +3 -0
  40. package/dist/commands/image.d.ts.map +1 -0
  41. package/dist/commands/image.js +125 -0
  42. package/dist/commands/image.js.map +1 -0
  43. package/dist/commands/repo.d.ts +6 -0
  44. package/dist/commands/repo.d.ts.map +1 -0
  45. package/dist/commands/repo.js +75 -0
  46. package/dist/commands/repo.js.map +1 -0
  47. package/dist/config/config.d.ts +16 -0
  48. package/dist/config/config.d.ts.map +1 -0
  49. package/dist/config/config.js +57 -0
  50. package/dist/config/config.js.map +1 -0
  51. package/dist/index.d.ts +3 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +27 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/lib/constants.d.ts +23 -0
  56. package/dist/lib/constants.d.ts.map +1 -0
  57. package/dist/lib/constants.js +22 -0
  58. package/dist/lib/constants.js.map +1 -0
  59. package/dist/lib/data-generator.d.ts +11 -0
  60. package/dist/lib/data-generator.d.ts.map +1 -0
  61. package/dist/lib/data-generator.js +78 -0
  62. package/dist/lib/data-generator.js.map +1 -0
  63. package/dist/lib/database-runner.d.ts +14 -0
  64. package/dist/lib/database-runner.d.ts.map +1 -0
  65. package/dist/lib/database-runner.js +186 -0
  66. package/dist/lib/database-runner.js.map +1 -0
  67. package/dist/lib/instance-discovery.d.ts +13 -0
  68. package/dist/lib/instance-discovery.d.ts.map +1 -0
  69. package/dist/lib/instance-discovery.js +48 -0
  70. package/dist/lib/instance-discovery.js.map +1 -0
  71. package/dist/lib/schema-discovery.d.ts +30 -0
  72. package/dist/lib/schema-discovery.d.ts.map +1 -0
  73. package/dist/lib/schema-discovery.js +85 -0
  74. package/dist/lib/schema-discovery.js.map +1 -0
  75. package/dist/lib/sql-builder.d.ts +25 -0
  76. package/dist/lib/sql-builder.d.ts.map +1 -0
  77. package/dist/lib/sql-builder.js +108 -0
  78. package/dist/lib/sql-builder.js.map +1 -0
  79. package/dist/lib/yaml-converter.d.ts +26 -0
  80. package/dist/lib/yaml-converter.d.ts.map +1 -0
  81. package/dist/lib/yaml-converter.js +350 -0
  82. package/dist/lib/yaml-converter.js.map +1 -0
  83. package/dist/utils/supabase.d.ts +3 -0
  84. package/dist/utils/supabase.d.ts.map +1 -0
  85. package/dist/utils/supabase.js +19 -0
  86. package/dist/utils/supabase.js.map +1 -0
  87. package/package.json +61 -0
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.imageEnhanceHelp = imageEnhanceHelp;
40
+ exports.imageEnhanceCommand = imageEnhanceCommand;
41
+ const debug_1 = __importDefault(require("debug"));
42
+ const fs_1 = require("fs");
43
+ const path_1 = require("path");
44
+ const log = (0, debug_1.default)("blt:image:enhance");
45
+ function imageEnhanceHelp() {
46
+ console.log("\nEnhance avatar image for dark or light mode\n");
47
+ console.log("Usage:");
48
+ console.log(" blt image enhance <input> [options]\n");
49
+ console.log("Options:");
50
+ console.log(" -m, --mode <mode> Enhancement mode: dark or light");
51
+ console.log(" -o, --output <path> Output file path (defaults to overwriting input)");
52
+ console.log(" -q, --quality <quality> WebP quality (0-100)\n");
53
+ }
54
+ // entry point for the image enhance command
55
+ async function imageEnhanceCommand(args, options, logger) {
56
+ try {
57
+ const inputPath = args.input;
58
+ const mode = (options.mode || "dark").toLowerCase();
59
+ const outputPath = options.output;
60
+ const quality = options.quality;
61
+ log("Enhancing %s mode avatar: %s", mode, inputPath);
62
+ if (!inputPath) {
63
+ imageEnhanceHelp();
64
+ process.exit(1);
65
+ }
66
+ // Check if input exists
67
+ try {
68
+ (0, fs_1.statSync)(inputPath);
69
+ }
70
+ catch {
71
+ logger.error(`Input file not found: ${inputPath}`);
72
+ process.exit(1);
73
+ }
74
+ // Validate quality
75
+ if (quality < 0 || quality > 100) {
76
+ logger.error("Quality must be between 0 and 100");
77
+ process.exit(1);
78
+ }
79
+ // Validate mode
80
+ if (mode !== "dark" && mode !== "light") {
81
+ logger.error("Mode must be 'dark' or 'light'");
82
+ process.exit(1);
83
+ }
84
+ // Import sharp dynamically
85
+ let sharp;
86
+ try {
87
+ const sharpModule = await Promise.resolve().then(() => __importStar(require("sharp")));
88
+ sharp = sharpModule.default;
89
+ }
90
+ catch {
91
+ logger.error("Sharp library not found. Install with: bun add sharp");
92
+ process.exit(1);
93
+ }
94
+ // If output is same as input, use a temp file
95
+ const isSameFile = !outputPath;
96
+ const finalOutputPath = outputPath || inputPath;
97
+ const tempPath = isSameFile
98
+ ? (0, path_1.join)((0, path_1.dirname)(inputPath), `.${(0, path_1.basename)(inputPath)}.tmp`)
99
+ : finalOutputPath;
100
+ const image = sharp(inputPath);
101
+ const metadata = await image.metadata();
102
+ console.log(` Original: ${metadata.width}x${metadata.height}, format: ${metadata.format}`);
103
+ let pipeline;
104
+ if (mode === "dark") {
105
+ // Make dark mode image really pop:
106
+ // - Increase contrast significantly
107
+ // - Boost saturation for vibrant colors
108
+ // - Increase brightness slightly
109
+ // - Sharpen edges
110
+ // - Add a subtle glow effect with gamma correction
111
+ pipeline = image
112
+ .modulate({
113
+ brightness: 1.15, // Slight brightness boost
114
+ saturation: 1.4, // Much more vibrant colors
115
+ hue: 0,
116
+ })
117
+ .gamma(1.1) // Slight gamma boost for glow
118
+ .normalise() // Normalize to full dynamic range
119
+ .sharpen({
120
+ sigma: 1.2,
121
+ flat: 1.0,
122
+ jagged: 2.5,
123
+ })
124
+ .webp({
125
+ quality,
126
+ effort: 6,
127
+ });
128
+ }
129
+ else {
130
+ // Create better light mode version:
131
+ // - Slightly increase contrast but keep it soft
132
+ // - Reduce saturation slightly for a cleaner look
133
+ // - Ensure good brightness
134
+ // - Gentle sharpening
135
+ pipeline = image
136
+ .modulate({
137
+ brightness: 1.05, // Subtle brightness
138
+ saturation: 0.85, // Slightly desaturated for clean look
139
+ hue: 0,
140
+ })
141
+ .gamma(1.0) // No gamma change (keep it natural)
142
+ .normalise() // Normalize to full dynamic range
143
+ .sharpen({
144
+ sigma: 0.8,
145
+ flat: 1.0,
146
+ jagged: 1.5,
147
+ })
148
+ .webp({
149
+ quality,
150
+ effort: 6,
151
+ });
152
+ }
153
+ await pipeline.toFile(tempPath);
154
+ // If same file, replace original with temp
155
+ if (isSameFile) {
156
+ (0, fs_1.renameSync)(tempPath, inputPath);
157
+ }
158
+ const inputSize = (0, fs_1.statSync)(inputPath).size;
159
+ const finalPath = isSameFile ? inputPath : finalOutputPath;
160
+ const outputSize = (0, fs_1.statSync)(finalPath).size;
161
+ console.log(`✓ Enhanced: ${finalPath}`);
162
+ console.log(` Input: ${(inputSize / 1024).toFixed(2)} KB`);
163
+ console.log(` Output: ${(outputSize / 1024).toFixed(2)} KB`);
164
+ console.log(` Mode: ${mode}`);
165
+ }
166
+ catch (error) {
167
+ logger.error("Error:", error.message);
168
+ if (error.stack) {
169
+ log("Stack trace: %s", error.stack);
170
+ }
171
+ process.exit(1);
172
+ }
173
+ }
174
+ //# sourceMappingURL=enhance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhance.js","sourceRoot":"","sources":["../../../src/commands/image/enhance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Logger } from "@caporal/core";
2
+ export declare function imageSharpenHelp(): void;
3
+ export declare function imageSharpenCommand(args: {
4
+ input?: string;
5
+ }, options: {
6
+ output?: string;
7
+ sigma?: number;
8
+ flat?: number;
9
+ jagged?: number;
10
+ recursive?: boolean;
11
+ overwrite?: boolean;
12
+ }, logger: Logger): Promise<void>;
13
+ //# sourceMappingURL=sharpen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharpen.d.ts","sourceRoot":"","sources":["../../../src/commands/image/sharpen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAO5C,wBAAgB,gBAAgB,SAW/B;AA0DD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACxB,OAAO,EAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,EACD,MAAM,EAAE,MAAM,iBAqHf"}
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.imageSharpenHelp = imageSharpenHelp;
40
+ exports.imageSharpenCommand = imageSharpenCommand;
41
+ const debug_1 = __importDefault(require("debug"));
42
+ const fs_1 = require("fs");
43
+ const path_1 = require("path");
44
+ const log = (0, debug_1.default)("blt:image:sharpen");
45
+ function imageSharpenHelp() {
46
+ console.log("\nSharpen image edges\n");
47
+ console.log("Usage:");
48
+ console.log(" blt image sharpen <input> [options]\n");
49
+ console.log("Options:");
50
+ console.log(" -o, --output <path> Output file or directory");
51
+ console.log(" -s, --sigma <sigma> Sigma value for sharpening (0.3-1000, default: 1.0)");
52
+ console.log(" -f, --flat <flat> Flat threshold (0-10000, default: 1.0)");
53
+ console.log(" -j, --jagged <jagged> Jagged threshold (0-10000, default: 2.0)");
54
+ console.log(" -r, --recursive Process directories recursively");
55
+ console.log(" --overwrite Overwrite existing files\n");
56
+ }
57
+ // Helper functions
58
+ function isImageFile(filePath) {
59
+ const ext = (0, path_1.extname)(filePath).toLowerCase();
60
+ return [".png", ".jpg", ".jpeg", ".gif", ".tiff", ".tif", ".bmp"].includes(ext);
61
+ }
62
+ function getImageFiles(dirPath) {
63
+ const files = (0, fs_1.readdirSync)(dirPath);
64
+ return files
65
+ .filter((file) => file !== '.DS_Store' && !file.startsWith('._'))
66
+ .map((file) => (0, path_1.join)(dirPath, file))
67
+ .filter((filePath) => {
68
+ try {
69
+ return (0, fs_1.statSync)(filePath).isFile() && isImageFile(filePath);
70
+ }
71
+ catch {
72
+ return false;
73
+ }
74
+ });
75
+ }
76
+ function getAllImageFiles(dirPath, arrayOfFiles = []) {
77
+ const files = (0, fs_1.readdirSync)(dirPath);
78
+ files.forEach((file) => {
79
+ // Skip .DS_Store and other hidden system files
80
+ if (file === '.DS_Store' || file.startsWith('._')) {
81
+ return;
82
+ }
83
+ const filePath = (0, path_1.join)(dirPath, file);
84
+ try {
85
+ if ((0, fs_1.statSync)(filePath).isDirectory()) {
86
+ arrayOfFiles = getAllImageFiles(filePath, arrayOfFiles);
87
+ }
88
+ else if (isImageFile(filePath)) {
89
+ arrayOfFiles.push(filePath);
90
+ }
91
+ }
92
+ catch {
93
+ // Skip files we can't access
94
+ }
95
+ });
96
+ return arrayOfFiles;
97
+ }
98
+ // entry point for the image sharpen command
99
+ async function imageSharpenCommand(args, options, logger) {
100
+ try {
101
+ const inputPath = args.input;
102
+ const outputPath = options.output;
103
+ const sigma = options.sigma;
104
+ const flat = options.flat;
105
+ const jagged = options.jagged;
106
+ const recursive = options.recursive;
107
+ const overwrite = options.overwrite;
108
+ log("Sharpening image: %s", inputPath);
109
+ if (!inputPath) {
110
+ imageSharpenHelp();
111
+ process.exit(1);
112
+ }
113
+ // Check if input exists
114
+ let isDirectory = false;
115
+ try {
116
+ const stat = (0, fs_1.statSync)(inputPath);
117
+ isDirectory = stat.isDirectory();
118
+ }
119
+ catch {
120
+ logger.error(`Input not found: ${inputPath}`);
121
+ process.exit(1);
122
+ }
123
+ // Import sharp dynamically
124
+ let sharp;
125
+ try {
126
+ const sharpModule = await Promise.resolve().then(() => __importStar(require("sharp")));
127
+ sharp = sharpModule.default;
128
+ }
129
+ catch {
130
+ logger.error("Sharp library not found. Install with: bun add sharp");
131
+ process.exit(1);
132
+ }
133
+ const processImage = async (filePath) => {
134
+ const ext = (0, path_1.extname)(filePath).toLowerCase();
135
+ const isWebP = ext === ".webp";
136
+ if (!isWebP && !isImageFile(filePath)) {
137
+ console.log(` ⊘ ${(0, path_1.basename)(filePath)} (not a supported image)`);
138
+ return;
139
+ }
140
+ const outputFilePath = outputPath
141
+ ? (isDirectory
142
+ ? (0, path_1.join)(outputPath, (0, path_1.basename)(filePath))
143
+ : outputPath)
144
+ : filePath;
145
+ // Check if output exists
146
+ if (!overwrite && filePath !== outputFilePath) {
147
+ try {
148
+ (0, fs_1.statSync)(outputFilePath);
149
+ console.log(` ⊘ ${(0, path_1.basename)(filePath)} (output exists, use --overwrite)`);
150
+ return;
151
+ }
152
+ catch {
153
+ // File doesn't exist, proceed
154
+ }
155
+ }
156
+ try {
157
+ await sharp(filePath)
158
+ .sharpen(sigma, flat, jagged)
159
+ .toFile(outputFilePath);
160
+ console.log(` ✓ ${(0, path_1.basename)(filePath)} → ${(0, path_1.basename)(outputFilePath)}`);
161
+ }
162
+ catch (error) {
163
+ logger.error(` ✗ ${(0, path_1.basename)(filePath)}: ${error.message}`);
164
+ throw error;
165
+ }
166
+ };
167
+ if (isDirectory) {
168
+ // Process directory
169
+ const files = recursive
170
+ ? getAllImageFiles(inputPath)
171
+ : [...getImageFiles(inputPath), ...(0, fs_1.readdirSync)(inputPath)
172
+ .filter((file) => file.endsWith(".webp"))
173
+ .map((file) => (0, path_1.join)(inputPath, file))];
174
+ if (files.length === 0) {
175
+ console.log("No image files found");
176
+ return;
177
+ }
178
+ console.log(`Found ${files.length} image(s) to sharpen`);
179
+ console.log("");
180
+ let successCount = 0;
181
+ let errorCount = 0;
182
+ for (const filePath of files) {
183
+ try {
184
+ await processImage(filePath);
185
+ successCount++;
186
+ }
187
+ catch {
188
+ errorCount++;
189
+ }
190
+ }
191
+ console.log("");
192
+ console.log(`Completed: ${successCount} sharpened, ${errorCount} failed`);
193
+ }
194
+ else {
195
+ // Process single file
196
+ await processImage(inputPath);
197
+ console.log(`✓ Sharpened: ${outputPath || inputPath}`);
198
+ }
199
+ }
200
+ catch (error) {
201
+ logger.error("Error:", error.message);
202
+ process.exit(1);
203
+ }
204
+ }
205
+ //# sourceMappingURL=sharpen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharpen.js","sourceRoot":"","sources":["../../../src/commands/image/sharpen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Program } from "@caporal/core";
2
+ export default function imageCommand(program: Program): void;
3
+ //# sourceMappingURL=image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/commands/image.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAM7C,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,OAAO,EAAE,OAAO,QAyHpD"}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = imageCommand;
4
+ const convert_1 = require("./image/convert");
5
+ const color_1 = require("./image/color");
6
+ const enhance_1 = require("./image/enhance");
7
+ const sharpen_1 = require("./image/sharpen");
8
+ function imageCommand(program) {
9
+ // Main image command - shows help when no operation is specified
10
+ const imageHelpText = `
11
+ image manipulation utilities
12
+
13
+ Usage:
14
+ blt image <operation>
15
+
16
+ Available operations:
17
+ convert Convert images to WebP format
18
+ color Manipulate or convert color profiles
19
+ enhance Enhance image features
20
+ sharpen Sharpen images
21
+
22
+ Run 'blt image <operation> --help' for more information on a specific command.
23
+ `;
24
+ program
25
+ .command("image", "image manipulation utilities")
26
+ .help(imageHelpText)
27
+ .action(() => {
28
+ console.log(imageHelpText);
29
+ });
30
+ // Convert image to WebP
31
+ program
32
+ .command("image convert", "Convert image(s) to WebP format")
33
+ .hide()
34
+ .argument("<input>", "Input file or directory")
35
+ .option("-o, --output <path>", "Output file or directory", {
36
+ default: "",
37
+ })
38
+ .option("-q, --quality <quality>", "WebP quality (0-100)", {
39
+ default: 80,
40
+ validator: program.NUMBER,
41
+ })
42
+ .option("-r, --recursive", "Process directories recursively", {
43
+ default: false,
44
+ })
45
+ .option("--overwrite", "Overwrite existing files", {
46
+ default: false,
47
+ })
48
+ .action(async ({ args, options, logger }) => {
49
+ await (0, convert_1.imageConvertCommand)(args, options, logger);
50
+ });
51
+ // Change base color of image
52
+ program
53
+ .command("image color", "Change the base color of an image")
54
+ .hide()
55
+ .argument("<input>", "Input image file path")
56
+ .option("-t, --to <color>", "Target color (hex, rgb, or color name)", {
57
+ default: "",
58
+ })
59
+ .option("-f, --from <color>", "Source color to replace (hex, rgb, or color name). If not specified, detects dominant color", {
60
+ default: "",
61
+ })
62
+ .option("-o, --output <path>", "Output file path (defaults to overwriting input)", {
63
+ default: "",
64
+ })
65
+ .option("-q, --quality <quality>", "WebP quality (0-100)", {
66
+ default: 90,
67
+ validator: program.NUMBER,
68
+ })
69
+ .option("-z, --tolerance <tolerance>", "Color matching tolerance (0-100, default: 30)", {
70
+ default: 30,
71
+ validator: program.NUMBER,
72
+ })
73
+ .action(async ({ args, options, logger }) => {
74
+ await (0, color_1.imageColorCommand)(args, options, logger);
75
+ });
76
+ // Enhance avatar image for dark or light mode
77
+ program
78
+ .command("image enhance", "Enhance avatar image for dark or light mode")
79
+ .hide()
80
+ .argument("<input>", "Input image file path")
81
+ .option("-m, --mode <mode>", "Enhancement mode: dark or light", {
82
+ default: "dark",
83
+ validator: ["dark", "light"],
84
+ })
85
+ .option("-o, --output <path>", "Output file path (defaults to overwriting input)", {
86
+ default: "",
87
+ })
88
+ .option("-q, --quality <quality>", "WebP quality (0-100)", {
89
+ default: 90,
90
+ validator: program.NUMBER,
91
+ })
92
+ .action(async ({ args, options, logger }) => {
93
+ await (0, enhance_1.imageEnhanceCommand)(args, options, logger);
94
+ });
95
+ // Sharpen image edges
96
+ program
97
+ .command("image sharpen", "Sharpen image edges")
98
+ .hide()
99
+ .argument("<input>", "Input file or directory")
100
+ .option("-o, --output <path>", "Output file or directory", {
101
+ default: "",
102
+ })
103
+ .option("-s, --sigma <sigma>", "Sigma value for sharpening (0.3-1000, default: 1.0)", {
104
+ default: 1.0,
105
+ validator: program.NUMBER,
106
+ })
107
+ .option("-f, --flat <flat>", "Flat threshold (0-10000, default: 1.0)", {
108
+ default: 1.0,
109
+ validator: program.NUMBER,
110
+ })
111
+ .option("-j, --jagged <jagged>", "Jagged threshold (0-10000, default: 2.0)", {
112
+ default: 2.0,
113
+ validator: program.NUMBER,
114
+ })
115
+ .option("-r, --recursive", "Process directories recursively", {
116
+ default: false,
117
+ })
118
+ .option("--overwrite", "Overwrite existing files", {
119
+ default: false,
120
+ })
121
+ .action(async ({ args, options, logger }) => {
122
+ await (0, sharpen_1.imageSharpenCommand)(args, options, logger);
123
+ });
124
+ }
125
+ //# sourceMappingURL=image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/commands/image.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Program } from "@caporal/core";
2
+ /**
3
+ * Register repo commands with the CLI program
4
+ */
5
+ export default function repoCommand(program: Program): void;
6
+ //# sourceMappingURL=repo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../src/commands/repo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAoB7C;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,OAAO,EAAE,OAAO,QAgDnD"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = repoCommand;
7
+ const debug_1 = __importDefault(require("debug"));
8
+ const log = (0, debug_1.default)("blt:repo");
9
+ const REPOSITORIES = [
10
+ {
11
+ name: "data",
12
+ url: "https://github.com/bltcore-com/blt-core-data.git",
13
+ },
14
+ {
15
+ name: "pos",
16
+ url: "https://github.com/bltcore-com/blt-core-pos.git",
17
+ },
18
+ {
19
+ name: "gateway",
20
+ url: "https://github.com/bltcore-com/blt-device-gateway.git",
21
+ }
22
+ ];
23
+ /**
24
+ * Register repo commands with the CLI program
25
+ */
26
+ function repoCommand(program) {
27
+ // Main repo command - shows help for subcommands
28
+ program
29
+ .command("repo", "Manage repository clones and working projects")
30
+ .action(({ args, options, logger }) => {
31
+ logger.info("Repository management commands:");
32
+ logger.info("");
33
+ logger.info(" blt repo list List all available repositories");
34
+ logger.info(" blt repo clone <name> Clone a repository by name");
35
+ logger.info("");
36
+ logger.info("Use 'blt repo <subcommand> --help' for more information on each command.");
37
+ });
38
+ // List all available repos
39
+ program
40
+ .command("repo list", "List all available repositories in the project")
41
+ .option("-f, --format <format>", "Output format: table or json", {
42
+ default: "table",
43
+ validator: ["table", "json"],
44
+ })
45
+ .action(async ({ options, logger }) => {
46
+ try {
47
+ log("Listing all available repositories");
48
+ REPOSITORIES.forEach((repo) => {
49
+ console.log(`${repo.name}`);
50
+ });
51
+ }
52
+ catch (error) {
53
+ logger.error(error.message);
54
+ process.exit(1);
55
+ }
56
+ });
57
+ // Clone a repository
58
+ program
59
+ .command("repo clone", "Clone a repository by name")
60
+ .argument("<name>", "Repository name (e.g., 'data')")
61
+ .action(async ({ args, options, logger }) => {
62
+ try {
63
+ const repoName = args.name;
64
+ log(`Cloning repository: ${repoName}`);
65
+ // TODO: Implement repository cloning logic
66
+ // This should execute: git clone <proper-path-for-blt-{repoName}>
67
+ logger.info(`Clone functionality for '${repoName}' to be implemented`);
68
+ }
69
+ catch (error) {
70
+ logger.error(error.message);
71
+ process.exit(1);
72
+ }
73
+ });
74
+ }
75
+ //# sourceMappingURL=repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo.js","sourceRoot":"","sources":["../../src/commands/repo.ts"],"names":[],"mappings":";;;;;AAuBA,8BAgDC;AAtED,kDAA0B;AAE1B,MAAM,GAAG,GAAG,IAAA,eAAK,EAAC,UAAU,CAAC,CAAC;AAE9B,MAAM,YAAY,GAAG;IACnB;QACE,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,kDAAkD;KACxD;IACD;QACE,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,iDAAiD;KACvD;IACD;QACE,IAAI,EAAE,SAAS;QACf,GAAG,EAAE,uDAAuD;KAC7D;CACF,CAAC;AAEF;;GAEG;AACH,SAAwB,WAAW,CAAC,OAAgB;IAClD,iDAAiD;IACjD,OAAO;SACJ,OAAO,CAAC,MAAM,EAAE,+CAA+C,CAAC;SAChE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QACpC,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;QAClF,MAAM,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QAC7E,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEL,2BAA2B;IAC3B,OAAO;SACJ,OAAO,CAAC,WAAW,EAAE,gDAAgD,CAAC;SACtE,MAAM,CAAC,uBAAuB,EAAE,8BAA8B,EAAE;QAC/D,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;KAC7B,CAAC;SACD,MAAM,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QACpC,IAAI,CAAC;YACH,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAC1C,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,qBAAqB;IACrB,OAAO;SACJ,OAAO,CAAC,YAAY,EAAE,4BAA4B,CAAC;SACnD,QAAQ,CAAC,QAAQ,EAAE,gCAAgC,CAAC;SACpD,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAc,CAAC;YACrC,GAAG,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;YACvC,2CAA2C;YAC3C,kEAAkE;YAClE,MAAM,CAAC,IAAI,CAAC,4BAA4B,QAAQ,qBAAqB,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}