@adobe/helix-rum-enhancer 2.35.0 → 2.35.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/.releaserc.cjs +1 -1
- package/CHANGELOG.md +17 -0
- package/modules/dom.js +4 -1
- package/modules/index.js +16 -5
- package/package.json +3 -3
- package/plugins/form.js +2 -2
- package/plugins/webcomponent.js +104 -0
- package/src/index.js +15 -6
- package/src/index.md5 +1 -1
- package/src/index.sri +1 -1
- package/src/plugins/form.js +2 -2
- package/src/plugins/form.map.js +3 -3
- package/src/plugins/form.md5 +1 -1
- package/src/plugins/webcomponent.js +79 -0
- package/src/plugins/webcomponent.map.js +80 -0
- package/src/plugins/webcomponent.md5 +1 -0
package/.releaserc.cjs
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
## [2.35.2](https://github.com/adobe/helix-rum-enhancer/compare/v2.35.1...v2.35.2) (2025-05-22)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* get selector within shadowdom ([b3562cb](https://github.com/adobe/helix-rum-enhancer/commit/b3562cbd6180ccd1d10c81267b3518088359fe00))
|
|
7
|
+
* handle webcomponent sources ([0d3fbf2](https://github.com/adobe/helix-rum-enhancer/commit/0d3fbf247db02b9b296958f2859c9a04e36ace2d))
|
|
8
|
+
* include webcomponent tagname in source selector ([5794f5c](https://github.com/adobe/helix-rum-enhancer/commit/5794f5c3156f2572c63f5ea2560383bf924ead5b))
|
|
9
|
+
* observe nested webcomponent mutations ([9c05d0b](https://github.com/adobe/helix-rum-enhancer/commit/9c05d0b9158af10712004642ba1daa182eb7ac53))
|
|
10
|
+
|
|
11
|
+
## [2.35.1](https://github.com/adobe/helix-rum-enhancer/compare/v2.35.0...v2.35.1) (2025-05-21)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
* **releaserc:** update path for RUM Enhancer SRI Hash configuration ([2da2aa7](https://github.com/adobe/helix-rum-enhancer/commit/2da2aa7ddcd801d01a99ff16f0ed596320516073))
|
|
17
|
+
|
|
1
18
|
# [2.35.0](https://github.com/adobe/helix-rum-enhancer/compare/v2.34.3...v2.35.0) (2025-05-21)
|
|
2
19
|
|
|
3
20
|
|
package/modules/dom.js
CHANGED
|
@@ -34,7 +34,8 @@ function walk(el, checkFn) {
|
|
|
34
34
|
if (!el || el === document.body || el === document.documentElement) {
|
|
35
35
|
return undefined;
|
|
36
36
|
}
|
|
37
|
-
|
|
37
|
+
|
|
38
|
+
return checkFn(el) || walk(el.parentElement || (el.parentNode && el.parentNode.host), checkFn);
|
|
38
39
|
}
|
|
39
40
|
|
|
40
41
|
function isDialog(el) {
|
|
@@ -69,6 +70,7 @@ function getSourceContext(el) {
|
|
|
69
70
|
const block = el.closest('.block[data-block-name]');
|
|
70
71
|
return ((block && `.${block.getAttribute('data-block-name')}`)
|
|
71
72
|
|| (walk(el, isDialog) && 'dialog')
|
|
73
|
+
|| (walk(el, (e) => e.tagName && e.tagName.includes('-') && e.tagName.toLowerCase()))
|
|
72
74
|
|| ['nav', 'header', 'footer', 'aside'].find((t) => el.closest(t))
|
|
73
75
|
|| walk(el, (e) => e.id && `#${e.id}`));
|
|
74
76
|
}
|
|
@@ -90,6 +92,7 @@ function getSourceIdentifier(el) {
|
|
|
90
92
|
if (el.getAttribute('data-block-name')) return `.${el.getAttribute('data-block-name')}`;
|
|
91
93
|
return (el.classList.length > 0 && `.${el.classList[0]}`);
|
|
92
94
|
}
|
|
95
|
+
|
|
93
96
|
export const sourceSelector = (el) => {
|
|
94
97
|
try {
|
|
95
98
|
if (!el || el === document.body || el === document.documentElement) {
|
package/modules/index.js
CHANGED
|
@@ -22,7 +22,7 @@ const { sampleRUM, queue, isSelected } = (window.hlx && window.hlx.rum) ? window
|
|
|
22
22
|
const createMO = (cb) => (window.MutationObserver ? new MutationObserver(cb)
|
|
23
23
|
/* c8 ignore next */ : {});
|
|
24
24
|
|
|
25
|
-
// blocks & media mutation
|
|
25
|
+
// blocks & media mutation observers
|
|
26
26
|
// eslint-disable-next-line no-use-before-define
|
|
27
27
|
const [blocksMO, mediaMO] = [blocksMCB, mediaMCB].map(createMO);
|
|
28
28
|
|
|
@@ -37,13 +37,18 @@ const PLUGINS = {
|
|
|
37
37
|
// Interactive elements
|
|
38
38
|
form: { url: `${pluginBasePath}/form.js`, when: () => document.querySelector('form'), isBlockDependent: true },
|
|
39
39
|
video: { url: `${pluginBasePath}/video.js`, when: () => document.querySelector('video'), isBlockDependent: true },
|
|
40
|
+
webcomponent: {
|
|
41
|
+
url: `${pluginBasePath}/webcomponent.js`,
|
|
42
|
+
when: () => [...document.querySelectorAll('*')].some((el) => el.tagName && el.tagName.includes('-')),
|
|
43
|
+
isBlockDependent: true,
|
|
44
|
+
},
|
|
40
45
|
// Martech
|
|
41
46
|
martech: { url: `${pluginBasePath}/martech.js`, when: ({ urlParameters }) => urlParameters.size > 0 },
|
|
42
47
|
onetrust: { url: `${pluginBasePath}/onetrust.js`, when: () => (document.querySelector('#onetrust-consent-sdk') || hasCookieKey('OptanonAlertBoxClosed')), isBlockDependent: true },
|
|
43
48
|
// test: broken-plugin
|
|
44
49
|
};
|
|
45
50
|
|
|
46
|
-
function
|
|
51
|
+
function getIntersectionObserver(checkpoint) {
|
|
47
52
|
/* c8 ignore next 3 */
|
|
48
53
|
if (!window.IntersectionObserver) {
|
|
49
54
|
return null;
|
|
@@ -72,7 +77,8 @@ const PLUGIN_PARAMETERS = {
|
|
|
72
77
|
sampleRUM,
|
|
73
78
|
sourceSelector,
|
|
74
79
|
targetSelector,
|
|
75
|
-
|
|
80
|
+
getIntersectionObserver,
|
|
81
|
+
createMO,
|
|
76
82
|
};
|
|
77
83
|
|
|
78
84
|
const pluginCache = new Map();
|
|
@@ -83,9 +89,11 @@ function loadPlugin(key, params) {
|
|
|
83
89
|
if (!pluginCache.has(key) && plugin.when && !plugin.when({ urlParameters: usp })) {
|
|
84
90
|
return null;
|
|
85
91
|
}
|
|
92
|
+
|
|
86
93
|
if (!pluginCache.has(key)) {
|
|
87
94
|
pluginCache.set(key, import(`${plugin.url || plugin}`));
|
|
88
95
|
}
|
|
96
|
+
|
|
89
97
|
const pluginLoadPromise = pluginCache.get(key);
|
|
90
98
|
return pluginLoadPromise
|
|
91
99
|
.then((p) => (p.default && p.default(params)) || (typeof p === 'function' && p(params)))
|
|
@@ -231,7 +239,7 @@ function activateMediaMO() {
|
|
|
231
239
|
}
|
|
232
240
|
|
|
233
241
|
function addViewBlockTracking(element) {
|
|
234
|
-
const blockobserver =
|
|
242
|
+
const blockobserver = getIntersectionObserver('viewblock');
|
|
235
243
|
if (blockobserver) {
|
|
236
244
|
const blocks = element.getAttribute('data-block-status') ? [element] : element.querySelectorAll('div[data-block-status="loaded"]');
|
|
237
245
|
blocks.forEach((b) => blockobserver.observe(b));
|
|
@@ -240,7 +248,7 @@ function addViewBlockTracking(element) {
|
|
|
240
248
|
|
|
241
249
|
const observedMedia = new Set();
|
|
242
250
|
function addViewMediaTracking(parent) {
|
|
243
|
-
const mediaobserver =
|
|
251
|
+
const mediaobserver = getIntersectionObserver('viewmedia');
|
|
244
252
|
if (mediaobserver) {
|
|
245
253
|
parent.querySelectorAll('img, video, audio, iframe').forEach((m) => {
|
|
246
254
|
if (!observedMedia.has(m)) {
|
|
@@ -281,6 +289,9 @@ function addTrackingFromConfig() {
|
|
|
281
289
|
activateMediaMO();
|
|
282
290
|
|
|
283
291
|
document.addEventListener('click', (event) => {
|
|
292
|
+
if (event.optelHandled) {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
284
295
|
sampleRUM('click', { target: targetSelector(event.target), source: sourceSelector(event.target) });
|
|
285
296
|
});
|
|
286
297
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adobe/helix-rum-enhancer",
|
|
3
|
-
"version": "2.35.
|
|
3
|
+
"version": "2.35.2",
|
|
4
4
|
"description": "Helix RUM Enhancer",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -28,13 +28,13 @@
|
|
|
28
28
|
},
|
|
29
29
|
"homepage": "https://github.com/adobe/helix-rum-enhancer#readme",
|
|
30
30
|
"mocha": {
|
|
31
|
-
"recursive":
|
|
31
|
+
"recursive": true,
|
|
32
32
|
"reporter": "mocha-multi-reporters",
|
|
33
33
|
"reporter-options": "configFile=.mocha-multi.json"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@adobe/eslint-config-helix": "2.0.9",
|
|
37
|
-
"@adobe/helix-rum-js": "2.
|
|
37
|
+
"@adobe/helix-rum-js": "2.11.4",
|
|
38
38
|
"@esm-bundle/chai": "4.3.4-fix.0",
|
|
39
39
|
"@rollup/plugin-babel": "6.0.4",
|
|
40
40
|
"@semantic-release/changelog": "6.0.3",
|
package/plugins/form.js
CHANGED
|
@@ -24,11 +24,11 @@ export const getSubmitType = (el) => {
|
|
|
24
24
|
};
|
|
25
25
|
|
|
26
26
|
export default function addFormTracking({
|
|
27
|
-
sampleRUM, sourceSelector, targetSelector, context,
|
|
27
|
+
sampleRUM, sourceSelector, targetSelector, context, getIntersectionObserver,
|
|
28
28
|
}) {
|
|
29
29
|
context.querySelectorAll('form').forEach((form) => {
|
|
30
30
|
form.addEventListener('submit', (e) => sampleRUM(getSubmitType(e.target), { target: targetSelector(e.target), source: sourceSelector(e.target) }), { once: true });
|
|
31
|
-
|
|
31
|
+
getIntersectionObserver('viewblock').observe(form);
|
|
32
32
|
let lastSource;
|
|
33
33
|
form.addEventListener('change', (e) => {
|
|
34
34
|
if (e.target.checkVisibility()) {
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Adobe. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/** @type {WeakMap<HTMLElement, boolean>} */
|
|
14
|
+
const observedWC = new WeakMap();
|
|
15
|
+
|
|
16
|
+
/** @type {MutationObserver&{active?:boolean}|undefined} */
|
|
17
|
+
let rootMO;
|
|
18
|
+
|
|
19
|
+
export default function addWebComponentTracking({
|
|
20
|
+
context,
|
|
21
|
+
sampleRUM,
|
|
22
|
+
sourceSelector,
|
|
23
|
+
targetSelector,
|
|
24
|
+
createMO,
|
|
25
|
+
}) {
|
|
26
|
+
/**
|
|
27
|
+
* activate mutation observer
|
|
28
|
+
* @param {MutationObserver&{active?:boolean}} mo
|
|
29
|
+
* @param {HTMLElement} [root=document.body]
|
|
30
|
+
* @returns {void}
|
|
31
|
+
*/
|
|
32
|
+
function activateMutationObserver(mo, root = document.body) {
|
|
33
|
+
/* c8 ignore next 3 */
|
|
34
|
+
if (!mo || mo.active) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
// eslint-disable-next-line no-param-reassign
|
|
38
|
+
mo.active = true;
|
|
39
|
+
mo.observe(
|
|
40
|
+
root,
|
|
41
|
+
{ subtree: true, attributes: false, childList: true },
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @callback MutationCallback
|
|
47
|
+
* @param {MutationRecord[]} mutations
|
|
48
|
+
* @param {MutationObserver} observer
|
|
49
|
+
*/
|
|
50
|
+
function mutationCB(mutations) {
|
|
51
|
+
mutations
|
|
52
|
+
.forEach((m) => {
|
|
53
|
+
// eslint-disable-next-line no-use-before-define
|
|
54
|
+
_addWebComponentTracking(m.target);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
59
|
+
function _addWebComponentTracking(obj) {
|
|
60
|
+
/* c8 ignore next 3 */
|
|
61
|
+
if (!obj) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const { tagName } = obj;
|
|
66
|
+
if (tagName && tagName.includes('-')) {
|
|
67
|
+
window.customElements.whenDefined(tagName.toLowerCase())
|
|
68
|
+
.then(() => {
|
|
69
|
+
if (obj.shadowRoot && !observedWC.has(obj)) {
|
|
70
|
+
observedWC.set(obj, true);
|
|
71
|
+
const mo = createMO(mutationCB);
|
|
72
|
+
activateMutationObserver(mo, obj.shadowRoot);
|
|
73
|
+
// eslint-disable-next-line no-underscore-dangle, no-param-reassign
|
|
74
|
+
obj.__optelMO = mo;
|
|
75
|
+
_addWebComponentTracking(obj.shadowRoot);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
} else {
|
|
79
|
+
if (Object.getPrototypeOf(obj).toString().includes('ShadowRoot')) {
|
|
80
|
+
// obj is a shadowRoot, add click tracking
|
|
81
|
+
obj.addEventListener('click', (event) => {
|
|
82
|
+
if (event.optelHandled) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
// eslint-disable-next-line no-param-reassign
|
|
86
|
+
event.optelHandled = true;
|
|
87
|
+
sampleRUM('click', { target: targetSelector(event.target), source: sourceSelector(event.target) });
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
// look for web components below this element
|
|
91
|
+
[...obj.querySelectorAll('*')]
|
|
92
|
+
.filter((el) => el.tagName && el.tagName.includes('-') && !observedWC.has(el))
|
|
93
|
+
.forEach((el) => {
|
|
94
|
+
_addWebComponentTracking(el);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (!rootMO) {
|
|
100
|
+
rootMO = createMO(mutationCB);
|
|
101
|
+
activateMutationObserver(rootMO);
|
|
102
|
+
}
|
|
103
|
+
_addWebComponentTracking(context);
|
|
104
|
+
}
|
package/src/index.js
CHANGED
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
if (!el || el === document.body || el === document.documentElement) {
|
|
61
61
|
return undefined;
|
|
62
62
|
}
|
|
63
|
-
return checkFn(el) || walk(el.parentElement, checkFn);
|
|
63
|
+
return checkFn(el) || walk(el.parentElement || el.parentNode && el.parentNode.host, checkFn);
|
|
64
64
|
}
|
|
65
65
|
function isDialog(el) {
|
|
66
66
|
if (el.tagName === 'DIALOG') return true;
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
return `form${formEl.classList.length > 0 ? `.${formEl.classList[0]}` : ''}`;
|
|
87
87
|
}
|
|
88
88
|
const block = el.closest('.block[data-block-name]');
|
|
89
|
-
return block && `.${block.getAttribute('data-block-name')}` || walk(el, isDialog) && 'dialog' || ['nav', 'header', 'footer', 'aside'].find(t => el.closest(t)) || walk(el, e => e.id && `#${e.id}`);
|
|
89
|
+
return block && `.${block.getAttribute('data-block-name')}` || walk(el, isDialog) && 'dialog' || walk(el, e => e.tagName && e.tagName.includes('-') && e.tagName.toLowerCase()) || ['nav', 'header', 'footer', 'aside'].find(t => el.closest(t)) || walk(el, e => e.id && `#${e.id}`);
|
|
90
90
|
}
|
|
91
91
|
function getSourceElement(el) {
|
|
92
92
|
const f = el.closest('form');
|
|
@@ -139,6 +139,11 @@
|
|
|
139
139
|
when: () => document.querySelector('video'),
|
|
140
140
|
isBlockDependent: true
|
|
141
141
|
},
|
|
142
|
+
webcomponent: {
|
|
143
|
+
url: `${pluginBasePath}/webcomponent.js`,
|
|
144
|
+
when: () => [...document.querySelectorAll('*')].some(el => el.tagName && el.tagName.includes('-')),
|
|
145
|
+
isBlockDependent: true
|
|
146
|
+
},
|
|
142
147
|
martech: {
|
|
143
148
|
url: `${pluginBasePath}/martech.js`,
|
|
144
149
|
when: ({
|
|
@@ -151,7 +156,7 @@
|
|
|
151
156
|
isBlockDependent: true
|
|
152
157
|
}
|
|
153
158
|
};
|
|
154
|
-
function
|
|
159
|
+
function getIntersectionObserver(checkpoint) {
|
|
155
160
|
if (!window.IntersectionObserver) {
|
|
156
161
|
return null;
|
|
157
162
|
}
|
|
@@ -176,7 +181,8 @@
|
|
|
176
181
|
sampleRUM,
|
|
177
182
|
sourceSelector,
|
|
178
183
|
targetSelector,
|
|
179
|
-
|
|
184
|
+
getIntersectionObserver,
|
|
185
|
+
createMO
|
|
180
186
|
};
|
|
181
187
|
const pluginCache = new Map();
|
|
182
188
|
function loadPlugin(key, params) {
|
|
@@ -325,7 +331,7 @@
|
|
|
325
331
|
});
|
|
326
332
|
}
|
|
327
333
|
function addViewBlockTracking(element) {
|
|
328
|
-
const blockobserver =
|
|
334
|
+
const blockobserver = getIntersectionObserver('viewblock');
|
|
329
335
|
if (blockobserver) {
|
|
330
336
|
const blocks = element.getAttribute('data-block-status') ? [element] : element.querySelectorAll('div[data-block-status="loaded"]');
|
|
331
337
|
blocks.forEach(b => blockobserver.observe(b));
|
|
@@ -333,7 +339,7 @@
|
|
|
333
339
|
}
|
|
334
340
|
const observedMedia = new Set();
|
|
335
341
|
function addViewMediaTracking(parent) {
|
|
336
|
-
const mediaobserver =
|
|
342
|
+
const mediaobserver = getIntersectionObserver('viewmedia');
|
|
337
343
|
if (mediaobserver) {
|
|
338
344
|
parent.querySelectorAll('img, video, audio, iframe').forEach(m => {
|
|
339
345
|
if (!observedMedia.has(m)) {
|
|
@@ -364,6 +370,9 @@
|
|
|
364
370
|
activateBlocksMO();
|
|
365
371
|
activateMediaMO();
|
|
366
372
|
document.addEventListener('click', event => {
|
|
373
|
+
if (event.optelHandled) {
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
367
376
|
sampleRUM('click', {
|
|
368
377
|
target: targetSelector(event.target),
|
|
369
378
|
source: sourceSelector(event.target)
|
package/src/index.md5
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
6451bfbe4efd7f92592400ea417b4df2
|
package/src/index.sri
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
sha384-
|
|
1
|
+
sha384-BPW66FB1dP/60xdg/+Fv6d81hSUnnvPEZ+Sx42qVBlnImUISczQh8/S1mo3hifpK
|
package/src/plugins/form.js
CHANGED
|
@@ -22,7 +22,7 @@ function addFormTracking({
|
|
|
22
22
|
sourceSelector,
|
|
23
23
|
targetSelector,
|
|
24
24
|
context,
|
|
25
|
-
|
|
25
|
+
getIntersectionObserver
|
|
26
26
|
}) {
|
|
27
27
|
context.querySelectorAll('form').forEach(form => {
|
|
28
28
|
form.addEventListener('submit', e => sampleRUM(getSubmitType(e.target), {
|
|
@@ -31,7 +31,7 @@ function addFormTracking({
|
|
|
31
31
|
}), {
|
|
32
32
|
once: true
|
|
33
33
|
});
|
|
34
|
-
|
|
34
|
+
getIntersectionObserver('viewblock').observe(form);
|
|
35
35
|
let lastSource;
|
|
36
36
|
form.addEventListener('change', e => {
|
|
37
37
|
if (e.target.checkVisibility()) {
|
package/src/plugins/form.map.js
CHANGED
|
@@ -22,7 +22,7 @@ function addFormTracking({
|
|
|
22
22
|
sourceSelector,
|
|
23
23
|
targetSelector,
|
|
24
24
|
context,
|
|
25
|
-
|
|
25
|
+
getIntersectionObserver
|
|
26
26
|
}) {
|
|
27
27
|
context.querySelectorAll('form').forEach(form => {
|
|
28
28
|
form.addEventListener('submit', e => sampleRUM(getSubmitType(e.target), {
|
|
@@ -31,7 +31,7 @@ function addFormTracking({
|
|
|
31
31
|
}), {
|
|
32
32
|
once: true
|
|
33
33
|
});
|
|
34
|
-
|
|
34
|
+
getIntersectionObserver('viewblock').observe(form);
|
|
35
35
|
let lastSource;
|
|
36
36
|
form.addEventListener('change', e => {
|
|
37
37
|
if (e.target.checkVisibility()) {
|
|
@@ -55,4 +55,4 @@ function addFormTracking({
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
export { addFormTracking as default, getSubmitType };
|
|
58
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5tYXAuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3BsdWdpbnMvZm9ybS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjQgQWRvYmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weVxuICogb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlclxuICogdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TXG4gKiBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2VcbiAqIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldFN1Ym1pdFR5cGUgPSAoZWwpID0+
|
|
58
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5tYXAuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3BsdWdpbnMvZm9ybS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjQgQWRvYmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weVxuICogb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlclxuICogdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TXG4gKiBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2VcbiAqIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldFN1Ym1pdFR5cGUgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCB8fCBlbC50YWdOYW1lICE9PSAnRk9STScpIHJldHVybiB1bmRlZmluZWQ7XG4gIC8vIGlmIHRoZSBmb3JtIGhhcyBhIHNlYXJjaCByb2xlIG9yIGEgc2VhcmNoIGZpZWxkLCBpdCdzIGEgc2VhcmNoIGZvcm1cbiAgaWYgKGVsLmdldEF0dHJpYnV0ZSgncm9sZScpID09PSAnc2VhcmNoJ1xuICAgIHx8IGVsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJzZWFyY2hcIl0sIGlucHV0W3JvbGU9XCJzZWFyY2hib3hcIl0nKSkgcmV0dXJuICdzZWFyY2gnO1xuICAvLyBpZiB0aGUgZm9ybSBoYXMgb25lIHBhc3N3b3JkIGlucHV0LCBpdCdzIGEgbG9naW4gZm9ybVxuICAvLyBpZiB0aGUgZm9ybSBoYXMgbW9yZSB0aGFuIG9uZSBwYXNzd29yZCBpbnB1dCwgaXQncyBhIHNpZ251cCBmb3JtXG4gIGNvbnN0IHB3Q291bnQgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0nKS5sZW5ndGg7XG4gIGlmIChwd0NvdW50ID09PSAxKSByZXR1cm4gJ2xvZ2luJztcbiAgaWYgKHB3Q291bnQgPiAxKSByZXR1cm4gJ3NpZ251cCc7XG4gIHJldHVybiAnZm9ybXN1Ym1pdCc7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRGb3JtVHJhY2tpbmcoe1xuICBzYW1wbGVSVU0sIHNvdXJjZVNlbGVjdG9yLCB0YXJnZXRTZWxlY3RvciwgY29udGV4dCwgZ2V0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIsXG59KSB7XG4gIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCgnZm9ybScpLmZvckVhY2goKGZvcm0pID0+IHtcbiAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIChlKSA9PiBzYW1wbGVSVU0oZ2V0U3VibWl0VHlwZShlLnRhcmdldCksIHsgdGFyZ2V0OiB0YXJnZXRTZWxlY3RvcihlLnRhcmdldCksIHNvdXJjZTogc291cmNlU2VsZWN0b3IoZS50YXJnZXQpIH0pLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgZ2V0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIoJ3ZpZXdibG9jaycpLm9ic2VydmUoZm9ybSk7XG4gICAgbGV0IGxhc3RTb3VyY2U7XG4gICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4ge1xuICAgICAgaWYgKGUudGFyZ2V0LmNoZWNrVmlzaWJpbGl0eSgpKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZVNlbGVjdG9yKGUudGFyZ2V0KTtcbiAgICAgICAgaWYgKHNvdXJjZSAhPT0gbGFzdFNvdXJjZSkge1xuICAgICAgICAgIHNhbXBsZVJVTSgnZmlsbCcsIHsgc291cmNlIH0pO1xuICAgICAgICAgIGxhc3RTb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCAoZSkgPT4ge1xuICAgICAgaWYgKFsnSU5QVVQnLCAnVEVYVEFSRUEnLCAnU0VMRUNUJywgJ0JVVFRPTiddLmluY2x1ZGVzKGUudGFyZ2V0LnRhZ05hbWUpXG4gICAgICAgIHx8IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJykgPT09ICd0cnVlJykge1xuICAgICAgICBzYW1wbGVSVU0oJ2NsaWNrJywgeyBzb3VyY2U6IHNvdXJjZVNlbGVjdG9yKGUudGFyZ2V0KSB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOlsiZ2V0U3VibWl0VHlwZSIsImVsIiwidGFnTmFtZSIsInVuZGVmaW5lZCIsImdldEF0dHJpYnV0ZSIsInF1ZXJ5U2VsZWN0b3IiLCJwd0NvdW50IiwicXVlcnlTZWxlY3RvckFsbCIsImxlbmd0aCIsImFkZEZvcm1UcmFja2luZyIsInNhbXBsZVJVTSIsInNvdXJjZVNlbGVjdG9yIiwidGFyZ2V0U2VsZWN0b3IiLCJjb250ZXh0IiwiZ2V0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJmb3JFYWNoIiwiZm9ybSIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwidGFyZ2V0Iiwic291cmNlIiwib25jZSIsIm9ic2VydmUiLCJsYXN0U291cmNlIiwiY2hlY2tWaXNpYmlsaXR5IiwiaW5jbHVkZXMiXSwibWFwcGluZ3MiOiI7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
|
package/src/plugins/form.md5
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
2b38cde77ee1b0e0b6ab60d305c6c8fa
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 Adobe. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
const observedWC = new WeakMap();
|
|
13
|
+
let rootMO;
|
|
14
|
+
function addWebComponentTracking({
|
|
15
|
+
context,
|
|
16
|
+
sampleRUM,
|
|
17
|
+
sourceSelector,
|
|
18
|
+
targetSelector,
|
|
19
|
+
createMO
|
|
20
|
+
}) {
|
|
21
|
+
function activateMutationObserver(mo, root = document.body) {
|
|
22
|
+
if (!mo || mo.active) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
mo.active = true;
|
|
26
|
+
mo.observe(root, {
|
|
27
|
+
subtree: true,
|
|
28
|
+
attributes: false,
|
|
29
|
+
childList: true
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function mutationCB(mutations) {
|
|
33
|
+
mutations.forEach(m => {
|
|
34
|
+
_addWebComponentTracking(m.target);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function _addWebComponentTracking(obj) {
|
|
38
|
+
if (!obj) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const {
|
|
42
|
+
tagName
|
|
43
|
+
} = obj;
|
|
44
|
+
if (tagName && tagName.includes('-')) {
|
|
45
|
+
window.customElements.whenDefined(tagName.toLowerCase()).then(() => {
|
|
46
|
+
if (obj.shadowRoot && !observedWC.has(obj)) {
|
|
47
|
+
observedWC.set(obj, true);
|
|
48
|
+
const mo = createMO(mutationCB);
|
|
49
|
+
activateMutationObserver(mo, obj.shadowRoot);
|
|
50
|
+
obj.__optelMO = mo;
|
|
51
|
+
_addWebComponentTracking(obj.shadowRoot);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
} else {
|
|
55
|
+
if (Object.getPrototypeOf(obj).toString().includes('ShadowRoot')) {
|
|
56
|
+
obj.addEventListener('click', event => {
|
|
57
|
+
if (event.optelHandled) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
event.optelHandled = true;
|
|
61
|
+
sampleRUM('click', {
|
|
62
|
+
target: targetSelector(event.target),
|
|
63
|
+
source: sourceSelector(event.target)
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
[...obj.querySelectorAll('*')].filter(el => el.tagName && el.tagName.includes('-') && !observedWC.has(el)).forEach(el => {
|
|
68
|
+
_addWebComponentTracking(el);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (!rootMO) {
|
|
73
|
+
rootMO = createMO(mutationCB);
|
|
74
|
+
activateMutationObserver(rootMO);
|
|
75
|
+
}
|
|
76
|
+
_addWebComponentTracking(context);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export { addWebComponentTracking as default };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 Adobe. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
const observedWC = new WeakMap();
|
|
13
|
+
let rootMO;
|
|
14
|
+
function addWebComponentTracking({
|
|
15
|
+
context,
|
|
16
|
+
sampleRUM,
|
|
17
|
+
sourceSelector,
|
|
18
|
+
targetSelector,
|
|
19
|
+
createMO
|
|
20
|
+
}) {
|
|
21
|
+
function activateMutationObserver(mo, root = document.body) {
|
|
22
|
+
if (!mo || mo.active) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
mo.active = true;
|
|
26
|
+
mo.observe(root, {
|
|
27
|
+
subtree: true,
|
|
28
|
+
attributes: false,
|
|
29
|
+
childList: true
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function mutationCB(mutations) {
|
|
33
|
+
mutations.forEach(m => {
|
|
34
|
+
_addWebComponentTracking(m.target);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function _addWebComponentTracking(obj) {
|
|
38
|
+
if (!obj) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const {
|
|
42
|
+
tagName
|
|
43
|
+
} = obj;
|
|
44
|
+
if (tagName && tagName.includes('-')) {
|
|
45
|
+
window.customElements.whenDefined(tagName.toLowerCase()).then(() => {
|
|
46
|
+
if (obj.shadowRoot && !observedWC.has(obj)) {
|
|
47
|
+
observedWC.set(obj, true);
|
|
48
|
+
const mo = createMO(mutationCB);
|
|
49
|
+
activateMutationObserver(mo, obj.shadowRoot);
|
|
50
|
+
obj.__optelMO = mo;
|
|
51
|
+
_addWebComponentTracking(obj.shadowRoot);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
} else {
|
|
55
|
+
if (Object.getPrototypeOf(obj).toString().includes('ShadowRoot')) {
|
|
56
|
+
obj.addEventListener('click', event => {
|
|
57
|
+
if (event.optelHandled) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
event.optelHandled = true;
|
|
61
|
+
sampleRUM('click', {
|
|
62
|
+
target: targetSelector(event.target),
|
|
63
|
+
source: sourceSelector(event.target)
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
[...obj.querySelectorAll('*')].filter(el => el.tagName && el.tagName.includes('-') && !observedWC.has(el)).forEach(el => {
|
|
68
|
+
_addWebComponentTracking(el);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (!rootMO) {
|
|
73
|
+
rootMO = createMO(mutationCB);
|
|
74
|
+
activateMutationObserver(rootMO);
|
|
75
|
+
}
|
|
76
|
+
_addWebComponentTracking(context);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export { addWebComponentTracking as default };
|
|
80
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViY29tcG9uZW50Lm1hcC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vcGx1Z2lucy93ZWJjb21wb25lbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDI1IEFkb2JlLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHlcbiAqIG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXJcbiAqIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OU1xuICogT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlXG4gKiBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qKiBAdHlwZSB7V2Vha01hcDxIVE1MRWxlbWVudCwgYm9vbGVhbj59ICovXG5jb25zdCBvYnNlcnZlZFdDID0gbmV3IFdlYWtNYXAoKTtcblxuLyoqIEB0eXBlIHtNdXRhdGlvbk9ic2VydmVyJnthY3RpdmU/OmJvb2xlYW59fHVuZGVmaW5lZH0gKi9cbmxldCByb290TU87XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZFdlYkNvbXBvbmVudFRyYWNraW5nKHtcbiAgY29udGV4dCxcbiAgc2FtcGxlUlVNLFxuICBzb3VyY2VTZWxlY3RvcixcbiAgdGFyZ2V0U2VsZWN0b3IsXG4gIGNyZWF0ZU1PLFxufSkge1xuICAvKipcbiAgICogYWN0aXZhdGUgbXV0YXRpb24gb2JzZXJ2ZXJcbiAgICogQHBhcmFtIHtNdXRhdGlvbk9ic2VydmVyJnthY3RpdmU/OmJvb2xlYW59fSBtb1xuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBbcm9vdD1kb2N1bWVudC5ib2R5XVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9uIGFjdGl2YXRlTXV0YXRpb25PYnNlcnZlcihtbywgcm9vdCA9IGRvY3VtZW50LmJvZHkpIHtcbiAgICAvKiBjOCBpZ25vcmUgbmV4dCAzICovXG4gICAgaWYgKCFtbyB8fCBtby5hY3RpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgbW8uYWN0aXZlID0gdHJ1ZTtcbiAgICBtby5vYnNlcnZlKFxuICAgICAgcm9vdCxcbiAgICAgIHsgc3VidHJlZTogdHJ1ZSwgYXR0cmlidXRlczogZmFsc2UsIGNoaWxkTGlzdDogdHJ1ZSB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGNhbGxiYWNrIE11dGF0aW9uQ2FsbGJhY2tcbiAgICogQHBhcmFtIHtNdXRhdGlvblJlY29yZFtdfSBtdXRhdGlvbnNcbiAgICogQHBhcmFtIHtNdXRhdGlvbk9ic2VydmVyfSBvYnNlcnZlclxuICAgKi9cbiAgZnVuY3Rpb24gbXV0YXRpb25DQihtdXRhdGlvbnMpIHtcbiAgICBtdXRhdGlvbnNcbiAgICAgIC5mb3JFYWNoKChtKSA9PiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICBfYWRkV2ViQ29tcG9uZW50VHJhY2tpbmcobS50YXJnZXQpO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgZnVuY3Rpb24gX2FkZFdlYkNvbXBvbmVudFRyYWNraW5nKG9iaikge1xuICAgIC8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbiAgICBpZiAoIW9iaikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgdGFnTmFtZSB9ID0gb2JqO1xuICAgIGlmICh0YWdOYW1lICYmIHRhZ05hbWUuaW5jbHVkZXMoJy0nKSkge1xuICAgICAgd2luZG93LmN1c3RvbUVsZW1lbnRzLndoZW5EZWZpbmVkKHRhZ05hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGlmIChvYmouc2hhZG93Um9vdCAmJiAhb2JzZXJ2ZWRXQy5oYXMob2JqKSkge1xuICAgICAgICAgICAgb2JzZXJ2ZWRXQy5zZXQob2JqLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IG1vID0gY3JlYXRlTU8obXV0YXRpb25DQik7XG4gICAgICAgICAgICBhY3RpdmF0ZU11dGF0aW9uT2JzZXJ2ZXIobW8sIG9iai5zaGFkb3dSb290KTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZSwgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIG9iai5fX29wdGVsTU8gPSBtbztcbiAgICAgICAgICAgIF9hZGRXZWJDb21wb25lbnRUcmFja2luZyhvYmouc2hhZG93Um9vdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1NoYWRvd1Jvb3QnKSkge1xuICAgICAgICAvLyBvYmogaXMgYSBzaGFkb3dSb290LCBhZGQgY2xpY2sgdHJhY2tpbmdcbiAgICAgICAgb2JqLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50Lm9wdGVsSGFuZGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICBldmVudC5vcHRlbEhhbmRsZWQgPSB0cnVlO1xuICAgICAgICAgIHNhbXBsZVJVTSgnY2xpY2snLCB7IHRhcmdldDogdGFyZ2V0U2VsZWN0b3IoZXZlbnQudGFyZ2V0KSwgc291cmNlOiBzb3VyY2VTZWxlY3RvcihldmVudC50YXJnZXQpIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIGxvb2sgZm9yIHdlYiBjb21wb25lbnRzIGJlbG93IHRoaXMgZWxlbWVudFxuICAgICAgWy4uLm9iai5xdWVyeVNlbGVjdG9yQWxsKCcqJyldXG4gICAgICAgIC5maWx0ZXIoKGVsKSA9PiBlbC50YWdOYW1lICYmIGVsLnRhZ05hbWUuaW5jbHVkZXMoJy0nKSAmJiAhb2JzZXJ2ZWRXQy5oYXMoZWwpKVxuICAgICAgICAuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICBfYWRkV2ViQ29tcG9uZW50VHJhY2tpbmcoZWwpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBpZiAoIXJvb3RNTykge1xuICAgIHJvb3RNTyA9IGNyZWF0ZU1PKG11dGF0aW9uQ0IpO1xuICAgIGFjdGl2YXRlTXV0YXRpb25PYnNlcnZlcihyb290TU8pO1xuICB9XG4gIF9hZGRXZWJDb21wb25lbnRUcmFja2luZyhjb250ZXh0KTtcbn1cbiJdLCJuYW1lcyI6WyJvYnNlcnZlZFdDIiwiV2Vha01hcCIsInJvb3RNTyIsImFkZFdlYkNvbXBvbmVudFRyYWNraW5nIiwiY29udGV4dCIsInNhbXBsZVJVTSIsInNvdXJjZVNlbGVjdG9yIiwidGFyZ2V0U2VsZWN0b3IiLCJjcmVhdGVNTyIsImFjdGl2YXRlTXV0YXRpb25PYnNlcnZlciIsIm1vIiwicm9vdCIsImRvY3VtZW50IiwiYm9keSIsImFjdGl2ZSIsIm9ic2VydmUiLCJzdWJ0cmVlIiwiYXR0cmlidXRlcyIsImNoaWxkTGlzdCIsIm11dGF0aW9uQ0IiLCJtdXRhdGlvbnMiLCJmb3JFYWNoIiwibSIsIl9hZGRXZWJDb21wb25lbnRUcmFja2luZyIsInRhcmdldCIsIm9iaiIsInRhZ05hbWUiLCJpbmNsdWRlcyIsIndpbmRvdyIsImN1c3RvbUVsZW1lbnRzIiwid2hlbkRlZmluZWQiLCJ0b0xvd2VyQ2FzZSIsInRoZW4iLCJzaGFkb3dSb290IiwiaGFzIiwic2V0IiwiX19vcHRlbE1PIiwiT2JqZWN0IiwiZ2V0UHJvdG90eXBlT2YiLCJ0b1N0cmluZyIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsIm9wdGVsSGFuZGxlZCIsInNvdXJjZSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmaWx0ZXIiLCJlbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFhQSxNQUFNQSxVQUFVLEdBQUcsSUFBSUMsT0FBTyxFQUFFO0FBR2hDLElBQUlDLE1BQU07QUFFSyxTQUFTQyx1QkFBdUJBLENBQUM7RUFDOUNDLE9BQU87RUFDUEMsU0FBUztFQUNUQyxjQUFjO0VBQ2RDLGNBQWM7QUFDZEMsRUFBQUE7QUFDRixDQUFDLEVBQUU7RUFPRCxTQUFTQyx3QkFBd0JBLENBQUNDLEVBQUUsRUFBRUMsSUFBSSxHQUFHQyxRQUFRLENBQUNDLElBQUksRUFBRTtBQUUxRCxJQUFBLElBQUksQ0FBQ0gsRUFBRSxJQUFJQSxFQUFFLENBQUNJLE1BQU0sRUFBRTtBQUNwQixNQUFBO0FBQ0Y7SUFFQUosRUFBRSxDQUFDSSxNQUFNLEdBQUcsSUFBSTtBQUNoQkosSUFBQUEsRUFBRSxDQUFDSyxPQUFPLENBQ1JKLElBQUksRUFDSjtBQUFFSyxNQUFBQSxPQUFPLEVBQUUsSUFBSTtBQUFFQyxNQUFBQSxVQUFVLEVBQUUsS0FBSztB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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
77548a8cab5a3d841477877d5428be6b
|