UNPKG

@realfavicongenerator/gulp-real-favicon

Version:

Generate a multiplatform favicon with RealFaviconGenerator and Gulp

147 lines (132 loc) 6.29 kB
'use strict'; var imageAdapterNode = require('@realfavicongenerator/image-adapter-node'); var generateFavicon$1 = require('@realfavicongenerator/generate-favicon'); var fs = require('fs/promises'); var through = require('through2'); var injectMarkups = require('@realfavicongenerator/inject-markups'); var PluginError = require('plugin-error'); var log = require('fancy-log'); /****************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ /* global Reflect, Promise, SuppressedError, Symbol */ function __awaiter(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()); }); } function __values(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); if (o && typeof o.length === "number") return { next: function () { if (o && i >= o.length) o = void 0; return { value: o && o[i++], done: !o }; } }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); } function __asyncValues(o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator], i; return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } } typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { var e = new Error(message); return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; }; const toBuffer = (data) => __awaiter(void 0, void 0, void 0, function* () { if (data instanceof Buffer) { return data; } if (data instanceof Blob) { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => { if (reader.result instanceof ArrayBuffer) { resolve(Buffer.from(reader.result)); } else { reject(new Error('Failed to convert Blob to Buffer')); } }; reader.onerror = () => { reject(new Error('Failed to read Blob')); }; reader.readAsArrayBuffer(data); }); } return Buffer.from(data, 'utf8'); }); const generateFavicon = (params, callback) => __awaiter(void 0, void 0, void 0, function* () { var _a, e_1, _b, _c; const imageAdapter = yield imageAdapterNode.getNodeImageAdapter(); const masterIcon = { icon: yield imageAdapterNode.loadAndConvertToSvg(params.masterIcon), }; // Create output directory yield fs.mkdir(params.dest, { recursive: true }); // Generate files const files = yield generateFavicon$1.generateFaviconFiles(masterIcon, params.settings, imageAdapter); try { for (var _d = true, _e = __asyncValues(Object.keys(files)), _f; _f = yield _e.next(), _a = _f.done, !_a; _d = true) { _c = _f.value; _d = false; const fileName = _c; const file = files[fileName]; const filePath = `${params.dest}/${fileName}`; yield fs.writeFile(filePath, yield toBuffer(file)); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (!_d && !_a && (_b = _e.return)) yield _b.call(_e); } finally { if (e_1) throw e_1.error; } } // Generate HTML const html = yield generateFavicon$1.generateFaviconHtml(params.settings); fs.writeFile(params.markupFile, JSON.stringify(html, null, 2)); callback(); }); var PluginName = '@realfavicongenerator/gulp-real-favicon'; const injectFaviconMarkups = (params) => { var stream = through.obj(function (file, enc, cb) { if (file.isBuffer()) { const newContent = injectMarkups.injectMarkupInHtmlHead(file.contents, params.markups, params.cssSelectors); file.contents = Buffer.from(newContent); stream.push(file); cb(); } if (file.isStream()) { this.emit('error', new PluginError(PluginName, 'Stream not supported')); } }); // returning the file stream return stream; }; const checkForUpdates = (version, cb) => { log("Not implemented yet"); cb(null); }; const escapeJSONSpecialChars = (json) => { }; exports.checkForUpdates = checkForUpdates; exports.escapeJSONSpecialChars = escapeJSONSpecialChars; exports.generateFavicon = generateFavicon; exports.injectFaviconMarkups = injectFaviconMarkups;