@expo/webpack-pwa-manifest-plugin
Version:
Generates a progressive web app (PWA) manifest.json from a React Native app.json
466 lines (373 loc) • 14.7 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.parseIcons = undefined;
var _getIterator2;
function _load_getIterator() {
return _getIterator2 = _interopRequireDefault(require('babel-runtime/core-js/get-iterator'));
}
var _promise;
function _load_promise() {
return _promise = _interopRequireDefault(require('babel-runtime/core-js/promise'));
}
var _toConsumableArray2;
function _load_toConsumableArray() {
return _toConsumableArray2 = _interopRequireDefault(require('babel-runtime/helpers/toConsumableArray'));
}
var _objectWithoutProperties2;
function _load_objectWithoutProperties() {
return _objectWithoutProperties2 = _interopRequireDefault(require('babel-runtime/helpers/objectWithoutProperties'));
}
var _regenerator;
function _load_regenerator() {
return _regenerator = _interopRequireDefault(require('babel-runtime/regenerator'));
}
var _asyncToGenerator2;
function _load_asyncToGenerator() {
return _asyncToGenerator2 = _interopRequireDefault(require('babel-runtime/helpers/asyncToGenerator'));
}
var getBufferWithMimeAsync = function () {
var _ref = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( /*#__PURE__*/(_regenerator || _load_regenerator()).default.mark(function _callee(_ref2, mimeType, _ref3) {
var src = _ref2.src,
resizeMode = _ref2.resizeMode,
color = _ref2.color;
var width = _ref3.width,
height = _ref3.height;
var imagePath;
return (_regenerator || _load_regenerator()).default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
imagePath = void 0;
if (supportedMimeTypes.includes(mimeType)) {
_context.next = 5;
break;
}
imagePath = src;
_context.next = 8;
break;
case 5:
_context.next = 7;
return resize(src, mimeType, width, height, resizeMode, color);
case 7:
imagePath = _context.sent;
case 8:
_context.prev = 8;
_context.next = 11;
return (_fsExtra || _load_fsExtra()).default.readFile(imagePath);
case 11:
return _context.abrupt('return', _context.sent);
case 14:
_context.prev = 14;
_context.t0 = _context['catch'](8);
throw new (_IconError || _load_IconError()).default('It was not possible to read \'' + src + '\'.');
case 17:
case 'end':
return _context.stop();
}
}
}, _callee, this, [[8, 14]]);
}));
return function getBufferWithMimeAsync(_x, _x2, _x3) {
return _ref.apply(this, arguments);
};
}();
var processImage = function () {
var _ref4 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( /*#__PURE__*/(_regenerator || _load_regenerator()).default.mark(function _callee2(size, icon, fingerprint, publicPath) {
var _parseSize, width, height, mimeType, _buffer;
return (_regenerator || _load_regenerator()).default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_parseSize = parseSize(size), width = _parseSize.width, height = _parseSize.height;
if (!(width <= 0 || height <= 0)) {
_context2.next = 3;
break;
}
return _context2.abrupt('return');
case 3:
mimeType = (_mime || _load_mime()).default.getType(icon.src);
_context2.next = 6;
return getBufferWithMimeAsync(icon, mimeType, { width: width, height: height });
case 6:
_buffer = _context2.sent;
return _context2.abrupt('return', processIcon(width, height, icon, _buffer, mimeType, publicPath, fingerprint));
case 8:
case 'end':
return _context2.stop();
}
}
}, _callee2, this);
}));
return function processImage(_x4, _x5, _x6, _x7) {
return _ref4.apply(this, arguments);
};
}();
var resize = function () {
var _ref5 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( /*#__PURE__*/(_regenerator || _load_regenerator()).default.mark(function _callee3(inputPath, mimeType, width, height) {
var fit = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'contain';
var background = arguments[5];
var outputPath, message;
return (_regenerator || _load_regenerator()).default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.prev = 0;
outputPath = (_tempy || _load_tempy()).default.directory();
_context3.next = 4;
return (0, (_imageUtils || _load_imageUtils()).sharpAsync)({
input: inputPath,
output: outputPath,
format: mimeType.split('/')[1]
}, [{
operation: 'resize',
width: width,
height: height,
fit: fit,
background: background
}]);
case 4:
return _context3.abrupt('return', _path.default.join(outputPath, _path.default.basename(inputPath)));
case 7:
_context3.prev = 7;
_context3.t0 = _context3['catch'](0);
message = _context3.t0.message;
throw new (_IconError || _load_IconError()).default('It was not possible to generate splash screen \'' + inputPath + '\'. ' + message);
case 11:
case 'end':
return _context3.stop();
}
}
}, _callee3, this, [[0, 7]]);
}));
return function resize(_x8, _x9, _x10, _x11) {
return _ref5.apply(this, arguments);
};
}();
var parseIcons = exports.parseIcons = function () {
var _ref7 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( /*#__PURE__*/(_regenerator || _load_regenerator()).default.mark(function _callee5(inputIcons, fingerprint, publicPath) {
var _this = this;
var icons, assets, promises, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _loop, _iterator, _step;
return (_regenerator || _load_regenerator()).default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
if (inputIcons.length) {
_context5.next = 2;
break;
}
return _context5.abrupt('return', {});
case 2:
icons = [];
assets = [];
promises = [];
_iteratorNormalCompletion = true;
_didIteratorError = false;
_iteratorError = undefined;
_context5.prev = 8;
_loop = function _loop() {
var icon = _step.value;
var sizes = icon.sizes;
promises = [].concat((0, (_toConsumableArray2 || _load_toConsumableArray()).default)(promises), (0, (_toConsumableArray2 || _load_toConsumableArray()).default)(sizes.map(function () {
var _ref10 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( /*#__PURE__*/(_regenerator || _load_regenerator()).default.mark(function _callee4(size) {
var _ref11, manifestIcon, webpackAsset;
return (_regenerator || _load_regenerator()).default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
_context4.next = 2;
return processImage(size, icon, fingerprint, publicPath);
case 2:
_ref11 = _context4.sent;
manifestIcon = _ref11.manifestIcon;
webpackAsset = _ref11.webpackAsset;
icons.push(manifestIcon);
assets.push(webpackAsset);
case 7:
case 'end':
return _context4.stop();
}
}
}, _callee4, _this);
}));
return function (_x16) {
return _ref10.apply(this, arguments);
};
}())));
};
for (_iterator = (0, (_getIterator2 || _load_getIterator()).default)(inputIcons); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
_loop();
}
_context5.next = 17;
break;
case 13:
_context5.prev = 13;
_context5.t0 = _context5['catch'](8);
_didIteratorError = true;
_iteratorError = _context5.t0;
case 17:
_context5.prev = 17;
_context5.prev = 18;
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
case 20:
_context5.prev = 20;
if (!_didIteratorError) {
_context5.next = 23;
break;
}
throw _iteratorError;
case 23:
return _context5.finish(20);
case 24:
return _context5.finish(17);
case 25:
_context5.next = 27;
return (_promise || _load_promise()).default.all(promises);
case 27:
return _context5.abrupt('return', {
icons: icons.filter(function (icon) {
return icon;
}).sort(function (_ref8, _ref9) {
var sizes = _ref8.sizes;
var sizesB = _ref9.sizes;
if (sizes < sizesB) return -1;else if (sizes > sizesB) return 1;
return 0;
}),
// startupImages: icons.filter(({ isStartupImage }) => isStartupImage),
assets: assets
});
case 28:
case 'end':
return _context5.stop();
}
}
}, _callee5, this, [[8, 13, 17, 25], [18,, 20, 24]]);
}));
return function parseIcons(_x13, _x14, _x15) {
return _ref7.apply(this, arguments);
};
}();
exports.retrieveIcons = retrieveIcons;
var _fsExtra;
function _load_fsExtra() {
return _fsExtra = _interopRequireDefault(require('fs-extra'));
}
var _mime;
function _load_mime() {
return _mime = _interopRequireDefault(require('mime'));
}
var _path = _interopRequireDefault(require('path'));
var _tempy;
function _load_tempy() {
return _tempy = _interopRequireDefault(require('tempy'));
}
var _imageUtils;
function _load_imageUtils() {
return _imageUtils = require('@expo/image-utils');
}
var _uri;
function _load_uri() {
return _uri = require('./helpers/uri');
}
var _fingerprint;
function _load_fingerprint() {
return _fingerprint = _interopRequireDefault(require('./helpers/fingerprint'));
}
var _IconError;
function _load_IconError() {
return _IconError = _interopRequireDefault(require('./errors/IconError'));
}
var _Apple;
function _load_Apple() {
return _Apple = require('./validators/Apple');
}
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var supportedMimeTypes = ['image/png', 'image/jpeg', 'image/webp'];
function parseArray(i) {
if (i == null) return [];
return i && !Array.isArray(i) ? [i] : i;
}
function sanitizeIcon(iconSnippet) {
if (!iconSnippet.src) {
throw new (_IconError || _load_IconError()).default('Unknown icon source.');
}
var sizes = parseArray(iconSnippet.size || iconSnippet.sizes);
if (!sizes) {
throw new (_IconError || _load_IconError()).default('Unknown icon sizes.');
}
return {
src: iconSnippet.src,
resizeMode: iconSnippet.resizeMode,
sizes: sizes,
media: iconSnippet.media,
destination: iconSnippet.destination,
ios: iconSnippet.ios || false,
color: iconSnippet.color
};
}
function processIcon(width, height, icon, buffer, mimeType, publicPath, shouldFingerprint) {
var dimensions = width + 'x' + height;
var fileName = shouldFingerprint ? 'icon_' + dimensions + '.' + (0, (_fingerprint || _load_fingerprint()).default)(buffer) + '.' + (_mime || _load_mime()).default.getExtension(mimeType) : 'icon_' + dimensions + '.' + (_mime || _load_mime()).default.getExtension(mimeType);
var iconOutputDir = icon.destination ? (0, (_uri || _load_uri()).joinURI)(icon.destination, fileName) : fileName;
var iconPublicUrl = (0, (_uri || _load_uri()).joinURI)(publicPath, iconOutputDir);
var manifestIcon = null;
if (width === height) {
manifestIcon = {
src: iconPublicUrl,
sizes: dimensions,
type: mimeType
};
}
return {
manifestIcon: manifestIcon,
webpackAsset: {
output: iconOutputDir,
url: iconPublicUrl,
source: buffer,
size: buffer.length,
ios: icon.ios ? { valid: icon.ios, media: icon.media, size: dimensions, href: iconPublicUrl } : false,
resizeMode: icon.resizeMode,
color: icon.color
}
};
}
function parseSize(size) {
var width = void 0;
var height = void 0;
if (Array.isArray(size) && size.length) {
// [0, 0] || [0]
width = size[0];
height = size.length > 1 ? size[1] : size[0];
} else if (typeof size === 'number') {
// 0
width = size;
height = size;
} else if (typeof size === 'string') {
// '0x0'
var dimensions = size.split('x');
width = dimensions[0];
height = dimensions[1];
}
return { width: width, height: height };
}
function retrieveIcons(manifest) {
// Remove these items so they aren't written to disk.
var startupImages = manifest.startupImages,
icons = manifest.icons,
config = (0, (_objectWithoutProperties2 || _load_objectWithoutProperties()).default)(manifest, ['startupImages', 'icons']);
var parsedStartupImages = parseArray(startupImages);
var parsedIcons = parseArray(icons);
if (parsedStartupImages.length) {
// TODO: Bacon: use all of the startup images
var startupImage = parsedStartupImages[0];
parsedIcons = [].concat((0, (_toConsumableArray2 || _load_toConsumableArray()).default)(parsedIcons), (0, (_toConsumableArray2 || _load_toConsumableArray()).default)((0, (_Apple || _load_Apple()).fromStartupImage)(startupImage)));
}
var response = parsedIcons.map(function (icon) {
return sanitizeIcon(icon);
});
return [response, config];
}
//# sourceMappingURL=__sourcemaps__/icons.js.map
;