@adaptive-ds/assets-optimizer 0.2.1 → 0.3.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.
@@ -0,0 +1,6 @@
1
+ ## [0.3.0] - 2026-04-18
2
+
3
+ ### 🚀 Features
4
+
5
+ - *(bisync)* Ignore empty directories
6
+ - Allow optimizing images and videos separately
@@ -0,0 +1,5 @@
1
+ ## [0.3.1] - 2026-04-18
2
+
3
+ ### 🐛 Bug Fixes
4
+
5
+ - *(bisync)* Remove non-existing ignore-listing option
@@ -1 +1 @@
1
- {"version":3,"file":"assetsOptimize.d.ts","sourceRoot":"","sources":["../src/assetsOptimize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAQrE,wBAAsB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAyDvG"}
1
+ {"version":3,"file":"assetsOptimize.d.ts","sourceRoot":"","sources":["../src/assetsOptimize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAIrE,wBAAsB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA2DvG"}
@@ -1,61 +1,60 @@
1
- import path from "node:path";
2
- import { processImages } from "./image/processImages.js";
3
- import { generateImageList } from "./list/generateImageList.js";
4
- import { generateVideoList } from "./list/generateVideoList.js";
5
- import { createLogger } from "./shared/logger.js";
6
- import { printSummary } from "./shared/printSummary.js";
7
- import { processVideos } from "./video/processVideos.js";
1
+ import { optimizeImages } from "./image/optimizeImages.js";
2
+ import { optimizeVideos } from "./video/optimizeVideos.js";
8
3
  export async function assetsOptimize(options = {}) {
9
- const cwd = path.resolve(options.cwd ?? process.cwd());
10
- const processImagesEnabled = options.processImages !== false;
11
- const processVideosEnabled = options.processVideos !== false;
12
- const imageOriginalsDir = path.resolve(cwd, options.imageOriginalsDir ?? "images");
13
- const imageOptimizedDir = path.resolve(cwd, options.imageOptimizedDir ?? "public/images");
14
- const imageListOutputPath = path.resolve(cwd, options.imageListOutputPath ?? "src/app/assets/imageList.ts");
15
- const videoOriginalsDir = path.resolve(cwd, options.videoOriginalsDir ?? "videos");
16
- const videoOptimizedDir = path.resolve(cwd, options.videoOptimizedDir ?? "public/videos");
17
- const videoListOutputPath = path.resolve(cwd, options.videoListOutputPath ?? "src/app/assets/videoList.ts");
18
- const logger = createLogger(options.logLevel);
19
- const result = {
20
- processed: [],
21
- skippedExisting: [],
22
- skippedRootFiles: [],
23
- warnings: [],
24
- deletedLocal: [],
25
- processedVideos: [],
26
- skippedExistingVideos: [],
27
- processedVideoPreviews: [],
28
- skippedExistingVideoPreviews: [],
29
- };
30
- await Promise.all([
31
- processImagesEnabled
32
- ? processImages({
33
- imageOriginalsDir,
34
- imageOptimizedDir,
35
- allowRootImageFiles: options.allowRootImageFiles === true,
36
- result,
37
- logger,
4
+ const [imageResult, videoResult] = await Promise.all([
5
+ options.processImages !== false
6
+ ? optimizeImages({
7
+ cwd: options.cwd,
8
+ logLevel: options.logLevel,
9
+ imageOriginalsDir: options.imageOriginalsDir,
10
+ imageOptimizedDir: options.imageOptimizedDir,
11
+ allowRootImageFiles: options.allowRootImageFiles,
12
+ imageListOutputPath: options.imageListOutputPath,
13
+ generateImageList: options.generateImageList,
38
14
  })
39
- : Promise.resolve(),
40
- processVideosEnabled
41
- ? processVideos({
42
- cwd,
43
- videoOriginalsDir,
44
- videoOptimizedDir,
45
- videoPreviewQuality: options.videoPreviewQuality ?? 80,
46
- result,
47
- logger,
15
+ : Promise.resolve({
16
+ processed: [],
17
+ skippedExisting: [],
18
+ skippedRootFiles: [],
19
+ warnings: [],
20
+ deletedLocal: [],
21
+ processedVideos: [],
22
+ skippedExistingVideos: [],
23
+ processedVideoPreviews: [],
24
+ skippedExistingVideoPreviews: [],
25
+ }),
26
+ options.processVideos !== false
27
+ ? optimizeVideos({
28
+ cwd: options.cwd,
29
+ logLevel: options.logLevel,
30
+ videoOriginalsDir: options.videoOriginalsDir,
31
+ videoOptimizedDir: options.videoOptimizedDir,
32
+ videoListOutputPath: options.videoListOutputPath,
33
+ generateVideoList: options.generateVideoList,
34
+ videoPreviewQuality: options.videoPreviewQuality,
48
35
  })
49
- : Promise.resolve(),
50
- ]);
51
- await Promise.all([
52
- options.generateImageList === false
53
- ? Promise.resolve()
54
- : generateImageList(imageOptimizedDir, imageListOutputPath, undefined, logger),
55
- options.generateVideoList === false
56
- ? Promise.resolve()
57
- : generateVideoList(videoOptimizedDir, videoListOutputPath, undefined, logger),
36
+ : Promise.resolve({
37
+ processed: [],
38
+ skippedExisting: [],
39
+ skippedRootFiles: [],
40
+ warnings: [],
41
+ deletedLocal: [],
42
+ processedVideos: [],
43
+ skippedExistingVideos: [],
44
+ processedVideoPreviews: [],
45
+ skippedExistingVideoPreviews: [],
46
+ }),
58
47
  ]);
59
- printSummary(result, logger);
48
+ const result = {
49
+ processed: imageResult.processed,
50
+ skippedExisting: imageResult.skippedExisting,
51
+ skippedRootFiles: imageResult.skippedRootFiles,
52
+ warnings: [...imageResult.warnings, ...videoResult.warnings],
53
+ deletedLocal: imageResult.deletedLocal,
54
+ processedVideos: videoResult.processedVideos,
55
+ skippedExistingVideos: videoResult.skippedExistingVideos,
56
+ processedVideoPreviews: videoResult.processedVideoPreviews,
57
+ skippedExistingVideoPreviews: videoResult.skippedExistingVideoPreviews,
58
+ };
60
59
  return result;
61
60
  }
@@ -0,0 +1,10 @@
1
+ export interface OptimizeImagesOptions {
2
+ cwd?: string;
3
+ logLevel?: 0 | 1 | 2 | 3;
4
+ imageOriginalsDir?: string;
5
+ imageOptimizedDir?: string;
6
+ allowRootImageFiles?: boolean;
7
+ imageListOutputPath?: string;
8
+ generateImageList?: boolean;
9
+ }
10
+ //# sourceMappingURL=OptimizeImagesOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptimizeImagesOptions.d.ts","sourceRoot":"","sources":["../../src/image/OptimizeImagesOptions.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import type { AssetsOptimizeResult } from "../AssetsOptimizeResult.js";
2
+ import type { OptimizeImagesOptions } from "./OptimizeImagesOptions.js";
3
+ export declare function optimizeImages(options?: OptimizeImagesOptions): Promise<AssetsOptimizeResult>;
4
+ //# sourceMappingURL=optimizeImages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimizeImages.d.ts","sourceRoot":"","sources":["../../src/image/optimizeImages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAMvE,wBAAsB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAiCvG"}
@@ -0,0 +1,35 @@
1
+ import path from "node:path";
2
+ import { generateImageList } from "../list/generateImageList.js";
3
+ import { createLogger } from "../shared/logger.js";
4
+ import { printSummary } from "../shared/printSummary.js";
5
+ import { processImages } from "./processImages.js";
6
+ export async function optimizeImages(options = {}) {
7
+ const cwd = path.resolve(options.cwd ?? process.cwd());
8
+ const imageOriginalsDir = path.resolve(cwd, options.imageOriginalsDir ?? "images");
9
+ const imageOptimizedDir = path.resolve(cwd, options.imageOptimizedDir ?? "public/images");
10
+ const imageListOutputPath = path.resolve(cwd, options.imageListOutputPath ?? "src/app/assets/imageList.ts");
11
+ const logger = createLogger(options.logLevel);
12
+ const result = {
13
+ processed: [],
14
+ skippedExisting: [],
15
+ skippedRootFiles: [],
16
+ warnings: [],
17
+ deletedLocal: [],
18
+ processedVideos: [],
19
+ skippedExistingVideos: [],
20
+ processedVideoPreviews: [],
21
+ skippedExistingVideoPreviews: [],
22
+ };
23
+ await processImages({
24
+ imageOriginalsDir,
25
+ imageOptimizedDir,
26
+ allowRootImageFiles: options.allowRootImageFiles === true,
27
+ result,
28
+ logger,
29
+ });
30
+ if (options.generateImageList !== false) {
31
+ await generateImageList(imageOptimizedDir, imageListOutputPath, undefined, logger);
32
+ }
33
+ printSummary(result, logger);
34
+ return result;
35
+ }
package/dist/index.d.ts CHANGED
@@ -1,10 +1,12 @@
1
1
  export * from "./AssetsOptimizeOptions.js";
2
2
  export * from "./AssetsOptimizeResult.js";
3
+ export * from "./image/OptimizeImagesOptions.js";
3
4
  export * from "./image/buildExpectedImages.js";
4
5
  export * from "./image/createOutputHash.js";
5
6
  export * from "./image/defaultQuality.js";
6
7
  export * from "./image/ExpectedImage.js";
7
8
  export * from "./image/ImageFormat.js";
9
+ export * from "./image/optimizeImages.js";
8
10
  export * from "./image/parseTransformSpec.js";
9
11
  export * from "./image/processImage.js";
10
12
  export * from "./image/processImages.js";
@@ -20,8 +22,10 @@ export * from "./rclone/runRclone.js";
20
22
  export * from "./shared/listLocalFiles.js";
21
23
  export * from "./shared/printSummary.js";
22
24
  export * from "./shared/walkFiles.js";
25
+ export * from "./video/OptimizeVideosOptions.js";
23
26
  export * from "./video/createVideoPreviewPath.js";
24
27
  export * from "./video/ensureVideoPreviews.js";
28
+ export * from "./video/optimizeVideos.js";
25
29
  export * from "./video/processVideos.js";
26
30
  export * from "./video/ProcessVideosOptions.js";
27
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA;AACzC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,sCAAsC,CAAA;AACpD,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mCAAmC,CAAA;AACjD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,0BAA0B,CAAA;AACxC,cAAc,iCAAiC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA;AACzC,cAAc,kCAAkC,CAAA;AAChD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,cAAc,2BAA2B,CAAA;AACzC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,sCAAsC,CAAA;AACpD,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kCAAkC,CAAA;AAChD,cAAc,mCAAmC,CAAA;AACjD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,2BAA2B,CAAA;AACzC,cAAc,0BAA0B,CAAA;AACxC,cAAc,iCAAiC,CAAA"}
package/dist/index.js CHANGED
@@ -1,10 +1,12 @@
1
1
  export * from "./AssetsOptimizeOptions.js";
2
2
  export * from "./AssetsOptimizeResult.js";
3
+ export * from "./image/OptimizeImagesOptions.js";
3
4
  export * from "./image/buildExpectedImages.js";
4
5
  export * from "./image/createOutputHash.js";
5
6
  export * from "./image/defaultQuality.js";
6
7
  export * from "./image/ExpectedImage.js";
7
8
  export * from "./image/ImageFormat.js";
9
+ export * from "./image/optimizeImages.js";
8
10
  export * from "./image/parseTransformSpec.js";
9
11
  export * from "./image/processImage.js";
10
12
  export * from "./image/processImages.js";
@@ -20,7 +22,9 @@ export * from "./rclone/runRclone.js";
20
22
  export * from "./shared/listLocalFiles.js";
21
23
  export * from "./shared/printSummary.js";
22
24
  export * from "./shared/walkFiles.js";
25
+ export * from "./video/OptimizeVideosOptions.js";
23
26
  export * from "./video/createVideoPreviewPath.js";
24
27
  export * from "./video/ensureVideoPreviews.js";
28
+ export * from "./video/optimizeVideos.js";
25
29
  export * from "./video/processVideos.js";
26
30
  export * from "./video/ProcessVideosOptions.js";
@@ -1 +1 @@
1
- {"version":3,"file":"bisync.d.ts","sourceRoot":"","sources":["../../src/rclone/bisync.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa9G"}
1
+ {"version":3,"file":"bisync.d.ts","sourceRoot":"","sources":["../../src/rclone/bisync.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB9G"}
@@ -9,7 +9,14 @@ export async function bisync(localPath, remotePath, options = {}) {
9
9
  const localDirExists = await dirExists(localPath);
10
10
  await fs.mkdir(localPath, { recursive: true });
11
11
  await runRclone(["mkdir", remotePath], cwd);
12
- const args = ["bisync", localPath, remotePath, "--create-empty-src-dirs", "--resilient", "--recover"];
12
+ const args = [
13
+ "bisync",
14
+ localPath,
15
+ remotePath,
16
+ "--create-empty-src-dirs",
17
+ "--resilient",
18
+ "--recover",
19
+ ];
13
20
  if (options.resync === true || !localDirExists) {
14
21
  args.push("--resync");
15
22
  }
@@ -0,0 +1,10 @@
1
+ export interface OptimizeVideosOptions {
2
+ cwd?: string;
3
+ logLevel?: 0 | 1 | 2 | 3;
4
+ videoOriginalsDir?: string;
5
+ videoOptimizedDir?: string;
6
+ videoListOutputPath?: string;
7
+ generateVideoList?: boolean;
8
+ videoPreviewQuality?: number;
9
+ }
10
+ //# sourceMappingURL=OptimizeVideosOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptimizeVideosOptions.d.ts","sourceRoot":"","sources":["../../src/video/OptimizeVideosOptions.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import type { AssetsOptimizeResult } from "../AssetsOptimizeResult.js";
2
+ import type { OptimizeVideosOptions } from "./OptimizeVideosOptions.js";
3
+ export declare function optimizeVideos(options?: OptimizeVideosOptions): Promise<AssetsOptimizeResult>;
4
+ //# sourceMappingURL=optimizeVideos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimizeVideos.d.ts","sourceRoot":"","sources":["../../src/video/optimizeVideos.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAEtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAyEvE,wBAAsB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA+BvG"}
@@ -0,0 +1,81 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { dirExists } from "../shared/dirExists.js";
4
+ import { createLogger } from "../shared/logger.js";
5
+ import { printSummary } from "../shared/printSummary.js";
6
+ import { supportedVideoSourceExtensions } from "./supportedVideoSourceExtensions.js";
7
+ import { walkFiles } from "../shared/walkFiles.js";
8
+ import { runFfmpeg } from "./runFfmpeg.js";
9
+ import { createVideoArgs } from "./createVideoArgs.js";
10
+ import { createVideoPreviewArgs } from "./createVideoPreviewArgs.js";
11
+ import { createVideoPreviewPath } from "./createVideoPreviewPath.js";
12
+ import { generateVideoList } from "../list/generateVideoList.js";
13
+ async function processLocalVideos(videoOriginalsDir, videoOptimizedDir, cwd, result, logger) {
14
+ for (const sourceFile of await walkFiles(videoOriginalsDir)) {
15
+ const extension = path.extname(sourceFile).toLowerCase();
16
+ const relativePath = path.relative(videoOriginalsDir, sourceFile);
17
+ if (!supportedVideoSourceExtensions.has(extension)) {
18
+ result.warnings.push(`Skipped unsupported video source file: ${relativePath}`);
19
+ continue;
20
+ }
21
+ const outputPath = path.join(videoOptimizedDir, relativePath);
22
+ try {
23
+ await fs.access(outputPath);
24
+ result.skippedExistingVideos.push(relativePath);
25
+ continue;
26
+ }
27
+ catch { }
28
+ await fs.mkdir(path.dirname(outputPath), { recursive: true });
29
+ await runFfmpeg(await createVideoArgs(sourceFile, outputPath, extension, cwd, logger), cwd, logger);
30
+ result.processedVideos.push(relativePath);
31
+ }
32
+ }
33
+ async function ensureVideoPreviews(videoOptimizedDir, videoPreviewQuality, cwd, result, logger) {
34
+ if (!(await dirExists(videoOptimizedDir))) {
35
+ return;
36
+ }
37
+ for (const filePath of await walkFiles(videoOptimizedDir)) {
38
+ const extension = path.extname(filePath).toLowerCase();
39
+ if (!supportedVideoSourceExtensions.has(extension)) {
40
+ continue;
41
+ }
42
+ const previewPath = createVideoPreviewPath(filePath);
43
+ const relativePreviewPath = path.relative(videoOptimizedDir, previewPath);
44
+ try {
45
+ await fs.access(previewPath);
46
+ result.skippedExistingVideoPreviews.push(relativePreviewPath);
47
+ continue;
48
+ }
49
+ catch { }
50
+ await fs.mkdir(path.dirname(previewPath), { recursive: true });
51
+ await runFfmpeg(createVideoPreviewArgs(filePath, previewPath, videoPreviewQuality), cwd, logger);
52
+ result.processedVideoPreviews.push(relativePreviewPath);
53
+ }
54
+ }
55
+ export async function optimizeVideos(options = {}) {
56
+ const cwd = path.resolve(options.cwd ?? process.cwd());
57
+ const videoOriginalsDir = path.resolve(cwd, options.videoOriginalsDir ?? "videos");
58
+ const videoOptimizedDir = path.resolve(cwd, options.videoOptimizedDir ?? "public/videos");
59
+ const videoListOutputPath = path.resolve(cwd, options.videoListOutputPath ?? "src/app/assets/videoList.ts");
60
+ const logger = createLogger(options.logLevel);
61
+ const result = {
62
+ processed: [],
63
+ skippedExisting: [],
64
+ skippedRootFiles: [],
65
+ warnings: [],
66
+ deletedLocal: [],
67
+ processedVideos: [],
68
+ skippedExistingVideos: [],
69
+ processedVideoPreviews: [],
70
+ skippedExistingVideoPreviews: [],
71
+ };
72
+ if (await dirExists(videoOriginalsDir)) {
73
+ await processLocalVideos(videoOriginalsDir, videoOptimizedDir, cwd, result, logger);
74
+ }
75
+ await ensureVideoPreviews(videoOptimizedDir, options.videoPreviewQuality ?? 80, cwd, result, logger);
76
+ if (options.generateVideoList !== false) {
77
+ await generateVideoList(videoOptimizedDir, videoListOutputPath, undefined, logger);
78
+ }
79
+ printSummary(result, logger);
80
+ return result;
81
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adaptive-ds/assets-optimizer",
3
- "version": "0.2.1",
3
+ "version": "0.3.1",
4
4
  "main": "./dist/index.js",
5
5
  "dependencies": {
6
6
  "image-size": "^2.0.2",