@adobe/helix-rum-enhancer 2.41.0 → 2.42.4

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,39 @@
1
+ ## [2.42.4](https://github.com/adobe/helix-rum-enhancer/compare/v2.42.3...v2.42.4) (2025-10-17)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * trigger release to test npm trusted publisher configuration ([e11606d](https://github.com/adobe/helix-rum-enhancer/commit/e11606d4a5e81b24c20277feff5ab363b557ec96))
7
+
8
+ ## [2.42.3](https://github.com/adobe/helix-rum-enhancer/compare/v2.42.2...v2.42.3) (2025-10-17)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * upgrade to @semantic-release/npm v13 for OIDC support ([b780819](https://github.com/adobe/helix-rum-enhancer/commit/b78081961841d038ca24aadf53ffe4dbb856404c))
14
+
15
+ ## [2.42.2](https://github.com/adobe/helix-rum-enhancer/compare/v2.42.1...v2.42.2) (2025-10-17)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * configure npm provenance for OIDC publishing with 2FA ([e01fa6a](https://github.com/adobe/helix-rum-enhancer/commit/e01fa6a920f93048053a509ce54a05eb7dd92666))
21
+ * configure npm provenance for OIDC publishing with 2FA ([033eba5](https://github.com/adobe/helix-rum-enhancer/commit/033eba56bef2184d7bf1a09a44f72c4464dc8b98))
22
+
23
+ ## [2.42.1](https://github.com/adobe/helix-rum-enhancer/compare/v2.42.0...v2.42.1) (2025-10-16)
24
+
25
+
26
+ ### Bug Fixes
27
+
28
+ * update semantic-release to v25 and node to 24.x for OIDC ([5629fdd](https://github.com/adobe/helix-rum-enhancer/commit/5629fdd8b7b88b4f2655a4ce0d00477e369581c2))
29
+
30
+ # [2.42.0](https://github.com/adobe/helix-rum-enhancer/compare/v2.41.0...v2.42.0) (2025-10-09)
31
+
32
+
33
+ ### Features
34
+
35
+ * Add form validation error tracking to form plugin ([4a8f89e](https://github.com/adobe/helix-rum-enhancer/commit/4a8f89e33976147e941a0f4288cc7deafff47182))
36
+
1
37
  # [2.41.0](https://github.com/adobe/helix-rum-enhancer/compare/v2.40.2...v2.41.0) (2025-10-07)
2
38
 
3
39
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adobe/helix-rum-enhancer",
3
- "version": "2.41.0",
3
+ "version": "2.42.4",
4
4
  "description": "Helix RUM Enhancer",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
@@ -33,8 +33,8 @@
33
33
  "reporter-options": "configFile=.mocha-multi.json"
34
34
  },
35
35
  "devDependencies": {
36
- "@adobe/eslint-config-helix": "3.0.10",
37
- "@adobe/helix-rum-js": "2.12.2",
36
+ "@adobe/eslint-config-helix": "3.0.12",
37
+ "@adobe/helix-rum-js": "2.13.3",
38
38
  "@adobe/rollup-plugin-checksum": "1.2.0",
39
39
  "@eslint/config-helpers": "0.4.0",
40
40
  "@esm-bundle/chai": "4.3.4-fix.0",
@@ -42,7 +42,7 @@
42
42
  "@semantic-release/changelog": "6.0.3",
43
43
  "@semantic-release/exec": "7.1.0",
44
44
  "@semantic-release/git": "10.0.1",
45
- "@semantic-release/npm": "12.0.2",
45
+ "@semantic-release/npm": "13.0.0",
46
46
  "@web/test-runner": "0.20.2",
47
47
  "@web/test-runner-commands": "0.9.0",
48
48
  "@web/test-runner-junit-reporter": "0.8.0",
@@ -57,12 +57,12 @@
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.2.0",
60
+ "lint-staged": "16.2.3",
61
61
  "mocha": "11.7.2",
62
62
  "mocha-multi-reporters": "1.5.1",
63
- "rollup": "4.52.0",
63
+ "rollup": "4.52.3",
64
64
  "rollup-plugin-eslint-bundle": "9.0.0",
65
- "semantic-release": "24.2.9",
65
+ "semantic-release": "25.0.0",
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) => {
@@ -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
- d241929d3af96465ac32a4158c0e0fe8
1
+ ebe320b3bc258db22786d472559793c1
@@ -1 +1 @@
1
- 90fa0790108137f0cb4c44345d2e577f
1
+ 20d1f82b8a8c89e965f951484f200f35
@@ -1 +1 @@
1
- 69d98a5cc1e1f11f6bedc2dbe91d8f8f
1
+ 3476ee246a6b4c1599651d8a7580e2c7