@adaptive-ds/assets-optimizer 0.5.0 → 0.6.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 (42) hide show
  1. package/bun.lock +215 -0
  2. package/changelogs/2026-04-20_v0.6.0.md +5 -0
  3. package/dist/AssetsOptimizeOptions.d.ts +5 -0
  4. package/dist/AssetsOptimizeOptions.d.ts.map +1 -1
  5. package/dist/AssetsOptimizeResult.d.ts +2 -0
  6. package/dist/AssetsOptimizeResult.d.ts.map +1 -1
  7. package/dist/assetsOptimize.d.ts.map +1 -1
  8. package/dist/assetsOptimize.js +31 -2
  9. package/dist/font/OptimizeFontsOptions.d.ts +9 -0
  10. package/dist/font/OptimizeFontsOptions.d.ts.map +1 -0
  11. package/dist/font/OptimizeFontsOptions.js +1 -0
  12. package/dist/font/ProcessFontsOptions.d.ts +13 -0
  13. package/dist/font/ProcessFontsOptions.d.ts.map +1 -0
  14. package/dist/font/ProcessFontsOptions.js +1 -0
  15. package/dist/font/optimizeFonts.d.ts +4 -0
  16. package/dist/font/optimizeFonts.d.ts.map +1 -0
  17. package/dist/font/optimizeFonts.js +65 -0
  18. package/dist/font/parseFontFilename.d.ts +17 -0
  19. package/dist/font/parseFontFilename.d.ts.map +1 -0
  20. package/dist/font/parseFontFilename.js +75 -0
  21. package/dist/font/supportedFontExtensions.d.ts +3 -0
  22. package/dist/font/supportedFontExtensions.d.ts.map +1 -0
  23. package/dist/font/supportedFontExtensions.js +2 -0
  24. package/dist/image/optimizeImages.d.ts.map +1 -1
  25. package/dist/image/optimizeImages.js +2 -0
  26. package/dist/index.d.ts +6 -0
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +6 -0
  29. package/dist/list/AssetListTypes.d.ts +7 -0
  30. package/dist/list/AssetListTypes.d.ts.map +1 -1
  31. package/dist/list/generateFontList.d.ts +3 -0
  32. package/dist/list/generateFontList.d.ts.map +1 -0
  33. package/dist/list/generateFontList.js +58 -0
  34. package/dist/process/ProcessAssetsOptions.d.ts +7 -0
  35. package/dist/process/ProcessAssetsOptions.d.ts.map +1 -1
  36. package/dist/process/processAssets.d.ts.map +1 -1
  37. package/dist/process/processAssets.js +21 -4
  38. package/dist/shared/printSummary.d.ts.map +1 -1
  39. package/dist/shared/printSummary.js +5 -0
  40. package/dist/video/optimizeVideos.d.ts.map +1 -1
  41. package/dist/video/optimizeVideos.js +2 -0
  42. package/package.json +3 -2
package/bun.lock CHANGED
@@ -7,6 +7,7 @@
7
7
  "dependencies": {
8
8
  "image-size": "^2.0.2",
9
9
  "sharp": "^0.34.5",
10
+ "ttf2woff2": "^8.0.1",
10
11
  },
11
12
  "devDependencies": {
12
13
  "@biomejs/biome": "^2.4.11",
@@ -87,24 +88,238 @@
87
88
 
88
89
  "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.5", "", { "os": "win32", "cpu": "x64" }, "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw=="],
89
90
 
91
+ "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="],
92
+
93
+ "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="],
94
+
95
+ "@npmcli/agent": ["@npmcli/agent@3.0.0", "", { "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^10.0.1", "socks-proxy-agent": "^8.0.3" } }, "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q=="],
96
+
97
+ "@npmcli/fs": ["@npmcli/fs@4.0.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q=="],
98
+
99
+ "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="],
100
+
90
101
  "@types/bun": ["@types/bun@1.3.12", "", { "dependencies": { "bun-types": "1.3.12" } }, "sha512-DBv81elK+/VSwXHDlnH3Qduw+KxkTIWi7TXkAeh24zpi5l0B2kUg9Ga3tb4nJaPcOFswflgi/yAvMVBPrxMB+A=="],
91
102
 
92
103
  "@types/node": ["@types/node@25.6.0", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ=="],
93
104
 
105
+ "abbrev": ["abbrev@3.0.1", "", {}, "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg=="],
106
+
107
+ "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="],
108
+
109
+ "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="],
110
+
111
+ "ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="],
112
+
113
+ "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
114
+
115
+ "bindings": ["bindings@1.5.0", "", { "dependencies": { "file-uri-to-path": "1.0.0" } }, "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="],
116
+
117
+ "brace-expansion": ["brace-expansion@2.1.0", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w=="],
118
+
119
+ "bufferstreams": ["bufferstreams@4.0.0", "", { "dependencies": { "readable-stream": "^3.4.0", "yerror": "^8.0.0" } }, "sha512-azX778/2VQ9K2uiYprSUKLgK2K6lR1KtJycJDsMg7u0+Cc994A9HyGaUKb01e/T+M8jse057429iKXurCaT35g=="],
120
+
94
121
  "bun-types": ["bun-types@1.3.12", "", { "dependencies": { "@types/node": "*" } }, "sha512-HqOLj5PoFajAQciOMRiIZGNoKxDJSr6qigAttOX40vJuSp6DN/CxWp9s3C1Xwm4oH7ybueITwiaOcWXoYVoRkA=="],
95
122
 
123
+ "cacache": ["cacache@19.0.1", "", { "dependencies": { "@npmcli/fs": "^4.0.0", "fs-minipass": "^3.0.0", "glob": "^10.2.2", "lru-cache": "^10.0.1", "minipass": "^7.0.3", "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "p-map": "^7.0.2", "ssri": "^12.0.0", "tar": "^7.4.3", "unique-filename": "^4.0.0" } }, "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ=="],
124
+
125
+ "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="],
126
+
127
+ "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
128
+
129
+ "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="],
130
+
131
+ "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
132
+
133
+ "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
134
+
96
135
  "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="],
97
136
 
137
+ "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="],
138
+
139
+ "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="],
140
+
141
+ "encoding": ["encoding@0.1.13", "", { "dependencies": { "iconv-lite": "^0.6.2" } }, "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A=="],
142
+
143
+ "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="],
144
+
145
+ "err-code": ["err-code@2.0.3", "", {}, "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="],
146
+
147
+ "exponential-backoff": ["exponential-backoff@3.1.3", "", {}, "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA=="],
148
+
149
+ "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="],
150
+
151
+ "file-uri-to-path": ["file-uri-to-path@1.0.0", "", {}, "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="],
152
+
153
+ "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="],
154
+
155
+ "fs-minipass": ["fs-minipass@3.0.3", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw=="],
156
+
157
+ "glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="],
158
+
159
+ "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="],
160
+
161
+ "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="],
162
+
163
+ "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="],
164
+
165
+ "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="],
166
+
167
+ "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="],
168
+
98
169
  "image-size": ["image-size@2.0.2", "", { "bin": { "image-size": "bin/image-size.js" } }, "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w=="],
99
170
 
171
+ "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="],
172
+
173
+ "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="],
174
+
175
+ "ip-address": ["ip-address@10.1.0", "", {}, "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q=="],
176
+
177
+ "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="],
178
+
179
+ "isexe": ["isexe@3.1.5", "", {}, "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w=="],
180
+
181
+ "jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="],
182
+
183
+ "lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="],
184
+
185
+ "make-fetch-happen": ["make-fetch-happen@14.0.3", "", { "dependencies": { "@npmcli/agent": "^3.0.0", "cacache": "^19.0.1", "http-cache-semantics": "^4.1.1", "minipass": "^7.0.2", "minipass-fetch": "^4.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^1.0.0", "proc-log": "^5.0.0", "promise-retry": "^2.0.1", "ssri": "^12.0.0" } }, "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ=="],
186
+
187
+ "minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="],
188
+
189
+ "minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="],
190
+
191
+ "minipass-collect": ["minipass-collect@2.0.1", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw=="],
192
+
193
+ "minipass-fetch": ["minipass-fetch@4.0.1", "", { "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^1.0.3", "minizlib": "^3.0.1" }, "optionalDependencies": { "encoding": "^0.1.13" } }, "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ=="],
194
+
195
+ "minipass-flush": ["minipass-flush@1.0.7", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA=="],
196
+
197
+ "minipass-pipeline": ["minipass-pipeline@1.2.4", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A=="],
198
+
199
+ "minipass-sized": ["minipass-sized@1.0.3", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g=="],
200
+
201
+ "minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="],
202
+
203
+ "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
204
+
205
+ "nan": ["nan@2.26.2", "", {}, "sha512-0tTvBTYkt3tdGw22nrAy50x7gpbGCCFH3AFcyS5WiUu7Eu4vWlri1woE6qHBSfy11vksDqkiwjOnlR7WV8G1Hw=="],
206
+
207
+ "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="],
208
+
209
+ "node-gyp": ["node-gyp@11.5.0", "", { "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", "graceful-fs": "^4.2.6", "make-fetch-happen": "^14.0.3", "nopt": "^8.0.0", "proc-log": "^5.0.0", "semver": "^7.3.5", "tar": "^7.4.3", "tinyglobby": "^0.2.12", "which": "^5.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ=="],
210
+
211
+ "nopt": ["nopt@8.1.0", "", { "dependencies": { "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A=="],
212
+
213
+ "p-map": ["p-map@7.0.4", "", {}, "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ=="],
214
+
215
+ "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="],
216
+
217
+ "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],
218
+
219
+ "path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="],
220
+
221
+ "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="],
222
+
223
+ "proc-log": ["proc-log@5.0.0", "", {}, "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ=="],
224
+
225
+ "promise-retry": ["promise-retry@2.0.1", "", { "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" } }, "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g=="],
226
+
227
+ "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="],
228
+
229
+ "retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="],
230
+
231
+ "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],
232
+
233
+ "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="],
234
+
100
235
  "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
101
236
 
102
237
  "sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="],
103
238
 
239
+ "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="],
240
+
241
+ "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
242
+
243
+ "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="],
244
+
245
+ "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="],
246
+
247
+ "socks": ["socks@2.8.7", "", { "dependencies": { "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" } }, "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A=="],
248
+
249
+ "socks-proxy-agent": ["socks-proxy-agent@8.0.5", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" } }, "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw=="],
250
+
251
+ "ssri": ["ssri@12.0.0", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ=="],
252
+
253
+ "string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="],
254
+
255
+ "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
256
+
257
+ "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="],
258
+
259
+ "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="],
260
+
261
+ "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
262
+
263
+ "tar": ["tar@7.5.13", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng=="],
264
+
265
+ "tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="],
266
+
104
267
  "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
105
268
 
269
+ "ttf2woff2": ["ttf2woff2@8.0.1", "", { "dependencies": { "bindings": "^1.5.0", "bufferstreams": "^4.0.0", "debug": "^4.4.1", "nan": "^2.22.2", "node-gyp": "^11.2.0", "yerror": "^8.0.0" }, "bin": { "ttf2woff2": "bin/ttf2woff2.js" } }, "sha512-nWSZLaXOgYtvgY6G0SFI8dVHsGWIchlnNMNRglT3Amp2WGy0GSPd9kLAkFd+HvEOzZ/aY6EUrpOF66QaPbipgg=="],
270
+
106
271
  "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="],
107
272
 
108
273
  "undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="],
274
+
275
+ "unique-filename": ["unique-filename@4.0.0", "", { "dependencies": { "unique-slug": "^5.0.0" } }, "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ=="],
276
+
277
+ "unique-slug": ["unique-slug@5.0.0", "", { "dependencies": { "imurmurhash": "^0.1.4" } }, "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg=="],
278
+
279
+ "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="],
280
+
281
+ "which": ["which@5.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ=="],
282
+
283
+ "wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="],
284
+
285
+ "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="],
286
+
287
+ "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="],
288
+
289
+ "yerror": ["yerror@8.0.0", "", {}, "sha512-FemWD5/UqNm8ffj8oZIbjWXIF2KE0mZssggYpdaQkWDDgXBQ/35PNIxEuz6/YLn9o0kOxDBNJe8x8k9ljD7k/g=="],
290
+
291
+ "cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
292
+
293
+ "minipass-flush/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
294
+
295
+ "minipass-pipeline/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
296
+
297
+ "minipass-sized/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="],
298
+
299
+ "string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
300
+
301
+ "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
302
+
303
+ "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
304
+
305
+ "wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
306
+
307
+ "wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
308
+
309
+ "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
310
+
311
+ "cross-spawn/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
312
+
313
+ "minipass-flush/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="],
314
+
315
+ "minipass-pipeline/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="],
316
+
317
+ "minipass-sized/minipass/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="],
318
+
319
+ "string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
320
+
321
+ "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
322
+
323
+ "wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
109
324
  }
110
325
  }
@@ -0,0 +1,5 @@
1
+ ## [0.6.0] - 2026-04-20
2
+
3
+ ### 🚀 Features
4
+
5
+ - *(fonts)* Sync, process, optimize fonts
@@ -13,5 +13,10 @@ export interface AssetsOptimizeOptions {
13
13
  videoListOutputPath?: string;
14
14
  generateVideoList?: boolean;
15
15
  videoPreviewQuality?: number;
16
+ processFonts?: boolean;
17
+ fontOriginalsDir?: string;
18
+ fontOptimizedDir?: string;
19
+ fontListOutputPath?: string;
20
+ generateFontList?: boolean;
16
21
  }
17
22
  //# sourceMappingURL=AssetsOptimizeOptions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssetsOptimizeOptions.d.ts","sourceRoot":"","sources":["../src/AssetsOptimizeOptions.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,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,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;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,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"}
1
+ {"version":3,"file":"AssetsOptimizeOptions.d.ts","sourceRoot":"","sources":["../src/AssetsOptimizeOptions.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,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,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;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,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;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B"}
@@ -4,6 +4,8 @@ export interface AssetsOptimizeResult {
4
4
  skippedRootFiles: string[];
5
5
  warnings: string[];
6
6
  deletedLocal: string[];
7
+ processedFonts: string[];
8
+ skippedExistingFonts: string[];
7
9
  processedVideos: string[];
8
10
  skippedExistingVideos: string[];
9
11
  processedVideoPreviews: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"AssetsOptimizeResult.d.ts","sourceRoot":"","sources":["../src/AssetsOptimizeResult.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,qBAAqB,EAAE,MAAM,EAAE,CAAA;IAC/B,sBAAsB,EAAE,MAAM,EAAE,CAAA;IAChC,4BAA4B,EAAE,MAAM,EAAE,CAAA;CACvC"}
1
+ {"version":3,"file":"AssetsOptimizeResult.d.ts","sourceRoot":"","sources":["../src/AssetsOptimizeResult.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,oBAAoB,EAAE,MAAM,EAAE,CAAA;IAC9B,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,qBAAqB,EAAE,MAAM,EAAE,CAAA;IAC/B,sBAAsB,EAAE,MAAM,EAAE,CAAA;IAChC,4BAA4B,EAAE,MAAM,EAAE,CAAA;CACvC"}
@@ -1 +1 @@
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
+ {"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;AAKrE,wBAAsB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAuFvG"}
@@ -1,7 +1,8 @@
1
1
  import { optimizeImages } from "./image/optimizeImages.js";
2
2
  import { optimizeVideos } from "./video/optimizeVideos.js";
3
+ import { optimizeFonts } from "./font/optimizeFonts.js";
3
4
  export async function assetsOptimize(options = {}) {
4
- const [imageResult, videoResult] = await Promise.all([
5
+ const [imageResult, videoResult, fontResult] = await Promise.all([
5
6
  options.processImages !== false
6
7
  ? optimizeImages({
7
8
  cwd: options.cwd,
@@ -18,6 +19,8 @@ export async function assetsOptimize(options = {}) {
18
19
  skippedRootFiles: [],
19
20
  warnings: [],
20
21
  deletedLocal: [],
22
+ processedFonts: [],
23
+ skippedExistingFonts: [],
21
24
  processedVideos: [],
22
25
  skippedExistingVideos: [],
23
26
  processedVideoPreviews: [],
@@ -39,6 +42,30 @@ export async function assetsOptimize(options = {}) {
39
42
  skippedRootFiles: [],
40
43
  warnings: [],
41
44
  deletedLocal: [],
45
+ processedFonts: [],
46
+ skippedExistingFonts: [],
47
+ processedVideos: [],
48
+ skippedExistingVideos: [],
49
+ processedVideoPreviews: [],
50
+ skippedExistingVideoPreviews: [],
51
+ }),
52
+ options.processFonts !== false
53
+ ? optimizeFonts({
54
+ cwd: options.cwd,
55
+ logLevel: options.logLevel,
56
+ fontOriginalsDir: options.fontOriginalsDir,
57
+ fontOptimizedDir: options.fontOptimizedDir,
58
+ fontListOutputPath: options.fontListOutputPath,
59
+ generateFontList: options.generateFontList,
60
+ })
61
+ : Promise.resolve({
62
+ processed: [],
63
+ skippedExisting: [],
64
+ skippedRootFiles: [],
65
+ warnings: [],
66
+ deletedLocal: [],
67
+ processedFonts: [],
68
+ skippedExistingFonts: [],
42
69
  processedVideos: [],
43
70
  skippedExistingVideos: [],
44
71
  processedVideoPreviews: [],
@@ -49,8 +76,10 @@ export async function assetsOptimize(options = {}) {
49
76
  processed: imageResult.processed,
50
77
  skippedExisting: imageResult.skippedExisting,
51
78
  skippedRootFiles: imageResult.skippedRootFiles,
52
- warnings: [...imageResult.warnings, ...videoResult.warnings],
79
+ warnings: [...imageResult.warnings, ...videoResult.warnings, ...fontResult.warnings],
53
80
  deletedLocal: imageResult.deletedLocal,
81
+ processedFonts: fontResult.processedFonts,
82
+ skippedExistingFonts: fontResult.skippedExistingFonts,
54
83
  processedVideos: videoResult.processedVideos,
55
84
  skippedExistingVideos: videoResult.skippedExistingVideos,
56
85
  processedVideoPreviews: videoResult.processedVideoPreviews,
@@ -0,0 +1,9 @@
1
+ export interface OptimizeFontsOptions {
2
+ cwd?: string;
3
+ logLevel?: 0 | 1 | 2 | 3;
4
+ fontOriginalsDir?: string;
5
+ fontOptimizedDir?: string;
6
+ fontListOutputPath?: string;
7
+ generateFontList?: boolean;
8
+ }
9
+ //# sourceMappingURL=OptimizeFontsOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptimizeFontsOptions.d.ts","sourceRoot":"","sources":["../../src/font/OptimizeFontsOptions.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ export interface ProcessFontsOptions {
2
+ cwd?: string;
3
+ logLevel?: 0 | 1 | 2 | 3;
4
+ sourceFontsRemotePath: string;
5
+ destFontsRemotePath: string;
6
+ fontOriginalsDir?: string;
7
+ fontOptimizedDir?: string;
8
+ fontListOutputPath?: string;
9
+ fontCacheControl?: string;
10
+ resync?: boolean;
11
+ processFonts?: boolean;
12
+ }
13
+ //# sourceMappingURL=ProcessFontsOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessFontsOptions.d.ts","sourceRoot":"","sources":["../../src/font/ProcessFontsOptions.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACxB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,mBAAmB,EAAE,MAAM,CAAA;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import type { AssetsOptimizeResult } from "../AssetsOptimizeResult.js";
2
+ import type { OptimizeFontsOptions } from "./OptimizeFontsOptions.js";
3
+ export declare function optimizeFonts(options?: OptimizeFontsOptions): Promise<AssetsOptimizeResult>;
4
+ //# sourceMappingURL=optimizeFonts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimizeFonts.d.ts","sourceRoot":"","sources":["../../src/font/optimizeFonts.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAsCrE,wBAAsB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAwCrG"}
@@ -0,0 +1,65 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import ttf2woff2 from "ttf2woff2";
4
+ import { dirExists } from "../shared/dirExists.js";
5
+ import { createLogger } from "../shared/logger.js";
6
+ import { printSummary } from "../shared/printSummary.js";
7
+ import { walkFiles } from "../shared/walkFiles.js";
8
+ import { supportedFontSourceExtensions } from "./supportedFontExtensions.js";
9
+ import { generateFontList } from "../list/generateFontList.js";
10
+ import { parseFontFilename } from "./parseFontFilename.js";
11
+ async function processFontFile(sourcePath, originalsDir, optimizedDir, result, logger) {
12
+ const extension = path.extname(sourcePath).toLowerCase();
13
+ const relativePath = path.relative(originalsDir, sourcePath);
14
+ const relativePathWithoutExt = relativePath.replace(/\.[^.]+$/, "");
15
+ const outputPath = path.join(optimizedDir, relativePathWithoutExt + ".woff2");
16
+ parseFontFilename(path.basename(sourcePath));
17
+ try {
18
+ await fs.access(outputPath);
19
+ result.skippedExistingFonts.push(relativePath);
20
+ return;
21
+ }
22
+ catch { }
23
+ await fs.mkdir(path.dirname(outputPath), { recursive: true });
24
+ if (supportedFontSourceExtensions.has(extension)) {
25
+ const inputBuffer = await fs.readFile(sourcePath);
26
+ const woff2Buffer = ttf2woff2(inputBuffer);
27
+ await fs.writeFile(outputPath, woff2Buffer);
28
+ result.processedFonts.push(relativePath);
29
+ }
30
+ }
31
+ export async function optimizeFonts(options = {}) {
32
+ const cwd = path.resolve(options.cwd ?? process.cwd());
33
+ const fontOriginalsDir = path.resolve(cwd, options.fontOriginalsDir ?? "fonts");
34
+ const fontOptimizedDir = path.resolve(cwd, options.fontOptimizedDir ?? "public/fonts");
35
+ const fontListOutputPath = path.resolve(cwd, options.fontListOutputPath ?? "src/app/assets/fontList.ts");
36
+ const logger = createLogger(options.logLevel);
37
+ const result = {
38
+ processed: [],
39
+ skippedExisting: [],
40
+ skippedRootFiles: [],
41
+ warnings: [],
42
+ deletedLocal: [],
43
+ processedFonts: [],
44
+ skippedExistingFonts: [],
45
+ processedVideos: [],
46
+ skippedExistingVideos: [],
47
+ processedVideoPreviews: [],
48
+ skippedExistingVideoPreviews: [],
49
+ };
50
+ if (await dirExists(fontOriginalsDir)) {
51
+ for (const sourceFile of await walkFiles(fontOriginalsDir)) {
52
+ const extension = path.extname(sourceFile).toLowerCase();
53
+ if (!supportedFontSourceExtensions.has(extension)) {
54
+ result.warnings.push(`Skipped unsupported font source file: ${sourceFile}`);
55
+ continue;
56
+ }
57
+ await processFontFile(sourceFile, fontOriginalsDir, fontOptimizedDir, result, logger);
58
+ }
59
+ }
60
+ if (options.generateFontList !== false) {
61
+ await generateFontList(fontOptimizedDir, fontListOutputPath, undefined, logger);
62
+ }
63
+ printSummary(result, logger);
64
+ return result;
65
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Parse font metadata from filename.
3
+ * Expected format: {family}[-{style}][-{weight}].{ext}
4
+ *
5
+ * Examples:
6
+ * - Roboto-Regular.ttf → { fontFamily: "Roboto", fontStyle: "normal", fontWeight: 400 }
7
+ * - OpenSans-BoldItalic.ttf → { fontFamily: "Open Sans", fontStyle: "italic", fontWeight: 700 }
8
+ * - Inter-Medium.ttf → { fontFamily: "Inter", fontStyle: "normal", fontWeight: 500 }
9
+ * - Nunito.ttf → { fontFamily: "Nunito", fontStyle: "normal", fontWeight: 400 }
10
+ * - Lato-Black.ttf → { fontFamily: "Lato", fontStyle: "normal", fontWeight: 900 }
11
+ */
12
+ export declare function parseFontFilename(filename: string): {
13
+ fontFamily: string;
14
+ fontStyle: "normal" | "italic";
15
+ fontWeight: number;
16
+ };
17
+ //# sourceMappingURL=parseFontFilename.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseFontFilename.d.ts","sourceRoot":"","sources":["../../src/font/parseFontFilename.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG;IACnD,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;CACnB,CAkEA"}
@@ -0,0 +1,75 @@
1
+ import path from "node:path";
2
+ /**
3
+ * Parse font metadata from filename.
4
+ * Expected format: {family}[-{style}][-{weight}].{ext}
5
+ *
6
+ * Examples:
7
+ * - Roboto-Regular.ttf → { fontFamily: "Roboto", fontStyle: "normal", fontWeight: 400 }
8
+ * - OpenSans-BoldItalic.ttf → { fontFamily: "Open Sans", fontStyle: "italic", fontWeight: 700 }
9
+ * - Inter-Medium.ttf → { fontFamily: "Inter", fontStyle: "normal", fontWeight: 500 }
10
+ * - Nunito.ttf → { fontFamily: "Nunito", fontStyle: "normal", fontWeight: 400 }
11
+ * - Lato-Black.ttf → { fontFamily: "Lato", fontStyle: "normal", fontWeight: 900 }
12
+ */
13
+ export function parseFontFilename(filename) {
14
+ const basename = path.basename(filename);
15
+ const extension = path.extname(basename);
16
+ const nameWithoutExt = basename.replace(new RegExp(`\\${extension}$`), "");
17
+ const parts = nameWithoutExt.split("-");
18
+ let fontFamily = "";
19
+ let fontStyle = "normal";
20
+ let fontWeight = 400;
21
+ const weightMap = {
22
+ Thin: 100,
23
+ ExtraLight: 200,
24
+ Light: 300,
25
+ Regular: 400,
26
+ Medium: 500,
27
+ SemiBold: 600,
28
+ Bold: 700,
29
+ ExtraBold: 800,
30
+ Black: 900,
31
+ };
32
+ if (parts.length === 1) {
33
+ fontFamily = parts[0] ?? nameWithoutExt;
34
+ }
35
+ else if (parts.length === 2) {
36
+ const first = parts[0] ?? "";
37
+ const second = parts[1] ?? "";
38
+ if (second in weightMap) {
39
+ fontFamily = first;
40
+ fontWeight = weightMap[second];
41
+ }
42
+ else if (second.match(/^\d{3}$/)) {
43
+ fontFamily = first;
44
+ fontWeight = parseInt(second, 10);
45
+ }
46
+ else if (second === "Italic") {
47
+ fontFamily = first;
48
+ fontStyle = "italic";
49
+ }
50
+ else {
51
+ fontFamily = `${first} ${second}`;
52
+ }
53
+ }
54
+ else {
55
+ const first = parts[0] ?? "";
56
+ let last = parts[parts.length - 1] ?? "";
57
+ const second = parts[1] ?? "";
58
+ if (last === "Italic") {
59
+ fontStyle = "italic";
60
+ parts.pop();
61
+ last = parts[parts.length - 1] ?? "";
62
+ }
63
+ if (last.match(/^\d{3}$/)) {
64
+ fontWeight = parseInt(last, 10);
65
+ parts.pop();
66
+ }
67
+ else if (last in weightMap) {
68
+ fontWeight = weightMap[last];
69
+ parts.pop();
70
+ }
71
+ fontFamily = parts.join(" ");
72
+ }
73
+ fontFamily = fontFamily.replace(/([a-z])([A-Z])/g, "$1 $2");
74
+ return { fontFamily, fontStyle, fontWeight };
75
+ }
@@ -0,0 +1,3 @@
1
+ export declare const supportedFontSourceExtensions: Set<string>;
2
+ export declare const supportedFontOutputExtensions: Set<string>;
3
+ //# sourceMappingURL=supportedFontExtensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supportedFontExtensions.d.ts","sourceRoot":"","sources":["../../src/font/supportedFontExtensions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,6BAA6B,aAA4B,CAAA;AAEtE,eAAO,MAAM,6BAA6B,aAAsB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export const supportedFontSourceExtensions = new Set([".ttf", ".otf"]);
2
+ export const supportedFontOutputExtensions = new Set([".woff2"]);
@@ -1 +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"}
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,CAmCvG"}
@@ -15,6 +15,8 @@ export async function optimizeImages(options = {}) {
15
15
  skippedRootFiles: [],
16
16
  warnings: [],
17
17
  deletedLocal: [],
18
+ processedFonts: [],
19
+ skippedExistingFonts: [],
18
20
  processedVideos: [],
19
21
  skippedExistingVideos: [],
20
22
  processedVideoPreviews: [],
package/dist/index.d.ts CHANGED
@@ -14,7 +14,13 @@ export * from "./image/processImages.js";
14
14
  export * from "./image/ProcessImagesOptions.js";
15
15
  export * from "./image/supportedSourceExtensions.js";
16
16
  export * from "./image/TransformSpec.js";
17
+ export * from "./font/OptimizeFontsOptions.js";
18
+ export * from "./font/optimizeFonts.js";
19
+ export * from "./font/parseFontFilename.js";
20
+ export * from "./font/ProcessFontsOptions.js";
21
+ export * from "./font/supportedFontExtensions.js";
17
22
  export * from "./list/AssetListTypes.js";
23
+ export * from "./list/generateFontList.js";
18
24
  export * from "./list/generateImageList.js";
19
25
  export * from "./list/generateVideoList.js";
20
26
  export * from "./process/processAssets.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,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,2BAA2B,CAAA;AACzC,cAAc,kCAAkC,CAAA;AAChD,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,4BAA4B,CAAA;AAC1C,cAAc,mCAAmC,CAAA;AACjD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mCAAmC,CAAA;AACjD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,2BAA2B,CAAA;AACzC,cAAc,kCAAkC,CAAA;AAChD,cAAc,0BAA0B,CAAA;AACxC,cAAc,iCAAiC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,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,2BAA2B,CAAA;AACzC,cAAc,kCAAkC,CAAA;AAChD,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,gCAAgC,CAAA;AAC9C,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,mCAAmC,CAAA;AACjD,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,mCAAmC,CAAA;AACjD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mCAAmC,CAAA;AACjD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,2BAA2B,CAAA;AACzC,cAAc,kCAAkC,CAAA;AAChD,cAAc,0BAA0B,CAAA;AACxC,cAAc,iCAAiC,CAAA"}
package/dist/index.js CHANGED
@@ -14,7 +14,13 @@ export * from "./image/processImages.js";
14
14
  export * from "./image/ProcessImagesOptions.js";
15
15
  export * from "./image/supportedSourceExtensions.js";
16
16
  export * from "./image/TransformSpec.js";
17
+ export * from "./font/OptimizeFontsOptions.js";
18
+ export * from "./font/optimizeFonts.js";
19
+ export * from "./font/parseFontFilename.js";
20
+ export * from "./font/ProcessFontsOptions.js";
21
+ export * from "./font/supportedFontExtensions.js";
17
22
  export * from "./list/AssetListTypes.js";
23
+ export * from "./list/generateFontList.js";
18
24
  export * from "./list/generateImageList.js";
19
25
  export * from "./list/generateVideoList.js";
20
26
  export * from "./process/processAssets.js";
@@ -10,4 +10,11 @@ export interface VideoType {
10
10
  mimeType?: string;
11
11
  image: ImageType;
12
12
  }
13
+ export interface FontType {
14
+ path: string;
15
+ fontFamily: string;
16
+ fontStyle: "normal" | "italic";
17
+ fontWeight: number;
18
+ mimeType?: string;
19
+ }
13
20
  //# sourceMappingURL=AssetListTypes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssetListTypes.d.ts","sourceRoot":"","sources":["../../src/list/AssetListTypes.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,SAAS,CAAA;CACjB"}
1
+ {"version":3,"file":"AssetListTypes.d.ts","sourceRoot":"","sources":["../../src/list/AssetListTypes.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB"}
@@ -0,0 +1,3 @@
1
+ import type { Logger } from "../shared/logger.js";
2
+ export declare function generateFontList(fontsDirectory: string, outputPath: string, fontTypeImportPath?: string, logger?: Logger): Promise<void>;
3
+ //# sourceMappingURL=generateFontList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateFontList.d.ts","sourceRoot":"","sources":["../../src/list/generateFontList.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAUjD,wBAAsB,gBAAgB,CACpC,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,kBAAkB,CAAC,EAAE,MAAM,EAC3B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAUf"}
@@ -0,0 +1,58 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { getOwnPackageName } from "../shared/getOwnPackageName.js";
4
+ import { isMissingDirError } from "../shared/isMissingDirError.js";
5
+ import { walkFiles } from "../shared/walkFiles.js";
6
+ import { supportedFontOutputExtensions } from "../font/supportedFontExtensions.js";
7
+ import { formatGeneratedCodeFile } from "./formatGeneratedCodeFile.js";
8
+ import { getAssetKey } from "./getAssetKey.js";
9
+ import { loadExistingAssetList } from "./loadExistingAssetList.js";
10
+ import { sortAssetMap } from "./sortAssetMap.js";
11
+ import { parseFontFilename } from "../font/parseFontFilename.js";
12
+ export async function generateFontList(fontsDirectory, outputPath, fontTypeImportPath, logger) {
13
+ const resolvedFontTypeImportPath = fontTypeImportPath ?? (await getOwnPackageName(import.meta.url));
14
+ const existingFonts = await loadExistingAssetList(outputPath, "fontList");
15
+ const fontMap = sortAssetMap(await processFontFiles(fontsDirectory, existingFonts));
16
+ await fs.mkdir(path.dirname(outputPath), { recursive: true });
17
+ await Bun.write(outputPath, createGeneratedFontListContent(fontMap, resolvedFontTypeImportPath));
18
+ await formatGeneratedCodeFile(outputPath, logger);
19
+ logger?.files(`generated font list: ${outputPath}`);
20
+ logger?.summary(`Generated ${Object.keys(fontMap).length} fonts to ${outputPath}`);
21
+ }
22
+ async function processFontFiles(directory, existingFonts) {
23
+ const fontMap = {};
24
+ let filePaths;
25
+ try {
26
+ filePaths = await walkFiles(directory);
27
+ }
28
+ catch (error) {
29
+ if (isMissingDirError(error)) {
30
+ return fontMap;
31
+ }
32
+ throw error;
33
+ }
34
+ for (const filePath of filePaths) {
35
+ const extension = path.extname(filePath).toLowerCase();
36
+ if (!supportedFontOutputExtensions.has(extension)) {
37
+ continue;
38
+ }
39
+ const relativePath = path.relative(directory, filePath);
40
+ const key = getAssetKey(filePath);
41
+ const fontMeta = parseFontFilename(filePath);
42
+ fontMap[key] = {
43
+ path: relativePath,
44
+ fontFamily: fontMeta.fontFamily,
45
+ fontStyle: fontMeta.fontStyle,
46
+ fontWeight: fontMeta.fontWeight,
47
+ mimeType: "font/woff2",
48
+ };
49
+ }
50
+ return fontMap;
51
+ }
52
+ function createGeneratedFontListContent(fontMap, fontTypeImportPath) {
53
+ return `import type { FontType } from "${fontTypeImportPath}"
54
+
55
+ // Auto-generated, manual changes will be lost, generated by optimizeAssets from @adaptive-ds/assets-optimizer
56
+ export const fontList = ${JSON.stringify(fontMap, null, 2)} as const satisfies Record<string, FontType>
57
+ `;
58
+ }
@@ -2,20 +2,27 @@ import type { AssetsOptimizeOptions } from "../AssetsOptimizeOptions.js";
2
2
  export interface ProcessAssetsOptions extends AssetsOptimizeOptions {
3
3
  sourceImagesRemotePath: string;
4
4
  sourceVideosRemotePath: string;
5
+ sourceFontsRemotePath: string;
5
6
  destImagesRemotePath: string;
6
7
  destVideosRemotePath: string;
8
+ destFontsRemotePath: string;
7
9
  cwd?: string;
8
10
  resync?: boolean;
9
11
  processImages?: boolean;
10
12
  processVideos?: boolean;
13
+ processFonts?: boolean;
11
14
  imageOriginalsDir?: string;
12
15
  imageOptimizedDir?: string;
13
16
  videoOriginalsDir?: string;
14
17
  videoOptimizedDir?: string;
18
+ fontOriginalsDir?: string;
19
+ fontOptimizedDir?: string;
15
20
  imageListOutputPath?: string;
16
21
  videoListOutputPath?: string;
22
+ fontListOutputPath?: string;
17
23
  assetsOptimizeLocallyFn?: () => Promise<void>;
18
24
  imageCacheControl?: string;
19
25
  videoCacheControl?: string;
26
+ fontCacheControl?: string;
20
27
  }
21
28
  //# sourceMappingURL=ProcessAssetsOptions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProcessAssetsOptions.d.ts","sourceRoot":"","sources":["../../src/process/ProcessAssetsOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAExE,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IACjE,sBAAsB,EAAE,MAAM,CAAA;IAC9B,sBAAsB,EAAE,MAAM,CAAA;IAC9B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,uBAAuB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B"}
1
+ {"version":3,"file":"ProcessAssetsOptions.d.ts","sourceRoot":"","sources":["../../src/process/ProcessAssetsOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAExE,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IACjE,sBAAsB,EAAE,MAAM,CAAA;IAC9B,sBAAsB,EAAE,MAAM,CAAA;IAC9B,qBAAqB,EAAE,MAAM,CAAA;IAC7B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,mBAAmB,EAAE,MAAM,CAAA;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,uBAAuB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"processAssets.d.ts","sourceRoot":"","sources":["../../src/process/processAssets.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAGrE,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFhF"}
1
+ {"version":3,"file":"processAssets.d.ts","sourceRoot":"","sources":["../../src/process/processAssets.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAGrE,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwGhF"}
@@ -3,19 +3,22 @@ import { bisync } from "../rclone/bisync.js";
3
3
  import { runRclone } from "../rclone/runRclone.js";
4
4
  import { shouldBisync } from "./utils/shouldBisync.js";
5
5
  export async function processAssets(options) {
6
- const { sourceImagesRemotePath, sourceVideosRemotePath, destImagesRemotePath, destVideosRemotePath, cwd = process.cwd(), resync = false, processImages = true, processVideos = true, imageOriginalsDir = "./images", imageOptimizedDir = "./public/images", videoOriginalsDir = "./videos", videoOptimizedDir = "./public/videos", imageListOutputPath = "./src/app/assets/imageList.ts", videoListOutputPath = "./src/app/assets/videoList.ts", assetsOptimizeLocallyFn, imageCacheControl = "Cache-Control:public, max-age=31536000, immutable", videoCacheControl = "Cache-Control:public, max-age=259200, immutable", logLevel, ...assetsOptimizeOptions } = options;
7
- if (!processImages && !processVideos) {
6
+ const { sourceImagesRemotePath, sourceVideosRemotePath, sourceFontsRemotePath, destImagesRemotePath, destVideosRemotePath, destFontsRemotePath, cwd = process.cwd(), resync = false, processImages = true, processVideos = true, processFonts = true, imageOriginalsDir = "./images", imageOptimizedDir = "./public/images", videoOriginalsDir = "./videos", videoOptimizedDir = "./public/videos", fontOriginalsDir = "./fonts", fontOptimizedDir = "./public/fonts", imageListOutputPath = "./src/app/assets/imageList.ts", videoListOutputPath = "./src/app/assets/videoList.ts", fontListOutputPath = "./src/app/assets/fontList.ts", assetsOptimizeLocallyFn, imageCacheControl = "Cache-Control:public, max-age=31536000, immutable", videoCacheControl = "Cache-Control:public, max-age=259200, immutable", fontCacheControl = "Cache-Control:public, max-age=31536000, immutable", logLevel, ...assetsOptimizeOptions } = options;
7
+ if (!processImages && !processVideos && !processFonts) {
8
8
  if ((logLevel ?? 3) >= 2)
9
- console.log("Nothing to process (both images and videos disabled)");
9
+ console.log("Nothing to process (images, videos, and fonts disabled)");
10
10
  return;
11
11
  }
12
12
  const sourceImages = sourceImagesRemotePath;
13
13
  const sourceVideos = sourceVideosRemotePath;
14
+ const sourceFonts = sourceFontsRemotePath;
14
15
  const destImages = destImagesRemotePath;
15
16
  const destVideos = destVideosRemotePath;
17
+ const destFonts = destFontsRemotePath;
16
18
  const syncImages = processImages ? await shouldBisync(imageOriginalsDir, sourceImages) : false;
17
19
  const syncVideos = processVideos ? await shouldBisync(videoOriginalsDir, sourceVideos) : false;
18
- if (!syncImages && !syncVideos) {
20
+ const syncFonts = processFonts ? await shouldBisync(fontOriginalsDir, sourceFonts) : false;
21
+ if (!syncImages && !syncVideos && !syncFonts) {
19
22
  if ((logLevel ?? 3) >= 2)
20
23
  console.log("No sync needed (local and remote both empty)");
21
24
  return;
@@ -30,6 +33,11 @@ export async function processAssets(options) {
30
33
  console.log(`Syncing videos: ${videoOriginalsDir} <-> ${sourceVideos}`);
31
34
  await bisync(videoOriginalsDir, sourceVideos, { cwd, resync });
32
35
  }
36
+ if (syncFonts) {
37
+ if ((logLevel ?? 3) >= 2)
38
+ console.log(`Syncing fonts: ${fontOriginalsDir} <-> ${sourceFonts}`);
39
+ await bisync(fontOriginalsDir, sourceFonts, { cwd, resync });
40
+ }
33
41
  if (assetsOptimizeLocallyFn) {
34
42
  if ((logLevel ?? 3) >= 2)
35
43
  console.log("Running custom assetsOptimizeLocallyFn");
@@ -43,12 +51,16 @@ export async function processAssets(options) {
43
51
  logLevel: logLevel ?? 3,
44
52
  processImages,
45
53
  processVideos,
54
+ processFonts,
46
55
  imageOriginalsDir,
47
56
  imageOptimizedDir,
48
57
  imageListOutputPath,
49
58
  videoOriginalsDir,
50
59
  videoOptimizedDir,
51
60
  videoListOutputPath,
61
+ fontOriginalsDir,
62
+ fontOptimizedDir,
63
+ fontListOutputPath,
52
64
  ...assetsOptimizeOptions,
53
65
  });
54
66
  }
@@ -62,4 +74,9 @@ export async function processAssets(options) {
62
74
  console.log(`Uploading optimized videos: ${videoOptimizedDir} -> ${destVideos}`);
63
75
  await runRclone(["sync", videoOptimizedDir, destVideos, "--header-upload", videoCacheControl], cwd);
64
76
  }
77
+ if (syncFonts) {
78
+ if ((logLevel ?? 3) >= 2)
79
+ console.log(`Uploading optimized fonts: ${fontOptimizedDir} -> ${destFonts}`);
80
+ await runRclone(["sync", fontOptimizedDir, destFonts, "--header-upload", fontCacheControl], cwd);
81
+ }
65
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"printSummary.d.ts","sourceRoot":"","sources":["../../src/shared/printSummary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,wBAAgB,YAAY,CAAC,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CA6B/E"}
1
+ {"version":3,"file":"printSummary.d.ts","sourceRoot":"","sources":["../../src/shared/printSummary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,wBAAgB,YAAY,CAAC,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAmC/E"}
@@ -3,6 +3,8 @@ export function printSummary(result, logger) {
3
3
  logger.summary(`Skipped ${result.skippedExisting.length} existing optimized images`);
4
4
  logger.summary(`Skipped ${result.skippedRootFiles.length} root original files`);
5
5
  logger.summary(`Deleted ${result.deletedLocal.length} stale local optimized images`);
6
+ logger.summary(`Processed ${result.processedFonts.length} new optimized fonts`);
7
+ logger.summary(`Skipped ${result.skippedExistingFonts.length} existing optimized fonts`);
6
8
  logger.summary(`Processed ${result.processedVideos.length} new optimized videos`);
7
9
  logger.summary(`Skipped ${result.skippedExistingVideos.length} existing processed videos`);
8
10
  logger.summary(`Generated ${result.processedVideoPreviews.length} new video previews`);
@@ -13,6 +15,9 @@ export function printSummary(result, logger) {
13
15
  for (const fileName of result.deletedLocal) {
14
16
  logger.files(`deleted local image: ${fileName}`);
15
17
  }
18
+ for (const fileName of result.processedFonts) {
19
+ logger.files(`processed font: ${fileName}`);
20
+ }
16
21
  for (const fileName of result.processedVideos) {
17
22
  logger.files(`processed video: ${fileName}`);
18
23
  }
@@ -1 +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"}
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,CAiCvG"}
@@ -64,6 +64,8 @@ export async function optimizeVideos(options = {}) {
64
64
  skippedRootFiles: [],
65
65
  warnings: [],
66
66
  deletedLocal: [],
67
+ processedFonts: [],
68
+ skippedExistingFonts: [],
67
69
  processedVideos: [],
68
70
  skippedExistingVideos: [],
69
71
  processedVideoPreviews: [],
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "@adaptive-ds/assets-optimizer",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "main": "./dist/index.js",
5
5
  "dependencies": {
6
6
  "image-size": "^2.0.2",
7
- "sharp": "^0.34.5"
7
+ "sharp": "^0.34.5",
8
+ "ttf2woff2": "^8.0.1"
8
9
  },
9
10
  "devDependencies": {
10
11
  "@biomejs/biome": "^2.4.11",