@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.
- package/LICENSE +21 -0
- package/README.md +184 -0
- package/dist/commands/bucket.d.ts +3 -0
- package/dist/commands/bucket.d.ts.map +1 -0
- package/dist/commands/bucket.js +399 -0
- package/dist/commands/bucket.js.map +1 -0
- package/dist/commands/check.d.ts +3 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +43 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/cleanup.d.ts +6 -0
- package/dist/commands/cleanup.d.ts.map +1 -0
- package/dist/commands/cleanup.js +65 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/data.d.ts +8 -0
- package/dist/commands/data.d.ts.map +1 -0
- package/dist/commands/data.js +222 -0
- package/dist/commands/data.js.map +1 -0
- package/dist/commands/env.d.ts +6 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +29 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/image/color.d.ts +12 -0
- package/dist/commands/image/color.d.ts.map +1 -0
- package/dist/commands/image/color.js +274 -0
- package/dist/commands/image/color.js.map +1 -0
- package/dist/commands/image/convert.d.ts +11 -0
- package/dist/commands/image/convert.d.ts.map +1 -0
- package/dist/commands/image/convert.js +230 -0
- package/dist/commands/image/convert.js.map +1 -0
- package/dist/commands/image/enhance.d.ts +10 -0
- package/dist/commands/image/enhance.d.ts.map +1 -0
- package/dist/commands/image/enhance.js +174 -0
- package/dist/commands/image/enhance.js.map +1 -0
- package/dist/commands/image/sharpen.d.ts +13 -0
- package/dist/commands/image/sharpen.d.ts.map +1 -0
- package/dist/commands/image/sharpen.js +205 -0
- package/dist/commands/image/sharpen.js.map +1 -0
- package/dist/commands/image.d.ts +3 -0
- package/dist/commands/image.d.ts.map +1 -0
- package/dist/commands/image.js +125 -0
- package/dist/commands/image.js.map +1 -0
- package/dist/commands/repo.d.ts +6 -0
- package/dist/commands/repo.d.ts.map +1 -0
- package/dist/commands/repo.js +75 -0
- package/dist/commands/repo.js.map +1 -0
- package/dist/config/config.d.ts +16 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +57 -0
- package/dist/config/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/constants.d.ts +23 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +22 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/data-generator.d.ts +11 -0
- package/dist/lib/data-generator.d.ts.map +1 -0
- package/dist/lib/data-generator.js +78 -0
- package/dist/lib/data-generator.js.map +1 -0
- package/dist/lib/database-runner.d.ts +14 -0
- package/dist/lib/database-runner.d.ts.map +1 -0
- package/dist/lib/database-runner.js +186 -0
- package/dist/lib/database-runner.js.map +1 -0
- package/dist/lib/instance-discovery.d.ts +13 -0
- package/dist/lib/instance-discovery.d.ts.map +1 -0
- package/dist/lib/instance-discovery.js +48 -0
- package/dist/lib/instance-discovery.js.map +1 -0
- package/dist/lib/schema-discovery.d.ts +30 -0
- package/dist/lib/schema-discovery.d.ts.map +1 -0
- package/dist/lib/schema-discovery.js +85 -0
- package/dist/lib/schema-discovery.js.map +1 -0
- package/dist/lib/sql-builder.d.ts +25 -0
- package/dist/lib/sql-builder.d.ts.map +1 -0
- package/dist/lib/sql-builder.js +108 -0
- package/dist/lib/sql-builder.js.map +1 -0
- package/dist/lib/yaml-converter.d.ts +26 -0
- package/dist/lib/yaml-converter.d.ts.map +1 -0
- package/dist/lib/yaml-converter.js +350 -0
- package/dist/lib/yaml-converter.js.map +1 -0
- package/dist/utils/supabase.d.ts +3 -0
- package/dist/utils/supabase.d.ts.map +1 -0
- package/dist/utils/supabase.js +19 -0
- package/dist/utils/supabase.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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"}
|