UNPKG

@realfavicongenerator/generate-favicon

Version:
68 lines (67 loc) 3.82 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateDesktopFaviconFiles = exports.generateDesktopFaviconHtml = exports.IcoFaviconFileName = exports.SvgFaviconFileName = exports.PngFaviconFileName = exports.IcoFaviconSizes = exports.PngFaviconFileSize = void 0; const _1 = require("."); const helper_1 = require("../icon/helper"); const desktop_1 = require("../svg/desktop"); const ico_1 = require("../icon/ico"); const helper_2 = require("../helper"); const svg_1 = require("../svg"); exports.PngFaviconFileSize = 96; // Order matters: when given in asc order (16, 32, 48), the icon is corrupted when opend in Chrome. exports.IcoFaviconSizes = [48, 32, 16]; exports.PngFaviconFileName = `favicon-${exports.PngFaviconFileSize}x${exports.PngFaviconFileSize}.png`; exports.SvgFaviconFileName = "favicon.svg"; exports.IcoFaviconFileName = "favicon.ico"; function blobToBuffer(blob) { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onloadend = () => resolve(Buffer.from(reader.result)); reader.onerror = reject; reader.readAsArrayBuffer(blob); }); } const generateDesktopFaviconHtml = (faviconPath, transformer = _1.identityFaviconAssetPathTransformer) => { return { markups: [ `<link rel="icon" type="image/png" href="${transformer(`${faviconPath}${exports.PngFaviconFileName}`, true, false)}" sizes="${exports.PngFaviconFileSize}x${exports.PngFaviconFileSize}" />`, `<link rel="icon" type="image/svg+xml" href="${transformer(`${faviconPath}${exports.SvgFaviconFileName}`, true, false)}" />`, `<link rel="shortcut icon" href="${transformer(`${faviconPath}${exports.IcoFaviconFileName}`, true, false)}" />` ], cssSelectors: [ `link[rel="icon"][type="image/png"]`, `link[rel="icon"][type="image/svg\\+xml"]`, `link[rel="shortcut icon"]` ] }; }; exports.generateDesktopFaviconHtml = generateDesktopFaviconHtml; const generateDesktopFaviconFiles = (masterIcon, settings, imageAdapter) => __awaiter(void 0, void 0, void 0, function* () { const transformedRegularSvg = (0, helper_1.transformSvg)(masterIcon.icon, settings.regularIconTransformation, imageAdapter, 128); const regularIcon = yield imageAdapter.convertSvgToPng((0, svg_1.scaleSvg)(transformedRegularSvg, exports.PngFaviconFileSize, imageAdapter)); const theSvg = (0, desktop_1.createDesktopSvgIcon)(masterIcon, settings, imageAdapter); const pics = yield Promise.all(exports.IcoFaviconSizes.map((size) => __awaiter(void 0, void 0, void 0, function* () { const data = yield imageAdapter.getImageData((0, helper_2.convertSvgToDataUrl)(theSvg), size); return { data, width: size, height: size }; }))); const ico = (0, ico_1.imagesToIco)(pics); return { [exports.SvgFaviconFileName]: theSvg.svg(), [exports.PngFaviconFileName]: regularIcon, [exports.IcoFaviconFileName]: ico }; }); exports.generateDesktopFaviconFiles = generateDesktopFaviconFiles;