@merchi/product-form 1.19.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +272 -0
- package/lib/actions/jobs.d.ts +3 -0
- package/lib/actions/jobs.js +80 -0
- package/lib/actions/leads.d.ts +7 -0
- package/lib/actions/leads.js +67 -0
- package/lib/components/AlertVariationSellerEditable.d.ts +6 -0
- package/lib/components/AlertVariationSellerEditable.js +46 -0
- package/lib/components/Collapse.d.ts +3 -0
- package/lib/components/Collapse.js +34 -0
- package/lib/components/DateCountdown.d.ts +44 -0
- package/lib/components/DateCountdown.js +188 -0
- package/lib/components/DropzoneInput.d.ts +10 -0
- package/lib/components/DropzoneInput.js +169 -0
- package/lib/components/DynamicVariationInput.d.ts +9 -0
- package/lib/components/DynamicVariationInput.js +71 -0
- package/lib/components/FormLead.d.ts +10 -0
- package/lib/components/FormLead.js +215 -0
- package/lib/components/GroupInventory.d.ts +6 -0
- package/lib/components/GroupInventory.js +16 -0
- package/lib/components/InputGroupQuantity.d.ts +8 -0
- package/lib/components/InputGroupQuantity.js +117 -0
- package/lib/components/InputHiddenStatic.d.ts +8 -0
- package/lib/components/InputHiddenStatic.js +24 -0
- package/lib/components/InputProductQuantity.d.ts +7 -0
- package/lib/components/InputProductQuantity.js +102 -0
- package/lib/components/InventoryStatus.d.ts +7 -0
- package/lib/components/InventoryStatus.js +67 -0
- package/lib/components/MerchiProductForm.d.ts +62 -0
- package/lib/components/MerchiProductForm.js +51 -0
- package/lib/components/PriceMatrix.d.ts +27 -0
- package/lib/components/PriceMatrix.js +106 -0
- package/lib/components/ProductButtonsSubmit.d.ts +3 -0
- package/lib/components/ProductButtonsSubmit.js +52 -0
- package/lib/components/ProductFeatureDeadline.d.ts +3 -0
- package/lib/components/ProductFeatureDeadline.js +25 -0
- package/lib/components/ProductGroupBuyStatus.d.ts +3 -0
- package/lib/components/ProductGroupBuyStatus.js +47 -0
- package/lib/components/ProductPriceMatrix.d.ts +3 -0
- package/lib/components/ProductPriceMatrix.js +51 -0
- package/lib/components/ProductTitle.d.ts +3 -0
- package/lib/components/ProductTitle.js +36 -0
- package/lib/components/ProductTotalCost.d.ts +3 -0
- package/lib/components/ProductTotalCost.js +74 -0
- package/lib/components/ProductUnitPrice.d.ts +7 -0
- package/lib/components/ProductUnitPrice.js +51 -0
- package/lib/components/TooltipElement.d.ts +9 -0
- package/lib/components/TooltipElement.js +35 -0
- package/lib/components/VariationAreaInput.d.ts +8 -0
- package/lib/components/VariationAreaInput.js +219 -0
- package/lib/components/VariationCheckBoxOrRadioOption.d.ts +10 -0
- package/lib/components/VariationCheckBoxOrRadioOption.js +82 -0
- package/lib/components/VariationCheckboxRadio.d.ts +17 -0
- package/lib/components/VariationCheckboxRadio.js +57 -0
- package/lib/components/VariationColourExtractInput.d.ts +8 -0
- package/lib/components/VariationColourExtractInput.js +395 -0
- package/lib/components/VariationError.d.ts +7 -0
- package/lib/components/VariationError.js +52 -0
- package/lib/components/VariationFieldInputInstructions.d.ts +10 -0
- package/lib/components/VariationFieldInputInstructions.js +50 -0
- package/lib/components/VariationFieldInstructions.d.ts +3 -0
- package/lib/components/VariationFieldInstructions.js +22 -0
- package/lib/components/VariationFieldNameAndCostInputs.d.ts +7 -0
- package/lib/components/VariationFieldNameAndCostInputs.js +34 -0
- package/lib/components/VariationFieldOptionDefaultInputs.d.ts +7 -0
- package/lib/components/VariationFieldOptionDefaultInputs.js +48 -0
- package/lib/components/VariationFieldStaticValues.d.ts +8 -0
- package/lib/components/VariationFieldStaticValues.js +57 -0
- package/lib/components/VariationFileInput.d.ts +8 -0
- package/lib/components/VariationFileInput.js +229 -0
- package/lib/components/VariationInput.d.ts +11 -0
- package/lib/components/VariationInput.js +97 -0
- package/lib/components/VariationLabel.d.ts +11 -0
- package/lib/components/VariationLabel.js +85 -0
- package/lib/components/VariationOptionColour.d.ts +8 -0
- package/lib/components/VariationOptionColour.js +50 -0
- package/lib/components/VariationOptionImage.d.ts +8 -0
- package/lib/components/VariationOptionImage.js +52 -0
- package/lib/components/VariationSelect.d.ts +8 -0
- package/lib/components/VariationSelect.js +66 -0
- package/lib/components/VariationSelectElements.d.ts +16 -0
- package/lib/components/VariationSelectElements.js +141 -0
- package/lib/components/VariationTurnaroundTime.d.ts +9 -0
- package/lib/components/VariationTurnaroundTime.js +156 -0
- package/lib/components/Variations.d.ts +9 -0
- package/lib/components/Variations.js +109 -0
- package/lib/components/VariationsGroups.d.ts +8 -0
- package/lib/components/VariationsGroups.js +79 -0
- package/lib/components/buttons/ButtonAddGroup.d.ts +7 -0
- package/lib/components/buttons/ButtonAddGroup.js +38 -0
- package/lib/components/buttons/ButtonProductSubmit.d.ts +7 -0
- package/lib/components/buttons/ButtonProductSubmit.js +33 -0
- package/lib/components/buttons/ButtonRemoveGroup.d.ts +8 -0
- package/lib/components/buttons/ButtonRemoveGroup.js +25 -0
- package/lib/components/buttons/index.d.ts +4 -0
- package/lib/components/buttons/index.js +5 -0
- package/lib/components/cost.d.ts +11 -0
- package/lib/components/cost.js +44 -0
- package/lib/components/currency.d.ts +16 -0
- package/lib/components/currency.js +184 -0
- package/lib/components/drafts/DraftApprovePanel.d.ts +6 -0
- package/lib/components/drafts/DraftApprovePanel.js +315 -0
- package/lib/components/drafts/DraftCanvas.d.ts +13 -0
- package/lib/components/drafts/DraftCanvas.js +496 -0
- package/lib/components/drafts/DraftDesignerSheet.d.ts +9 -0
- package/lib/components/drafts/DraftDesignerSheet.js +685 -0
- package/lib/components/drafts/ProductDraftsHost.d.ts +3 -0
- package/lib/components/drafts/ProductDraftsHost.js +207 -0
- package/lib/components/drafts/useHtmlImage.d.ts +1 -0
- package/lib/components/drafts/useHtmlImage.js +45 -0
- package/lib/components/icons/IconChecked.d.ts +3 -0
- package/lib/components/icons/IconChecked.js +10 -0
- package/lib/components/icons/IconCheckedOrNoStock.d.ts +7 -0
- package/lib/components/icons/IconCheckedOrNoStock.js +13 -0
- package/lib/components/icons/IconCountryFlag.d.ts +8 -0
- package/lib/components/icons/IconCountryFlag.js +27 -0
- package/lib/components/icons/IconFile.d.ts +7 -0
- package/lib/components/icons/IconFile.js +41 -0
- package/lib/components/icons/IconNoStock.d.ts +3 -0
- package/lib/components/icons/IconNoStock.js +12 -0
- package/lib/components/icons/index.d.ts +5 -0
- package/lib/components/icons/index.js +6 -0
- package/lib/components/quoteAfterFieldChange.d.ts +7 -0
- package/lib/components/quoteAfterFieldChange.js +11 -0
- package/lib/components/quoteAfterFieldChange.test.js +58 -0
- package/lib/components/utils.d.ts +26 -0
- package/lib/components/utils.js +500 -0
- package/lib/context/MerchiProductFormProvider.d.ts +177 -0
- package/lib/context/MerchiProductFormProvider.js +1020 -0
- package/lib/images/product-not-found.png +0 -0
- package/lib/index.d.ts +42 -0
- package/lib/index.js +41 -0
- package/lib/styles/globals.css +1590 -0
- package/lib/styles/globals.css.map +1 -0
- package/lib/styles/globals.scss +1698 -0
- package/lib/utils/area.d.ts +77 -0
- package/lib/utils/area.js +298 -0
- package/lib/utils/cleanFormVariationJson.d.ts +5 -0
- package/lib/utils/cleanFormVariationJson.js +39 -0
- package/lib/utils/cleanFormVariationJson.test.js +54 -0
- package/lib/utils/countries.d.ts +7 -0
- package/lib/utils/countries.js +290 -0
- package/lib/utils/currency.d.ts +2 -0
- package/lib/utils/currency.js +188 -0
- package/lib/utils/draftExport.d.ts +21 -0
- package/lib/utils/draftExport.js +481 -0
- package/lib/utils/draftExport.test.js +78 -0
- package/lib/utils/draftFonts.d.ts +55 -0
- package/lib/utils/draftFonts.js +68 -0
- package/lib/utils/draftStorage.d.ts +25 -0
- package/lib/utils/draftStorage.js +148 -0
- package/lib/utils/draftStorage.test.js +125 -0
- package/lib/utils/draftTemplates.d.ts +87 -0
- package/lib/utils/draftTemplates.js +579 -0
- package/lib/utils/draftTemplates.test.js +476 -0
- package/lib/utils/formErrors.d.ts +2 -0
- package/lib/utils/formErrors.js +29 -0
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.js +4 -0
- package/lib/utils/priceMatrix.d.ts +57 -0
- package/lib/utils/priceMatrix.js +82 -0
- package/lib/utils/priceMatrix.test.js +200 -0
- package/lib/utils/products.d.ts +40 -0
- package/lib/utils/products.js +68 -0
- package/lib/utils/quantity.d.ts +7 -0
- package/lib/utils/quantity.js +19 -0
- package/lib/utils/quantity.test.js +42 -0
- package/lib/utils/reconcileVariations.d.ts +25 -0
- package/lib/utils/reconcileVariations.js +246 -0
- package/lib/utils/reconcileVariations.test.js +239 -0
- package/lib/utils/selectedVariationCosts.d.ts +6 -0
- package/lib/utils/selectedVariationCosts.js +59 -0
- package/lib/utils/selectedVariationCosts.test.js +66 -0
- package/lib/utils/selections.d.ts +23 -0
- package/lib/utils/selections.js +76 -0
- package/lib/utils/selections.test.js +159 -0
- package/lib/utils/singleOptionVariation.d.ts +2 -0
- package/lib/utils/singleOptionVariation.js +22 -0
- package/lib/utils/singleOptionVariation.test.js +59 -0
- package/lib/utils/supportedNumbers.d.ts +1 -0
- package/lib/utils/supportedNumbers.js +27 -0
- package/lib/utils/types.d.ts +114 -0
- package/lib/utils/types.js +50 -0
- package/lib/utils/url.d.ts +3 -0
- package/lib/utils/url.js +65 -0
- package/lib/utils/variationFields.d.ts +5 -0
- package/lib/utils/variationFields.js +116 -0
- package/lib/utils/variationFields.test.js +108 -0
- package/package.json +93 -0
|
@@ -0,0 +1,481 @@
|
|
|
1
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
4
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
5
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
6
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
7
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
8
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
9
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
10
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
11
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
12
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
13
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
14
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
15
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
16
|
+
import { cssFontFamily, ensureDraftFonts } from './draftFonts';
|
|
17
|
+
import { isBackgroundFill, isFullArtboardFill } from './draftTemplates';
|
|
18
|
+
function resolveFileUrl(url, apiUrl) {
|
|
19
|
+
if (!url) return '';
|
|
20
|
+
if (/^(data:|blob:|https?:)/i.test(url)) return url;
|
|
21
|
+
if (!apiUrl) return url;
|
|
22
|
+
try {
|
|
23
|
+
var api = new URL(apiUrl);
|
|
24
|
+
if (url.startsWith('/')) return "".concat(api.origin).concat(url);
|
|
25
|
+
return new URL(url, apiUrl).href;
|
|
26
|
+
} catch (_unused) {
|
|
27
|
+
return url;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function templateImageSources(template, apiUrl) {
|
|
31
|
+
var file = (template === null || template === void 0 ? void 0 : template.file) || {};
|
|
32
|
+
var raw = [];
|
|
33
|
+
if (apiUrl && file.id) {
|
|
34
|
+
var base = String(apiUrl).replace(/\/?$/, '/');
|
|
35
|
+
raw.push("".concat(base, "public-files/").concat(file.id, "/view/"));
|
|
36
|
+
}
|
|
37
|
+
raw.push(file.viewUrl, file.cachedViewUrl, file.downloadUrl, file.cachedDownloadUrl);
|
|
38
|
+
return _toConsumableArray(new Set(raw.filter(Boolean).map(function (url) {
|
|
39
|
+
return resolveFileUrl(String(url), apiUrl);
|
|
40
|
+
})));
|
|
41
|
+
}
|
|
42
|
+
function loadImageElement(src, cors) {
|
|
43
|
+
return new Promise(function (resolve, reject) {
|
|
44
|
+
var img = new Image();
|
|
45
|
+
if (cors) img.crossOrigin = 'anonymous';
|
|
46
|
+
img.onload = function () {
|
|
47
|
+
return resolve(img);
|
|
48
|
+
};
|
|
49
|
+
img.onerror = function () {
|
|
50
|
+
return reject(new Error("Failed to load ".concat(src)));
|
|
51
|
+
};
|
|
52
|
+
img.src = src;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
export function loadHtmlImage(_x) {
|
|
56
|
+
return _loadHtmlImage.apply(this, arguments);
|
|
57
|
+
}
|
|
58
|
+
function _loadHtmlImage() {
|
|
59
|
+
_loadHtmlImage = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(src) {
|
|
60
|
+
var persistObjectUrl,
|
|
61
|
+
response,
|
|
62
|
+
blob,
|
|
63
|
+
objectUrl,
|
|
64
|
+
image,
|
|
65
|
+
_args = arguments,
|
|
66
|
+
_t;
|
|
67
|
+
return _regenerator().w(function (_context) {
|
|
68
|
+
while (1) switch (_context.p = _context.n) {
|
|
69
|
+
case 0:
|
|
70
|
+
persistObjectUrl = _args.length > 1 && _args[1] !== undefined ? _args[1] : false;
|
|
71
|
+
if (src) {
|
|
72
|
+
_context.n = 1;
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
throw new Error('Missing image source');
|
|
76
|
+
case 1:
|
|
77
|
+
if (!/^(data:|blob:)/i.test(src)) {
|
|
78
|
+
_context.n = 2;
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
return _context.a(2, loadImageElement(src, false));
|
|
82
|
+
case 2:
|
|
83
|
+
_context.p = 2;
|
|
84
|
+
_context.n = 3;
|
|
85
|
+
return fetch(src, {
|
|
86
|
+
mode: 'cors',
|
|
87
|
+
credentials: 'omit'
|
|
88
|
+
});
|
|
89
|
+
case 3:
|
|
90
|
+
response = _context.v;
|
|
91
|
+
if (response.ok) {
|
|
92
|
+
_context.n = 4;
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
throw new Error("HTTP ".concat(response.status));
|
|
96
|
+
case 4:
|
|
97
|
+
_context.n = 5;
|
|
98
|
+
return response.blob();
|
|
99
|
+
case 5:
|
|
100
|
+
blob = _context.v;
|
|
101
|
+
objectUrl = URL.createObjectURL(blob);
|
|
102
|
+
_context.n = 6;
|
|
103
|
+
return loadImageElement(objectUrl, false);
|
|
104
|
+
case 6:
|
|
105
|
+
image = _context.v;
|
|
106
|
+
if (persistObjectUrl) {
|
|
107
|
+
image._merchiObjectUrl = objectUrl;
|
|
108
|
+
} else {
|
|
109
|
+
URL.revokeObjectURL(objectUrl);
|
|
110
|
+
}
|
|
111
|
+
return _context.a(2, image);
|
|
112
|
+
case 7:
|
|
113
|
+
_context.p = 7;
|
|
114
|
+
_t = _context.v;
|
|
115
|
+
return _context.a(2, loadImageElement(src, true));
|
|
116
|
+
}
|
|
117
|
+
}, _callee, null, [[2, 7]]);
|
|
118
|
+
}));
|
|
119
|
+
return _loadHtmlImage.apply(this, arguments);
|
|
120
|
+
}
|
|
121
|
+
export function loadHtmlImageFromSources(_x2) {
|
|
122
|
+
return _loadHtmlImageFromSources.apply(this, arguments);
|
|
123
|
+
}
|
|
124
|
+
function _loadHtmlImageFromSources() {
|
|
125
|
+
_loadHtmlImageFromSources = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(sources) {
|
|
126
|
+
var persistObjectUrl,
|
|
127
|
+
lastError,
|
|
128
|
+
_iterator3,
|
|
129
|
+
_step3,
|
|
130
|
+
src,
|
|
131
|
+
_args2 = arguments,
|
|
132
|
+
_t2,
|
|
133
|
+
_t3;
|
|
134
|
+
return _regenerator().w(function (_context2) {
|
|
135
|
+
while (1) switch (_context2.p = _context2.n) {
|
|
136
|
+
case 0:
|
|
137
|
+
persistObjectUrl = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : false;
|
|
138
|
+
_iterator3 = _createForOfIteratorHelper(sources);
|
|
139
|
+
_context2.p = 1;
|
|
140
|
+
_iterator3.s();
|
|
141
|
+
case 2:
|
|
142
|
+
if ((_step3 = _iterator3.n()).done) {
|
|
143
|
+
_context2.n = 7;
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
src = _step3.value;
|
|
147
|
+
_context2.p = 3;
|
|
148
|
+
_context2.n = 4;
|
|
149
|
+
return loadHtmlImage(src, persistObjectUrl);
|
|
150
|
+
case 4:
|
|
151
|
+
return _context2.a(2, _context2.v);
|
|
152
|
+
case 5:
|
|
153
|
+
_context2.p = 5;
|
|
154
|
+
_t2 = _context2.v;
|
|
155
|
+
lastError = _t2;
|
|
156
|
+
case 6:
|
|
157
|
+
_context2.n = 2;
|
|
158
|
+
break;
|
|
159
|
+
case 7:
|
|
160
|
+
_context2.n = 9;
|
|
161
|
+
break;
|
|
162
|
+
case 8:
|
|
163
|
+
_context2.p = 8;
|
|
164
|
+
_t3 = _context2.v;
|
|
165
|
+
_iterator3.e(_t3);
|
|
166
|
+
case 9:
|
|
167
|
+
_context2.p = 9;
|
|
168
|
+
_iterator3.f();
|
|
169
|
+
return _context2.f(9);
|
|
170
|
+
case 10:
|
|
171
|
+
throw lastError instanceof Error ? lastError : new Error('Failed to load image');
|
|
172
|
+
case 11:
|
|
173
|
+
return _context2.a(2);
|
|
174
|
+
}
|
|
175
|
+
}, _callee2, null, [[3, 5], [1, 8, 9, 10]]);
|
|
176
|
+
}));
|
|
177
|
+
return _loadHtmlImageFromSources.apply(this, arguments);
|
|
178
|
+
}
|
|
179
|
+
export function waitForDraftFonts() {
|
|
180
|
+
return _waitForDraftFonts.apply(this, arguments);
|
|
181
|
+
}
|
|
182
|
+
function _waitForDraftFonts() {
|
|
183
|
+
_waitForDraftFonts = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
|
|
184
|
+
var families,
|
|
185
|
+
unique,
|
|
186
|
+
_args3 = arguments;
|
|
187
|
+
return _regenerator().w(function (_context3) {
|
|
188
|
+
while (1) switch (_context3.n) {
|
|
189
|
+
case 0:
|
|
190
|
+
families = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : [];
|
|
191
|
+
ensureDraftFonts();
|
|
192
|
+
if (!(typeof document === 'undefined' || !document.fonts)) {
|
|
193
|
+
_context3.n = 1;
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
return _context3.a(2);
|
|
197
|
+
case 1:
|
|
198
|
+
unique = _toConsumableArray(new Set(families.filter(Boolean)));
|
|
199
|
+
_context3.n = 2;
|
|
200
|
+
return Promise.all([document.fonts.ready["catch"](function () {
|
|
201
|
+
return undefined;
|
|
202
|
+
})].concat(_toConsumableArray(unique.flatMap(function (family) {
|
|
203
|
+
return [document.fonts.load("400 48px ".concat(cssFontFamily(family)))["catch"](function () {
|
|
204
|
+
return undefined;
|
|
205
|
+
}), document.fonts.load("700 48px ".concat(cssFontFamily(family)))["catch"](function () {
|
|
206
|
+
return undefined;
|
|
207
|
+
})];
|
|
208
|
+
}))));
|
|
209
|
+
case 2:
|
|
210
|
+
return _context3.a(2);
|
|
211
|
+
}
|
|
212
|
+
}, _callee3);
|
|
213
|
+
}));
|
|
214
|
+
return _waitForDraftFonts.apply(this, arguments);
|
|
215
|
+
}
|
|
216
|
+
export function wrapLines(text, maxWidth, measure) {
|
|
217
|
+
var words = String(text).split(/\s+/).filter(Boolean);
|
|
218
|
+
if (!words.length) return [];
|
|
219
|
+
var lines = [];
|
|
220
|
+
var line = '';
|
|
221
|
+
var _iterator = _createForOfIteratorHelper(words),
|
|
222
|
+
_step;
|
|
223
|
+
try {
|
|
224
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
225
|
+
var word = _step.value;
|
|
226
|
+
var test = line ? "".concat(line, " ").concat(word) : word;
|
|
227
|
+
if (line && measure(test) > maxWidth) {
|
|
228
|
+
lines.push(line);
|
|
229
|
+
line = word;
|
|
230
|
+
} else {
|
|
231
|
+
line = test;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
} catch (err) {
|
|
235
|
+
_iterator.e(err);
|
|
236
|
+
} finally {
|
|
237
|
+
_iterator.f();
|
|
238
|
+
}
|
|
239
|
+
if (line) lines.push(line);
|
|
240
|
+
return lines;
|
|
241
|
+
}
|
|
242
|
+
function drawText(ctx, obj) {
|
|
243
|
+
var fontSize = obj.fontSize || 48;
|
|
244
|
+
var align = obj.align || 'center';
|
|
245
|
+
ctx.fillStyle = obj.fill || '#111111';
|
|
246
|
+
ctx.font = "".concat(fontSize, "px ").concat(cssFontFamily(obj.fontFamily));
|
|
247
|
+
ctx.textBaseline = 'top';
|
|
248
|
+
ctx.textAlign = align;
|
|
249
|
+
var lineHeight = fontSize;
|
|
250
|
+
var lines = wrapLines(obj.text || '', obj.width, function (value) {
|
|
251
|
+
return ctx.measureText(value).width;
|
|
252
|
+
});
|
|
253
|
+
var blockHeight = lines.length * lineHeight;
|
|
254
|
+
var cursorY = Math.max(0, (obj.height - blockHeight) / 2);
|
|
255
|
+
var x = align === 'center' ? obj.width / 2 : align === 'right' ? obj.width : 0;
|
|
256
|
+
var _iterator2 = _createForOfIteratorHelper(lines),
|
|
257
|
+
_step2;
|
|
258
|
+
try {
|
|
259
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
260
|
+
var line = _step2.value;
|
|
261
|
+
ctx.fillText(line, x, cursorY, obj.width);
|
|
262
|
+
cursorY += lineHeight;
|
|
263
|
+
}
|
|
264
|
+
} catch (err) {
|
|
265
|
+
_iterator2.e(err);
|
|
266
|
+
} finally {
|
|
267
|
+
_iterator2.f();
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
export function applyKonvaObjectTransform(ctx, obj) {
|
|
271
|
+
// Konva rotates/scales around the node origin (top-left), not the centre.
|
|
272
|
+
ctx.translate(obj.x, obj.y);
|
|
273
|
+
ctx.rotate((obj.rotation || 0) * Math.PI / 180);
|
|
274
|
+
ctx.scale(obj.scaleX || 1, obj.scaleY || 1);
|
|
275
|
+
}
|
|
276
|
+
function drawObject(ctx, obj, image) {
|
|
277
|
+
ctx.save();
|
|
278
|
+
applyKonvaObjectTransform(ctx, obj);
|
|
279
|
+
if (obj.type === 'rect') {
|
|
280
|
+
ctx.fillStyle = obj.fill || '#cccccc';
|
|
281
|
+
ctx.fillRect(0, 0, obj.width, obj.height);
|
|
282
|
+
} else if (obj.type === 'text') {
|
|
283
|
+
drawText(ctx, obj);
|
|
284
|
+
} else if (obj.type === 'image' && image) {
|
|
285
|
+
ctx.drawImage(image, 0, 0, obj.width, obj.height);
|
|
286
|
+
}
|
|
287
|
+
ctx.restore();
|
|
288
|
+
}
|
|
289
|
+
export function captureStageArtboard(stage, view, art) {
|
|
290
|
+
var scale = Math.max(view.scale || 0, 0.01);
|
|
291
|
+
return stage.toDataURL({
|
|
292
|
+
mimeType: 'image/png',
|
|
293
|
+
pixelRatio: 1 / scale,
|
|
294
|
+
x: view.x,
|
|
295
|
+
y: view.y,
|
|
296
|
+
width: art.width * scale,
|
|
297
|
+
height: art.height * scale
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
function renderState(_x3, _x4) {
|
|
301
|
+
return _renderState.apply(this, arguments);
|
|
302
|
+
}
|
|
303
|
+
function _renderState() {
|
|
304
|
+
_renderState = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(state, templateSources) {
|
|
305
|
+
var objectsOnly,
|
|
306
|
+
canvas,
|
|
307
|
+
ctx,
|
|
308
|
+
fills,
|
|
309
|
+
content,
|
|
310
|
+
drawList,
|
|
311
|
+
template,
|
|
312
|
+
sheetFills,
|
|
313
|
+
regionFills,
|
|
314
|
+
_args5 = arguments,
|
|
315
|
+
_t6;
|
|
316
|
+
return _regenerator().w(function (_context5) {
|
|
317
|
+
while (1) switch (_context5.p = _context5.n) {
|
|
318
|
+
case 0:
|
|
319
|
+
objectsOnly = _args5.length > 2 && _args5[2] !== undefined ? _args5[2] : false;
|
|
320
|
+
canvas = document.createElement('canvas');
|
|
321
|
+
canvas.width = Math.max(1, Math.round(state.width));
|
|
322
|
+
canvas.height = Math.max(1, Math.round(state.height));
|
|
323
|
+
ctx = canvas.getContext('2d');
|
|
324
|
+
if (ctx) {
|
|
325
|
+
_context5.n = 1;
|
|
326
|
+
break;
|
|
327
|
+
}
|
|
328
|
+
return _context5.a(2, '');
|
|
329
|
+
case 1:
|
|
330
|
+
fills = state.objects.filter(isBackgroundFill);
|
|
331
|
+
content = state.objects.filter(function (obj) {
|
|
332
|
+
return !isBackgroundFill(obj);
|
|
333
|
+
});
|
|
334
|
+
if (!objectsOnly) {
|
|
335
|
+
ctx.fillStyle = '#ffffff';
|
|
336
|
+
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|
337
|
+
}
|
|
338
|
+
drawList = /*#__PURE__*/function () {
|
|
339
|
+
var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(objects, composite) {
|
|
340
|
+
var _iterator4, _step4, obj, image, _t4, _t5;
|
|
341
|
+
return _regenerator().w(function (_context4) {
|
|
342
|
+
while (1) switch (_context4.p = _context4.n) {
|
|
343
|
+
case 0:
|
|
344
|
+
_iterator4 = _createForOfIteratorHelper(objects);
|
|
345
|
+
_context4.p = 1;
|
|
346
|
+
_iterator4.s();
|
|
347
|
+
case 2:
|
|
348
|
+
if ((_step4 = _iterator4.n()).done) {
|
|
349
|
+
_context4.n = 8;
|
|
350
|
+
break;
|
|
351
|
+
}
|
|
352
|
+
obj = _step4.value;
|
|
353
|
+
image = void 0;
|
|
354
|
+
if (!(obj.type === 'image' && obj.src)) {
|
|
355
|
+
_context4.n = 6;
|
|
356
|
+
break;
|
|
357
|
+
}
|
|
358
|
+
_context4.p = 3;
|
|
359
|
+
_context4.n = 4;
|
|
360
|
+
return loadHtmlImage(obj.src);
|
|
361
|
+
case 4:
|
|
362
|
+
image = _context4.v;
|
|
363
|
+
_context4.n = 6;
|
|
364
|
+
break;
|
|
365
|
+
case 5:
|
|
366
|
+
_context4.p = 5;
|
|
367
|
+
_t4 = _context4.v;
|
|
368
|
+
image = undefined;
|
|
369
|
+
case 6:
|
|
370
|
+
ctx.save();
|
|
371
|
+
if (composite) ctx.globalCompositeOperation = composite;
|
|
372
|
+
drawObject(ctx, obj, image);
|
|
373
|
+
ctx.restore();
|
|
374
|
+
case 7:
|
|
375
|
+
_context4.n = 2;
|
|
376
|
+
break;
|
|
377
|
+
case 8:
|
|
378
|
+
_context4.n = 10;
|
|
379
|
+
break;
|
|
380
|
+
case 9:
|
|
381
|
+
_context4.p = 9;
|
|
382
|
+
_t5 = _context4.v;
|
|
383
|
+
_iterator4.e(_t5);
|
|
384
|
+
case 10:
|
|
385
|
+
_context4.p = 10;
|
|
386
|
+
_iterator4.f();
|
|
387
|
+
return _context4.f(10);
|
|
388
|
+
case 11:
|
|
389
|
+
return _context4.a(2);
|
|
390
|
+
}
|
|
391
|
+
}, _callee4, null, [[3, 5], [1, 9, 10, 11]]);
|
|
392
|
+
}));
|
|
393
|
+
return function drawList(_x8, _x9) {
|
|
394
|
+
return _ref.apply(this, arguments);
|
|
395
|
+
};
|
|
396
|
+
}();
|
|
397
|
+
if (!(!objectsOnly && templateSources.length)) {
|
|
398
|
+
_context5.n = 5;
|
|
399
|
+
break;
|
|
400
|
+
}
|
|
401
|
+
_context5.p = 2;
|
|
402
|
+
_context5.n = 3;
|
|
403
|
+
return loadHtmlImageFromSources(templateSources);
|
|
404
|
+
case 3:
|
|
405
|
+
template = _context5.v;
|
|
406
|
+
ctx.drawImage(template, 0, 0, canvas.width, canvas.height);
|
|
407
|
+
_context5.n = 5;
|
|
408
|
+
break;
|
|
409
|
+
case 4:
|
|
410
|
+
_context5.p = 4;
|
|
411
|
+
_t6 = _context5.v;
|
|
412
|
+
case 5:
|
|
413
|
+
sheetFills = fills.filter(function (obj) {
|
|
414
|
+
return isFullArtboardFill(obj, state.width, state.height);
|
|
415
|
+
});
|
|
416
|
+
regionFills = fills.filter(function (obj) {
|
|
417
|
+
return !isFullArtboardFill(obj, state.width, state.height);
|
|
418
|
+
});
|
|
419
|
+
_context5.n = 6;
|
|
420
|
+
return drawList(sheetFills, objectsOnly ? 'source-over' : 'multiply');
|
|
421
|
+
case 6:
|
|
422
|
+
_context5.n = 7;
|
|
423
|
+
return drawList(regionFills);
|
|
424
|
+
case 7:
|
|
425
|
+
_context5.n = 8;
|
|
426
|
+
return drawList(content.filter(function (obj) {
|
|
427
|
+
return obj.type !== 'image';
|
|
428
|
+
}));
|
|
429
|
+
case 8:
|
|
430
|
+
_context5.n = 9;
|
|
431
|
+
return drawList(content.filter(function (obj) {
|
|
432
|
+
return obj.type === 'image';
|
|
433
|
+
}));
|
|
434
|
+
case 9:
|
|
435
|
+
return _context5.a(2, canvas.toDataURL('image/png'));
|
|
436
|
+
}
|
|
437
|
+
}, _callee5, null, [[2, 4]]);
|
|
438
|
+
}));
|
|
439
|
+
return _renderState.apply(this, arguments);
|
|
440
|
+
}
|
|
441
|
+
export function exportDraftPngs(_x5, _x6, _x7) {
|
|
442
|
+
return _exportDraftPngs.apply(this, arguments);
|
|
443
|
+
}
|
|
444
|
+
function _exportDraftPngs() {
|
|
445
|
+
_exportDraftPngs = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(state, templateSrc, apiUrl) {
|
|
446
|
+
var sources, resolved, _yield$Promise$all, _yield$Promise$all2, draft, canvasPreview;
|
|
447
|
+
return _regenerator().w(function (_context6) {
|
|
448
|
+
while (1) switch (_context6.n) {
|
|
449
|
+
case 0:
|
|
450
|
+
sources = Array.isArray(templateSrc) ? templateSrc : templateSrc ? [templateSrc] : [];
|
|
451
|
+
resolved = sources.flatMap(function (src) {
|
|
452
|
+
return src.startsWith('http') || src.startsWith('data:') || src.startsWith('blob:') ? [src] : templateImageSources({
|
|
453
|
+
file: {
|
|
454
|
+
viewUrl: src
|
|
455
|
+
}
|
|
456
|
+
}, apiUrl);
|
|
457
|
+
});
|
|
458
|
+
_context6.n = 1;
|
|
459
|
+
return waitForDraftFonts(state.objects.filter(function (obj) {
|
|
460
|
+
return obj.type === 'text';
|
|
461
|
+
}).map(function (obj) {
|
|
462
|
+
return obj.fontFamily || '';
|
|
463
|
+
}));
|
|
464
|
+
case 1:
|
|
465
|
+
_context6.n = 2;
|
|
466
|
+
return Promise.all([renderState(state, resolved, true), renderState(state, resolved, false)]);
|
|
467
|
+
case 2:
|
|
468
|
+
_yield$Promise$all = _context6.v;
|
|
469
|
+
_yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);
|
|
470
|
+
draft = _yield$Promise$all2[0];
|
|
471
|
+
canvasPreview = _yield$Promise$all2[1];
|
|
472
|
+
return _context6.a(2, {
|
|
473
|
+
draft: draft,
|
|
474
|
+
canvasPreview: canvasPreview
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
}, _callee6);
|
|
478
|
+
}));
|
|
479
|
+
return _exportDraftPngs.apply(this, arguments);
|
|
480
|
+
}
|
|
481
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlIiwidCIsInIiLCJTeW1ib2wiLCJuIiwiaXRlcmF0b3IiLCJvIiwidG9TdHJpbmdUYWciLCJpIiwiYyIsInByb3RvdHlwZSIsIkdlbmVyYXRvciIsInUiLCJPYmplY3QiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsZW5ndGgiLCJsIiwiVHlwZUVycm9yIiwiY2FsbCIsImRvbmUiLCJ2YWx1ZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJfcmVnZW5lcmF0b3IiLCJ3IiwibSIsImRlZmluZVByb3BlcnR5IiwiX3JlZ2VuZXJhdG9yRGVmaW5lIiwiX2ludm9rZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX24iLCJGIiwicyIsIm5leHQiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJjc3NGb250RmFtaWx5IiwiZW5zdXJlRHJhZnRGb250cyIsImlzQmFja2dyb3VuZEZpbGwiLCJpc0Z1bGxBcnRib2FyZEZpbGwiLCJyZXNvbHZlRmlsZVVybCIsInVybCIsImFwaVVybCIsImFwaSIsIlVSTCIsInN0YXJ0c1dpdGgiLCJjb25jYXQiLCJvcmlnaW4iLCJocmVmIiwiX3VudXNlZCIsInRlbXBsYXRlSW1hZ2VTb3VyY2VzIiwidGVtcGxhdGUiLCJmaWxlIiwicmF3IiwiaWQiLCJiYXNlIiwiU3RyaW5nIiwicmVwbGFjZSIsInB1c2giLCJ2aWV3VXJsIiwiY2FjaGVkVmlld1VybCIsImRvd25sb2FkVXJsIiwiY2FjaGVkRG93bmxvYWRVcmwiLCJTZXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwibWFwIiwibG9hZEltYWdlRWxlbWVudCIsInNyYyIsImNvcnMiLCJyZWplY3QiLCJpbWciLCJJbWFnZSIsImNyb3NzT3JpZ2luIiwib25sb2FkIiwib25lcnJvciIsIkVycm9yIiwibG9hZEh0bWxJbWFnZSIsIl94IiwiX2xvYWRIdG1sSW1hZ2UiLCJfY2FsbGVlIiwicGVyc2lzdE9iamVjdFVybCIsInJlc3BvbnNlIiwiYmxvYiIsIm9iamVjdFVybCIsImltYWdlIiwiX2FyZ3MiLCJfdCIsIl9jb250ZXh0IiwidW5kZWZpbmVkIiwiZmV0Y2giLCJtb2RlIiwiY3JlZGVudGlhbHMiLCJvayIsInN0YXR1cyIsImNyZWF0ZU9iamVjdFVSTCIsIl9tZXJjaGlPYmplY3RVcmwiLCJyZXZva2VPYmplY3RVUkwiLCJsb2FkSHRtbEltYWdlRnJvbVNvdXJjZXMiLCJfeDIiLCJfbG9hZEh0bWxJbWFnZUZyb21Tb3VyY2VzIiwiX2NhbGxlZTIiLCJzb3VyY2VzIiwibGFzdEVycm9yIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIl9hcmdzMiIsIl90MiIsIl90MyIsIl9jb250ZXh0MiIsIndhaXRGb3JEcmFmdEZvbnRzIiwiX3dhaXRGb3JEcmFmdEZvbnRzIiwiX2NhbGxlZTMiLCJmYW1pbGllcyIsInVuaXF1ZSIsIl9hcmdzMyIsIl9jb250ZXh0MyIsImRvY3VtZW50IiwiZm9udHMiLCJhbGwiLCJyZWFkeSIsImZsYXRNYXAiLCJmYW1pbHkiLCJsb2FkIiwid3JhcExpbmVzIiwidGV4dCIsIm1heFdpZHRoIiwibWVhc3VyZSIsIndvcmRzIiwic3BsaXQiLCJsaW5lcyIsImxpbmUiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIndvcmQiLCJlcnIiLCJkcmF3VGV4dCIsImN0eCIsIm9iaiIsImZvbnRTaXplIiwiYWxpZ24iLCJmaWxsU3R5bGUiLCJmaWxsIiwiZm9udCIsImZvbnRGYW1pbHkiLCJ0ZXh0QmFzZWxpbmUiLCJ0ZXh0QWxpZ24iLCJsaW5lSGVpZ2h0Iiwid2lkdGgiLCJtZWFzdXJlVGV4dCIsImJsb2NrSGVpZ2h0IiwiY3Vyc29yWSIsIk1hdGgiLCJtYXgiLCJoZWlnaHQiLCJ4IiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImZpbGxUZXh0IiwiYXBwbHlLb252YU9iamVjdFRyYW5zZm9ybSIsInRyYW5zbGF0ZSIsInJvdGF0ZSIsInJvdGF0aW9uIiwiUEkiLCJzY2FsZSIsInNjYWxlWCIsInNjYWxlWSIsImRyYXdPYmplY3QiLCJzYXZlIiwidHlwZSIsImZpbGxSZWN0IiwiZHJhd0ltYWdlIiwicmVzdG9yZSIsImNhcHR1cmVTdGFnZUFydGJvYXJkIiwic3RhZ2UiLCJ2aWV3IiwiYXJ0IiwidG9EYXRhVVJMIiwibWltZVR5cGUiLCJwaXhlbFJhdGlvIiwicmVuZGVyU3RhdGUiLCJfeDMiLCJfeDQiLCJfcmVuZGVyU3RhdGUiLCJfY2FsbGVlNSIsInN0YXRlIiwidGVtcGxhdGVTb3VyY2VzIiwib2JqZWN0c09ubHkiLCJjYW52YXMiLCJmaWxscyIsImNvbnRlbnQiLCJkcmF3TGlzdCIsInNoZWV0RmlsbHMiLCJyZWdpb25GaWxscyIsIl9hcmdzNSIsIl90NiIsIl9jb250ZXh0NSIsImNyZWF0ZUVsZW1lbnQiLCJyb3VuZCIsImdldENvbnRleHQiLCJvYmplY3RzIiwiX3JlZiIsIl9jYWxsZWU0IiwiY29tcG9zaXRlIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsIl90NCIsIl90NSIsIl9jb250ZXh0NCIsImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsIl94OCIsIl94OSIsImV4cG9ydERyYWZ0UG5ncyIsIl94NSIsIl94NiIsIl94NyIsIl9leHBvcnREcmFmdFBuZ3MiLCJfY2FsbGVlNiIsInRlbXBsYXRlU3JjIiwicmVzb2x2ZWQiLCJfeWllbGQkUHJvbWlzZSRhbGwiLCJfeWllbGQkUHJvbWlzZSRhbGwyIiwiZHJhZnQiLCJjYW52YXNQcmV2aWV3IiwiX2NvbnRleHQ2IiwiX3NsaWNlZFRvQXJyYXkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZHJhZnRFeHBvcnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzRm9udEZhbWlseSwgZW5zdXJlRHJhZnRGb250cyB9IGZyb20gJy4vZHJhZnRGb250cyc7XG5pbXBvcnQgeyBpc0JhY2tncm91bmRGaWxsLCBpc0Z1bGxBcnRib2FyZEZpbGwgfSBmcm9tICcuL2RyYWZ0VGVtcGxhdGVzJztcbmltcG9ydCB7IERyYWZ0Q2FudmFzT2JqZWN0LCBEcmFmdENhbnZhc1N0YXRlIH0gZnJvbSAnLi90eXBlcyc7XG5cbmZ1bmN0aW9uIHJlc29sdmVGaWxlVXJsKHVybDogc3RyaW5nLCBhcGlVcmw/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIXVybCkgcmV0dXJuICcnO1xuICBpZiAoL14oZGF0YTp8YmxvYjp8aHR0cHM/OikvaS50ZXN0KHVybCkpIHJldHVybiB1cmw7XG4gIGlmICghYXBpVXJsKSByZXR1cm4gdXJsO1xuICB0cnkge1xuICAgIGNvbnN0IGFwaSA9IG5ldyBVUkwoYXBpVXJsKTtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJy8nKSkgcmV0dXJuIGAke2FwaS5vcmlnaW59JHt1cmx9YDtcbiAgICByZXR1cm4gbmV3IFVSTCh1cmwsIGFwaVVybCkuaHJlZjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGVJbWFnZVNvdXJjZXModGVtcGxhdGU6IGFueSwgYXBpVXJsPzogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBmaWxlID0gdGVtcGxhdGU/LmZpbGUgfHwge307XG4gIGNvbnN0IHJhdzogc3RyaW5nW10gPSBbXTtcbiAgaWYgKGFwaVVybCAmJiBmaWxlLmlkKSB7XG4gICAgY29uc3QgYmFzZSA9IFN0cmluZyhhcGlVcmwpLnJlcGxhY2UoL1xcLz8kLywgJy8nKTtcbiAgICByYXcucHVzaChgJHtiYXNlfXB1YmxpYy1maWxlcy8ke2ZpbGUuaWR9L3ZpZXcvYCk7XG4gIH1cbiAgcmF3LnB1c2goXG4gICAgZmlsZS52aWV3VXJsLFxuICAgIGZpbGUuY2FjaGVkVmlld1VybCxcbiAgICBmaWxlLmRvd25sb2FkVXJsLFxuICAgIGZpbGUuY2FjaGVkRG93bmxvYWRVcmwsXG4gICk7XG4gIHJldHVybiBbLi4ubmV3IFNldChcbiAgICByYXcuZmlsdGVyKEJvb2xlYW4pLm1hcCgodXJsKSA9PiByZXNvbHZlRmlsZVVybChTdHJpbmcodXJsKSwgYXBpVXJsKSksXG4gICldO1xufVxuXG5mdW5jdGlvbiBsb2FkSW1hZ2VFbGVtZW50KHNyYzogc3RyaW5nLCBjb3JzOiBib29sZWFuKTogUHJvbWlzZTxIVE1MSW1hZ2VFbGVtZW50PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgaWYgKGNvcnMpIGltZy5jcm9zc09yaWdpbiA9ICdhbm9ueW1vdXMnO1xuICAgIGltZy5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKGltZyk7XG4gICAgaW1nLm9uZXJyb3IgPSAoKSA9PiByZWplY3QobmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCAke3NyY31gKSk7XG4gICAgaW1nLnNyYyA9IHNyYztcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkSHRtbEltYWdlKFxuICBzcmM6IHN0cmluZyxcbiAgcGVyc2lzdE9iamVjdFVybCA9IGZhbHNlLFxuKTogUHJvbWlzZTxIVE1MSW1hZ2VFbGVtZW50PiB7XG4gIGlmICghc3JjKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgaW1hZ2Ugc291cmNlJyk7XG4gIGlmICgvXihkYXRhOnxibG9iOikvaS50ZXN0KHNyYykpIHtcbiAgICByZXR1cm4gbG9hZEltYWdlRWxlbWVudChzcmMsIGZhbHNlKTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goc3JjLCB7IG1vZGU6ICdjb3JzJywgY3JlZGVudGlhbHM6ICdvbWl0JyB9KTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgY29uc3QgYmxvYiA9IGF3YWl0IHJlc3BvbnNlLmJsb2IoKTtcbiAgICBjb25zdCBvYmplY3RVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIGNvbnN0IGltYWdlID0gYXdhaXQgbG9hZEltYWdlRWxlbWVudChvYmplY3RVcmwsIGZhbHNlKTtcbiAgICBpZiAocGVyc2lzdE9iamVjdFVybCkge1xuICAgICAgKGltYWdlIGFzIEhUTUxJbWFnZUVsZW1lbnQgJiB7IF9tZXJjaGlPYmplY3RVcmw/OiBzdHJpbmcgfSkuX21lcmNoaU9iamVjdFVybCA9IG9iamVjdFVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChvYmplY3RVcmwpO1xuICAgIH1cbiAgICByZXR1cm4gaW1hZ2U7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBsb2FkSW1hZ2VFbGVtZW50KHNyYywgdHJ1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRIdG1sSW1hZ2VGcm9tU291cmNlcyhcbiAgc291cmNlczogc3RyaW5nW10sXG4gIHBlcnNpc3RPYmplY3RVcmwgPSBmYWxzZSxcbik6IFByb21pc2U8SFRNTEltYWdlRWxlbWVudD4ge1xuICBsZXQgbGFzdEVycm9yOiB1bmtub3duO1xuICBmb3IgKGNvbnN0IHNyYyBvZiBzb3VyY2VzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBsb2FkSHRtbEltYWdlKHNyYywgcGVyc2lzdE9iamVjdFVybCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxhc3RFcnJvciA9IGVycm9yO1xuICAgIH1cbiAgfVxuICB0aHJvdyBsYXN0RXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGxhc3RFcnJvciA6IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgaW1hZ2UnKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JEcmFmdEZvbnRzKGZhbWlsaWVzOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTx2b2lkPiB7XG4gIGVuc3VyZURyYWZ0Rm9udHMoKTtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWRvY3VtZW50LmZvbnRzKSByZXR1cm47XG4gIGNvbnN0IHVuaXF1ZSA9IFsuLi5uZXcgU2V0KGZhbWlsaWVzLmZpbHRlcihCb29sZWFuKSldO1xuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgZG9jdW1lbnQuZm9udHMucmVhZHkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKSxcbiAgICAuLi51bmlxdWUuZmxhdE1hcCgoZmFtaWx5KSA9PiAoW1xuICAgICAgZG9jdW1lbnQuZm9udHMubG9hZChgNDAwIDQ4cHggJHtjc3NGb250RmFtaWx5KGZhbWlseSl9YCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKSxcbiAgICAgIGRvY3VtZW50LmZvbnRzLmxvYWQoYDcwMCA0OHB4ICR7Y3NzRm9udEZhbWlseShmYW1pbHkpfWApLmNhdGNoKCgpID0+IHVuZGVmaW5lZCksXG4gICAgXSkpLFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBMaW5lcyhcbiAgdGV4dDogc3RyaW5nLFxuICBtYXhXaWR0aDogbnVtYmVyLFxuICBtZWFzdXJlOiAodmFsdWU6IHN0cmluZykgPT4gbnVtYmVyLFxuKTogc3RyaW5nW10ge1xuICBjb25zdCB3b3JkcyA9IFN0cmluZyh0ZXh0KS5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKTtcbiAgaWYgKCF3b3Jkcy5sZW5ndGgpIHJldHVybiBbXTtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIGxldCBsaW5lID0gJyc7XG4gIGZvciAoY29uc3Qgd29yZCBvZiB3b3Jkcykge1xuICAgIGNvbnN0IHRlc3QgPSBsaW5lID8gYCR7bGluZX0gJHt3b3JkfWAgOiB3b3JkO1xuICAgIGlmIChsaW5lICYmIG1lYXN1cmUodGVzdCkgPiBtYXhXaWR0aCkge1xuICAgICAgbGluZXMucHVzaChsaW5lKTtcbiAgICAgIGxpbmUgPSB3b3JkO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaW5lID0gdGVzdDtcbiAgICB9XG4gIH1cbiAgaWYgKGxpbmUpIGxpbmVzLnB1c2gobGluZSk7XG4gIHJldHVybiBsaW5lcztcbn1cblxuZnVuY3Rpb24gZHJhd1RleHQoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIG9iajogRHJhZnRDYW52YXNPYmplY3QpIHtcbiAgY29uc3QgZm9udFNpemUgPSBvYmouZm9udFNpemUgfHwgNDg7XG4gIGNvbnN0IGFsaWduID0gKG9iai5hbGlnbiBhcyBDYW52YXNUZXh0QWxpZ24pIHx8ICdjZW50ZXInO1xuICBjdHguZmlsbFN0eWxlID0gb2JqLmZpbGwgfHwgJyMxMTExMTEnO1xuICBjdHguZm9udCA9IGAke2ZvbnRTaXplfXB4ICR7Y3NzRm9udEZhbWlseShvYmouZm9udEZhbWlseSl9YDtcbiAgY3R4LnRleHRCYXNlbGluZSA9ICd0b3AnO1xuICBjdHgudGV4dEFsaWduID0gYWxpZ247XG4gIGNvbnN0IGxpbmVIZWlnaHQgPSBmb250U2l6ZTtcbiAgY29uc3QgbGluZXMgPSB3cmFwTGluZXMoXG4gICAgb2JqLnRleHQgfHwgJycsXG4gICAgb2JqLndpZHRoLFxuICAgICh2YWx1ZSkgPT4gY3R4Lm1lYXN1cmVUZXh0KHZhbHVlKS53aWR0aCxcbiAgKTtcbiAgY29uc3QgYmxvY2tIZWlnaHQgPSBsaW5lcy5sZW5ndGggKiBsaW5lSGVpZ2h0O1xuICBsZXQgY3Vyc29yWSA9IE1hdGgubWF4KDAsIChvYmouaGVpZ2h0IC0gYmxvY2tIZWlnaHQpIC8gMik7XG4gIGNvbnN0IHggPSBhbGlnbiA9PT0gJ2NlbnRlcicgPyBvYmoud2lkdGggLyAyIDogYWxpZ24gPT09ICdyaWdodCcgPyBvYmoud2lkdGggOiAwO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICBjdHguZmlsbFRleHQobGluZSwgeCwgY3Vyc29yWSwgb2JqLndpZHRoKTtcbiAgICBjdXJzb3JZICs9IGxpbmVIZWlnaHQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5S29udmFPYmplY3RUcmFuc2Zvcm0oXG4gIGN0eDogUGljazxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsICd0cmFuc2xhdGUnIHwgJ3JvdGF0ZScgfCAnc2NhbGUnPixcbiAgb2JqOiBQaWNrPERyYWZ0Q2FudmFzT2JqZWN0LCAneCcgfCAneScgfCAncm90YXRpb24nIHwgJ3NjYWxlWCcgfCAnc2NhbGVZJz4sXG4pIHtcbiAgLy8gS29udmEgcm90YXRlcy9zY2FsZXMgYXJvdW5kIHRoZSBub2RlIG9yaWdpbiAodG9wLWxlZnQpLCBub3QgdGhlIGNlbnRyZS5cbiAgY3R4LnRyYW5zbGF0ZShvYmoueCwgb2JqLnkpO1xuICBjdHgucm90YXRlKCgob2JqLnJvdGF0aW9uIHx8IDApICogTWF0aC5QSSkgLyAxODApO1xuICBjdHguc2NhbGUob2JqLnNjYWxlWCB8fCAxLCBvYmouc2NhbGVZIHx8IDEpO1xufVxuXG5mdW5jdGlvbiBkcmF3T2JqZWN0KFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgb2JqOiBEcmFmdENhbnZhc09iamVjdCxcbiAgaW1hZ2U/OiBIVE1MSW1hZ2VFbGVtZW50LFxuKSB7XG4gIGN0eC5zYXZlKCk7XG4gIGFwcGx5S29udmFPYmplY3RUcmFuc2Zvcm0oY3R4LCBvYmopO1xuXG4gIGlmIChvYmoudHlwZSA9PT0gJ3JlY3QnKSB7XG4gICAgY3R4LmZpbGxTdHlsZSA9IG9iai5maWxsIHx8ICcjY2NjY2NjJztcbiAgICBjdHguZmlsbFJlY3QoMCwgMCwgb2JqLndpZHRoLCBvYmouaGVpZ2h0KTtcbiAgfSBlbHNlIGlmIChvYmoudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgZHJhd1RleHQoY3R4LCBvYmopO1xuICB9IGVsc2UgaWYgKG9iai50eXBlID09PSAnaW1hZ2UnICYmIGltYWdlKSB7XG4gICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgMCwgMCwgb2JqLndpZHRoLCBvYmouaGVpZ2h0KTtcbiAgfVxuICBjdHgucmVzdG9yZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZVN0YWdlQXJ0Ym9hcmQoXG4gIHN0YWdlOiB7IHRvRGF0YVVSTDogKGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHN0cmluZyB9LFxuICB2aWV3OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyBzY2FsZTogbnVtYmVyIH0sXG4gIGFydDogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9LFxuKTogc3RyaW5nIHtcbiAgY29uc3Qgc2NhbGUgPSBNYXRoLm1heCh2aWV3LnNjYWxlIHx8IDAsIDAuMDEpO1xuICByZXR1cm4gc3RhZ2UudG9EYXRhVVJMKHtcbiAgICBtaW1lVHlwZTogJ2ltYWdlL3BuZycsXG4gICAgcGl4ZWxSYXRpbzogMSAvIHNjYWxlLFxuICAgIHg6IHZpZXcueCxcbiAgICB5OiB2aWV3LnksXG4gICAgd2lkdGg6IGFydC53aWR0aCAqIHNjYWxlLFxuICAgIGhlaWdodDogYXJ0LmhlaWdodCAqIHNjYWxlLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVuZGVyU3RhdGUoXG4gIHN0YXRlOiBEcmFmdENhbnZhc1N0YXRlLFxuICB0ZW1wbGF0ZVNvdXJjZXM6IHN0cmluZ1tdLFxuICBvYmplY3RzT25seSA9IGZhbHNlLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gIGNhbnZhcy53aWR0aCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoc3RhdGUud2lkdGgpKTtcbiAgY2FudmFzLmhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoc3RhdGUuaGVpZ2h0KSk7XG4gIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICBpZiAoIWN0eCkgcmV0dXJuICcnO1xuXG4gIGNvbnN0IGZpbGxzID0gc3RhdGUub2JqZWN0cy5maWx0ZXIoaXNCYWNrZ3JvdW5kRmlsbCk7XG4gIGNvbnN0IGNvbnRlbnQgPSBzdGF0ZS5vYmplY3RzLmZpbHRlcigob2JqKSA9PiAhaXNCYWNrZ3JvdW5kRmlsbChvYmopKTtcblxuICBpZiAoIW9iamVjdHNPbmx5KSB7XG4gICAgY3R4LmZpbGxTdHlsZSA9ICcjZmZmZmZmJztcbiAgICBjdHguZmlsbFJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgfVxuXG4gIGNvbnN0IGRyYXdMaXN0ID0gYXN5bmMgKFxuICAgIG9iamVjdHM6IERyYWZ0Q2FudmFzT2JqZWN0W10sXG4gICAgY29tcG9zaXRlPzogJ211bHRpcGx5JyB8ICdzb3VyY2Utb3ZlcicsXG4gICkgPT4ge1xuICAgIGZvciAoY29uc3Qgb2JqIG9mIG9iamVjdHMpIHtcbiAgICAgIGxldCBpbWFnZTogSFRNTEltYWdlRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChvYmoudHlwZSA9PT0gJ2ltYWdlJyAmJiBvYmouc3JjKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaW1hZ2UgPSBhd2FpdCBsb2FkSHRtbEltYWdlKG9iai5zcmMpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBpbWFnZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3R4LnNhdmUoKTtcbiAgICAgIGlmIChjb21wb3NpdGUpIGN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBjb21wb3NpdGU7XG4gICAgICBkcmF3T2JqZWN0KGN0eCwgb2JqLCBpbWFnZSk7XG4gICAgICBjdHgucmVzdG9yZSgpO1xuICAgIH1cbiAgfTtcblxuICBpZiAoIW9iamVjdHNPbmx5ICYmIHRlbXBsYXRlU291cmNlcy5sZW5ndGgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCBsb2FkSHRtbEltYWdlRnJvbVNvdXJjZXModGVtcGxhdGVTb3VyY2VzKTtcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGVtcGxhdGUsIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBibGFuayBhcnRib2FyZCBpZiB0aGUgdGVtcGxhdGUgaW1hZ2UgY2Fubm90IGxvYWRcbiAgICB9XG4gIH1cbiAgY29uc3Qgc2hlZXRGaWxscyA9IGZpbGxzLmZpbHRlcigob2JqKSA9PiBpc0Z1bGxBcnRib2FyZEZpbGwob2JqLCBzdGF0ZS53aWR0aCwgc3RhdGUuaGVpZ2h0KSk7XG4gIGNvbnN0IHJlZ2lvbkZpbGxzID0gZmlsbHMuZmlsdGVyKChvYmopID0+ICFpc0Z1bGxBcnRib2FyZEZpbGwob2JqLCBzdGF0ZS53aWR0aCwgc3RhdGUuaGVpZ2h0KSk7XG4gIGF3YWl0IGRyYXdMaXN0KHNoZWV0RmlsbHMsIG9iamVjdHNPbmx5ID8gJ3NvdXJjZS1vdmVyJyA6ICdtdWx0aXBseScpO1xuICBhd2FpdCBkcmF3TGlzdChyZWdpb25GaWxscyk7XG4gIGF3YWl0IGRyYXdMaXN0KGNvbnRlbnQuZmlsdGVyKChvYmopID0+IG9iai50eXBlICE9PSAnaW1hZ2UnKSk7XG4gIGF3YWl0IGRyYXdMaXN0KGNvbnRlbnQuZmlsdGVyKChvYmopID0+IG9iai50eXBlID09PSAnaW1hZ2UnKSk7XG5cbiAgcmV0dXJuIGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwb3J0RHJhZnRQbmdzKFxuICBzdGF0ZTogRHJhZnRDYW52YXNTdGF0ZSxcbiAgdGVtcGxhdGVTcmM/OiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwsXG4gIGFwaVVybD86IHN0cmluZyxcbik6IFByb21pc2U8eyBkcmFmdDogc3RyaW5nOyBjYW52YXNQcmV2aWV3OiBzdHJpbmcgfT4ge1xuICBjb25zdCBzb3VyY2VzID0gQXJyYXkuaXNBcnJheSh0ZW1wbGF0ZVNyYylcbiAgICA/IHRlbXBsYXRlU3JjXG4gICAgOiB0ZW1wbGF0ZVNyY1xuICAgICAgPyBbdGVtcGxhdGVTcmNdXG4gICAgICA6IFtdO1xuICBjb25zdCByZXNvbHZlZCA9IHNvdXJjZXMuZmxhdE1hcCgoc3JjKSA9PiAoXG4gICAgc3JjLnN0YXJ0c1dpdGgoJ2h0dHAnKSB8fCBzcmMuc3RhcnRzV2l0aCgnZGF0YTonKSB8fCBzcmMuc3RhcnRzV2l0aCgnYmxvYjonKVxuICAgICAgPyBbc3JjXVxuICAgICAgOiB0ZW1wbGF0ZUltYWdlU291cmNlcyh7IGZpbGU6IHsgdmlld1VybDogc3JjIH0gfSwgYXBpVXJsKVxuICApKTtcbiAgYXdhaXQgd2FpdEZvckRyYWZ0Rm9udHMoXG4gICAgc3RhdGUub2JqZWN0c1xuICAgICAgLmZpbHRlcigob2JqKSA9PiBvYmoudHlwZSA9PT0gJ3RleHQnKVxuICAgICAgLm1hcCgob2JqKSA9PiBvYmouZm9udEZhbWlseSB8fCAnJyksXG4gICk7XG4gIGNvbnN0IFtkcmFmdCwgY2FudmFzUHJldmlld10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgcmVuZGVyU3RhdGUoc3RhdGUsIHJlc29sdmVkLCB0cnVlKSxcbiAgICByZW5kZXJTdGF0ZShzdGF0ZSwgcmVzb2x2ZWQsIGZhbHNlKSxcbiAgXSk7XG4gIHJldHVybiB7IGRyYWZ0LCBjYW52YXNQcmV2aWV3IH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7MEJBQ0EsdUtBQUFBLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLHdCQUFBQyxNQUFBLEdBQUFBLE1BQUEs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
|