apeman-react-head
Version:
apeman react package for head component.
229 lines (208 loc) • 22.7 kB
JavaScript
/**
* apeman react package for head component.
* @class ApHead
*/
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _stringify2 = require('babel-runtime/core-js/json/stringify');
var _stringify3 = _interopRequireDefault(_stringify2);
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _stringcase = require('stringcase');
var _stringcase2 = _interopRequireDefault(_stringcase);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/** @lends ApHead */
var ApHead = _react2.default.createClass({
displayName: 'ApHead',
// --------------------
// Specs
// --------------------
propTypes: {
/** CharSet */
charSet: _react.PropTypes.string,
/** Document Title */
title: _react.PropTypes.string,
/** Favicon */
icon: _react.PropTypes.string,
/** Meta data */
meta: _react.PropTypes.oneOfType([_react.PropTypes.arrayOf(_react.PropTypes.object), _react.PropTypes.object]),
/** Micro data settings */
itemProps: _react.PropTypes.oneOfType([_react.PropTypes.arrayOf(_react.PropTypes.object), _react.PropTypes.object]),
/** CSS file urls */
css: _react.PropTypes.array,
/** JS file urls */
js: _react.PropTypes.array,
/** Version string */
version: _react.PropTypes.string,
/** Query string key for version */
versionKey: _react.PropTypes.string,
/** Global variables */
globals: _react.PropTypes.object,
/** View port settings */
viewPort: _react.PropTypes.object,
/** Base url */
base: _react.PropTypes.string,
/** Target of base url. '_blank', '_parent', '_self', '_top' or frame name */
baseTarget: _react.PropTypes.string,
/** Path of manifest.json */
manifest: _react.PropTypes.string,
/** Theme color */
color: _react.PropTypes.string
},
mixins: [],
statics: {
renderBase: function renderBase(base, target) {
if (!base) {
return null;
}
return _react2.default.createElement('base', { href: base, target: target });
},
renderCharset: function renderCharset(charSet) {
if (!charSet) {
return null;
}
return _react2.default.createElement('meta', { className: 'ap-head-meta', charSet: charSet });
},
renderTitle: function renderTitle(title) {
if (!title) {
return null;
}
return _react2.default.createElement(
'title',
{ className: 'ap-head-title' },
title
);
},
renderIcon: function renderIcon(url, query) {
if (!url) {
return null;
}
return _react2.default.createElement('link', { rel: 'icon', href: ApHead._addQuery(url, query) });
},
renderMetaValues: function renderMetaValues(values) {
if (!values) {
return null;
}
return [].concat(values).map(function (values, i) {
return (0, _keys2.default)(values).map(function (name, j) {
return _react2.default.createElement('meta', { name: name,
content: values[name],
key: 'meta-' + i + '-' + j });
});
}).reduce(function (a, b) {
return [].concat(a, b);
}, []);
},
renderItemProps: function renderItemProps(values) {
if (!values) {
return null;
}
return [].concat(values).map(function (values, i) {
return (0, _keys2.default)(values).map(function (name, j) {
return _react2.default.createElement('meta', { itemProp: name,
content: values[name],
key: 'item-prop' + i + '-' + j });
});
}).reduce(function (a, b) {
return [].concat(a, b);
}, []);
},
renderCss: function renderCss(urls, query) {
if (!urls) {
return null;
}
return [].concat(urls).map(function (url, i) {
return _react2.default.createElement('link', { rel: 'stylesheet',
type: 'text/css',
key: 'css-' + i + '-' + url,
href: ApHead._addQuery(url, query) });
});
},
renderJs: function renderJs(urls, query) {
if (!urls) {
return null;
}
return [].concat(urls).map(function (url, i) {
return _react2.default.createElement('script', { type: 'text/javascript',
key: 'js-' + i + '-' + url,
src: ApHead._addQuery(url, query) });
});
},
renderGlobals: function renderGlobals(values) {
var _stringify = function _stringify(data) {
return data ? (0, _stringify3.default)(data || {}) : 'null';
};
return (0, _keys2.default)(values || {}).map(function (key, i) {
return _react2.default.createElement('script', { type: 'text/javascript',
key: 'global-' + i + '-' + key,
dangerouslySetInnerHTML: { __html: 'window.' + key + '=' + _stringify(values[key]) } });
});
},
renderViewPort: function renderViewPort(values) {
var content = (0, _keys2.default)(values || {}).map(function (key) {
return [_stringcase2.default.spinalcase(key), values[key]].join('=');
}).join(',');
return _react2.default.createElement('meta', { name: 'viewport', content: content });
},
renderManifest: function renderManifest(value) {
if (!value) {
return null;
}
return _react2.default.createElement('link', { rel: 'manifest', href: value });
},
renderThemeColor: function renderThemeColor(value) {
if (!value) {
return null;
}
return _react2.default.createElement('meta', { name: 'theme-color', content: value });
},
_addQuery: function _addQuery(url, query) {
var joiner = /\?/.test(url) ? '&' : '?';
return [url, query].join(joiner);
}
},
getInitialState: function getInitialState() {
return {};
},
getDefaultProps: function getDefaultProps() {
return {
charSet: 'utf-8',
version: 'unknown',
versionKey: 'v',
viewPort: {
width: 'device-width',
initialScale: '1.0'
},
base: null,
baseTarget: undefined
};
},
render: function render() {
var s = this;
var props = s.props;
var query = [props.versionKey, props.version].join('=');
return _react2.default.createElement(
'head',
{ className: 'ap-head' },
ApHead.renderBase(props.base, props.baseTarget),
ApHead.renderCharset(props.charSet),
ApHead.renderTitle(props.title),
ApHead.renderMetaValues(props.meta),
ApHead.renderItemProps(props.itemProps),
ApHead.renderIcon(props.icon, query),
ApHead.renderGlobals(props.globals),
ApHead.renderCss(props.css, query),
ApHead.renderViewPort(props.viewPort),
ApHead.renderManifest(props.manifest),
ApHead.renderThemeColor(props.color),
ApHead.renderJs(props.js, query),
props.children
);
}
});
exports.default = ApHead;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwX2hlYWQuanN4Il0sIm5hbWVzIjpbIkFwSGVhZCIsImNyZWF0ZUNsYXNzIiwicHJvcFR5cGVzIiwiY2hhclNldCIsInN0cmluZyIsInRpdGxlIiwiaWNvbiIsIm1ldGEiLCJvbmVPZlR5cGUiLCJhcnJheU9mIiwib2JqZWN0IiwiaXRlbVByb3BzIiwiY3NzIiwiYXJyYXkiLCJqcyIsInZlcnNpb24iLCJ2ZXJzaW9uS2V5IiwiZ2xvYmFscyIsInZpZXdQb3J0IiwiYmFzZSIsImJhc2VUYXJnZXQiLCJtYW5pZmVzdCIsImNvbG9yIiwibWl4aW5zIiwic3RhdGljcyIsInJlbmRlckJhc2UiLCJ0YXJnZXQiLCJyZW5kZXJDaGFyc2V0IiwicmVuZGVyVGl0bGUiLCJyZW5kZXJJY29uIiwidXJsIiwicXVlcnkiLCJfYWRkUXVlcnkiLCJyZW5kZXJNZXRhVmFsdWVzIiwidmFsdWVzIiwiY29uY2F0IiwibWFwIiwiaSIsIm5hbWUiLCJqIiwicmVkdWNlIiwiYSIsImIiLCJyZW5kZXJJdGVtUHJvcHMiLCJyZW5kZXJDc3MiLCJ1cmxzIiwicmVuZGVySnMiLCJyZW5kZXJHbG9iYWxzIiwiX3N0cmluZ2lmeSIsImRhdGEiLCJrZXkiLCJfX2h0bWwiLCJyZW5kZXJWaWV3UG9ydCIsImNvbnRlbnQiLCJzcGluYWxjYXNlIiwiam9pbiIsInJlbmRlck1hbmlmZXN0IiwidmFsdWUiLCJyZW5kZXJUaGVtZUNvbG9yIiwiam9pbmVyIiwidGVzdCIsImdldEluaXRpYWxTdGF0ZSIsImdldERlZmF1bHRQcm9wcyIsIndpZHRoIiwiaW5pdGlhbFNjYWxlIiwidW5kZWZpbmVkIiwicmVuZGVyIiwicyIsInByb3BzIiwiY2hpbGRyZW4iXSwibWFwcGluZ3MiOiJBQUFBOzs7OztBQUtBOzs7Ozs7Ozs7Ozs7OztBQUVBOzs7O0FBQ0E7Ozs7OztBQUVBO0FBQ0EsSUFBTUEsU0FBUyxnQkFBTUMsV0FBTixDQUFrQjtBQUFBOztBQUMvQjtBQUNBO0FBQ0E7O0FBRUFDLGFBQVc7QUFDVDtBQUNBQyxhQUFTLGlCQUFNQyxNQUZOO0FBR1Q7QUFDQUMsV0FBTyxpQkFBTUQsTUFKSjtBQUtUO0FBQ0FFLFVBQU0saUJBQU1GLE1BTkg7QUFPVDtBQUNBRyxVQUFNLGlCQUFNQyxTQUFOLENBQWdCLENBQ3BCLGlCQUFNQyxPQUFOLENBQWMsaUJBQU1DLE1BQXBCLENBRG9CLEVBRXBCLGlCQUFNQSxNQUZjLENBQWhCLENBUkc7QUFZVDtBQUNBQyxlQUFXLGlCQUFNSCxTQUFOLENBQWdCLENBQ3pCLGlCQUFNQyxPQUFOLENBQWMsaUJBQU1DLE1BQXBCLENBRHlCLEVBRXpCLGlCQUFNQSxNQUZtQixDQUFoQixDQWJGO0FBaUJUO0FBQ0FFLFNBQUssaUJBQU1DLEtBbEJGO0FBbUJUO0FBQ0FDLFFBQUksaUJBQU1ELEtBcEJEO0FBcUJUO0FBQ0FFLGFBQVMsaUJBQU1YLE1BdEJOO0FBdUJUO0FBQ0FZLGdCQUFZLGlCQUFNWixNQXhCVDtBQXlCVDtBQUNBYSxhQUFTLGlCQUFNUCxNQTFCTjtBQTJCVDtBQUNBUSxjQUFVLGlCQUFNUixNQTVCUDtBQTZCVDtBQUNBUyxVQUFNLGlCQUFNZixNQTlCSDtBQStCVDtBQUNBZ0IsZ0JBQVksaUJBQU1oQixNQWhDVDtBQWlDVDtBQUNBaUIsY0FBVSxpQkFBTWpCLE1BbENQO0FBbUNUO0FBQ0FrQixXQUFPLGlCQUFNbEI7QUFwQ0osR0FMb0I7O0FBNEMvQm1CLFVBQVEsRUE1Q3VCOztBQThDL0JDLFdBQVM7QUFDUEMsY0FETyxzQkFDS04sSUFETCxFQUNXTyxNQURYLEVBQ21CO0FBQ3hCLFVBQUksQ0FBQ1AsSUFBTCxFQUFXO0FBQ1QsZUFBTyxJQUFQO0FBQ0Q7QUFDRCxhQUNFLHdDQUFNLE1BQU9BLElBQWIsRUFBb0IsUUFBU08sTUFBN0IsR0FERjtBQUdELEtBUk07QUFTUEMsaUJBVE8seUJBU1F4QixPQVRSLEVBU2lCO0FBQ3RCLFVBQUksQ0FBQ0EsT0FBTCxFQUFjO0FBQ1osZUFBTyxJQUFQO0FBQ0Q7QUFDRCxhQUNFLHdDQUFNLFdBQVUsY0FBaEIsRUFBK0IsU0FBVUEsT0FBekMsR0FERjtBQUdELEtBaEJNO0FBaUJQeUIsZUFqQk8sdUJBaUJNdkIsS0FqQk4sRUFpQmE7QUFDbEIsVUFBSSxDQUFDQSxLQUFMLEVBQVk7QUFDVixlQUFPLElBQVA7QUFDRDtBQUNELGFBQ0U7QUFBQTtBQUFBLFVBQU8sV0FBVSxlQUFqQjtBQUFtQ0E7QUFBbkMsT0FERjtBQUdELEtBeEJNO0FBeUJQd0IsY0F6Qk8sc0JBeUJLQyxHQXpCTCxFQXlCVUMsS0F6QlYsRUF5QmlCO0FBQ3RCLFVBQUksQ0FBQ0QsR0FBTCxFQUFVO0FBQ1IsZUFBTyxJQUFQO0FBQ0Q7QUFDRCxhQUNFLHdDQUFNLEtBQUksTUFBVixFQUFpQixNQUFPOUIsT0FBT2dDLFNBQVAsQ0FBaUJGLEdBQWpCLEVBQXNCQyxLQUF0QixDQUF4QixHQURGO0FBR0QsS0FoQ007QUFpQ1BFLG9CQWpDTyw0QkFpQ1dDLE1BakNYLEVBaUNtQjtBQUN4QixVQUFJLENBQUNBLE1BQUwsRUFBYTtBQUNYLGVBQU8sSUFBUDtBQUNEO0FBQ0QsYUFBTyxHQUFHQyxNQUFILENBQVVELE1BQVYsRUFBa0JFLEdBQWxCLENBQXNCLFVBQUNGLE1BQUQsRUFBU0csQ0FBVDtBQUFBLGVBQzNCLG9CQUFZSCxNQUFaLEVBQW9CRSxHQUFwQixDQUF3QixVQUFDRSxJQUFELEVBQU9DLENBQVA7QUFBQSxpQkFDdEIsd0NBQU0sTUFBT0QsSUFBYjtBQUNNLHFCQUFVSixPQUFRSSxJQUFSLENBRGhCO0FBRU0sMkJBQWNELENBQWQsU0FBbUJFLENBRnpCLEdBRHNCO0FBQUEsU0FBeEIsQ0FEMkI7QUFBQSxPQUF0QixFQU1MQyxNQU5LLENBTUUsVUFBQ0MsQ0FBRCxFQUFJQyxDQUFKO0FBQUEsZUFBVSxHQUFHUCxNQUFILENBQVVNLENBQVYsRUFBYUMsQ0FBYixDQUFWO0FBQUEsT0FORixFQU02QixFQU43QixDQUFQO0FBT0QsS0E1Q007QUE2Q1BDLG1CQTdDTywyQkE2Q1VULE1BN0NWLEVBNkNrQjtBQUN2QixVQUFJLENBQUNBLE1BQUwsRUFBYTtBQUNYLGVBQU8sSUFBUDtBQUNEO0FBQ0QsYUFBTyxHQUFHQyxNQUFILENBQVVELE1BQVYsRUFBa0JFLEdBQWxCLENBQXNCLFVBQUNGLE1BQUQsRUFBU0csQ0FBVDtBQUFBLGVBQzNCLG9CQUFZSCxNQUFaLEVBQW9CRSxHQUFwQixDQUF3QixVQUFDRSxJQUFELEVBQU9DLENBQVA7QUFBQSxpQkFDdEIsd0NBQU0sVUFBV0QsSUFBakI7QUFDTSxxQkFBVUosT0FBUUksSUFBUixDQURoQjtBQUVNLCtCQUFrQkQsQ0FBbEIsU0FBdUJFLENBRjdCLEdBRHNCO0FBQUEsU0FBeEIsQ0FEMkI7QUFBQSxPQUF0QixFQU1MQyxNQU5LLENBTUUsVUFBQ0MsQ0FBRCxFQUFJQyxDQUFKO0FBQUEsZUFBVSxHQUFHUCxNQUFILENBQVVNLENBQVYsRUFBYUMsQ0FBYixDQUFWO0FBQUEsT0FORixFQU02QixFQU43QixDQUFQO0FBT0QsS0F4RE07QUF5RFBFLGFBekRPLHFCQXlESUMsSUF6REosRUF5RFVkLEtBekRWLEVBeURpQjtBQUN0QixVQUFJLENBQUNjLElBQUwsRUFBVztBQUNULGVBQU8sSUFBUDtBQUNEO0FBQ0QsYUFBTyxHQUFHVixNQUFILENBQVVVLElBQVYsRUFBZ0JULEdBQWhCLENBQW9CLFVBQUNOLEdBQUQsRUFBTU8sQ0FBTjtBQUFBLGVBQ3pCLHdDQUFNLEtBQUksWUFBVjtBQUNNLGdCQUFLLFVBRFg7QUFFTSx3QkFBYUEsQ0FBYixTQUFrQlAsR0FGeEI7QUFHTSxnQkFBTzlCLE9BQU9nQyxTQUFQLENBQWlCRixHQUFqQixFQUFzQkMsS0FBdEIsQ0FIYixHQUR5QjtBQUFBLE9BQXBCLENBQVA7QUFNRCxLQW5FTTtBQW9FUGUsWUFwRU8sb0JBb0VHRCxJQXBFSCxFQW9FU2QsS0FwRVQsRUFvRWdCO0FBQ3JCLFVBQUksQ0FBQ2MsSUFBTCxFQUFXO0FBQ1QsZUFBTyxJQUFQO0FBQ0Q7QUFDRCxhQUFPLEdBQUdWLE1BQUgsQ0FBVVUsSUFBVixFQUFnQlQsR0FBaEIsQ0FBb0IsVUFBQ04sR0FBRCxFQUFNTyxDQUFOO0FBQUEsZUFDekIsMENBQVEsTUFBSyxpQkFBYjtBQUNRLHVCQUFZQSxDQUFaLFNBQWlCUCxHQUR6QjtBQUVRLGVBQU05QixPQUFPZ0MsU0FBUCxDQUFpQkYsR0FBakIsRUFBc0JDLEtBQXRCLENBRmQsR0FEeUI7QUFBQSxPQUFwQixDQUFQO0FBS0QsS0E3RU07QUE4RVBnQixpQkE5RU8seUJBOEVRYixNQTlFUixFQThFZ0I7QUFDckIsVUFBSWMsYUFBYSxTQUFiQSxVQUFhLENBQUNDLElBQUQ7QUFBQSxlQUFVQSxPQUFPLHlCQUFlQSxRQUFRLEVBQXZCLENBQVAsR0FBb0MsTUFBOUM7QUFBQSxPQUFqQjs7QUFFQSxhQUFPLG9CQUFZZixVQUFVLEVBQXRCLEVBQTBCRSxHQUExQixDQUE4QixVQUFDYyxHQUFELEVBQU1iLENBQU47QUFBQSxlQUNuQywwQ0FBUSxNQUFLLGlCQUFiO0FBQ1EsMkJBQWdCQSxDQUFoQixTQUFxQmEsR0FEN0I7QUFFUSxtQ0FDRSxFQUFFQyxvQkFBa0JELEdBQWxCLFNBQXlCRixXQUFXZCxPQUFRZ0IsR0FBUixDQUFYLENBQTNCLEVBSFYsR0FEbUM7QUFBQSxPQUE5QixDQUFQO0FBT0QsS0F4Rk07QUF5RlBFLGtCQXpGTywwQkF5RlNsQixNQXpGVCxFQXlGaUI7QUFDdEIsVUFBSW1CLFVBQVUsb0JBQVluQixVQUFVLEVBQXRCLEVBQTBCRSxHQUExQixDQUE4QixVQUFDYyxHQUFEO0FBQUEsZUFDMUMsQ0FBRSxxQkFBV0ksVUFBWCxDQUFzQkosR0FBdEIsQ0FBRixFQUE4QmhCLE9BQVFnQixHQUFSLENBQTlCLEVBQThDSyxJQUE5QyxDQUFtRCxHQUFuRCxDQUQwQztBQUFBLE9BQTlCLEVBRVpBLElBRlksQ0FFUCxHQUZPLENBQWQ7QUFHQSxhQUFPLHdDQUFNLE1BQUssVUFBWCxFQUFzQixTQUFVRixPQUFoQyxHQUFQO0FBQ0QsS0E5Rk07QUErRlBHLGtCQS9GTywwQkErRlNDLEtBL0ZULEVBK0ZnQjtBQUNyQixVQUFJLENBQUNBLEtBQUwsRUFBWTtBQUNWLGVBQU8sSUFBUDtBQUNEO0FBQ0QsYUFBTyx3Q0FBTSxLQUFJLFVBQVYsRUFBcUIsTUFBT0EsS0FBNUIsR0FBUDtBQUNELEtBcEdNO0FBcUdQQyxvQkFyR08sNEJBcUdXRCxLQXJHWCxFQXFHa0I7QUFDdkIsVUFBSSxDQUFDQSxLQUFMLEVBQVk7QUFDVixlQUFPLElBQVA7QUFDRDtBQUNELGFBQU8sd0NBQU0sTUFBSyxhQUFYLEVBQXlCLFNBQVVBLEtBQW5DLEdBQVA7QUFDRCxLQTFHTTtBQTJHUHpCLGFBM0dPLHFCQTJHSUYsR0EzR0osRUEyR1NDLEtBM0dULEVBMkdnQjtBQUNyQixVQUFJNEIsU0FBUyxLQUFLQyxJQUFMLENBQVU5QixHQUFWLElBQWlCLEdBQWpCLEdBQXVCLEdBQXBDO0FBQ0EsYUFBTyxDQUFFQSxHQUFGLEVBQU9DLEtBQVAsRUFBZXdCLElBQWYsQ0FBb0JJLE1BQXBCLENBQVA7QUFDRDtBQTlHTSxHQTlDc0I7O0FBK0ovQkUsaUJBL0orQiw2QkErSlo7QUFDakIsV0FBTyxFQUFQO0FBQ0QsR0FqSzhCO0FBbUsvQkMsaUJBbksrQiw2QkFtS1o7QUFDakIsV0FBTztBQUNMM0QsZUFBUyxPQURKO0FBRUxZLGVBQVMsU0FGSjtBQUdMQyxrQkFBWSxHQUhQO0FBSUxFLGdCQUFVO0FBQ1I2QyxlQUFPLGNBREM7QUFFUkMsc0JBQWM7QUFGTixPQUpMO0FBUUw3QyxZQUFNLElBUkQ7QUFTTEMsa0JBQVk2QztBQVRQLEtBQVA7QUFXRCxHQS9LOEI7QUFpTC9CQyxRQWpMK0Isb0JBaUxyQjtBQUNSLFFBQU1DLElBQUksSUFBVjtBQURRLFFBRUZDLEtBRkUsR0FFUUQsQ0FGUixDQUVGQyxLQUZFOzs7QUFJUixRQUFJckMsUUFBUSxDQUFFcUMsTUFBTXBELFVBQVIsRUFBb0JvRCxNQUFNckQsT0FBMUIsRUFBb0N3QyxJQUFwQyxDQUF5QyxHQUF6QyxDQUFaO0FBQ0EsV0FDRTtBQUFBO0FBQUEsUUFBTSxXQUFVLFNBQWhCO0FBQ0l2RCxhQUFPeUIsVUFBUCxDQUFrQjJDLE1BQU1qRCxJQUF4QixFQUE4QmlELE1BQU1oRCxVQUFwQyxDQURKO0FBRUlwQixhQUFPMkIsYUFBUCxDQUFxQnlDLE1BQU1qRSxPQUEzQixDQUZKO0FBR0lILGFBQU80QixXQUFQLENBQW1Cd0MsTUFBTS9ELEtBQXpCLENBSEo7QUFJSUwsYUFBT2lDLGdCQUFQLENBQXdCbUMsTUFBTTdELElBQTlCLENBSko7QUFLSVAsYUFBTzJDLGVBQVAsQ0FBdUJ5QixNQUFNekQsU0FBN0IsQ0FMSjtBQU1JWCxhQUFPNkIsVUFBUCxDQUFrQnVDLE1BQU05RCxJQUF4QixFQUE4QnlCLEtBQTlCLENBTko7QUFPSS9CLGFBQU8rQyxhQUFQLENBQXFCcUIsTUFBTW5ELE9BQTNCLENBUEo7QUFRSWpCLGFBQU80QyxTQUFQLENBQWlCd0IsTUFBTXhELEdBQXZCLEVBQTRCbUIsS0FBNUIsQ0FSSjtBQVNJL0IsYUFBT29ELGNBQVAsQ0FBc0JnQixNQUFNbEQsUUFBNUIsQ0FUSjtBQVVJbEIsYUFBT3dELGNBQVAsQ0FBc0JZLE1BQU0vQyxRQUE1QixDQVZKO0FBV0lyQixhQUFPMEQsZ0JBQVAsQ0FBd0JVLE1BQU05QyxLQUE5QixDQVhKO0FBWUl0QixhQUFPOEMsUUFBUCxDQUFnQnNCLE1BQU10RCxFQUF0QixFQUEwQmlCLEtBQTFCLENBWko7QUFhSXFDLFlBQU1DO0FBYlYsS0FERjtBQWlCRDtBQXZNOEIsQ0FBbEIsQ0FBZjs7a0JBME1lckUsTSIsImZpbGUiOiJhcF9oZWFkLmpzeCIsInNvdXJjZVJvb3QiOiJsaWIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGFwZW1hbiByZWFjdCBwYWNrYWdlIGZvciBoZWFkIGNvbXBvbmVudC5cbiAqIEBjbGFzcyBBcEhlYWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuaW1wb3J0IFJlYWN0LCB7IFByb3BUeXBlcyBhcyB0eXBlcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHN0cmluZ2Nhc2UgZnJvbSAnc3RyaW5nY2FzZSdcblxuLyoqIEBsZW5kcyBBcEhlYWQgKi9cbmNvbnN0IEFwSGVhZCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gU3BlY3NcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcm9wVHlwZXM6IHtcbiAgICAvKiogQ2hhclNldCAqL1xuICAgIGNoYXJTZXQ6IHR5cGVzLnN0cmluZyxcbiAgICAvKiogRG9jdW1lbnQgVGl0bGUgKi9cbiAgICB0aXRsZTogdHlwZXMuc3RyaW5nLFxuICAgIC8qKiBGYXZpY29uICovXG4gICAgaWNvbjogdHlwZXMuc3RyaW5nLFxuICAgIC8qKiBNZXRhIGRhdGEgKi9cbiAgICBtZXRhOiB0eXBlcy5vbmVPZlR5cGUoW1xuICAgICAgdHlwZXMuYXJyYXlPZih0eXBlcy5vYmplY3QpLFxuICAgICAgdHlwZXMub2JqZWN0XG4gICAgXSksXG4gICAgLyoqIE1pY3JvIGRhdGEgc2V0dGluZ3MgKi9cbiAgICBpdGVtUHJvcHM6IHR5cGVzLm9uZU9mVHlwZShbXG4gICAgICB0eXBlcy5hcnJheU9mKHR5cGVzLm9iamVjdCksXG4gICAgICB0eXBlcy5vYmplY3RcbiAgICBdKSxcbiAgICAvKiogQ1NTIGZpbGUgdXJscyAqL1xuICAgIGNzczogdHlwZXMuYXJyYXksXG4gICAgLyoqIEpTIGZpbGUgdXJscyAqL1xuICAgIGpzOiB0eXBlcy5hcnJheSxcbiAgICAvKiogVmVyc2lvbiBzdHJpbmcgKi9cbiAgICB2ZXJzaW9uOiB0eXBlcy5zdHJpbmcsXG4gICAgLyoqIFF1ZXJ5IHN0cmluZyBrZXkgZm9yIHZlcnNpb24gKi9cbiAgICB2ZXJzaW9uS2V5OiB0eXBlcy5zdHJpbmcsXG4gICAgLyoqIEdsb2JhbCB2YXJpYWJsZXMgKi9cbiAgICBnbG9iYWxzOiB0eXBlcy5vYmplY3QsXG4gICAgLyoqIFZpZXcgcG9ydCBzZXR0aW5ncyAqL1xuICAgIHZpZXdQb3J0OiB0eXBlcy5vYmplY3QsXG4gICAgLyoqIEJhc2UgdXJsICovXG4gICAgYmFzZTogdHlwZXMuc3RyaW5nLFxuICAgIC8qKiBUYXJnZXQgb2YgYmFzZSB1cmwuICdfYmxhbmsnLCAnX3BhcmVudCcsICdfc2VsZicsICdfdG9wJyBvciBmcmFtZSBuYW1lICovXG4gICAgYmFzZVRhcmdldDogdHlwZXMuc3RyaW5nLFxuICAgIC8qKiBQYXRoIG9mIG1hbmlmZXN0Lmpzb24gKi9cbiAgICBtYW5pZmVzdDogdHlwZXMuc3RyaW5nLFxuICAgIC8qKiBUaGVtZSBjb2xvciAqL1xuICAgIGNvbG9yOiB0eXBlcy5zdHJpbmdcbiAgfSxcblxuICBtaXhpbnM6IFtdLFxuXG4gIHN0YXRpY3M6IHtcbiAgICByZW5kZXJCYXNlIChiYXNlLCB0YXJnZXQpIHtcbiAgICAgIGlmICghYmFzZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGJhc2UgaHJlZj17IGJhc2UgfSB0YXJnZXQ9eyB0YXJnZXQgfS8+XG4gICAgICApXG4gICAgfSxcbiAgICByZW5kZXJDaGFyc2V0IChjaGFyU2V0KSB7XG4gICAgICBpZiAoIWNoYXJTZXQpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxtZXRhIGNsYXNzTmFtZT0nYXAtaGVhZC1tZXRhJyBjaGFyU2V0PXsgY2hhclNldCB9Lz5cbiAgICAgIClcbiAgICB9LFxuICAgIHJlbmRlclRpdGxlICh0aXRsZSkge1xuICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHRpdGxlIGNsYXNzTmFtZT0nYXAtaGVhZC10aXRsZSc+eyB0aXRsZSB9PC90aXRsZT5cbiAgICAgIClcbiAgICB9LFxuICAgIHJlbmRlckljb24gKHVybCwgcXVlcnkpIHtcbiAgICAgIGlmICghdXJsKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8bGluayByZWw9J2ljb24nIGhyZWY9eyBBcEhlYWQuX2FkZFF1ZXJ5KHVybCwgcXVlcnkpIH0vPlxuICAgICAgKVxuICAgIH0sXG4gICAgcmVuZGVyTWV0YVZhbHVlcyAodmFsdWVzKSB7XG4gICAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIFtdLmNvbmNhdCh2YWx1ZXMpLm1hcCgodmFsdWVzLCBpKSA9PlxuICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZXMpLm1hcCgobmFtZSwgaikgPT5cbiAgICAgICAgICA8bWV0YSBuYW1lPXsgbmFtZSB9XG4gICAgICAgICAgICAgICAgY29udGVudD17IHZhbHVlc1sgbmFtZSBdIH1cbiAgICAgICAgICAgICAgICBrZXk9eyBgbWV0YS0ke2l9LSR7an1gIH0vPlxuICAgICAgICApXG4gICAgICApLnJlZHVjZSgoYSwgYikgPT4gW10uY29uY2F0KGEsIGIpLCBbXSlcbiAgICB9LFxuICAgIHJlbmRlckl0ZW1Qcm9wcyAodmFsdWVzKSB7XG4gICAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIFtdLmNvbmNhdCh2YWx1ZXMpLm1hcCgodmFsdWVzLCBpKSA9PlxuICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZXMpLm1hcCgobmFtZSwgaikgPT5cbiAgICAgICAgICA8bWV0YSBpdGVtUHJvcD17IG5hbWUgfVxuICAgICAgICAgICAgICAgIGNvbnRlbnQ9eyB2YWx1ZXNbIG5hbWUgXSB9XG4gICAgICAgICAgICAgICAga2V5PXsgYGl0ZW0tcHJvcCR7aX0tJHtqfWAgfS8+XG4gICAgICAgIClcbiAgICAgICkucmVkdWNlKChhLCBiKSA9PiBbXS5jb25jYXQoYSwgYiksIFtdKVxuICAgIH0sXG4gICAgcmVuZGVyQ3NzICh1cmxzLCBxdWVyeSkge1xuICAgICAgaWYgKCF1cmxzKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICByZXR1cm4gW10uY29uY2F0KHVybHMpLm1hcCgodXJsLCBpKSA9PlxuICAgICAgICA8bGluayByZWw9J3N0eWxlc2hlZXQnXG4gICAgICAgICAgICAgIHR5cGU9J3RleHQvY3NzJ1xuICAgICAgICAgICAgICBrZXk9eyBgY3NzLSR7aX0tJHt1cmx9YCB9XG4gICAgICAgICAgICAgIGhyZWY9eyBBcEhlYWQuX2FkZFF1ZXJ5KHVybCwgcXVlcnkpIH0vPlxuICAgICAgKVxuICAgIH0sXG4gICAgcmVuZGVySnMgKHVybHMsIHF1ZXJ5KSB7XG4gICAgICBpZiAoIXVybHMpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXS5jb25jYXQodXJscykubWFwKCh1cmwsIGkpID0+XG4gICAgICAgIDxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0J1xuICAgICAgICAgICAgICAgIGtleT17IGBqcy0ke2l9LSR7dXJsfWAgfVxuICAgICAgICAgICAgICAgIHNyYz17IEFwSGVhZC5fYWRkUXVlcnkodXJsLCBxdWVyeSl9Pjwvc2NyaXB0PlxuICAgICAgKVxuICAgIH0sXG4gICAgcmVuZGVyR2xvYmFscyAodmFsdWVzKSB7XG4gICAgICBsZXQgX3N0cmluZ2lmeSA9IChkYXRhKSA9PiBkYXRhID8gSlNPTi5zdHJpbmdpZnkoZGF0YSB8fCB7fSkgOiAnbnVsbCdcblxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbHVlcyB8fCB7fSkubWFwKChrZXksIGkpID0+XG4gICAgICAgIDxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0J1xuICAgICAgICAgICAgICAgIGtleT17IGBnbG9iYWwtJHtpfS0ke2tleX1gIH1cbiAgICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17XG4gICAgICAgICAgICAgICAgICB7IF9faHRtbDogYHdpbmRvdy4ke2tleX09JHtfc3RyaW5naWZ5KHZhbHVlc1sga2V5IF0pfWAgfVxuICAgICAgICAgICAgICAgIH0+PC9zY3JpcHQ+XG4gICAgICApXG4gICAgfSxcbiAgICByZW5kZXJWaWV3UG9ydCAodmFsdWVzKSB7XG4gICAgICBsZXQgY29udGVudCA9IE9iamVjdC5rZXlzKHZhbHVlcyB8fCB7fSkubWFwKChrZXkpID0+XG4gICAgICAgIFsgc3RyaW5nY2FzZS5zcGluYWxjYXNlKGtleSksIHZhbHVlc1sga2V5IF0gXS5qb2luKCc9JylcbiAgICAgICkuam9pbignLCcpXG4gICAgICByZXR1cm4gPG1ldGEgbmFtZT0ndmlld3BvcnQnIGNvbnRlbnQ9eyBjb250ZW50IH0vPlxuICAgIH0sXG4gICAgcmVuZGVyTWFuaWZlc3QgKHZhbHVlKSB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICByZXR1cm4gPGxpbmsgcmVsPSdtYW5pZmVzdCcgaHJlZj17IHZhbHVlIH0vPlxuICAgIH0sXG4gICAgcmVuZGVyVGhlbWVDb2xvciAodmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICAgIHJldHVybiA8bWV0YSBuYW1lPSd0aGVtZS1jb2xvcicgY29udGVudD17IHZhbHVlIH0vPlxuICAgIH0sXG4gICAgX2FkZFF1ZXJ5ICh1cmwsIHF1ZXJ5KSB7XG4gICAgICBsZXQgam9pbmVyID0gL1xcPy8udGVzdCh1cmwpID8gJyYnIDogJz8nXG4gICAgICByZXR1cm4gWyB1cmwsIHF1ZXJ5IF0uam9pbihqb2luZXIpXG4gICAgfVxuICB9LFxuXG4gIGdldEluaXRpYWxTdGF0ZSAoKSB7XG4gICAgcmV0dXJuIHt9XG4gIH0sXG5cbiAgZ2V0RGVmYXVsdFByb3BzICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hhclNldDogJ3V0Zi04JyxcbiAgICAgIHZlcnNpb246ICd1bmtub3duJyxcbiAgICAgIHZlcnNpb25LZXk6ICd2JyxcbiAgICAgIHZpZXdQb3J0OiB7XG4gICAgICAgIHdpZHRoOiAnZGV2aWNlLXdpZHRoJyxcbiAgICAgICAgaW5pdGlhbFNjYWxlOiAnMS4wJ1xuICAgICAgfSxcbiAgICAgIGJhc2U6IG51bGwsXG4gICAgICBiYXNlVGFyZ2V0OiB1bmRlZmluZWRcbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IHByb3BzIH0gPSBzXG5cbiAgICBsZXQgcXVlcnkgPSBbIHByb3BzLnZlcnNpb25LZXksIHByb3BzLnZlcnNpb24gXS5qb2luKCc9JylcbiAgICByZXR1cm4gKFxuICAgICAgPGhlYWQgY2xhc3NOYW1lPSdhcC1oZWFkJz5cbiAgICAgICAgeyBBcEhlYWQucmVuZGVyQmFzZShwcm9wcy5iYXNlLCBwcm9wcy5iYXNlVGFyZ2V0KSB9XG4gICAgICAgIHsgQXBIZWFkLnJlbmRlckNoYXJzZXQocHJvcHMuY2hhclNldCkgfVxuICAgICAgICB7IEFwSGVhZC5yZW5kZXJUaXRsZShwcm9wcy50aXRsZSkgfVxuICAgICAgICB7IEFwSGVhZC5yZW5kZXJNZXRhVmFsdWVzKHByb3BzLm1ldGEpIH1cbiAgICAgICAgeyBBcEhlYWQucmVuZGVySXRlbVByb3BzKHByb3BzLml0ZW1Qcm9wcykgfVxuICAgICAgICB7IEFwSGVhZC5yZW5kZXJJY29uKHByb3BzLmljb24sIHF1ZXJ5KSB9XG4gICAgICAgIHsgQXBIZWFkLnJlbmRlckdsb2JhbHMocHJvcHMuZ2xvYmFscykgfVxuICAgICAgICB7IEFwSGVhZC5yZW5kZXJDc3MocHJvcHMuY3NzLCBxdWVyeSkgfVxuICAgICAgICB7IEFwSGVhZC5yZW5kZXJWaWV3UG9ydChwcm9wcy52aWV3UG9ydCkgfVxuICAgICAgICB7IEFwSGVhZC5yZW5kZXJNYW5pZmVzdChwcm9wcy5tYW5pZmVzdCkgfVxuICAgICAgICB7IEFwSGVhZC5yZW5kZXJUaGVtZUNvbG9yKHByb3BzLmNvbG9yKSB9XG4gICAgICAgIHsgQXBIZWFkLnJlbmRlckpzKHByb3BzLmpzLCBxdWVyeSkgfVxuICAgICAgICB7IHByb3BzLmNoaWxkcmVuIH1cbiAgICAgIDwvaGVhZD5cbiAgICApXG4gIH1cbn0pXG5cbmV4cG9ydCBkZWZhdWx0IEFwSGVhZFxuIl19