@mediaproc/image 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/dist/commands/affine.d.ts.map +1 -1
  2. package/dist/commands/affine.js +65 -37
  3. package/dist/commands/affine.js.map +1 -1
  4. package/dist/commands/auto-enhance.d.ts.map +1 -1
  5. package/dist/commands/auto-enhance.js +74 -49
  6. package/dist/commands/auto-enhance.js.map +1 -1
  7. package/dist/commands/auto-orient.d.ts.map +1 -1
  8. package/dist/commands/auto-orient.js +60 -35
  9. package/dist/commands/auto-orient.js.map +1 -1
  10. package/dist/commands/batch.d.ts.map +1 -1
  11. package/dist/commands/batch.js +17 -34
  12. package/dist/commands/batch.js.map +1 -1
  13. package/dist/commands/blur.d.ts.map +1 -1
  14. package/dist/commands/blur.js +64 -36
  15. package/dist/commands/blur.js.map +1 -1
  16. package/dist/commands/boolean.d.ts.map +1 -1
  17. package/dist/commands/boolean.js +61 -32
  18. package/dist/commands/boolean.js.map +1 -1
  19. package/dist/commands/border.d.ts.map +1 -1
  20. package/dist/commands/border.js +60 -34
  21. package/dist/commands/border.js.map +1 -1
  22. package/dist/commands/clahe.d.ts.map +1 -1
  23. package/dist/commands/clahe.js +58 -31
  24. package/dist/commands/clahe.js.map +1 -1
  25. package/dist/commands/composite.d.ts.map +1 -1
  26. package/dist/commands/composite.js +52 -26
  27. package/dist/commands/composite.js.map +1 -1
  28. package/dist/commands/convert.d.ts.map +1 -1
  29. package/dist/commands/convert.js +94 -47
  30. package/dist/commands/convert.js.map +1 -1
  31. package/dist/commands/convolve.d.ts.map +1 -1
  32. package/dist/commands/convolve.js +63 -37
  33. package/dist/commands/convolve.js.map +1 -1
  34. package/dist/commands/crop.d.ts.map +1 -1
  35. package/dist/commands/crop.js +73 -48
  36. package/dist/commands/crop.js.map +1 -1
  37. package/dist/commands/dilate.d.ts.map +1 -1
  38. package/dist/commands/dilate.js +60 -31
  39. package/dist/commands/dilate.js.map +1 -1
  40. package/dist/commands/dominant-color.d.ts.map +1 -1
  41. package/dist/commands/dominant-color.js +154 -89
  42. package/dist/commands/dominant-color.js.map +1 -1
  43. package/dist/commands/erode.d.ts.map +1 -1
  44. package/dist/commands/erode.js +61 -32
  45. package/dist/commands/erode.js.map +1 -1
  46. package/dist/commands/extend.d.ts.map +1 -1
  47. package/dist/commands/extend.js +66 -41
  48. package/dist/commands/extend.js.map +1 -1
  49. package/dist/commands/extract.d.ts.map +1 -1
  50. package/dist/commands/extract.js +75 -45
  51. package/dist/commands/extract.js.map +1 -1
  52. package/dist/commands/flatten.d.ts.map +1 -1
  53. package/dist/commands/flatten.js +64 -38
  54. package/dist/commands/flatten.js.map +1 -1
  55. package/dist/commands/flip.d.ts.map +1 -1
  56. package/dist/commands/flip.js +78 -43
  57. package/dist/commands/flip.js.map +1 -1
  58. package/dist/commands/flop.d.ts.map +1 -1
  59. package/dist/commands/flop.js +67 -32
  60. package/dist/commands/flop.js.map +1 -1
  61. package/dist/commands/gamma.d.ts.map +1 -1
  62. package/dist/commands/gamma.js +66 -33
  63. package/dist/commands/gamma.js.map +1 -1
  64. package/dist/commands/grayscale.d.ts.map +1 -1
  65. package/dist/commands/grayscale.js +67 -34
  66. package/dist/commands/grayscale.js.map +1 -1
  67. package/dist/commands/grid.d.ts.map +1 -1
  68. package/dist/commands/grid.js +20 -14
  69. package/dist/commands/grid.js.map +1 -1
  70. package/dist/commands/linear.d.ts.map +1 -1
  71. package/dist/commands/linear.js +60 -32
  72. package/dist/commands/linear.js.map +1 -1
  73. package/dist/commands/median.d.ts.map +1 -1
  74. package/dist/commands/median.js +66 -33
  75. package/dist/commands/median.js.map +1 -1
  76. package/dist/commands/metadata-cmd.d.ts.map +1 -1
  77. package/dist/commands/metadata-cmd.js +229 -93
  78. package/dist/commands/metadata-cmd.js.map +1 -1
  79. package/dist/commands/mirror.d.ts.map +1 -1
  80. package/dist/commands/mirror.js +127 -105
  81. package/dist/commands/mirror.js.map +1 -1
  82. package/dist/commands/modulate.d.ts.map +1 -1
  83. package/dist/commands/modulate.js +64 -41
  84. package/dist/commands/modulate.js.map +1 -1
  85. package/dist/commands/negate.d.ts.map +1 -1
  86. package/dist/commands/negate.js +66 -31
  87. package/dist/commands/negate.js.map +1 -1
  88. package/dist/commands/normalize.d.ts.map +1 -1
  89. package/dist/commands/normalize.js +60 -31
  90. package/dist/commands/normalize.js.map +1 -1
  91. package/dist/commands/optimize.d.ts.map +1 -1
  92. package/dist/commands/optimize.js +68 -45
  93. package/dist/commands/optimize.js.map +1 -1
  94. package/dist/commands/palette.d.ts.map +1 -1
  95. package/dist/commands/palette.js +115 -56
  96. package/dist/commands/palette.js.map +1 -1
  97. package/dist/commands/pixelate.d.ts.map +1 -1
  98. package/dist/commands/pixelate.js +63 -35
  99. package/dist/commands/pixelate.js.map +1 -1
  100. package/dist/commands/recomb.d.ts.map +1 -1
  101. package/dist/commands/recomb.js +87 -57
  102. package/dist/commands/recomb.js.map +1 -1
  103. package/dist/commands/resize.d.ts.map +1 -1
  104. package/dist/commands/resize.js +99 -69
  105. package/dist/commands/resize.js.map +1 -1
  106. package/dist/commands/rotate.d.ts.map +1 -1
  107. package/dist/commands/rotate.js +69 -36
  108. package/dist/commands/rotate.js.map +1 -1
  109. package/dist/commands/sepia.d.ts.map +1 -1
  110. package/dist/commands/sepia.js +67 -34
  111. package/dist/commands/sepia.js.map +1 -1
  112. package/dist/commands/sharpen.d.ts.map +1 -1
  113. package/dist/commands/sharpen.js +71 -38
  114. package/dist/commands/sharpen.js.map +1 -1
  115. package/dist/commands/smart-crop.d.ts.map +1 -1
  116. package/dist/commands/smart-crop.js +50 -27
  117. package/dist/commands/smart-crop.js.map +1 -1
  118. package/dist/commands/split.d.ts.map +1 -1
  119. package/dist/commands/split.js +79 -47
  120. package/dist/commands/split.js.map +1 -1
  121. package/dist/commands/stack.d.ts.map +1 -1
  122. package/dist/commands/stack.js +19 -3
  123. package/dist/commands/stack.js.map +1 -1
  124. package/dist/commands/stats.d.ts.map +1 -1
  125. package/dist/commands/stats.js +159 -97
  126. package/dist/commands/stats.js.map +1 -1
  127. package/dist/commands/threshold.d.ts.map +1 -1
  128. package/dist/commands/threshold.js +65 -39
  129. package/dist/commands/threshold.js.map +1 -1
  130. package/dist/commands/thumbnail.d.ts.map +1 -1
  131. package/dist/commands/thumbnail.js +70 -36
  132. package/dist/commands/thumbnail.js.map +1 -1
  133. package/dist/commands/tint.d.ts.map +1 -1
  134. package/dist/commands/tint.js +66 -32
  135. package/dist/commands/tint.js.map +1 -1
  136. package/dist/commands/trim.d.ts.map +1 -1
  137. package/dist/commands/trim.js +60 -34
  138. package/dist/commands/trim.js.map +1 -1
  139. package/dist/commands/unflatten.d.ts.map +1 -1
  140. package/dist/commands/unflatten.js +63 -36
  141. package/dist/commands/unflatten.js.map +1 -1
  142. package/dist/commands/vignette.d.ts.map +1 -1
  143. package/dist/commands/vignette.js +69 -50
  144. package/dist/commands/vignette.js.map +1 -1
  145. package/dist/commands/watermark.d.ts.map +1 -1
  146. package/dist/commands/watermark.js +81 -57
  147. package/dist/commands/watermark.js.map +1 -1
  148. package/dist/utils/pathValidator.d.ts +74 -0
  149. package/dist/utils/pathValidator.d.ts.map +1 -0
  150. package/dist/utils/pathValidator.js +208 -0
  151. package/dist/utils/pathValidator.js.map +1 -0
  152. package/package.json +12 -5
@@ -1,7 +1,7 @@
1
1
  import chalk from 'chalk';
2
2
  import ora from 'ora';
3
3
  import path from 'path';
4
- import fs from 'fs';
4
+ import { validatePaths, resolveOutputPaths, MediaExtensions } from '../utils/pathValidator.js';
5
5
  import { createSharpInstance } from '../utils/sharp.js';
6
6
  import { createStandardHelp } from '../utils/helpFormatter.js';
7
7
  export function flipCommand(imageCmd) {
@@ -42,63 +42,98 @@ export function flipCommand(imageCmd) {
42
42
  });
43
43
  process.exit(0);
44
44
  }
45
- const spinner = ora('Processing image...').start();
45
+ const spinner = ora('Validating inputs...').start();
46
46
  try {
47
- if (!fs.existsSync(input)) {
48
- spinner.fail(chalk.red(`Input file not found: ${input}`));
49
- process.exit(1);
50
- }
51
47
  if (!options.horizontal && !options.vertical && !options.both) {
52
48
  options.horizontal = true;
53
49
  }
54
- const inputPath = path.parse(input);
50
+ const { inputFiles, outputDir, errors } = validatePaths(input, options.output, {
51
+ allowedExtensions: MediaExtensions.IMAGE,
52
+ recursive: true,
53
+ });
54
+ if (errors.length > 0) {
55
+ spinner.fail(chalk.red('Validation failed:'));
56
+ errors.forEach(err => console.log(chalk.red(` ✗ ${err}`)));
57
+ process.exit(1);
58
+ }
59
+ if (inputFiles.length === 0) {
60
+ spinner.fail(chalk.red('No valid image files found'));
61
+ process.exit(1);
62
+ }
55
63
  const flipType = options.both ? 'both' : options.vertical ? 'vertical' : 'horizontal';
56
- const outputPath = options.output || path.join(process.cwd(), `${inputPath.name}-flipped-${flipType}${inputPath.ext}`);
64
+ const outputPaths = resolveOutputPaths(inputFiles, outputDir, {
65
+ suffix: '-flipped',
66
+ preserveStructure: inputFiles.length > 1,
67
+ });
68
+ spinner.succeed(chalk.green(`Found ${inputFiles.length} image(s) to process`));
57
69
  if (options.verbose) {
58
- spinner.info(chalk.blue('Configuration:'));
59
- console.log(chalk.dim(` Input: ${input}`));
60
- console.log(chalk.dim(` Output: ${outputPath}`));
70
+ console.log(chalk.blue('\nConfiguration:'));
61
71
  console.log(chalk.dim(` Mode: ${flipType}`));
62
- spinner.start('Processing...');
72
+ console.log(chalk.dim(` Quality: ${options.quality || 90}`));
63
73
  }
64
74
  if (options.dryRun) {
65
- spinner.info(chalk.yellow('Dry run mode - no changes will be made'));
66
- console.log(chalk.green('✓ Would flip image:'));
67
- console.log(chalk.dim(` From: ${input}`));
68
- console.log(chalk.dim(` To: ${outputPath}`));
69
- console.log(chalk.dim(` Mode: ${flipType}`));
75
+ console.log(chalk.yellow('\nDry run mode - no changes will be made\n'));
76
+ console.log(chalk.green(`Would process ${inputFiles.length} image(s):`));
77
+ inputFiles.forEach((inputFile, index) => {
78
+ const outputPath = outputPaths.get(inputFile);
79
+ console.log(chalk.dim(` ${index + 1}. ${path.basename(inputFile)} → ${path.basename(outputPath)}`));
80
+ });
70
81
  return;
71
82
  }
72
- const metadata = await createSharpInstance(input).metadata();
73
- let pipeline = createSharpInstance(input);
74
- if (options.both) {
75
- pipeline = pipeline.flip().flop();
76
- }
77
- else if (options.vertical) {
78
- pipeline = pipeline.flip();
79
- }
80
- else {
81
- pipeline = pipeline.flop();
82
- }
83
- const outputExt = path.extname(outputPath).toLowerCase();
84
- if (outputExt === '.jpg' || outputExt === '.jpeg') {
85
- pipeline.jpeg({ quality: options.quality || 90 });
86
- }
87
- else if (outputExt === '.png') {
88
- pipeline.png({ quality: options.quality || 90 });
83
+ let successCount = 0;
84
+ let failCount = 0;
85
+ for (const [index, inputFile] of inputFiles.entries()) {
86
+ const outputPath = outputPaths.get(inputFile);
87
+ const fileName = path.basename(inputFile);
88
+ spinner.start(`Processing ${index + 1}/${inputFiles.length}: ${fileName}...`);
89
+ try {
90
+ const metadata = await createSharpInstance(inputFile).metadata();
91
+ let pipeline = createSharpInstance(inputFile);
92
+ if (options.both) {
93
+ pipeline = pipeline.flip().flop();
94
+ }
95
+ else if (options.vertical) {
96
+ pipeline = pipeline.flip();
97
+ }
98
+ else {
99
+ pipeline = pipeline.flop();
100
+ }
101
+ const outputExt = path.extname(outputPath).toLowerCase();
102
+ if (outputExt === '.jpg' || outputExt === '.jpeg') {
103
+ pipeline.jpeg({ quality: options.quality || 90 });
104
+ }
105
+ else if (outputExt === '.png') {
106
+ pipeline.png({ quality: options.quality || 90 });
107
+ }
108
+ else if (outputExt === '.webp') {
109
+ pipeline.webp({ quality: options.quality || 90 });
110
+ }
111
+ await pipeline.toFile(outputPath);
112
+ if (options.verbose) {
113
+ spinner.succeed(chalk.green(`✓ ${fileName} processed (${metadata.width}x${metadata.height})`));
114
+ }
115
+ else {
116
+ spinner.succeed(chalk.green(`✓ ${fileName} processed`));
117
+ }
118
+ successCount++;
119
+ }
120
+ catch (error) {
121
+ spinner.fail(chalk.red(`✗ Failed: ${fileName}`));
122
+ if (options.verbose && error instanceof Error) {
123
+ console.log(chalk.red(` Error: ${error.message}`));
124
+ }
125
+ failCount++;
126
+ }
89
127
  }
90
- else if (outputExt === '.webp') {
91
- pipeline.webp({ quality: options.quality || 90 });
128
+ console.log(chalk.bold('\nSummary:'));
129
+ console.log(chalk.green(` ✓ Success: ${successCount}`));
130
+ if (failCount > 0) {
131
+ console.log(chalk.red(` ✗ Failed: ${failCount}`));
92
132
  }
93
- await pipeline.toFile(outputPath);
94
- spinner.succeed(chalk.green('✓ Image flipped successfully!'));
95
- console.log(chalk.dim(` Input: ${input}`));
96
- console.log(chalk.dim(` Output: ${outputPath}`));
97
- console.log(chalk.dim(` Size: ${metadata.width}x${metadata.height}`));
98
- console.log(chalk.dim(` Mode: ${flipType} flip`));
133
+ console.log(chalk.dim(` Output directory: ${outputDir}`));
99
134
  }
100
135
  catch (error) {
101
- spinner.fail(chalk.red('Failed to flip image'));
136
+ spinner.fail(chalk.red('Processing failed'));
102
137
  if (options.verbose) {
103
138
  console.error(chalk.red('Error details:'), error);
104
139
  }
@@ -1 +1 @@
1
- {"version":3,"file":"flip.js","sourceRoot":"","sources":["../../src/commands/flip.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flip.js","sourceRoot":"","sources":["../../src/commands/flip.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAS/D,MAAM,UAAU,WAAW,CAAC,QAAiB;IAC3C,QAAQ;SACL,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,cAAc,EAAE,uCAAuC,CAAC;SAC/D,MAAM,CAAC,YAAY,EAAE,qCAAqC,CAAC;SAC3D,MAAM,CAAC,QAAQ,EAAE,qDAAqD,CAAC;SACvE,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;SACjD,MAAM,CAAC,yBAAyB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,EAAE,CAAC;SAClE,MAAM,CAAC,WAAW,EAAE,2CAA2C,CAAC;SAChE,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC;SACzC,MAAM,CAAC,QAAQ,EAAE,+BAA+B,CAAC;SACjD,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,OAAoB,EAAE,EAAE;QACpD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,kBAAkB,CAAC;gBACjB,WAAW,EAAE,MAAM;gBACnB,KAAK,EAAE,IAAI;gBACX,WAAW,EAAE,6GAA6G;gBAC1H,KAAK,EAAE,CAAC,2BAA2B,EAAE,yBAAyB,EAAE,qBAAqB,CAAC;gBACtF,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,uCAAuC,EAAE;oBAC9E,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,qCAAqC,EAAE;oBAC1E,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8CAA8C,EAAE;oBAC/E,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,mDAAmD,EAAE;oBACjG,EAAE,IAAI,EAAE,yBAAyB,EAAE,WAAW,EAAE,oCAAoC,EAAE;oBACtF,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,mCAAmC,EAAE;oBACvE,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,sBAAsB,EAAE;iBAC/D;gBACD,QAAQ,EAAE;oBACR,EAAE,OAAO,EAAE,6BAA6B,EAAE,WAAW,EAAE,iCAAiC,EAAE;oBAC1F,EAAE,OAAO,EAAE,2BAA2B,EAAE,WAAW,EAAE,wBAAwB,EAAE;oBAC/E,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,sCAAsC,EAAE;oBACvF,EAAE,OAAO,EAAE,8BAA8B,EAAE,WAAW,EAAE,8BAA8B,EAAE;iBACzF;gBACD,IAAI,EAAE,CAAC,mDAAmD,EAAE,+BAA+B,CAAC;aAC7F,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEpD,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC9D,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;YAC5B,CAAC;YAED,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE;gBAC7E,iBAAiB,EAAE,eAAe,CAAC,KAAK;gBACxC,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBAC9C,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;gBACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC;YAEtF,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE;gBAC5D,MAAM,EAAE,UAAU;gBAClB,iBAAiB,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC;aACzC,CAAC,CAAC;YAEH,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,UAAU,CAAC,MAAM,sBAAsB,CAAC,CAAC,CAAC;YAE/E,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;YAChE,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC,CAAC;gBACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,UAAU,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC;gBACzE,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;oBACtC,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAW,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxG,CAAC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,IAAI,SAAS,GAAG,CAAC,CAAC;YAElB,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;gBACtD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;gBAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAE1C,OAAO,CAAC,KAAK,CAAC,cAAc,KAAK,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,KAAK,CAAC,CAAC;gBAE9E,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;oBACjE,IAAI,QAAQ,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;oBAE9C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;wBACjB,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;oBACpC,CAAC;yBAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;wBAC5B,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAC7B,CAAC;yBAAM,CAAC;wBACN,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAC7B,CAAC;oBAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;oBACzD,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;wBAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;oBACpD,CAAC;yBAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;wBAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;oBACnD,CAAC;yBAAM,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;wBACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;oBACpD,CAAC;oBAED,MAAM,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;oBAElC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;wBACpB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,QAAQ,eAAe,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACjG,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,QAAQ,YAAY,CAAC,CAAC,CAAC;oBAC1D,CAAC;oBACD,YAAY,EAAE,CAAC;gBACjB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC,CAAC;oBACjD,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;wBAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBACxD,CAAC;oBACD,SAAS,EAAE,CAAC;gBACd,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,YAAY,EAAE,CAAC,CAAC,CAAC;YACzD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,SAAS,EAAE,CAAC,CAAC,CAAC;QAE7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAC7C,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"flop.d.ts","sourceRoot":"","sources":["../../src/commands/flop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,wBAAgB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAuFnD"}
1
+ {"version":3,"file":"flop.d.ts","sourceRoot":"","sources":["../../src/commands/flop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,wBAAgB,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CA+HnD"}
@@ -1,7 +1,7 @@
1
1
  import chalk from 'chalk';
2
2
  import ora from 'ora';
3
3
  import path from 'path';
4
- import fs from 'fs';
4
+ import { validatePaths, resolveOutputPaths, MediaExtensions } from '../utils/pathValidator.js';
5
5
  import { createSharpInstance } from '../utils/sharp.js';
6
6
  import { createStandardHelp } from '../utils/helpFormatter.js';
7
7
  export function flopCommand(imageCmd) {
@@ -35,49 +35,84 @@ export function flopCommand(imageCmd) {
35
35
  });
36
36
  });
37
37
  cmd.action(async (input, options) => {
38
- const spinner = ora('Processing image...').start();
38
+ const spinner = ora('Validating inputs...').start();
39
39
  try {
40
- if (!fs.existsSync(input)) {
41
- spinner.fail(chalk.red(`Input file not found: ${input}`));
40
+ const { inputFiles, outputDir, errors } = validatePaths(input, options.output, {
41
+ allowedExtensions: MediaExtensions.IMAGE,
42
+ recursive: true,
43
+ });
44
+ if (errors.length > 0) {
45
+ spinner.fail(chalk.red('Validation failed:'));
46
+ errors.forEach(err => console.log(chalk.red(` ✗ ${err}`)));
42
47
  process.exit(1);
43
48
  }
44
- const inputPath = path.parse(input);
45
- const outputPath = options.output || path.join(process.cwd(), `${inputPath.name}-flopped${inputPath.ext}`);
49
+ if (inputFiles.length === 0) {
50
+ spinner.fail(chalk.red('No valid image files found'));
51
+ process.exit(1);
52
+ }
53
+ const outputPaths = resolveOutputPaths(inputFiles, outputDir, {
54
+ suffix: '-flopped',
55
+ preserveStructure: inputFiles.length > 1,
56
+ });
57
+ spinner.succeed(chalk.green(`Found ${inputFiles.length} image(s) to process`));
46
58
  if (options.verbose) {
47
- spinner.info(chalk.blue('Configuration:'));
48
- console.log(chalk.dim(` Input: ${input}`));
49
- console.log(chalk.dim(` Output: ${outputPath}`));
50
- spinner.start('Processing...');
59
+ console.log(chalk.blue('\nConfiguration:'));
60
+ console.log(chalk.dim(` Quality: ${options.quality || 90}`));
51
61
  }
52
62
  if (options.dryRun) {
53
- spinner.info(chalk.yellow('Dry run mode - no changes will be made'));
54
- console.log(chalk.green('✓ Would flop image:'));
55
- console.log(chalk.dim(` From: ${input}`));
56
- console.log(chalk.dim(` To: ${outputPath}`));
63
+ console.log(chalk.yellow('\nDry run mode - no changes will be made\n'));
64
+ console.log(chalk.green(`Would process ${inputFiles.length} image(s):`));
65
+ inputFiles.forEach((inputFile, index) => {
66
+ const outputPath = outputPaths.get(inputFile);
67
+ console.log(chalk.dim(` ${index + 1}. ${path.basename(inputFile)} → ${path.basename(outputPath)}`));
68
+ });
57
69
  return;
58
70
  }
59
- const metadata = await createSharpInstance(input).metadata();
60
- const pipeline = createSharpInstance(input).flop();
61
- const outputExt = path.extname(outputPath).toLowerCase();
62
- if (outputExt === '.jpg' || outputExt === '.jpeg') {
63
- pipeline.jpeg({ quality: options.quality || 90 });
64
- }
65
- else if (outputExt === '.png') {
66
- pipeline.png({ quality: options.quality || 90 });
71
+ let successCount = 0;
72
+ let failCount = 0;
73
+ for (const [index, inputFile] of inputFiles.entries()) {
74
+ const outputPath = outputPaths.get(inputFile);
75
+ const fileName = path.basename(inputFile);
76
+ spinner.start(`Processing ${index + 1}/${inputFiles.length}: ${fileName}...`);
77
+ try {
78
+ const metadata = await createSharpInstance(inputFile).metadata();
79
+ const pipeline = createSharpInstance(inputFile).flop();
80
+ const outputExt = path.extname(outputPath).toLowerCase();
81
+ if (outputExt === '.jpg' || outputExt === '.jpeg') {
82
+ pipeline.jpeg({ quality: options.quality || 90 });
83
+ }
84
+ else if (outputExt === '.png') {
85
+ pipeline.png({ quality: options.quality || 90 });
86
+ }
87
+ else if (outputExt === '.webp') {
88
+ pipeline.webp({ quality: options.quality || 90 });
89
+ }
90
+ await pipeline.toFile(outputPath);
91
+ if (options.verbose) {
92
+ spinner.succeed(chalk.green(`✓ ${fileName} processed (${metadata.width}x${metadata.height})`));
93
+ }
94
+ else {
95
+ spinner.succeed(chalk.green(`✓ ${fileName} processed`));
96
+ }
97
+ successCount++;
98
+ }
99
+ catch (error) {
100
+ spinner.fail(chalk.red(`✗ Failed: ${fileName}`));
101
+ if (options.verbose && error instanceof Error) {
102
+ console.log(chalk.red(` Error: ${error.message}`));
103
+ }
104
+ failCount++;
105
+ }
67
106
  }
68
- else if (outputExt === '.webp') {
69
- pipeline.webp({ quality: options.quality || 90 });
107
+ console.log(chalk.bold('\nSummary:'));
108
+ console.log(chalk.green(` ✓ Success: ${successCount}`));
109
+ if (failCount > 0) {
110
+ console.log(chalk.red(` ✗ Failed: ${failCount}`));
70
111
  }
71
- await pipeline.toFile(outputPath);
72
- const outputStats = fs.statSync(outputPath);
73
- spinner.succeed(chalk.green('✓ Image flopped successfully!'));
74
- console.log(chalk.dim(` Input: ${input}`));
75
- console.log(chalk.dim(` Output: ${outputPath}`));
76
- console.log(chalk.dim(` Size: ${metadata.width}x${metadata.height}`));
77
- console.log(chalk.dim(` File size: ${(outputStats.size / 1024).toFixed(2)} KB`));
112
+ console.log(chalk.dim(` Output directory: ${outputDir}`));
78
113
  }
79
114
  catch (error) {
80
- spinner.fail(chalk.red('Failed to flop image'));
115
+ spinner.fail(chalk.red('Processing failed'));
81
116
  const errorMessage = error instanceof Error ? error.message : String(error);
82
117
  console.error(chalk.red(errorMessage));
83
118
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"file":"flop.js","sourceRoot":"","sources":["../../src/commands/flop.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAI/D,MAAM,UAAU,WAAW,CAAC,QAAiB;IAC3C,MAAM,GAAG,GAAG,QAAQ;SACjB,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;SACjD,MAAM,CAAC,yBAAyB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,EAAE,CAAC;SAClE,MAAM,CAAC,WAAW,EAAE,2CAA2C,CAAC;SAChE,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;IAE7C,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE;QAC5B,OAAO,IAAI,GAAG,kBAAkB,CAAC;YAC3B,WAAW,EAAE,MAAM;YACnB,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,+FAA+F;YAC5G,KAAK,EAAE,CAAC,cAAc,EAAE,4BAA4B,CAAC;YACrD,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,mDAAmD,EAAE;gBACjG,EAAE,IAAI,EAAE,yBAAyB,EAAE,WAAW,EAAE,oCAAoC,EAAE;gBACtF,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,mCAAmC,EAAE;gBACvE,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,sBAAsB,EAAE;aAC/D;YACD,QAAQ,EAAE;gBACR,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,yBAAyB,EAAE;gBACrE,EAAE,OAAO,EAAE,kCAAkC,EAAE,WAAW,EAAE,8BAA8B,EAAE;aAC7F;YACD,IAAI,EAAE;gBACJ,wCAAwC;gBACxC,mDAAmD;aACpD;SACF,CAAC,CAAC;IACT,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,OAAoB,EAAE,EAAE;QACrD,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEnD,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,SAAS,CAAC,IAAI,WAAW,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;YAE3G,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,UAAU,EAAE,CAAC,CAAC,CAAC;gBAClD,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACjC,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,wCAAwC,CAAC,CAAC,CAAC;gBACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC7D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YAEnD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;YACzD,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;gBAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;YACpD,CAAC;iBAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;YACnD,CAAC;iBAAM,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;gBACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;YACpD,CAAC;YAED,MAAM,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAElC,MAAM,WAAW,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAE5C,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,UAAU,EAAE,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACpF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAChD,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"flop.js","sourceRoot":"","sources":["../../src/commands/flop.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"gamma.d.ts","sourceRoot":"","sources":["../../src/commands/gamma.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAmIpD"}
1
+ {"version":3,"file":"gamma.d.ts","sourceRoot":"","sources":["../../src/commands/gamma.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAwKpD"}
@@ -1,7 +1,7 @@
1
1
  import chalk from 'chalk';
2
2
  import ora from 'ora';
3
3
  import path from 'path';
4
- import fs from 'fs';
4
+ import { validatePaths, resolveOutputPaths, MediaExtensions } from '../utils/pathValidator.js';
5
5
  import { createSharpInstance } from '../utils/sharp.js';
6
6
  import { createStandardHelp } from '../utils/helpFormatter.js';
7
7
  export function gammaCommand(imageCmd) {
@@ -67,52 +67,85 @@ export function gammaCommand(imageCmd) {
67
67
  });
68
68
  process.exit(0);
69
69
  }
70
- const spinner = ora('Processing image...').start();
70
+ const spinner = ora('Validating inputs...').start();
71
71
  try {
72
- if (!fs.existsSync(input)) {
73
- spinner.fail(chalk.red(`Input file not found: ${input}`));
72
+ const { inputFiles, outputDir, errors } = validatePaths(input, options.output, {
73
+ allowedExtensions: MediaExtensions.IMAGE,
74
+ recursive: true,
75
+ });
76
+ if (errors.length > 0) {
77
+ spinner.fail(chalk.red('Validation failed:'));
78
+ errors.forEach(err => console.log(chalk.red(` ✗ ${err}`)));
79
+ process.exit(1);
80
+ }
81
+ if (inputFiles.length === 0) {
82
+ spinner.fail(chalk.red('No valid image files found'));
74
83
  process.exit(1);
75
84
  }
76
- const inputPath = path.parse(input);
77
- const outputPath = options.output || path.join(process.cwd(), `${inputPath.name}-gamma${inputPath.ext}`);
85
+ const outputPaths = resolveOutputPaths(inputFiles, outputDir, {
86
+ suffix: '-gamma',
87
+ preserveStructure: inputFiles.length > 1,
88
+ });
89
+ spinner.succeed(chalk.green(`Found ${inputFiles.length} image(s) to process`));
78
90
  if (options.verbose) {
79
- spinner.info(chalk.blue('Configuration:'));
80
- console.log(chalk.dim(` Input: ${input}`));
81
- console.log(chalk.dim(` Output: ${outputPath}`));
91
+ console.log(chalk.blue('\nConfiguration:'));
82
92
  console.log(chalk.dim(` Gamma: ${options.gamma || 2.2}`));
83
93
  if (options.gammaOut) {
84
94
  console.log(chalk.dim(` Gamma out: ${options.gammaOut}`));
85
95
  }
86
- spinner.start('Processing...');
96
+ console.log(chalk.dim(` Quality: ${options.quality || 90}`));
87
97
  }
88
98
  if (options.dryRun) {
89
- spinner.info(chalk.yellow('Dry run mode - no changes will be made'));
90
- console.log(chalk.green('✓ Would apply gamma correction:'));
91
- console.log(chalk.dim(` From: ${input}`));
92
- console.log(chalk.dim(` To: ${outputPath}`));
93
- console.log(chalk.dim(` Gamma: ${options.gamma || 2.2}`));
99
+ console.log(chalk.yellow('\nDry run mode - no changes will be made\n'));
100
+ console.log(chalk.green(`Would process ${inputFiles.length} image(s):`));
101
+ inputFiles.forEach((inputFile, index) => {
102
+ const outputPath = outputPaths.get(inputFile);
103
+ console.log(chalk.dim(` ${index + 1}. ${path.basename(inputFile)} ${path.basename(outputPath)}`));
104
+ });
94
105
  return;
95
106
  }
96
- const metadata = await createSharpInstance(input).metadata();
97
- const pipeline = createSharpInstance(input).gamma(options.gamma || 2.2, options.gammaOut);
98
- const outputExt = path.extname(outputPath).toLowerCase();
99
- if (outputExt === '.jpg' || outputExt === '.jpeg') {
100
- pipeline.jpeg({ quality: options.quality || 90 });
101
- }
102
- else if (outputExt === '.png') {
103
- pipeline.png({ quality: options.quality || 90 });
107
+ let successCount = 0;
108
+ let failCount = 0;
109
+ for (const [index, inputFile] of inputFiles.entries()) {
110
+ const outputPath = outputPaths.get(inputFile);
111
+ const fileName = path.basename(inputFile);
112
+ spinner.start(`Processing ${index + 1}/${inputFiles.length}: ${fileName}...`);
113
+ try {
114
+ const metadata = await createSharpInstance(inputFile).metadata();
115
+ const pipeline = createSharpInstance(inputFile).gamma(options.gamma || 2.2, options.gammaOut);
116
+ const outputExt = path.extname(outputPath).toLowerCase();
117
+ if (outputExt === '.jpg' || outputExt === '.jpeg') {
118
+ pipeline.jpeg({ quality: options.quality || 90 });
119
+ }
120
+ else if (outputExt === '.png') {
121
+ pipeline.png({ quality: options.quality || 90 });
122
+ }
123
+ else if (outputExt === '.webp') {
124
+ pipeline.webp({ quality: options.quality || 90 });
125
+ }
126
+ await pipeline.toFile(outputPath);
127
+ if (options.verbose) {
128
+ spinner.succeed(chalk.green(`✓ ${fileName} processed (${metadata.width}x${metadata.height})`));
129
+ }
130
+ else {
131
+ spinner.succeed(chalk.green(`✓ ${fileName} processed`));
132
+ }
133
+ successCount++;
134
+ }
135
+ catch (error) {
136
+ spinner.fail(chalk.red(`✗ Failed: ${fileName}`));
137
+ if (options.verbose && error instanceof Error) {
138
+ console.log(chalk.red(` Error: ${error.message}`));
139
+ }
140
+ failCount++;
141
+ }
104
142
  }
105
- else if (outputExt === '.webp') {
106
- pipeline.webp({ quality: options.quality || 90 });
143
+ console.log(chalk.bold('\nSummary:'));
144
+ console.log(chalk.green(` ✓ Success: ${successCount}`));
145
+ if (failCount > 0) {
146
+ console.log(chalk.red(` ✗ Failed: ${failCount}`));
107
147
  }
108
- await pipeline.toFile(outputPath);
109
- const outputStats = fs.statSync(outputPath);
110
- spinner.succeed(chalk.green('✓ Gamma correction applied successfully!'));
111
- console.log(chalk.dim(` Input: ${input}`));
112
- console.log(chalk.dim(` Output: ${outputPath}`));
113
- console.log(chalk.dim(` Size: ${metadata.width}x${metadata.height}`));
114
- console.log(chalk.dim(` Gamma: ${options.gamma || 2.2}`));
115
- console.log(chalk.dim(` File size: ${(outputStats.size / 1024).toFixed(2)}KB`));
148
+ console.log(chalk.dim(` Output directory: ${outputDir}`));
116
149
  }
117
150
  catch (error) {
118
151
  spinner.fail(chalk.red('Failed to apply gamma correction'));
@@ -1 +1 @@
1
- {"version":3,"file":"gamma.js","sourceRoot":"","sources":["../../src/commands/gamma.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gamma.js","sourceRoot":"","sources":["../../src/commands/gamma.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"grayscale.d.ts","sourceRoot":"","sources":["../../src/commands/grayscale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CA6FxD"}
1
+ {"version":3,"file":"grayscale.d.ts","sourceRoot":"","sources":["../../src/commands/grayscale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAkIxD"}