@expo/webpack-pwa-manifest-plugin
Version:
Generates a progressive web app (PWA) manifest.json from a React Native app.json
325 lines (265 loc) • 9.73 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.buildResources = undefined;
var _defineProperty2;
function _load_defineProperty() {
return _defineProperty2 = _interopRequireDefault(require('babel-runtime/helpers/defineProperty'));
}
var _getIterator2;
function _load_getIterator() {
return _getIterator2 = _interopRequireDefault(require('babel-runtime/core-js/get-iterator'));
}
var _regenerator;
function _load_regenerator() {
return _regenerator = _interopRequireDefault(require('babel-runtime/regenerator'));
}
var _toConsumableArray2;
function _load_toConsumableArray() {
return _toConsumableArray2 = _interopRequireDefault(require('babel-runtime/helpers/toConsumableArray'));
}
var _slicedToArray2;
function _load_slicedToArray() {
return _slicedToArray2 = _interopRequireDefault(require('babel-runtime/helpers/slicedToArray'));
}
var _asyncToGenerator2;
function _load_asyncToGenerator() {
return _asyncToGenerator2 = _interopRequireDefault(require('babel-runtime/helpers/asyncToGenerator'));
}
var _stringify;
function _load_stringify() {
return _stringify = _interopRequireDefault(require('babel-runtime/core-js/json/stringify'));
}
var _extends2;
function _load_extends() {
return _extends2 = _interopRequireDefault(require('babel-runtime/helpers/extends'));
}
var buildResources = exports.buildResources = function () {
var _ref = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)( /*#__PURE__*/(_regenerator || _load_regenerator()).default.mark(function _callee(self) {
var publicPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
var parsedIconsResult, _retrieveIcons, _retrieveIcons2, _results, config, _parsedIconsResult, icons, _parsedIconsResult$as, assets, results;
return (_regenerator || _load_regenerator()).default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!(!self.assets || !self.options.inject)) {
_context.next = 12;
break;
}
parsedIconsResult = {};
if (self.options.noResources) {
_context.next = 8;
break;
}
_retrieveIcons = (0, (_icons || _load_icons()).retrieveIcons)(self.manifest), _retrieveIcons2 = (0, (_slicedToArray2 || _load_slicedToArray()).default)(_retrieveIcons, 2), _results = _retrieveIcons2[0], config = _retrieveIcons2[1];
self.manifest = config;
_context.next = 7;
return (0, (_icons || _load_icons()).parseIcons)(_results, self.options.fingerprints, publicPath);
case 7:
parsedIconsResult = _context.sent;
case 8:
_parsedIconsResult = parsedIconsResult, icons = _parsedIconsResult.icons, _parsedIconsResult$as = _parsedIconsResult.assets, assets = _parsedIconsResult$as === undefined ? [] : _parsedIconsResult$as;
results = writeManifestToFile((0, (_extends2 || _load_extends()).default)({}, self.manifest, { icons: icons }), self.options, publicPath);
self.assets = [results].concat((0, (_toConsumableArray2 || _load_toConsumableArray()).default)(assets));
return _context.abrupt('return', results);
case 12:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
return function buildResources(_x2) {
return _ref.apply(this, arguments);
};
}();
exports.injectResources = injectResources;
exports.generateAppleSplashAndIconTags = generateAppleSplashAndIconTags;
exports.applyTag = applyTag;
exports.generateHtmlTags = generateHtmlTags;
var _path = _interopRequireDefault(require('path'));
var _fingerprint;
function _load_fingerprint() {
return _fingerprint = _interopRequireDefault(require('./helpers/fingerprint'));
}
var _uri;
function _load_uri() {
return _uri = require('./helpers/uri');
}
var _icons;
function _load_icons() {
return _icons = require('./icons');
}
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var voidTags = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr'];
function createFilename(filenameTemplate, json, shouldFingerprint) {
var formatters = [{
pattern: /\[hash(:([1-9]|[1-2][0-9]|3[0-2]))?\]/gi,
value: function value(match) {
var limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ':32';
if (!shouldFingerprint) return '';
var hash = (0, (_fingerprint || _load_fingerprint()).default)(json);
return hash.substr(0, parseInt(limit.substr(1), 10));
}
}, {
pattern: /\[ext\]/gi,
value: 'json'
}, {
pattern: /\[name\]/gi,
value: 'manifest'
}];
return formatters.reduce(function (acc, curr) {
return acc.replace(curr.pattern, curr.value);
}, filenameTemplate);
}
// Create `manifest.json`
function writeManifestToFile(manifest, options, publicPath) {
var content = (0, (_extends2 || _load_extends()).default)({}, manifest);
if (content.orientation === 'omit') {
delete content.orientation;
}
// Object.keys(content).forEach(key => content[key] == null && delete content[key]);
var json = (0, (_stringify || _load_stringify()).default)(content, null, 2);
var file = _path.default.parse(options.filename);
var filename = createFilename(file.base, json, options.fingerprints);
var output = options.includeDirectory ? _path.default.join(file.dir, filename) : filename;
return {
output: output,
url: (0, (_uri || _load_uri()).joinURI)(publicPath, output),
source: json,
size: json.length
};
}
function injectResources(compilation, assets, callback) {
if (assets) {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
var _loop = function _loop() {
var asset = _step.value;
compilation.assets[asset.output] = {
source: function source() {
return asset.source;
},
size: function size() {
return asset.size;
}
};
};
for (var _iterator = (0, (_getIterator2 || _load_getIterator()).default)(assets), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
_loop();
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
}
callback();
}
function generateAppleSplashAndIconTags(assets) {
var tags = {};
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = (0, (_getIterator2 || _load_getIterator()).default)(assets), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var _asset = _step2.value;
if (_asset.ios && _asset.ios.valid) {
if (_asset.ios.valid === 'startup') {
tags = applyTag(tags, 'link', {
rel: 'apple-touch-startup-image',
media: _asset.ios.media,
href: _asset.ios.href
});
} else {
tags = applyTag(tags, 'link', {
// apple-touch-icon-precomposed
rel: 'apple-touch-icon',
sizes: _asset.ios.size,
href: _asset.ios.href
});
}
}
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
return tags;
}
function applyTag(obj, tag, content) {
if (!content) {
return obj;
}
var tags = (0, (_extends2 || _load_extends()).default)({}, obj);
if (tags[tag]) {
if (Array.isArray(tags[tag])) {
tags[tag].push(content);
return tags;
}
tags[tag] = [tags[tag], content];
return tags;
}
tags[tag] = content;
return tags;
}
function generateHtmlTags(tags) {
var html = '';
for (var tag in tags) {
var attrs = tags[tag];
if (Array.isArray(attrs)) {
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = (0, (_getIterator2 || _load_getIterator()).default)(attrs), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var a = _step3.value;
html = '' + html + generateHtmlTags((0, (_defineProperty2 || _load_defineProperty()).default)({}, tag, a));
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
} else {
html = html + '<' + tag;
for (var attr in attrs) {
html = html + ' ' + attr + '="' + attrs[attr] + '"';
}
html = voidTags.indexOf(tag) === -1 ? html + '></' + tag + '>' : html + ' />';
}
}
return html;
}
//# sourceMappingURL=__sourcemaps__/injector.js.map
;