From 90967ab1099d16039e88dfe24f77793d171fe68b Mon Sep 17 00:00:00 2001 From: KernelDeimos Date: Wed, 18 Dec 2024 12:05:11 -0500 Subject: [PATCH] dev: add ico support --- package-lock.json | 61 ++++++++++++++++++++++ package.json | 2 + src/backend/src/services/AppIconService.js | 7 +++ 3 files changed, 70 insertions(+) diff --git a/package-lock.json b/package-lock.json index 7be249a6..52873424 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,8 @@ "json-colorizer": "^3.0.1", "open": "^10.1.0", "sharp": "^0.33.5", + "sharp-bmp": "^0.1.5", + "sharp-ico": "^0.1.5", "simple-git": "^3.25.0", "string-template": "^1.0.0", "uuid": "^9.0.1" @@ -2202,6 +2204,11 @@ "node": ">=6.9.0" } }, + "node_modules/@canvas/image-data": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@canvas/image-data/-/image-data-1.0.0.tgz", + "integrity": "sha512-BxOqI5LgsIQP1odU5KMwV9yoijleOPzHL18/YvNqF9KFSGF2K/DLlYAbDQsWqd/1nbaFuSkYD/191dpMtNh4vw==" + }, "node_modules/@colors/colors": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", @@ -9439,6 +9446,31 @@ "node": ">=0.10.0" } }, + "node_modules/decode-bmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/decode-bmp/-/decode-bmp-0.2.1.tgz", + "integrity": "sha512-NiOaGe+GN0KJqi2STf24hfMkFitDUaIoUU3eKvP/wAbLe8o6FuW5n/x7MHPR0HKvBokp6MQY/j7w8lewEeVCIA==", + "dependencies": { + "@canvas/image-data": "^1.0.0", + "to-data-view": "^1.1.0" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/decode-ico": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/decode-ico/-/decode-ico-0.4.1.tgz", + "integrity": "sha512-69NZfbKIzux1vBOd31al3XnMnH+2mqDhEgLdpygErm4d60N+UwA5Sq5WFjmEDQzumgB9fElojGwWG0vybVfFmA==", + "dependencies": { + "@canvas/image-data": "^1.0.0", + "decode-bmp": "^0.2.0", + "to-data-view": "^1.1.0" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -11519,6 +11551,11 @@ "ms": "^2.0.0" } }, + "node_modules/ico-endec": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ico-endec/-/ico-endec-0.1.6.tgz", + "integrity": "sha512-ZdLU38ZoED3g1j3iEyzcQj+wAkY2xfWNkymszfJPoxucIUhK7NayQ+/C4Kv0nDFMIsbtbEHldv3V8PU494/ueQ==" + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -15513,6 +15550,25 @@ "@img/sharp-win32-x64": "0.33.5" } }, + "node_modules/sharp-bmp": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/sharp-bmp/-/sharp-bmp-0.1.5.tgz", + "integrity": "sha512-IpWAy+AeTlWNHiBU8HH4atcKbztgKOXTuT4W8aFaeASPCeJwCVpoUymWMfEmwfvWSCOV1s7VmGTlKhcPLkt+Lw==", + "dependencies": { + "bmp-js": "*", + "sharp": "*" + } + }, + "node_modules/sharp-ico": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/sharp-ico/-/sharp-ico-0.1.5.tgz", + "integrity": "sha512-a3jODQl82NPp1d5OYb0wY+oFaPk7AvyxipIowCHk7pBsZCWgbe0yAkU2OOXdoH0ENyANhyOQbs9xkAiRHcF02Q==", + "dependencies": { + "decode-ico": "*", + "ico-endec": "*", + "sharp": "*" + } + }, "node_modules/sharp/node_modules/color": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", @@ -16331,6 +16387,11 @@ "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", "license": "MIT" }, + "node_modules/to-data-view": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/to-data-view/-/to-data-view-1.1.0.tgz", + "integrity": "sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ==" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", diff --git a/package.json b/package.json index 520f32b4..aad6784d 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,8 @@ "json-colorizer": "^3.0.1", "open": "^10.1.0", "sharp": "^0.33.5", + "sharp-bmp": "^0.1.5", + "sharp-ico": "^0.1.5", "simple-git": "^3.25.0", "string-template": "^1.0.0", "uuid": "^9.0.1" diff --git a/src/backend/src/services/AppIconService.js b/src/backend/src/services/AppIconService.js index 392e8bb9..36b1dead 100644 --- a/src/backend/src/services/AppIconService.js +++ b/src/backend/src/services/AppIconService.js @@ -25,6 +25,7 @@ class AppIconService extends BaseService { static MODULES = { sharp: require('sharp'), bmp: require('sharp-bmp'), + ico: require('sharp-ico'), } /** @@ -89,6 +90,12 @@ class AppIconService extends BaseService { return this.modules.bmp.sharpFromBmp(input); } + const icotypes = ['image/x-icon', 'image/vnd.microsoft.icon']; + if ( icotypes.includes(type) ) { + const sharps = this.modules.ico.sharpsFromIco(input); + return sharps[0]; + } + return this.modules.sharp(input); }