diginext-img-magic-cli 0.1.6 → 0.2.1

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/dist/index.js CHANGED
@@ -4,168 +4,317 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const yargs_1 = __importDefault(require("yargs"));
7
+ const promises_1 = __importDefault(require("fs/promises"));
7
8
  const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const async_1 = require("async");
8
11
  const diginext_img_magic_1 = require("diginext-img-magic");
9
12
  const isImageSupported_1 = __importDefault(require("diginext-img-magic/dist/compress/isImageSupported"));
10
13
  const url_1 = require("diginext-utils/dist/string/url");
11
14
  const getAllFiles_1 = __importDefault(require("./plugins/getAllFiles"));
12
- const object_1 = require("diginext-utils/dist/object");
13
15
  const { version } = require("../package.json");
14
- (async () => {
15
- //
16
- const argv = (0, yargs_1.default)(process.argv.slice(2))
17
- .usage("Usage: $0 <command> [options]")
18
- .example('$0 --dir "dir"', "")
19
- .alias("d", "dir")
20
- .describe("d", "Directory")
21
- .option("dir", {
22
- string: true,
23
- })
24
- .alias("t", "thumb")
25
- .describe("t", "Thumb")
26
- .option("thumb", {
27
- boolean: false,
28
- })
29
- .alias("m", "maxsize")
30
- .describe("m", "Max Size")
31
- .option("maxsize", {
32
- number: false,
33
- })
34
- .help("h")
35
- .alias("h", "help")
36
- .epilog(`verion: ${version}`).argv;
37
- let dirName;
38
- if (Array.isArray(argv.dir)) {
39
- dirName = argv.dir[1] === true ? "" : argv.dir[1];
40
- if (!dirName) {
41
- console.log("Need Directory!");
42
- return;
43
- }
44
- }
45
- else {
46
- dirName = argv === true ? "" : argv.dir;
47
- if (!dirName) {
48
- console.log("Need Directory!");
49
- return;
50
- }
16
+ class ImageConverter {
17
+ constructor(options) {
18
+ this.outputDirWebp = "";
19
+ this.outputDirThumb = "";
20
+ this.results = [];
21
+ this.processedCount = 0;
22
+ this.options = options;
23
+ this.setupOutputDirectories();
51
24
  }
52
- if (!fs_1.default.lstatSync(dirName).isDirectory()) {
53
- //
54
- console.log("Please Use A Directory!");
55
- return;
25
+ setupOutputDirectories() {
26
+ const normalizedDir = this.options.dir.replace(/\\/g, "/");
27
+ const folderName = (0, url_1.getFileNameWithoutExtension)(normalizedDir);
28
+ const parentDir = path_1.default.dirname(normalizedDir);
29
+ this.outputDirWebp = path_1.default.join(parentDir, `${folderName}-webp`);
30
+ this.outputDirThumb = path_1.default.join(parentDir, `${folderName}-thumb-webp`);
56
31
  }
57
- const isCreateThumb = (0, object_1.toBool)(argv.thumb);
58
- const maxSize = (0, object_1.toInt)(argv.maxsize) || 4096;
59
- console.log("Max Size: ", maxSize);
60
- dirName = dirName.replace(/\\/g, "/");
61
- const folderName = (0, url_1.getFileNameWithoutExtension)(dirName);
62
- console.log("Folder Name :>> ", folderName);
63
- const folderNameWebp = `${folderName}-webp`;
64
- const dirFolderWebp = [...dirName.split("/").slice(0, -1), folderNameWebp].join("/");
65
- const folderNameThumb = `${folderName}-thumb-webp`;
66
- const dirFolderThumb = [...dirName.split("/").slice(0, -1), folderNameThumb].join("/");
67
- console.log("Path Folder Webp :>> ", dirFolderWebp);
68
- // console.log("dirFolderThumb :>> ", dirFolderThumb);
69
- const list = (0, getAllFiles_1.default)(dirName);
70
- const checkSameName = () => {
71
- const __list = list
72
- .map((item) => {
73
- const supported = (0, isImageSupported_1.default)(item);
74
- if (supported) {
75
- return [...item.split("/").slice(0, -1), `${(0, url_1.getFileNameWithoutExtension)(item)}`].join("/");
76
- // return getFileNameWithoutExtension(item);
32
+ async ensureDirectoryExists(dirPath) {
33
+ try {
34
+ if (fs_1.default.existsSync(dirPath)) {
35
+ await promises_1.default.rm(dirPath, { recursive: true });
77
36
  }
78
- return null;
79
- })
80
- .filter((x) => x);
81
- const duplicate = __list.filter((item, index) => __list.indexOf(item) !== index);
82
- if ((0, object_1.toBool)(duplicate))
83
- console.log("Duplicate :>> ", duplicate);
84
- if (duplicate.length >= 1) {
85
- console.error("Tìm thấy hình giống tên nhau nhưng khác extension, không thực hiện convert !");
37
+ await promises_1.default.mkdir(dirPath, { recursive: true });
86
38
  }
87
- for (let i = 0; i < duplicate.length; i++) {
88
- const element = duplicate[i];
89
- //
90
- const ___list = list.filter((x) => {
91
- return x.indexOf(`${element}.`) >= 0;
92
- });
93
- console.log("Vui lòng đổi tên :>> ", ___list);
39
+ catch (error) {
40
+ throw new Error(`Failed to create directory ${dirPath}: ${error}`);
94
41
  }
95
- return duplicate.length >= 1;
96
- };
97
- if (checkSameName()) {
98
- return;
99
42
  }
100
- const MAX_PROCESSING = 10;
101
- let index = 0;
102
- const startConvert = () => {
103
- if (fs_1.default.existsSync(dirFolderWebp)) {
104
- fs_1.default.rmSync(dirFolderWebp, { recursive: true });
43
+ async validateDirectory() {
44
+ try {
45
+ const stats = await promises_1.default.lstat(this.options.dir);
46
+ if (!stats.isDirectory()) {
47
+ throw new Error("Path is not a directory");
48
+ }
49
+ }
50
+ catch (error) {
51
+ throw new Error(`Invalid directory: ${this.options.dir}`);
105
52
  }
106
- fs_1.default.mkdirSync(dirFolderWebp, { recursive: true });
107
- if (isCreateThumb) {
108
- if (fs_1.default.existsSync(dirFolderThumb)) {
109
- fs_1.default.rmSync(dirFolderThumb, { recursive: true });
53
+ }
54
+ checkForDuplicateNames(files) {
55
+ const nameMap = new Map();
56
+ files.forEach((file) => {
57
+ if ((0, isImageSupported_1.default)(file)) {
58
+ const nameWithoutExt = (0, url_1.getFileNameWithoutExtension)(file);
59
+ const relativePath = path_1.default.dirname(file.replace(this.options.dir, ""));
60
+ const key = path_1.default.join(relativePath, nameWithoutExt);
61
+ if (!nameMap.has(key)) {
62
+ nameMap.set(key, []);
63
+ }
64
+ nameMap.get(key).push(file);
110
65
  }
111
- fs_1.default.mkdirSync(dirFolderThumb, { recursive: true });
66
+ });
67
+ const duplicates = [];
68
+ nameMap.forEach((files, name) => {
69
+ if (files.length > 1) {
70
+ duplicates.push(...files);
71
+ console.warn(`⚠️ Duplicate names found for: ${name}`);
72
+ console.warn(` Files: ${files.join(", ")}`);
73
+ }
74
+ });
75
+ return duplicates;
76
+ }
77
+ async convertSingleImage(task) {
78
+ const { inputPath, index, total } = task;
79
+ try {
80
+ // console.log(`📸 [${index}/${total}] Processing: ${path.basename(inputPath)}`);
81
+ const normalizedPath = inputPath.replace(/\\/g, "/");
82
+ const fileExt = (0, url_1.getFileExtension)(normalizedPath);
83
+ const isSupported = (0, isImageSupported_1.default)(normalizedPath);
84
+ // Handle non-image files
85
+ if (!isSupported) {
86
+ const outputPath = normalizedPath.replace(this.options.dir, this.outputDirWebp);
87
+ await promises_1.default.mkdir(path_1.default.dirname(outputPath), { recursive: true });
88
+ await promises_1.default.copyFile(normalizedPath, outputPath);
89
+ return {
90
+ success: true,
91
+ input: inputPath,
92
+ output: outputPath,
93
+ };
94
+ }
95
+ // Convert image to WebP
96
+ const result = await (0, diginext_img_magic_1.convertToWebpByPath)(normalizedPath, {
97
+ maxSize: this.options.maxsize,
98
+ small: this.options.thumb,
99
+ });
100
+ // Handle main WebP file
101
+ const webpOutputPath = normalizedPath.replace(this.options.dir, this.outputDirWebp).replace(`.${fileExt}`, ".webp");
102
+ await promises_1.default.mkdir(path_1.default.dirname(webpOutputPath), { recursive: true });
103
+ await promises_1.default.copyFile(result.large, webpOutputPath);
104
+ await promises_1.default.rm(result.large);
105
+ // Handle thumbnail if requested
106
+ if (this.options.thumb && result.small) {
107
+ const thumbOutputPath = normalizedPath.replace(this.options.dir, this.outputDirThumb).replace(`.${fileExt}`, ".webp");
108
+ await promises_1.default.mkdir(path_1.default.dirname(thumbOutputPath), { recursive: true });
109
+ await promises_1.default.copyFile(result.small, thumbOutputPath);
110
+ await promises_1.default.rm(result.small);
111
+ }
112
+ return {
113
+ success: true,
114
+ input: inputPath,
115
+ output: webpOutputPath,
116
+ };
112
117
  }
113
- //
114
- index = -1;
115
- for (let i = 0; i < MAX_PROCESSING; i++) {
116
- walkOne();
118
+ catch (error) {
119
+ return {
120
+ success: false,
121
+ input: inputPath,
122
+ error: error instanceof Error ? error.message : String(error),
123
+ };
117
124
  }
118
- };
119
- const walkOne = async () => {
120
- //
121
- index++;
122
- if (index == list.length) {
123
- index++;
124
- setTimeout(() => {
125
- try {
126
- fs_1.default.rmSync(".temp", { recursive: true });
127
- console.log("DONE !");
125
+ }
126
+ createWorker() {
127
+ return async (task) => {
128
+ try {
129
+ const result = await this.convertSingleImage(task);
130
+ this.results.push(result);
131
+ this.processedCount++;
132
+ if (!result.success) {
133
+ console.error(`❌ Failed to convert ${task.inputPath}: ${result.error}`);
128
134
  }
129
- catch (error) {
130
- console.error(`metname error`, error);
135
+ else {
136
+ console.log(`✔ [${this.processedCount}/${task.total}] Completed: ${path_1.default.basename(task.inputPath)}`);
131
137
  }
132
- }, 5000);
133
- return;
138
+ }
139
+ catch (error) {
140
+ const errorResult = {
141
+ success: false,
142
+ input: task.inputPath,
143
+ error: error instanceof Error ? error.message : String(error),
144
+ };
145
+ this.results.push(errorResult);
146
+ this.processedCount++;
147
+ console.error(`❌ Worker error for ${task.inputPath}:`, error);
148
+ }
149
+ };
150
+ }
151
+ async processWithQueue(files) {
152
+ return new Promise((resolve, reject) => {
153
+ const concurrency = this.options.concurrency || 10;
154
+ console.log(`🚀 Starting conversion of ${files.length} files with concurrency: ${concurrency}`);
155
+ // Create the queue with our worker function
156
+ const q = (0, async_1.queue)(this.createWorker(), concurrency);
157
+ // Set up queue event handlers
158
+ q.error((error, task) => {
159
+ console.error("Queue error occurred:", error);
160
+ console.error("Failed task:", task);
161
+ });
162
+ q.drain(() => {
163
+ console.log("\n🎯 All tasks completed!");
164
+ resolve(this.results);
165
+ });
166
+ // Add progress monitoring
167
+ // let lastProgress = 0;
168
+ // q.saturated(() => {
169
+ // console.log("🔥 Queue is running at full capacity");
170
+ // });
171
+ q.empty(() => {
172
+ console.log("📭 Queue is empty, waiting for workers to finish...");
173
+ });
174
+ // Create tasks and add them to the queue
175
+ const tasks = files.map((file, index) => ({
176
+ inputPath: file,
177
+ index: index + 1,
178
+ total: files.length,
179
+ }));
180
+ // Add all tasks to the queue
181
+ q.push(tasks, (error) => {
182
+ if (error) {
183
+ console.error("Task completion error:", error);
184
+ }
185
+ });
186
+ // Handle the case where there are no files
187
+ if (files.length === 0) {
188
+ resolve([]);
189
+ }
190
+ });
191
+ }
192
+ async cleanup() {
193
+ try {
194
+ if (fs_1.default.existsSync(".temp")) {
195
+ await promises_1.default.rm(".temp", { recursive: true });
196
+ }
134
197
  }
135
- if (index >= list.length) {
136
- return;
198
+ catch (error) {
199
+ console.warn("⚠️ Warning: Failed to cleanup temp directory:", error);
137
200
  }
138
- await convertOneObject(list[index]);
139
- walkOne();
140
- };
141
- const convertOneObject = async (url) => {
142
- if (!url) {
143
- return;
201
+ }
202
+ printSummary(results) {
203
+ const successful = results.filter((r) => r.success).length;
204
+ const failed = results.filter((r) => !r.success).length;
205
+ console.log("\n" + "=".repeat(50));
206
+ console.log("📊 CONVERSION SUMMARY");
207
+ console.log("=".repeat(50));
208
+ console.log(`✔ Successful: ${successful}`);
209
+ console.log(`❌ Failed: ${failed}`);
210
+ console.log(`📁 Output directory: ${this.outputDirWebp}`);
211
+ if (this.options.thumb) {
212
+ console.log(`🖼️ Thumbnail directory: ${this.outputDirThumb}`);
144
213
  }
145
- console.log(`${index + 1}/${list.length}: ${url}`);
146
- url = url.replace("\\", "/");
147
- const fileExt = (0, url_1.getFileExtension)(url);
148
- const supported = (0, isImageSupported_1.default)(url);
149
- if (!supported) {
150
- fs_1.default.cpSync(url, url.replace(dirName, dirFolderWebp), { recursive: true });
151
- return;
214
+ if (failed > 0) {
215
+ console.log("\n❌ Failed conversions:");
216
+ results.filter((r) => !r.success).forEach((r) => console.log(` • ${path_1.default.basename(r.input)}: ${r.error}`));
152
217
  }
218
+ console.log("=".repeat(50));
219
+ }
220
+ async convert() {
153
221
  try {
154
- const res = await (0, diginext_img_magic_1.convertToWebpByPath)(url, { maxSize, small: isCreateThumb });
155
- const large = res.large;
156
- fs_1.default.cpSync(large, url.replace(dirName, dirFolderWebp).replace(`.${fileExt}`, ".webp"), { recursive: true });
157
- fs_1.default.rmSync(large);
158
- if (isCreateThumb) {
159
- const small = res.small;
160
- fs_1.default.cpSync(small, url.replace(dirName, dirFolderThumb).replace(`.${fileExt}`, ".webp"), { recursive: true });
161
- fs_1.default.rmSync(small);
222
+ // Reset state
223
+ this.results = [];
224
+ this.processedCount = 0;
225
+ // Validate input directory
226
+ await this.validateDirectory();
227
+ // Get all files
228
+ const files = (0, getAllFiles_1.default)(this.options.dir);
229
+ if (files.length === 0) {
230
+ console.log("📂 No files found in the specified directory.");
231
+ return;
232
+ }
233
+ // Check for duplicate names
234
+ const duplicates = this.checkForDuplicateNames(files);
235
+ if (duplicates.length > 0) {
236
+ throw new Error("Cannot proceed: Found files with duplicate names but different extensions.");
162
237
  }
238
+ // Setup output directories
239
+ await this.ensureDirectoryExists(this.outputDirWebp);
240
+ if (this.options.thumb) {
241
+ await this.ensureDirectoryExists(this.outputDirThumb);
242
+ }
243
+ // Process files using async queue
244
+ const results = await this.processWithQueue(files);
245
+ // Cleanup and summary
246
+ await this.cleanup();
247
+ this.printSummary(results);
163
248
  }
164
249
  catch (error) {
165
- console.error(`convertOneObject error`, error);
250
+ console.error("💥 Conversion failed:", error instanceof Error ? error.message : String(error));
251
+ throw error;
166
252
  }
253
+ }
254
+ }
255
+ async function parseArguments() {
256
+ const argv = await (0, yargs_1.default)(process.argv.slice(2))
257
+ .usage("Usage: $0 [options]")
258
+ .example('$0 --dir "./images" --thumb --maxsize 2048 --concurrency 5', "Convert images with 5 concurrent workers")
259
+ .option("dir", {
260
+ alias: "d",
261
+ describe: "Source directory containing images",
262
+ type: "string",
263
+ demandOption: true,
264
+ })
265
+ .option("thumb", {
266
+ alias: "t",
267
+ describe: "Generate thumbnails",
268
+ type: "boolean",
269
+ default: false,
270
+ })
271
+ .option("maxsize", {
272
+ alias: "m",
273
+ describe: "Maximum size for converted images",
274
+ type: "number",
275
+ default: 4096,
276
+ })
277
+ .option("concurrency", {
278
+ alias: "c",
279
+ describe: "Number of concurrent workers",
280
+ type: "number",
281
+ default: 12,
282
+ })
283
+ .help("h")
284
+ .alias("h", "help")
285
+ .epilog(`Version: ${version}`)
286
+ .parseAsync();
287
+ return {
288
+ dir: argv.dir,
289
+ thumb: argv.thumb,
290
+ maxsize: argv.maxsize,
291
+ concurrency: argv.concurrency,
167
292
  };
168
- startConvert();
169
- //
170
- })();
293
+ }
294
+ async function main() {
295
+ try {
296
+ console.log(`🎨 Image Converter v${version}`);
297
+ console.log("=".repeat(30));
298
+ const options = await parseArguments();
299
+ console.log(`📁 Source: ${options.dir}`);
300
+ console.log(`📏 Max size: ${options.maxsize}px`);
301
+ console.log(`🖼️ Generate thumbnails: ${options.thumb ? "Yes" : "No"}`);
302
+ console.log(`⚡ Concurrency: ${options.concurrency}`);
303
+ console.log("=".repeat(30));
304
+ const converter = new ImageConverter(options);
305
+ await converter.convert();
306
+ console.log("🎉 All done!");
307
+ }
308
+ catch (error) {
309
+ console.error("💥 Application error:", error instanceof Error ? error.message : String(error));
310
+ process.exit(1);
311
+ }
312
+ }
313
+ // Handle unhandled promise rejections
314
+ process.on("unhandledRejection", (reason, promise) => {
315
+ console.error("Unhandled Rejection at:", promise, "reason:", reason);
316
+ process.exit(1);
317
+ });
318
+ // Run the application
319
+ main();
171
320
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/esm/index.js CHANGED
@@ -1,166 +1,315 @@
1
1
  import yargs from "yargs";
2
- import fs from "fs";
2
+ import fs from "fs/promises";
3
+ import fsSync from "fs";
4
+ import path from "path";
5
+ import { queue } from "async";
3
6
  import { convertToWebpByPath } from "diginext-img-magic";
4
7
  import isImageSupported from "diginext-img-magic/dist/compress/isImageSupported";
5
8
  import { getFileExtension, getFileNameWithoutExtension } from "diginext-utils/dist/string/url";
6
9
  import getAllFiles from "./plugins/getAllFiles";
7
- import { toBool, toInt } from "diginext-utils/dist/object";
8
10
  const { version } = require("../package.json");
9
- (async () => {
10
- //
11
- const argv = yargs(process.argv.slice(2))
12
- .usage("Usage: $0 <command> [options]")
13
- .example('$0 --dir "dir"', "")
14
- .alias("d", "dir")
15
- .describe("d", "Directory")
16
- .option("dir", {
17
- string: true,
18
- })
19
- .alias("t", "thumb")
20
- .describe("t", "Thumb")
21
- .option("thumb", {
22
- boolean: false,
23
- })
24
- .alias("m", "maxsize")
25
- .describe("m", "Max Size")
26
- .option("maxsize", {
27
- number: false,
28
- })
29
- .help("h")
30
- .alias("h", "help")
31
- .epilog(`verion: ${version}`).argv;
32
- let dirName;
33
- if (Array.isArray(argv.dir)) {
34
- dirName = argv.dir[1] === true ? "" : argv.dir[1];
35
- if (!dirName) {
36
- console.log("Need Directory!");
37
- return;
38
- }
39
- }
40
- else {
41
- dirName = argv === true ? "" : argv.dir;
42
- if (!dirName) {
43
- console.log("Need Directory!");
44
- return;
45
- }
11
+ class ImageConverter {
12
+ constructor(options) {
13
+ this.outputDirWebp = "";
14
+ this.outputDirThumb = "";
15
+ this.results = [];
16
+ this.processedCount = 0;
17
+ this.options = options;
18
+ this.setupOutputDirectories();
46
19
  }
47
- if (!fs.lstatSync(dirName).isDirectory()) {
48
- //
49
- console.log("Please Use A Directory!");
50
- return;
20
+ setupOutputDirectories() {
21
+ const normalizedDir = this.options.dir.replace(/\\/g, "/");
22
+ const folderName = getFileNameWithoutExtension(normalizedDir);
23
+ const parentDir = path.dirname(normalizedDir);
24
+ this.outputDirWebp = path.join(parentDir, `${folderName}-webp`);
25
+ this.outputDirThumb = path.join(parentDir, `${folderName}-thumb-webp`);
51
26
  }
52
- const isCreateThumb = toBool(argv.thumb);
53
- const maxSize = toInt(argv.maxsize) || 4096;
54
- console.log("Max Size: ", maxSize);
55
- dirName = dirName.replace(/\\/g, "/");
56
- const folderName = getFileNameWithoutExtension(dirName);
57
- console.log("Folder Name :>> ", folderName);
58
- const folderNameWebp = `${folderName}-webp`;
59
- const dirFolderWebp = [...dirName.split("/").slice(0, -1), folderNameWebp].join("/");
60
- const folderNameThumb = `${folderName}-thumb-webp`;
61
- const dirFolderThumb = [...dirName.split("/").slice(0, -1), folderNameThumb].join("/");
62
- console.log("Path Folder Webp :>> ", dirFolderWebp);
63
- // console.log("dirFolderThumb :>> ", dirFolderThumb);
64
- const list = getAllFiles(dirName);
65
- const checkSameName = () => {
66
- const __list = list
67
- .map((item) => {
68
- const supported = isImageSupported(item);
69
- if (supported) {
70
- return [...item.split("/").slice(0, -1), `${getFileNameWithoutExtension(item)}`].join("/");
71
- // return getFileNameWithoutExtension(item);
27
+ async ensureDirectoryExists(dirPath) {
28
+ try {
29
+ if (fsSync.existsSync(dirPath)) {
30
+ await fs.rm(dirPath, { recursive: true });
72
31
  }
73
- return null;
74
- })
75
- .filter((x) => x);
76
- const duplicate = __list.filter((item, index) => __list.indexOf(item) !== index);
77
- if (toBool(duplicate))
78
- console.log("Duplicate :>> ", duplicate);
79
- if (duplicate.length >= 1) {
80
- console.error("Tìm thấy hình giống tên nhau nhưng khác extension, không thực hiện convert !");
32
+ await fs.mkdir(dirPath, { recursive: true });
81
33
  }
82
- for (let i = 0; i < duplicate.length; i++) {
83
- const element = duplicate[i];
84
- //
85
- const ___list = list.filter((x) => {
86
- return x.indexOf(`${element}.`) >= 0;
87
- });
88
- console.log("Vui lòng đổi tên :>> ", ___list);
34
+ catch (error) {
35
+ throw new Error(`Failed to create directory ${dirPath}: ${error}`);
89
36
  }
90
- return duplicate.length >= 1;
91
- };
92
- if (checkSameName()) {
93
- return;
94
37
  }
95
- const MAX_PROCESSING = 10;
96
- let index = 0;
97
- const startConvert = () => {
98
- if (fs.existsSync(dirFolderWebp)) {
99
- fs.rmSync(dirFolderWebp, { recursive: true });
38
+ async validateDirectory() {
39
+ try {
40
+ const stats = await fs.lstat(this.options.dir);
41
+ if (!stats.isDirectory()) {
42
+ throw new Error("Path is not a directory");
43
+ }
44
+ }
45
+ catch (error) {
46
+ throw new Error(`Invalid directory: ${this.options.dir}`);
100
47
  }
101
- fs.mkdirSync(dirFolderWebp, { recursive: true });
102
- if (isCreateThumb) {
103
- if (fs.existsSync(dirFolderThumb)) {
104
- fs.rmSync(dirFolderThumb, { recursive: true });
48
+ }
49
+ checkForDuplicateNames(files) {
50
+ const nameMap = new Map();
51
+ files.forEach((file) => {
52
+ if (isImageSupported(file)) {
53
+ const nameWithoutExt = getFileNameWithoutExtension(file);
54
+ const relativePath = path.dirname(file.replace(this.options.dir, ""));
55
+ const key = path.join(relativePath, nameWithoutExt);
56
+ if (!nameMap.has(key)) {
57
+ nameMap.set(key, []);
58
+ }
59
+ nameMap.get(key).push(file);
105
60
  }
106
- fs.mkdirSync(dirFolderThumb, { recursive: true });
61
+ });
62
+ const duplicates = [];
63
+ nameMap.forEach((files, name) => {
64
+ if (files.length > 1) {
65
+ duplicates.push(...files);
66
+ console.warn(`⚠️ Duplicate names found for: ${name}`);
67
+ console.warn(` Files: ${files.join(", ")}`);
68
+ }
69
+ });
70
+ return duplicates;
71
+ }
72
+ async convertSingleImage(task) {
73
+ const { inputPath, index, total } = task;
74
+ try {
75
+ // console.log(`📸 [${index}/${total}] Processing: ${path.basename(inputPath)}`);
76
+ const normalizedPath = inputPath.replace(/\\/g, "/");
77
+ const fileExt = getFileExtension(normalizedPath);
78
+ const isSupported = isImageSupported(normalizedPath);
79
+ // Handle non-image files
80
+ if (!isSupported) {
81
+ const outputPath = normalizedPath.replace(this.options.dir, this.outputDirWebp);
82
+ await fs.mkdir(path.dirname(outputPath), { recursive: true });
83
+ await fs.copyFile(normalizedPath, outputPath);
84
+ return {
85
+ success: true,
86
+ input: inputPath,
87
+ output: outputPath,
88
+ };
89
+ }
90
+ // Convert image to WebP
91
+ const result = await convertToWebpByPath(normalizedPath, {
92
+ maxSize: this.options.maxsize,
93
+ small: this.options.thumb,
94
+ });
95
+ // Handle main WebP file
96
+ const webpOutputPath = normalizedPath.replace(this.options.dir, this.outputDirWebp).replace(`.${fileExt}`, ".webp");
97
+ await fs.mkdir(path.dirname(webpOutputPath), { recursive: true });
98
+ await fs.copyFile(result.large, webpOutputPath);
99
+ await fs.rm(result.large);
100
+ // Handle thumbnail if requested
101
+ if (this.options.thumb && result.small) {
102
+ const thumbOutputPath = normalizedPath.replace(this.options.dir, this.outputDirThumb).replace(`.${fileExt}`, ".webp");
103
+ await fs.mkdir(path.dirname(thumbOutputPath), { recursive: true });
104
+ await fs.copyFile(result.small, thumbOutputPath);
105
+ await fs.rm(result.small);
106
+ }
107
+ return {
108
+ success: true,
109
+ input: inputPath,
110
+ output: webpOutputPath,
111
+ };
107
112
  }
108
- //
109
- index = -1;
110
- for (let i = 0; i < MAX_PROCESSING; i++) {
111
- walkOne();
113
+ catch (error) {
114
+ return {
115
+ success: false,
116
+ input: inputPath,
117
+ error: error instanceof Error ? error.message : String(error),
118
+ };
112
119
  }
113
- };
114
- const walkOne = async () => {
115
- //
116
- index++;
117
- if (index == list.length) {
118
- index++;
119
- setTimeout(() => {
120
- try {
121
- fs.rmSync(".temp", { recursive: true });
122
- console.log("DONE !");
120
+ }
121
+ createWorker() {
122
+ return async (task) => {
123
+ try {
124
+ const result = await this.convertSingleImage(task);
125
+ this.results.push(result);
126
+ this.processedCount++;
127
+ if (!result.success) {
128
+ console.error(`❌ Failed to convert ${task.inputPath}: ${result.error}`);
123
129
  }
124
- catch (error) {
125
- console.error(`metname error`, error);
130
+ else {
131
+ console.log(`✔ [${this.processedCount}/${task.total}] Completed: ${path.basename(task.inputPath)}`);
126
132
  }
127
- }, 5000);
128
- return;
133
+ }
134
+ catch (error) {
135
+ const errorResult = {
136
+ success: false,
137
+ input: task.inputPath,
138
+ error: error instanceof Error ? error.message : String(error),
139
+ };
140
+ this.results.push(errorResult);
141
+ this.processedCount++;
142
+ console.error(`❌ Worker error for ${task.inputPath}:`, error);
143
+ }
144
+ };
145
+ }
146
+ async processWithQueue(files) {
147
+ return new Promise((resolve, reject) => {
148
+ const concurrency = this.options.concurrency || 10;
149
+ console.log(`🚀 Starting conversion of ${files.length} files with concurrency: ${concurrency}`);
150
+ // Create the queue with our worker function
151
+ const q = queue(this.createWorker(), concurrency);
152
+ // Set up queue event handlers
153
+ q.error((error, task) => {
154
+ console.error("Queue error occurred:", error);
155
+ console.error("Failed task:", task);
156
+ });
157
+ q.drain(() => {
158
+ console.log("\n🎯 All tasks completed!");
159
+ resolve(this.results);
160
+ });
161
+ // Add progress monitoring
162
+ // let lastProgress = 0;
163
+ // q.saturated(() => {
164
+ // console.log("🔥 Queue is running at full capacity");
165
+ // });
166
+ q.empty(() => {
167
+ console.log("📭 Queue is empty, waiting for workers to finish...");
168
+ });
169
+ // Create tasks and add them to the queue
170
+ const tasks = files.map((file, index) => ({
171
+ inputPath: file,
172
+ index: index + 1,
173
+ total: files.length,
174
+ }));
175
+ // Add all tasks to the queue
176
+ q.push(tasks, (error) => {
177
+ if (error) {
178
+ console.error("Task completion error:", error);
179
+ }
180
+ });
181
+ // Handle the case where there are no files
182
+ if (files.length === 0) {
183
+ resolve([]);
184
+ }
185
+ });
186
+ }
187
+ async cleanup() {
188
+ try {
189
+ if (fsSync.existsSync(".temp")) {
190
+ await fs.rm(".temp", { recursive: true });
191
+ }
129
192
  }
130
- if (index >= list.length) {
131
- return;
193
+ catch (error) {
194
+ console.warn("⚠️ Warning: Failed to cleanup temp directory:", error);
132
195
  }
133
- await convertOneObject(list[index]);
134
- walkOne();
135
- };
136
- const convertOneObject = async (url) => {
137
- if (!url) {
138
- return;
196
+ }
197
+ printSummary(results) {
198
+ const successful = results.filter((r) => r.success).length;
199
+ const failed = results.filter((r) => !r.success).length;
200
+ console.log("\n" + "=".repeat(50));
201
+ console.log("📊 CONVERSION SUMMARY");
202
+ console.log("=".repeat(50));
203
+ console.log(`✔ Successful: ${successful}`);
204
+ console.log(`❌ Failed: ${failed}`);
205
+ console.log(`📁 Output directory: ${this.outputDirWebp}`);
206
+ if (this.options.thumb) {
207
+ console.log(`🖼️ Thumbnail directory: ${this.outputDirThumb}`);
139
208
  }
140
- console.log(`${index + 1}/${list.length}: ${url}`);
141
- url = url.replace("\\", "/");
142
- const fileExt = getFileExtension(url);
143
- const supported = isImageSupported(url);
144
- if (!supported) {
145
- fs.cpSync(url, url.replace(dirName, dirFolderWebp), { recursive: true });
146
- return;
209
+ if (failed > 0) {
210
+ console.log("\n❌ Failed conversions:");
211
+ results.filter((r) => !r.success).forEach((r) => console.log(` • ${path.basename(r.input)}: ${r.error}`));
147
212
  }
213
+ console.log("=".repeat(50));
214
+ }
215
+ async convert() {
148
216
  try {
149
- const res = await convertToWebpByPath(url, { maxSize, small: isCreateThumb });
150
- const large = res.large;
151
- fs.cpSync(large, url.replace(dirName, dirFolderWebp).replace(`.${fileExt}`, ".webp"), { recursive: true });
152
- fs.rmSync(large);
153
- if (isCreateThumb) {
154
- const small = res.small;
155
- fs.cpSync(small, url.replace(dirName, dirFolderThumb).replace(`.${fileExt}`, ".webp"), { recursive: true });
156
- fs.rmSync(small);
217
+ // Reset state
218
+ this.results = [];
219
+ this.processedCount = 0;
220
+ // Validate input directory
221
+ await this.validateDirectory();
222
+ // Get all files
223
+ const files = getAllFiles(this.options.dir);
224
+ if (files.length === 0) {
225
+ console.log("📂 No files found in the specified directory.");
226
+ return;
227
+ }
228
+ // Check for duplicate names
229
+ const duplicates = this.checkForDuplicateNames(files);
230
+ if (duplicates.length > 0) {
231
+ throw new Error("Cannot proceed: Found files with duplicate names but different extensions.");
157
232
  }
233
+ // Setup output directories
234
+ await this.ensureDirectoryExists(this.outputDirWebp);
235
+ if (this.options.thumb) {
236
+ await this.ensureDirectoryExists(this.outputDirThumb);
237
+ }
238
+ // Process files using async queue
239
+ const results = await this.processWithQueue(files);
240
+ // Cleanup and summary
241
+ await this.cleanup();
242
+ this.printSummary(results);
158
243
  }
159
244
  catch (error) {
160
- console.error(`convertOneObject error`, error);
245
+ console.error("💥 Conversion failed:", error instanceof Error ? error.message : String(error));
246
+ throw error;
161
247
  }
248
+ }
249
+ }
250
+ async function parseArguments() {
251
+ const argv = await yargs(process.argv.slice(2))
252
+ .usage("Usage: $0 [options]")
253
+ .example('$0 --dir "./images" --thumb --maxsize 2048 --concurrency 5', "Convert images with 5 concurrent workers")
254
+ .option("dir", {
255
+ alias: "d",
256
+ describe: "Source directory containing images",
257
+ type: "string",
258
+ demandOption: true,
259
+ })
260
+ .option("thumb", {
261
+ alias: "t",
262
+ describe: "Generate thumbnails",
263
+ type: "boolean",
264
+ default: false,
265
+ })
266
+ .option("maxsize", {
267
+ alias: "m",
268
+ describe: "Maximum size for converted images",
269
+ type: "number",
270
+ default: 4096,
271
+ })
272
+ .option("concurrency", {
273
+ alias: "c",
274
+ describe: "Number of concurrent workers",
275
+ type: "number",
276
+ default: 12,
277
+ })
278
+ .help("h")
279
+ .alias("h", "help")
280
+ .epilog(`Version: ${version}`)
281
+ .parseAsync();
282
+ return {
283
+ dir: argv.dir,
284
+ thumb: argv.thumb,
285
+ maxsize: argv.maxsize,
286
+ concurrency: argv.concurrency,
162
287
  };
163
- startConvert();
164
- //
165
- })();
288
+ }
289
+ async function main() {
290
+ try {
291
+ console.log(`🎨 Image Converter v${version}`);
292
+ console.log("=".repeat(30));
293
+ const options = await parseArguments();
294
+ console.log(`📁 Source: ${options.dir}`);
295
+ console.log(`📏 Max size: ${options.maxsize}px`);
296
+ console.log(`🖼️ Generate thumbnails: ${options.thumb ? "Yes" : "No"}`);
297
+ console.log(`⚡ Concurrency: ${options.concurrency}`);
298
+ console.log("=".repeat(30));
299
+ const converter = new ImageConverter(options);
300
+ await converter.convert();
301
+ console.log("🎉 All done!");
302
+ }
303
+ catch (error) {
304
+ console.error("💥 Application error:", error instanceof Error ? error.message : String(error));
305
+ process.exit(1);
306
+ }
307
+ }
308
+ // Handle unhandled promise rejections
309
+ process.on("unhandledRejection", (reason, promise) => {
310
+ console.error("Unhandled Rejection at:", promise, "reason:", reason);
311
+ process.exit(1);
312
+ });
313
+ // Run the application
314
+ main();
166
315
  //# sourceMappingURL=index.js.map
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "diginext-img-magic-cli",
3
- "version": "0.1.6",
3
+ "version": "0.2.1",
4
4
  "sideEffects": false,
5
5
  "readme": "README.md",
6
6
  "bin": {
@@ -42,6 +42,7 @@
42
42
  "dependencies": {
43
43
  "@types/jest": "^29.4.4",
44
44
  "@types/node": "^18.15.3",
45
+ "async": "^3.2.6",
45
46
  "concurrently": "^7.6.0",
46
47
  "core-js": "^3.29.1",
47
48
  "dayjs": "^1.11.7",
@@ -60,6 +61,7 @@
60
61
  "access": "public"
61
62
  },
62
63
  "devDependencies": {
64
+ "@types/async": "^3.2.24",
63
65
  "@types/yargs": "^17.0.22",
64
66
  "eslint": "^8.36.0",
65
67
  "eslint-plugin-import": "^2.27.5",