Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

email-templates

Package Overview
Dependencies
Maintainers
1
Versions
137
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

email-templates - npm Package Compare versions

Comparing version 4.0.3 to 4.0.4

279

lib/index.js

@@ -114,17 +114,7 @@ 'use strict';

return new Promise((() => {
var _ref = _asyncToGenerator(function* (resolve, reject) {
try {
const paths = yield getPaths(_this.config.views.root, view, _this.config.views.options.extension);
const filePath = path.resolve(_this.config.views.root, paths.rel);
resolve({ filePath, paths });
} catch (err) {
reject(err);
}
});
return function (_x, _x2) {
return _ref.apply(this, arguments);
};
})());
return _asyncToGenerator(function* () {
const paths = yield getPaths(_this.config.views.root, view, _this.config.views.options.extension);
const filePath = path.resolve(_this.config.views.root, paths.rel);
return { filePath, paths };
})();
}

@@ -137,22 +127,16 @@

return new Promise((() => {
var _ref2 = _asyncToGenerator(function* (resolve) {
try {
var _ref3 = yield _this2.getTemplatePath(view);
return _asyncToGenerator(function* () {
try {
var _ref = yield _this2.getTemplatePath(view);
const filePath = _ref3.filePath;
const filePath = _ref.filePath;
const stats = yield stat(filePath);
if (!stats.isFile()) throw new Error(`${filePath} was not a file`);
resolve(true);
} catch (err) {
debug('templateExists', err);
resolve(false);
}
});
return function (_x3) {
return _ref2.apply(this, arguments);
};
})());
const stats = yield stat(filePath);
if (!stats.isFile()) throw new Error(`${filePath} was not a file`);
return true;
} catch (err) {
debug('templateExists', err);
return false;
}
})();
}

@@ -166,53 +150,40 @@

return new Promise((() => {
var _ref4 = _asyncToGenerator(function* (resolve, reject) {
try {
var _config$views$options = _this3.config.views.options;
const map = _config$views$options.map,
engineSource = _config$views$options.engineSource;
return _asyncToGenerator(function* () {
var _config$views$options = _this3.config.views.options;
const map = _config$views$options.map,
engineSource = _config$views$options.engineSource;
var _ref5 = yield _this3.getTemplatePath(view);
var _ref2 = yield _this3.getTemplatePath(view);
const filePath = _ref5.filePath,
paths = _ref5.paths;
const filePath = _ref2.filePath,
paths = _ref2.paths;
if (paths.ext === 'html' && !map) {
const res = yield readFile(filePath, 'utf8');
resolve(res);
} else {
const engineName = map && map[paths.ext] ? map[paths.ext] : paths.ext;
const renderFn = engineSource[engineName];
if (!engineName || !renderFn) return reject(new Error(`Engine not found for the ".${paths.ext}" file extension`));
if (paths.ext === 'html' && !map) {
const res = yield readFile(filePath, 'utf8');
return res;
}
const engineName = map && map[paths.ext] ? map[paths.ext] : paths.ext;
const renderFn = engineSource[engineName];
if (!engineName || !renderFn) throw new Error(`Engine not found for the ".${paths.ext}" file extension`);
if (_.isObject(_this3.config.i18n)) {
const i18n = new I18N(Object.assign({}, _this3.config.i18n, {
register: locals
}));
if (_.isObject(_this3.config.i18n)) {
const i18n = new I18N(Object.assign({}, _this3.config.i18n, {
register: locals
}));
// support `locals.user.last_locale`
// (e.g. for <https://lad.js.org>)
if (_.isObject(locals.user) && _.isString(locals.user.last_locale)) locals.locale = locals.user.last_locale;
// support `locals.user.last_locale`
// (e.g. for <https://lad.js.org>)
if (_.isObject(locals.user) && _.isString(locals.user.last_locale)) locals.locale = locals.user.last_locale;
if (_.isString(locals.locale)) i18n.setLocale(locals.locale);
}
if (_.isString(locals.locale)) i18n.setLocale(locals.locale);
}
// TODO: convert this to a promise based version
renderFn(filePath, locals, function (err, res) {
if (err) return reject(err);
// transform the html with juice using remote paths
// google now supports media queries
// https://developers.google.com/gmail/design/reference/supported_css
if (!_this3.config.juice) return resolve(res);
_this3.juiceResources(res).then(resolve).catch(reject);
});
}
} catch (err) {
reject(err);
}
});
return function (_x4, _x5) {
return _ref4.apply(this, arguments);
};
})());
const res = yield Promise.promisify(renderFn)(filePath, locals);
// transform the html with juice using remote paths
// google now supports media queries
// https://developers.google.com/gmail/design/reference/supported_css
if (!_this3.config.juice) return res;
const html = yield _this3.juiceResources(res);
return html;
})();
}

@@ -223,51 +194,41 @@

return new Promise((() => {
var _ref6 = _asyncToGenerator(function* (resolve, reject) {
try {
let subjectTemplateExists = _this4.config.customRender;
let htmlTemplateExists = _this4.config.customRender;
let textTemplateExists = _this4.config.customRender;
return _asyncToGenerator(function* () {
let subjectTemplateExists = _this4.config.customRender;
let htmlTemplateExists = _this4.config.customRender;
let textTemplateExists = _this4.config.customRender;
const promises = [_this4.templateExists(`${template}/subject`), _this4.templateExists(`${template}/html`), _this4.templateExists(`${template}/text`)];
const promises = [_this4.templateExists(`${template}/subject`), _this4.templateExists(`${template}/html`), _this4.templateExists(`${template}/text`)];
if (template && !_this4.config.customRender) {
;
if (template && !_this4.config.customRender) {
;
var _ref7 = yield Promise.all(promises);
var _ref3 = yield Promise.all(promises);
var _ref8 = _slicedToArray(_ref7, 3);
var _ref4 = _slicedToArray(_ref3, 3);
subjectTemplateExists = _ref8[0];
htmlTemplateExists = _ref8[1];
textTemplateExists = _ref8[2];
}if (!message.subject && subjectTemplateExists) {
message.subject = yield _this4.render(`${template}/subject`, Object.assign({}, locals, { pretty: false }));
message.subject = message.subject.trim();
}
subjectTemplateExists = _ref4[0];
htmlTemplateExists = _ref4[1];
textTemplateExists = _ref4[2];
}if (!message.subject && subjectTemplateExists) {
message.subject = yield _this4.render(`${template}/subject`, Object.assign({}, locals, { pretty: false }));
message.subject = message.subject.trim();
}
if (message.subject && _this4.config.subjectPrefix) message.subject = _this4.config.subjectPrefix + message.subject;
if (message.subject && _this4.config.subjectPrefix) message.subject = _this4.config.subjectPrefix + message.subject;
if (!message.html && htmlTemplateExists) message.html = yield _this4.render(`${template}/html`, locals);
if (!message.html && htmlTemplateExists) message.html = yield _this4.render(`${template}/html`, locals);
if (!message.text && textTemplateExists) message.text = yield _this4.render(`${template}/text`, Object.assign({}, locals, { pretty: false }));
if (!message.text && textTemplateExists) message.text = yield _this4.render(`${template}/text`, Object.assign({}, locals, { pretty: false }));
if (_this4.config.htmlToText && message.html && !message.text)
// we'd use nodemailer-html-to-text plugin
// but we really don't need to support cid
// <https://github.com/andris9/nodemailer-html-to-text>
message.text = htmlToText.fromString(message.html, _this4.config.htmlToText);
if (_this4.config.htmlToText && message.html && !message.text)
// we'd use nodemailer-html-to-text plugin
// but we really don't need to support cid
// <https://github.com/andris9/nodemailer-html-to-text>
message.text = htmlToText.fromString(message.html, _this4.config.htmlToText);
// if we only want a text-based version of the email
if (_this4.config.textOnly) delete message.html;
// if we only want a text-based version of the email
if (_this4.config.textOnly) delete message.html;
resolve(message);
} catch (err) {
reject(err);
}
});
return function (_x6, _x7) {
return _ref6.apply(this, arguments);
};
})());
return message;
})();
}

@@ -278,61 +239,51 @@

options = Object.assign({
template: '',
message: {},
locals: {}
}, options);
return _asyncToGenerator(function* () {
options = Object.assign({
template: '',
message: {},
locals: {}
}, options);
var _options = options;
let template = _options.template,
message = _options.message,
locals = _options.locals;
var _options = options;
let template = _options.template,
message = _options.message,
locals = _options.locals;
const attachments = message.attachments || this.config.message.attachments || [];
const attachments = message.attachments || _this5.config.message.attachments || [];
message = _.defaultsDeep({}, _.omit(this.config.message, 'attachments'), _.omit(message, 'attachments'));
locals = _.defaultsDeep({}, this.config.views.locals, locals);
message = _.defaultsDeep({}, _.omit(_this5.config.message, 'attachments'), _.omit(message, 'attachments'));
locals = _.defaultsDeep({}, _this5.config.views.locals, locals);
if (attachments) message.attachments = attachments;
if (attachments) message.attachments = attachments;
debug('template %s', template);
debug('message %O', message);
debug('locals (keys only): %O', Object.keys(locals));
debug('template %s', template);
debug('message %O', message);
debug('locals (keys only): %O', Object.keys(locals));
return new Promise((() => {
var _ref9 = _asyncToGenerator(function* (resolve, reject) {
try {
// get all available templates
const obj = yield _this5.renderAll(template, locals, message);
// get all available templates
const obj = yield _this5.renderAll(template, locals, message);
// assign the object variables over to the message
Object.assign(message, obj);
// assign the object variables over to the message
Object.assign(message, obj);
if (_this5.config.preview) {
debug('using `preview-email` to preview email');
yield previewEmail(message);
}
if (_this5.config.preview) {
debug('using `preview-email` to preview email');
yield previewEmail(message);
}
if (!_this5.config.send) {
debug('send disabled so we are ensuring JSONTransport');
// <https://github.com/nodemailer/nodemailer/issues/798>
// if (this.config.transport.name !== 'JSONTransport')
_this5.config.transport = nodemailer.createTransport({
jsonTransport: true
});
}
if (!_this5.config.send) {
debug('send disabled so we are ensuring JSONTransport');
// <https://github.com/nodemailer/nodemailer/issues/798>
// if (this.config.transport.name !== 'JSONTransport')
_this5.config.transport = nodemailer.createTransport({
jsonTransport: true
});
}
const res = yield _this5.config.transport.sendMail(message);
debug('message sent');
res.originalMessage = message;
resolve(res);
} catch (err) {
reject(err);
}
});
return function (_x8, _x9) {
return _ref9.apply(this, arguments);
};
})());
const res = yield _this5.config.transport.sendMail(message);
debug('message sent');
res.originalMessage = message;
return res;
})();
}

@@ -342,2 +293,2 @@ }

module.exports = Email;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJmcyIsInJlcXVpcmUiLCJwYXRoIiwiZGVidWciLCJodG1sVG9UZXh0IiwiSTE4TiIsImF1dG9CaW5kIiwibm9kZW1haWxlciIsImNvbnNvbGlkYXRlIiwicHJldmlld0VtYWlsIiwiXyIsIlByb21pc2UiLCJnZXRQYXRocyIsImp1aWNlUmVzb3VyY2VzIiwiZW52IiwicHJvY2VzcyIsIk5PREVfRU5WIiwic3RhdCIsInByb21pc2lmeSIsInJlYWRGaWxlIiwiRW1haWwiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsImp1aWNlT3B0aW9ucyIsImRpc2FibGVKdWljZSIsImp1aWNlIiwicmVuZGVyIiwiY3VzdG9tUmVuZGVyIiwibWVyZ2UiLCJ2aWV3cyIsInJvb3QiLCJyZXNvbHZlIiwib3B0aW9ucyIsImV4dGVuc2lvbiIsIm1hcCIsImhicyIsIm5qayIsImVuZ2luZVNvdXJjZSIsImxvY2FscyIsInByZXR0eSIsIm1lc3NhZ2UiLCJzZW5kIiwiaW5jbHVkZXMiLCJwcmV2aWV3IiwiaTE4biIsImJpbmQiLCJ0ZXh0T25seSIsImlnbm9yZUltYWdlIiwic3ViamVjdFByZWZpeCIsInByZXNlcnZlSW1wb3J0YW50Iiwid2ViUmVzb3VyY2VzIiwicmVsYXRpdmVUbyIsImltYWdlcyIsInRyYW5zcG9ydCIsImlzRnVuY3Rpb24iLCJzZW5kTWFpbCIsImNyZWF0ZVRyYW5zcG9ydCIsImh0bWwiLCJnZXRUZW1wbGF0ZVBhdGgiLCJ2aWV3IiwicmVqZWN0IiwicGF0aHMiLCJmaWxlUGF0aCIsInJlbCIsImVyciIsInRlbXBsYXRlRXhpc3RzIiwic3RhdHMiLCJpc0ZpbGUiLCJFcnJvciIsImV4dCIsInJlcyIsImVuZ2luZU5hbWUiLCJyZW5kZXJGbiIsImlzT2JqZWN0IiwiT2JqZWN0IiwiYXNzaWduIiwicmVnaXN0ZXIiLCJ1c2VyIiwiaXNTdHJpbmciLCJsYXN0X2xvY2FsZSIsImxvY2FsZSIsInNldExvY2FsZSIsInRoZW4iLCJjYXRjaCIsInJlbmRlckFsbCIsInRlbXBsYXRlIiwic3ViamVjdFRlbXBsYXRlRXhpc3RzIiwiaHRtbFRlbXBsYXRlRXhpc3RzIiwidGV4dFRlbXBsYXRlRXhpc3RzIiwicHJvbWlzZXMiLCJhbGwiLCJzdWJqZWN0IiwidHJpbSIsInRleHQiLCJmcm9tU3RyaW5nIiwiYXR0YWNobWVudHMiLCJkZWZhdWx0c0RlZXAiLCJvbWl0Iiwia2V5cyIsIm9iaiIsImpzb25UcmFuc3BvcnQiLCJvcmlnaW5hbE1lc3NhZ2UiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxNQUFNQSxLQUFLQyxRQUFRLElBQVIsQ0FBWDtBQUNBLE1BQU1DLE9BQU9ELFFBQVEsTUFBUixDQUFiO0FBQ0EsTUFBTUUsUUFBUUYsUUFBUSxPQUFSLEVBQWlCLGlCQUFqQixDQUFkO0FBQ0EsTUFBTUcsYUFBYUgsUUFBUSxjQUFSLENBQW5CO0FBQ0EsTUFBTUksT0FBT0osUUFBUSxhQUFSLENBQWI7QUFDQSxNQUFNSyxXQUFXTCxRQUFRLFdBQVIsQ0FBakI7QUFDQSxNQUFNTSxhQUFhTixRQUFRLFlBQVIsQ0FBbkI7QUFDQSxNQUFNTyxjQUFjUCxRQUFRLGFBQVIsQ0FBcEI7QUFDQSxNQUFNUSxlQUFlUixRQUFRLGVBQVIsQ0FBckI7QUFDQSxNQUFNUyxJQUFJVCxRQUFRLFFBQVIsQ0FBVjtBQUNBLE1BQU1VLFVBQVVWLFFBQVEsVUFBUixDQUFoQjs7QUFFQSxNQUFNVyxXQUFXWCxRQUFRLFdBQVIsQ0FBakI7QUFDQSxNQUFNWSxpQkFBaUJaLFFBQVEseUJBQVIsQ0FBdkI7O0FBRUEsTUFBTWEsTUFBTUMsUUFBUUQsR0FBUixDQUFZRSxRQUFaLElBQXdCLGFBQXBDO0FBQ0EsTUFBTUMsT0FBT04sUUFBUU8sU0FBUixDQUFrQmxCLEdBQUdpQixJQUFyQixDQUFiO0FBQ0EsTUFBTUUsV0FBV1IsUUFBUU8sU0FBUixDQUFrQmxCLEdBQUdtQixRQUFyQixDQUFqQjs7QUFFQSxNQUFNQyxLQUFOLENB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Iiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnZW1haWwtdGVtcGxhdGVzJyk7XG5jb25zdCBodG1sVG9UZXh0ID0gcmVxdWlyZSgnaHRtbC10by10ZXh0Jyk7XG5jb25zdCBJMThOID0gcmVxdWlyZSgnQGxhZGpzL2kxOG4nKTtcbmNvbnN0IGF1dG9CaW5kID0gcmVxdWlyZSgnYXV0by1iaW5kJyk7XG5jb25zdCBub2RlbWFpbGVyID0gcmVxdWlyZSgnbm9kZW1haWxlcicpO1xuY29uc3QgY29uc29saWRhdGUgPSByZXF1aXJlKCdjb25zb2xpZGF0ZScpO1xuY29uc3QgcHJldmlld0VtYWlsID0gcmVxdWlyZSgncHJldmlldy1lbWFpbCcpO1xuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoJ2JsdWViaXJkJyk7XG5cbmNvbnN0IGdldFBhdGhzID0gcmVxdWlyZSgnZ2V0LXBhdGhzJyk7XG5jb25zdCBqdWljZVJlc291cmNlcyA9IHJlcXVpcmUoJ2p1aWNlLXJlc291cmNlcy1wcm9taXNlJyk7XG5cbmNvbnN0IGVudiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WIHx8ICdkZXZlbG9wbWVudCc7XG5jb25zdCBzdGF0ID0gUHJvbWlzZS5wcm9taXNpZnkoZnMuc3RhdCk7XG5jb25zdCByZWFkRmlsZSA9IFByb21pc2UucHJvbWlzaWZ5KGZzLnJlYWRGaWxlKTtcblxuY2xhc3MgRW1haWwge1xuICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgIGRlYnVnKCdjb25maWcgcGFzc2VkICVPJywgY29uZmlnKTtcblxuICAgIC8vIDIueCBiYWNrd2FyZHMgY29tcGF0aWJsZSBzdXBwb3J0XG4gICAgaWYgKGNvbmZpZy5qdWljZU9wdGlvbnMpIHtcbiAgICAgIGNvbmZpZy5qdWljZVJlc291cmNlcyA9IGNvbmZpZy5qdWljZU9wdGlvbnM7XG4gICAgICBkZWxldGUgY29uZmlnLmp1aWNlT3B0aW9ucztcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5kaXNhYmxlSnVpY2UpIHtcbiAgICAgIGNvbmZpZy5qdWljZSA9IGZhbHNlO1xuICAgICAgZGVsZXRlIGNvbmZpZy5kaXNhYmxlSnVpY2U7XG4gICAgfVxuICAgIGlmIChjb25maWcucmVuZGVyKSB7XG4gICAgICBjb25maWcuY3VzdG9tUmVuZGVyID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZyA9IF8ubWVyZ2UoXG4gICAgICB7XG4gICAgICAgIHZpZXdzOiB7XG4gICAgICAgICAgLy8gZGlyZWN0b3J5IHdoZXJlIGVtYWlsIHRlbXBsYXRlcyByZXNpZGVcbiAgICAgICAgICByb290OiBwYXRoLnJlc29sdmUoJ2VtYWlscycpLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIC8vIGRlZmF1bHQgZmlsZSBleHRlbnNpb24gZm9yIHRlbXBsYXRlXG4gICAgICAgICAgICBleHRlbnNpb246ICdwdWcnLFxuICAgICAgICAgICAgbWFwOiB7XG4gICAgICAgICAgICAgIGhiczogJ2hhbmRsZWJhcnMnLFxuICAgICAgICAgICAgICBuams6ICdudW5qdWNrcydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmdpbmVTb3VyY2U6IGNvbnNvbGlkYXRlXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBsb2NhbHMgdG8gcGFzcyB0byB0ZW1wbGF0ZXMgZm9yIHJlbmRlcmluZ1xuICAgICAgICAgIGxvY2Fsczoge1xuICAgICAgICAgICAgLy8gcHJldHR5IGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGBmYWxzZWAgZm9yIHN1YmplY3QvdGV4dFxuICAgICAgICAgICAgcHJldHR5OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyA8aHR0cHM6Ly9ub2RlbWFpbGVyLmNvbS9tZXNzYWdlLz5cbiAgICAgICAgbWVzc2FnZToge30sXG4gICAgICAgIHNlbmQ6ICFbJ2RldmVsb3BtZW50JywgJ3Rlc3QnXS5pbmNsdWRlcyhlbnYpLFxuICAgICAgICBwcmV2aWV3OiBlbnYgPT09ICdkZXZlbG9wbWVudCcsXG4gICAgICAgIC8vIDxodHRwczovL2dpdGh1Yi5jb20vbGFkanMvaTE4bj5cbiAgICAgICAgLy8gc2V0IHRvIGFuIG9iamVjdCB0byBjb25maWd1cmUgYW5kIGVuYWJsZSBpdFxuICAgICAgICBpMThuOiBmYWxzZSxcbiAgICAgICAgLy8gcGFzcyBhIGN1c3RvbSByZW5kZXIgZnVuY3Rpb24gaWYgbmVjZXNzYXJ5XG4gICAgICAgIHJlbmRlcjogdGhpcy5yZW5kZXIuYmluZCh0aGlzKSxcbiAgICAgICAgY3VzdG9tUmVuZGVyOiBmYWxzZSxcbiAgICAgICAgLy8gZm9yY2UgdGV4dC1vbmx5IHJlbmRlcmluZyBvZiB0ZW1wbGF0ZSAoZGlzcmVnYXJkcyB0ZW1wbGF0ZSBmb2xkZXIpXG4gICAgICAgIHRleHRPbmx5OiBmYWxzZSxcbiAgICAgICAgLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS93ZXJrODUvbm9kZS1odG1sLXRvLXRleHQ+XG4gICAgICAgIGh0bWxUb1RleHQ6IHtcbiAgICAgICAgICBpZ25vcmVJbWFnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBzdWJqZWN0UHJlZml4OiBmYWxzZSxcbiAgICAgICAgLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9BdXRvbWF0dGljL2p1aWNlPlxuICAgICAgICBqdWljZTogdHJ1ZSxcbiAgICAgICAganVpY2VSZXNvdXJjZXM6IHtcbiAgICAgICAgICBwcmVzZXJ2ZUltcG9ydGFudDogdHJ1ZSxcbiAgICAgICAgICB3ZWJSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgIHJlbGF0aXZlVG86IHBhdGgucmVzb2x2ZSgnYnVpbGQnKSxcbiAgICAgICAgICAgIGltYWdlczogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHBhc3MgYSB0cmFuc3BvcnQgY29uZmlndXJhdGlvbiBvYmplY3Qgb3IgYSB0cmFuc3BvcnQgaW5zdGFuY2VcbiAgICAgICAgLy8gKGUuZy4gYW4gaW5zdGFuY2UgaXMgY3JlYXRlZCB2aWEgYG5vZGVtYWlsZXIuY3JlYXRlVHJhbnNwb3J0YClcbiAgICAgICAgLy8gPGh0dHBzOi8vbm9kZW1haWxlci5jb20vdHJhbnNwb3J0cy8+XG4gICAgICAgIHRyYW5zcG9ydDoge31cbiAgICAgIH0sXG4gICAgICBjb25maWdcbiAgICApO1xuXG4gICAgLy8gb3ZlcnJpZGUgZXhpc3RpbmcgbWV0aG9kXG4gICAgdGhpcy5yZW5kZXIgPSB0aGlzLmNvbmZpZy5yZW5kZXI7XG5cbiAgICBpZiAoIV8uaXNGdW5jdGlvbih0aGlzLmNvbmZpZy50cmFuc3BvcnQuc2VuZE1haWwpKVxuICAgICAgdGhpcy5jb25maWcudHJhbnNwb3J0ID0gbm9kZW1haWxlci5jcmVhdGVUcmFuc3BvcnQodGhpcy5jb25maWcudHJhbnNwb3J0KTtcblxuICAgIGRlYnVnKCd0cmFuc2Zvcm1lZCBjb25maWcgJU8nLCB0aGlzLmNvbmZpZyk7XG5cbiAgICBhdXRvQmluZCh0aGlzKTtcbiAgfVxuXG4gIC8vIHNob3J0aGFuZCB1c2Ugb2YgYGp1aWNlUmVzb3VyY2VzYCB3aXRoIHRoZSBjb25maWdcbiAgLy8gKG1haW5seSBmb3IgY3VzdG9tIHJlbmRlcnMgbGlrZSBmcm9tIGEgZGF0YWJhc2UpXG4gIGp1aWNlUmVzb3VyY2VzKGh0bWwpIHtcbiAgICByZXR1cm4ganVpY2VSZXNvdXJjZXMoaHRtbCwgdGhpcy5jb25maWcuanVpY2VSZXNvdXJjZXMpO1xuICB9XG5cbiAgLy8gYSBzaW1wbGUgaGVscGVyIGZ1bmN0aW9uIHRoYXQgZ2V0cyB0aGUgYWN0dWFsIGZpbGUgcGF0aCBmb3IgdGhlIHRlbXBsYXRlXG4gIGdldFRlbXBsYXRlUGF0aCh2aWV3KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhdGhzID0gYXdhaXQgZ2V0UGF0aHMoXG4gICAgICAgICAgdGhpcy5jb25maWcudmlld3Mucm9vdCxcbiAgICAgICAgICB2aWV3LFxuICAgICAgICAgIHRoaXMuY29uZmlnLnZpZXdzLm9wdGlvbnMuZXh0ZW5zaW9uXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuY29uZmlnLnZpZXdzLnJvb3QsIHBhdGhzLnJlbCk7XG4gICAgICAgIHJlc29sdmUoeyBmaWxlUGF0aCwgcGF0aHMgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyByZXR1cm5zIHRydWUgb3IgZmFsc2UgaWYgYSB0ZW1wbGF0ZSBleGlzdHNcbiAgLy8gKHVzZXMgc2FtZSBsb29rLXVwIGFwcHJvYWNoIGFzIGByZW5kZXJgIGZ1bmN0aW9uKVxuICB0ZW1wbGF0ZUV4aXN0cyh2aWV3KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIHJlc29sdmUgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBmaWxlUGF0aCB9ID0gYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZVBhdGgodmlldyk7XG4gICAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgc3RhdChmaWxlUGF0aCk7XG4gICAgICAgIGlmICghc3RhdHMuaXNGaWxlKCkpIHRocm93IG5ldyBFcnJvcihgJHtmaWxlUGF0aH0gd2FzIG5vdCBhIGZpbGVgKTtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBkZWJ1ZygndGVtcGxhdGVFeGlzdHMnLCBlcnIpO1xuICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIHByb21pc2UgdmVyc2lvbiBvZiBjb25zb2xpZGF0ZSdzIHJlbmRlclxuICAvLyBpbnNwaXJlZCBieSBrb2Etdmlld3MgYW5kIHJlLXVzZXMgdGhlIHNhbWUgY29uZmlnXG4gIC8vIDxodHRwczovL2dpdGh1Yi5jb20vcXVlY2tlenova29hLXZpZXdzPlxuICByZW5kZXIodmlldywgbG9jYWxzID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBtYXAsIGVuZ2luZVNvdXJjZSB9ID0gdGhpcy5jb25maWcudmlld3Mub3B0aW9ucztcbiAgICAgICAgY29uc3QgeyBmaWxlUGF0aCwgcGF0aHMgfSA9IGF3YWl0IHRoaXMuZ2V0VGVtcGxhdGVQYXRoKHZpZXcpO1xuICAgICAgICBpZiAocGF0aHMuZXh0ID09PSAnaHRtbCcgJiYgIW1hcCkge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoLCAndXRmOCcpO1xuICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBlbmdpbmVOYW1lID0gbWFwICYmIG1hcFtwYXRocy5leHRdID8gbWFwW3BhdGhzLmV4dF0gOiBwYXRocy5leHQ7XG4gICAgICAgICAgY29uc3QgcmVuZGVyRm4gPSBlbmdpbmVTb3VyY2VbZW5naW5lTmFtZV07XG4gICAgICAgICAgaWYgKCFlbmdpbmVOYW1lIHx8ICFyZW5kZXJGbilcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoXG4gICAgICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgRW5naW5lIG5vdCBmb3VuZCBmb3IgdGhlIFwiLiR7cGF0aHMuZXh0fVwiIGZpbGUgZXh0ZW5zaW9uYFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKF8uaXNPYmplY3QodGhpcy5jb25maWcuaTE4bikpIHtcbiAgICAgICAgICAgIGNvbnN0IGkxOG4gPSBuZXcgSTE4TihcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb25maWcuaTE4biwge1xuICAgICAgICAgICAgICAgIHJlZ2lzdGVyOiBsb2NhbHNcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIHN1cHBvcnQgYGxvY2Fscy51c2VyLmxhc3RfbG9jYWxlYFxuICAgICAgICAgICAgLy8gKGUuZy4gZm9yIDxodHRwczovL2xhZC5qcy5vcmc+KVxuICAgICAgICAgICAgaWYgKF8uaXNPYmplY3QobG9jYWxzLnVzZXIpICYmIF8uaXNTdHJpbmcobG9jYWxzLnVzZXIubGFzdF9sb2NhbGUpKVxuICAgICAgICAgICAgICBsb2NhbHMubG9jYWxlID0gbG9jYWxzLnVzZXIubGFzdF9sb2NhbGU7XG5cbiAgICAgICAgICAgIGlmIChfLmlzU3RyaW5nKGxvY2Fscy5sb2NhbGUpKSBpMThuLnNldExvY2FsZShsb2NhbHMubG9jYWxlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBUT0RPOiBjb252ZXJ0IHRoaXMgdG8gYSBwcm9taXNlIGJhc2VkIHZlcnNpb25cbiAgICAgICAgICByZW5kZXJGbihmaWxlUGF0aCwgbG9jYWxzLCAoZXJyLCByZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIC8vIHRyYW5zZm9ybSB0aGUgaHRtbCB3aXRoIGp1aWNlIHVzaW5nIHJlbW90ZSBwYXRoc1xuICAgICAgICAgICAgLy8gZ29vZ2xlIG5vdyBzdXBwb3J0cyBtZWRpYSBxdWVyaWVzXG4gICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9nbWFpbC9kZXNpZ24vcmVmZXJlbmNlL3N1cHBvcnRlZF9jc3NcbiAgICAgICAgICAgIGlmICghdGhpcy5jb25maWcuanVpY2UpIHJldHVybiByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICB0aGlzLmp1aWNlUmVzb3VyY2VzKHJlcylcbiAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSlcbiAgICAgICAgICAgICAgLmNhdGNoKHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlckFsbCh0ZW1wbGF0ZSwgbG9jYWxzID0ge30sIG1lc3NhZ2UgPSB7fSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgc3ViamVjdFRlbXBsYXRlRXhpc3RzID0gdGhpcy5jb25maWcuY3VzdG9tUmVuZGVyO1xuICAgICAgICBsZXQgaHRtbFRlbXBsYXRlRXhpc3RzID0gdGhpcy5jb25maWcuY3VzdG9tUmVuZGVyO1xuICAgICAgICBsZXQgdGV4dFRlbXBsYXRlRXhpc3RzID0gdGhpcy5jb25maWcuY3VzdG9tUmVuZGVyO1xuXG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW1xuICAgICAgICAgIHRoaXMudGVtcGxhdGVFeGlzdHMoYCR7dGVtcGxhdGV9L3N1YmplY3RgKSxcbiAgICAgICAgICB0aGlzLnRlbXBsYXRlRXhpc3RzKGAke3RlbXBsYXRlfS9odG1sYCksXG4gICAgICAgICAgdGhpcy50ZW1wbGF0ZUV4aXN0cyhgJHt0ZW1wbGF0ZX0vdGV4dGApXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHRlbXBsYXRlICYmICF0aGlzLmNvbmZpZy5jdXN0b21SZW5kZXIpXG4gICAgICAgICAgW1xuICAgICAgICAgICAgc3ViamVjdFRlbXBsYXRlRXhpc3RzLFxuICAgICAgICAgICAgaHRtbFRlbXBsYXRlRXhpc3RzLFxuICAgICAgICAgICAgdGV4dFRlbXBsYXRlRXhpc3RzXG4gICAgICAgICAgXSA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblxuICAgICAgICBpZiAoIW1lc3NhZ2Uuc3ViamVjdCAmJiBzdWJqZWN0VGVtcGxhdGVFeGlzdHMpIHtcbiAgICAgICAgICBtZXNzYWdlLnN1YmplY3QgPSBhd2FpdCB0aGlzLnJlbmRlcihcbiAgICAgICAgICAgIGAke3RlbXBsYXRlfS9zdWJqZWN0YCxcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oe30sIGxvY2FscywgeyBwcmV0dHk6IGZhbHNlIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBtZXNzYWdlLnN1YmplY3QgPSBtZXNzYWdlLnN1YmplY3QudHJpbSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1lc3NhZ2Uuc3ViamVjdCAmJiB0aGlzLmNvbmZpZy5zdWJqZWN0UHJlZml4KVxuICAgICAgICAgIG1lc3NhZ2Uuc3ViamVjdCA9IHRoaXMuY29uZmlnLnN1YmplY3RQcmVmaXggKyBtZXNzYWdlLnN1YmplY3Q7XG5cbiAgICAgICAgaWYgKCFtZXNzYWdlLmh0bWwgJiYgaHRtbFRlbXBsYXRlRXhpc3RzKVxuICAgICAgICAgIG1lc3NhZ2UuaHRtbCA9IGF3YWl0IHRoaXMucmVuZGVyKGAke3RlbXBsYXRlfS9odG1sYCwgbG9jYWxzKTtcblxuICAgICAgICBpZiAoIW1lc3NhZ2UudGV4dCAmJiB0ZXh0VGVtcGxhdGVFeGlzdHMpXG4gICAgICAgICAgbWVzc2FnZS50ZXh0ID0gYXdhaXQgdGhpcy5yZW5kZXIoXG4gICAgICAgICAgICBgJHt0ZW1wbGF0ZX0vdGV4dGAsXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBsb2NhbHMsIHsgcHJldHR5OiBmYWxzZSB9KVxuICAgICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmh0bWxUb1RleHQgJiYgbWVzc2FnZS5odG1sICYmICFtZXNzYWdlLnRleHQpXG4gICAgICAgICAgLy8gd2UnZCB1c2Ugbm9kZW1haWxlci1odG1sLXRvLXRleHQgcGx1Z2luXG4gICAgICAgICAgLy8gYnV0IHdlIHJlYWxseSBkb24ndCBuZWVkIHRvIHN1cHBvcnQgY2lkXG4gICAgICAgICAgLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9hbmRyaXM5L25vZGVtYWlsZXItaHRtbC10by10ZXh0PlxuICAgICAgICAgIG1lc3NhZ2UudGV4dCA9IGh0bWxUb1RleHQuZnJvbVN0cmluZyhcbiAgICAgICAgICAgIG1lc3NhZ2UuaHRtbCxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmh0bWxUb1RleHRcbiAgICAgICAgICApO1xuXG4gICAgICAgIC8vIGlmIHdlIG9ubHkgd2FudCBhIHRleHQtYmFzZWQgdmVyc2lvbiBvZiB0aGUgZW1haWxcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnRleHRPbmx5KSBkZWxldGUgbWVzc2FnZS5odG1sO1xuXG4gICAgICAgIHJlc29sdmUobWVzc2FnZSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZW5kKG9wdGlvbnMgPSB7fSkge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICB0ZW1wbGF0ZTogJycsXG4gICAgICAgIG1lc3NhZ2U6IHt9LFxuICAgICAgICBsb2NhbHM6IHt9XG4gICAgICB9LFxuICAgICAgb3B0aW9uc1xuICAgICk7XG5cbiAgICBsZXQgeyB0ZW1wbGF0ZSwgbWVzc2FnZSwgbG9jYWxzIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3QgYXR0YWNobWVudHMgPVxuICAgICAgbWVzc2FnZS5hdHRhY2htZW50cyB8fCB0aGlzLmNvbmZpZy5tZXNzYWdlLmF0dGFjaG1lbnRzIHx8IFtdO1xuXG4gICAgbWVzc2FnZSA9IF8uZGVmYXVsdHNEZWVwKFxuICAgICAge30sXG4gICAgICBfLm9taXQodGhpcy5jb25maWcubWVzc2FnZSwgJ2F0dGFjaG1lbnRzJyksXG4gICAgICBfLm9taXQobWVzc2FnZSwgJ2F0dGFjaG1lbnRzJylcbiAgICApO1xuICAgIGxvY2FscyA9IF8uZGVmYXVsdHNEZWVwKHt9LCB0aGlzLmNvbmZpZy52aWV3cy5sb2NhbHMsIGxvY2Fscyk7XG5cbiAgICBpZiAoYXR0YWNobWVudHMpIG1lc3NhZ2UuYXR0YWNobWVudHMgPSBhdHRhY2htZW50cztcblxuICAgIGRlYnVnKCd0ZW1wbGF0ZSAlcycsIHRlbXBsYXRlKTtcbiAgICBkZWJ1ZygnbWVzc2FnZSAlTycsIG1lc3NhZ2UpO1xuICAgIGRlYnVnKCdsb2NhbHMgKGtleXMgb25seSk6ICVPJywgT2JqZWN0LmtleXMobG9jYWxzKSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gZ2V0IGFsbCBhdmFpbGFibGUgdGVtcGxhdGVzXG4gICAgICAgIGNvbnN0IG9iaiA9IGF3YWl0IHRoaXMucmVuZGVyQWxsKHRlbXBsYXRlLCBsb2NhbHMsIG1lc3NhZ2UpO1xuXG4gICAgICAgIC8vIGFzc2lnbiB0aGUgb2JqZWN0IHZhcmlhYmxlcyBvdmVyIHRvIHRoZSBtZXNzYWdlXG4gICAgICAgIE9iamVjdC5hc3NpZ24obWVzc2FnZSwgb2JqKTtcblxuICAgICAgICBpZiAodGhpcy5jb25maWcucHJldmlldykge1xuICAgICAgICAgIGRlYnVnKCd1c2luZyBgcHJldmlldy1lbWFpbGAgdG8gcHJldmlldyBlbWFpbCcpO1xuICAgICAgICAgIGF3YWl0IHByZXZpZXdFbWFpbChtZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5jb25maWcuc2VuZCkge1xuICAgICAgICAgIGRlYnVnKCdzZW5kIGRpc2FibGVkIHNvIHdlIGFyZSBlbnN1cmluZyBKU09OVHJhbnNwb3J0Jyk7XG4gICAgICAgICAgLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlbWFpbGVyL25vZGVtYWlsZXIvaXNzdWVzLzc5OD5cbiAgICAgICAgICAvLyBpZiAodGhpcy5jb25maWcudHJhbnNwb3J0Lm5hbWUgIT09ICdKU09OVHJhbnNwb3J0JylcbiAgICAgICAgICB0aGlzLmNvbmZpZy50cmFuc3BvcnQgPSBub2RlbWFpbGVyLmNyZWF0ZVRyYW5zcG9ydCh7XG4gICAgICAgICAgICBqc29uVHJhbnNwb3J0OiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNvbmZpZy50cmFuc3BvcnQuc2VuZE1haWwobWVzc2FnZSk7XG4gICAgICAgIGRlYnVnKCdtZXNzYWdlIHNlbnQnKTtcbiAgICAgICAgcmVzLm9yaWdpbmFsTWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEVtYWlsO1xuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJmcyIsInJlcXVpcmUiLCJwYXRoIiwiZGVidWciLCJodG1sVG9UZXh0IiwiSTE4TiIsImF1dG9CaW5kIiwibm9kZW1haWxlciIsImNvbnNvbGlkYXRlIiwicHJldmlld0VtYWlsIiwiXyIsIlByb21pc2UiLCJnZXRQYXRocyIsImp1aWNlUmVzb3VyY2VzIiwiZW52IiwicHJvY2VzcyIsIk5PREVfRU5WIiwic3RhdCIsInByb21pc2lmeSIsInJlYWRGaWxlIiwiRW1haWwiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsImp1aWNlT3B0aW9ucyIsImRpc2FibGVKdWljZSIsImp1aWNlIiwicmVuZGVyIiwiY3VzdG9tUmVuZGVyIiwibWVyZ2UiLCJ2aWV3cyIsInJvb3QiLCJyZXNvbHZlIiwib3B0aW9ucyIsImV4dGVuc2lvbiIsIm1hcCIsImhicyIsIm5qayIsImVuZ2luZVNvdXJjZSIsImxvY2FscyIsInByZXR0eSIsIm1lc3NhZ2UiLCJzZW5kIiwiaW5jbHVkZXMiLCJwcmV2aWV3IiwiaTE4biIsImJpbmQiLCJ0ZXh0T25seSIsImlnbm9yZUltYWdlIiwic3ViamVjdFByZWZpeCIsInByZXNlcnZlSW1wb3J0YW50Iiwid2ViUmVzb3VyY2VzIiwicmVsYXRpdmVUbyIsImltYWdlcyIsInRyYW5zcG9ydCIsImlzRnVuY3Rpb24iLCJzZW5kTWFpbCIsImNyZWF0ZVRyYW5zcG9ydCIsImh0bWwiLCJnZXRUZW1wbGF0ZVBhdGgiLCJ2aWV3IiwicGF0aHMiLCJmaWxlUGF0aCIsInJlbCIsInRlbXBsYXRlRXhpc3RzIiwic3RhdHMiLCJpc0ZpbGUiLCJFcnJvciIsImVyciIsImV4dCIsInJlcyIsImVuZ2luZU5hbWUiLCJyZW5kZXJGbiIsImlzT2JqZWN0IiwiT2JqZWN0IiwiYXNzaWduIiwicmVnaXN0ZXIiLCJ1c2VyIiwiaXNTdHJpbmciLCJsYXN0X2xvY2FsZSIsImxvY2FsZSIsInNldExvY2FsZSIsInJlbmRlckFsbCIsInRlbXBsYXRlIiwic3ViamVjdFRlbXBsYXRlRXhpc3RzIiwiaHRtbFRlbXBsYXRlRXhpc3RzIiwidGV4dFRlbXBsYXRlRXhpc3RzIiwicHJvbWlzZXMiLCJhbGwiLCJzdWJqZWN0IiwidHJpbSIsInRleHQiLCJmcm9tU3RyaW5nIiwiYXR0YWNobWVudHMiLCJkZWZhdWx0c0RlZXAiLCJvbWl0Iiwia2V5cyIsIm9iaiIsImpzb25UcmFuc3BvcnQiLCJvcmlnaW5hbE1lc3NhZ2UiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxNQUFNQSxLQUFLQyxRQUFRLElBQVIsQ0FBWDtBQUNBLE1BQU1DLE9BQU9ELFFBQVEsTUFBUixDQUFiO0FBQ0EsTUFBTUUsUUFBUUYsUUFBUSxPQUFSLEVBQWlCLGlCQUFqQixDQUFkO0FBQ0EsTUFBTUcsYUFBYUgsUUFBUSxjQUFSLENBQW5CO0FBQ0EsTUFBTUksT0FBT0osUUFBUSxhQUFSLENBQWI7QUFDQSxNQUFNSyxXQUFXTCxRQUFRLFdBQVIsQ0FBakI7QUFDQSxNQUFNTSxhQUFhTixRQUFRLFlBQVIsQ0FBbkI7QUFDQSxNQUFNTyxjQUFjUCxRQUFRLGFBQVIsQ0FBcEI7QUFDQSxNQUFNUSxlQUFlUixRQUFRLGVBQVIsQ0FBckI7QUFDQSxNQUFNUyxJQUFJVCxRQUFRLFFBQVIsQ0FBVjtBQUNBLE1BQU1VLFVBQVVWLFFBQVEsVUFBUixDQUFoQjs7QUFFQSxNQUFNVyxXQUFXWCxRQUFRLFdBQVIsQ0FBakI7QUFDQSxNQUFNWSxpQkFBaUJaLFFBQVEseUJBQVIsQ0FBdkI7O0FBRUEsTUFBTWEsTUFBTUMsUUFBUUQsR0FBUixDQUFZRSxRQUFaLElBQXdCLGFBQXBDO0FBQ0EsTUFBTUMsT0FBT04sUUFBUU8sU0FBUixDQUFrQmxCLEdBQUdpQixJQUFyQixDQUFiO0FBQ0EsTUFBTUUsV0FBV1IsUUFBUU8sU0FBUixDQUFrQmxCLEdBQUdtQixRQUFyQixDQUFqQjs7QUFFQSxNQUFNQyxLQUFOLENBQVk7QUFDVkMsY0FBWUMsU0FBUyxFQUFy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TzZCLEdBQVA7QUFuRHVCO0FBb0R4QjtBQW5RUzs7QUFzUVo4QixPQUFPQyxPQUFQLEdBQWlCaEYsS0FBakIiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdlbWFpbC10ZW1wbGF0ZXMnKTtcbmNvbnN0IGh0bWxUb1RleHQgPSByZXF1aXJlKCdodG1sLXRvLXRleHQnKTtcbmNvbnN0IEkxOE4gPSByZXF1aXJlKCdAbGFkanMvaTE4bicpO1xuY29uc3QgYXV0b0JpbmQgPSByZXF1aXJlKCdhdXRvLWJpbmQnKTtcbmNvbnN0IG5vZGVtYWlsZXIgPSByZXF1aXJlKCdub2RlbWFpbGVyJyk7XG5jb25zdCBjb25zb2xpZGF0ZSA9IHJlcXVpcmUoJ2NvbnNvbGlkYXRlJyk7XG5jb25zdCBwcmV2aWV3RW1haWwgPSByZXF1aXJlKCdwcmV2aWV3LWVtYWlsJyk7XG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5jb25zdCBQcm9taXNlID0gcmVxdWlyZSgnYmx1ZWJpcmQnKTtcblxuY29uc3QgZ2V0UGF0aHMgPSByZXF1aXJlKCdnZXQtcGF0aHMnKTtcbmNvbnN0IGp1aWNlUmVzb3VyY2VzID0gcmVxdWlyZSgnanVpY2UtcmVzb3VyY2VzLXByb21pc2UnKTtcblxuY29uc3QgZW52ID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgfHwgJ2RldmVsb3BtZW50JztcbmNvbnN0IHN0YXQgPSBQcm9taXNlLnByb21pc2lmeShmcy5zdGF0KTtcbmNvbnN0IHJlYWRGaWxlID0gUHJvbWlzZS5wcm9taXNpZnkoZnMucmVhZEZpbGUpO1xuXG5jbGFzcyBFbWFpbCB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgZGVidWcoJ2NvbmZpZyBwYXNzZWQgJU8nLCBjb25maWcpO1xuXG4gICAgLy8gMi54IGJhY2t3YXJkcyBjb21wYXRpYmxlIHN1cHBvcnRcbiAgICBpZiAoY29uZmlnLmp1aWNlT3B0aW9ucykge1xuICAgICAgY29uZmlnLmp1aWNlUmVzb3VyY2VzID0gY29uZmlnLmp1aWNlT3B0aW9ucztcbiAgICAgIGRlbGV0ZSBjb25maWcuanVpY2VPcHRpb25zO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmRpc2FibGVKdWljZSkge1xuICAgICAgY29uZmlnLmp1aWNlID0gZmFsc2U7XG4gICAgICBkZWxldGUgY29uZmlnLmRpc2FibGVKdWljZTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5yZW5kZXIpIHtcbiAgICAgIGNvbmZpZy5jdXN0b21SZW5kZXIgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnID0gXy5tZXJnZShcbiAgICAgIHtcbiAgICAgICAgdmlld3M6IHtcbiAgICAgICAgICAvLyBkaXJlY3Rvcnkgd2hlcmUgZW1haWwgdGVtcGxhdGVzIHJlc2lkZVxuICAgICAgICAgIHJvb3Q6IHBhdGgucmVzb2x2ZSgnZW1haWxzJyksXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgLy8gZGVmYXVsdCBmaWxlIGV4dGVuc2lvbiBmb3IgdGVtcGxhdGVcbiAgICAgICAgICAgIGV4dGVuc2lvbjogJ3B1ZycsXG4gICAgICAgICAgICBtYXA6IHtcbiAgICAgICAgICAgICAgaGJzOiAnaGFuZGxlYmFycycsXG4gICAgICAgICAgICAgIG5qazogJ251bmp1Y2tzJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuZ2luZVNvdXJjZTogY29uc29saWRhdGVcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIGxvY2FscyB0byBwYXNzIHRvIHRlbXBsYXRlcyBmb3IgcmVuZGVyaW5nXG4gICAgICAgICAgbG9jYWxzOiB7XG4gICAgICAgICAgICAvLyBwcmV0dHkgaXMgYXV0b21hdGljYWxseSBzZXQgdG8gYGZhbHNlYCBmb3Igc3ViamVjdC90ZXh0XG4gICAgICAgICAgICBwcmV0dHk6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIDxodHRwczovL25vZGVtYWlsZXIuY29tL21lc3NhZ2UvPlxuICAgICAgICBtZXNzYWdlOiB7fSxcbiAgICAgICAgc2VuZDogIVsnZGV2ZWxvcG1lbnQnLCAndGVzdCddLmluY2x1ZGVzKGVudiksXG4gICAgICAgIHByZXZpZXc6IGVudiA9PT0gJ2RldmVsb3BtZW50JyxcbiAgICAgICAgLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9sYWRqcy9pMThuPlxuICAgICAgICAvLyBzZXQgdG8gYW4gb2JqZWN0IHRvIGNvbmZpZ3VyZSBhbmQgZW5hYmxlIGl0XG4gICAgICAgIGkxOG46IGZhbHNlLFxuICAgICAgICAvLyBwYXNzIGEgY3VzdG9tIHJlbmRlciBmdW5jdGlvbiBpZiBuZWNlc3NhcnlcbiAgICAgICAgcmVuZGVyOiB0aGlzLnJlbmRlci5iaW5kKHRoaXMpLFxuICAgICAgICBjdXN0b21SZW5kZXI6IGZhbHNlLFxuICAgICAgICAvLyBmb3JjZSB0ZXh0LW9ubHkgcmVuZGVyaW5nIG9mIHRlbXBsYXRlIChkaXNyZWdhcmRzIHRlbXBsYXRlIGZvbGRlcilcbiAgICAgICAgdGV4dE9ubHk6IGZhbHNlLFxuICAgICAgICAvLyA8aHR0cHM6Ly9naXRodWIuY29tL3dlcms4NS9ub2RlLWh0bWwtdG8tdGV4dD5cbiAgICAgICAgaHRtbFRvVGV4dDoge1xuICAgICAgICAgIGlnbm9yZUltYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHN1YmplY3RQcmVmaXg6IGZhbHNlLFxuICAgICAgICAvLyA8aHR0cHM6Ly9naXRodWIuY29tL0F1dG9tYXR0aWMvanVpY2U+XG4gICAgICAgIGp1aWNlOiB0cnVlLFxuICAgICAgICBqdWljZVJlc291cmNlczoge1xuICAgICAgICAgIHByZXNlcnZlSW1wb3J0YW50OiB0cnVlLFxuICAgICAgICAgIHdlYlJlc291cmNlczoge1xuICAgICAgICAgICAgcmVsYXRpdmVUbzogcGF0aC5yZXNvbHZlKCdidWlsZCcpLFxuICAgICAgICAgICAgaW1hZ2VzOiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gcGFzcyBhIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uIG9iamVjdCBvciBhIHRyYW5zcG9ydCBpbnN0YW5jZVxuICAgICAgICAvLyAoZS5nLiBhbiBpbnN0YW5jZSBpcyBjcmVhdGVkIHZpYSBgbm9kZW1haWxlci5jcmVhdGVUcmFuc3BvcnRgKVxuICAgICAgICAvLyA8aHR0cHM6Ly9ub2RlbWFpbGVyLmNvbS90cmFuc3BvcnRzLz5cbiAgICAgICAgdHJhbnNwb3J0OiB7fVxuICAgICAgfSxcbiAgICAgIGNvbmZpZ1xuICAgICk7XG5cbiAgICAvLyBvdmVycmlkZSBleGlzdGluZyBtZXRob2RcbiAgICB0aGlzLnJlbmRlciA9IHRoaXMuY29uZmlnLnJlbmRlcjtcblxuICAgIGlmICghXy5pc0Z1bmN0aW9uKHRoaXMuY29uZmlnLnRyYW5zcG9ydC5zZW5kTWFpbCkpXG4gICAgICB0aGlzLmNvbmZpZy50cmFuc3BvcnQgPSBub2RlbWFpbGVyLmNyZWF0ZVRyYW5zcG9ydCh0aGlzLmNvbmZpZy50cmFuc3BvcnQpO1xuXG4gICAgZGVidWcoJ3RyYW5zZm9ybWVkIGNvbmZpZyAlTycsIHRoaXMuY29uZmlnKTtcblxuICAgIGF1dG9CaW5kKHRoaXMpO1xuICB9XG5cbiAgLy8gc2hvcnRoYW5kIHVzZSBvZiBganVpY2VSZXNvdXJjZXNgIHdpdGggdGhlIGNvbmZpZ1xuICAvLyAobWFpbmx5IGZvciBjdXN0b20gcmVuZGVycyBsaWtlIGZyb20gYSBkYXRhYmFzZSlcbiAganVpY2VSZXNvdXJjZXMoaHRtbCkge1xuICAgIHJldHVybiBqdWljZVJlc291cmNlcyhodG1sLCB0aGlzLmNvbmZpZy5qdWljZVJlc291cmNlcyk7XG4gIH1cblxuICAvLyBhIHNpbXBsZSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBnZXRzIHRoZSBhY3R1YWwgZmlsZSBwYXRoIGZvciB0aGUgdGVtcGxhdGVcbiAgYXN5bmMgZ2V0VGVtcGxhdGVQYXRoKHZpZXcpIHtcbiAgICBjb25zdCBwYXRocyA9IGF3YWl0IGdldFBhdGhzKFxuICAgICAgdGhpcy5jb25maWcudmlld3Mucm9vdCxcbiAgICAgIHZpZXcsXG4gICAgICB0aGlzLmNvbmZpZy52aWV3cy5vcHRpb25zLmV4dGVuc2lvblxuICAgICk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5jb25maWcudmlld3Mucm9vdCwgcGF0aHMucmVsKTtcbiAgICByZXR1cm4geyBmaWxlUGF0aCwgcGF0aHMgfTtcbiAgfVxuXG4gIC8vIHJldHVybnMgdHJ1ZSBvciBmYWxzZSBpZiBhIHRlbXBsYXRlIGV4aXN0c1xuICAvLyAodXNlcyBzYW1lIGxvb2stdXAgYXBwcm9hY2ggYXMgYHJlbmRlcmAgZnVuY3Rpb24pXG4gIGFzeW5jIHRlbXBsYXRlRXhpc3RzKHZpZXcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBmaWxlUGF0aCB9ID0gYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZVBhdGgodmlldyk7XG4gICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IHN0YXQoZmlsZVBhdGgpO1xuICAgICAgaWYgKCFzdGF0cy5pc0ZpbGUoKSkgdGhyb3cgbmV3IEVycm9yKGAke2ZpbGVQYXRofSB3YXMgbm90IGEgZmlsZWApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBkZWJ1ZygndGVtcGxhdGVFeGlzdHMnLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIHByb21pc2UgdmVyc2lvbiBvZiBjb25zb2xpZGF0ZSdzIHJlbmRlclxuICAvLyBpbnNwaXJlZCBieSBrb2Etdmlld3MgYW5kIHJlLXVzZXMgdGhlIHNhbWUgY29uZmlnXG4gIC8vIDxodHRwczovL2dpdGh1Yi5jb20vcXVlY2tlenova29hLXZpZXdzPlxuICBhc3luYyByZW5kZXIodmlldywgbG9jYWxzID0ge30pIHtcbiAgICBjb25zdCB7IG1hcCwgZW5naW5lU291cmNlIH0gPSB0aGlzLmNvbmZpZy52aWV3cy5vcHRpb25zO1xuICAgIGNvbnN0IHsgZmlsZVBhdGgsIHBhdGhzIH0gPSBhd2FpdCB0aGlzLmdldFRlbXBsYXRlUGF0aCh2aWV3KTtcbiAgICBpZiAocGF0aHMuZXh0ID09PSAnaHRtbCcgJiYgIW1hcCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgcmVhZEZpbGUoZmlsZVBhdGgsICd1dGY4Jyk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBjb25zdCBlbmdpbmVOYW1lID0gbWFwICYmIG1hcFtwYXRocy5leHRdID8gbWFwW3BhdGhzLmV4dF0gOiBwYXRocy5leHQ7XG4gICAgY29uc3QgcmVuZGVyRm4gPSBlbmdpbmVTb3VyY2VbZW5naW5lTmFtZV07XG4gICAgaWYgKCFlbmdpbmVOYW1lIHx8ICFyZW5kZXJGbilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEVuZ2luZSBub3QgZm91bmQgZm9yIHRoZSBcIi4ke3BhdGhzLmV4dH1cIiBmaWxlIGV4dGVuc2lvbmBcbiAgICAgICk7XG5cbiAgICBpZiAoXy5pc09iamVjdCh0aGlzLmNvbmZpZy5pMThuKSkge1xuICAgICAgY29uc3QgaTE4biA9IG5ldyBJMThOKFxuICAgICAgICBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbmZpZy5pMThuLCB7XG4gICAgICAgICAgcmVnaXN0ZXI6IGxvY2Fsc1xuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgLy8gc3VwcG9ydCBgbG9jYWxzLnVzZXIubGFzdF9sb2NhbGVgXG4gICAgICAvLyAoZS5nLiBmb3IgPGh0dHBzOi8vbGFkLmpzLm9yZz4pXG4gICAgICBpZiAoXy5pc09iamVjdChsb2NhbHMudXNlcikgJiYgXy5pc1N0cmluZyhsb2NhbHMudXNlci5sYXN0X2xvY2FsZSkpXG4gICAgICAgIGxvY2Fscy5sb2NhbGUgPSBsb2NhbHMudXNlci5sYXN0X2xvY2FsZTtcblxuICAgICAgaWYgKF8uaXNTdHJpbmcobG9jYWxzLmxvY2FsZSkpIGkxOG4uc2V0TG9jYWxlKGxvY2Fscy5sb2NhbGUpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IFByb21pc2UucHJvbWlzaWZ5KHJlbmRlckZuKShmaWxlUGF0aCwgbG9jYWxzKTtcbiAgICAvLyB0cmFuc2Zvcm0gdGhlIGh0bWwgd2l0aCBqdWljZSB1c2luZyByZW1vdGUgcGF0aHNcbiAgICAvLyBnb29nbGUgbm93IHN1cHBvcnRzIG1lZGlhIHF1ZXJpZXNcbiAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9nbWFpbC9kZXNpZ24vcmVmZXJlbmNlL3N1cHBvcnRlZF9jc3NcbiAgICBpZiAoIXRoaXMuY29uZmlnLmp1aWNlKSByZXR1cm4gcmVzO1xuICAgIGNvbnN0IGh0bWwgPSBhd2FpdCB0aGlzLmp1aWNlUmVzb3VyY2VzKHJlcyk7XG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBhc3luYyByZW5kZXJBbGwodGVtcGxhdGUsIGxvY2FscyA9IHt9LCBtZXNzYWdlID0ge30pIHtcbiAgICBsZXQgc3ViamVjdFRlbXBsYXRlRXhpc3RzID0gdGhpcy5jb25maWcuY3VzdG9tUmVuZGVyO1xuICAgIGxldCBodG1sVGVtcGxhdGVFeGlzdHMgPSB0aGlzLmNvbmZpZy5jdXN0b21SZW5kZXI7XG4gICAgbGV0IHRleHRUZW1wbGF0ZUV4aXN0cyA9IHRoaXMuY29uZmlnLmN1c3RvbVJlbmRlcjtcblxuICAgIGNvbnN0IHByb21pc2VzID0gW1xuICAgICAgdGhpcy50ZW1wbGF0ZUV4aXN0cyhgJHt0ZW1wbGF0ZX0vc3ViamVjdGApLFxuICAgICAgdGhpcy50ZW1wbGF0ZUV4aXN0cyhgJHt0ZW1wbGF0ZX0vaHRtbGApLFxuICAgICAgdGhpcy50ZW1wbGF0ZUV4aXN0cyhgJHt0ZW1wbGF0ZX0vdGV4dGApXG4gICAgXTtcblxuICAgIGlmICh0ZW1wbGF0ZSAmJiAhdGhpcy5jb25maWcuY3VzdG9tUmVuZGVyKVxuICAgICAgW1xuICAgICAgICBzdWJqZWN0VGVtcGxhdGVFeGlzdHMsXG4gICAgICAgIGh0bWxUZW1wbGF0ZUV4aXN0cyxcbiAgICAgICAgdGV4dFRlbXBsYXRlRXhpc3RzXG4gICAgICBdID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXG4gICAgaWYgKCFtZXNzYWdlLnN1YmplY3QgJiYgc3ViamVjdFRlbXBsYXRlRXhpc3RzKSB7XG4gICAgICBtZXNzYWdlLnN1YmplY3QgPSBhd2FpdCB0aGlzLnJlbmRlcihcbiAgICAgICAgYCR7dGVtcGxhdGV9L3N1YmplY3RgLFxuICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBsb2NhbHMsIHsgcHJldHR5OiBmYWxzZSB9KVxuICAgICAgKTtcbiAgICAgIG1lc3NhZ2Uuc3ViamVjdCA9IG1lc3NhZ2Uuc3ViamVjdC50cmltKCk7XG4gICAgfVxuXG4gICAgaWYgKG1lc3NhZ2Uuc3ViamVjdCAmJiB0aGlzLmNvbmZpZy5zdWJqZWN0UHJlZml4KVxuICAgICAgbWVzc2FnZS5zdWJqZWN0ID0gdGhpcy5jb25maWcuc3ViamVjdFByZWZpeCArIG1lc3NhZ2Uuc3ViamVjdDtcblxuICAgIGlmICghbWVzc2FnZS5odG1sICYmIGh0bWxUZW1wbGF0ZUV4aXN0cylcbiAgICAgIG1lc3NhZ2UuaHRtbCA9IGF3YWl0IHRoaXMucmVuZGVyKGAke3RlbXBsYXRlfS9odG1sYCwgbG9jYWxzKTtcblxuICAgIGlmICghbWVzc2FnZS50ZXh0ICYmIHRleHRUZW1wbGF0ZUV4aXN0cylcbiAgICAgIG1lc3NhZ2UudGV4dCA9IGF3YWl0IHRoaXMucmVuZGVyKFxuICAgICAgICBgJHt0ZW1wbGF0ZX0vdGV4dGAsXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIGxvY2FscywgeyBwcmV0dHk6IGZhbHNlIH0pXG4gICAgICApO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmh0bWxUb1RleHQgJiYgbWVzc2FnZS5odG1sICYmICFtZXNzYWdlLnRleHQpXG4gICAgICAvLyB3ZSdkIHVzZSBub2RlbWFpbGVyLWh0bWwtdG8tdGV4dCBwbHVnaW5cbiAgICAgIC8vIGJ1dCB3ZSByZWFsbHkgZG9uJ3QgbmVlZCB0byBzdXBwb3J0IGNpZFxuICAgICAgLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9hbmRyaXM5L25vZGVtYWlsZXItaHRtbC10by10ZXh0PlxuICAgICAgbWVzc2FnZS50ZXh0ID0gaHRtbFRvVGV4dC5mcm9tU3RyaW5nKFxuICAgICAgICBtZXNzYWdlLmh0bWwsXG4gICAgICAgIHRoaXMuY29uZmlnLmh0bWxUb1RleHRcbiAgICAgICk7XG5cbiAgICAvLyBpZiB3ZSBvbmx5IHdhbnQgYSB0ZXh0LWJhc2VkIHZlcnNpb24gb2YgdGhlIGVtYWlsXG4gICAgaWYgKHRoaXMuY29uZmlnLnRleHRPbmx5KSBkZWxldGUgbWVzc2FnZS5odG1sO1xuXG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH1cblxuICBhc3luYyBzZW5kKG9wdGlvbnMgPSB7fSkge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICB0ZW1wbGF0ZTogJycsXG4gICAgICAgIG1lc3NhZ2U6IHt9LFxuICAgICAgICBsb2NhbHM6IHt9XG4gICAgICB9LFxuICAgICAgb3B0aW9uc1xuICAgICk7XG5cbiAgICBsZXQgeyB0ZW1wbGF0ZSwgbWVzc2FnZSwgbG9jYWxzIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3QgYXR0YWNobWVudHMgPVxuICAgICAgbWVzc2FnZS5hdHRhY2htZW50cyB8fCB0aGlzLmNvbmZpZy5tZXNzYWdlLmF0dGFjaG1lbnRzIHx8IFtdO1xuXG4gICAgbWVzc2FnZSA9IF8uZGVmYXVsdHNEZWVwKFxuICAgICAge30sXG4gICAgICBfLm9taXQodGhpcy5jb25maWcubWVzc2FnZSwgJ2F0dGFjaG1lbnRzJyksXG4gICAgICBfLm9taXQobWVzc2FnZSwgJ2F0dGFjaG1lbnRzJylcbiAgICApO1xuICAgIGxvY2FscyA9IF8uZGVmYXVsdHNEZWVwKHt9LCB0aGlzLmNvbmZpZy52aWV3cy5sb2NhbHMsIGxvY2Fscyk7XG5cbiAgICBpZiAoYXR0YWNobWVudHMpIG1lc3NhZ2UuYXR0YWNobWVudHMgPSBhdHRhY2htZW50cztcblxuICAgIGRlYnVnKCd0ZW1wbGF0ZSAlcycsIHRlbXBsYXRlKTtcbiAgICBkZWJ1ZygnbWVzc2FnZSAlTycsIG1lc3NhZ2UpO1xuICAgIGRlYnVnKCdsb2NhbHMgKGtleXMgb25seSk6ICVPJywgT2JqZWN0LmtleXMobG9jYWxzKSk7XG5cbiAgICAvLyBnZXQgYWxsIGF2YWlsYWJsZSB0ZW1wbGF0ZXNcbiAgICBjb25zdCBvYmogPSBhd2FpdCB0aGlzLnJlbmRlckFsbCh0ZW1wbGF0ZSwgbG9jYWxzLCBtZXNzYWdlKTtcblxuICAgIC8vIGFzc2lnbiB0aGUgb2JqZWN0IHZhcmlhYmxlcyBvdmVyIHRvIHRoZSBtZXNzYWdlXG4gICAgT2JqZWN0LmFzc2lnbihtZXNzYWdlLCBvYmopO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLnByZXZpZXcpIHtcbiAgICAgIGRlYnVnKCd1c2luZyBgcHJldmlldy1lbWFpbGAgdG8gcHJldmlldyBlbWFpbCcpO1xuICAgICAgYXdhaXQgcHJldmlld0VtYWlsKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb25maWcuc2VuZCkge1xuICAgICAgZGVidWcoJ3NlbmQgZGlzYWJsZWQgc28gd2UgYXJlIGVuc3VyaW5nIEpTT05UcmFuc3BvcnQnKTtcbiAgICAgIC8vIDxodHRwczovL2dpdGh1Yi5jb20vbm9kZW1haWxlci9ub2RlbWFpbGVyL2lzc3Vlcy83OTg+XG4gICAgICAvLyBpZiAodGhpcy5jb25maWcudHJhbnNwb3J0Lm5hbWUgIT09ICdKU09OVHJhbnNwb3J0JylcbiAgICAgIHRoaXMuY29uZmlnLnRyYW5zcG9ydCA9IG5vZGVtYWlsZXIuY3JlYXRlVHJhbnNwb3J0KHtcbiAgICAgICAganNvblRyYW5zcG9ydDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jb25maWcudHJhbnNwb3J0LnNlbmRNYWlsKG1lc3NhZ2UpO1xuICAgIGRlYnVnKCdtZXNzYWdlIHNlbnQnKTtcbiAgICByZXMub3JpZ2luYWxNZXNzYWdlID0gbWVzc2FnZTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRW1haWw7XG4iXX0=
{
"name": "email-templates",
"description": "Create, preview, and send custom email templates for Node.js. Highly configurable and supports automatic inline CSS, stylesheets, embedded images and fonts, and much more! Made for sending beautiful emails with Lad.",
"version": "4.0.3",
"version": "4.0.4",
"author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com)",

@@ -19,3 +19,3 @@ "bugs": {

"debug": "^3.1.0",
"get-paths": "^0.0.2",
"get-paths": "^0.0.4",
"html-to-text": "^4.0.0",

@@ -25,4 +25,4 @@ "juice": "^4.3.2",

"lodash": "^4.17.10",
"nodemailer": "^4.6.7",
"preview-email": "^0.0.7"
"nodemailer": "^4.6.8",
"preview-email": "^0.0.8"
},

@@ -36,13 +36,13 @@ "devDependencies": {

"cross-env": "^5.2.0",
"eslint": "^5.2.0",
"eslint-config-prettier": "^2.9.0",
"eslint": "^5.4.0",
"eslint-config-prettier": "^3.0.1",
"eslint-plugin-prettier": "^2.6.2",
"husky": "^0.14.3",
"lint-staged": "^7.2.0",
"lint-staged": "^7.2.2",
"nyc": "^12.0.2",
"prettier": "^1.14.0",
"prettier": "^1.14.2",
"pug": "^2.0.3",
"remark-cli": "^5.0.0",
"remark-preset-github": "^0.0.8",
"xo": "^0.21.1"
"xo": "^0.22.0"
},

@@ -49,0 +49,0 @@ "engines": {

@@ -10,4 +10,6 @@ # [**Email Templates**](https://github.com/niftylettuce/email-templates)

> Create, [preview][preview-email], and send custom email templates for [Node.js][node]. Highly configurable and supports automatic inline CSS, stylesheets, embedded images and fonts, and much more! Made for sending beautiful emails with [Lad][].
>
> :heart: Love this project? Support <a href="https://github.com/niftylettuce" target="_blank">@niftylettuce's</a> [FOSS](https://en.wikipedia.org/wiki/Free_and_open-source_software) on <a href="https://patreon.com/niftylettuce" target="_blank">Patreon</a> or <a href="https://paypal.me/niftylettuce">PayPal</a> :unicorn:
Create, [preview][preview-email], and send custom email templates for [Node.js][node]. Highly configurable and supports automatic inline CSS, stylesheets, embedded images and fonts, and much more! Made for sending beautiful emails with [Lad][].
> **Still on v2.x?**: v3.x is released (you'll need Node v6.4.0+); see [breaking changes below](#v3-breaking-changes). [2.x branch][2-x-branch] docs available if necessary.

@@ -14,0 +16,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc