@mnaoumov/typescript-lib 0.0.0 → 1.0.1
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/@types/debug/package.json +4 -0
- package/LICENSE +21 -0
- package/README.md +15 -1
- package/dist/lib/cjs/@types/debug.d.cts +21 -0
- package/dist/lib/cjs/abort-controller.cjs +144 -0
- package/dist/lib/cjs/abort-controller.d.cts +136 -0
- package/dist/lib/cjs/aggregate-error.cjs +40 -0
- package/dist/lib/cjs/aggregate-error.d.cts +24 -0
- package/dist/lib/cjs/array-buffer.cjs +38 -0
- package/dist/lib/cjs/array-buffer.d.cts +16 -0
- package/dist/lib/cjs/array.cjs +76 -0
- package/dist/lib/cjs/array.d.cts +46 -0
- package/dist/lib/cjs/async-events.cjs +408 -0
- package/dist/lib/cjs/async-events.d.cts +456 -0
- package/dist/lib/cjs/async-operation-hook.cjs +55 -0
- package/dist/lib/cjs/async-operation-hook.d.cts +59 -0
- package/dist/lib/cjs/async.cjs +463 -0
- package/dist/lib/cjs/async.d.cts +415 -0
- package/dist/lib/cjs/beeper.cjs +68 -0
- package/dist/lib/cjs/beeper.d.cts +21 -0
- package/dist/lib/cjs/blob.cjs +102 -0
- package/dist/lib/cjs/blob.d.cts +60 -0
- package/dist/lib/cjs/bytes.cjs +56 -0
- package/dist/lib/cjs/bytes.d.cts +17 -0
- package/dist/lib/cjs/debug-controller.cjs +22 -0
- package/dist/lib/cjs/debug-controller.d.cts +87 -0
- package/dist/lib/cjs/debug.cjs +204 -0
- package/dist/lib/cjs/debug.d.cts +66 -0
- package/dist/lib/cjs/desktop-zip-extractor.cjs +157 -0
- package/dist/lib/cjs/desktop-zip-extractor.d.cts +96 -0
- package/dist/lib/cjs/disposable.cjs +364 -0
- package/dist/lib/cjs/disposable.d.cts +387 -0
- package/dist/lib/cjs/enum.cjs +42 -0
- package/dist/lib/cjs/enum.d.cts +24 -0
- package/dist/lib/cjs/error.cjs +239 -0
- package/dist/lib/cjs/error.d.cts +182 -0
- package/dist/lib/cjs/function.cjs +83 -0
- package/dist/lib/cjs/function.d.cts +128 -0
- package/dist/lib/cjs/html-element.cjs +283 -0
- package/dist/lib/cjs/html-element.d.cts +200 -0
- package/dist/lib/cjs/index.cjs +137 -0
- package/dist/lib/cjs/index.d.cts +33 -0
- package/dist/lib/cjs/jpeg-metadata.cjs +170 -0
- package/dist/lib/cjs/jpeg-metadata.d.cts +42 -0
- package/dist/lib/cjs/library-references.d.cts +2 -0
- package/dist/lib/cjs/library.cjs +100 -0
- package/dist/lib/cjs/library.d.cts +96 -0
- package/dist/lib/cjs/object-utils.cjs +559 -0
- package/dist/lib/cjs/object-utils.d.cts +298 -0
- package/dist/lib/cjs/path.cjs +171 -0
- package/dist/lib/cjs/path.d.cts +155 -0
- package/dist/lib/cjs/reg-exp.cjs +196 -0
- package/dist/lib/cjs/reg-exp.d.cts +87 -0
- package/dist/lib/cjs/string.cjs +268 -0
- package/dist/lib/cjs/string.d.cts +362 -0
- package/dist/lib/cjs/transformers/date-transformer.cjs +71 -0
- package/dist/lib/cjs/transformers/date-transformer.d.cts +39 -0
- package/dist/lib/cjs/transformers/group-transformer.cjs +115 -0
- package/dist/lib/cjs/transformers/group-transformer.d.cts +70 -0
- package/dist/lib/cjs/transformers/index.cjs +65 -0
- package/dist/lib/cjs/transformers/index.d.cts +9 -0
- package/dist/lib/cjs/transformers/map-transformer.cjs +71 -0
- package/dist/lib/cjs/transformers/map-transformer.d.cts +41 -0
- package/dist/lib/cjs/transformers/set-transformer.cjs +71 -0
- package/dist/lib/cjs/transformers/set-transformer.d.cts +39 -0
- package/dist/lib/cjs/transformers/skip-private-property-transformer.cjs +69 -0
- package/dist/lib/cjs/transformers/skip-private-property-transformer.d.cts +36 -0
- package/dist/lib/cjs/transformers/transformer.cjs +112 -0
- package/dist/lib/cjs/transformers/transformer.d.cts +70 -0
- package/dist/lib/cjs/transformers/two-way-map-transformer.cjs +72 -0
- package/dist/lib/cjs/transformers/two-way-map-transformer.d.cts +42 -0
- package/dist/lib/cjs/transformers/typed-transformer.cjs +36 -0
- package/dist/lib/cjs/transformers/typed-transformer.d.cts +39 -0
- package/dist/lib/cjs/two-way-map.cjs +150 -0
- package/dist/lib/cjs/two-way-map.d.cts +101 -0
- package/dist/lib/cjs/type-guards.cjs +70 -0
- package/dist/lib/cjs/type-guards.d.cts +84 -0
- package/dist/lib/cjs/type.cjs +63 -0
- package/dist/lib/cjs/type.d.cts +122 -0
- package/dist/lib/cjs/typescript-lib-state.cjs +68 -0
- package/dist/lib/cjs/typescript-lib-state.d.cts +56 -0
- package/dist/lib/cjs/url.cjs +78 -0
- package/dist/lib/cjs/url.d.cts +74 -0
- package/dist/lib/cjs/value-provider.cjs +42 -0
- package/dist/lib/cjs/value-provider.d.cts +29 -0
- package/dist/lib/cjs/value-wrapper.cjs +86 -0
- package/dist/lib/cjs/value-wrapper.d.cts +47 -0
- package/dist/lib/esm/@types/debug.d.mts +21 -0
- package/dist/lib/esm/abort-controller.d.mts +136 -0
- package/dist/lib/esm/abort-controller.mjs +115 -0
- package/dist/lib/esm/aggregate-error.d.mts +24 -0
- package/dist/lib/esm/aggregate-error.mjs +16 -0
- package/dist/lib/esm/array-buffer.d.mts +16 -0
- package/dist/lib/esm/array-buffer.mjs +14 -0
- package/dist/lib/esm/array.d.mts +46 -0
- package/dist/lib/esm/array.mjs +49 -0
- package/dist/lib/esm/async-events.d.mts +456 -0
- package/dist/lib/esm/async-events.mjs +383 -0
- package/dist/lib/esm/async-operation-hook.d.mts +59 -0
- package/dist/lib/esm/async-operation-hook.mjs +27 -0
- package/dist/lib/esm/async.d.mts +415 -0
- package/dist/lib/esm/async.mjs +435 -0
- package/dist/lib/esm/beeper.d.mts +21 -0
- package/dist/lib/esm/beeper.mjs +44 -0
- package/dist/lib/esm/blob.d.mts +60 -0
- package/dist/lib/esm/blob.mjs +77 -0
- package/dist/lib/esm/bytes.d.mts +17 -0
- package/dist/lib/esm/bytes.mjs +32 -0
- package/dist/lib/esm/debug-controller.d.mts +87 -0
- package/dist/lib/esm/debug-controller.mjs +6 -0
- package/dist/lib/esm/debug.d.mts +66 -0
- package/dist/lib/esm/debug.mjs +168 -0
- package/dist/lib/esm/desktop-zip-extractor.d.mts +96 -0
- package/dist/lib/esm/desktop-zip-extractor.mjs +136 -0
- package/dist/lib/esm/disposable.d.mts +387 -0
- package/dist/lib/esm/disposable.mjs +324 -0
- package/dist/lib/esm/enum.d.mts +24 -0
- package/dist/lib/esm/enum.mjs +17 -0
- package/dist/lib/esm/error.d.mts +182 -0
- package/dist/lib/esm/error.mjs +204 -0
- package/dist/lib/esm/function.d.mts +128 -0
- package/dist/lib/esm/function.mjs +52 -0
- package/dist/lib/esm/html-element.d.mts +200 -0
- package/dist/lib/esm/html-element.mjs +247 -0
- package/dist/lib/esm/index.d.mts +33 -0
- package/dist/lib/esm/index.mjs +72 -0
- package/dist/lib/esm/jpeg-metadata.d.mts +42 -0
- package/dist/lib/esm/jpeg-metadata.mjs +145 -0
- package/dist/lib/esm/library-references.d.mts +2 -0
- package/dist/lib/esm/library.d.mts +96 -0
- package/dist/lib/esm/library.mjs +74 -0
- package/dist/lib/esm/object-utils.d.mts +298 -0
- package/dist/lib/esm/object-utils.mjs +523 -0
- package/dist/lib/esm/path.d.mts +155 -0
- package/dist/lib/esm/path.mjs +122 -0
- package/dist/lib/esm/reg-exp.d.mts +87 -0
- package/dist/lib/esm/reg-exp.mjs +169 -0
- package/dist/lib/esm/string.d.mts +362 -0
- package/dist/lib/esm/string.mjs +230 -0
- package/dist/lib/esm/transformers/date-transformer.d.mts +39 -0
- package/dist/lib/esm/transformers/date-transformer.mjs +47 -0
- package/dist/lib/esm/transformers/group-transformer.d.mts +70 -0
- package/dist/lib/esm/transformers/group-transformer.mjs +94 -0
- package/dist/lib/esm/transformers/index.d.mts +9 -0
- package/dist/lib/esm/transformers/index.mjs +24 -0
- package/dist/lib/esm/transformers/map-transformer.d.mts +41 -0
- package/dist/lib/esm/transformers/map-transformer.mjs +47 -0
- package/dist/lib/esm/transformers/set-transformer.d.mts +39 -0
- package/dist/lib/esm/transformers/set-transformer.mjs +47 -0
- package/dist/lib/esm/transformers/skip-private-property-transformer.d.mts +36 -0
- package/dist/lib/esm/transformers/skip-private-property-transformer.mjs +45 -0
- package/dist/lib/esm/transformers/transformer.d.mts +70 -0
- package/dist/lib/esm/transformers/transformer.mjs +88 -0
- package/dist/lib/esm/transformers/two-way-map-transformer.d.mts +42 -0
- package/dist/lib/esm/transformers/two-way-map-transformer.mjs +48 -0
- package/dist/lib/esm/transformers/typed-transformer.d.mts +39 -0
- package/dist/lib/esm/transformers/typed-transformer.mjs +12 -0
- package/dist/lib/esm/two-way-map.d.mts +101 -0
- package/dist/lib/esm/two-way-map.mjs +126 -0
- package/dist/lib/esm/type-guards.d.mts +84 -0
- package/dist/lib/esm/type-guards.mjs +41 -0
- package/dist/lib/esm/type.d.mts +122 -0
- package/dist/lib/esm/type.mjs +39 -0
- package/dist/lib/esm/typescript-lib-state.d.mts +56 -0
- package/dist/lib/esm/typescript-lib-state.mjs +40 -0
- package/dist/lib/esm/url.d.mts +74 -0
- package/dist/lib/esm/url.mjs +50 -0
- package/dist/lib/esm/value-provider.d.mts +29 -0
- package/dist/lib/esm/value-provider.mjs +18 -0
- package/dist/lib/esm/value-wrapper.d.mts +47 -0
- package/dist/lib/esm/value-wrapper.mjs +62 -0
- package/package.json +153 -13
- package/transformers/date-transformer/package.json +6 -0
- package/transformers/group-transformer/package.json +6 -0
- package/transformers/index/package.json +6 -0
- package/transformers/map-transformer/package.json +6 -0
- package/transformers/package.json +6 -0
- package/transformers/set-transformer/package.json +6 -0
- package/transformers/skip-private-property-transformer/package.json +6 -0
- package/transformers/transformer/package.json +6 -0
- package/transformers/two-way-map-transformer/package.json +6 -0
- package/transformers/typed-transformer/package.json +6 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { CallbackDisposable } from "./disposable.mjs";
|
|
7
|
+
import { ensureNonNullable } from "./type-guards.mjs";
|
|
8
|
+
const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
|
|
9
|
+
async function createDivAsync(o, callback) {
|
|
10
|
+
const div = createHtmlElement("div", o);
|
|
11
|
+
await callback?.(div);
|
|
12
|
+
return div;
|
|
13
|
+
}
|
|
14
|
+
async function createElAsync(tag, o, callback) {
|
|
15
|
+
const element = createHtmlElement(tag, o);
|
|
16
|
+
await callback?.(element);
|
|
17
|
+
return element;
|
|
18
|
+
}
|
|
19
|
+
async function createFragmentAsync(callback) {
|
|
20
|
+
const fragment = document.createDocumentFragment();
|
|
21
|
+
await callback?.(fragment);
|
|
22
|
+
return fragment;
|
|
23
|
+
}
|
|
24
|
+
async function createSpanAsync(o, callback) {
|
|
25
|
+
const span = createHtmlElement("span", o);
|
|
26
|
+
await callback?.(span);
|
|
27
|
+
return span;
|
|
28
|
+
}
|
|
29
|
+
async function createSvgAsync(tag, o, callback) {
|
|
30
|
+
const svg = createSvgElement(tag, o);
|
|
31
|
+
await callback?.(svg);
|
|
32
|
+
return svg;
|
|
33
|
+
}
|
|
34
|
+
async function ensureLoaded(element) {
|
|
35
|
+
if (isLoaded(element)) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const win = getNodeWindow(element);
|
|
39
|
+
if (isInstanceOf(element, win.HTMLBodyElement) || isInstanceOf(element, win.HTMLImageElement) || isInstanceOf(element, win.HTMLIFrameElement) || isInstanceOf(element, win.HTMLEmbedElement) || isInstanceOf(element, win.HTMLLinkElement) || isInstanceOf(element, win.HTMLObjectElement) || isInstanceOf(element, win.HTMLStyleElement) || isInstanceOf(element, win.HTMLTrackElement)) {
|
|
40
|
+
await new Promise((resolve) => {
|
|
41
|
+
element.addEventListener("load", resolve);
|
|
42
|
+
element.addEventListener("error", resolve);
|
|
43
|
+
});
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
await Promise.all(getLoadableElements(element).map((loadableElement) => ensureLoaded(loadableElement)));
|
|
47
|
+
}
|
|
48
|
+
function getDocumentWindow(doc) {
|
|
49
|
+
return ensureNonNullable(doc.defaultView, "The document has no window");
|
|
50
|
+
}
|
|
51
|
+
function getZIndex(element) {
|
|
52
|
+
let element2 = element;
|
|
53
|
+
while (element2) {
|
|
54
|
+
const zIndexString = getComputedStyle(element2).zIndex;
|
|
55
|
+
const zIndex = Number.parseInt(zIndexString, 10);
|
|
56
|
+
if (!Number.isNaN(zIndex)) {
|
|
57
|
+
return zIndex;
|
|
58
|
+
}
|
|
59
|
+
element2 = element2.parentElement;
|
|
60
|
+
}
|
|
61
|
+
return 0;
|
|
62
|
+
}
|
|
63
|
+
function isElementVisibleInOffsetParent(element) {
|
|
64
|
+
const parentElement = element.offsetParent;
|
|
65
|
+
if (!parentElement) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
const elementRect = element.getBoundingClientRect();
|
|
69
|
+
const parentElementRect = parentElement.getBoundingClientRect();
|
|
70
|
+
return parentElementRect.top <= elementRect.top && elementRect.bottom <= parentElementRect.bottom && parentElementRect.left <= elementRect.left && elementRect.right <= parentElementRect.right;
|
|
71
|
+
}
|
|
72
|
+
function isLoaded(element) {
|
|
73
|
+
const win = getNodeWindow(element);
|
|
74
|
+
if (isInstanceOf(element, win.HTMLBodyElement)) {
|
|
75
|
+
const readyState = element.ownerDocument.readyState;
|
|
76
|
+
return readyState === "complete" || readyState === "interactive";
|
|
77
|
+
}
|
|
78
|
+
if (isInstanceOf(element, win.HTMLImageElement)) {
|
|
79
|
+
return element.complete && element.naturalWidth > 0;
|
|
80
|
+
}
|
|
81
|
+
if (isInstanceOf(element, win.HTMLIFrameElement)) {
|
|
82
|
+
return !!element.contentDocument;
|
|
83
|
+
}
|
|
84
|
+
if (isInstanceOf(element, win.HTMLEmbedElement)) {
|
|
85
|
+
return !!element.getSVGDocument();
|
|
86
|
+
}
|
|
87
|
+
if (isInstanceOf(element, win.HTMLLinkElement)) {
|
|
88
|
+
return element.rel !== "stylesheet" || element.sheet !== null;
|
|
89
|
+
}
|
|
90
|
+
if (isInstanceOf(element, win.HTMLObjectElement)) {
|
|
91
|
+
return !!element.contentDocument || !!element.getSVGDocument();
|
|
92
|
+
}
|
|
93
|
+
if (isInstanceOf(element, win.HTMLScriptElement)) {
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
if (isInstanceOf(element, win.HTMLStyleElement)) {
|
|
97
|
+
return !!element.sheet;
|
|
98
|
+
}
|
|
99
|
+
if (isInstanceOf(element, win.HTMLTrackElement)) {
|
|
100
|
+
const READY_STATE_LOADED = 2;
|
|
101
|
+
return element.readyState === READY_STATE_LOADED;
|
|
102
|
+
}
|
|
103
|
+
return getLoadableElements(element).every((loadableElement) => isLoaded(loadableElement));
|
|
104
|
+
}
|
|
105
|
+
function onAncestorScrollOrResize(node, callback) {
|
|
106
|
+
const win = getNodeWindow(node);
|
|
107
|
+
const ancestors = [node.ownerDocument ?? win.document, win];
|
|
108
|
+
let currentNode = node;
|
|
109
|
+
while (currentNode) {
|
|
110
|
+
ancestors.push(currentNode);
|
|
111
|
+
currentNode = currentNode.parentNode;
|
|
112
|
+
}
|
|
113
|
+
let isEventTriggered = false;
|
|
114
|
+
for (const ancestor of ancestors) {
|
|
115
|
+
ancestor.addEventListener("scroll", callbackSmooth, { capture: true });
|
|
116
|
+
ancestor.addEventListener("resize", callbackSmooth, { capture: true });
|
|
117
|
+
}
|
|
118
|
+
return new CallbackDisposable({
|
|
119
|
+
callback: () => {
|
|
120
|
+
for (const ancestor of ancestors) {
|
|
121
|
+
ancestor.removeEventListener("scroll", callbackSmooth, { capture: true });
|
|
122
|
+
ancestor.removeEventListener("resize", callbackSmooth, { capture: true });
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
function callbackSmooth() {
|
|
127
|
+
if (isEventTriggered) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
isEventTriggered = true;
|
|
131
|
+
win.requestAnimationFrame(() => {
|
|
132
|
+
try {
|
|
133
|
+
callback();
|
|
134
|
+
} finally {
|
|
135
|
+
isEventTriggered = false;
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function toPx(value) {
|
|
141
|
+
return `${String(value)}px`;
|
|
142
|
+
}
|
|
143
|
+
function waitUntilConnected(element) {
|
|
144
|
+
return new Promise((resolve) => {
|
|
145
|
+
if (element.isConnected) {
|
|
146
|
+
resolve();
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const ownerDocument = element.ownerDocument;
|
|
150
|
+
const observer = new (getNodeWindow(element)).MutationObserver(() => {
|
|
151
|
+
if (!element.isConnected) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
observer.disconnect();
|
|
155
|
+
resolve();
|
|
156
|
+
});
|
|
157
|
+
observer.observe(ownerDocument, { childList: true, subtree: true });
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
function applyDomElementInfo(element, o) {
|
|
161
|
+
const info = typeof o === "string" ? { cls: o } : o ?? {};
|
|
162
|
+
if (info.cls !== void 0) {
|
|
163
|
+
element.className = Array.isArray(info.cls) ? info.cls.join(" ") : info.cls;
|
|
164
|
+
}
|
|
165
|
+
if (info.text !== void 0) {
|
|
166
|
+
setElementText(element, info.text);
|
|
167
|
+
}
|
|
168
|
+
if (info.attr) {
|
|
169
|
+
setElementAttributes(element, info.attr);
|
|
170
|
+
}
|
|
171
|
+
if (info.title !== void 0) {
|
|
172
|
+
element.title = info.title;
|
|
173
|
+
}
|
|
174
|
+
insertIntoParent(element, info);
|
|
175
|
+
}
|
|
176
|
+
function createHtmlElement(tag, o) {
|
|
177
|
+
const element = document.createElement(tag);
|
|
178
|
+
applyDomElementInfo(element, o);
|
|
179
|
+
return element;
|
|
180
|
+
}
|
|
181
|
+
function createSvgElement(tag, o) {
|
|
182
|
+
const svg = document.createElementNS(SVG_NAMESPACE, tag);
|
|
183
|
+
const info = typeof o === "string" ? { cls: o } : o ?? {};
|
|
184
|
+
if (info.cls !== void 0) {
|
|
185
|
+
if (Array.isArray(info.cls)) {
|
|
186
|
+
svg.classList.add(...info.cls);
|
|
187
|
+
} else {
|
|
188
|
+
svg.classList.add(info.cls);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (info.attr) {
|
|
192
|
+
setElementAttributes(svg, info.attr);
|
|
193
|
+
}
|
|
194
|
+
insertIntoParent(svg, info);
|
|
195
|
+
return svg;
|
|
196
|
+
}
|
|
197
|
+
function getLoadableElements(element) {
|
|
198
|
+
return [...element.querySelectorAll("body, img, iframe, embed, link, object, script, style, track")];
|
|
199
|
+
}
|
|
200
|
+
function getNodeWindow(node) {
|
|
201
|
+
return node.ownerDocument?.defaultView ?? window;
|
|
202
|
+
}
|
|
203
|
+
function insertIntoParent(element, info) {
|
|
204
|
+
if (!info.parent) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
if (info.prepend) {
|
|
208
|
+
info.parent.insertBefore(element, info.parent.firstChild);
|
|
209
|
+
} else {
|
|
210
|
+
info.parent.appendChild(element);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
function isInstanceOf(node, ctor) {
|
|
214
|
+
return node instanceof ctor;
|
|
215
|
+
}
|
|
216
|
+
function setElementAttributes(element, attribute) {
|
|
217
|
+
for (const [name, value] of Object.entries(attribute)) {
|
|
218
|
+
if (value === null) {
|
|
219
|
+
element.removeAttribute(name);
|
|
220
|
+
} else {
|
|
221
|
+
element.setAttribute(name, String(value));
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function setElementText(element, text) {
|
|
226
|
+
if (text instanceof DocumentFragment) {
|
|
227
|
+
element.replaceChildren(text);
|
|
228
|
+
} else {
|
|
229
|
+
element.textContent = text;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
export {
|
|
233
|
+
createDivAsync,
|
|
234
|
+
createElAsync,
|
|
235
|
+
createFragmentAsync,
|
|
236
|
+
createSpanAsync,
|
|
237
|
+
createSvgAsync,
|
|
238
|
+
ensureLoaded,
|
|
239
|
+
getDocumentWindow,
|
|
240
|
+
getZIndex,
|
|
241
|
+
isElementVisibleInOffsetParent,
|
|
242
|
+
isLoaded,
|
|
243
|
+
onAncestorScrollOrResize,
|
|
244
|
+
toPx,
|
|
245
|
+
waitUntilConnected
|
|
246
|
+
};
|
|
247
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2h0bWwtZWxlbWVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIE9ic2lkaWFuLXJ1bnRpbWUtYWdub3N0aWMgaGVscGVycyBmb3Igd29ya2luZyB3aXRoIEhUTUwgZWxlbWVudHMuXG4gKlxuICogU2V2ZXJhbCBoZWxwZXJzIGhlcmUgbWlycm9yIGJlaGF2aW9yIHRoYXQgdGhlIE9ic2lkaWFuIHJ1bnRpbWUgaW5qZWN0cyBvbnRvIHRoZSBET00gcHJvdG90eXBlc1xuICogKGBjcmVhdGVFbGAvYGNyZWF0ZURpdmAvYGNyZWF0ZVNwYW5gL2BjcmVhdGVTdmdgL2BjcmVhdGVGcmFnbWVudGAsIGBOb2RlLnByb3RvdHlwZS5pbnN0YW5jZU9mYCxcbiAqIGBFbGVtZW50LnByb3RvdHlwZS5zZXRUZXh0YC9gc2V0QXR0cnNgKS4gVG8gc3RheSBpbmRlcGVuZGVudCBvZiB0aGUgT2JzaWRpYW4gcnVudGltZSwgdGhhdCBiZWhhdmlvclxuICogaXMgcmVpbXBsZW1lbnRlZCBoZXJlIGluIHN0YW5kYXJkIERPTSwgcG9ydGVkIGZyb20gT2JzaWRpYW4ncyBvd24gaW1wbGVtZW50YXRpb24gaW5cbiAqIGBvYnNpZGlhbi5hc2FyL2VuaGFuY2UuanNgLiBTZWUgdGhlIGBvYnNpZGlhbi12ZXJzaW9uc2AgcHJvamVjdDsgcmV2YWxpZGF0ZSB0aGUgcG9ydCB3aGVuIE9ic2lkaWFuXG4gKiBjaGFuZ2VzIGBlbmhhbmNlLmpzYCAodGhlcmUgaXMgYSByZW1pbmRlciBpbiBgQ0xBVURFLm1kYCkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgQ2FsbGJhY2tEaXNwb3NhYmxlIH0gZnJvbSAnLi9kaXNwb3NhYmxlLnRzJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5cbmNvbnN0IFNWR19OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuXG4vKipcbiAqIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uIHtAbGluayBjcmVhdGVFbEFzeW5jfSBhbmQgaXRzIHNpYmxpbmdzIGFwcGx5OiB0aGUgZWxlbWVudC10eXBlLWFnbm9zdGljIHN1YnNldCBvZlxuICogT2JzaWRpYW4ncyBgRG9tRWxlbWVudEluZm9gLCBkZWNsYXJlZCBoZXJlIHNvIHRoaXMgbW9kdWxlIG5lZWRzIG5vIE9ic2lkaWFuIHR5cGluZ3MuIEFuIE9ic2lkaWFuXG4gKiBgRG9tRWxlbWVudEluZm9gIHZhbHVlIGlzIGFzc2lnbmFibGUgdG8gaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlSHRtbEVsZW1lbnRJbmZvIHtcbiAgLyoqXG4gICAqIFRoZSBhdHRyaWJ1dGVzIHRvIHNldDsgYG51bGxgIHJlbW92ZXMgdGhlIGF0dHJpYnV0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGF0dHI/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbCB8IG51bWJlciB8IHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBDU1MgY2xhc3Mgb3IgY2xhc3Nlcy5cbiAgICovXG4gIHJlYWRvbmx5IGNscz86IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IHRvIGluc2VydCB0aGUgZWxlbWVudCBpbnRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50PzogTm9kZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbnNlcnQgdGhlIGVsZW1lbnQgYXMgdGhlIHBhcmVudCdzIGZpcnN0IGNoaWxkIGluc3RlYWQgb2YgaXRzIGxhc3QuXG4gICAqL1xuICByZWFkb25seSBwcmVwZW5kPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHRleHQgY29udGVudC5cbiAgICovXG4gIHJlYWRvbmx5IHRleHQ/OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdG9vbHRpcCB0ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIFNWRyBlbGVtZW50IGluZm9ybWF0aW9uIHtAbGluayBjcmVhdGVTdmdBc3luY30gYXBwbGllczogdGhlIHN1YnNldCBvZiBPYnNpZGlhbidzIGBTdmdFbGVtZW50SW5mb2AgaXRcbiAqIHN1cHBvcnRzLCBkZWNsYXJlZCBoZXJlIHNvIHRoaXMgbW9kdWxlIG5lZWRzIG5vIE9ic2lkaWFuIHR5cGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlU3ZnRWxlbWVudEluZm8ge1xuICAvKipcbiAgICogVGhlIGF0dHJpYnV0ZXMgdG8gc2V0OyBgbnVsbGAgcmVtb3ZlcyB0aGUgYXR0cmlidXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cj86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsIHwgbnVtYmVyIHwgc3RyaW5nPjtcblxuICAvKipcbiAgICogVGhlIENTUyBjbGFzcyBvciBjbGFzc2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xzPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJlbnQgdG8gaW5zZXJ0IHRoZSBlbGVtZW50IGludG8uXG4gICAqL1xuICByZWFkb25seSBwYXJlbnQ/OiBOb2RlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluc2VydCB0aGUgZWxlbWVudCBhcyB0aGUgcGFyZW50J3MgZmlyc3QgY2hpbGQgaW5zdGVhZCBvZiBpdHMgbGFzdC5cbiAgICovXG4gIHJlYWRvbmx5IHByZXBlbmQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgSFRNTCBlbGVtZW50IHRoYXQgY2FuIGJlIHZhbGlkYXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0b3JFbGVtZW50IGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuICAvKipcbiAgICogQ2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50IGlzIHZhbGlkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIGNoZWNrVmFsaWRpdHk6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlcG9ydHMgdGhlIHZhbGlkaXR5IG9mIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgcmVwb3J0VmFsaWRpdHk6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNldHMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZSBvbiB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIG1lc3NhZ2UgdG8gc2V0IG9uIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgc2V0Q3VzdG9tVmFsaWRpdHk6IChlcnJvcjogc3RyaW5nKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBbiBlcnJvciBtZXNzYWdlIG9mIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZGl2IGFzeW5jaHJvbm91c2x5LlxuICpcbiAqIEBwYXJhbSBvIC0gVGhlIGVsZW1lbnQgaW5mb3JtYXRpb24uXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBkaXYgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGRpdi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZURpdkFzeW5jKFxuICBvPzogQ3JlYXRlSHRtbEVsZW1lbnRJbmZvIHwgc3RyaW5nLFxuICBjYWxsYmFjaz86IChlbGVtZW50OiBIVE1MRGl2RWxlbWVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPlxuKTogUHJvbWlzZTxIVE1MRGl2RWxlbWVudD4ge1xuICBjb25zdCBkaXYgPSBjcmVhdGVIdG1sRWxlbWVudCgnZGl2Jywgbyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oZGl2KTtcbiAgcmV0dXJuIGRpdjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVsZW1lbnQgYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHR5cGVQYXJhbSBLIC0gVGhlIHRhZyBuYW1lIGtleSBmcm9tIGBIVE1MRWxlbWVudFRhZ05hbWVNYXBgLlxuICogQHBhcmFtIHRhZyAtIFRoZSB0YWcgbmFtZSBvZiB0aGUgZWxlbWVudCB0byBjcmVhdGUuXG4gKiBAcGFyYW0gbyAtIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgZWxlbWVudCBpcyBjcmVhdGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgZWxlbWVudC5cbiAqIEByZW1hcmtzIE5vdCByZWZhY3RvcmVkIHRvIHBhcmFtZXRlci1vYmplY3QgcGF0dGVybiwgdG8ga2VlcCB0aGUgcGFyaXR5IHdpdGggT2JzaWRpYW4ncyBgY3JlYXRlRWxgIChvciBjcmVhdGVTdmcsIGNvcnJlc3BvbmRpbmdseSkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVFbEFzeW5jPEsgZXh0ZW5kcyBrZXlvZiBIVE1MRWxlbWVudFRhZ05hbWVNYXA+KFxuICB0YWc6IEssXG4gIG8/OiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBzdHJpbmcsXG4gIGNhbGxiYWNrPzogKGVsZW1lbnQ6IEhUTUxFbGVtZW50VGFnTmFtZU1hcFtLXSkgPT4gUHJvbWlzYWJsZTx2b2lkPlxuKTogUHJvbWlzZTxIVE1MRWxlbWVudFRhZ05hbWVNYXBbS10+IHtcbiAgY29uc3QgZWxlbWVudCA9IGNyZWF0ZUh0bWxFbGVtZW50KHRhZywgbyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oZWxlbWVudCk7XG4gIHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBEb2N1bWVudEZyYWdtZW50IGFzeW5jaHJvbm91c2x5LlxuICpcbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIERvY3VtZW50RnJhZ21lbnQgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIERvY3VtZW50RnJhZ21lbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVGcmFnbWVudEFzeW5jKGNhbGxiYWNrPzogKGVsZW1lbnQ6IERvY3VtZW50RnJhZ21lbnQpID0+IFByb21pc2FibGU8dm9pZD4pOiBQcm9taXNlPERvY3VtZW50RnJhZ21lbnQ+IHtcbiAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oZnJhZ21lbnQpO1xuICByZXR1cm4gZnJhZ21lbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNwYW4gYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHBhcmFtIG8gLSBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHNwYW4gaXMgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHNwYW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTcGFuQXN5bmMoXG4gIG8/OiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBzdHJpbmcsXG4gIGNhbGxiYWNrPzogKGVsZW1lbnQ6IEhUTUxTcGFuRWxlbWVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPlxuKTogUHJvbWlzZTxIVE1MU3BhbkVsZW1lbnQ+IHtcbiAgY29uc3Qgc3BhbiA9IGNyZWF0ZUh0bWxFbGVtZW50KCdzcGFuJywgbyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oc3Bhbik7XG4gIHJldHVybiBzcGFuO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzdmcgYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHR5cGVQYXJhbSBLIC0gVGhlIHRhZyBuYW1lIGtleSBmcm9tIGBTVkdFbGVtZW50VGFnTmFtZU1hcGAuXG4gKiBAcGFyYW0gdGFnIC0gVGhlIHRhZyBuYW1lIG9mIHRoZSBzdmcgdG8gY3JlYXRlLlxuICogQHBhcmFtIG8gLSBUaGUgc3ZnIGluZm9ybWF0aW9uLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgc3ZnIGlzIGNyZWF0ZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBzdmcuXG4gKiBAcmVtYXJrcyBOb3QgcmVmYWN0b3JlZCB0byBwYXJhbWV0ZXItb2JqZWN0IHBhdHRlcm4sIHRvIGtlZXAgdGhlIHBhcml0eSB3aXRoIE9ic2lkaWFuJ3MgYGNyZWF0ZVN2Z2AgKG9yIGNyZWF0ZUVsLCBjb3JyZXNwb25kaW5nbHkpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlU3ZnQXN5bmM8SyBleHRlbmRzIGtleW9mIFNWR0VsZW1lbnRUYWdOYW1lTWFwPihcbiAgdGFnOiBLLFxuICBvPzogQ3JlYXRlU3ZnRWxlbWVudEluZm8gfCBzdHJpbmcsXG4gIGNhbGxiYWNrPzogKGVsZW1lbnQ6IFNWR0VsZW1lbnRUYWdOYW1lTWFwW0tdKSA9PiBQcm9taXNhYmxlPHZvaWQ+XG4pOiBQcm9taXNlPFNWR0VsZW1lbnRUYWdOYW1lTWFwW0tdPiB7XG4gIGNvbnN0IHN2ZyA9IGNyZWF0ZVN2Z0VsZW1lbnQodGFnLCBvKTtcbiAgYXdhaXQgY2FsbGJhY2s/LihzdmcpO1xuICByZXR1cm4gc3ZnO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBsb2FkZWQuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBlbnN1cmUgaXMgbG9hZGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBlbGVtZW50IGlzIGxvYWRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUxvYWRlZChlbGVtZW50OiBFbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChpc0xvYWRlZChlbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB3aW4gPSBnZXROb2RlV2luZG93KGVsZW1lbnQpO1xuICBpZiAoXG4gICAgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MQm9keUVsZW1lbnQpXG4gICAgfHwgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MSW1hZ2VFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTElGcmFtZUVsZW1lbnQpXG4gICAgfHwgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MRW1iZWRFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTExpbmtFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTE9iamVjdEVsZW1lbnQpXG4gICAgfHwgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MU3R5bGVFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTFRyYWNrRWxlbWVudClcbiAgKSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHJlc29sdmUpO1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHJlc29sdmUpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKGdldExvYWRhYmxlRWxlbWVudHMoZWxlbWVudCkubWFwKChsb2FkYWJsZUVsZW1lbnQpID0+IGVuc3VyZUxvYWRlZChsb2FkYWJsZUVsZW1lbnQpKSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgd2luZG93IGEgZG9jdW1lbnQgYmVsb25ncyB0by5cbiAqXG4gKiBBIGRvY3VtZW50IGlzIHRoZSBvbmUgbm9kZSB3aG9zZSBgb3duZXJEb2N1bWVudGAgaXMgYG51bGxgLCBzbyB0aGUgYG93bmVyRG9jdW1lbnRgLWNoYXNpbmcgbG9va3VwXG4gKiB1c2VkIGZvciBvcmRpbmFyeSBub2RlcyByZXNvbHZlcyBhIGRvY3VtZW50IHRvIHRoZSB3cm9uZyB3aW5kb3cuIFJlYWRpbmcgYGRlZmF1bHRWaWV3YCBvZmYgdGhlXG4gKiBkb2N1bWVudCBpdHNlbGYgaXMgd2hhdCBrZWVwcyBhIHBvcC1vdXQgd2luZG93J3MgY29vcmRpbmF0ZXMgbWVhc3VyZWQgYWdhaW5zdCB0aGF0IHdpbmRvdy5cbiAqXG4gKiBAcGFyYW0gZG9jIC0gVGhlIGRvY3VtZW50IHRvIGdldCB0aGUgd2luZG93IG9mLlxuICogQHJldHVybnMgVGhlIHdpbmRvdyB0aGUgZG9jdW1lbnQgYmVsb25ncyB0by5cbiAqIEB0aHJvd3MgQW4ge0BsaW5rIEVycm9yfSBpZiB0aGUgZG9jdW1lbnQgaXMgZGV0YWNoZWQgYW5kIHRoZXJlZm9yZSBoYXMgbm8gd2luZG93LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRXaW5kb3coZG9jOiBEb2N1bWVudCk6IFdpbmRvdyB7XG4gIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZShkb2MuZGVmYXVsdFZpZXcsICdUaGUgZG9jdW1lbnQgaGFzIG5vIHdpbmRvdycpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHotaW5kZXggb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBnZXQgdGhlIHotaW5kZXggb2YuXG4gKiBAcmV0dXJucyBUaGUgei1pbmRleCBvZiB0aGUgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpJbmRleChlbGVtZW50OiBFbGVtZW50KTogbnVtYmVyIHtcbiAgbGV0IGVsZW1lbnQyOiBFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7XG5cbiAgd2hpbGUgKGVsZW1lbnQyKSB7XG4gICAgY29uc3QgekluZGV4U3RyaW5nID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50MikuekluZGV4O1xuICAgIGNvbnN0IHpJbmRleCA9IE51bWJlci5wYXJzZUludCh6SW5kZXhTdHJpbmcsIDEwKTtcbiAgICBpZiAoIU51bWJlci5pc05hTih6SW5kZXgpKSB7XG4gICAgICByZXR1cm4gekluZGV4O1xuICAgIH1cbiAgICBlbGVtZW50MiA9IGVsZW1lbnQyLnBhcmVudEVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGUgb2Zmc2V0IHBhcmVudC5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gdGhlIG9mZnNldCBwYXJlbnQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50VmlzaWJsZUluT2Zmc2V0UGFyZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDtcbiAgaWYgKCFwYXJlbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZWxlbWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBwYXJlbnRFbGVtZW50UmVjdCA9IHBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgcmV0dXJuIChcbiAgICBwYXJlbnRFbGVtZW50UmVjdC50b3AgPD0gZWxlbWVudFJlY3QudG9wXG4gICAgJiYgZWxlbWVudFJlY3QuYm90dG9tIDw9IHBhcmVudEVsZW1lbnRSZWN0LmJvdHRvbVxuICAgICYmIHBhcmVudEVsZW1lbnRSZWN0LmxlZnQgPD0gZWxlbWVudFJlY3QubGVmdFxuICAgICYmIGVsZW1lbnRSZWN0LnJpZ2h0IDw9IHBhcmVudEVsZW1lbnRSZWN0LnJpZ2h0XG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBlbGVtZW50IGlzIGxvYWRlZC5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50IGlzIGxvYWRlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xvYWRlZChlbGVtZW50OiBFbGVtZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IHdpbiA9IGdldE5vZGVXaW5kb3coZWxlbWVudCk7XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTEJvZHlFbGVtZW50KSkge1xuICAgIGNvbnN0IHJlYWR5U3RhdGUgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQucmVhZHlTdGF0ZTtcbiAgICByZXR1cm4gcmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJyB8fCByZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnO1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTEltYWdlRWxlbWVudCkpIHtcbiAgICByZXR1cm4gZWxlbWVudC5jb21wbGV0ZSAmJiBlbGVtZW50Lm5hdHVyYWxXaWR0aCA+IDA7XG4gIH1cblxuICBpZiAoaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MSUZyYW1lRWxlbWVudCkpIHtcbiAgICByZXR1cm4gISFlbGVtZW50LmNvbnRlbnREb2N1bWVudDtcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlT2YoZWxlbWVudCwgd2luLkhUTUxFbWJlZEVsZW1lbnQpKSB7XG4gICAgcmV0dXJuICEhZWxlbWVudC5nZXRTVkdEb2N1bWVudCgpO1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTExpbmtFbGVtZW50KSkge1xuICAgIHJldHVybiBlbGVtZW50LnJlbCAhPT0gJ3N0eWxlc2hlZXQnIHx8IGVsZW1lbnQuc2hlZXQgIT09IG51bGw7XG4gIH1cblxuICBpZiAoaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MT2JqZWN0RWxlbWVudCkpIHtcbiAgICByZXR1cm4gISFlbGVtZW50LmNvbnRlbnREb2N1bWVudCB8fCAhIWVsZW1lbnQuZ2V0U1ZHRG9jdW1lbnQoKTtcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlT2YoZWxlbWVudCwgd2luLkhUTUxTY3JpcHRFbGVtZW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTFN0eWxlRWxlbWVudCkpIHtcbiAgICByZXR1cm4gISFlbGVtZW50LnNoZWV0O1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTFRyYWNrRWxlbWVudCkpIHtcbiAgICBjb25zdCBSRUFEWV9TVEFURV9MT0FERUQgPSAyO1xuICAgIHJldHVybiBlbGVtZW50LnJlYWR5U3RhdGUgPT09IFJFQURZX1NUQVRFX0xPQURFRDtcbiAgfVxuXG4gIHJldHVybiBnZXRMb2FkYWJsZUVsZW1lbnRzKGVsZW1lbnQpLmV2ZXJ5KChsb2FkYWJsZUVsZW1lbnQpID0+IGlzTG9hZGVkKGxvYWRhYmxlRWxlbWVudCkpO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGFuY2VzdG9yIG5vZGVzIG9mIHRoZSBnaXZlbiBub2RlLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUgdG8gYWRkIHRoZSBldmVudCBsaXN0ZW5lciB0by5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGV9IHRoYXQgcmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIHdoZW4gZGlzcG9zZWQsIGZvciB1c2Ugd2l0aCBgdXNpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb25BbmNlc3RvclNjcm9sbE9yUmVzaXplKG5vZGU6IE5vZGUsIGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gIGNvbnN0IHdpbiA9IGdldE5vZGVXaW5kb3cobm9kZSk7XG4gIGNvbnN0IGFuY2VzdG9yczogRXZlbnRUYXJnZXRbXSA9IFtub2RlLm93bmVyRG9jdW1lbnQgPz8gd2luLmRvY3VtZW50LCB3aW5dO1xuXG4gIGxldCBjdXJyZW50Tm9kZTogTm9kZSB8IG51bGwgPSBub2RlO1xuXG4gIHdoaWxlIChjdXJyZW50Tm9kZSkge1xuICAgIGFuY2VzdG9ycy5wdXNoKGN1cnJlbnROb2RlKTtcbiAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gIH1cblxuICBsZXQgaXNFdmVudFRyaWdnZXJlZCA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgYW5jZXN0b3Igb2YgYW5jZXN0b3JzKSB7XG4gICAgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY2FsbGJhY2tTbW9vdGgsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICBhbmNlc3Rvci5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxsYmFja1Ntb290aCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGFuY2VzdG9yIG9mIGFuY2VzdG9ycykge1xuICAgICAgICBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjYWxsYmFja1Ntb290aCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgICBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxsYmFja1Ntb290aCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gY2FsbGJhY2tTbW9vdGgoKTogdm9pZCB7XG4gICAgaWYgKGlzRXZlbnRUcmlnZ2VyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpc0V2ZW50VHJpZ2dlcmVkID0gdHJ1ZTtcblxuICAgIHdpbi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlzRXZlbnRUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgbnVtYmVyIHRvIGEgc3RyaW5nIHdpdGggJ3B4JyBhcHBlbmRlZC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgbnVtYmVyIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIGFzIGEgc3RyaW5nIHdpdGggJ3B4JyBhcHBlbmRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUHgodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgJHtTdHJpbmcodmFsdWUpfXB4YDtcbn1cblxuLyoqXG4gKiBXYWl0cyB1bnRpbCB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlIERPTS5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZWxlbWVudCBpcyBjb25uZWN0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YWl0VW50aWxDb25uZWN0ZWQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgaWYgKGVsZW1lbnQuaXNDb25uZWN0ZWQpIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBPYnNpZGlhbidzIGBlbC5vbk5vZGVJbnNlcnRlZGAgdXNlcyBhIGBub2RlLWluc2VydGVkYCBDU1Mga2V5ZnJhbWUgZnJvbSBPYnNpZGlhbidzIHN0eWxlc2hlZXQuXG4gICAgLy8gVGhlIGFnbm9zdGljIGVxdWl2YWxlbnQgaW5zdGVhZCBvYnNlcnZlcyB0aGUgZWxlbWVudCdzIGRvY3VtZW50IGZvciBpdCBiZWNvbWluZyBjb25uZWN0ZWQuXG4gICAgY29uc3Qgb3duZXJEb2N1bWVudCA9IGVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyAoZ2V0Tm9kZVdpbmRvdyhlbGVtZW50KSkuTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgICBpZiAoIWVsZW1lbnQuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShvd25lckRvY3VtZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZWxlbWVudC10eXBlLWFnbm9zdGljIHN1YnNldCBvZiBPYnNpZGlhbidzIGBEb21FbGVtZW50SW5mb2AgdGhhdCBpdHMgYGNyZWF0ZUVsYFxuICogc3VwcG9ydHMgXHUyMDE0IGBjbHNgLCBgdGV4dGAsIGBhdHRyYCwgYHRpdGxlYCwgYW5kIGBwYXJlbnRgL2BwcmVwZW5kYC4gVGhlIGVsZW1lbnQtdHlwZS1zcGVjaWZpY1xuICogZmllbGRzIChgdmFsdWVgLCBgdHlwZWAsIGBwbGFjZWhvbGRlcmAsIGBocmVmYCkgYW5kIHRoZSBgb24qYCBldmVudC1oYW5kbGVyIGtleXMgYXJlIGludGVudGlvbmFsbHlcbiAqIE5PVCBwb3J0ZWQgKG5vIGludGVybmFsIGNhbGxlciBuZWVkcyB0aGVtKTsgZXh0ZW5kIHRoaXMgaWYgYSBjb25zdW1lciBkb2VzIFx1MjAxNCBhbmQgcmV2YWxpZGF0ZSBhZ2FpbnN0XG4gKiBgZW5oYW5jZS5qc2AgKHNlZSB0aGUgYEBmaWxlYCBub3RlIGFuZCBgQ0xBVURFLm1kYCkuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBhcHBseSB0aGUgaW5mbyB0by5cbiAqIEBwYXJhbSBvIC0gVGhlIGVsZW1lbnQgaW5mbyAob3IgYSBiYXJlIGNsYXNzIHN0cmluZykuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5RG9tRWxlbWVudEluZm8oZWxlbWVudDogSFRNTEVsZW1lbnQsIG86IENyZWF0ZUh0bWxFbGVtZW50SW5mbyB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBjb25zdCBpbmZvOiBDcmVhdGVIdG1sRWxlbWVudEluZm8gPSB0eXBlb2YgbyA9PT0gJ3N0cmluZycgPyB7IGNsczogbyB9IDogbyA/PyB7fTtcblxuICBpZiAoaW5mby5jbHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gQXJyYXkuaXNBcnJheShpbmZvLmNscykgPyBpbmZvLmNscy5qb2luKCcgJykgOiBpbmZvLmNscztcbiAgfVxuICBpZiAoaW5mby50ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZXRFbGVtZW50VGV4dChlbGVtZW50LCBpbmZvLnRleHQpO1xuICB9XG4gIGlmIChpbmZvLmF0dHIpIHtcbiAgICBzZXRFbGVtZW50QXR0cmlidXRlcyhlbGVtZW50LCBpbmZvLmF0dHIpO1xuICB9XG4gIGlmIChpbmZvLnRpdGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbGVtZW50LnRpdGxlID0gaW5mby50aXRsZTtcbiAgfVxuICBpbnNlcnRJbnRvUGFyZW50KGVsZW1lbnQsIGluZm8pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIdG1sRWxlbWVudDxLIGV4dGVuZHMga2V5b2YgSFRNTEVsZW1lbnRUYWdOYW1lTWFwPih0YWc6IEssIG8/OiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBzdHJpbmcpOiBIVE1MRWxlbWVudFRhZ05hbWVNYXBbS10ge1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuICBhcHBseURvbUVsZW1lbnRJbmZvKGVsZW1lbnQsIG8pO1xuICByZXR1cm4gZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3ZnRWxlbWVudDxLIGV4dGVuZHMga2V5b2YgU1ZHRWxlbWVudFRhZ05hbWVNYXA+KHRhZzogSywgbz86IENyZWF0ZVN2Z0VsZW1lbnRJbmZvIHwgc3RyaW5nKTogU1ZHRWxlbWVudFRhZ05hbWVNYXBbS10ge1xuICBjb25zdCBzdmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05BTUVTUEFDRSwgdGFnKTtcbiAgY29uc3QgaW5mbzogQ3JlYXRlU3ZnRWxlbWVudEluZm8gPSB0eXBlb2YgbyA9PT0gJ3N0cmluZycgPyB7IGNsczogbyB9IDogbyA/PyB7fTtcblxuICBpZiAoaW5mby5jbHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGluZm8uY2xzKSkge1xuICAgICAgc3ZnLmNsYXNzTGlzdC5hZGQoLi4uaW5mby5jbHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdmcuY2xhc3NMaXN0LmFkZChpbmZvLmNscyk7XG4gICAgfVxuICB9XG4gIGlmIChpbmZvLmF0dHIpIHtcbiAgICBzZXRFbGVtZW50QXR0cmlidXRlcyhzdmcsIGluZm8uYXR0cik7XG4gIH1cbiAgaW5zZXJ0SW50b1BhcmVudChzdmcsIGluZm8pO1xuICByZXR1cm4gc3ZnO1xufVxuXG5mdW5jdGlvbiBnZXRMb2FkYWJsZUVsZW1lbnRzKGVsZW1lbnQ6IEVsZW1lbnQpOiBFbGVtZW50W10ge1xuICByZXR1cm4gWy4uLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYm9keSwgaW1nLCBpZnJhbWUsIGVtYmVkLCBsaW5rLCBvYmplY3QsIHNjcmlwdCwgc3R5bGUsIHRyYWNrJyldO1xufVxuXG5mdW5jdGlvbiBnZXROb2RlV2luZG93KG5vZGU6IE5vZGUpOiB0eXBlb2YgZ2xvYmFsVGhpcyAmIFdpbmRvdyB7XG4gIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQ/LmRlZmF1bHRWaWV3ID8/IHdpbmRvdztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0SW50b1BhcmVudChlbGVtZW50OiBFbGVtZW50LCBpbmZvOiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBDcmVhdGVTdmdFbGVtZW50SW5mbyk6IHZvaWQge1xuICBpZiAoIWluZm8ucGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbmZvLnByZXBlbmQpIHtcbiAgICBpbmZvLnBhcmVudC5pbnNlcnRCZWZvcmUoZWxlbWVudCwgaW5mby5wYXJlbnQuZmlyc3RDaGlsZCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWRvbS1ub2RlLWFwcGVuZCAtLSBgcGFyZW50YCBpcyBhIGBOb2RlYCwgYW5kIGBhcHBlbmRgIGlzIGRlY2xhcmVkIG9uIGBQYXJlbnROb2RlYCwgbm90IG9uIGBOb2RlYC5cbiAgICBpbmZvLnBhcmVudC5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0luc3RhbmNlT2Y8VCBleHRlbmRzIE5vZGU+KG5vZGU6IE5vZGUsIGN0b3I6IGFic3RyYWN0IG5ldyAoLi4uJGFyZ3VtZW50czogbmV2ZXJbXSkgPT4gVCk6IG5vZGUgaXMgVCB7XG4gIC8vIEFnbm9zdGljIHJlaW1wbGVtZW50YXRpb24gb2YgT2JzaWRpYW4ncyBgTm9kZS5wcm90b3R5cGUuaW5zdGFuY2VPZmAgKGVuaGFuY2UuanMpLlxuICAvLyBUaGUgY2FsbGVyIHJlc29sdmVzIGBjdG9yYCBpbiB0aGUgbm9kZSdzIG93biByZWFsbSAodmlhIGBnZXROb2RlV2luZG93YCksIGtlZXBpbmcgaXQgY3Jvc3Mtd2luZG93IHNhZmUuXG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgY3Rvcjtcbn1cblxuZnVuY3Rpb24gc2V0RWxlbWVudEF0dHJpYnV0ZXMoZWxlbWVudDogRWxlbWVudCwgYXR0cmlidXRlOiBOb25OdWxsYWJsZTxDcmVhdGVIdG1sRWxlbWVudEluZm9bJ2F0dHInXT4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZSkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItdG9nZ2xlLWF0dHJpYnV0ZSAtLSBgdG9nZ2xlQXR0cmlidXRlYCBvbmx5IGV2ZXIgc2V0cyB0aGUgZW1wdHkgc3RyaW5nLCBzbyBpdCBjYW5ub3QgY2FycnkgYFN0cmluZyh2YWx1ZSlgLiBUaGUgcnVsZSBtYXRjaGVzIHRoZSByZW1vdmUvc2V0IHNoYXBlIHdpdGhvdXQgc2VlaW5nIHRoYXQgdGhlIHZhbHVlIGlzIHdoYXQgdGhpcyBicmFuY2ggZXhpc3RzIHRvIHdyaXRlLlxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIFN0cmluZyh2YWx1ZSkpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRFbGVtZW50VGV4dChlbGVtZW50OiBIVE1MRWxlbWVudCwgdGV4dDogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IHZvaWQge1xuICBpZiAodGV4dCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICBlbGVtZW50LnJlcGxhY2VDaGlsZHJlbih0ZXh0KTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50LnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFlQSxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLHlCQUF5QjtBQUVsQyxNQUFNLGdCQUFnQjtBQXFHdEIsZUFBc0IsZUFDcEIsR0FDQSxVQUN5QjtBQUN6QixRQUFNLE1BQU0sa0JBQWtCLE9BQU8sQ0FBQztBQUN0QyxRQUFNLFdBQVcsR0FBRztBQUNwQixTQUFPO0FBQ1Q7QUFZQSxlQUFzQixjQUNwQixLQUNBLEdBQ0EsVUFDbUM7QUFDbkMsUUFBTSxVQUFVLGtCQUFrQixLQUFLLENBQUM7QUFDeEMsUUFBTSxXQUFXLE9BQU87QUFDeEIsU0FBTztBQUNUO0FBUUEsZUFBc0Isb0JBQW9CLFVBQXVGO0FBQy9ILFFBQU0sV0FBVyxTQUFTLHVCQUF1QjtBQUNqRCxRQUFNLFdBQVcsUUFBUTtBQUN6QixTQUFPO0FBQ1Q7QUFTQSxlQUFzQixnQkFDcEIsR0FDQSxVQUMwQjtBQUMxQixRQUFNLE9BQU8sa0JBQWtCLFFBQVEsQ0FBQztBQUN4QyxRQUFNLFdBQVcsSUFBSTtBQUNyQixTQUFPO0FBQ1Q7QUFZQSxlQUFzQixlQUNwQixLQUNBLEdBQ0EsVUFDa0M7QUFDbEMsUUFBTSxNQUFNLGlCQUFpQixLQUFLLENBQUM7QUFDbkMsUUFBTSxXQUFXLEdBQUc7QUFDcEIsU0FBTztBQUNUO0FBUUEsZUFBc0IsYUFBYSxTQUFpQztBQUNsRSxNQUFJLFNBQVMsT0FBTyxHQUFHO0FBQ3JCO0FBQUEsRUFDRjtBQUNBLFFBQU0sTUFBTSxjQUFjLE9BQU87QUFDakMsTUFDRSxhQUFhLFNBQVMsSUFBSSxlQUFlLEtBQ3RDLGFBQWEsU0FBUyxJQUFJLGdCQUFnQixLQUMxQyxhQUFhLFNBQVMsSUFBSSxpQkFBaUIsS0FDM0MsYUFBYSxTQUFTLElBQUksZ0JBQWdCLEtBQzFDLGFBQWEsU0FBUyxJQUFJLGVBQWUsS0FDekMsYUFBYSxTQUFTLElBQUksaUJBQWlCLEtBQzNDLGFB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
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.mts" />
|
|
2
|
+
export * as 'abort-controller' from './abort-controller.mjs';
|
|
3
|
+
export * as 'aggregate-error' from './aggregate-error.mjs';
|
|
4
|
+
export * as 'array-buffer' from './array-buffer.mjs';
|
|
5
|
+
export * as 'array' from './array.mjs';
|
|
6
|
+
export * as 'async-events' from './async-events.mjs';
|
|
7
|
+
export * as 'async-operation-hook' from './async-operation-hook.mjs';
|
|
8
|
+
export * as 'async' from './async.mjs';
|
|
9
|
+
export * as 'beeper' from './beeper.mjs';
|
|
10
|
+
export * as 'blob' from './blob.mjs';
|
|
11
|
+
export * as 'bytes' from './bytes.mjs';
|
|
12
|
+
export * as 'debug-controller' from './debug-controller.mjs';
|
|
13
|
+
export * as 'debug' from './debug.mjs';
|
|
14
|
+
export * as 'desktop-zip-extractor' from './desktop-zip-extractor.mjs';
|
|
15
|
+
export * as 'disposable' from './disposable.mjs';
|
|
16
|
+
export * as 'enum' from './enum.mjs';
|
|
17
|
+
export * as 'error' from './error.mjs';
|
|
18
|
+
export * as 'function' from './function.mjs';
|
|
19
|
+
export * as 'html-element' from './html-element.mjs';
|
|
20
|
+
export * as 'jpeg-metadata' from './jpeg-metadata.mjs';
|
|
21
|
+
export * as 'library' from './library.mjs';
|
|
22
|
+
export * as 'object-utils' from './object-utils.mjs';
|
|
23
|
+
export * as 'path' from './path.mjs';
|
|
24
|
+
export * as 'reg-exp' from './reg-exp.mjs';
|
|
25
|
+
export * as 'string' from './string.mjs';
|
|
26
|
+
export * as 'transformers' from './transformers/index.mjs';
|
|
27
|
+
export * as 'two-way-map' from './two-way-map.mjs';
|
|
28
|
+
export * as 'type-guards' from './type-guards.mjs';
|
|
29
|
+
export * as 'type' from './type.mjs';
|
|
30
|
+
export * as 'typescript-lib-state' from './typescript-lib-state.mjs';
|
|
31
|
+
export * as 'url' from './url.mjs';
|
|
32
|
+
export * as 'value-provider' from './value-provider.mjs';
|
|
33
|
+
export * as 'value-wrapper' from './value-wrapper.mjs';
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import * as abort_controller from "./abort-controller.mjs";
|
|
7
|
+
import * as aggregate_error from "./aggregate-error.mjs";
|
|
8
|
+
import * as array_buffer from "./array-buffer.mjs";
|
|
9
|
+
import * as array from "./array.mjs";
|
|
10
|
+
import * as async_events from "./async-events.mjs";
|
|
11
|
+
import * as async_operation_hook from "./async-operation-hook.mjs";
|
|
12
|
+
import * as async from "./async.mjs";
|
|
13
|
+
import * as beeper from "./beeper.mjs";
|
|
14
|
+
import * as blob from "./blob.mjs";
|
|
15
|
+
import * as bytes from "./bytes.mjs";
|
|
16
|
+
import * as debug_controller from "./debug-controller.mjs";
|
|
17
|
+
import * as debug from "./debug.mjs";
|
|
18
|
+
import * as desktop_zip_extractor from "./desktop-zip-extractor.mjs";
|
|
19
|
+
import * as disposable from "./disposable.mjs";
|
|
20
|
+
import * as enum2 from "./enum.mjs";
|
|
21
|
+
import * as error from "./error.mjs";
|
|
22
|
+
import * as function2 from "./function.mjs";
|
|
23
|
+
import * as html_element from "./html-element.mjs";
|
|
24
|
+
import * as jpeg_metadata from "./jpeg-metadata.mjs";
|
|
25
|
+
import * as library from "./library.mjs";
|
|
26
|
+
import * as object_utils from "./object-utils.mjs";
|
|
27
|
+
import * as path from "./path.mjs";
|
|
28
|
+
import * as reg_exp from "./reg-exp.mjs";
|
|
29
|
+
import * as string from "./string.mjs";
|
|
30
|
+
import * as transformers from "./transformers/index.mjs";
|
|
31
|
+
import * as two_way_map from "./two-way-map.mjs";
|
|
32
|
+
import * as type_guards from "./type-guards.mjs";
|
|
33
|
+
import * as type from "./type.mjs";
|
|
34
|
+
import * as typescript_lib_state from "./typescript-lib-state.mjs";
|
|
35
|
+
import * as url from "./url.mjs";
|
|
36
|
+
import * as value_provider from "./value-provider.mjs";
|
|
37
|
+
import * as value_wrapper from "./value-wrapper.mjs";
|
|
38
|
+
export {
|
|
39
|
+
abort_controller as "abort-controller",
|
|
40
|
+
aggregate_error as "aggregate-error",
|
|
41
|
+
array,
|
|
42
|
+
array_buffer as "array-buffer",
|
|
43
|
+
async,
|
|
44
|
+
async_events as "async-events",
|
|
45
|
+
async_operation_hook as "async-operation-hook",
|
|
46
|
+
beeper,
|
|
47
|
+
blob,
|
|
48
|
+
bytes,
|
|
49
|
+
debug,
|
|
50
|
+
debug_controller as "debug-controller",
|
|
51
|
+
desktop_zip_extractor as "desktop-zip-extractor",
|
|
52
|
+
disposable,
|
|
53
|
+
enum2 as enum,
|
|
54
|
+
error,
|
|
55
|
+
function2 as function,
|
|
56
|
+
html_element as "html-element",
|
|
57
|
+
jpeg_metadata as "jpeg-metadata",
|
|
58
|
+
library,
|
|
59
|
+
object_utils as "object-utils",
|
|
60
|
+
path,
|
|
61
|
+
reg_exp as "reg-exp",
|
|
62
|
+
string,
|
|
63
|
+
transformers,
|
|
64
|
+
two_way_map as "two-way-map",
|
|
65
|
+
type,
|
|
66
|
+
type_guards as "type-guards",
|
|
67
|
+
typescript_lib_state as "typescript-lib-state",
|
|
68
|
+
url,
|
|
69
|
+
value_provider as "value-provider",
|
|
70
|
+
value_wrapper as "value-wrapper"
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2Fib3J0LWNvbnRyb2xsZXInIGZyb20gJy4vYWJvcnQtY29udHJvbGxlci50cyc7XG5leHBvcnQgKiBhcyAnYWdncmVnYXRlLWVycm9yJyBmcm9tICcuL2FnZ3JlZ2F0ZS1lcnJvci50cyc7XG5leHBvcnQgKiBhcyAnYXJyYXktYnVmZmVyJyBmcm9tICcuL2FycmF5LWJ1ZmZlci50cyc7XG5leHBvcnQgKiBhcyAnYXJyYXknIGZyb20gJy4vYXJyYXkudHMnO1xuZXhwb3J0ICogYXMgJ2FzeW5jLWV2ZW50cycgZnJvbSAnLi9hc3luYy1ldmVudHMudHMnO1xuZXhwb3J0ICogYXMgJ2FzeW5jLW9wZXJhdGlvbi1ob29rJyBmcm9tICcuL2FzeW5jLW9wZXJhdGlvbi1ob29rLnRzJztcbmV4cG9ydCAqIGFzICdhc3luYycgZnJvbSAnLi9hc3luYy50cyc7XG5leHBvcnQgKiBhcyAnYmVlcGVyJyBmcm9tICcuL2JlZXBlci50cyc7XG5leHBvcnQgKiBhcyAnYmxvYicgZnJvbSAnLi9ibG9iLnRzJztcbmV4cG9ydCAqIGFzICdieXRlcycgZnJvbSAnLi9ieXRlcy50cyc7XG5leHBvcnQgKiBhcyAnZGVidWctY29udHJvbGxlcicgZnJvbSAnLi9kZWJ1Zy1jb250cm9sbGVyLnRzJztcbmV4cG9ydCAqIGFzICdkZWJ1ZycgZnJvbSAnLi9kZWJ1Zy50cyc7XG5leHBvcnQgKiBhcyAnZGVza3RvcC16aXAtZXh0cmFjdG9yJyBmcm9tICcuL2Rlc2t0b3AtemlwLWV4dHJhY3Rvci50cyc7XG5leHBvcnQgKiBhcyAnZGlzcG9zYWJsZScgZnJvbSAnLi9kaXNwb3NhYmxlLnRzJztcbmV4cG9ydCAqIGFzICdlbnVtJyBmcm9tICcuL2VudW0udHMnO1xuZXhwb3J0ICogYXMgJ2Vycm9yJyBmcm9tICcuL2Vycm9yLnRzJztcbmV4cG9ydCAqIGFzICdmdW5jdGlvbicgZnJvbSAnLi9mdW5jdGlvbi50cyc7XG5leHBvcnQgKiBhcyAnaHRtbC1lbGVtZW50JyBmcm9tICcuL2h0bWwtZWxlbWVudC50cyc7XG5leHBvcnQgKiBhcyAnanBlZy1tZXRhZGF0YScgZnJvbSAnLi9qcGVnLW1ldGFkYXRhLnRzJztcbmV4cG9ydCAqIGFzICdsaWJyYXJ5JyBmcm9tICcuL2xpYnJhcnkudHMnO1xuZXhwb3J0ICogYXMgJ29iamVjdC11dGlscycgZnJvbSAnLi9vYmplY3QtdXRpbHMudHMnO1xuZXhwb3J0ICogYXMgJ3BhdGgnIGZyb20gJy4vcGF0aC50cyc7XG5leHBvcnQgKiBhcyAncmVnLWV4cCcgZnJvbSAnLi9yZWctZXhwLnRzJztcbmV4cG9ydCAqIGFzICdzdHJpbmcnIGZyb20gJy4vc3RyaW5nLnRzJztcbmV4cG9ydCAqIGFzICd0cmFuc2Zvcm1lcnMnIGZyb20gJy4vdHJhbnNmb3JtZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICd0d28td2F5LW1hcCcgZnJvbSAnLi90d28td2F5LW1hcC50cyc7XG5leHBvcnQgKiBhcyAndHlwZS1ndWFyZHMnIGZyb20gJy4vdHlwZS1ndWFyZHMudHMnO1xuZXhwb3J0ICogYXMgJ3R5cGUnIGZyb20gJy4vdHlwZS50cyc7XG5leHBvcnQgKiBhcyAndHlwZXNjcmlwdC1saWItc3RhdGUnIGZyb20gJy4vdHlwZXNjcmlwdC1saWItc3RhdGUudHMnO1xuZXhwb3J0ICogYXMgJ3VybCcgZnJvbSAnLi91cmwudHMnO1xuZXhwb3J0ICogYXMgJ3ZhbHVlLXByb3ZpZGVyJyBmcm9tICcuL3ZhbHVlLXByb3ZpZGVyLnRzJztcbmV4cG9ydCAqIGFzICd2YWx1ZS13cmFwcGVyJyBmcm9tICcuL3ZhbHVlLXdyYXBwZXIudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFFQSxZQUFZQSxzQkFBd0I7QUFDcEMsWUFBWUMscUJBQXVCO0FBQ25DLFlBQVlDLGtCQUFvQjtBQUNoQyxZQUFZLFdBQWE7QUFDekIsWUFBWUMsa0JBQW9CO0FBQ2hDLFlBQVlDLDBCQUE0QjtBQUN4QyxZQUFZLFdBQWE7QUFDekIsWUFBWSxZQUFjO0FBQzFCLFlBQVksVUFBWTtBQUN4QixZQUFZLFdBQWE7QUFDekIsWUFBWUMsc0JBQXdCO0FBQ3BDLFlBQVksV0FBYTtBQUN6QixZQUFZQywyQkFBNkI7QUFDekMsWUFBWSxnQkFBa0I7QUFDOUIsWUFBWUMsV0FBWTtBQUN4QixZQUFZLFdBQWE7QUFDekIsWUFBWUMsZUFBZ0I7QUFDNUIsWUFBWUMsa0JBQW9CO0FBQ2hDLFlBQVlDLG1CQUFxQjtBQUNqQyxZQUFZLGFBQWU7QUFDM0IsWUFBWUMsa0JBQW9CO0FBQ2hDLFlBQVksVUFBWTtBQUN4QixZQUFZQyxhQUFlO0FBQzNCLFlBQVksWUFBYztBQUMxQixZQUFZLGtCQUFvQjtBQUNoQyxZQUFZQyxpQkFBbUI7QUFDL0IsWUFBWUMsaUJBQW1CO0FBQy9CLFlBQVksVUFBWTtBQUN4QixZQUFZQywwQkFBNEI7QUFDeEMsWUFBWSxTQUFXO0FBQ3ZCLFlBQVlDLG9CQUFzQjtBQUNsQyxZQUFZQyxtQkFBcUI7IiwKICAibmFtZXMiOiBbImFib3J0LWNvbnRyb2xsZXIiLCAiYWdncmVnYXRlLWVycm9yIiwgImFycmF5LWJ1ZmZlciIsICJhc3luYy1ldmVudHMiLCAiYXN5bmMtb3BlcmF0aW9uLWhvb2siLCAiZGVidWctY29udHJvbGxlciIsICJkZXNrdG9wLXppcC1leHRyYWN0b3IiLCAiZW51bSIsICJmdW5jdGlvbiIsICJodG1sLWVsZW1lbnQiLCAianBlZy1tZXRhZGF0YSIsICJvYmplY3QtdXRpbHMiLCAicmVnLWV4cCIsICJ0d28td2F5LW1hcCIsICJ0eXBlLWd1YXJkcyIsICJ0eXBlc2NyaXB0LWxpYi1zdGF0ZSIsICJ2YWx1ZS1wcm92aWRlciIsICJ2YWx1ZS13cmFwcGVyIl0KfQo=
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/// <reference path="./library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Reads and re-attaches a JPEG's metadata segments.
|
|
6
|
+
*
|
|
7
|
+
* Re-encoding an image through a canvas keeps only pixels: EXIF, GPS, XMP and the ICC profile are all
|
|
8
|
+
* dropped by construction, because the canvas holds decoded samples and nothing else. These helpers
|
|
9
|
+
* lift the metadata segments off the original bytes so they can be spliced back into the re-encoded
|
|
10
|
+
* JPEG.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Extracts the metadata segments of a JPEG.
|
|
14
|
+
*
|
|
15
|
+
* Returns each matching segment whole — marker, length and payload — so
|
|
16
|
+
* {@link injectJpegMetadataSegments} can splice it into another JPEG untouched. Only the segments that
|
|
17
|
+
* carry metadata are returned: the EXIF and XMP `APP1`s and the ICC profile `APP2`. `APP0` (JFIF) is
|
|
18
|
+
* deliberately left behind, because the re-encoded JPEG writes its own.
|
|
19
|
+
*
|
|
20
|
+
* Returns an empty array for anything that is not a JPEG, including a truncated or malformed one — a
|
|
21
|
+
* caller that cannot preserve metadata should carry on without it rather than fail.
|
|
22
|
+
*
|
|
23
|
+
* @param bytes - The bytes of the source image.
|
|
24
|
+
* @returns The metadata segments, in the order they appeared.
|
|
25
|
+
*/
|
|
26
|
+
export declare function extractJpegMetadataSegments(bytes: Uint8Array): Uint8Array[];
|
|
27
|
+
/**
|
|
28
|
+
* Splices metadata segments into a JPEG.
|
|
29
|
+
*
|
|
30
|
+
* The segments go directly after the `SOI` and the re-encoded JPEG's own `APP0`, which is where a
|
|
31
|
+
* reader expects to find them.
|
|
32
|
+
*
|
|
33
|
+
* Every copied EXIF block has its orientation tag reset to upright. The canvas decode already applied
|
|
34
|
+
* the original orientation to the pixels, so carrying the tag across verbatim would rotate the image a
|
|
35
|
+
* second time — the one piece of metadata that is wrong to preserve as-is.
|
|
36
|
+
*
|
|
37
|
+
* @param jpegBytes - The bytes of the re-encoded JPEG.
|
|
38
|
+
* @param segments - The segments returned by {@link extractJpegMetadataSegments}.
|
|
39
|
+
* @returns The JPEG with the segments spliced in, or the input unchanged when there is nothing to add
|
|
40
|
+
* or the input is not a JPEG.
|
|
41
|
+
*/
|
|
42
|
+
export declare function injectJpegMetadataSegments(jpegBytes: Uint8Array, segments: readonly Uint8Array[]): Uint8Array;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const APP0_MARKER = 224;
|
|
7
|
+
const APP1_MARKER = 225;
|
|
8
|
+
const APP2_MARKER = 226;
|
|
9
|
+
const EOI_MARKER = 217;
|
|
10
|
+
const MARKER_PREFIX = 255;
|
|
11
|
+
const SOI_MARKER = 216;
|
|
12
|
+
const SOS_MARKER = 218;
|
|
13
|
+
const EXIF_HEADER = "Exif\0\0";
|
|
14
|
+
const ICC_PROFILE_HEADER = "ICC_PROFILE\0";
|
|
15
|
+
const XMP_HEADER = "http://ns.adobe.com/xap/1.0/\0";
|
|
16
|
+
const SEGMENT_HEADER_SIZE = 4;
|
|
17
|
+
const SEGMENT_LENGTH_SIZE = 2;
|
|
18
|
+
const SOI_SIZE = 2;
|
|
19
|
+
const BIG_ENDIAN_TIFF_BYTE_ORDER = 19789;
|
|
20
|
+
const IFD_ENTRY_SIZE = 12;
|
|
21
|
+
const IFD_ENTRY_VALUE_OFFSET = 8;
|
|
22
|
+
const IFD_ENTRY_COUNT_SIZE = 2;
|
|
23
|
+
const LITTLE_ENDIAN_TIFF_BYTE_ORDER = 18761;
|
|
24
|
+
const ORIENTATION_TAG = 274;
|
|
25
|
+
const ORIENTATION_UPRIGHT = 1;
|
|
26
|
+
const TIFF_HEADER_SIZE = 8;
|
|
27
|
+
const TIFF_IFD_POINTER_OFFSET = 4;
|
|
28
|
+
const TIFF_MAGIC = 42;
|
|
29
|
+
const TIFF_MAGIC_OFFSET = 2;
|
|
30
|
+
function extractJpegMetadataSegments(bytes) {
|
|
31
|
+
if (!checkIsJpeg(bytes)) {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
const view = createView(bytes);
|
|
35
|
+
const segments = [];
|
|
36
|
+
let offset = SOI_SIZE;
|
|
37
|
+
while (offset + SEGMENT_HEADER_SIZE <= bytes.length) {
|
|
38
|
+
if (bytes[offset] !== MARKER_PREFIX) {
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
const marker = bytes[offset + 1];
|
|
42
|
+
if (marker === SOS_MARKER || marker === EOI_MARKER) {
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
const segmentLength = view.getUint16(offset + SEGMENT_LENGTH_SIZE);
|
|
46
|
+
const segmentEnd = offset + SEGMENT_LENGTH_SIZE + segmentLength;
|
|
47
|
+
if (segmentLength < SEGMENT_LENGTH_SIZE || segmentEnd > bytes.length) {
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
if (checkIsMetadataSegment(bytes, offset, marker)) {
|
|
51
|
+
segments.push(bytes.slice(offset, segmentEnd));
|
|
52
|
+
}
|
|
53
|
+
offset = segmentEnd;
|
|
54
|
+
}
|
|
55
|
+
return segments;
|
|
56
|
+
}
|
|
57
|
+
function injectJpegMetadataSegments(jpegBytes, segments) {
|
|
58
|
+
if (segments.length === 0 || !checkIsJpeg(jpegBytes)) {
|
|
59
|
+
return jpegBytes;
|
|
60
|
+
}
|
|
61
|
+
const normalizedSegments = segments.map((segment) => normalizeOrientation(segment));
|
|
62
|
+
const insertAt = findInsertOffset(jpegBytes);
|
|
63
|
+
const addedLength = normalizedSegments.reduce((total, segment) => total + segment.length, 0);
|
|
64
|
+
const result = new Uint8Array(jpegBytes.length + addedLength);
|
|
65
|
+
result.set(jpegBytes.subarray(0, insertAt), 0);
|
|
66
|
+
let writeAt = insertAt;
|
|
67
|
+
for (const segment of normalizedSegments) {
|
|
68
|
+
result.set(segment, writeAt);
|
|
69
|
+
writeAt += segment.length;
|
|
70
|
+
}
|
|
71
|
+
result.set(jpegBytes.subarray(insertAt), writeAt);
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
function checkIsJpeg(bytes) {
|
|
75
|
+
return bytes.length >= SOI_SIZE && bytes[0] === MARKER_PREFIX && bytes[1] === SOI_MARKER;
|
|
76
|
+
}
|
|
77
|
+
function checkIsMetadataSegment(bytes, offset, marker) {
|
|
78
|
+
const payloadOffset = offset + SEGMENT_HEADER_SIZE;
|
|
79
|
+
return marker === APP1_MARKER ? checkMatchesHeader(bytes, payloadOffset, EXIF_HEADER) || checkMatchesHeader(bytes, payloadOffset, XMP_HEADER) : marker === APP2_MARKER && checkMatchesHeader(bytes, payloadOffset, ICC_PROFILE_HEADER);
|
|
80
|
+
}
|
|
81
|
+
function checkMatchesHeader(bytes, offset, header) {
|
|
82
|
+
if (offset + header.length > bytes.length) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
for (let index = 0; index < header.length; index++) {
|
|
86
|
+
if (bytes[offset + index] !== header.codePointAt(index)) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
function createView(bytes) {
|
|
93
|
+
return new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
94
|
+
}
|
|
95
|
+
function findInsertOffset(jpegBytes) {
|
|
96
|
+
if (SOI_SIZE + SEGMENT_HEADER_SIZE > jpegBytes.length) {
|
|
97
|
+
return SOI_SIZE;
|
|
98
|
+
}
|
|
99
|
+
if (jpegBytes[SOI_SIZE] !== MARKER_PREFIX || jpegBytes[SOI_SIZE + 1] !== APP0_MARKER) {
|
|
100
|
+
return SOI_SIZE;
|
|
101
|
+
}
|
|
102
|
+
const app0End = SOI_SIZE + SEGMENT_LENGTH_SIZE + createView(jpegBytes).getUint16(SOI_SIZE + SEGMENT_LENGTH_SIZE);
|
|
103
|
+
return app0End > jpegBytes.length ? SOI_SIZE : app0End;
|
|
104
|
+
}
|
|
105
|
+
function normalizeOrientation(segment) {
|
|
106
|
+
if (segment[1] !== APP1_MARKER || !checkMatchesHeader(segment, SEGMENT_HEADER_SIZE, EXIF_HEADER)) {
|
|
107
|
+
return segment;
|
|
108
|
+
}
|
|
109
|
+
const tiffOffset = SEGMENT_HEADER_SIZE + EXIF_HEADER.length;
|
|
110
|
+
if (tiffOffset + TIFF_HEADER_SIZE > segment.length) {
|
|
111
|
+
return segment;
|
|
112
|
+
}
|
|
113
|
+
const view = createView(segment);
|
|
114
|
+
const byteOrder = view.getUint16(tiffOffset);
|
|
115
|
+
const isLittleEndian = byteOrder === LITTLE_ENDIAN_TIFF_BYTE_ORDER;
|
|
116
|
+
if (!isLittleEndian && byteOrder !== BIG_ENDIAN_TIFF_BYTE_ORDER) {
|
|
117
|
+
return segment;
|
|
118
|
+
}
|
|
119
|
+
if (view.getUint16(tiffOffset + TIFF_MAGIC_OFFSET, isLittleEndian) !== TIFF_MAGIC) {
|
|
120
|
+
return segment;
|
|
121
|
+
}
|
|
122
|
+
const ifdOffset = tiffOffset + view.getUint32(tiffOffset + TIFF_IFD_POINTER_OFFSET, isLittleEndian);
|
|
123
|
+
if (ifdOffset + IFD_ENTRY_COUNT_SIZE > segment.length) {
|
|
124
|
+
return segment;
|
|
125
|
+
}
|
|
126
|
+
const entryCount = view.getUint16(ifdOffset, isLittleEndian);
|
|
127
|
+
const entriesOffset = ifdOffset + IFD_ENTRY_COUNT_SIZE;
|
|
128
|
+
if (entriesOffset + entryCount * IFD_ENTRY_SIZE > segment.length) {
|
|
129
|
+
return segment;
|
|
130
|
+
}
|
|
131
|
+
const result = new Uint8Array(segment);
|
|
132
|
+
const resultView = createView(result);
|
|
133
|
+
for (let index = 0; index < entryCount; index++) {
|
|
134
|
+
const entryOffset = entriesOffset + index * IFD_ENTRY_SIZE;
|
|
135
|
+
if (resultView.getUint16(entryOffset, isLittleEndian) === ORIENTATION_TAG) {
|
|
136
|
+
resultView.setUint16(entryOffset + IFD_ENTRY_VALUE_OFFSET, ORIENTATION_UPRIGHT, isLittleEndian);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
export {
|
|
142
|
+
extractJpegMetadataSegments,
|
|
143
|
+
injectJpegMetadataSegments
|
|
144
|
+
};
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2pwZWctbWV0YWRhdGEudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZWFkcyBhbmQgcmUtYXR0YWNoZXMgYSBKUEVHJ3MgbWV0YWRhdGEgc2VnbWVudHMuXG4gKlxuICogUmUtZW5jb2RpbmcgYW4gaW1hZ2UgdGhyb3VnaCBhIGNhbnZhcyBrZWVwcyBvbmx5IHBpeGVsczogRVhJRiwgR1BTLCBYTVAgYW5kIHRoZSBJQ0MgcHJvZmlsZSBhcmUgYWxsXG4gKiBkcm9wcGVkIGJ5IGNvbnN0cnVjdGlvbiwgYmVjYXVzZSB0aGUgY2FudmFzIGhvbGRzIGRlY29kZWQgc2FtcGxlcyBhbmQgbm90aGluZyBlbHNlLiBUaGVzZSBoZWxwZXJzXG4gKiBsaWZ0IHRoZSBtZXRhZGF0YSBzZWdtZW50cyBvZmYgdGhlIG9yaWdpbmFsIGJ5dGVzIHNvIHRoZXkgY2FuIGJlIHNwbGljZWQgYmFjayBpbnRvIHRoZSByZS1lbmNvZGVkXG4gKiBKUEVHLlxuICovXG5cbmNvbnN0IEFQUDBfTUFSS0VSID0gMHhFMDtcbmNvbnN0IEFQUDFfTUFSS0VSID0gMHhFMTtcbmNvbnN0IEFQUDJfTUFSS0VSID0gMHhFMjtcbmNvbnN0IEVPSV9NQVJLRVIgPSAweEQ5O1xuY29uc3QgTUFSS0VSX1BSRUZJWCA9IDB4RkY7XG5jb25zdCBTT0lfTUFSS0VSID0gMHhEODtcbmNvbnN0IFNPU19NQVJLRVIgPSAweERBO1xuXG5jb25zdCBFWElGX0hFQURFUiA9ICdFeGlmXFwwXFwwJztcbmNvbnN0IElDQ19QUk9GSUxFX0hFQURFUiA9ICdJQ0NfUFJPRklMRVxcMCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItaHR0cHMgLS0gVGhlIGxpdGVyYWwgYnl0ZXMgQWRvYmUgd3JpdGVzIGludG8gdGhlIGBBUFAxYCBzZWdtZW50LiBJdCBpcyBhIG5hbWVzcGFjZSBpZGVudGlmaWVyLCBuZXZlciBmZXRjaGVkLCBhbmQgcmV3cml0aW5nIGl0IHRvIGBodHRwc2Agd291bGQgc3RvcCBYTVAgZnJvbSBldmVyIG1hdGNoaW5nLlxuY29uc3QgWE1QX0hFQURFUiA9ICdodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvXFwwJztcblxuLyoqXG4gKiBCeXRlcyBmcm9tIHRoZSBzdGFydCBvZiBhIHNlZ21lbnQgdG8gaXRzIHBheWxvYWQ6IHRoZSB0d28gbWFya2VyIGJ5dGVzIHBsdXMgdGhlIHR3byBsZW5ndGggYnl0ZXMuXG4gKi9cbmNvbnN0IFNFR01FTlRfSEVBREVSX1NJWkUgPSA0O1xuXG4vKipcbiAqIFRoZSBzZWdtZW50IGxlbmd0aCBmaWVsZCBpdHNlbGYgY291bnRzIHRoZSB0d28gYnl0ZXMgaXQgb2NjdXBpZXMuXG4gKi9cbmNvbnN0IFNFR01FTlRfTEVOR1RIX1NJWkUgPSAyO1xuXG4vKipcbiAqIFRoZSBgU09JYCBtYXJrZXIgdGhhdCBvcGVucyBldmVyeSBKUEVHLlxuICovXG5jb25zdCBTT0lfU0laRSA9IDI7XG5cbmNvbnN0IEJJR19FTkRJQU5fVElGRl9CWVRFX09SREVSID0gMHg0RF80RDtcbmNvbnN0IElGRF9FTlRSWV9TSVpFID0gMTI7XG4vKipcbiAqIEJ5dGVzIGZyb20gdGhlIHN0YXJ0IG9mIGFuIElGRCBlbnRyeSB0byBpdHMgaW5saW5lIHZhbHVlOiB0YWcgKDIpICsgdHlwZSAoMikgKyBjb3VudCAoNCkuXG4gKi9cbmNvbnN0IElGRF9FTlRSWV9WQUxVRV9PRkZTRVQgPSA4O1xuY29uc3QgSUZEX0VOVFJZX0NPVU5UX1NJWkUgPSAyO1xuY29uc3QgTElUVExFX0VORElBTl9USUZGX0JZVEVfT1JERVIgPSAweDQ5XzQ5O1xuY29uc3QgT1JJRU5UQVRJT05fVEFHID0gMHgwMV8xMjtcbmNvbnN0IE9SSUVOVEFUSU9OX1VQUklHSFQgPSAxO1xuY29uc3QgVElGRl9IRUFERVJfU0laRSA9IDg7XG5jb25zdCBUSUZGX0lGRF9QT0lOVEVSX09GRlNFVCA9IDQ7XG5jb25zdCBUSUZGX01BR0lDID0gMHgwMF8yQTtcbmNvbnN0IFRJRkZfTUFHSUNfT0ZGU0VUID0gMjtcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgbWV0YWRhdGEgc2VnbWVudHMgb2YgYSBKUEVHLlxuICpcbiAqIFJldHVybnMgZWFjaCBtYXRjaGluZyBzZWdtZW50IHdob2xlIFx1MjAxNCBtYXJrZXIsIGxlbmd0aCBhbmQgcGF5bG9hZCBcdTIwMTQgc29cbiAqIHtAbGluayBpbmplY3RKcGVnTWV0YWRhdGFTZWdtZW50c30gY2FuIHNwbGljZSBpdCBpbnRvIGFub3RoZXIgSlBFRyB1bnRvdWNoZWQuIE9ubHkgdGhlIHNlZ21lbnRzIHRoYXRcbiAqIGNhcnJ5IG1ldGFkYXRhIGFyZSByZXR1cm5lZDogdGhlIEVYSUYgYW5kIFhNUCBgQVBQMWBzIGFuZCB0aGUgSUNDIHByb2ZpbGUgYEFQUDJgLiBgQVBQMGAgKEpGSUYpIGlzXG4gKiBkZWxpYmVyYXRlbHkgbGVmdCBiZWhpbmQsIGJlY2F1c2UgdGhlIHJlLWVuY29kZWQgSlBFRyB3cml0ZXMgaXRzIG93bi5cbiAqXG4gKiBSZXR1cm5zIGFuIGVtcHR5IGFycmF5IGZvciBhbnl0aGluZyB0aGF0IGlzIG5vdCBhIEpQRUcsIGluY2x1ZGluZyBhIHRydW5jYXRlZCBvciBtYWxmb3JtZWQgb25lIFx1MjAxNCBhXG4gKiBjYWxsZXIgdGhhdCBjYW5ub3QgcHJlc2VydmUgbWV0YWRhdGEgc2hvdWxkIGNhcnJ5IG9uIHdpdGhvdXQgaXQgcmF0aGVyIHRoYW4gZmFpbC5cbiAqXG4gKiBAcGFyYW0gYnl0ZXMgLSBUaGUgYnl0ZXMgb2YgdGhlIHNvdXJjZSBpbWFnZS5cbiAqIEByZXR1cm5zIFRoZSBtZXRhZGF0YSBzZWdtZW50cywgaW4gdGhlIG9yZGVyIHRoZXkgYXBwZWFyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0SnBlZ01ldGFkYXRhU2VnbWVudHMoYnl0ZXM6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5W10ge1xuICBpZiAoIWNoZWNrSXNKcGVnKGJ5dGVzKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHZpZXcgPSBjcmVhdGVWaWV3KGJ5dGVzKTtcbiAgY29uc3Qgc2VnbWVudHM6IFVpbnQ4QXJyYXlbXSA9IFtdO1xuICBsZXQgb2Zmc2V0ID0gU09JX1NJWkU7XG5cbiAgd2hpbGUgKG9mZnNldCArIFNFR01FTlRfSEVBREVSX1NJWkUgPD0gYnl0ZXMubGVuZ3RoKSB7XG4gICAgaWYgKGJ5dGVzW29mZnNldF0gIT09IE1BUktFUl9QUkVGSVgpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNvbnN0IG1hcmtlciA9IGJ5dGVzW29mZnNldCArIDFdO1xuICAgIGlmIChtYXJrZXIgPT09IFNPU19NQVJLRVIgfHwgbWFya2VyID09PSBFT0lfTUFSS0VSKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCBzZWdtZW50TGVuZ3RoID0gdmlldy5nZXRVaW50MTYob2Zmc2V0ICsgU0VHTUVOVF9MRU5HVEhfU0laRSk7XG4gICAgY29uc3Qgc2VnbWVudEVuZCA9IG9mZnNldCArIFNFR01FTlRfTEVOR1RIX1NJWkUgKyBzZWdtZW50TGVuZ3RoO1xuICAgIGlmIChzZWdtZW50TGVuZ3RoIDwgU0VHTUVOVF9MRU5HVEhfU0laRSB8fCBzZWdtZW50RW5kID4gYnl0ZXMubGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tJc01ldGFkYXRhU2VnbWVudChieXRlcywgb2Zmc2V0LCBtYXJrZXIpKSB7XG4gICAgICBzZWdtZW50cy5wdXNoKGJ5dGVzLnNsaWNlKG9mZnNldCwgc2VnbWVudEVuZCkpO1xuICAgIH1cblxuICAgIG9mZnNldCA9IHNlZ21lbnRFbmQ7XG4gIH1cblxuICByZXR1cm4gc2VnbWVudHM7XG59XG5cbi8qKlxuICogU3BsaWNlcyBtZXRhZGF0YSBzZWdtZW50cyBpbnRvIGEgSlBFRy5cbiAqXG4gKiBUaGUgc2VnbWVudHMgZ28gZGlyZWN0bHkgYWZ0ZXIgdGhlIGBTT0lgIGFuZCB0aGUgcmUtZW5jb2RlZCBKUEVHJ3Mgb3duIGBBUFAwYCwgd2hpY2ggaXMgd2hlcmUgYVxuICogcmVhZGVyIGV4cGVjdHMgdG8gZmluZCB0aGVtLlxuICpcbiAqIEV2ZXJ5IGNvcGllZCBFWElGIGJsb2NrIGhhcyBpdHMgb3JpZW50YXRpb24gdGFnIHJlc2V0IHRvIHVwcmlnaHQuIFRoZSBjYW52YXMgZGVjb2RlIGFscmVhZHkgYXBwbGllZFxuICogdGhlIG9yaWdpbmFsIG9yaWVudGF0aW9uIHRvIHRoZSBwaXhlbHMsIHNvIGNhcnJ5aW5nIHRoZSB0YWcgYWNyb3NzIHZlcmJhdGltIHdvdWxkIHJvdGF0ZSB0aGUgaW1hZ2UgYVxuICogc2Vjb25kIHRpbWUgXHUyMDE0IHRoZSBvbmUgcGllY2Ugb2YgbWV0YWRhdGEgdGhhdCBpcyB3cm9uZyB0byBwcmVzZXJ2ZSBhcy1pcy5cbiAqXG4gKiBAcGFyYW0ganBlZ0J5dGVzIC0gVGhlIGJ5dGVzIG9mIHRoZSByZS1lbmNvZGVkIEpQRUcuXG4gKiBAcGFyYW0gc2VnbWVudHMgLSBUaGUgc2VnbWVudHMgcmV0dXJuZWQgYnkge0BsaW5rIGV4dHJhY3RKcGVnTWV0YWRhdGFTZWdtZW50c30uXG4gKiBAcmV0dXJucyBUaGUgSlBFRyB3aXRoIHRoZSBzZWdtZW50cyBzcGxpY2VkIGluLCBvciB0aGUgaW5wdXQgdW5jaGFuZ2VkIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0byBhZGRcbiAqICAgb3IgdGhlIGlucHV0IGlzIG5vdCBhIEpQRUcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RKcGVnTWV0YWRhdGFTZWdtZW50cyhqcGVnQnl0ZXM6IFVpbnQ4QXJyYXksIHNlZ21lbnRzOiByZWFkb25seSBVaW50OEFycmF5W10pOiBVaW50OEFycmF5IHtcbiAgaWYgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMCB8fCAhY2hlY2tJc0pwZWcoanBlZ0J5dGVzKSkge1xuICAgIHJldHVybiBqcGVnQnl0ZXM7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkU2VnbWVudHMgPSBzZWdtZW50cy5tYXAoKHNlZ21lbnQpID0+IG5vcm1hbGl6ZU9yaWVudGF0aW9uKHNlZ21lbnQpKTtcbiAgY29uc3QgaW5zZXJ0QXQgPSBmaW5kSW5zZXJ0T2Zmc2V0KGpwZWdCeXRlcyk7XG4gIGNvbnN0IGFkZGVkTGVuZ3RoID0gbm9ybWFsaXplZFNlZ21lbnRzLnJlZHVjZSgodG90YWwsIHNlZ21lbnQpID0+IHRvdGFsICsgc2VnbWVudC5sZW5ndGgsIDApO1xuICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheShqcGVnQnl0ZXMubGVuZ3RoICsgYWRkZWRMZW5ndGgpO1xuXG4gIHJlc3VsdC5zZXQoanBlZ0J5dGVzLnN1YmFycmF5KDAsIGluc2VydEF0KSwgMCk7XG4gIGxldCB3cml0ZUF0ID0gaW5zZXJ0QXQ7XG4gIGZvciAoY29uc3Qgc2VnbWVudCBvZiBub3JtYWxpemVkU2VnbWVudHMpIHtcbiAgICByZXN1bHQuc2V0KHNlZ21lbnQsIHdyaXRlQXQpO1xuICAgIHdyaXRlQXQgKz0gc2VnbWVudC5sZW5ndGg7XG4gIH1cbiAgcmVzdWx0LnNldChqcGVnQnl0ZXMuc3ViYXJyYXkoaW5zZXJ0QXQpLCB3cml0ZUF0KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBjaGVja0lzSnBlZyhieXRlczogVWludDhBcnJheSk6IGJvb2xlYW4ge1xuICByZXR1cm4gYnl0ZXMubGVuZ3RoID49IFNPSV9TSVpFICYmIGJ5dGVzWzBdID09PSBNQVJLRVJfUFJFRklYICYmIGJ5dGVzWzFdID09PSBTT0lfTUFSS0VSO1xufVxuXG5mdW5jdGlvbiBjaGVja0lzTWV0YWRhdGFTZWdtZW50KGJ5dGVzOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlciwgbWFya2VyOiBudW1iZXIgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgY29uc3QgcGF5bG9hZE9mZnNldCA9IG9mZnNldCArIFNFR01FTlRfSEVBREVSX1NJWkU7XG4gIHJldHVybiBtYXJrZXIgPT09IEFQUDFfTUFSS0VSXG4gICAgPyBjaGVja01hdGNoZXNIZWFkZXIoYnl0ZXMsIHBheWxvYWRPZmZzZXQsIEVYSUZfSEVBREVSKSB8fCBjaGVja01hdGNoZXNIZWFkZXIoYnl0ZXMsIHBheWxvYWRPZmZzZXQsIFhNUF9IRUFERVIpXG4gICAgOiBtYXJrZXIgPT09IEFQUDJfTUFSS0VSICYmIGNoZWNrTWF0Y2hlc0hlYWRlcihieXRlcywgcGF5bG9hZE9mZnNldCwgSUNDX1BST0ZJTEVfSEVBREVSKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tNYXRjaGVzSGVhZGVyKGJ5dGVzOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlciwgaGVhZGVyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKG9mZnNldCArIGhlYWRlci5sZW5ndGggPiBieXRlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGhlYWRlci5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBpZiAoYnl0ZXNbb2Zmc2V0ICsgaW5kZXhdICE9PSBoZWFkZXIuY29kZVBvaW50QXQoaW5kZXgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVWaWV3KGJ5dGVzOiBVaW50OEFycmF5KTogRGF0YVZpZXcge1xuICByZXR1cm4gbmV3IERhdGFWaWV3KGJ5dGVzLmJ1ZmZlciwgYnl0ZXMuYnl0ZU9mZnNldCwgYnl0ZXMuYnl0ZUxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGZpbmRJbnNlcnRPZmZzZXQoanBlZ0J5dGVzOiBVaW50OEFycmF5KTogbnVtYmVyIHtcbiAgaWYgKFNPSV9TSVpFICsgU0VHTUVOVF9IRUFERVJfU0laRSA+IGpwZWdCeXRlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gU09JX1NJWkU7XG4gIH1cbiAgaWYgKGpwZWdCeXRlc1tTT0lfU0laRV0gIT09IE1BUktFUl9QUkVGSVggfHwganBlZ0J5dGVzW1NPSV9TSVpFICsgMV0gIT09IEFQUDBfTUFSS0VSKSB7XG4gICAgcmV0dXJuIFNPSV9TSVpFO1xuICB9XG5cbiAgY29uc3QgYXBwMEVuZCA9IFNPSV9TSVpFICsgU0VHTUVOVF9MRU5HVEhfU0laRSArIGNyZWF0ZVZpZXcoanBlZ0J5dGVzKS5nZXRVaW50MTYoU09JX1NJWkUgKyBTRUdNRU5UX0xFTkdUSF9TSVpFKTtcbiAgcmV0dXJuIGFwcDBFbmQgPiBqcGVnQnl0ZXMubGVuZ3RoID8gU09JX1NJWkUgOiBhcHAwRW5kO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVPcmllbnRhdGlvbihzZWdtZW50OiBVaW50OEFycmF5KTogVWludDhBcnJheSB7XG4gIGlmIChzZWdtZW50WzFdICE9PSBBUFAxX01BUktFUiB8fCAhY2hlY2tNYXRjaGVzSGVhZGVyKHNlZ21lbnQsIFNFR01FTlRfSEVBREVSX1NJWkUsIEVYSUZfSEVBREVSKSkge1xuICAgIHJldHVybiBzZWdtZW50O1xuICB9XG5cbiAgY29uc3QgdGlmZk9mZnNldCA9IFNFR01FTlRfSEVBREVSX1NJWkUgKyBFWElGX0hFQURFUi5sZW5ndGg7XG4gIGlmICh0aWZmT2Zmc2V0ICsgVElGRl9IRUFERVJfU0laRSA+IHNlZ21lbnQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHNlZ21lbnQ7XG4gIH1cblxuICBjb25zdCB2aWV3ID0gY3JlYXRlVmlldyhzZWdtZW50KTtcbiAgY29uc3QgYnl0ZU9yZGVyID0gdmlldy5nZXRVaW50MTYodGlmZk9mZnNldCk7XG4gIGNvbnN0IGlzTGl0dGxlRW5kaWFuID0gYnl0ZU9yZGVyID09PSBMSVRUTEVfRU5ESUFOX1RJRkZfQllURV9PUkRFUjtcbiAgaWYgKCFpc0xpdHRsZUVuZGlhbiAmJiBieXRlT3JkZXIgIT09IEJJR19FTkRJQU5fVElGRl9CWVRFX09SREVSKSB7XG4gICAgcmV0dXJuIHNlZ21lbnQ7XG4gIH1cblxuICBpZiAodmlldy5nZXRVaW50MTYodGlmZk9mZnNldCArIFRJRkZfTUFHSUNfT0ZGU0VULCBpc0xpdHRsZUVuZGlhbikgIT09IFRJRkZfTUFHSUMpIHtcbiAgICByZXR1cm4gc2VnbWVudDtcbiAgfVxuXG4gIGNvbnN0IGlmZE9mZnNldCA9IHRpZmZPZmZzZXQgKyB2aWV3LmdldFVpbnQzMih0aWZmT2Zmc2V0ICsgVElGRl9JRkRfUE9JTlRFUl9PRkZTRVQsIGlzTGl0dGxlRW5kaWFuKTtcbiAgaWYgKGlmZE9mZnNldCArIElGRF9FTlRSWV9DT1VOVF9TSVpFID4gc2VnbWVudC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc2VnbWVudDtcbiAgfVxuXG4gIGNvbnN0IGVudHJ5Q291bnQgPSB2aWV3LmdldFVpbnQxNihpZmRPZmZzZXQsIGlzTGl0dGxlRW5kaWFuKTtcbiAgY29uc3QgZW50cmllc09mZnNldCA9IGlmZE9mZnNldCArIElGRF9FTlRSWV9DT1VOVF9TSVpFO1xuICBpZiAoZW50cmllc09mZnNldCArIGVudHJ5Q291bnQgKiBJRkRfRU5UUllfU0laRSA+IHNlZ21lbnQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHNlZ21lbnQ7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheShzZWdtZW50KTtcbiAgY29uc3QgcmVzdWx0VmlldyA9IGNyZWF0ZVZpZXcocmVzdWx0KTtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVudHJ5Q291bnQ7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbnRyeU9mZnNldCA9IGVudHJpZXNPZmZzZXQgKyBpbmRleCAqIElGRF9FTlRSWV9TSVpFO1xuICAgIGlmIChyZXN1bHRWaWV3LmdldFVpbnQxNihlbnRyeU9mZnNldCwgaXNMaXR0bGVFbmRpYW4pID09PSBPUklFTlRBVElPTl9UQUcpIHtcbiAgICAgIHJlc3VsdFZpZXcuc2V0VWludDE2KGVudHJ5T2Zmc2V0ICsgSUZEX0VOVFJZX1ZBTFVFX09GRlNFVCwgT1JJRU5UQVRJT05fVVBSSUdIVCwgaXNMaXR0bGVFbmRpYW4pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXSwKICAibWFwcGlu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
|