@realfavicongenerator/gulp-real-favicon
Version:
Generate a multiplatform favicon with RealFaviconGenerator and Gulp
147 lines (132 loc) • 6.29 kB
JavaScript
;
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;