@kepler.gl/utils 3.1.0-alpha.1 → 3.1.0-alpha.2
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/dist/aggregation.d.ts +13 -0
- package/dist/aggregation.js +84 -0
- package/dist/application-config.d.ts +25 -0
- package/dist/application-config.js +52 -0
- package/dist/arrow-data-container.d.ts +62 -0
- package/dist/arrow-data-container.js +331 -0
- package/dist/color-utils.d.ts +108 -0
- package/dist/color-utils.js +443 -0
- package/dist/data-container-interface.d.ts +138 -0
- package/dist/data-container-interface.js +6 -0
- package/dist/data-container-utils.d.ts +30 -0
- package/dist/data-container-utils.js +74 -0
- package/dist/data-row.d.ts +59 -0
- package/dist/data-row.js +110 -0
- package/dist/data-scale-utils.d.ts +120 -0
- package/dist/data-scale-utils.js +340 -0
- package/dist/data-utils.d.ts +98 -0
- package/dist/data-utils.js +436 -0
- package/dist/dataset-utils.d.ts +45 -0
- package/dist/dataset-utils.js +313 -0
- package/dist/dom-to-image.d.ts +73 -0
- package/dist/dom-to-image.js +421 -0
- package/dist/dom-utils.d.ts +23 -0
- package/dist/dom-utils.js +349 -0
- package/dist/effect-utils.d.ts +24 -0
- package/dist/effect-utils.js +166 -0
- package/dist/export-map-html.d.ts +9 -0
- package/dist/export-map-html.js +25 -0
- package/dist/export-utils.d.ts +40 -0
- package/dist/export-utils.js +201 -0
- package/dist/filter-utils.d.ts +331 -0
- package/dist/filter-utils.js +1214 -0
- package/dist/format.d.ts +3 -0
- package/dist/format.js +38 -0
- package/dist/gl-utils.d.ts +1 -0
- package/dist/gl-utils.js +27 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.js +941 -0
- package/dist/indexed-data-container.d.ts +34 -0
- package/dist/indexed-data-container.js +214 -0
- package/dist/locale-utils.d.ts +2 -0
- package/dist/locale-utils.js +39 -0
- package/dist/map-info-utils.d.ts +1 -0
- package/dist/map-info-utils.js +14 -0
- package/dist/map-style-utils/mapbox-gl-style-editor.d.ts +57 -0
- package/dist/map-style-utils/mapbox-gl-style-editor.js +188 -0
- package/dist/map-style-utils/mapbox-utils.d.ts +14 -0
- package/dist/map-style-utils/mapbox-utils.js +51 -0
- package/dist/map-utils.d.ts +9 -0
- package/dist/map-utils.js +48 -0
- package/dist/mapbox-utils.d.ts +7 -0
- package/dist/mapbox-utils.js +19 -0
- package/dist/noop.d.ts +1 -0
- package/dist/noop.js +13 -0
- package/dist/notifications-utils.d.ts +42 -0
- package/dist/notifications-utils.js +69 -0
- package/dist/observe-dimensions.d.ts +15 -0
- package/dist/observe-dimensions.js +130 -0
- package/dist/plot.d.ts +131 -0
- package/dist/plot.js +615 -0
- package/dist/position-utils.d.ts +6 -0
- package/dist/position-utils.js +26 -0
- package/dist/projection-utils.d.ts +22 -0
- package/dist/projection-utils.js +83 -0
- package/dist/quick-insertion-sort.d.ts +12 -0
- package/dist/quick-insertion-sort.js +132 -0
- package/dist/row-data-container.d.ts +31 -0
- package/dist/row-data-container.js +206 -0
- package/dist/searcher-utils.d.ts +1 -0
- package/dist/searcher-utils.js +25 -0
- package/dist/split-map-utils.d.ts +32 -0
- package/dist/split-map-utils.js +99 -0
- package/dist/strings.d.ts +4 -0
- package/dist/strings.js +16 -0
- package/dist/time.d.ts +54 -0
- package/dist/time.js +325 -0
- package/dist/types.d.ts +18 -0
- package/dist/types.js +6 -0
- package/dist/utils.d.ts +104 -0
- package/dist/utils.js +241 -0
- package/package.json +6 -5
@@ -0,0 +1,421 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
5
|
+
value: true
|
6
|
+
});
|
7
|
+
exports["default"] = void 0;
|
8
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
9
|
+
var _window = _interopRequireDefault(require("global/window"));
|
10
|
+
var _document = _interopRequireDefault(require("global/document"));
|
11
|
+
var _console = _interopRequireDefault(require("global/console"));
|
12
|
+
var _miniSvgDataUri = _interopRequireDefault(require("mini-svg-data-uri"));
|
13
|
+
var _constants = require("@kepler.gl/constants");
|
14
|
+
var _domUtils = require("./dom-utils");
|
15
|
+
// SPDX-License-Identifier: MIT
|
16
|
+
// Copyright contributors to the kepler.gl project
|
17
|
+
|
18
|
+
/**
|
19
|
+
* This file is copied from https://github.com/tsayen/dom-to-image
|
20
|
+
* Modified by heshan0131 to allow loading external stylesheets and inline webfonts
|
21
|
+
*/
|
22
|
+
|
23
|
+
var inliner = newInliner();
|
24
|
+
var fontFaces = newFontFaces();
|
25
|
+
var images = newImages();
|
26
|
+
// Default impl options
|
27
|
+
var defaultOptions = {
|
28
|
+
// Default is to fail on error, no placeholder
|
29
|
+
imagePlaceholder: undefined,
|
30
|
+
// Default cache bust is false, it will use the cache
|
31
|
+
cacheBust: false
|
32
|
+
};
|
33
|
+
var domtoimage = {
|
34
|
+
toSvg: toSvg,
|
35
|
+
toPng: toPng,
|
36
|
+
toJpeg: toJpeg,
|
37
|
+
toBlob: toBlob,
|
38
|
+
toPixelData: toPixelData,
|
39
|
+
impl: {
|
40
|
+
fontFaces: fontFaces,
|
41
|
+
images: images,
|
42
|
+
inliner: inliner,
|
43
|
+
options: {}
|
44
|
+
}
|
45
|
+
};
|
46
|
+
|
47
|
+
/**
|
48
|
+
* @param {Node} node - The DOM Node object to render
|
49
|
+
* @param {Object} options - Rendering options
|
50
|
+
* @param {Function} [options.filter] - Should return true if passed node should be included in the output
|
51
|
+
* (excluding node means excluding it's children as well). Not called on the root node.
|
52
|
+
* @param {String} [options.bgcolor] - color for the background, any valid CSS color value.
|
53
|
+
* @param {Number} [options.width] - width to be applied to node before rendering.
|
54
|
+
* @param {Number} [options.height] - height to be applied to node before rendering.
|
55
|
+
* @param {Object} [options.style] - an object whose properties to be copied to node's style before rendering.
|
56
|
+
* @param {Number} [options.quality] - a Number between 0 and 1 indicating image quality (applicable to JPEG only), defaults to 1.0.
|
57
|
+
* @param {boolean} [options.escapeXhtmlForWebpack] - whether to apply fix for uglify error in dom-to-image (should be true for webpack builds), defaults to true.
|
58
|
+
* @param {String} [options.imagePlaceholder] - dataURL to use as a placeholder for failed images, default behaviour is to fail fast on images we can't fetch
|
59
|
+
* @param {Boolean} [options.cacheBust] - set to true to cache bust by appending the time to the request url
|
60
|
+
* @return {Promise} - A promise that is fulfilled with a SVG image data URL
|
61
|
+
* */
|
62
|
+
function toSvg(node, options) {
|
63
|
+
options = options || {};
|
64
|
+
copyOptions(options);
|
65
|
+
return Promise.resolve(node).then(function (nd) {
|
66
|
+
return cloneNode(nd, options.filter, true);
|
67
|
+
}).then(embedFonts).then(inlineImages).then(applyOptions).then(function (clone) {
|
68
|
+
return makeSvgDataUri(clone, options.width || (0, _domUtils.getWidth)(node), options.height || (0, _domUtils.getHeight)(node), options.escapeXhtmlForWebpack);
|
69
|
+
});
|
70
|
+
function applyOptions(clone) {
|
71
|
+
if (options.bgcolor) clone.style.backgroundColor = options.bgcolor;
|
72
|
+
if (options.width) clone.style.width = "".concat(options.width, "px");
|
73
|
+
if (options.height) clone.style.height = "".concat(options.height, "px");
|
74
|
+
if (options.style) Object.keys(options.style).forEach(function (property) {
|
75
|
+
clone.style[property] = options.style[property];
|
76
|
+
});
|
77
|
+
return clone;
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
/**
|
82
|
+
* @param {Node} node - The DOM Node object to render
|
83
|
+
* @param {Object} options - Rendering options
|
84
|
+
* @return {Promise} - A promise that is fulfilled with a Uint8Array containing RGBA pixel data.
|
85
|
+
* */
|
86
|
+
function toPixelData(node, options) {
|
87
|
+
return draw(node, options || {}).then(function (canvas) {
|
88
|
+
return canvas.getContext('2d').getImageData(0, 0, (0, _domUtils.getWidth)(node), (0, _domUtils.getHeight)(node)).data;
|
89
|
+
});
|
90
|
+
}
|
91
|
+
|
92
|
+
/**
|
93
|
+
* @param {Node} node - The DOM Node object to render
|
94
|
+
* @param {Object} options - Rendering options
|
95
|
+
* @return {Promise} - A promise that is fulfilled with a PNG image data URL
|
96
|
+
* */
|
97
|
+
function toPng(node, options) {
|
98
|
+
return draw(node, options || {}).then(function (canvas) {
|
99
|
+
return canvas.toDataURL();
|
100
|
+
});
|
101
|
+
}
|
102
|
+
|
103
|
+
/**
|
104
|
+
* @param {Node} node - The DOM Node object to render
|
105
|
+
* @param {Object} options - Rendering options
|
106
|
+
* @return {Promise} - A promise that is fulfilled with a JPEG image data URL
|
107
|
+
* */
|
108
|
+
function toJpeg(node, options) {
|
109
|
+
options = options || {};
|
110
|
+
return draw(node, options).then(function (canvas) {
|
111
|
+
return canvas.toDataURL('image/jpeg', options.quality || 1.0);
|
112
|
+
});
|
113
|
+
}
|
114
|
+
|
115
|
+
/**
|
116
|
+
* @param {Node} node - The DOM Node object to render
|
117
|
+
* @param {Object} options - Rendering options
|
118
|
+
* @return {Promise} - A promise that is fulfilled with a PNG image blob
|
119
|
+
* */
|
120
|
+
function toBlob(node, options) {
|
121
|
+
return draw(node, options || {}).then(_domUtils.canvasToBlob);
|
122
|
+
}
|
123
|
+
function copyOptions(options) {
|
124
|
+
// Copy options to impl options for use in impl
|
125
|
+
if (typeof options.imagePlaceholder === 'undefined') {
|
126
|
+
domtoimage.impl.options.imagePlaceholder = defaultOptions.imagePlaceholder;
|
127
|
+
} else {
|
128
|
+
domtoimage.impl.options.imagePlaceholder = options.imagePlaceholder;
|
129
|
+
}
|
130
|
+
if (typeof options.cacheBust === 'undefined') {
|
131
|
+
domtoimage.impl.options.cacheBust = defaultOptions.cacheBust;
|
132
|
+
} else {
|
133
|
+
domtoimage.impl.options.cacheBust = options.cacheBust;
|
134
|
+
}
|
135
|
+
}
|
136
|
+
function draw(domNode, options) {
|
137
|
+
return toSvg(domNode, options).then(_domUtils.makeImage).then((0, _domUtils.delay)(100)).then(function (image) {
|
138
|
+
var canvas = newCanvas(domNode);
|
139
|
+
canvas.getContext('2d').drawImage(image, 0, 0);
|
140
|
+
return canvas;
|
141
|
+
});
|
142
|
+
function newCanvas(dNode) {
|
143
|
+
var canvas = _document["default"].createElement('canvas');
|
144
|
+
canvas.width = options.width || (0, _domUtils.getWidth)(dNode);
|
145
|
+
canvas.height = options.height || (0, _domUtils.getHeight)(dNode);
|
146
|
+
if (options.bgcolor) {
|
147
|
+
var ctx = canvas.getContext('2d');
|
148
|
+
ctx.fillStyle = options.bgcolor;
|
149
|
+
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
150
|
+
}
|
151
|
+
return canvas;
|
152
|
+
}
|
153
|
+
}
|
154
|
+
function cloneNode(node, filter, root) {
|
155
|
+
if (!root && filter && !filter(node)) {
|
156
|
+
return Promise.resolve();
|
157
|
+
}
|
158
|
+
return Promise.resolve(node).then(makeNodeCopy).then(function (clone) {
|
159
|
+
return cloneChildren(node, clone, filter);
|
160
|
+
}).then(function (clone) {
|
161
|
+
return (0, _domUtils.processClone)(node, clone);
|
162
|
+
});
|
163
|
+
function makeNodeCopy(nd) {
|
164
|
+
if (nd instanceof _window["default"].HTMLCanvasElement) {
|
165
|
+
return (0, _domUtils.makeImage)(nd.toDataURL());
|
166
|
+
}
|
167
|
+
return nd.cloneNode(false);
|
168
|
+
}
|
169
|
+
function cloneChildrenInOrder(parent, arrChildren, flt) {
|
170
|
+
var done = Promise.resolve();
|
171
|
+
arrChildren.forEach(function (child) {
|
172
|
+
done = done.then(function () {
|
173
|
+
return cloneNode(child, flt, null);
|
174
|
+
}).then(function (childClone) {
|
175
|
+
if (childClone) {
|
176
|
+
parent.appendChild(childClone);
|
177
|
+
}
|
178
|
+
});
|
179
|
+
});
|
180
|
+
return done;
|
181
|
+
}
|
182
|
+
function cloneChildren(original, clone, flt) {
|
183
|
+
var children = original.childNodes;
|
184
|
+
if (children.length === 0) {
|
185
|
+
return Promise.resolve(clone);
|
186
|
+
}
|
187
|
+
return cloneChildrenInOrder(clone, (0, _domUtils.asArray)(children), flt).then(function () {
|
188
|
+
return clone;
|
189
|
+
});
|
190
|
+
}
|
191
|
+
}
|
192
|
+
function embedFonts(node) {
|
193
|
+
return fontFaces.resolveAll().then(function (cssText) {
|
194
|
+
var styleNode = _document["default"].createElement('style');
|
195
|
+
node.appendChild(styleNode);
|
196
|
+
styleNode.appendChild(_document["default"].createTextNode(cssText));
|
197
|
+
return node;
|
198
|
+
});
|
199
|
+
}
|
200
|
+
function inlineImages(node) {
|
201
|
+
return images.inlineAll(node).then(function () {
|
202
|
+
return node;
|
203
|
+
});
|
204
|
+
}
|
205
|
+
function makeSvgDataUri(node, width, height) {
|
206
|
+
var escapeXhtmlForWebpack = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
|
207
|
+
return Promise.resolve(node).then(function (nd) {
|
208
|
+
nd.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');
|
209
|
+
var serializedString = new _window["default"].XMLSerializer().serializeToString(nd);
|
210
|
+
var xhtml = escapeXhtmlForWebpack ? (0, _domUtils.escapeXhtml)(serializedString) : serializedString;
|
211
|
+
var foreignObject = "<foreignObject x=\"0\" y=\"0\" width=\"100%\" height=\"100%\">".concat(xhtml, "</foreignObject>");
|
212
|
+
var svgStr = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"".concat(width, "\" height=\"").concat(height, "\">").concat(foreignObject, "</svg>");
|
213
|
+
|
214
|
+
// Optimizing SVGs in data URIs
|
215
|
+
// see https://codepen.io/tigt/post/optimizing-svgs-in-data-uris
|
216
|
+
// the best way of encoding SVG in a data: URI is data:image/svg+xml,[actual data].
|
217
|
+
// We don’t need the ;charset=utf-8 parameter because the given SVG is ASCII.
|
218
|
+
return (0, _miniSvgDataUri["default"])(svgStr);
|
219
|
+
});
|
220
|
+
}
|
221
|
+
function newInliner() {
|
222
|
+
var URL_REGEX = /url\(['"]?([^'"]+?)['"]?\)/g;
|
223
|
+
return {
|
224
|
+
inlineAll: inlineAll,
|
225
|
+
shouldProcess: shouldProcess,
|
226
|
+
impl: {
|
227
|
+
readUrls: readUrls,
|
228
|
+
inline: inline
|
229
|
+
}
|
230
|
+
};
|
231
|
+
function shouldProcess(string) {
|
232
|
+
return string.search(URL_REGEX) !== -1;
|
233
|
+
}
|
234
|
+
function readUrls(string) {
|
235
|
+
var result = [];
|
236
|
+
var match;
|
237
|
+
while ((match = URL_REGEX.exec(string)) !== null) {
|
238
|
+
result.push(match[1]);
|
239
|
+
}
|
240
|
+
return result.filter(function (url) {
|
241
|
+
return !(0, _domUtils.isDataUrl)(url);
|
242
|
+
});
|
243
|
+
}
|
244
|
+
function urlAsRegex(url0) {
|
245
|
+
return new RegExp("(url\\(['\"]?)(".concat((0, _domUtils.escape)(url0), ")(['\"]?\\))"), 'g');
|
246
|
+
}
|
247
|
+
function inline(string, url, baseUrl, get) {
|
248
|
+
return Promise.resolve(url).then(function (ul) {
|
249
|
+
return baseUrl ? (0, _domUtils.resolveUrl)(ul, baseUrl) : ul;
|
250
|
+
}).then(function (ul) {
|
251
|
+
return typeof get === 'function' ? get(ul) : (0, _domUtils.getAndEncode)(ul, domtoimage.impl.options);
|
252
|
+
}).then(function (data) {
|
253
|
+
return (0, _domUtils.dataAsUrl)(data, (0, _domUtils.mimeType)(url));
|
254
|
+
}).then(function (dataUrl) {
|
255
|
+
return string.replace(urlAsRegex(url), "$1".concat(dataUrl, "$3"));
|
256
|
+
});
|
257
|
+
}
|
258
|
+
function inlineAll(string, baseUrl, get) {
|
259
|
+
if (!shouldProcess(string) || (0, _domUtils.isSrcAsDataUrl)(string)) {
|
260
|
+
return Promise.resolve(string);
|
261
|
+
}
|
262
|
+
return Promise.resolve(string).then(readUrls).then(function (urls) {
|
263
|
+
var done = Promise.resolve(string);
|
264
|
+
urls.forEach(function (url) {
|
265
|
+
done = done.then(function (str) {
|
266
|
+
return inline(str, url, baseUrl, get);
|
267
|
+
});
|
268
|
+
});
|
269
|
+
return done;
|
270
|
+
});
|
271
|
+
}
|
272
|
+
}
|
273
|
+
function newFontFaces() {
|
274
|
+
return {
|
275
|
+
resolveAll: resolveAll,
|
276
|
+
impl: {
|
277
|
+
readAll: readAll
|
278
|
+
}
|
279
|
+
};
|
280
|
+
function resolveAll() {
|
281
|
+
return readAll().then(function (webFonts) {
|
282
|
+
return Promise.all(webFonts.map(function (webFont) {
|
283
|
+
return webFont.resolve();
|
284
|
+
}));
|
285
|
+
}).then(function (cssStrings) {
|
286
|
+
return cssStrings.join('\n');
|
287
|
+
});
|
288
|
+
}
|
289
|
+
function readAll() {
|
290
|
+
return Promise.resolve((0, _domUtils.asArray)(_document["default"].styleSheets)).then(loadExternalStyleSheets).then(getCssRules).then(selectWebFontRules).then(function (rules) {
|
291
|
+
return rules.map(newWebFont);
|
292
|
+
});
|
293
|
+
function selectWebFontRules(cssRules) {
|
294
|
+
return cssRules.filter(function (rule) {
|
295
|
+
return rule.type === _window["default"].CSSRule.FONT_FACE_RULE;
|
296
|
+
}).filter(function (rule) {
|
297
|
+
return inliner.shouldProcess(rule.style.getPropertyValue('src'));
|
298
|
+
});
|
299
|
+
}
|
300
|
+
function loadExternalStyleSheets(styleSheets) {
|
301
|
+
return Promise.all(styleSheets.map(function (sheet) {
|
302
|
+
if (sheet.href) {
|
303
|
+
// cloudfont doesn't have allow origin header properly set
|
304
|
+
// error response will remain in cache
|
305
|
+
var cache = sheet.href.includes('uber-fonts') ? 'no-cache' : 'default';
|
306
|
+
return _window["default"].fetch(sheet.href, {
|
307
|
+
credentials: 'omit',
|
308
|
+
cache: cache
|
309
|
+
}).then(function (response) {
|
310
|
+
return response.text();
|
311
|
+
}).then(function (text) {
|
312
|
+
var result = (0, _domUtils.setStyleSheetBaseHref)(text, sheet.href);
|
313
|
+
return (0, _domUtils.toStyleSheet)(result);
|
314
|
+
})["catch"](function (err) {
|
315
|
+
// Handle any error that occurred in any of the previous
|
316
|
+
// promises in the chain. stylesheet failed to load should not stop
|
317
|
+
// the process, hence result in only a warning, instead of reject
|
318
|
+
_console["default"].warn(_constants.IMAGE_EXPORT_ERRORS.styleSheet, sheet.href);
|
319
|
+
_console["default"].log(err);
|
320
|
+
return;
|
321
|
+
});
|
322
|
+
}
|
323
|
+
return Promise.resolve(sheet);
|
324
|
+
}));
|
325
|
+
}
|
326
|
+
function getCssRules(styleSheets) {
|
327
|
+
var cssRules = [];
|
328
|
+
styleSheets.forEach(function (sheet) {
|
329
|
+
// try...catch because browser may not able to enumerate rules for cross-domain sheets
|
330
|
+
if (!sheet) {
|
331
|
+
return;
|
332
|
+
}
|
333
|
+
var rules;
|
334
|
+
try {
|
335
|
+
rules = sheet.rules || sheet.cssRules;
|
336
|
+
} catch (e) {
|
337
|
+
_console["default"].log("'Can't read the css rules of: ".concat(sheet.href), e);
|
338
|
+
return;
|
339
|
+
}
|
340
|
+
if (rules && (0, _typeof2["default"])(rules) === 'object') {
|
341
|
+
try {
|
342
|
+
(0, _domUtils.asArray)(rules || []).forEach(cssRules.push.bind(cssRules));
|
343
|
+
} catch (e) {
|
344
|
+
_console["default"].log("Error while reading CSS rules from ".concat(sheet.href), e);
|
345
|
+
return;
|
346
|
+
}
|
347
|
+
} else {
|
348
|
+
_console["default"].log('getCssRules can not find cssRules');
|
349
|
+
return;
|
350
|
+
}
|
351
|
+
});
|
352
|
+
return cssRules;
|
353
|
+
}
|
354
|
+
function newWebFont(webFontRule) {
|
355
|
+
return {
|
356
|
+
resolve: function resolve() {
|
357
|
+
var baseUrl = (webFontRule.parentStyleSheet || {}).href;
|
358
|
+
return inliner.inlineAll(webFontRule.cssText, baseUrl, null);
|
359
|
+
},
|
360
|
+
src: function src() {
|
361
|
+
return webFontRule.style.getPropertyValue('src');
|
362
|
+
}
|
363
|
+
};
|
364
|
+
}
|
365
|
+
}
|
366
|
+
}
|
367
|
+
function newImages() {
|
368
|
+
return {
|
369
|
+
inlineAll: inlineAll,
|
370
|
+
impl: {
|
371
|
+
newImage: newImage
|
372
|
+
}
|
373
|
+
};
|
374
|
+
function newImage(element) {
|
375
|
+
function inline(get) {
|
376
|
+
if ((0, _domUtils.isDataUrl)(element.src)) {
|
377
|
+
return Promise.resolve();
|
378
|
+
}
|
379
|
+
return Promise.resolve(element.src).then(function (ul) {
|
380
|
+
return typeof get === 'function' ? get(ul) : (0, _domUtils.getAndEncode)(ul, domtoimage.impl.options);
|
381
|
+
}).then(function (data) {
|
382
|
+
return (0, _domUtils.dataAsUrl)(data, (0, _domUtils.mimeType)(element.src));
|
383
|
+
}).then(function (dataUrl) {
|
384
|
+
return new Promise(function (resolve, reject) {
|
385
|
+
element.onload = resolve;
|
386
|
+
element.onerror = reject;
|
387
|
+
element.src = dataUrl;
|
388
|
+
});
|
389
|
+
});
|
390
|
+
}
|
391
|
+
return {
|
392
|
+
inline: inline
|
393
|
+
};
|
394
|
+
}
|
395
|
+
function inlineAll(node) {
|
396
|
+
if (!(node instanceof Element)) {
|
397
|
+
return Promise.resolve(node);
|
398
|
+
}
|
399
|
+
return inlineBackground(node).then(function () {
|
400
|
+
if (node instanceof HTMLImageElement) {
|
401
|
+
return newImage(node).inline(null);
|
402
|
+
}
|
403
|
+
return Promise.all((0, _domUtils.asArray)(node.childNodes).map(function (child) {
|
404
|
+
return inlineAll(child);
|
405
|
+
}));
|
406
|
+
});
|
407
|
+
function inlineBackground(nd) {
|
408
|
+
var background = nd.style.getPropertyValue('background');
|
409
|
+
if (!background) {
|
410
|
+
return Promise.resolve(nd);
|
411
|
+
}
|
412
|
+
return inliner.inlineAll(background, null, null).then(function (inlined) {
|
413
|
+
nd.style.setProperty('background', inlined, nd.style.getPropertyPriority('background'));
|
414
|
+
}).then(function () {
|
415
|
+
return nd;
|
416
|
+
});
|
417
|
+
}
|
418
|
+
}
|
419
|
+
}
|
420
|
+
var _default = exports["default"] = domtoimage;
|
421
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2luZG93IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZG9jdW1lbnQiLCJfY29uc29sZSIsIl9taW5pU3ZnRGF0YVVyaSIsIl9jb25zdGFudHMiLCJfZG9tVXRpbHMiLCJpbmxpbmVyIiwibmV3SW5saW5lciIsImZvbnRGYWNlcyIsIm5ld0ZvbnRGYWNlcyIsImltYWdlcyIsIm5ld0ltYWdlcyIsImRlZmF1bHRPcHRpb25zIiwiaW1hZ2VQbGFjZWhvbGRlciIsInVuZGVmaW5lZCIsImNhY2hlQnVzdCIsImRvbXRvaW1hZ2UiLCJ0b1N2ZyIsInRvUG5nIiwidG9KcGVnIiwidG9CbG9iIiwidG9QaXhlbERhdGEiLCJpbXBsIiwib3B0aW9ucyIsIm5vZGUiLCJjb3B5T3B0aW9ucyIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIm5kIiwiY2xvbmVOb2RlIiwiZmlsdGVyIiwiZW1iZWRGb250cyIsImlubGluZUltYWdlcyIsImFwcGx5T3B0aW9ucyIsImNsb25lIiwibWFrZVN2Z0RhdGFVcmkiLCJ3aWR0aCIsImdldFdpZHRoIiwiaGVpZ2h0IiwiZ2V0SGVpZ2h0IiwiZXNjYXBlWGh0bWxGb3JXZWJwYWNrIiwiYmdjb2xvciIsInN0eWxlIiwiYmFja2dyb3VuZENvbG9yIiwiY29uY2F0IiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJwcm9wZXJ0eSIsImRyYXciLCJjYW52YXMiLCJnZXRDb250ZXh0IiwiZ2V0SW1hZ2VEYXRhIiwiZGF0YSIsInRvRGF0YVVSTCIsInF1YWxpdHkiLCJjYW52YXNUb0Jsb2IiLCJkb21Ob2RlIiwibWFrZUltYWdlIiwiZGVsYXkiLCJpbWFnZSIsIm5ld0NhbnZhcyIsImRyYXdJbWFnZSIsImROb2RlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY3R4IiwiZmlsbFN0eWxlIiwiZmlsbFJlY3QiLCJyb290IiwibWFrZU5vZGVDb3B5IiwiY2xvbmVDaGlsZHJlbiIsInByb2Nlc3NDbG9uZSIsIndpbmRvdyIsIkhUTUxDYW52YXNFbGVtZW50IiwiY2xvbmVDaGlsZHJlbkluT3JkZXIiLCJwYXJlbnQiLCJhcnJDaGlsZHJlbiIsImZsdCIsImRvbmUiLCJjaGlsZCIsImNoaWxkQ2xvbmUiLCJhcHBlbmRDaGlsZCIsIm9yaWdpbmFsIiwiY2hpbGRyZW4iLCJjaGlsZE5vZGVzIiwibGVuZ3RoIiwiYXNBcnJheSIsInJlc29sdmVBbGwiLCJjc3NUZXh0Iiwic3R5bGVOb2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJpbmxpbmVBbGwiLCJhcmd1bWVudHMiLCJzZXRBdHRyaWJ1dGUiLCJzZXJpYWxpemVkU3RyaW5nIiwiWE1MU2VyaWFsaXplciIsInNlcmlhbGl6ZVRvU3RyaW5nIiwieGh0bWwiLCJlc2NhcGVYaHRtbCIsImZvcmVpZ25PYmplY3QiLCJzdmdTdHIiLCJzdmdUb01pbmlEYXRhVVJJIiwiVVJMX1JFR0VYIiwic2hvdWxkUHJvY2VzcyIsInJlYWRVcmxzIiwiaW5saW5lIiwic3RyaW5nIiwic2VhcmNoIiwicmVzdWx0IiwibWF0Y2giLCJleGVjIiwicHVzaCIsInVybCIsImlzRGF0YVVybCIsInVybEFzUmVnZXgiLCJ1cmwwIiwiUmVnRXhwIiwiZXNjYXBlIiwiYmFzZVVybCIsImdldCIsInVsIiwicmVzb2x2ZVVybCIsImdldEFuZEVuY29kZSIsImRhdGFBc1VybCIsIm1pbWVUeXBlIiwiZGF0YVVybCIsInJlcGxhY2UiLCJpc1NyY0FzRGF0YVVybCIsInVybHMiLCJzdHIiLCJyZWFkQWxsIiwid2ViRm9udHMiLCJhbGwiLCJtYXAiLCJ3ZWJGb250IiwiY3NzU3RyaW5ncyIsImpvaW4iLCJzdHlsZVNoZWV0cyIsImxvYWRFeHRlcm5hbFN0eWxlU2hlZXRzIiwiZ2V0Q3NzUnVsZXMiLCJzZWxlY3RXZWJGb250UnVsZXMiLCJydWxlcyIsIm5ld1dlYkZvbnQiLCJjc3NSdWxlcyIsInJ1bGUiLCJ0eXBlIiwiQ1NTUnVsZSIsIkZPTlRfRkFDRV9SVUxFIiwiZ2V0UHJvcGVydHlWYWx1ZSIsInNoZWV0IiwiaHJlZiIsImNhY2hlIiwiaW5jbHVkZXMiLCJmZXRjaCIsImNyZWRlbnRpYWxzIiwicmVzcG9uc2UiLCJ0ZXh0Iiwic2V0U3R5bGVTaGVldEJhc2VIcmVmIiwidG9TdHlsZVNoZWV0IiwiZXJyIiwiQ29uc29sZSIsIndhcm4iLCJJTUFHRV9FWFBPUlRfRVJST1JTIiwic3R5bGVTaGVldCIsImxvZyIsImUiLCJfdHlwZW9mMiIsImJpbmQiLCJ3ZWJGb250UnVsZSIsInBhcmVudFN0eWxlU2hlZXQiLCJzcmMiLCJuZXdJbWFnZSIsImVsZW1lbnQiLCJyZWplY3QiLCJvbmxvYWQiLCJvbmVycm9yIiwiRWxlbWVudCIsImlubGluZUJhY2tncm91bmQiLCJIVE1MSW1hZ2VFbGVtZW50IiwiYmFja2dyb3VuZCIsImlubGluZWQiLCJzZXRQcm9wZXJ0eSIsImdldFByb3BlcnR5UHJpb3JpdHkiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvZG9tLXRvLWltYWdlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8qKlxuICogVGhpcyBmaWxlIGlzIGNvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS90c2F5ZW4vZG9tLXRvLWltYWdlXG4gKiBNb2RpZmllZCBieSBoZXNoYW4wMTMxIHRvIGFsbG93IGxvYWRpbmcgZXh0ZXJuYWwgc3R5bGVzaGVldHMgYW5kIGlubGluZSB3ZWJmb250c1xuICovXG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQgZG9jdW1lbnQgZnJvbSAnZ2xvYmFsL2RvY3VtZW50JztcbmltcG9ydCBDb25zb2xlIGZyb20gJ2dsb2JhbC9jb25zb2xlJztcbmltcG9ydCBzdmdUb01pbmlEYXRhVVJJIGZyb20gJ21pbmktc3ZnLWRhdGEtdXJpJztcbmltcG9ydCB7SU1BR0VfRVhQT1JUX0VSUk9SU30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG5pbXBvcnQge1xuICBjYW52YXNUb0Jsb2IsXG4gIGVzY2FwZSxcbiAgZXNjYXBlWGh0bWwsXG4gIGRlbGF5LFxuICBwcm9jZXNzQ2xvbmUsXG4gIGFzQXJyYXksXG4gIG1ha2VJbWFnZSxcbiAgbWltZVR5cGUsXG4gIGRhdGFBc1VybCxcbiAgaXNEYXRhVXJsLFxuICBpc1NyY0FzRGF0YVVybCxcbiAgcmVzb2x2ZVVybCxcbiAgZ2V0V2lkdGgsXG4gIGdldEhlaWdodCxcbiAgZ2V0QW5kRW5jb2RlLFxuICBzZXRTdHlsZVNoZWV0QmFzZUhyZWYsXG4gIHRvU3R5bGVTaGVldFxufSBmcm9tICcuL2RvbS11dGlscyc7XG5cbmNvbnN0IGlubGluZXIgPSBuZXdJbmxpbmVyKCk7XG5jb25zdCBmb250RmFjZXMgPSBuZXdGb250RmFjZXMoKTtcbmNvbnN0IGltYWdlcyA9IG5ld0ltYWdlcygpO1xuLy8gRGVmYXVsdCBpbXBsIG9wdGlvbnNcbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAvLyBEZWZhdWx0IGlzIHRvIGZhaWwgb24gZXJyb3IsIG5vIHBsYWNlaG9sZGVyXG4gIGltYWdlUGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgLy8gRGVmYXVsdCBjYWNoZSBidXN0IGlzIGZhbHNlLCBpdCB3aWxsIHVzZSB0aGUgY2FjaGVcbiAgY2FjaGVCdXN0OiBmYWxzZVxufTtcblxuY29uc3QgZG9tdG9pbWFnZSA9IHtcbiAgdG9TdmcsXG4gIHRvUG5nLFxuICB0b0pwZWcsXG4gIHRvQmxvYixcbiAgdG9QaXhlbERhdGEsXG4gIGltcGw6IHtcbiAgICBmb250RmFjZXMsXG4gICAgaW1hZ2VzLFxuICAgIGlubGluZXIsXG4gICAgb3B0aW9uczoge30gYXMgYW55XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIERPTSBOb2RlIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmZpbHRlcl0gLSBTaG91bGQgcmV0dXJuIHRydWUgaWYgcGFzc2VkIG5vZGUgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXRcbiAqICAgICAgICAgIChleGNsdWRpbmcgbm9kZSBtZWFucyBleGNsdWRpbmcgaXQncyBjaGlsZHJlbiBhcyB3ZWxsKS4gTm90IGNhbGxlZCBvbiB0aGUgcm9vdCBub2RlLlxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmJnY29sb3JdIC0gY29sb3IgZm9yIHRoZSBiYWNrZ3JvdW5kLCBhbnkgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlLlxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLndpZHRoXSAtIHdpZHRoIHRvIGJlIGFwcGxpZWQgdG8gbm9kZSBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmhlaWdodF0gLSBoZWlnaHQgdG8gYmUgYXBwbGllZCB0byBub2RlIGJlZm9yZSByZW5kZXJpbmcuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuc3R5bGVdIC0gYW4gb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgdG8gYmUgY29waWVkIHRvIG5vZGUncyBzdHlsZSBiZWZvcmUgcmVuZGVyaW5nLlxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLnF1YWxpdHldIC0gYSBOdW1iZXIgYmV0d2VlbiAwIGFuZCAxIGluZGljYXRpbmcgaW1hZ2UgcXVhbGl0eSAoYXBwbGljYWJsZSB0byBKUEVHIG9ubHkpLCBkZWZhdWx0cyB0byAxLjAuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmVzY2FwZVhodG1sRm9yV2VicGFja10gLSB3aGV0aGVyIHRvIGFwcGx5IGZpeCBmb3IgdWdsaWZ5IGVycm9yIGluIGRvbS10by1pbWFnZSAoc2hvdWxkIGJlIHRydWUgZm9yIHdlYnBhY2sgYnVpbGRzKSwgZGVmYXVsdHMgdG8gdHJ1ZS5cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5pbWFnZVBsYWNlaG9sZGVyXSAtIGRhdGFVUkwgdG8gdXNlIGFzIGEgcGxhY2Vob2xkZXIgZm9yIGZhaWxlZCBpbWFnZXMsIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIGZhaWwgZmFzdCBvbiBpbWFnZXMgd2UgY2FuJ3QgZmV0Y2hcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuY2FjaGVCdXN0XSAtIHNldCB0byB0cnVlIHRvIGNhY2hlIGJ1c3QgYnkgYXBwZW5kaW5nIHRoZSB0aW1lIHRvIHRoZSByZXF1ZXN0IHVybFxuICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFNWRyBpbWFnZSBkYXRhIFVSTFxuICogKi9cbmZ1bmN0aW9uIHRvU3ZnKG5vZGUsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGNvcHlPcHRpb25zKG9wdGlvbnMpO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5vZGUpXG4gICAgLnRoZW4obmQgPT4gY2xvbmVOb2RlKG5kLCBvcHRpb25zLmZpbHRlciwgdHJ1ZSkpXG4gICAgLnRoZW4oZW1iZWRGb250cylcbiAgICAudGhlbihpbmxpbmVJbWFnZXMpXG4gICAgLnRoZW4oYXBwbHlPcHRpb25zKVxuICAgIC50aGVuKGNsb25lID0+XG4gICAgICBtYWtlU3ZnRGF0YVVyaShcbiAgICAgICAgY2xvbmUsXG4gICAgICAgIG9wdGlvbnMud2lkdGggfHwgZ2V0V2lkdGgobm9kZSksXG4gICAgICAgIG9wdGlvbnMuaGVpZ2h0IHx8IGdldEhlaWdodChub2RlKSxcbiAgICAgICAgb3B0aW9ucy5lc2NhcGVYaHRtbEZvcldlYnBhY2tcbiAgICAgIClcbiAgICApO1xuXG4gIGZ1bmN0aW9uIGFwcGx5T3B0aW9ucyhjbG9uZSkge1xuICAgIGlmIChvcHRpb25zLmJnY29sb3IpIGNsb25lLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IG9wdGlvbnMuYmdjb2xvcjtcblxuICAgIGlmIChvcHRpb25zLndpZHRoKSBjbG9uZS5zdHlsZS53aWR0aCA9IGAke29wdGlvbnMud2lkdGh9cHhgO1xuICAgIGlmIChvcHRpb25zLmhlaWdodCkgY2xvbmUuc3R5bGUuaGVpZ2h0ID0gYCR7b3B0aW9ucy5oZWlnaHR9cHhgO1xuXG4gICAgaWYgKG9wdGlvbnMuc3R5bGUpXG4gICAgICBPYmplY3Qua2V5cyhvcHRpb25zLnN0eWxlKS5mb3JFYWNoKHByb3BlcnR5ID0+IHtcbiAgICAgICAgY2xvbmUuc3R5bGVbcHJvcGVydHldID0gb3B0aW9ucy5zdHlsZVtwcm9wZXJ0eV07XG4gICAgICB9KTtcblxuICAgIHJldHVybiBjbG9uZTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBET00gTm9kZSBvYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFJlbmRlcmluZyBvcHRpb25zXG4gKiBAcmV0dXJuIHtQcm9taXNlfSAtIEEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aXRoIGEgVWludDhBcnJheSBjb250YWluaW5nIFJHQkEgcGl4ZWwgZGF0YS5cbiAqICovXG5mdW5jdGlvbiB0b1BpeGVsRGF0YShub2RlLCBvcHRpb25zKSB7XG4gIHJldHVybiBkcmF3KG5vZGUsIG9wdGlvbnMgfHwge30pLnRoZW4oXG4gICAgY2FudmFzID0+IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmdldEltYWdlRGF0YSgwLCAwLCBnZXRXaWR0aChub2RlKSwgZ2V0SGVpZ2h0KG5vZGUpKS5kYXRhXG4gICk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIERPTSBOb2RlIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnNcbiAqIEByZXR1cm4ge1Byb21pc2V9IC0gQSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggYSBQTkcgaW1hZ2UgZGF0YSBVUkxcbiAqICovXG5mdW5jdGlvbiB0b1BuZyhub2RlLCBvcHRpb25zKSB7XG4gIHJldHVybiBkcmF3KG5vZGUsIG9wdGlvbnMgfHwge30pLnRoZW4oY2FudmFzID0+IGNhbnZhcy50b0RhdGFVUkwoKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIERPTSBOb2RlIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnNcbiAqIEByZXR1cm4ge1Byb21pc2V9IC0gQSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggYSBKUEVHIGltYWdlIGRhdGEgVVJMXG4gKiAqL1xuZnVuY3Rpb24gdG9KcGVnKG5vZGUsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHJldHVybiBkcmF3KG5vZGUsIG9wdGlvbnMpLnRoZW4oY2FudmFzID0+IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCBvcHRpb25zLnF1YWxpdHkgfHwgMS4wKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIERPTSBOb2RlIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnNcbiAqIEByZXR1cm4ge1Byb21pc2V9IC0gQSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggYSBQTkcgaW1hZ2UgYmxvYlxuICogKi9cbmZ1bmN0aW9uIHRvQmxvYihub2RlLCBvcHRpb25zKSB7XG4gIHJldHVybiBkcmF3KG5vZGUsIG9wdGlvbnMgfHwge30pLnRoZW4oY2FudmFzVG9CbG9iKTtcbn1cblxuZnVuY3Rpb24gY29weU9wdGlvbnMob3B0aW9ucykge1xuICAvLyBDb3B5IG9wdGlvbnMgdG8gaW1wbCBvcHRpb25zIGZvciB1c2UgaW4gaW1wbFxuICBpZiAodHlwZW9mIG9wdGlvbnMuaW1hZ2VQbGFjZWhvbGRlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBkb210b2ltYWdlLmltcGwub3B0aW9ucy5pbWFnZVBsYWNlaG9sZGVyID0gZGVmYXVsdE9wdGlvbnMuaW1hZ2VQbGFjZWhvbGRlcjtcbiAgfSBlbHNlIHtcbiAgICBkb210b2ltYWdlLmltcGwub3B0aW9ucy5pbWFnZVBsYWNlaG9sZGVyID0gb3B0aW9ucy5pbWFnZVBsYWNlaG9sZGVyO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmNhY2hlQnVzdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBkb210b2ltYWdlLmltcGwub3B0aW9ucy5jYWNoZUJ1c3QgPSBkZWZhdWx0T3B0aW9ucy5jYWNoZUJ1c3Q7XG4gIH0gZWxzZSB7XG4gICAgZG9tdG9pbWFnZS5pbXBsLm9wdGlvbnMuY2FjaGVCdXN0ID0gb3B0aW9ucy5jYWNoZUJ1c3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gZHJhdyhkb21Ob2RlLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b1N2Zyhkb21Ob2RlLCBvcHRpb25zKVxuICAgIC50aGVuKG1ha2VJbWFnZSlcbiAgICAudGhlbihkZWxheSgxMDApKVxuICAgIC50aGVuKGltYWdlID0+IHtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IG5ld0NhbnZhcyhkb21Ob2RlKTtcbiAgICAgIGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmRyYXdJbWFnZShpbWFnZSwgMCwgMCk7XG4gICAgICByZXR1cm4gY2FudmFzO1xuICAgIH0pO1xuXG4gIGZ1bmN0aW9uIG5ld0NhbnZhcyhkTm9kZSkge1xuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNhbnZhcy53aWR0aCA9IG9wdGlvbnMud2lkdGggfHwgZ2V0V2lkdGgoZE5vZGUpO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBvcHRpb25zLmhlaWdodCB8fCBnZXRIZWlnaHQoZE5vZGUpO1xuXG4gICAgaWYgKG9wdGlvbnMuYmdjb2xvcikge1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICBjdHguZmlsbFN0eWxlID0gb3B0aW9ucy5iZ2NvbG9yO1xuICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbnZhcztcbiAgfVxufVxuXG5mdW5jdGlvbiBjbG9uZU5vZGUobm9kZSwgZmlsdGVyLCByb290KSB7XG4gIGlmICghcm9vdCAmJiBmaWx0ZXIgJiYgIWZpbHRlcihub2RlKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUobm9kZSlcbiAgICAudGhlbihtYWtlTm9kZUNvcHkpXG4gICAgLnRoZW4oY2xvbmUgPT4gY2xvbmVDaGlsZHJlbihub2RlLCBjbG9uZSwgZmlsdGVyKSlcbiAgICAudGhlbihjbG9uZSA9PiBwcm9jZXNzQ2xvbmUobm9kZSwgY2xvbmUpKTtcblxuICBmdW5jdGlvbiBtYWtlTm9kZUNvcHkobmQpIHtcbiAgICBpZiAobmQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQpIHtcbiAgICAgIHJldHVybiBtYWtlSW1hZ2UobmQudG9EYXRhVVJMKCkpO1xuICAgIH1cbiAgICByZXR1cm4gbmQuY2xvbmVOb2RlKGZhbHNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lQ2hpbGRyZW5Jbk9yZGVyKHBhcmVudCwgYXJyQ2hpbGRyZW4sIGZsdCkge1xuICAgIGxldCBkb25lID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgYXJyQ2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICBkb25lID0gZG9uZVxuICAgICAgICAudGhlbigoKSA9PiBjbG9uZU5vZGUoY2hpbGQsIGZsdCwgbnVsbCkpXG4gICAgICAgIC50aGVuKGNoaWxkQ2xvbmUgPT4ge1xuICAgICAgICAgIGlmIChjaGlsZENsb25lKSB7XG4gICAgICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoY2hpbGRDbG9uZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gZG9uZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lQ2hpbGRyZW4ob3JpZ2luYWwsIGNsb25lLCBmbHQpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IG9yaWdpbmFsLmNoaWxkTm9kZXM7XG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjbG9uZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lQ2hpbGRyZW5Jbk9yZGVyKGNsb25lLCBhc0FycmF5KGNoaWxkcmVuKSwgZmx0KS50aGVuKCgpID0+IGNsb25lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbWJlZEZvbnRzKG5vZGUpIHtcbiAgcmV0dXJuIGZvbnRGYWNlcy5yZXNvbHZlQWxsKCkudGhlbihjc3NUZXh0ID0+IHtcbiAgICBjb25zdCBzdHlsZU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIG5vZGUuYXBwZW5kQ2hpbGQoc3R5bGVOb2RlKTtcbiAgICBzdHlsZU5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzVGV4dCkpO1xuICAgIHJldHVybiBub2RlO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaW5saW5lSW1hZ2VzKG5vZGUpIHtcbiAgcmV0dXJuIGltYWdlcy5pbmxpbmVBbGwobm9kZSkudGhlbigoKSA9PiBub2RlKTtcbn1cblxuZnVuY3Rpb24gbWFrZVN2Z0RhdGFVcmkobm9kZSwgd2lkdGgsIGhlaWdodCwgZXNjYXBlWGh0bWxGb3JXZWJwYWNrID0gdHJ1ZSkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5vZGUpLnRoZW4obmQgPT4ge1xuICAgIG5kLnNldEF0dHJpYnV0ZSgneG1sbnMnLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRTdHJpbmcgPSBuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhuZCk7XG5cbiAgICBjb25zdCB4aHRtbCA9IGVzY2FwZVhodG1sRm9yV2VicGFjayA/IGVzY2FwZVhodG1sKHNlcmlhbGl6ZWRTdHJpbmcpIDogc2VyaWFsaXplZFN0cmluZztcbiAgICBjb25zdCBmb3JlaWduT2JqZWN0ID0gYDxmb3JlaWduT2JqZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCI+JHt4aHRtbH08L2ZvcmVpZ25PYmplY3Q+YDtcbiAgICBjb25zdCBzdmdTdHIgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIke3dpZHRofVwiIGhlaWdodD1cIiR7aGVpZ2h0fVwiPiR7Zm9yZWlnbk9iamVjdH08L3N2Zz5gO1xuXG4gICAgLy8gT3B0aW1pemluZyBTVkdzIGluIGRhdGEgVVJJc1xuICAgIC8vIHNlZSBodHRwczovL2NvZGVwZW4uaW8vdGlndC9wb3N0L29wdGltaXppbmctc3Zncy1pbi1kYXRhLXVyaXNcbiAgICAvLyB0aGUgYmVzdCB3YXkgb2YgZW5jb2RpbmcgU1ZHIGluIGEgZGF0YTogVVJJIGlzIGRhdGE6aW1hZ2Uvc3ZnK3htbCxbYWN0dWFsIGRhdGFdLlxuICAgIC8vIFdlIGRvbuKAmXQgbmVlZCB0aGUgO2NoYXJzZXQ9dXRmLTggcGFyYW1ldGVyIGJlY2F1c2UgdGhlIGdpdmVuIFNWRyBpcyBBU0NJSS5cbiAgICByZXR1cm4gc3ZnVG9NaW5pRGF0YVVSSShzdmdTdHIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbmV3SW5saW5lcigpIHtcbiAgY29uc3QgVVJMX1JFR0VYID0gL3VybFxcKFsnXCJdPyhbXidcIl0rPylbJ1wiXT9cXCkvZztcblxuICByZXR1cm4ge1xuICAgIGlubGluZUFsbCxcbiAgICBzaG91bGRQcm9jZXNzLFxuICAgIGltcGw6IHtcbiAgICAgIHJlYWRVcmxzLFxuICAgICAgaW5saW5lXG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHNob3VsZFByb2Nlc3Moc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5zZWFyY2goVVJMX1JFR0VYKSAhPT0gLTE7XG4gIH1cblxuICBmdW5jdGlvbiByZWFkVXJscyhzdHJpbmcpIHtcbiAgICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IG1hdGNoOiBudWxsIHwgUmVnRXhwRXhlY0FycmF5O1xuICAgIHdoaWxlICgobWF0Y2ggPSBVUkxfUkVHRVguZXhlYyhzdHJpbmcpKSAhPT0gbnVsbCkge1xuICAgICAgcmVzdWx0LnB1c2gobWF0Y2hbMV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LmZpbHRlcih1cmwgPT4ge1xuICAgICAgcmV0dXJuICFpc0RhdGFVcmwodXJsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVybEFzUmVnZXgodXJsMCkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGAodXJsXFxcXChbJ1wiXT8pKCR7ZXNjYXBlKHVybDApfSkoWydcIl0/XFxcXCkpYCwgJ2cnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlubGluZShzdHJpbmcsIHVybCwgYmFzZVVybCwgZ2V0KSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1cmwpXG4gICAgICAudGhlbih1bCA9PiAoYmFzZVVybCA/IHJlc29sdmVVcmwodWwsIGJhc2VVcmwpIDogdWwpKVxuICAgICAgLnRoZW4odWwgPT4gKHR5cGVvZiBnZXQgPT09ICdmdW5jdGlvbicgPyBnZXQodWwpIDogZ2V0QW5kRW5jb2RlKHVsLCBkb210b2ltYWdlLmltcGwub3B0aW9ucykpKVxuICAgICAgLnRoZW4oZGF0YSA9PiBkYXRhQXNVcmwoZGF0YSwgbWltZVR5cGUodXJsKSkpXG4gICAgICAudGhlbihkYXRhVXJsID0+IHN0cmluZy5yZXBsYWNlKHVybEFzUmVnZXgodXJsKSwgYCQxJHtkYXRhVXJsfSQzYCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5saW5lQWxsKHN0cmluZywgYmFzZVVybCwgZ2V0KSB7XG4gICAgaWYgKCFzaG91bGRQcm9jZXNzKHN0cmluZykgfHwgaXNTcmNBc0RhdGFVcmwoc3RyaW5nKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN0cmluZylcbiAgICAgIC50aGVuKHJlYWRVcmxzKVxuICAgICAgLnRoZW4odXJscyA9PiB7XG4gICAgICAgIGxldCBkb25lID0gUHJvbWlzZS5yZXNvbHZlKHN0cmluZyk7XG4gICAgICAgIHVybHMuZm9yRWFjaCh1cmwgPT4ge1xuICAgICAgICAgIGRvbmUgPSBkb25lLnRoZW4oc3RyID0+IGlubGluZShzdHIsIHVybCwgYmFzZVVybCwgZ2V0KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZG9uZTtcbiAgICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5ld0ZvbnRGYWNlcygpIHtcbiAgcmV0dXJuIHtcbiAgICByZXNvbHZlQWxsLFxuICAgIGltcGw6IHtyZWFkQWxsfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHJlc29sdmVBbGwoKSB7XG4gICAgcmV0dXJuIHJlYWRBbGwoKVxuICAgICAgLnRoZW4od2ViRm9udHMgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwod2ViRm9udHMubWFwKHdlYkZvbnQgPT4gd2ViRm9udC5yZXNvbHZlKCkpKTtcbiAgICAgIH0pXG4gICAgICAudGhlbihjc3NTdHJpbmdzID0+IGNzc1N0cmluZ3Muam9pbignXFxuJykpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEFsbCgpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGFzQXJyYXkoZG9jdW1lbnQuc3R5bGVTaGVldHMpKVxuICAgICAgLnRoZW4obG9hZEV4dGVybmFsU3R5bGVTaGVldHMpXG4gICAgICAudGhlbihnZXRDc3NSdWxlcylcbiAgICAgIC50aGVuKHNlbGVjdFdlYkZvbnRSdWxlcylcbiAgICAgIC50aGVuKHJ1bGVzID0+IHJ1bGVzLm1hcChuZXdXZWJGb250KSk7XG5cbiAgICBmdW5jdGlvbiBzZWxlY3RXZWJGb250UnVsZXMoY3NzUnVsZXMpIHtcbiAgICAgIHJldHVybiBjc3NSdWxlc1xuICAgICAgICAuZmlsdGVyKHJ1bGUgPT4gcnVsZS50eXBlID09PSB3aW5kb3cuQ1NTUnVsZS5GT05UX0ZBQ0VfUlVMRSlcbiAgICAgICAgLmZpbHRlcihydWxlID0+IGlubGluZXIuc2hvdWxkUHJvY2VzcyhydWxlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3NyYycpKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9hZEV4dGVybmFsU3R5bGVTaGVldHMoc3R5bGVTaGVldHMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgc3R5bGVTaGVldHMubWFwKHNoZWV0ID0+IHtcbiAgICAgICAgICBpZiAoc2hlZXQuaHJlZikge1xuICAgICAgICAgICAgLy8gY2xvdWRmb250IGRvZXNuJ3QgaGF2ZSBhbGxvdyBvcmlnaW4gaGVhZGVyIHByb3Blcmx5IHNldFxuICAgICAgICAgICAgLy8gZXJyb3IgcmVzcG9uc2Ugd2lsbCByZW1haW4gaW4gY2FjaGVcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlID0gc2hlZXQuaHJlZi5pbmNsdWRlcygndWJlci1mb250cycpID8gJ25vLWNhY2hlJyA6ICdkZWZhdWx0JztcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3dcbiAgICAgICAgICAgICAgLmZldGNoKHNoZWV0LmhyZWYsIHtjcmVkZW50aWFsczogJ29taXQnLCBjYWNoZX0pXG4gICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLnRleHQoKSlcbiAgICAgICAgICAgICAgLnRoZW4odGV4dCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc2V0U3R5bGVTaGVldEJhc2VIcmVmKHRleHQsIHNoZWV0LmhyZWYpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0b1N0eWxlU2hlZXQocmVzdWx0KTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIGFueSBlcnJvciB0aGF0IG9jY3VycmVkIGluIGFueSBvZiB0aGUgcHJldmlvdXNcbiAgICAgICAgICAgICAgICAvLyBwcm9taXNlcyBpbiB0aGUgY2hhaW4uIHN0eWxlc2hlZXQgZmFpbGVkIHRvIGxvYWQgc2hvdWxkIG5vdCBzdG9wXG4gICAgICAgICAgICAgICAgLy8gdGhlIHByb2Nlc3MsIGhlbmNlIHJlc3VsdCBpbiBvbmx5IGEgd2FybmluZywgaW5zdGVhZCBvZiByZWplY3RcbiAgICAgICAgICAgICAgICBDb25zb2xlLndhcm4oSU1BR0VfRVhQT1JUX0VSUk9SUy5zdHlsZVNoZWV0LCBzaGVldC5ocmVmKTtcbiAgICAgICAgICAgICAgICBDb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoc2hlZXQpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRDc3NSdWxlcyhzdHlsZVNoZWV0cykge1xuICAgICAgY29uc3QgY3NzUnVsZXM6IGFueVtdID0gW107XG4gICAgICBzdHlsZVNoZWV0cy5mb3JFYWNoKHNoZWV0ID0+IHtcbiAgICAgICAgLy8gdHJ5Li4uY2F0Y2ggYmVjYXVzZSBicm93c2VyIG1heSBub3QgYWJsZSB0byBlbnVtZXJhdGUgcnVsZXMgZm9yIGNyb3NzLWRvbWFpbiBzaGVldHNcbiAgICAgICAgaWYgKCFzaGVldCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcnVsZXM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcnVsZXMgPSBzaGVldC5ydWxlcyB8fCBzaGVldC5jc3NSdWxlcztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIENvbnNvbGUubG9nKGAnQ2FuJ3QgcmVhZCB0aGUgY3NzIHJ1bGVzIG9mOiAke3NoZWV0LmhyZWZ9YCwgZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJ1bGVzICYmIHR5cGVvZiBydWxlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXNBcnJheShydWxlcyB8fCBbXSkuZm9yRWFjaChjc3NSdWxlcy5wdXNoLmJpbmQoY3NzUnVsZXMpKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBDb25zb2xlLmxvZyhgRXJyb3Igd2hpbGUgcmVhZGluZyBDU1MgcnVsZXMgZnJvbSAke3NoZWV0LmhyZWZ9YCwgZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIENvbnNvbGUubG9nKCdnZXRDc3NSdWxlcyBjYW4gbm90IGZpbmQgY3NzUnVsZXMnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY3NzUnVsZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbmV3V2ViRm9udCh3ZWJGb250UnVsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzb2x2ZTogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSAod2ViRm9udFJ1bGUucGFyZW50U3R5bGVTaGVldCB8fCB7fSkuaHJlZjtcbiAgICAgICAgICByZXR1cm4gaW5saW5lci5pbmxpbmVBbGwod2ViRm9udFJ1bGUuY3NzVGV4dCwgYmFzZVVybCwgbnVsbCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNyYzogKCkgPT4gd2ViRm9udFJ1bGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnc3JjJylcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG5ld0ltYWdlcygpIHtcbiAgcmV0dXJuIHtcbiAgICBpbmxpbmVBbGwsXG4gICAgaW1wbDoge1xuICAgICAgbmV3SW1hZ2VcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gbmV3SW1hZ2UoZWxlbWVudCkge1xuICAgIGZ1bmN0aW9uIGlubGluZShnZXQpIHtcbiAgICAgIGlmIChpc0RhdGFVcmwoZWxlbWVudC5zcmMpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZWxlbWVudC5zcmMpXG4gICAgICAgIC50aGVuKHVsID0+XG4gICAgICAgICAgdHlwZW9mIGdldCA9PT0gJ2Z1bmN0aW9uJyA/IGdldCh1bCkgOiBnZXRBbmRFbmNvZGUodWwsIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zKVxuICAgICAgICApXG4gICAgICAgIC50aGVuKGRhdGEgPT4gZGF0YUFzVXJsKGRhdGEsIG1pbWVUeXBlKGVsZW1lbnQuc3JjKSkpXG4gICAgICAgIC50aGVuKFxuICAgICAgICAgIGRhdGFVcmwgPT5cbiAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgZWxlbWVudC5vbmxvYWQgPSByZXNvbHZlO1xuICAgICAgICAgICAgICBlbGVtZW50Lm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgICAgIGVsZW1lbnQuc3JjID0gZGF0YVVybDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlubGluZVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBpbmxpbmVBbGwobm9kZSkge1xuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5saW5lQmFja2dyb3VuZChub2RlKS50aGVuKCgpID0+IHtcbiAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gbmV3SW1hZ2Uobm9kZSkuaW5saW5lKG51bGwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGFzQXJyYXkobm9kZS5jaGlsZE5vZGVzKS5tYXAoY2hpbGQgPT4gaW5saW5lQWxsKGNoaWxkKSkpO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gaW5saW5lQmFja2dyb3VuZChuZCkge1xuICAgICAgY29uc3QgYmFja2dyb3VuZCA9IG5kLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQnKTtcblxuICAgICAgaWYgKCFiYWNrZ3JvdW5kKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5saW5lclxuICAgICAgICAuaW5saW5lQWxsKGJhY2tncm91bmQsIG51bGwsIG51bGwpXG4gICAgICAgIC50aGVuKGlubGluZWQgPT4ge1xuICAgICAgICAgIG5kLnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kJywgaW5saW5lZCwgbmQuc3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eSgnYmFja2dyb3VuZCcpKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4gbmQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBkb210b2ltYWdlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFFBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLGVBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFVBQUEsR0FBQUosT0FBQTtBQUVBLElB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
|
@@ -0,0 +1,23 @@
|
|
1
|
+
export declare function processClone(original: any, clone: any): any;
|
2
|
+
/** **
|
3
|
+
* UTILS
|
4
|
+
****/
|
5
|
+
export declare function asArray(arrayLike: any): any[];
|
6
|
+
export declare function fourRandomChars(): string;
|
7
|
+
export declare function uid(): string;
|
8
|
+
export declare function makeImage(uri: any): Promise<unknown>;
|
9
|
+
export declare function isDataUrl(url: any): boolean;
|
10
|
+
export declare function mimeType(url: any): any;
|
11
|
+
export declare function dataAsUrl(content: any, type: any): string;
|
12
|
+
export declare function escape(string: any): any;
|
13
|
+
export declare function delay(ms: any): (arg: any) => Promise<unknown>;
|
14
|
+
export declare function isSrcAsDataUrl(text: any): boolean;
|
15
|
+
export declare function canvasToBlob(canvas: any): Promise<unknown>;
|
16
|
+
export declare function escapeXhtml(string: any): any;
|
17
|
+
export declare function getWidth(node: any): any;
|
18
|
+
export declare function getHeight(node: any): any;
|
19
|
+
export declare function resolveUrl(url: any, baseUrl: any): any;
|
20
|
+
export declare function getAndEncode(url: any, options: any): Promise<unknown>;
|
21
|
+
export declare function concatAndResolveUrl(base: any, url: any): string;
|
22
|
+
export declare function setStyleSheetBaseHref(text: any, base: any): any;
|
23
|
+
export declare function toStyleSheet(text: any): any;
|