@tuki-io/tuki-widgets 0.0.213 → 0.0.214

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,13 +1,30 @@
1
1
  /** Matches device types like `Cisco 8851`. */
2
2
  export const CISCO_DIGIT_DEVICE_TYPE_PATTERN = /^Cisco\s+\d+$/i;
3
3
  export const DEFAULT_SEP_DEVICE_PREFIX = 'SEP';
4
- export function applyDefaultDevicePrefixIfMissing(device) {
4
+ /**
5
+ * Extracts a literal prefix from `deviceNameExplained` patterns such as
6
+ * `SEP[mac]`, `TCT[0-9A-Z._-]{1,12}`, or `[A-Z0-9]{1,15}` (no prefix).
7
+ */
8
+ export function extractDevicePrefixFromNameExplained(deviceNameExplained) {
9
+ const explained = deviceNameExplained?.trim() ?? '';
10
+ if (!explained) {
11
+ return null;
12
+ }
13
+ const match = explained.match(/^([A-Za-z]+)\[/);
14
+ return match?.[1] ?? null;
15
+ }
16
+ export function applyDefaultDevicePrefixIfMissing(device, defaults) {
5
17
  if (device.prefix?.trim()) {
6
18
  return;
7
19
  }
20
+ const prefixFromDefaults = extractDevicePrefixFromNameExplained(defaults.deviceNameExplained);
21
+ if (prefixFromDefaults) {
22
+ device.prefix = prefixFromDefaults;
23
+ return;
24
+ }
8
25
  const deviceType = device.deviceType?.trim() ?? '';
9
26
  if (CISCO_DIGIT_DEVICE_TYPE_PATTERN.test(deviceType)) {
10
27
  device.prefix = DEFAULT_SEP_DEVICE_PREFIX;
11
28
  }
12
29
  }
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLWRlZmF1bHQtcHJlZml4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXItY3JlYXRpb24vc3JjL3V0aWxzL2RldmljZS1kZWZhdWx0LXByZWZpeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSw4Q0FBOEM7QUFDOUMsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsZ0JBQWdCLENBQUM7QUFFaEUsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsS0FBSyxDQUFDO0FBRS9DLE1BQU0sVUFBVSxpQ0FBaUMsQ0FBQyxNQUFzRDtJQUNwRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDdkIsT0FBTztLQUNWO0lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDbkQsSUFBSSwrQkFBK0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDbEQsTUFBTSxDQUFDLE1BQU0sR0FBRyx5QkFBeUIsQ0FBQztLQUM3QztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3VzZXItY3JlYXRpb24td2l6YXJkLmludGVyZmFjZXMnO1xyXG5cclxuLyoqIE1hdGNoZXMgZGV2aWNlIHR5cGVzIGxpa2UgYENpc2NvIDg4NTFgLiAqL1xyXG5leHBvcnQgY29uc3QgQ0lTQ09fRElHSVRfREVWSUNFX1RZUEVfUEFUVEVSTiA9IC9eQ2lzY29cXHMrXFxkKyQvaTtcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFUF9ERVZJQ0VfUFJFRklYID0gJ1NFUCc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlEZWZhdWx0RGV2aWNlUHJlZml4SWZNaXNzaW5nKGRldmljZTogUGljazxEZXZpY2VJbnRlcmZhY2UsICdwcmVmaXgnIHwgJ2RldmljZVR5cGUnPik6IHZvaWQge1xyXG4gICAgaWYgKGRldmljZS5wcmVmaXg/LnRyaW0oKSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkZXZpY2VUeXBlID0gZGV2aWNlLmRldmljZVR5cGU/LnRyaW0oKSA/PyAnJztcclxuICAgIGlmIChDSVNDT19ESUdJVF9ERVZJQ0VfVFlQRV9QQVRURVJOLnRlc3QoZGV2aWNlVHlwZSkpIHtcclxuICAgICAgICBkZXZpY2UucHJlZml4ID0gREVGQVVMVF9TRVBfREVWSUNFX1BSRUZJWDtcclxuICAgIH1cclxufVxyXG4iXX0=
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLWRlZmF1bHQtcHJlZml4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXItY3JlYXRpb24vc3JjL3V0aWxzL2RldmljZS1kZWZhdWx0LXByZWZpeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSw4Q0FBOEM7QUFDOUMsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsZ0JBQWdCLENBQUM7QUFFaEUsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsS0FBSyxDQUFDO0FBRS9DOzs7R0FHRztBQUNILE1BQU0sVUFBVSxvQ0FBb0MsQ0FBQyxtQkFBOEM7SUFDL0YsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3BELElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDWixPQUFPLElBQUksQ0FBQztLQUNmO0lBRUQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hELE9BQU8sS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQzlCLENBQUM7QUFFRCxNQUFNLFVBQVUsaUNBQWlDLENBQUMsTUFBc0QsRUFBRSxRQUFpQztJQUN2SSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDdkIsT0FBTztLQUNWO0lBRUQsTUFBTSxrQkFBa0IsR0FBRyxvQ0FBb0MsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUM5RixJQUFJLGtCQUFrQixFQUFFO1FBQ3BCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLENBQUM7UUFDbkMsT0FBTztLQUNWO0lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDbkQsSUFBSSwrQkFBK0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDbEQsTUFBTSxDQUFDLE1BQU0sR0FBRyx5QkFBeUIsQ0FBQztLQUM3QztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXZpY2VEZWZhdWx0c0ludGVyZmFjZSwgRGV2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy91c2VyLWNyZWF0aW9uLXdpemFyZC5pbnRlcmZhY2VzJztcclxuXHJcbi8qKiBNYXRjaGVzIGRldmljZSB0eXBlcyBsaWtlIGBDaXNjbyA4ODUxYC4gKi9cclxuZXhwb3J0IGNvbnN0IENJU0NPX0RJR0lUX0RFVklDRV9UWVBFX1BBVFRFUk4gPSAvXkNpc2NvXFxzK1xcZCskL2k7XHJcblxyXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVBfREVWSUNFX1BSRUZJWCA9ICdTRVAnO1xyXG5cclxuLyoqXHJcbiAqIEV4dHJhY3RzIGEgbGl0ZXJhbCBwcmVmaXggZnJvbSBgZGV2aWNlTmFtZUV4cGxhaW5lZGAgcGF0dGVybnMgc3VjaCBhc1xyXG4gKiBgU0VQW21hY11gLCBgVENUWzAtOUEtWi5fLV17MSwxMn1gLCBvciBgW0EtWjAtOV17MSwxNX1gIChubyBwcmVmaXgpLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REZXZpY2VQcmVmaXhGcm9tTmFtZUV4cGxhaW5lZChkZXZpY2VOYW1lRXhwbGFpbmVkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBjb25zdCBleHBsYWluZWQgPSBkZXZpY2VOYW1lRXhwbGFpbmVkPy50cmltKCkgPz8gJyc7XHJcbiAgICBpZiAoIWV4cGxhaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1hdGNoID0gZXhwbGFpbmVkLm1hdGNoKC9eKFtBLVphLXpdKylcXFsvKTtcclxuICAgIHJldHVybiBtYXRjaD8uWzFdID8/IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhcHBseURlZmF1bHREZXZpY2VQcmVmaXhJZk1pc3NpbmcoZGV2aWNlOiBQaWNrPERldmljZUludGVyZmFjZSwgJ3ByZWZpeCcgfCAnZGV2aWNlVHlwZSc+LCBkZWZhdWx0czogRGV2aWNlRGVmYXVsdHNJbnRlcmZhY2UpOiB2b2lkIHtcclxuICAgIGlmIChkZXZpY2UucHJlZml4Py50cmltKCkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJlZml4RnJvbURlZmF1bHRzID0gZXh0cmFjdERldmljZVByZWZpeEZyb21OYW1lRXhwbGFpbmVkKGRlZmF1bHRzLmRldmljZU5hbWVFeHBsYWluZWQpO1xyXG4gICAgaWYgKHByZWZpeEZyb21EZWZhdWx0cykge1xyXG4gICAgICAgIGRldmljZS5wcmVmaXggPSBwcmVmaXhGcm9tRGVmYXVsdHM7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRldmljZVR5cGUgPSBkZXZpY2UuZGV2aWNlVHlwZT8udHJpbSgpID8/ICcnO1xyXG4gICAgaWYgKENJU0NPX0RJR0lUX0RFVklDRV9UWVBFX1BBVFRFUk4udGVzdChkZXZpY2VUeXBlKSkge1xyXG4gICAgICAgIGRldmljZS5wcmVmaXggPSBERUZBVUxUX1NFUF9ERVZJQ0VfUFJFRklYO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,18 @@
1
+ export function deviceNameHasDynamicTokens(name) {
2
+ return /\[DN\]|\[LN\]|\[FN\]/i.test(name ?? '');
3
+ }
4
+ /** Device name field stays readonly while the template in `newName` contains placeholders. */
5
+ export function isDeviceNameReadonlyFromTemplate(newName) {
6
+ return deviceNameHasDynamicTokens(newName);
7
+ }
8
+ /** Form field value without a separate `matPrefix` when `prefix` is already part of the resolved name. */
9
+ export function stripDeviceNamePrefix(resolvedName, prefix) {
10
+ const trimmedPrefix = prefix?.trim();
11
+ if (!trimmedPrefix) {
12
+ return resolvedName;
13
+ }
14
+ return resolvedName.toUpperCase().startsWith(trimmedPrefix.toUpperCase())
15
+ ? resolvedName.substring(trimmedPrefix.length)
16
+ : resolvedName;
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLW5hbWUtZHluYW1pYy10b2tlbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvdXNlci1jcmVhdGlvbi9zcmMvdXRpbHMvZGV2aWNlLW5hbWUtZHluYW1pYy10b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLDBCQUEwQixDQUFDLElBQStCO0lBQ3RFLE9BQU8sdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQsOEZBQThGO0FBQzlGLE1BQU0sVUFBVSxnQ0FBZ0MsQ0FBQyxPQUFrQztJQUMvRSxPQUFPLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRCwwR0FBMEc7QUFDMUcsTUFBTSxVQUFVLHFCQUFxQixDQUFDLFlBQW9CLEVBQUUsTUFBc0I7SUFDOUUsTUFBTSxhQUFhLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3JDLElBQUksQ0FBQyxhQUFhLEVBQUU7UUFDaEIsT0FBTyxZQUFZLENBQUM7S0FDdkI7SUFDRCxPQUFPLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDOUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGRldmljZU5hbWVIYXNEeW5hbWljVG9rZW5zKG5hbWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAvXFxbRE5cXF18XFxbTE5cXF18XFxbRk5cXF0vaS50ZXN0KG5hbWUgPz8gJycpO1xyXG59XHJcblxyXG4vKiogRGV2aWNlIG5hbWUgZmllbGQgc3RheXMgcmVhZG9ubHkgd2hpbGUgdGhlIHRlbXBsYXRlIGluIGBuZXdOYW1lYCBjb250YWlucyBwbGFjZWhvbGRlcnMuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0RldmljZU5hbWVSZWFkb25seUZyb21UZW1wbGF0ZShuZXdOYW1lOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZGV2aWNlTmFtZUhhc0R5bmFtaWNUb2tlbnMobmV3TmFtZSk7XHJcbn1cclxuXHJcbi8qKiBGb3JtIGZpZWxkIHZhbHVlIHdpdGhvdXQgYSBzZXBhcmF0ZSBgbWF0UHJlZml4YCB3aGVuIGBwcmVmaXhgIGlzIGFscmVhZHkgcGFydCBvZiB0aGUgcmVzb2x2ZWQgbmFtZS4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwRGV2aWNlTmFtZVByZWZpeChyZXNvbHZlZE5hbWU6IHN0cmluZywgcHJlZml4Pzogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB0cmltbWVkUHJlZml4ID0gcHJlZml4Py50cmltKCk7XHJcbiAgICBpZiAoIXRyaW1tZWRQcmVmaXgpIHtcclxuICAgICAgICByZXR1cm4gcmVzb2x2ZWROYW1lO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc29sdmVkTmFtZS50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgodHJpbW1lZFByZWZpeC50b1VwcGVyQ2FzZSgpKVxyXG4gICAgICAgID8gcmVzb2x2ZWROYW1lLnN1YnN0cmluZyh0cmltbWVkUHJlZml4Lmxlbmd0aClcclxuICAgICAgICA6IHJlc29sdmVkTmFtZTtcclxufVxyXG4iXX0=
@@ -3,6 +3,7 @@
3
3
  * to validate the name field value (without matPrefix).
4
4
  *
5
5
  * - `([sS][eE][pP]|BAT)[0-9a-fA-F]{12}` → `[0-9a-fA-F]{12}`
6
+ * - `TCT[0-9A-Z._-]{1,12}` → `[0-9A-Z._-]{1,12}`
6
7
  * - `[a-zA-Z0-9]{1,15}` → `[a-zA-Z0-9]{1,15}` (unchanged)
7
8
  */
8
9
  export function parseDeviceNameRegexBody(deviceNameRegex) {
@@ -12,15 +13,17 @@ export function parseDeviceNameRegexBody(deviceNameRegex) {
12
13
  }
13
14
  return stripLeadingPrefixGroup(fullRegex);
14
15
  }
16
+ /** Character class with an optional trailing quantifier, e.g. `[0-9a-fA-F]{12}`. */
17
+ const CHAR_CLASS_WITH_QUANTIFIER = String.raw `\[[^\]]+\](?:\{[^}]+\})?`;
15
18
  function stripLeadingPrefixGroup(regex) {
16
- const parenMatch = regex.match(/^(\(.+?\))(.+)$/s);
19
+ const parenMatch = regex.match(new RegExp(`^(\\([^)]+\\))(${CHAR_CLASS_WITH_QUANTIFIER})$`));
17
20
  if (parenMatch?.[2]?.trim()) {
18
21
  return parenMatch[2];
19
22
  }
20
- const literalMatch = regex.match(/^([A-Za-z]+)(\[.+\])$/s);
23
+ const literalMatch = regex.match(new RegExp(`^([A-Za-z]+)(${CHAR_CLASS_WITH_QUANTIFIER})$`));
21
24
  if (literalMatch?.[2]?.trim()) {
22
25
  return literalMatch[2];
23
26
  }
24
27
  return regex;
25
28
  }
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UtZGV2aWNlLW5hbWUtcnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWNyZWF0aW9uL3NyYy91dGlscy9wYXJzZS1kZXZpY2UtbmFtZS1ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxlQUEwQztJQUMvRSxNQUFNLFNBQVMsR0FBRyxlQUFlLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2hELElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDWixPQUFPLEVBQUUsQ0FBQztLQUNiO0lBRUQsT0FBTyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsU0FBUyx1QkFBdUIsQ0FBQyxLQUFhO0lBQzFDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNuRCxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ3pCLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3hCO0lBRUQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzNELElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDM0IsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDMUI7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFN0cmlwcyBhIGxlYWRpbmcgZGV2aWNlLXByZWZpeCBncm91cCBmcm9tIGBkZXZpY2VOYW1lUmVnZXhgLCByZXR1cm5pbmcgdGhlIHBhdHRlcm5cclxuICogdG8gdmFsaWRhdGUgdGhlIG5hbWUgZmllbGQgdmFsdWUgKHdpdGhvdXQgbWF0UHJlZml4KS5cclxuICpcclxuICogLSBgKFtzU11bZUVdW3BQXXxCQVQpWzAtOWEtZkEtRl17MTJ9YCDihpIgYFswLTlhLWZBLUZdezEyfWBcclxuICogLSBgW2EtekEtWjAtOV17MSwxNX1gIOKGkiBgW2EtekEtWjAtOV17MSwxNX1gICh1bmNoYW5nZWQpXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEZXZpY2VOYW1lUmVnZXhCb2R5KGRldmljZU5hbWVSZWdleDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmdWxsUmVnZXggPSBkZXZpY2VOYW1lUmVnZXg/LnRyaW0oKSA/PyAnJztcclxuICAgIGlmICghZnVsbFJlZ2V4KSB7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHJpcExlYWRpbmdQcmVmaXhHcm91cChmdWxsUmVnZXgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzdHJpcExlYWRpbmdQcmVmaXhHcm91cChyZWdleDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHBhcmVuTWF0Y2ggPSByZWdleC5tYXRjaCgvXihcXCguKz9cXCkpKC4rKSQvcyk7XHJcbiAgICBpZiAocGFyZW5NYXRjaD8uWzJdPy50cmltKCkpIHtcclxuICAgICAgICByZXR1cm4gcGFyZW5NYXRjaFsyXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsaXRlcmFsTWF0Y2ggPSByZWdleC5tYXRjaCgvXihbQS1aYS16XSspKFxcWy4rXFxdKSQvcyk7XHJcbiAgICBpZiAobGl0ZXJhbE1hdGNoPy5bMl0/LnRyaW0oKSkge1xyXG4gICAgICAgIHJldHVybiBsaXRlcmFsTWF0Y2hbMl07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlZ2V4O1xyXG59XHJcbiJdfQ==
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UtZGV2aWNlLW5hbWUtcnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWNyZWF0aW9uL3NyYy91dGlscy9wYXJzZS1kZXZpY2UtbmFtZS1ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsZUFBMEM7SUFDL0UsTUFBTSxTQUFTLEdBQUcsZUFBZSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNoRCxJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ1osT0FBTyxFQUFFLENBQUM7S0FDYjtJQUVELE9BQU8sdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUVELG9GQUFvRjtBQUNwRixNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUEsMEJBQTBCLENBQUM7QUFFeEUsU0FBUyx1QkFBdUIsQ0FBQyxLQUFhO0lBQzFDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsa0JBQWtCLDBCQUEwQixJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdGLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDekIsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDeEI7SUFFRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLGdCQUFnQiwwQkFBMEIsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3RixJQUFJLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQzNCLE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzFCO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBTdHJpcHMgYSBsZWFkaW5nIGRldmljZS1wcmVmaXggZ3JvdXAgZnJvbSBgZGV2aWNlTmFtZVJlZ2V4YCwgcmV0dXJuaW5nIHRoZSBwYXR0ZXJuXHJcbiAqIHRvIHZhbGlkYXRlIHRoZSBuYW1lIGZpZWxkIHZhbHVlICh3aXRob3V0IG1hdFByZWZpeCkuXHJcbiAqXHJcbiAqIC0gYChbc1NdW2VFXVtwUF18QkFUKVswLTlhLWZBLUZdezEyfWAg4oaSIGBbMC05YS1mQS1GXXsxMn1gXHJcbiAqIC0gYFRDVFswLTlBLVouXy1dezEsMTJ9YCDihpIgYFswLTlBLVouXy1dezEsMTJ9YFxyXG4gKiAtIGBbYS16QS1aMC05XXsxLDE1fWAg4oaSIGBbYS16QS1aMC05XXsxLDE1fWAgKHVuY2hhbmdlZClcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURldmljZU5hbWVSZWdleEJvZHkoZGV2aWNlTmFtZVJlZ2V4OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZ1bGxSZWdleCA9IGRldmljZU5hbWVSZWdleD8udHJpbSgpID8/ICcnO1xyXG4gICAgaWYgKCFmdWxsUmVnZXgpIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN0cmlwTGVhZGluZ1ByZWZpeEdyb3VwKGZ1bGxSZWdleCk7XHJcbn1cclxuXHJcbi8qKiBDaGFyYWN0ZXIgY2xhc3Mgd2l0aCBhbiBvcHRpb25hbCB0cmFpbGluZyBxdWFudGlmaWVyLCBlLmcuIGBbMC05YS1mQS1GXXsxMn1gLiAqL1xyXG5jb25zdCBDSEFSX0NMQVNTX1dJVEhfUVVBTlRJRklFUiA9IFN0cmluZy5yYXdgXFxbW15cXF1dK1xcXSg/Olxce1tefV0rXFx9KT9gO1xyXG5cclxuZnVuY3Rpb24gc3RyaXBMZWFkaW5nUHJlZml4R3JvdXAocmVnZXg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwYXJlbk1hdGNoID0gcmVnZXgubWF0Y2gobmV3IFJlZ0V4cChgXihcXFxcKFteKV0rXFxcXCkpKCR7Q0hBUl9DTEFTU19XSVRIX1FVQU5USUZJRVJ9KSRgKSk7XHJcbiAgICBpZiAocGFyZW5NYXRjaD8uWzJdPy50cmltKCkpIHtcclxuICAgICAgICByZXR1cm4gcGFyZW5NYXRjaFsyXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsaXRlcmFsTWF0Y2ggPSByZWdleC5tYXRjaChuZXcgUmVnRXhwKGBeKFtBLVphLXpdKykoJHtDSEFSX0NMQVNTX1dJVEhfUVVBTlRJRklFUn0pJGApKTtcclxuICAgIGlmIChsaXRlcmFsTWF0Y2g/LlsyXT8udHJpbSgpKSB7XHJcbiAgICAgICAgcmV0dXJuIGxpdGVyYWxNYXRjaFsyXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVnZXg7XHJcbn1cclxuIl19