Conversation
|
🚀 Deployed on https://68fd92e26eae1692f4e063dc--opengeos.netlify.app |
There was a problem hiding this comment.
Pull Request Overview
This PR adds support for InfoBox and GradientBox controls to the MapLibre map widget, enabling users to display feature attributes on hover/click and show value legends for data visualization.
Key Changes:
- Implemented
add_infobox_control()andadd_gradientbox_control()methods in the MapLibre Python API - Added JavaScript integration for loading and configuring the mapbox-gl-infobox plugin
- Created comprehensive test coverage for both control types
- Added example notebook demonstrating usage with real-world data
Reviewed Changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| anymap/maplibre.py | Added Python API methods for InfoBox and GradientBox controls with parameter validation and state management |
| anymap/static/maplibre_widget.js | Implemented plugin loading logic, control initialization, and feature interaction handlers |
| tests/test_anymap.py | Added unit tests verifying control state management and JavaScript call generation |
| docs/examples/infobox_example.ipynb | Created example notebook demonstrating both controls with world cities dataset |
| mkdocs.yml | Added example notebook to documentation navigation |
Comments suppressed due to low confidence (1)
docs/examples/infobox_example.ipynb:1
- The color array includes '#ffffff' (white) as the last color in a gradient that should represent increasing population values. This will make the highest values appear white, which is likely unintended as it would be invisible or hard to see on typical map backgrounds. Consider using a darker color for the highest value or removing this entry.
{
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| const inject = (href) => { const l = document.createElement('link'); l.rel = 'stylesheet'; l.href = href; document.head.appendChild(l); }; | ||
| // try multiple popular paths | ||
| inject('https://unpkg.com/infobox-control@latest/styles.css'); | ||
| inject('https://unpkg.com/infobox-control@latest/dist/styles.css'); | ||
| inject('https://unpkg.com/mapbox-gl-infobox@latest/styles.css'); | ||
| inject('https://unpkg.com/mapbox-gl-infobox@latest/dist/styles.css'); | ||
| } |
There was a problem hiding this comment.
Multiple CSS stylesheets are being injected unconditionally when none are detected. Since these are all attempts to load the same plugin's styles, only one will likely work. Consider trying each stylesheet sequentially with error handling, and stop after the first successful load to avoid unnecessary network requests and duplicate style rules.
| const inject = (href) => { const l = document.createElement('link'); l.rel = 'stylesheet'; l.href = href; document.head.appendChild(l); }; | |
| // try multiple popular paths | |
| inject('https://unpkg.com/infobox-control@latest/styles.css'); | |
| inject('https://unpkg.com/infobox-control@latest/dist/styles.css'); | |
| inject('https://unpkg.com/mapbox-gl-infobox@latest/styles.css'); | |
| inject('https://unpkg.com/mapbox-gl-infobox@latest/dist/styles.css'); | |
| } | |
| // Try to load each stylesheet sequentially, stopping after the first successful load | |
| const styleCandidates = [ | |
| 'https://unpkg.com/infobox-control@latest/styles.css', | |
| 'https://unpkg.com/infobox-control@latest/dist/styles.css', | |
| 'https://unpkg.com/mapbox-gl-infobox@latest/styles.css', | |
| 'https://unpkg.com/mapbox-gl-infobox@latest/dist/styles.css' | |
| ]; | |
| const tryInjectStyle = (href) => new Promise((resolve) => { | |
| const l = document.createElement('link'); | |
| l.rel = 'stylesheet'; | |
| l.href = href; | |
| l.onload = () => resolve(true); | |
| l.onerror = () => resolve(false); | |
| document.head.appendChild(l); | |
| }); | |
| let styleLoaded = false; | |
| for (const href of styleCandidates) { | |
| // eslint-disable-next-line no-await-in-loop | |
| // Use an IIFE to allow await in for loop | |
| // (This code is inside an async function) | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape | |
| // eslint-disable-next-line no-with | |
| // eslint-disable-next-line prefer-promise-reject-errors | |
| // eslint-disable-next-line require-await | |
| // eslint-disable-next-line spaced-comment | |
| // eslint-disable-next-line yoda | |
| // eslint-disable-next-line no-await-in-loop | |
| // eslint-disable-next-line no-restricted-syntax | |
| // eslint-disable-next-line no-undef | |
| // eslint-disable-next-line no-unused-vars | |
| // eslint-disable-next-line no-shadow | |
| // eslint-disable-next-line no-redeclare | |
| // eslint-disable-next-line no-var | |
| // eslint-disable-next-line prefer-const | |
| // eslint-disable-next-line no-constant-condition | |
| // eslint-disable-next-line no-empty | |
| // eslint-disable-next-line no-labels | |
| // eslint-disable-next-line no-lone-blocks | |
| // eslint-disable-next-line no-continue | |
| // eslint-disable-next-line no-unreachable-loop | |
| // eslint-disable-next-line no-unused-expressions | |
| // eslint-disable-next-line no-void | |
| // eslint-disable-next-line no-else-return | |
| // eslint-disable-next-line no-implicit-coercion | |
| // eslint-disable-next-line no-implicit-globals | |
| // eslint-disable-next-line no-iterator | |
| // eslint-disable-next-line no-label-var | |
| // eslint-disable-next-line no-multi-str | |
| // eslint-disable-next-line no-nested-ternary | |
| // eslint-disable-next-line no-new-func | |
| // eslint-disable-next-line no-new-object | |
| // eslint-disable-next-line no-new-wrappers | |
| // eslint-disable-next-line no-proto | |
| // eslint-disable-next-line no-return-assign | |
| // eslint-disable-next-line no-script-url | |
| // eslint-disable-next-line no-self-compare | |
| // eslint-disable-next-line no-sequences | |
| // eslint-disable-next-line no-shadow-restricted-names | |
| // eslint-disable-next-line no-throw-literal | |
| // eslint-disable-next-line no-unused-labels | |
| // eslint-disable-next-line no-useless-call | |
| // eslint-disable-next-line no-useless-catch | |
| // eslint-disable-next-line no-useless-concat | |
| // eslint-disable-next-line no-useless-escape |
| return template.replace(/\{\{?\s*(\w+)\s*\}?\}/g, (_, k) => (safe[k] ?? '')); | ||
| }; | ||
| } else if (typeof formatter_template === 'string' && formatter_template.length > 0) { | ||
| const template = formatter_template; | ||
| finalOptions.formatter = (properties) => { | ||
| const safe = properties || {}; | ||
| return template.replace(/\{\{?\s*(\w+)\s*\}?\}/g, (_, k) => (safe[k] ?? '')); |
There was a problem hiding this comment.
The template replacement regex /\{\{?\s*(\w+)\s*\}?\}/g matches both single-brace {key} and double-brace {{key}} syntax but is inconsistent. The first brace \{ is required, while the second brace \{? is optional. This creates an asymmetric pattern that may not match the intended syntax. Consider using a more explicit regex that clearly handles both syntaxes separately, or standardize on one format.
| return template.replace(/\{\{?\s*(\w+)\s*\}?\}/g, (_, k) => (safe[k] ?? '')); | |
| }; | |
| } else if (typeof formatter_template === 'string' && formatter_template.length > 0) { | |
| const template = formatter_template; | |
| finalOptions.formatter = (properties) => { | |
| const safe = properties || {}; | |
| return template.replace(/\{\{?\s*(\w+)\s*\}?\}/g, (_, k) => (safe[k] ?? '')); | |
| return template.replace(/\{\{\s*(\w+)\s*\}\}/g, (_, k) => (safe[k] ?? '')); | |
| }; | |
| } else if (typeof formatter_template === 'string' && formatter_template.length > 0) { | |
| const template = formatter_template; | |
| finalOptions.formatter = (properties) => { | |
| const safe = properties || {}; | |
| return template.replace(/\{\{\s*(\w+)\s*\}\}/g, (_, k) => (safe[k] ?? '')); |
| if (el && el.classList) { | ||
| el.classList.add('maplibregl-ctrl'); | ||
| el.classList.add('maplibregl-ctrl-group'); | ||
| if (!el.style.margin) { |
There was a problem hiding this comment.
The condition !el.style.margin checks for empty string, but doesn't distinguish between explicitly set empty margin versus no margin style at all. Use el.style.margin === '' for empty string check, or consider using getComputedStyle(el).margin to check the actual computed margin if the goal is to avoid overriding existing margins.
| if (!el.style.margin) { | |
| const computedMargin = window.getComputedStyle(el).margin; | |
| if (!computedMargin || computedMargin === '0px') { |
| const rows = Object.keys(props).map(k => `<tr><th>${k}</th><td>${props[k]}</td></tr>`).join(''); | ||
| return `<table class="anymap-infobox">${rows}</table>`; |
There was a problem hiding this comment.
Property values are inserted directly into HTML without escaping. If feature properties contain user-supplied data or special HTML characters, this could lead to XSS vulnerabilities or rendering issues. Escape HTML entities in both keys and values before inserting them into the template.
No description provided.