webpocalypse 1.0.0 → 1.0.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/convert.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { FileEntry, CliOptions, ConversionResult } from './types.js';
1
+ import type { FileEntry, CliOptions, ConversionResult } from "./types.js";
2
2
  /**
3
3
  * Convert all files and write directly to outputDir.
4
4
  * Calls onProgress after each file finishes (success or failure).
@@ -1 +1 @@
1
- {"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../src/convert.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAgF1E;;;GAGG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,SAAS,EAAE,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,EACnB,UAAU,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,GAC7C,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAuD7B"}
1
+ {"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../src/convert.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAkF1E;;;GAGG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,SAAS,EAAE,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,EACnB,UAAU,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,GAC7C,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAyD7B"}
package/dist/convert.js CHANGED
@@ -16,7 +16,7 @@ function applyResize(image, options) {
16
16
  return image.resize({
17
17
  width: options.maxWidth,
18
18
  height: options.maxHeight,
19
- fit: 'inside',
19
+ fit: "inside",
20
20
  withoutEnlargement: true,
21
21
  });
22
22
  }
@@ -28,7 +28,7 @@ async function encodeToFile(file, format, outputDir, options) {
28
28
  await fs_extra_1.default.ensureDir(path_1.default.dirname(outputPath));
29
29
  let image = (0, sharp_1.default)(inputBuffer);
30
30
  image = applyResize(image, options);
31
- if (format === 'webp') {
31
+ if (format === "webp") {
32
32
  await (options.lossless
33
33
  ? image.webp({ lossless: true })
34
34
  : image.webp({ quality: options.quality })).toFile(outputPath);
@@ -74,9 +74,7 @@ async function passthroughFile(file, outputDir) {
74
74
  */
75
75
  async function convertFiles(files, outputDir, options, onProgress) {
76
76
  // AVIF is much heavier to encode — reduce concurrency to avoid CPU saturation
77
- const concurrency = options.format === 'avif' ? 3
78
- : options.format === 'both' ? 4
79
- : 6;
77
+ const concurrency = options.format === "avif" ? 3 : options.format === "both" ? 4 : 6;
80
78
  const limit = (0, p_limit_1.default)(concurrency);
81
79
  const allResults = [];
82
80
  const tasks = files.flatMap((file) => {
@@ -89,7 +87,7 @@ async function convertFiles(files, outputDir, options, onProgress) {
89
87
  }),
90
88
  ];
91
89
  }
92
- const formats = options.format === 'both' ? ['webp', 'avif'] : [options.format];
90
+ const formats = options.format === "both" ? ["webp", "avif"] : [options.format];
93
91
  return formats.map((fmt) => limit(async () => {
94
92
  let result;
95
93
  try {
@@ -107,7 +105,7 @@ async function convertFiles(files, outputDir, options, onProgress) {
107
105
  result = {
108
106
  inputPath: file.inputPath,
109
107
  relativePath: file.relativePath,
110
- outputPath: '',
108
+ outputPath: "",
111
109
  outputRelativePath: (0, scan_js_1.replaceExtension)(file.relativePath, fmt),
112
110
  originalSize: stat?.size ?? 0,
113
111
  convertedSize: 0,
@@ -1 +1 @@
1
- {"version":3,"file":"convert.js","sourceRoot":"","sources":["../src/convert.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"convert.js","sourceRoot":"","sources":["../src/convert.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -28,14 +28,14 @@ async function main() {
28
28
  const files = (0, scan_js_1.scanDirectory)(inputDir);
29
29
  spinner.stop();
30
30
  if (files.length === 0) {
31
- console.log(chalk_1.default.yellow('⚠ No supported images found in: ') + inputDir);
32
- console.log(chalk_1.default.dim(' Supported formats: .jpg, .jpeg, .png, .webp, .avif'));
31
+ console.log(chalk_1.default.yellow('⚠ No files found in: ') + inputDir);
33
32
  process.exit(0);
34
33
  }
35
- // Each file may produce 1 or 2 output files (when --format both)
34
+ const convertibleCount = files.filter(f => (0, scan_js_1.isConvertible)(f.inputPath)).length;
35
+ const passthroughCount = files.length - convertibleCount;
36
+ // Convertible files produce 1 or 2 outputs (--format both); pass-throughs always 1
36
37
  const totalOutputs = files.reduce((sum, f) => {
37
- const isPassthrough = /\.(webp|avif)$/i.test(f.inputPath);
38
- return sum + (isPassthrough ? 1 : options.format === 'both' ? 2 : 1);
38
+ return sum + ((0, scan_js_1.isConvertible)(f.inputPath) && options.format === 'both' ? 2 : 1);
39
39
  }, 0);
40
40
  const outputDir = options.inPlace
41
41
  ? inputDir
@@ -49,7 +49,10 @@ async function main() {
49
49
  chalk_1.default.dim(' Quality: ') + (options.lossless ? 'lossless' : String(options.quality)) +
50
50
  (options.maxWidth ? chalk_1.default.dim(' Max-W: ') + options.maxWidth : '') +
51
51
  (options.maxHeight ? chalk_1.default.dim(' Max-H: ') + options.maxHeight : ''));
52
- console.log(chalk_1.default.dim(` Files: ${files.length} image${files.length !== 1 ? 's' : ''} found → ${totalOutputs} output${totalOutputs !== 1 ? 's' : ''}`));
52
+ const filesSummary = passthroughCount > 0
53
+ ? `${convertibleCount} image${convertibleCount !== 1 ? 's' : ''} to convert, ${passthroughCount} asset${passthroughCount !== 1 ? 's' : ''} copied as-is`
54
+ : `${convertibleCount} image${convertibleCount !== 1 ? 's' : ''} to convert`;
55
+ console.log(chalk_1.default.dim(` Files: ${filesSummary} → ${totalOutputs} output${totalOutputs !== 1 ? 's' : ''}`));
53
56
  // ── Convert ───────────────────────────────────────────────────────────────
54
57
  (0, logger_js_1.printTableHeader)();
55
58
  let doneCount = 0;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AACA,4CAAoB;AACpB,8CAAsB;AACtB,kDAA0B;AAC1B,qCAAqC;AACrC,uCAA0C;AAC1C,2CAA0C;AAC1C,2CAMqB;AAGrB,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAA,kBAAS,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtD,6EAA6E;IAC7E,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,6EAA6E;IAC7E,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IACtF,MAAM,KAAK,GAAG,IAAA,uBAAa,EAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,EAAE,CAAC;IAEf,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,GAAG,QAAQ,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,iEAAiE;IACjE,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QAC3C,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC1D,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEN,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO;QAC/B,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,QAAQ,YAAY,CAAC,CAAC;IAE7C,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,cAAc,CAAC;QAC1B,eAAK,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE,EAAE,CAAC,CAC/B,CAAC;IACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,QAAQ,CACpC,CAAC;IACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CACnG,CAAC;IACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,MAAM;QACzC,eAAK,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpF,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CACtE,CAAC;IACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,MAAM,SAAS,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,YAAY,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAC7I,CAAC;IAEF,6EAA6E;IAC7E,IAAA,4BAAgB,GAAE,CAAC;IAEnB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE5C,0EAA0E;IAC1E,MAAM,eAAe,GAAG,KAAK;QAC3B,CAAC,CAAC,IAAA,aAAG,EAAC,EAAE,IAAI,EAAE,IAAA,wBAAY,EAAC,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE;QAClF,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,UAAU,GAAuB,EAAE,CAAC;IAE1C,SAAS,UAAU,CAAC,MAAwB;QAC1C,SAAS,EAAE,CAAC;QAEZ,IAAI,eAAe,EAAE,CAAC;YACpB,eAAe,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;QAED,IAAA,0BAAc,EAAC,MAAM,CAAC,CAAC;QACvB,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAExB,IAAI,eAAe,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;YAChD,eAAe,CAAC,IAAI,GAAG,IAAA,wBAAY,EAAC,SAAS,EAAE,YAAY,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;YACxF,eAAe,CAAC,MAAM,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,MAAM,IAAA,uBAAW,EAC9D,QAAQ,EACR,KAAK,EACL,OAAO,EACP,UAAU,CACX,CAAC;QAEF,eAAe,EAAE,IAAI,EAAE,CAAC;QAExB,kDAAkD;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAErE,MAAM,OAAO,GAAG,IAAA,wBAAY,EAAC,OAAO,CAAC,CAAC;QACtC,IAAA,wBAAY,EAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAEtC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAe,EAAE,IAAI,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;QAC9D,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/scan.d.ts CHANGED
@@ -1,11 +1,19 @@
1
- import type { FileEntry } from './types.js';
2
- export declare function isSupportedImage(filename: string): boolean;
1
+ import type { FileEntry } from "./types.js";
2
+ export declare function isConvertible(filename: string): boolean;
3
+ export declare function isIgnored(filename: string): boolean;
4
+ /**
5
+ * Returns true for files that should be copied verbatim to the output.
6
+ * This includes already-optimised images (.webp, .avif) as well as any
7
+ * other asset (.svg, .ico, .gif, fonts, JSON, etc.) that sharp cannot or
8
+ * should not re-encode.
9
+ */
3
10
  export declare function isPassthrough(filename: string): boolean;
4
11
  export declare function replaceExtension(filePath: string, newExt: string): string;
5
12
  /**
6
- * Recursively walk a directory and collect all supported image files.
7
- * Returns paths relative to the given root so that directory structure
8
- * can be replicated in the output.
13
+ * Recursively walk a directory and collect every file that should appear in
14
+ * the output both convertible images (.jpg, .jpeg, .png) and pass-through
15
+ * assets (.webp, .avif, .svg, .ico, fonts, etc.).
16
+ * OS-generated junk (.DS_Store, Thumbs.db …) is silently skipped.
9
17
  */
10
18
  export declare function scanDirectory(rootDir: string): FileEntry[];
11
19
  //# sourceMappingURL=scan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAU5C,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG1D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAIzE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,CAoB1D"}
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAc5C,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAIzE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,CAoB1D"}
package/dist/scan.js CHANGED
@@ -3,34 +3,49 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.isSupportedImage = isSupportedImage;
6
+ exports.isConvertible = isConvertible;
7
+ exports.isIgnored = isIgnored;
7
8
  exports.isPassthrough = isPassthrough;
8
9
  exports.replaceExtension = replaceExtension;
9
10
  exports.scanDirectory = scanDirectory;
10
11
  const fs_1 = __importDefault(require("fs"));
11
12
  const path_1 = __importDefault(require("path"));
12
13
  // Extensions that will be re-encoded by sharp
13
- const CONVERTIBLE_EXTENSIONS = new Set(['.jpg', '.jpeg', '.png']);
14
- // Extensions that are already in a target format — copy as-is
15
- const PASSTHROUGH_EXTENSIONS = new Set(['.webp', '.avif']);
16
- const ALL_SUPPORTED = new Set([...CONVERTIBLE_EXTENSIONS, ...PASSTHROUGH_EXTENSIONS]);
17
- function isSupportedImage(filename) {
18
- const ext = filename.toLowerCase().slice(filename.lastIndexOf('.'));
19
- return ALL_SUPPORTED.has(ext);
14
+ const CONVERTIBLE_EXTENSIONS = new Set([".jpg", ".jpeg", ".png"]);
15
+ // OS/editor-generated files that should never appear in the output
16
+ const IGNORED_FILENAMES = new Set([
17
+ ".ds_store",
18
+ "thumbs.db",
19
+ "desktop.ini",
20
+ ".gitkeep",
21
+ ".gitignore",
22
+ ]);
23
+ function isConvertible(filename) {
24
+ const ext = filename.toLowerCase().slice(filename.lastIndexOf("."));
25
+ return CONVERTIBLE_EXTENSIONS.has(ext);
20
26
  }
27
+ function isIgnored(filename) {
28
+ return IGNORED_FILENAMES.has(path_1.default.basename(filename).toLowerCase());
29
+ }
30
+ /**
31
+ * Returns true for files that should be copied verbatim to the output.
32
+ * This includes already-optimised images (.webp, .avif) as well as any
33
+ * other asset (.svg, .ico, .gif, fonts, JSON, etc.) that sharp cannot or
34
+ * should not re-encode.
35
+ */
21
36
  function isPassthrough(filename) {
22
- const ext = filename.toLowerCase().slice(filename.lastIndexOf('.'));
23
- return PASSTHROUGH_EXTENSIONS.has(ext);
37
+ return !isConvertible(filename) && !isIgnored(filename);
24
38
  }
25
39
  function replaceExtension(filePath, newExt) {
26
- const dotIndex = filePath.lastIndexOf('.');
40
+ const dotIndex = filePath.lastIndexOf(".");
27
41
  const base = dotIndex !== -1 ? filePath.slice(0, dotIndex) : filePath;
28
42
  return `${base}.${newExt}`;
29
43
  }
30
44
  /**
31
- * Recursively walk a directory and collect all supported image files.
32
- * Returns paths relative to the given root so that directory structure
33
- * can be replicated in the output.
45
+ * Recursively walk a directory and collect every file that should appear in
46
+ * the output both convertible images (.jpg, .jpeg, .png) and pass-through
47
+ * assets (.webp, .avif, .svg, .ico, fonts, etc.).
48
+ * OS-generated junk (.DS_Store, Thumbs.db …) is silently skipped.
34
49
  */
35
50
  function scanDirectory(rootDir) {
36
51
  const entries = [];
@@ -41,7 +56,7 @@ function scanDirectory(rootDir) {
41
56
  if (item.isDirectory()) {
42
57
  walk(fullPath);
43
58
  }
44
- else if (item.isFile() && isSupportedImage(item.name)) {
59
+ else if (item.isFile() && !isIgnored(item.name)) {
45
60
  const relativePath = path_1.default.relative(rootDir, fullPath);
46
61
  entries.push({ inputPath: fullPath, relativePath });
47
62
  }
package/dist/scan.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":";;;;;AAYA,4CAGC;AAED,sCAGC;AAED,4CAIC;AAOD,sCAoBC;AArDD,4CAAoB;AACpB,gDAAwB;AAGxB,8CAA8C;AAC9C,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAElE,8DAA8D;AAC9D,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,sBAAsB,EAAE,GAAG,sBAAsB,CAAC,CAAC,CAAC;AAEtF,SAAgB,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,OAAO,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC;AAED,SAAgB,aAAa,CAAC,QAAgB;IAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,OAAO,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,gBAAgB,CAAC,QAAgB,EAAE,MAAc;IAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACtE,OAAO,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,OAAe;IAC3C,MAAM,OAAO,GAAgB,EAAE,CAAC;IAEhC,SAAS,IAAI,CAAC,GAAW;QACvB,MAAM,KAAK,GAAG,YAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAE3C,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjB,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxD,MAAM,YAAY,GAAG,cAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACtD,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,CAAC;IACd,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":";;;;;AAgBA,sCAGC;AAED,8BAEC;AAQD,sCAEC;AAED,4CAIC;AAQD,sCAoBC;AAnED,4CAAoB;AACpB,gDAAwB;AAGxB,8CAA8C;AAC9C,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAElE,mEAAmE;AACnE,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,WAAW;IACX,WAAW;IACX,aAAa;IACb,UAAU;IACV,YAAY;CACb,CAAC,CAAC;AAEH,SAAgB,aAAa,CAAC,QAAgB;IAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,OAAO,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,SAAS,CAAC,QAAgB;IACxC,OAAO,iBAAiB,CAAC,GAAG,CAAC,cAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACtE,CAAC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,QAAgB;IAC5C,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1D,CAAC;AAED,SAAgB,gBAAgB,CAAC,QAAgB,EAAE,MAAc;IAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACtE,OAAO,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,OAAe;IAC3C,MAAM,OAAO,GAAgB,EAAE,CAAC;IAEhC,SAAS,IAAI,CAAC,GAAW;QACvB,MAAM,KAAK,GAAG,YAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAE3C,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjB,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,MAAM,YAAY,GAAG,cAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACtD,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,CAAC;IACd,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type OutputFormat = 'webp' | 'avif' | 'both';
1
+ export type OutputFormat = "webp" | "avif" | "both";
2
2
  export interface CliOptions {
3
3
  format: OutputFormat;
4
4
  quality: number;
package/package.json CHANGED
@@ -1,15 +1,24 @@
1
1
  {
2
2
  "name": "webpocalypse",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "CLI tool for batch image conversion to WebP/AVIF with quality control and directory structure preservation",
5
- "keywords": ["image", "conversion", "webp", "avif", "optimization", "cli"],
5
+ "keywords": [
6
+ "image",
7
+ "conversion",
8
+ "webp",
9
+ "avif",
10
+ "optimization",
11
+ "cli"
12
+ ],
6
13
  "author": "",
7
14
  "license": "MIT",
8
15
  "main": "dist/index.js",
9
16
  "bin": {
10
17
  "webpocalypse": "dist/index.js"
11
18
  },
12
- "files": ["dist"],
19
+ "files": [
20
+ "dist"
21
+ ],
13
22
  "engines": {
14
23
  "node": ">=18.0.0"
15
24
  },