@adobe/helix-rum-enhancer 2.40.2 → 2.42.0

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/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # [2.42.0](https://github.com/adobe/helix-rum-enhancer/compare/v2.41.0...v2.42.0) (2025-10-09)
2
+
3
+
4
+ ### Features
5
+
6
+ * Add form validation error tracking to form plugin ([4a8f89e](https://github.com/adobe/helix-rum-enhancer/commit/4a8f89e33976147e941a0f4288cc7deafff47182))
7
+
8
+ # [2.41.0](https://github.com/adobe/helix-rum-enhancer/compare/v2.40.2...v2.41.0) (2025-10-07)
9
+
10
+
11
+ ### Features
12
+
13
+ * tracking language/redirect checkpoint for all customers ([#484](https://github.com/adobe/helix-rum-enhancer/issues/484)) ([1577df7](https://github.com/adobe/helix-rum-enhancer/commit/1577df7e04da7c075f4d77464bbeb4544e45c2a8))
14
+
1
15
  ## [2.40.2](https://github.com/adobe/helix-rum-enhancer/compare/v2.40.1...v2.40.2) (2025-09-01)
2
16
 
3
17
 
package/modules/fflags.js CHANGED
@@ -16,9 +16,7 @@ export const fflags = {
16
16
  enabled: (f, c) => fflags.has(f) && c(),
17
17
  disabled: (f, c) => !fflags.has(f) && c(),
18
18
  eagercwv: [683],
19
- redirect: [620, 1139],
20
19
  example: [543, 770, 1136],
21
- language: [543, 959, 1139, 620],
22
20
  allresources: [543, 1139],
23
21
  a11y: [557, 781, 897, 955, 959],
24
22
  };
package/modules/index.js CHANGED
@@ -217,12 +217,10 @@ function addNavigationTracking() {
217
217
  } else {
218
218
  sampleRUM('enter', payload); // enter site
219
219
  }
220
- fflags.enabled('redirect', () => {
221
- const from = new URLSearchParams(window.location.search).get('redirect_from');
222
- if (redirectCount || from) {
223
- sampleRUM('redirect', { source: from, target: redirectCount || 1 });
224
- }
225
- });
220
+ const from = new URLSearchParams(window.location.search).get('redirect_from');
221
+ if (redirectCount || from) {
222
+ sampleRUM('redirect', { source: from, target: redirectCount || 1 });
223
+ }
226
224
  };
227
225
 
228
226
  const processed = new Set(); // avoid processing duplicate types
@@ -354,11 +352,9 @@ function addTrackingFromConfig() {
354
352
  // Tracking extensions
355
353
  loadPlugins();
356
354
 
357
- fflags.enabled('language', () => {
358
- const target = navigator.language;
359
- const source = document.documentElement.lang;
360
- sampleRUM('language', { source, target });
361
- });
355
+ const target = navigator.language;
356
+ const source = document.documentElement.lang;
357
+ sampleRUM('language', { source, target });
362
358
  }
363
359
 
364
360
  function initEnhancer() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adobe/helix-rum-enhancer",
3
- "version": "2.40.2",
3
+ "version": "2.42.0",
4
4
  "description": "Helix RUM Enhancer",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
@@ -33,10 +33,10 @@
33
33
  "reporter-options": "configFile=.mocha-multi.json"
34
34
  },
35
35
  "devDependencies": {
36
- "@adobe/eslint-config-helix": "3.0.9",
37
- "@adobe/helix-rum-js": "2.12.2",
36
+ "@adobe/eslint-config-helix": "3.0.11",
37
+ "@adobe/helix-rum-js": "2.13.1",
38
38
  "@adobe/rollup-plugin-checksum": "1.2.0",
39
- "@eslint/config-helpers": "0.3.1",
39
+ "@eslint/config-helpers": "0.4.0",
40
40
  "@esm-bundle/chai": "4.3.4-fix.0",
41
41
  "@rollup/plugin-babel": "6.0.4",
42
42
  "@semantic-release/changelog": "6.0.3",
@@ -53,16 +53,16 @@
53
53
  "eslint": "9.30.1",
54
54
  "eslint-plugin-header": "3.1.1",
55
55
  "eslint-plugin-import": "2.32.0",
56
- "globals": "16.3.0",
56
+ "globals": "16.4.0",
57
57
  "husky": "9.1.7",
58
58
  "jsdoc-to-markdown": "9.1.2",
59
59
  "junit-report-builder": "5.1.1",
60
- "lint-staged": "16.1.5",
61
- "mocha": "11.7.1",
60
+ "lint-staged": "16.2.0",
61
+ "mocha": "11.7.2",
62
62
  "mocha-multi-reporters": "1.5.1",
63
- "rollup": "4.50.0",
63
+ "rollup": "4.52.0",
64
64
  "rollup-plugin-eslint-bundle": "9.0.0",
65
- "semantic-release": "24.2.7",
65
+ "semantic-release": "24.2.9",
66
66
  "semantic-release-slack-bot": "^4.0.2",
67
67
  "web-vitals": "5.1.0"
68
68
  },
package/plugins/form.js CHANGED
@@ -27,7 +27,34 @@ export default function addFormTracking({
27
27
  sampleRUM, sourceSelector, targetSelector, context, getIntersectionObserver,
28
28
  }) {
29
29
  context.querySelectorAll('form').forEach((form) => {
30
- form.addEventListener('submit', (e) => sampleRUM(getSubmitType(e.target), { target: targetSelector(e.target), source: sourceSelector(e.target) }), { once: true });
30
+ form.addEventListener('submit', (e) => {
31
+ // Check for form validation errors before submitting
32
+ const invalidFields = form.querySelectorAll(':invalid');
33
+ // Send error checkpoints for each invalid field
34
+ invalidFields.forEach((field) => {
35
+ if (field && field.validity) {
36
+ const prototype = Object.getPrototypeOf(field.validity);
37
+ const errorType = prototype
38
+ ? Object.keys(Object.getOwnPropertyDescriptors(prototype))
39
+ .filter((key) => key !== 'valid' && key !== 'constructor' && !key.startsWith('Symbol'))
40
+ .find((key) => field.validity[key]) || 'custom'
41
+ : 'custom';
42
+
43
+ sampleRUM('error', {
44
+ target: errorType,
45
+ source: sourceSelector(field),
46
+ });
47
+ }
48
+ });
49
+ // Only send formsubmit event if there are no validation errors
50
+ if (invalidFields.length === 0) {
51
+ sampleRUM(getSubmitType(e.target), {
52
+ target: targetSelector(e.target),
53
+ source: sourceSelector(e.target),
54
+ });
55
+ }
56
+ }, { once: true });
57
+
31
58
  getIntersectionObserver('viewblock').observe(form);
32
59
  let lastSource;
33
60
  form.addEventListener('change', (e) => {
package/src/index.js CHANGED
@@ -18,9 +18,7 @@
18
18
  enabled: (f, c) => fflags.has(f) && c(),
19
19
  disabled: (f, c) => !fflags.has(f) && c(),
20
20
  eagercwv: [683],
21
- redirect: [620, 1139],
22
21
  example: [543, 770, 1136],
23
- language: [543, 959, 1139, 620],
24
22
  allresources: [543, 1139],
25
23
  a11y: [557, 781, 897, 955, 959]
26
24
  };
@@ -308,15 +306,13 @@
308
306
  } else {
309
307
  sampleRUM('enter', payload);
310
308
  }
311
- fflags.enabled('redirect', () => {
312
- const from = new URLSearchParams(window.location.search).get('redirect_from');
313
- if (redirectCount || from) {
314
- sampleRUM('redirect', {
315
- source: from,
316
- target: redirectCount || 1
317
- });
318
- }
319
- });
309
+ const from = new URLSearchParams(window.location.search).get('redirect_from');
310
+ if (redirectCount || from) {
311
+ sampleRUM('redirect', {
312
+ source: from,
313
+ target: redirectCount || 1
314
+ });
315
+ }
320
316
  };
321
317
  const processed = new Set();
322
318
  new PerformanceObserver(list => list.getEntries().filter(({
@@ -424,13 +420,11 @@
424
420
  addViewBlockTracking(document.body);
425
421
  addViewMediaTracking(document.body);
426
422
  loadPlugins();
427
- fflags.enabled('language', () => {
428
- const target = navigator.language;
429
- const source = document.documentElement.lang;
430
- sampleRUM('language', {
431
- source,
432
- target
433
- });
423
+ const target = navigator.language;
424
+ const source = document.documentElement.lang;
425
+ sampleRUM('language', {
426
+ source,
427
+ target
434
428
  });
435
429
  }
436
430
  function initEnhancer() {
package/src/index.md5 CHANGED
@@ -1 +1 @@
1
- 143b050b3e47dc13100a8c7f4b515750
1
+ cb37696dfeac0fbfaaa5df6fd45f35e6
package/src/index.sri CHANGED
@@ -1 +1 @@
1
- sha384-FqFNdqcSBruRisrm/Gv3AR5041QDSfvIl5UztBqsOUmGFceCiitKjP7sns4woGs8
1
+ sha384-ypbqCoXRZ7tp+5FmOXF6lim2OxTiSO4vEKbpGgEM5NM+XWXV7WCeVhF8KWjBCbHW
@@ -1 +1 @@
1
- ca3630c51ee48da2595696b4b11cb586
1
+ 411af2624f736f7385cfb1230be854c3
@@ -1 +1 @@
1
- 214afb5bc6408240a88bae4d20224cf3
1
+ ac0a97e1c4b43a11eed0a7c4f50389cf
@@ -25,10 +25,25 @@ function addFormTracking({
25
25
  getIntersectionObserver
26
26
  }) {
27
27
  context.querySelectorAll('form').forEach(form => {
28
- form.addEventListener('submit', e => sampleRUM(getSubmitType(e.target), {
29
- target: targetSelector(e.target),
30
- source: sourceSelector(e.target)
31
- }), {
28
+ form.addEventListener('submit', e => {
29
+ const invalidFields = form.querySelectorAll(':invalid');
30
+ invalidFields.forEach(field => {
31
+ if (field && field.validity) {
32
+ const prototype = Object.getPrototypeOf(field.validity);
33
+ const errorType = prototype ? Object.keys(Object.getOwnPropertyDescriptors(prototype)).filter(key => key !== 'valid' && key !== 'constructor' && !key.startsWith('Symbol')).find(key => field.validity[key]) || 'custom' : 'custom';
34
+ sampleRUM('error', {
35
+ target: errorType,
36
+ source: sourceSelector(field)
37
+ });
38
+ }
39
+ });
40
+ if (invalidFields.length === 0) {
41
+ sampleRUM(getSubmitType(e.target), {
42
+ target: targetSelector(e.target),
43
+ source: sourceSelector(e.target)
44
+ });
45
+ }
46
+ }, {
32
47
  once: true
33
48
  });
34
49
  getIntersectionObserver('viewblock').observe(form);
@@ -25,10 +25,25 @@ function addFormTracking({
25
25
  getIntersectionObserver
26
26
  }) {
27
27
  context.querySelectorAll('form').forEach(form => {
28
- form.addEventListener('submit', e => sampleRUM(getSubmitType(e.target), {
29
- target: targetSelector(e.target),
30
- source: sourceSelector(e.target)
31
- }), {
28
+ form.addEventListener('submit', e => {
29
+ const invalidFields = form.querySelectorAll(':invalid');
30
+ invalidFields.forEach(field => {
31
+ if (field && field.validity) {
32
+ const prototype = Object.getPrototypeOf(field.validity);
33
+ const errorType = prototype ? Object.keys(Object.getOwnPropertyDescriptors(prototype)).filter(key => key !== 'valid' && key !== 'constructor' && !key.startsWith('Symbol')).find(key => field.validity[key]) || 'custom' : 'custom';
34
+ sampleRUM('error', {
35
+ target: errorType,
36
+ source: sourceSelector(field)
37
+ });
38
+ }
39
+ });
40
+ if (invalidFields.length === 0) {
41
+ sampleRUM(getSubmitType(e.target), {
42
+ target: targetSelector(e.target),
43
+ source: sourceSelector(e.target)
44
+ });
45
+ }
46
+ }, {
32
47
  once: true
33
48
  });
34
49
  getIntersectionObserver('viewblock').observe(form);
@@ -55,4 +70,4 @@ function addFormTracking({
55
70
  }
56
71
 
57
72
  export { addFormTracking as default, getSubmitType };
58
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5tYXAuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3BsdWdpbnMvZm9ybS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjQgQWRvYmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weVxuICogb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlclxuICogdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TXG4gKiBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2VcbiAqIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldFN1Ym1pdFR5cGUgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCB8fCBlbC50YWdOYW1lICE9PSAnRk9STScpIHJldHVybiB1bmRlZmluZWQ7XG4gIC8vIGlmIHRoZSBmb3JtIGhhcyBhIHNlYXJjaCByb2xlIG9yIGEgc2VhcmNoIGZpZWxkLCBpdCdzIGEgc2VhcmNoIGZvcm1cbiAgaWYgKGVsLmdldEF0dHJpYnV0ZSgncm9sZScpID09PSAnc2VhcmNoJ1xuICAgIHx8IGVsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJzZWFyY2hcIl0sIGlucHV0W3JvbGU9XCJzZWFyY2hib3hcIl0nKSkgcmV0dXJuICdzZWFyY2gnO1xuICAvLyBpZiB0aGUgZm9ybSBoYXMgb25lIHBhc3N3b3JkIGlucHV0LCBpdCdzIGEgbG9naW4gZm9ybVxuICAvLyBpZiB0aGUgZm9ybSBoYXMgbW9yZSB0aGFuIG9uZSBwYXNzd29yZCBpbnB1dCwgaXQncyBhIHNpZ251cCBmb3JtXG4gIGNvbnN0IHB3Q291bnQgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0nKS5sZW5ndGg7XG4gIGlmIChwd0NvdW50ID09PSAxKSByZXR1cm4gJ2xvZ2luJztcbiAgaWYgKHB3Q291bnQgPiAxKSByZXR1cm4gJ3NpZ251cCc7XG4gIHJldHVybiAnZm9ybXN1Ym1pdCc7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRGb3JtVHJhY2tpbmcoe1xuICBzYW1wbGVSVU0sIHNvdXJjZVNlbGVjdG9yLCB0YXJnZXRTZWxlY3RvciwgY29udGV4dCwgZ2V0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIsXG59KSB7XG4gIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCgnZm9ybScpLmZvckVhY2goKGZvcm0pID0+IHtcbiAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIChlKSA9PiBzYW1wbGVSVU0oZ2V0U3VibWl0VHlwZShlLnRhcmdldCksIHsgdGFyZ2V0OiB0YXJnZXRTZWxlY3RvcihlLnRhcmdldCksIHNvdXJjZTogc291cmNlU2VsZWN0b3IoZS50YXJnZXQpIH0pLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgZ2V0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIoJ3ZpZXdibG9jaycpLm9ic2VydmUoZm9ybSk7XG4gICAgbGV0IGxhc3RTb3VyY2U7XG4gICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4ge1xuICAgICAgaWYgKGUudGFyZ2V0LmNoZWNrVmlzaWJpbGl0eSAmJiBlLnRhcmdldC5jaGVja1Zpc2liaWxpdHkoKSkge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VTZWxlY3RvcihlLnRhcmdldCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IGxhc3RTb3VyY2UpIHtcbiAgICAgICAgICBzYW1wbGVSVU0oJ2ZpbGwnLCB7IHNvdXJjZSB9KTtcbiAgICAgICAgICBsYXN0U291cmNlID0gc291cmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgKGUpID0+IHtcbiAgICAgIGlmIChbJ0lOUFVUJywgJ1RFWFRBUkVBJywgJ1NFTEVDVCcsICdCVVRUT04nXS5pbmNsdWRlcyhlLnRhcmdldC50YWdOYW1lKVxuICAgICAgICB8fCBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScpID09PSAndHJ1ZScpIHtcbiAgICAgICAgc2FtcGxlUlVNKCdjbGljaycsIHsgc291cmNlOiBzb3VyY2VTZWxlY3RvcihlLnRhcmdldCkgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbImdldFN1Ym1pdFR5cGUiLCJlbCIsInRhZ05hbWUiLCJ1bmRlZmluZWQiLCJnZXRBdHRyaWJ1dGUiLCJxdWVyeVNlbGVjdG9yIiwicHdDb3VudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJhZGRGb3JtVHJhY2tpbmciLCJzYW1wbGVSVU0iLCJzb3VyY2VTZWxlY3RvciIsInRhcmdldFNlbGVjdG9yIiwiY29udGV4dCIsImdldEludGVyc2VjdGlvbk9ic2VydmVyIiwiZm9yRWFjaCIsImZvcm0iLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsInRhcmdldCIsInNvdXJjZSIsIm9uY2UiLCJvYnNlcnZlIiwibGFzdFNvdXJjZSIsImNoZWNrVmlzaWJpbGl0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
73
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5tYXAuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3BsdWdpbnMvZm9ybS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjQgQWRvYmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weVxuICogb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlclxuICogdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TXG4gKiBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2VcbiAqIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldFN1Ym1pdFR5cGUgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCB8fCBlbC50YWdOYW1lICE9PSAnRk9STScpIHJldHVybiB1bmRlZmluZWQ7XG4gIC8vIGlmIHRoZSBmb3JtIGhhcyBhIHNlYXJjaCByb2xlIG9yIGEgc2VhcmNoIGZpZWxkLCBpdCdzIGEgc2VhcmNoIGZvcm1cbiAgaWYgKGVsLmdldEF0dHJpYnV0ZSgncm9sZScpID09PSAnc2VhcmNoJ1xuICAgIHx8IGVsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJzZWFyY2hcIl0sIGlucHV0W3JvbGU9XCJzZWFyY2hib3hcIl0nKSkgcmV0dXJuICdzZWFyY2gnO1xuICAvLyBpZiB0aGUgZm9ybSBoYXMgb25lIHBhc3N3b3JkIGlucHV0LCBpdCdzIGEgbG9naW4gZm9ybVxuICAvLyBpZiB0aGUgZm9ybSBoYXMgbW9yZSB0aGFuIG9uZSBwYXNzd29yZCBpbnB1dCwgaXQncyBhIHNpZ251cCBmb3JtXG4gIGNvbnN0IHB3Q291bnQgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0nKS5sZW5ndGg7XG4gIGlmIChwd0NvdW50ID09PSAxKSByZXR1cm4gJ2xvZ2luJztcbiAgaWYgKHB3Q291bnQgPiAxKSByZXR1cm4gJ3NpZ251cCc7XG4gIHJldHVybiAnZm9ybXN1Ym1pdCc7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRGb3JtVHJhY2tpbmcoe1xuICBzYW1wbGVSVU0sIHNvdXJjZVNlbGVjdG9yLCB0YXJnZXRTZWxlY3RvciwgY29udGV4dCwgZ2V0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIsXG59KSB7XG4gIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCgnZm9ybScpLmZvckVhY2goKGZvcm0pID0+IHtcbiAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIChlKSA9PiB7XG4gICAgICAvLyBDaGVjayBmb3IgZm9ybSB2YWxpZGF0aW9uIGVycm9ycyBiZWZvcmUgc3VibWl0dGluZ1xuICAgICAgY29uc3QgaW52YWxpZEZpZWxkcyA9IGZvcm0ucXVlcnlTZWxlY3RvckFsbCgnOmludmFsaWQnKTtcbiAgICAgIC8vIFNlbmQgZXJyb3IgY2hlY2twb2ludHMgZm9yIGVhY2ggaW52YWxpZCBmaWVsZFxuICAgICAgaW52YWxpZEZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICBpZiAoZmllbGQgJiYgZmllbGQudmFsaWRpdHkpIHtcbiAgICAgICAgICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZmllbGQudmFsaWRpdHkpO1xuICAgICAgICAgIGNvbnN0IGVycm9yVHlwZSA9IHByb3RvdHlwZVxuICAgICAgICAgICAgPyBPYmplY3Qua2V5cyhPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhwcm90b3R5cGUpKVxuICAgICAgICAgICAgICAuZmlsdGVyKChrZXkpID0+IGtleSAhPT0gJ3ZhbGlkJyAmJiBrZXkgIT09ICdjb25zdHJ1Y3RvcicgJiYgIWtleS5zdGFydHNXaXRoKCdTeW1ib2wnKSlcbiAgICAgICAgICAgICAgLmZpbmQoKGtleSkgPT4gZmllbGQudmFsaWRpdHlba2V5XSkgfHwgJ2N1c3RvbSdcbiAgICAgICAgICAgIDogJ2N1c3RvbSc7XG5cbiAgICAgICAgICBzYW1wbGVSVU0oJ2Vycm9yJywge1xuICAgICAgICAgICAgdGFyZ2V0OiBlcnJvclR5cGUsXG4gICAgICAgICAgICBzb3VyY2U6IHNvdXJjZVNlbGVjdG9yKGZpZWxkKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBPbmx5IHNlbmQgZm9ybXN1Ym1pdCBldmVudCBpZiB0aGVyZSBhcmUgbm8gdmFsaWRhdGlvbiBlcnJvcnNcbiAgICAgIGlmIChpbnZhbGlkRmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBzYW1wbGVSVU0oZ2V0U3VibWl0VHlwZShlLnRhcmdldCksIHtcbiAgICAgICAgICB0YXJnZXQ6IHRhcmdldFNlbGVjdG9yKGUudGFyZ2V0KSxcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZVNlbGVjdG9yKGUudGFyZ2V0KSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwgeyBvbmNlOiB0cnVlIH0pO1xuXG4gICAgZ2V0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIoJ3ZpZXdibG9jaycpLm9ic2VydmUoZm9ybSk7XG4gICAgbGV0IGxhc3RTb3VyY2U7XG4gICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4ge1xuICAgICAgaWYgKGUudGFyZ2V0LmNoZWNrVmlzaWJpbGl0eSAmJiBlLnRhcmdldC5jaGVja1Zpc2liaWxpdHkoKSkge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VTZWxlY3RvcihlLnRhcmdldCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IGxhc3RTb3VyY2UpIHtcbiAgICAgICAgICBzYW1wbGVSVU0oJ2ZpbGwnLCB7IHNvdXJjZSB9KTtcbiAgICAgICAgICBsYXN0U291cmNlID0gc291cmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgKGUpID0+IHtcbiAgICAgIGlmIChbJ0lOUFVUJywgJ1RFWFRBUkVBJywgJ1NFTEVDVCcsICdCVVRUT04nXS5pbmNsdWRlcyhlLnRhcmdldC50YWdOYW1lKVxuICAgICAgICB8fCBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScpID09PSAndHJ1ZScpIHtcbiAgICAgICAgc2FtcGxlUlVNKCdjbGljaycsIHsgc291cmNlOiBzb3VyY2VTZWxlY3RvcihlLnRhcmdldCkgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbImdldFN1Ym1pdFR5cGUiLCJlbCIsInRhZ05hbWUiLCJ1bmRlZmluZWQiLCJnZXRBdHRyaWJ1dGUiLCJxdWVyeVNlbGVjdG9yIiwicHdDb3VudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJhZGRGb3JtVHJhY2tpbmciLCJzYW1wbGVSVU0iLCJzb3VyY2VTZWxlY3RvciIsInRhcmdldFNlbGVjdG9yIiwiY29udGV4dCIsImdldEludGVyc2VjdGlvbk9ic2VydmVyIiwiZm9yRWFjaCIsImZvcm0iLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsImludmFsaWRGaWVsZHMiLCJmaWVsZCIsInZhbGlkaXR5IiwicHJvdG90eXBlIiwiT2JqZWN0IiwiZ2V0UHJvdG90eXBlT2YiLCJlcnJvclR5cGUiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImZpbHRlciIsImtleSIsInN0YXJ0c1dpdGgiLCJmaW5kIiwidGFyZ2V0Iiwic291cmNlIiwib25jZSIsIm9ic2VydmUiLCJsYXN0U291cmNlIiwiY2hlY2tWaXNpYmlsaXR5IiwiaW5jbHVkZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBWU8sTUFBTUEsYUFBYSxHQUFJQyxFQUFFLElBQUs7RUFDbkMsSUFBSSxDQUFDQSxFQUFFLElBQUlBLEVBQUUsQ0FBQ0MsT0FBTyxLQUFLLE1BQU0sRUFBRSxPQUFPQyxTQUFTO0FBRWxELEVBQUEsSUFBSUYsRUFBRSxDQUFDRyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssUUFBUSxJQUNuQ0gsRUFBRSxDQUFDSSxhQUFhLENBQUMsK0NBQStDLENBQUMsRUFBRSxPQUFPLFFBQVE7RUFHdkYsTUFBTUMsT0FBTyxHQUFHTCxFQUFFLENBQUNNLGdCQUFnQixDQUFDLHdCQUF3QixDQUFDLENBQUNDLE1BQU07QUFDcEUsRUFBQSxJQUFJRixPQUFPLEtBQUssQ0FBQyxFQUFFLE9BQU8sT0FBTztBQUNqQyxFQUFBLElBQUlBLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxRQUFRO0FBQ2hDLEVBQUEsT0FBTyxZQUFZO0FBQ3JCO0FBRWUsU0FBU0csZUFBZUEsQ0FBQztFQUN0Q0MsU0FBUztFQUFFQyxjQUFjO0VBQUVDLGNBQWM7RUFBRUMsT0FBTztBQUFFQyxFQUFBQTtBQUN0RCxDQUFDLEVBQUU7RUFDREQsT0FBTyxDQUFDTixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQ1EsT0FBTyxDQUFFQyxJQUFJLElBQUs7QUFDakRBLElBQUFBLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUMsUUFBUSxFQUFHQyxDQUFDLElBQUs7QUFFckMsTUFBQSxNQUFNQyxhQUFhLEdBQUdILElB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
@@ -1 +1 @@
1
- 6267791fa138d96308480bc66b8fb805
1
+ 96374e9ade98371933bddc8869536de2
@@ -1 +1 @@
1
- 5a20c1d914d19b130034e4df532b8b4d
1
+ 866b5825b7bdb273170fbab6fa8099bb
@@ -1 +1 @@
1
- c00518b019647f564ce00dce9d07c74b
1
+ 4b5cf6c41be188be11c519f419592e7e
@@ -1 +1 @@
1
- 20d1f82b8a8c89e965f951484f200f35
1
+ 90fa0790108137f0cb4c44345d2e577f
@@ -1 +1 @@
1
- 69d98a5cc1e1f11f6bedc2dbe91d8f8f
1
+ 3476ee246a6b4c1599651d8a7580e2c7