UNPKG

apeman-react-head

Version:
229 lines (208 loc) 22.7 kB
/** * 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwX2hlYWQuanN4Il0sIm5hbWVzIjpbIkFwSGVhZCIsImNyZWF0ZUNsYXNzIiwicHJvcFR5cGVzIiwiY2hhclNldCIsInN0cmluZyIsInRpdGxlIiwiaWNvbiIsIm1ldGEiLCJvbmVPZlR5cGUiLCJhcnJheU9mIiwib2JqZWN0IiwiaXRlbVByb3BzIiwiY3NzIiwiYXJyYXkiLCJqcyIsInZlcnNpb24iLCJ2ZXJzaW9uS2V5IiwiZ2xvYmFscyIsInZpZXdQb3J0IiwiYmFzZSIsImJhc2VUYXJnZXQiLCJtYW5pZmVzdCIsImNvbG9yIiwibWl4aW5zIiwic3RhdGljcyIsInJlbmRlckJhc2UiLCJ0YXJnZXQiLCJyZW5kZXJDaGFyc2V0IiwicmVuZGVyVGl0bGUiLCJyZW5kZXJJY29uIiwidXJsIiwicXVlcnkiLCJfYWRkUXVlcnkiLCJyZW5kZXJNZXRhVmFsdWVzIiwidmFsdWVzIiwiY29uY2F0IiwibWFwIiwiaSIsIm5hbWUiLCJqIiwicmVkdWNlIiwiYSIsImIiLCJyZW5kZXJJdGVtUHJvcHMiLCJyZW5kZXJDc3MiLCJ1cmxzIiwicmVuZGVySnMiLCJyZW5kZXJHbG9iYWxzIiwiX3N0cmluZ2lmeSIsImRhdGEiLCJrZXkiLCJfX2h0bWwiLCJyZW5kZXJWaWV3UG9ydCIsImNvbnRlbnQiLCJzcGluYWxjYXNlIiwiam9pbiIsInJlbmRlck1hbmlmZXN0IiwidmFsdWUiLCJyZW5kZXJUaGVtZUNvbG9yIiwiam9pbmVyIiwidGVzdCIsImdldEluaXRpYWxTdGF0ZSIsImdldERlZmF1bHRQcm9wcyIsIndpZHRoIiwiaW5pdGlhbFNjYWxlIiwidW5kZWZpbmVkIiwicmVuZGVyIiwicyIsInByb3BzIiwiY2hpbGRyZW4iXSwibWFwcGluZ3MiOiJBQUFBOzs7OztBQUtBOzs7Ozs7Ozs7Ozs7OztBQUVBOzs7O0FBQ0E7Ozs7OztBQUVBO0FBQ0EsSUFBTUEsU0FBUyxnQkFBTUMsV0FBTixDQUFrQjtBQUFBOztBQUMvQjtBQUNBO0FBQ0E7O0FBRUFDLGFBQVc7QUFDVDtB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QyxDQURKO0FBRUlwQixhQUFPMkIsYUFBUCxDQUFxQnlDLE1BQU1qRSxPQUEzQixDQUZKO0FBR0lILGFBQU80QixXQUFQLENBQW1Cd0MsTUFBTS9ELEtBQXpCLENBSEo7QUFJSUwsYUFBT2lDLGdCQUFQLENBQXdCbUMsTUFBTTdELElBQTlCLENBSko7QUFLSVAsYUFBTzJDLGVBQVAsQ0FBdUJ5QixNQUFNekQsU0FBN0IsQ0FMSjtBQU1JWCxhQUFPNkIsVUFBUCxDQUFrQnVDLE1BQU05RCxJQUF4QixFQUE4QnlCLEtBQTlCLENBTko7QUFPSS9CLGFBQU8rQyxhQUFQLENBQXFCcUIsTUFBTW5ELE9BQTNCLENBUEo7QUFRSWpCLGFBQU80QyxTQUFQLENBQWlCd0IsTUFBTXhELEdBQXZCLEVBQTRCbUIsS0FBNUIsQ0FSSjtBQVNJL0IsYUFBT29ELGNBQVAsQ0FBc0JnQixNQUFNbEQsUUFBNUIsQ0FUSjtBQVVJbEIsYUFBT3dELGNBQVAsQ0FBc0JZLE1BQU0vQyxRQUE1QixDQVZKO0FBV0lyQixhQUFPMEQsZ0JBQVAsQ0FBd0JVLE1BQU05QyxLQUE5QixDQVhKO0FBWUl0QixhQUFPOEMsUUFBUCxDQUFnQnNCLE1BQU10RCxFQUF0QixFQUEwQmlCLEtBQTFCLENBWko7QUFhSXFDLFlBQU1DO0FBYlYsS0FERjtBQWlCRDtBQXZNOEIsQ0FBbEIsQ0FBZjs7a0JBME1lckUsTSIsImZpbGUiOiJhcF9oZWFkLmpzeCIsInNvdXJjZVJvb3QiOiJsaWIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGFwZW1hbiByZWFjdCBwYWNrYWdlIGZvciBoZWFkIGNvbXBvbmVudC5cbiAqIEBjbGFzcyBBcEhlYWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuaW1wb3J0IFJlYWN0LCB7IFByb3BUeXBlcyBhcyB0eXBlcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHN0cmluZ2Nhc2UgZnJvbSAnc3RyaW5nY2FzZSdcblxuLyoqIEBsZW5kcyBBcEhlYWQgKi9cbmNvbnN0IEFwSGVhZCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gU3BlY3NcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcm9wVHlwZXM6IHtcbiAgICAvKiogQ2hhclNldCAqL1xuICAgIGNoYXJTZXQ6IHR5cGVzLnN0cmluZyxcbiAgICAvKiogRG9jdW1lbnQgVGl0bGUgKi9cbiAgICB0aXRsZTogdHlwZXMuc3RyaW5nLFxuICAgIC8qKiBGYXZpY29uICovXG4gICAgaWNvbjogdHlwZXMuc3RyaW5nLFxuICAgIC8qKiBNZXRhIGRhdGEgKi9cbiAgICBtZXRhOiB0eXBlcy5vbmVPZlR5cGUoW1xuICAgICAgdHlwZXMuYXJyYXlPZih0eXBlcy5vYmplY3QpLFxuICAgICAgdHlwZXMub2JqZWN0XG4gICAgXSksXG4gICAgLyoqIE1pY3JvIGRhdGEgc2V0dGluZ3MgKi9cbiAgICBpdGVtUHJvcHM6IHR5cGVzLm9uZU9mVHlwZShbXG4gICAgICB0eXBlcy5hcnJheU9mKHR5cGVzLm9iamVjdCksXG4gICAgICB0eXBlcy5vYmplY3RcbiAgICBdKSxcbiAgICAvKiogQ1NTIGZpbGUgdXJscyAqL1xuICAgIGNzczogdHlwZXMuYXJyYXksXG4gICAgLyoqIEpTIGZpbGUgdXJscyAqL1xuICAgIGpzOiB0eXBlcy5hcnJheSxcbiAgICAvKiogVmVyc2lvbiBzdHJpbmcgKi9cbiAgICB2ZXJzaW9uOiB0eXBlcy5zdHJpbmcsXG4gICAgLyoqIFF1ZXJ5IHN0cmluZyBrZXkgZm9yIHZlcnNpb24gKi9cbiAgICB2ZXJzaW9uS2V5OiB0eXBlcy5zdHJpbmcsXG4gICAgLyoqIEdsb2JhbCB2YXJpYWJsZXMgKi9cbiAgICBnbG9iYWxzOiB0eXBlcy5vYmplY3QsXG4gICAgLyoqIFZpZXcgcG9ydCBzZXR0aW5ncyAqL1xuICAgIHZpZXdQb3J0OiB0eXBlcy5vYmplY3QsXG4gICAgLyoqIEJhc2UgdXJsICovXG4gICAgYmFzZTogdHlwZXMuc3RyaW5nLFxuICAgIC8qKiBUYXJnZXQgb2YgYmFzZSB1cmwuICdfYmxhbmsnLCAnX3BhcmVudCcsICdfc2VsZicsICdfdG9wJyBvciBmcmFtZSBuYW1lICovXG4gICAgYmFzZVRhcmdldDogdHlwZXMuc3RyaW5nLFxuICAgIC8qKiBQYXRoIG9mIG1hbmlmZXN0Lmpzb24gKi9cbiAgICBtYW5pZmVzdDogdHlwZXMuc3RyaW5nLFxuICAgIC8qKiBUaGVtZSBjb2xvciAqL1xuICAgIGNvbG9yOiB0eXBlcy5zdHJpbmdcbiAgfSxcblxuICBtaXhpbnM6IFtdLFxuXG4gIHN0YXRpY3M6IHtcbiAgICByZW5kZXJCYXNlIChiYXNlLCB0YXJnZXQpIHtcbiAgICAgIGlmICghYmFzZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGJhc2UgaHJlZj17IGJhc2UgfSB0YXJnZXQ9eyB0YXJnZXQgfS8+XG4gICAgICApXG4gICAgfSxcbiAgICByZW5kZXJDaGFyc2V0IChjaGFyU2V0KSB7XG4gICAgICBpZiAoIWNoYXJTZXQpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxtZXRhIGNsYXNzTmFtZT0nYXAtaGVhZC1tZXRhJyBjaGFyU2V0PXsgY2hhclNldCB9Lz5cbiAgICAgIClcbiAgICB9LFxuICAgIHJlbmRlclRpdGxlICh0aXRsZSkge1xuICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHRpdGxlIGNsYXNzTmFtZT0nYXAtaGVhZC10aXRsZSc+eyB0aXRsZSB9PC90aXRsZT5cbiAgICAgIClcbiAgICB9LFxuICAgIHJlbmRlckljb24gKHVybCwgcXVlcnkpIHtcbiAgICAgIGlmICghdXJsKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8bGluayByZWw9J2ljb24nIGhyZWY9eyBBcEhlYWQuX2FkZFF1ZXJ5KHVybCwgcXVlcnkpIH0vPlxuICAgICAgKVxuICAgIH0sXG4gICAgcmVuZGVyTWV0YVZhbHVlcyAodmFsdWVzKSB7XG4gICAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIFtdLmNvbmNhdCh2YWx1ZXMpLm1hcCgodmFsdWVzLCBpKSA9PlxuICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZXMpLm1hcCgobmFtZSwgaikgPT5cbiAgICAgICAgICA8bWV0YSBuYW1lPXsgbmFtZSB9XG4gICAgICAgICAgICAgICAgY29udGVudD17IHZhbHVlc1sgbmFtZSBdIH1cbiAgICAgICAgICAgICAgICBrZXk9eyBgbWV0YS0ke2l9LSR7an1gIH0vPlxuICAgICAgICApXG4gICAgICApLnJlZHVjZSgoYSwgYikgPT4gW10uY29uY2F0KGEsIGIpLCBbXSlcbiAgICB9LFxuICAgIHJlbmRlckl0ZW1Qcm9wcyAodmFsdWVzKSB7XG4gICAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIFtdLmNvbmNhdCh2YWx1ZXMpLm1hcCgodmFsdWVzLCBpKSA9PlxuICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZXMpLm1hcCgobmFtZSwgaikgPT5cbiAgICAgICAgICA8bWV0YSBpdGVtUHJvcD17IG5hbWUgfVxuICAgICAgICAgICAgICAgIGNvbnRlbnQ9eyB2YWx1ZXNbIG5hbWUgXSB9XG4gICAgICAgICAgICAgICAga2V5PXsgYGl0ZW0tcHJvcCR7aX0tJHtqfWAgfS8+XG4gICAgICAgIClcbiAgICAgICkucmVkdWNlKChhLCBiKSA9PiBbXS5jb25jYXQoYSwgYiksIFtdKVxuICAgIH0sXG4gICAgcmVuZGVyQ3NzICh1cmxzLCBxdWVyeSkge1xuICAgICAgaWYgKCF1cmxzKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICByZXR1cm4gW10uY29uY2F0KHVybHMpLm1hcCgodXJsLCBpKSA9PlxuICAgICAgICA8bGluayByZWw9J3N0eWxlc2hlZXQnXG4gICAgICAgICAgICAgIHR5cGU9J3RleHQvY3NzJ1xuICAgICAgICAgICAgICBrZXk9eyBgY3NzLSR7aX0tJHt1cmx9YCB9XG4gICAgICAgICAgICAgIGhyZWY9eyBBcEhlYWQuX2FkZFF1ZXJ5KHVybCwgcXVlcnkpIH0vPlxuICAgICAgKVxuICAgIH0sXG4gICAgcmVuZGVySnMgKHVybHMsIHF1ZXJ5KSB7XG4gICAgICBpZiAoIXVybHMpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXS5jb25jYXQodXJscykubWFwKCh1cmwsIGkpID0+XG4gICAgICAgIDxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0J1xuICAgICAgICAgICAgICAgIGtleT17IGBqcy0ke2l9LSR7dXJsfWAgfVxuICAgICAgICAgICAgICAgIHNyYz17IEFwSGVhZC5fYWRkUXVlcnkodXJsLCBxdWVyeSl9Pjwvc2NyaXB0PlxuICAgICAgKVxuICAgIH0sXG4gICAgcmVuZGVyR2xvYmFscyAodmFsdWVzKSB7XG4gICAgICBsZXQgX3N0cmluZ2lmeSA9IChkYXRhKSA9PiBkYXRhID8gSlNPTi5zdHJpbmdpZnkoZGF0YSB8fCB7fSkgOiAnbnVsbCdcblxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbHVlcyB8fCB7fSkubWFwKChrZXksIGkpID0+XG4gICAgICAgIDxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0J1xuICAgICAgICAgICAgICAgIGtleT17IGBnbG9iYWwtJHtpfS0ke2tleX1gIH1cbiAgICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17XG4gICAgICAgICAgICAgICAgICB7IF9faHRtbDogYHdpbmRvdy4ke2tleX09JHtfc3RyaW5naWZ5KHZhbHVlc1sga2V5IF0pfWAgfVxuICAgICAgICAgICAgICAgIH0+PC9zY3JpcHQ+XG4gICAgICApXG4gICAgfSxcbiAgICByZW5kZXJWaWV3UG9ydCAodmFsdWVzKSB7XG4gICAgICBsZXQgY29udGVudCA9IE9iamVjdC5rZXlzKHZhbHVlcyB8fCB7fSkubWFwKChrZXkpID0+XG4gICAgICAgIFsgc3RyaW5nY2FzZS5zcGluYWxjYXNlKGtleSksIHZhbHVlc1sga2V5IF0gXS5qb2luKCc9JylcbiAgICAgICkuam9pbignLCcpXG4gICAgICByZXR1cm4gPG1ldGEgbmFtZT0ndmlld3BvcnQnIGNvbnRlbnQ9eyBjb250ZW50IH0vPlxuICAgIH0sXG4gICAgcmVuZGVyTWFuaWZlc3QgKHZhbHVlKSB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICByZXR1cm4gPGxpbmsgcmVsPSdtYW5pZmVzdCcgaHJlZj17IHZhbHVlIH0vPlxuICAgIH0sXG4gICAgcmVuZGVyVGhlbWVDb2xvciAodmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICAgIHJldHVybiA8bWV0YSBuYW1lPSd0aGVtZS1jb2xvcicgY29udGVudD17IHZhbHVlIH0vPlxuICAgIH0sXG4gICAgX2FkZFF1ZXJ5ICh1cmwsIHF1ZXJ5KSB7XG4gICAgICBsZXQgam9pbmVyID0gL1xcPy8udGVzdCh1cmwpID8gJyYnIDogJz8nXG4gICAgICByZXR1cm4gWyB1cmwsIHF1ZXJ5IF0uam9pbihqb2luZXIpXG4gICAgfVxuICB9LFxuXG4gIGdldEluaXRpYWxTdGF0ZSAoKSB7XG4gICAgcmV0dXJuIHt9XG4gIH0sXG5cbiAgZ2V0RGVmYXVsdFByb3BzICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hhclNldDogJ3V0Zi04JyxcbiAgICAgIHZlcnNpb246ICd1bmtub3duJyxcbiAgICAgIHZlcnNpb25LZXk6ICd2JyxcbiAgICAgIHZpZXdQb3J0OiB7XG4gICAgICAgIHdpZHRoOiAnZGV2aWNlLXdpZHRoJyxcbiAgICAgICAgaW5pdGlhbFNjYWxlOiAnMS4wJ1xuICAgICAgfSxcbiAgICAgIGJhc2U6IG51bGwsXG4gICAgICBiYXNlVGFyZ2V0OiB1bmRlZmluZWRcbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IHByb3BzIH0gPSBzXG5cbiAgICBsZXQgcXVlcnkgPSBbIHByb3BzLnZlcnNpb25LZXksIHByb3BzLnZlcnNpb24gXS5qb2luKCc9JylcbiAgICByZXR1cm4gKFxuICAgICAgPGhlYWQgY2xhc3NOYW1lPSdhcC1oZWFkJz5cbiAgICAgICAgeyBBcEhlYWQucmVuZGVyQmFzZShwcm9wcy5iYXNlLCBwcm9wcy5iYXNlVGFyZ2V0KSB9XG4gICAgICAgIHsgQXBIZWFkLnJlbmRlckNoYXJzZXQocHJvcHMuY2hhclNldCkgfVxuICAgICAgICB7IEFwSGVhZC5yZW5kZXJUaXRsZShwcm9wcy50aXRsZSkgfVxuICAgICAgICB7IEFwSGVhZC5yZW5kZXJNZXRhVmFsdWVzKHByb3BzLm1ldGEpIH1cbiAgICAgICAgeyBBcEhlYWQucmVuZGVySXRlbVByb3BzKHByb3BzLml0ZW1Qcm9wcykgfVxuICAgICAgICB7IEFwSGVhZC5yZW5kZXJJY29uKHByb3BzLmljb24sIHF1ZXJ5KSB9XG4gICAgICAgIHsgQXBIZWFkLnJlbmRlckdsb2JhbHMocHJvcHMuZ2xvYmFscykgfVxuICAgICAgICB7IEFwSGVhZC5yZW5kZXJDc3MocHJvcHMuY3NzLCBxdWVyeSkgfVxuICAgICAgICB7IEFwSGVhZC5yZW5kZXJWaWV3UG9ydChwcm9wcy52aWV3UG9ydCkgfVxuICAgICAgICB7IEFwSGVhZC5yZW5kZXJNYW5pZmVzdChwcm9wcy5tYW5pZmVzdCkgfVxuICAgICAgICB7IEFwSGVhZC5yZW5kZXJUaGVtZUNvbG9yKHByb3BzLmNvbG9yKSB9XG4gICAgICAgIHsgQXBIZWFkLnJlbmRlckpzKHByb3BzLmpzLCBxdWVyeSkgfVxuICAgICAgICB7IHByb3BzLmNoaWxkcmVuIH1cbiAgICAgIDwvaGVhZD5cbiAgICApXG4gIH1cbn0pXG5cbmV4cG9ydCBkZWZhdWx0IEFwSGVhZFxuIl19