@angular/cdk 13.1.0-next.1 → 13.1.0-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bidi/dir.d.ts +1 -1
- package/bidi/directionality.d.ts +2 -0
- package/esm2020/bidi/dir.mjs +8 -6
- package/esm2020/bidi/directionality.mjs +12 -7
- package/esm2020/drag-drop/drag-ref.mjs +2 -3
- package/esm2020/testing/test-element.mjs +1 -1
- package/esm2020/testing/testbed/fake-events/event-objects.mjs +6 -3
- package/esm2020/testing/testbed/unit-test-element.mjs +1 -1
- package/esm2020/tree/tree.mjs +1 -1
- package/esm2020/version.mjs +1 -1
- package/fesm2015/bidi.mjs +17 -10
- package/fesm2015/bidi.mjs.map +1 -1
- package/fesm2015/cdk.mjs +1 -1
- package/fesm2015/cdk.mjs.map +1 -1
- package/fesm2015/drag-drop.mjs +1 -2
- package/fesm2015/drag-drop.mjs.map +1 -1
- package/fesm2015/testing/testbed.mjs +5 -3
- package/fesm2015/testing/testbed.mjs.map +1 -1
- package/fesm2015/testing.mjs.map +1 -1
- package/fesm2015/tree.mjs.map +1 -1
- package/fesm2020/bidi.mjs +17 -10
- package/fesm2020/bidi.mjs.map +1 -1
- package/fesm2020/cdk.mjs +1 -1
- package/fesm2020/cdk.mjs.map +1 -1
- package/fesm2020/drag-drop.mjs +1 -2
- package/fesm2020/drag-drop.mjs.map +1 -1
- package/fesm2020/testing/testbed.mjs +5 -2
- package/fesm2020/testing/testbed.mjs.map +1 -1
- package/fesm2020/testing.mjs.map +1 -1
- package/fesm2020/tree.mjs.map +1 -1
- package/package.json +1 -1
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-add/index.mjs +1 -1
- package/testing/test-element.d.ts +2 -1
- package/testing/testbed/fake-events/event-objects.d.ts +1 -1
- package/testing/testbed/unit-test-element.d.ts +2 -1
package/bidi/dir.d.ts
CHANGED
|
@@ -25,7 +25,7 @@ export declare class Dir implements Directionality, AfterContentInit, OnDestroy
|
|
|
25
25
|
readonly change: EventEmitter<Direction>;
|
|
26
26
|
/** @docs-private */
|
|
27
27
|
get dir(): Direction;
|
|
28
|
-
set dir(value: Direction);
|
|
28
|
+
set dir(value: Direction | 'auto');
|
|
29
29
|
/** Current layout direction of the element. */
|
|
30
30
|
get value(): Direction;
|
|
31
31
|
/** Initialize once default value has been set. */
|
package/bidi/directionality.d.ts
CHANGED
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
import { EventEmitter, OnDestroy } from '@angular/core';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
export declare type Direction = 'ltr' | 'rtl';
|
|
11
|
+
/** Resolves a string value to a specific direction. */
|
|
12
|
+
export declare function _resolveDirectionality(rawValue: string): Direction;
|
|
11
13
|
/**
|
|
12
14
|
* The directionality (LTR / RTL) context for the application (or a subtree of it).
|
|
13
15
|
* Exposes the current direction and a stream of direction changes.
|
package/esm2020/bidi/dir.mjs
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* found in the LICENSE file at https://angular.io/license
|
|
7
7
|
*/
|
|
8
8
|
import { Directive, Output, Input, EventEmitter } from '@angular/core';
|
|
9
|
-
import { Directionality } from './directionality';
|
|
9
|
+
import { Directionality, _resolveDirectionality } from './directionality';
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
11
|
/**
|
|
12
12
|
* Directive to listen for changes of direction of part of the DOM.
|
|
@@ -28,11 +28,13 @@ export class Dir {
|
|
|
28
28
|
return this._dir;
|
|
29
29
|
}
|
|
30
30
|
set dir(value) {
|
|
31
|
-
const
|
|
32
|
-
|
|
31
|
+
const previousValue = this._dir;
|
|
32
|
+
// Note: `_resolveDirectionality` resolves the language based on the browser's language,
|
|
33
|
+
// whereas the browser does it based on the content of the element. Since doing so based
|
|
34
|
+
// on the content can be expensive, for now we're doing the simpler matching.
|
|
35
|
+
this._dir = _resolveDirectionality(value);
|
|
33
36
|
this._rawDir = value;
|
|
34
|
-
this._dir
|
|
35
|
-
if (old !== this._dir && this._isInitialized) {
|
|
37
|
+
if (previousValue !== this._dir && this._isInitialized) {
|
|
36
38
|
this.change.emit(this._dir);
|
|
37
39
|
}
|
|
38
40
|
}
|
|
@@ -64,4 +66,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
|
|
|
64
66
|
}], dir: [{
|
|
65
67
|
type: Input
|
|
66
68
|
}] } });
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay9iaWRpL2Rpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUE4QixNQUFNLGVBQWUsQ0FBQztBQUVsRyxPQUFPLEVBQVksY0FBYyxFQUFFLHNCQUFzQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7O0FBRW5GOzs7OztHQUtHO0FBT0gsTUFBTSxPQUFPLEdBQUc7SUFOaEI7UUFPRSx5RUFBeUU7UUFDakUsU0FBSSxHQUFjLEtBQUssQ0FBQztRQUVoQyw2REFBNkQ7UUFDckQsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFLeEMsZ0RBQWdEO1FBQ2xCLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO0tBa0N0RTtJQWhDQyxvQkFBb0I7SUFDcEIsSUFDSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFJLEdBQUcsQ0FBQyxLQUF5QjtRQUMvQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRWhDLHdGQUF3RjtRQUN4Rix3RkFBd0Y7UUFDeEYsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxJQUFJLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFFckIsSUFBSSxhQUFhLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3RELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3QjtJQUNILENBQUM7SUFFRCwrQ0FBK0M7SUFDL0MsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDOztnR0E1Q1UsR0FBRztvRkFBSCxHQUFHLDJJQUpILENBQUMsRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUMsQ0FBQzsyRkFJN0MsR0FBRztrQkFOZixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxPQUFPO29CQUNqQixTQUFTLEVBQUUsQ0FBQyxFQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxLQUFLLEVBQUMsQ0FBQztvQkFDeEQsSUFBSSxFQUFFLEVBQUMsWUFBWSxFQUFFLFNBQVMsRUFBQztvQkFDL0IsUUFBUSxFQUFFLEtBQUs7aUJBQ2hCOzhCQVkrQixNQUFNO3NCQUFuQyxNQUFNO3VCQUFDLFdBQVc7Z0JBSWYsR0FBRztzQkFETixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7RGlyZWN0aXZlLCBPdXRwdXQsIElucHV0LCBFdmVudEVtaXR0ZXIsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7RGlyZWN0aW9uLCBEaXJlY3Rpb25hbGl0eSwgX3Jlc29sdmVEaXJlY3Rpb25hbGl0eX0gZnJvbSAnLi9kaXJlY3Rpb25hbGl0eSc7XG5cbi8qKlxuICogRGlyZWN0aXZlIHRvIGxpc3RlbiBmb3IgY2hhbmdlcyBvZiBkaXJlY3Rpb24gb2YgcGFydCBvZiB0aGUgRE9NLlxuICpcbiAqIFByb3ZpZGVzIGl0c2VsZiBhcyBEaXJlY3Rpb25hbGl0eSBzdWNoIHRoYXQgZGVzY2VuZGFudCBkaXJlY3RpdmVzIG9ubHkgbmVlZCB0byBldmVyIGluamVjdFxuICogRGlyZWN0aW9uYWxpdHkgdG8gZ2V0IHRoZSBjbG9zZXN0IGRpcmVjdGlvbi5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2Rpcl0nLFxuICBwcm92aWRlcnM6IFt7cHJvdmlkZTogRGlyZWN0aW9uYWxpdHksIHVzZUV4aXN0aW5nOiBEaXJ9XSxcbiAgaG9zdDogeydbYXR0ci5kaXJdJzogJ19yYXdEaXInfSxcbiAgZXhwb3J0QXM6ICdkaXInLFxufSlcbmV4cG9ydCBjbGFzcyBEaXIgaW1wbGVtZW50cyBEaXJlY3Rpb25hbGl0eSwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgLyoqIE5vcm1hbGl6ZWQgZGlyZWN0aW9uIHRoYXQgYWNjb3VudHMgZm9yIGludmFsaWQvdW5zdXBwb3J0ZWQgdmFsdWVzLiAqL1xuICBwcml2YXRlIF9kaXI6IERpcmVjdGlvbiA9ICdsdHInO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBgdmFsdWVgIGhhcyBiZWVuIHNldCB0byBpdHMgaW5pdGlhbCB2YWx1ZS4gKi9cbiAgcHJpdmF0ZSBfaXNJbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBEaXJlY3Rpb24gYXMgcGFzc2VkIGluIGJ5IHRoZSBjb25zdW1lci4gKi9cbiAgX3Jhd0Rpcjogc3RyaW5nO1xuXG4gIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGRpcmVjdGlvbiBjaGFuZ2VzLiAqL1xuICBAT3V0cHV0KCdkaXJDaGFuZ2UnKSByZWFkb25seSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERpcmVjdGlvbj4oKTtcblxuICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICBASW5wdXQoKVxuICBnZXQgZGlyKCk6IERpcmVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX2RpcjtcbiAgfVxuICBzZXQgZGlyKHZhbHVlOiBEaXJlY3Rpb24gfCAnYXV0bycpIHtcbiAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gdGhpcy5fZGlyO1xuXG4gICAgLy8gTm90ZTogYF9yZXNvbHZlRGlyZWN0aW9uYWxpdHlgIHJlc29sdmVzIHRoZSBsYW5ndWFnZSBiYXNlZCBvbiB0aGUgYnJvd3NlcidzIGxhbmd1YWdlLFxuICAgIC8vIHdoZXJlYXMgdGhlIGJyb3dzZXIgZG9lcyBpdCBiYXNlZCBvbiB0aGUgY29udGVudCBvZiB0aGUgZWxlbWVudC4gU2luY2UgZG9pbmcgc28gYmFzZWRcbiAgICAvLyBvbiB0aGUgY29udGVudCBjYW4gYmUgZXhwZW5zaXZlLCBmb3Igbm93IHdlJ3JlIGRvaW5nIHRoZSBzaW1wbGVyIG1hdGNoaW5nLlxuICAgIHRoaXMuX2RpciA9IF9yZXNvbHZlRGlyZWN0aW9uYWxpdHkodmFsdWUpO1xuICAgIHRoaXMuX3Jhd0RpciA9IHZhbHVlO1xuXG4gICAgaWYgKHByZXZpb3VzVmFsdWUgIT09IHRoaXMuX2RpciAmJiB0aGlzLl9pc0luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHRoaXMuX2Rpcik7XG4gICAgfVxuICB9XG5cbiAgLyoqIEN1cnJlbnQgbGF5b3V0IGRpcmVjdGlvbiBvZiB0aGUgZWxlbWVudC4gKi9cbiAgZ2V0IHZhbHVlKCk6IERpcmVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlyO1xuICB9XG5cbiAgLyoqIEluaXRpYWxpemUgb25jZSBkZWZhdWx0IHZhbHVlIGhhcyBiZWVuIHNldC4gKi9cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5jaGFuZ2UuY29tcGxldGUoKTtcbiAgfVxufVxuIl19
|
|
@@ -8,6 +8,16 @@
|
|
|
8
8
|
import { EventEmitter, Inject, Injectable, Optional } from '@angular/core';
|
|
9
9
|
import { DIR_DOCUMENT } from './dir-document-token';
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
|
+
/** Regex that matches locales with an RTL script. Taken from `goog.i18n.bidi.isRtlLanguage`. */
|
|
12
|
+
const RTL_LOCALE_PATTERN = /^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;
|
|
13
|
+
/** Resolves a string value to a specific direction. */
|
|
14
|
+
export function _resolveDirectionality(rawValue) {
|
|
15
|
+
const value = rawValue?.toLowerCase() || '';
|
|
16
|
+
if (value === 'auto' && typeof navigator !== 'undefined' && navigator?.language) {
|
|
17
|
+
return RTL_LOCALE_PATTERN.test(navigator.language) ? 'rtl' : 'ltr';
|
|
18
|
+
}
|
|
19
|
+
return value === 'rtl' ? 'rtl' : 'ltr';
|
|
20
|
+
}
|
|
11
21
|
/**
|
|
12
22
|
* The directionality (LTR / RTL) context for the application (or a subtree of it).
|
|
13
23
|
* Exposes the current direction and a stream of direction changes.
|
|
@@ -19,14 +29,9 @@ export class Directionality {
|
|
|
19
29
|
/** Stream that emits whenever the 'ltr' / 'rtl' state changes. */
|
|
20
30
|
this.change = new EventEmitter();
|
|
21
31
|
if (_document) {
|
|
22
|
-
// TODO: handle 'auto' value -
|
|
23
|
-
// We still need to account for dir="auto".
|
|
24
|
-
// It looks like HTMLElemenet.dir is also "auto" when that's set to the attribute,
|
|
25
|
-
// but getComputedStyle return either "ltr" or "rtl". avoiding getComputedStyle for now
|
|
26
32
|
const bodyDir = _document.body ? _document.body.dir : null;
|
|
27
33
|
const htmlDir = _document.documentElement ? _document.documentElement.dir : null;
|
|
28
|
-
|
|
29
|
-
this.value = value === 'ltr' || value === 'rtl' ? value : 'ltr';
|
|
34
|
+
this.value = _resolveDirectionality(bodyDir || htmlDir || 'ltr');
|
|
30
35
|
}
|
|
31
36
|
}
|
|
32
37
|
ngOnDestroy() {
|
|
@@ -44,4 +49,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
|
|
|
44
49
|
type: Inject,
|
|
45
50
|
args: [DIR_DOCUMENT]
|
|
46
51
|
}] }]; } });
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9uYWxpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL2JpZGkvZGlyZWN0aW9uYWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7O0FBSWxELGdHQUFnRztBQUNoRyxNQUFNLGtCQUFrQixHQUN0QixvSEFBb0gsQ0FBQztBQUV2SCx1REFBdUQ7QUFDdkQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFFBQWdCO0lBQ3JELE1BQU0sS0FBSyxHQUFHLFFBQVEsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFFNUMsSUFBSSxLQUFLLEtBQUssTUFBTSxJQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxTQUFTLEVBQUUsUUFBUSxFQUFFO1FBQy9FLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7S0FDcEU7SUFFRCxPQUFPLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7O0dBR0c7QUFFSCxNQUFNLE9BQU8sY0FBYztJQU96QixZQUE4QyxTQUFlO1FBTjdELHdDQUF3QztRQUMvQixVQUFLLEdBQWMsS0FBSyxDQUFDO1FBRWxDLGtFQUFrRTtRQUN6RCxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUc5QyxJQUFJLFNBQVMsRUFBRTtZQUNiLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDM0QsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNqRixJQUFJLENBQUMsS0FBSyxHQUFHLHNCQUFzQixDQUFDLE9BQU8sSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLENBQUM7U0FDbEU7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQzs7MkdBakJVLGNBQWMsa0JBT08sWUFBWTsrR0FQakMsY0FBYyxjQURGLE1BQU07MkZBQ2xCLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzswQkFRakIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtESVJfRE9DVU1FTlR9IGZyb20gJy4vZGlyLWRvY3VtZW50LXRva2VuJztcblxuZXhwb3J0IHR5cGUgRGlyZWN0aW9uID0gJ2x0cicgfCAncnRsJztcblxuLyoqIFJlZ2V4IHRoYXQgbWF0Y2hlcyBsb2NhbGVzIHdpdGggYW4gUlRMIHNjcmlwdC4gVGFrZW4gZnJvbSBgZ29vZy5pMThuLmJpZGkuaXNSdGxMYW5ndWFnZWAuICovXG5jb25zdCBSVExfTE9DQUxFX1BBVFRFUk4gPVxuICAvXihhcnxja2J8ZHZ8aGV8aXd8ZmF8bnFvfHBzfHNkfHVnfHVyfHlpfC4qWy1fXShBZGxtfEFyYWJ8SGVicnxOa29vfFJvaGd8VGhhYSkpKD8hLipbLV9dKExhdG58Q3lybCkoJHwtfF8pKSgkfC18XykvaTtcblxuLyoqIFJlc29sdmVzIGEgc3RyaW5nIHZhbHVlIHRvIGEgc3BlY2lmaWMgZGlyZWN0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9yZXNvbHZlRGlyZWN0aW9uYWxpdHkocmF3VmFsdWU6IHN0cmluZyk6IERpcmVjdGlvbiB7XG4gIGNvbnN0IHZhbHVlID0gcmF3VmFsdWU/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG5cbiAgaWYgKHZhbHVlID09PSAnYXV0bycgJiYgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yPy5sYW5ndWFnZSkge1xuICAgIHJldHVybiBSVExfTE9DQUxFX1BBVFRFUk4udGVzdChuYXZpZ2F0b3IubGFuZ3VhZ2UpID8gJ3J0bCcgOiAnbHRyJztcbiAgfVxuXG4gIHJldHVybiB2YWx1ZSA9PT0gJ3J0bCcgPyAncnRsJyA6ICdsdHInO1xufVxuXG4vKipcbiAqIFRoZSBkaXJlY3Rpb25hbGl0eSAoTFRSIC8gUlRMKSBjb250ZXh0IGZvciB0aGUgYXBwbGljYXRpb24gKG9yIGEgc3VidHJlZSBvZiBpdCkuXG4gKiBFeHBvc2VzIHRoZSBjdXJyZW50IGRpcmVjdGlvbiBhbmQgYSBzdHJlYW0gb2YgZGlyZWN0aW9uIGNoYW5nZXMuXG4gKi9cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIERpcmVjdGlvbmFsaXR5IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyoqIFRoZSBjdXJyZW50ICdsdHInIG9yICdydGwnIHZhbHVlLiAqL1xuICByZWFkb25seSB2YWx1ZTogRGlyZWN0aW9uID0gJ2x0cic7XG5cbiAgLyoqIFN0cmVhbSB0aGF0IGVtaXRzIHdoZW5ldmVyIHRoZSAnbHRyJyAvICdydGwnIHN0YXRlIGNoYW5nZXMuICovXG4gIHJlYWRvbmx5IGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGlyZWN0aW9uPigpO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoRElSX0RPQ1VNRU5UKSBfZG9jdW1lbnQ/OiBhbnkpIHtcbiAgICBpZiAoX2RvY3VtZW50KSB7XG4gICAgICBjb25zdCBib2R5RGlyID0gX2RvY3VtZW50LmJvZHkgPyBfZG9jdW1lbnQuYm9keS5kaXIgOiBudWxsO1xuICAgICAgY29uc3QgaHRtbERpciA9IF9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgPyBfZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpciA6IG51bGw7XG4gICAgICB0aGlzLnZhbHVlID0gX3Jlc29sdmVEaXJlY3Rpb25hbGl0eShib2R5RGlyIHx8IGh0bWxEaXIgfHwgJ2x0cicpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2hhbmdlLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
|