@angular/core 18.0.0-next.5 → 18.0.0-next.6
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/esm2022/primitives/event-dispatch/contract_binary.mjs +10 -0
- package/esm2022/primitives/event-dispatch/index.mjs +13 -0
- package/esm2022/primitives/event-dispatch/src/a11y_click.mjs +54 -0
- package/esm2022/primitives/event-dispatch/src/accessibility.mjs +35 -0
- package/esm2022/primitives/event-dispatch/src/attribute.mjs +72 -0
- package/esm2022/primitives/event-dispatch/src/base_dispatcher.mjs +196 -0
- package/esm2022/primitives/event-dispatch/src/cache.mjs +95 -0
- package/esm2022/primitives/event-dispatch/src/char.mjs +35 -0
- package/esm2022/primitives/event-dispatch/src/custom_events.mjs +63 -0
- package/esm2022/primitives/event-dispatch/src/dispatcher.mjs +254 -0
- package/esm2022/primitives/event-dispatch/src/dom.mjs +48 -0
- package/esm2022/primitives/event-dispatch/src/earlyeventcontract.mjs +36 -0
- package/esm2022/primitives/event-dispatch/src/event.mjs +638 -0
- package/esm2022/primitives/event-dispatch/src/event_contract_container.mjs +63 -0
- package/esm2022/primitives/event-dispatch/src/event_contract_defines.mjs +48 -0
- package/esm2022/primitives/event-dispatch/src/event_contract_multi_container.mjs +192 -0
- package/esm2022/primitives/event-dispatch/src/event_handler.mjs +9 -0
- package/esm2022/primitives/event-dispatch/src/event_info.mjs +199 -0
- package/esm2022/primitives/event-dispatch/src/event_type.mjs +244 -0
- package/esm2022/primitives/event-dispatch/src/eventcontract.mjs +675 -0
- package/esm2022/primitives/event-dispatch/src/key_code.mjs +21 -0
- package/esm2022/primitives/event-dispatch/src/legacy_dispatcher.mjs +9 -0
- package/esm2022/primitives/event-dispatch/src/property.mjs +35 -0
- package/esm2022/primitives/event-dispatch/src/register_events.mjs +32 -0
- package/esm2022/primitives/event-dispatch/src/replay.mjs +389 -0
- package/esm2022/primitives/event-dispatch/src/restriction.mjs +15 -0
- package/esm2022/primitives/signals/index.mjs +3 -3
- package/esm2022/primitives/signals/src/computed.mjs +5 -3
- package/esm2022/primitives/signals/src/graph.mjs +14 -9
- package/esm2022/primitives/signals/src/signal.mjs +2 -2
- package/esm2022/primitives/signals/src/watch.mjs +2 -2
- package/esm2022/src/change_detection/scheduling/zoneless_scheduling_impl.mjs +50 -5
- package/esm2022/src/core.mjs +2 -1
- package/esm2022/src/core_private_export.mjs +2 -1
- package/esm2022/src/defer/instructions.mjs +31 -8
- package/esm2022/src/di/host_tag_name_token.mjs +65 -0
- package/esm2022/src/di/index.mjs +2 -1
- package/esm2022/src/errors.mjs +1 -1
- package/esm2022/src/hydration/annotate.mjs +15 -1
- package/esm2022/src/hydration/event_replay.mjs +181 -0
- package/esm2022/src/hydration/tokens.mjs +6 -1
- package/esm2022/src/pending_tasks.mjs +54 -11
- package/esm2022/src/render3/component_ref.mjs +1 -1
- package/esm2022/src/render3/context_discovery.mjs +15 -1
- package/esm2022/src/render3/instructions/control_flow.mjs +50 -3
- package/esm2022/src/render3/list_reconciliation.mjs +41 -1
- package/esm2022/src/util/callback_scheduler.mjs +13 -2
- package/esm2022/src/version.mjs +1 -1
- package/esm2022/src/zone/ng_zone.mjs +22 -6
- package/esm2022/testing/src/async.mjs +2 -10
- package/esm2022/testing/src/defer.mjs +1 -2
- package/esm2022/testing/src/logger.mjs +3 -3
- package/event-dispatch-contract.min.js +1 -1
- package/fesm2022/core.mjs +516 -39
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/primitives/event-dispatch.mjs +3044 -0
- package/fesm2022/primitives/event-dispatch.mjs.map +1 -0
- package/fesm2022/primitives/signals.mjs +17 -10
- package/fesm2022/primitives/signals.mjs.map +1 -1
- package/fesm2022/rxjs-interop.mjs +1 -1
- package/fesm2022/testing.mjs +3 -12
- package/fesm2022/testing.mjs.map +1 -1
- package/index.d.ts +75 -13
- package/package.json +7 -1
- package/primitives/event-dispatch/index.d.ts +627 -0
- package/primitives/signals/index.d.ts +1 -1
- package/rxjs-interop/index.d.ts +1 -1
- package/schematics/migrations/{transfer-state → http-providers}/bundle.js +254 -68
- package/schematics/migrations/http-providers/bundle.js.map +7 -0
- package/schematics/migrations/invalid-two-way-bindings/bundle.js +659 -337
- package/schematics/migrations/invalid-two-way-bindings/bundle.js.map +2 -2
- package/schematics/migrations.json +6 -16
- package/schematics/ng-generate/control-flow-migration/bundle.js +667 -345
- package/schematics/ng-generate/control-flow-migration/bundle.js.map +2 -2
- package/schematics/ng-generate/standalone-migration/bundle.js +1030 -660
- package/schematics/ng-generate/standalone-migration/bundle.js.map +2 -2
- package/testing/index.d.ts +2 -9
- package/schematics/migrations/block-template-entities/bundle.js +0 -22808
- package/schematics/migrations/block-template-entities/bundle.js.map +0 -7
- package/schematics/migrations/compiler-options/bundle.js +0 -582
- package/schematics/migrations/compiler-options/bundle.js.map +0 -7
- package/schematics/migrations/transfer-state/bundle.js.map +0 -7
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
import * as eventLib from './event';
|
|
9
|
+
/**
|
|
10
|
+
* Whether the user agent is running on iOS.
|
|
11
|
+
*/
|
|
12
|
+
const isIos = typeof navigator !== 'undefined' && /iPhone|iPad|iPod/.test(navigator.userAgent);
|
|
13
|
+
/**
|
|
14
|
+
* A class representing a container node and all the event handlers
|
|
15
|
+
* installed on it. Used so that handlers can be cleaned up if the
|
|
16
|
+
* container is removed from the contract.
|
|
17
|
+
*/
|
|
18
|
+
export class EventContractContainer {
|
|
19
|
+
/**
|
|
20
|
+
* @param element The container Element.
|
|
21
|
+
*/
|
|
22
|
+
constructor(element) {
|
|
23
|
+
this.element = element;
|
|
24
|
+
/**
|
|
25
|
+
* Array of event handlers and their corresponding event types that are
|
|
26
|
+
* installed on this container.
|
|
27
|
+
*
|
|
28
|
+
*/
|
|
29
|
+
this.handlerInfos = [];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Installs the provided installer on the element owned by this container,
|
|
33
|
+
* and maintains a reference to resulting handler in order to remove it
|
|
34
|
+
* later if desired.
|
|
35
|
+
*/
|
|
36
|
+
addEventListener(eventType, getHandler) {
|
|
37
|
+
// In iOS, event bubbling doesn't happen automatically in any DOM element,
|
|
38
|
+
// unless it has an onclick attribute or DOM event handler attached to it.
|
|
39
|
+
// This breaks JsAction in some cases. See "Making Elements Clickable"
|
|
40
|
+
// section at http://goo.gl/2VoGnB.
|
|
41
|
+
//
|
|
42
|
+
// A workaround for this issue is to change the CSS cursor style to 'pointer'
|
|
43
|
+
// for the container element, which magically turns on event bubbling. This
|
|
44
|
+
// solution is described in the comments section at http://goo.gl/6pEO1z.
|
|
45
|
+
//
|
|
46
|
+
// We use a navigator.userAgent check here as this problem is present both
|
|
47
|
+
// on Mobile Safari and thin WebKit wrappers, such as Chrome for iOS.
|
|
48
|
+
if (isIos) {
|
|
49
|
+
this.element.style.cursor = 'pointer';
|
|
50
|
+
}
|
|
51
|
+
this.handlerInfos.push(eventLib.addEventListener(this.element, eventType, getHandler(this.element)));
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Removes all the handlers installed on this container.
|
|
55
|
+
*/
|
|
56
|
+
cleanUp() {
|
|
57
|
+
for (let i = 0; i < this.handlerInfos.length; i++) {
|
|
58
|
+
eventLib.removeEventListener(this.element, this.handlerInfos[i]);
|
|
59
|
+
}
|
|
60
|
+
this.handlerInfos = [];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRfY29udHJhY3RfY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9wcmltaXRpdmVzL2V2ZW50LWRpc3BhdGNoL3NyYy9ldmVudF9jb250cmFjdF9jb250YWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxLQUFLLFFBQVEsTUFBTSxTQUFTLENBQUM7QUFnQnBDOztHQUVHO0FBQ0gsTUFBTSxLQUFLLEdBQUcsT0FBTyxTQUFTLEtBQUssV0FBVyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFL0Y7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxzQkFBc0I7SUFRakM7O09BRUc7SUFDSCxZQUFxQixPQUFnQjtRQUFoQixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBVnJDOzs7O1dBSUc7UUFDSyxpQkFBWSxHQUF1QixFQUFFLENBQUM7SUFLTixDQUFDO0lBRXpDOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBQyxTQUFpQixFQUFFLFVBQXdEO1FBQzFGLDBFQUEwRTtRQUMxRSwwRUFBMEU7UUFDMUUsc0VBQXNFO1FBQ3RFLG1DQUFtQztRQUNuQyxFQUFFO1FBQ0YsNkVBQTZFO1FBQzdFLDJFQUEyRTtRQUMzRSx5RUFBeUU7UUFDekUsRUFBRTtRQUNGLDBFQUEwRTtRQUMxRSxxRUFBcUU7UUFDckUsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxPQUF1QixDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQ3pELENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDcEIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDN0UsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDTCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNsRCxRQUFRLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyBldmVudExpYiBmcm9tICcuL2V2ZW50JztcbmltcG9ydCB7RXZlbnRIYW5kbGVySW5mb30gZnJvbSAnLi9ldmVudF9oYW5kbGVyJztcblxuLyoqXG4gKiBBbiBgRXZlbnRDb250cmFjdENvbnRhaW5lck1hbmFnZXJgIHByb3ZpZGVzIHRoZSBjb21tb24gaW50ZXJmYWNlIGZvciBtYW5hZ2luZ1xuICogY29udGFpbmVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudENvbnRyYWN0Q29udGFpbmVyTWFuYWdlciB7XG4gIGFkZEV2ZW50TGlzdGVuZXIoXG4gICAgZXZlbnRUeXBlOiBzdHJpbmcsXG4gICAgZ2V0SGFuZGxlcjogKGVsZW1lbnQ6IEVsZW1lbnQpID0+IChldmVudDogRXZlbnQpID0+IHZvaWQsXG4gICk6IHZvaWQ7XG5cbiAgY2xlYW5VcCgpOiB2b2lkO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgdGhlIHVzZXIgYWdlbnQgaXMgcnVubmluZyBvbiBpT1MuXG4gKi9cbmNvbnN0IGlzSW9zID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgL2lQaG9uZXxpUGFkfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5cbi8qKlxuICogQSBjbGFzcyByZXByZXNlbnRpbmcgYSBjb250YWluZXIgbm9kZSBhbmQgYWxsIHRoZSBldmVudCBoYW5kbGVyc1xuICogaW5zdGFsbGVkIG9uIGl0LiBVc2VkIHNvIHRoYXQgaGFuZGxlcnMgY2FuIGJlIGNsZWFuZWQgdXAgaWYgdGhlXG4gKiBjb250YWluZXIgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjb250cmFjdC5cbiAqL1xuZXhwb3J0IGNsYXNzIEV2ZW50Q29udHJhY3RDb250YWluZXIgaW1wbGVtZW50cyBFdmVudENvbnRyYWN0Q29udGFpbmVyTWFuYWdlciB7XG4gIC8qKlxuICAgKiBBcnJheSBvZiBldmVudCBoYW5kbGVycyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBldmVudCB0eXBlcyB0aGF0IGFyZVxuICAgKiBpbnN0YWxsZWQgb24gdGhpcyBjb250YWluZXIuXG4gICAqXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZXJJbmZvczogRXZlbnRIYW5kbGVySW5mb1tdID0gW107XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBjb250YWluZXIgRWxlbWVudC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGVsZW1lbnQ6IEVsZW1lbnQpIHt9XG5cbiAgLyoqXG4gICAqIEluc3RhbGxzIHRoZSBwcm92aWRlZCBpbnN0YWxsZXIgb24gdGhlIGVsZW1lbnQgb3duZWQgYnkgdGhpcyBjb250YWluZXIsXG4gICAqIGFuZCBtYWludGFpbnMgYSByZWZlcmVuY2UgdG8gcmVzdWx0aW5nIGhhbmRsZXIgaW4gb3JkZXIgdG8gcmVtb3ZlIGl0XG4gICAqIGxhdGVyIGlmIGRlc2lyZWQuXG4gICAqL1xuICBhZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZTogc3RyaW5nLCBnZXRIYW5kbGVyOiAoZWxlbWVudDogRWxlbWVudCkgPT4gKGV2ZW50OiBFdmVudCkgPT4gdm9pZCkge1xuICAgIC8vIEluIGlPUywgZXZlbnQgYnViYmxpbmcgZG9lc24ndCBoYXBwZW4gYXV0b21hdGljYWxseSBpbiBhbnkgRE9NIGVsZW1lbnQsXG4gICAgLy8gdW5sZXNzIGl0IGhhcyBhbiBvbmNsaWNrIGF0dHJpYnV0ZSBvciBET00gZXZlbnQgaGFuZGxlciBhdHRhY2hlZCB0byBpdC5cbiAgICAvLyBUaGlzIGJyZWFrcyBKc0FjdGlvbiBpbiBzb21lIGNhc2VzLiBTZWUgXCJNYWtpbmcgRWxlbWVudHMgQ2xpY2thYmxlXCJcbiAgICAvLyBzZWN0aW9uIGF0IGh0dHA6Ly9nb28uZ2wvMlZvR25CLlxuICAgIC8vXG4gICAgLy8gQSB3b3JrYXJvdW5kIGZvciB0aGlzIGlzc3VlIGlzIHRvIGNoYW5nZSB0aGUgQ1NTIGN1cnNvciBzdHlsZSB0byAncG9pbnRlcidcbiAgICAvLyBmb3IgdGhlIGNvbnRhaW5lciBlbGVtZW50LCB3aGljaCBtYWdpY2FsbHkgdHVybnMgb24gZXZlbnQgYnViYmxpbmcuIFRoaXNcbiAgICAvLyBzb2x1dGlvbiBpcyBkZXNjcmliZWQgaW4gdGhlIGNvbW1lbnRzIHNlY3Rpb24gYXQgaHR0cDovL2dvby5nbC82cEVPMXouXG4gICAgLy9cbiAgICAvLyBXZSB1c2UgYSBuYXZpZ2F0b3IudXNlckFnZW50IGNoZWNrIGhlcmUgYXMgdGhpcyBwcm9ibGVtIGlzIHByZXNlbnQgYm90aFxuICAgIC8vIG9uIE1vYmlsZSBTYWZhcmkgYW5kIHRoaW4gV2ViS2l0IHdyYXBwZXJzLCBzdWNoIGFzIENocm9tZSBmb3IgaU9TLlxuICAgIGlmIChpc0lvcykge1xuICAgICAgKHRoaXMuZWxlbWVudCBhcyBIVE1MRWxlbWVudCkuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZXJJbmZvcy5wdXNoKFxuICAgICAgZXZlbnRMaWIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmVsZW1lbnQsIGV2ZW50VHlwZSwgZ2V0SGFuZGxlcih0aGlzLmVsZW1lbnQpKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYWxsIHRoZSBoYW5kbGVycyBpbnN0YWxsZWQgb24gdGhpcyBjb250YWluZXIuXG4gICAqL1xuICBjbGVhblVwKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5oYW5kbGVySW5mb3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGV2ZW50TGliLnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5lbGVtZW50LCB0aGlzLmhhbmRsZXJJbmZvc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy5oYW5kbGVySW5mb3MgPSBbXTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* @define Support for jsnamespace attribute. This flag can be overridden in a
|
|
10
|
+
* build rule to trim down the EventContract's binary size.
|
|
11
|
+
*/
|
|
12
|
+
export const JSNAMESPACE_SUPPORT = true;
|
|
13
|
+
/**
|
|
14
|
+
* @define Handles a11y click casting in the dispatcher rather than
|
|
15
|
+
* the event contract. When enabled, it will enable
|
|
16
|
+
* EventContract.A11Y_CLICK_SUPPORT as well as both are required for this
|
|
17
|
+
* functionality.
|
|
18
|
+
*/
|
|
19
|
+
export const A11Y_SUPPORT_IN_DISPATCHER = false;
|
|
20
|
+
/**
|
|
21
|
+
* @define Support for accessible click actions. This flag can be overridden in
|
|
22
|
+
* a build rule.
|
|
23
|
+
*/
|
|
24
|
+
const A11Y_CLICK_SUPPORT_FLAG_ENABLED = false;
|
|
25
|
+
/**
|
|
26
|
+
* Enables a11y click casting when either A11Y_CLICK_SUPPORT_FLAG_ENABLED or
|
|
27
|
+
* A11Y_SUPPORT_IN_DISPATCHER.
|
|
28
|
+
*/
|
|
29
|
+
export const A11Y_CLICK_SUPPORT = A11Y_CLICK_SUPPORT_FLAG_ENABLED || A11Y_SUPPORT_IN_DISPATCHER;
|
|
30
|
+
/**
|
|
31
|
+
* @define Support for the non-bubbling mouseenter and mouseleave events. This
|
|
32
|
+
* flag can be overridden in a build rule.
|
|
33
|
+
*/
|
|
34
|
+
export const MOUSE_SPECIAL_SUPPORT = false;
|
|
35
|
+
/**
|
|
36
|
+
* @define Call stopPropagation on handled events. When integrating with
|
|
37
|
+
* non-jsaction event handler based code, you will likely want to turn this flag
|
|
38
|
+
* off. While most event handlers will continue to work, jsaction binds focus
|
|
39
|
+
* and blur events in the capture phase and thus with stopPropagation, none of
|
|
40
|
+
* your non-jsaction-handlers will ever see it.
|
|
41
|
+
*/
|
|
42
|
+
export const STOP_PROPAGATION = true;
|
|
43
|
+
/**
|
|
44
|
+
* @define Support for custom events, which are type EventType.CUSTOM. These are
|
|
45
|
+
* native DOM events with an additional type field and an optional payload.
|
|
46
|
+
*/
|
|
47
|
+
export const CUSTOM_EVENT_SUPPORT = false;
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRfY29udHJhY3RfZGVmaW5lcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvcHJpbWl0aXZlcy9ldmVudC1kaXNwYXRjaC9zcmMvZXZlbnRfY29udHJhY3RfZGVmaW5lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUM7QUFFeEM7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxLQUFLLENBQUM7QUFFaEQ7OztHQUdHO0FBQ0gsTUFBTSwrQkFBK0IsR0FBRyxLQUFLLENBQUM7QUFFOUM7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsK0JBQStCLElBQUksMEJBQTBCLENBQUM7QUFFaEc7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsS0FBSyxDQUFDO0FBRTNDOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQztBQUVyQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBAZGVmaW5lIFN1cHBvcnQgZm9yIGpzbmFtZXNwYWNlIGF0dHJpYnV0ZS4gIFRoaXMgZmxhZyBjYW4gYmUgb3ZlcnJpZGRlbiBpbiBhXG4gKiBidWlsZCBydWxlIHRvIHRyaW0gZG93biB0aGUgRXZlbnRDb250cmFjdCdzIGJpbmFyeSBzaXplLlxuICovXG5leHBvcnQgY29uc3QgSlNOQU1FU1BBQ0VfU1VQUE9SVCA9IHRydWU7XG5cbi8qKlxuICogQGRlZmluZSBIYW5kbGVzIGExMXkgY2xpY2sgY2FzdGluZyBpbiB0aGUgZGlzcGF0Y2hlciByYXRoZXIgdGhhblxuICogdGhlIGV2ZW50IGNvbnRyYWN0LiBXaGVuIGVuYWJsZWQsIGl0IHdpbGwgZW5hYmxlXG4gKiBFdmVudENvbnRyYWN0LkExMVlfQ0xJQ0tfU1VQUE9SVCBhcyB3ZWxsIGFzIGJvdGggYXJlIHJlcXVpcmVkIGZvciB0aGlzXG4gKiBmdW5jdGlvbmFsaXR5LlxuICovXG5leHBvcnQgY29uc3QgQTExWV9TVVBQT1JUX0lOX0RJU1BBVENIRVIgPSBmYWxzZTtcblxuLyoqXG4gKiBAZGVmaW5lIFN1cHBvcnQgZm9yIGFjY2Vzc2libGUgY2xpY2sgYWN0aW9ucy4gIFRoaXMgZmxhZyBjYW4gYmUgb3ZlcnJpZGRlbiBpblxuICogYSBidWlsZCBydWxlLlxuICovXG5jb25zdCBBMTFZX0NMSUNLX1NVUFBPUlRfRkxBR19FTkFCTEVEID0gZmFsc2U7XG5cbi8qKlxuICogRW5hYmxlcyBhMTF5IGNsaWNrIGNhc3Rpbmcgd2hlbiBlaXRoZXIgQTExWV9DTElDS19TVVBQT1JUX0ZMQUdfRU5BQkxFRCBvclxuICogQTExWV9TVVBQT1JUX0lOX0RJU1BBVENIRVIuXG4gKi9cbmV4cG9ydCBjb25zdCBBMTFZX0NMSUNLX1NVUFBPUlQgPSBBMTFZX0NMSUNLX1NVUFBPUlRfRkxBR19FTkFCTEVEIHx8IEExMVlfU1VQUE9SVF9JTl9ESVNQQVRDSEVSO1xuXG4vKipcbiAqIEBkZWZpbmUgU3VwcG9ydCBmb3IgdGhlIG5vbi1idWJibGluZyBtb3VzZWVudGVyIGFuZCBtb3VzZWxlYXZlIGV2ZW50cy4gIFRoaXNcbiAqIGZsYWcgY2FuIGJlIG92ZXJyaWRkZW4gaW4gYSBidWlsZCBydWxlLlxuICovXG5leHBvcnQgY29uc3QgTU9VU0VfU1BFQ0lBTF9TVVBQT1JUID0gZmFsc2U7XG5cbi8qKlxuICogQGRlZmluZSBDYWxsIHN0b3BQcm9wYWdhdGlvbiBvbiBoYW5kbGVkIGV2ZW50cy4gV2hlbiBpbnRlZ3JhdGluZyB3aXRoXG4gKiBub24tanNhY3Rpb24gZXZlbnQgaGFuZGxlciBiYXNlZCBjb2RlLCB5b3Ugd2lsbCBsaWtlbHkgd2FudCB0byB0dXJuIHRoaXMgZmxhZ1xuICogb2ZmLiBXaGlsZSBtb3N0IGV2ZW50IGhhbmRsZXJzIHdpbGwgY29udGludWUgdG8gd29yaywganNhY3Rpb24gYmluZHMgZm9jdXNcbiAqIGFuZCBibHVyIGV2ZW50cyBpbiB0aGUgY2FwdHVyZSBwaGFzZSBhbmQgdGh1cyB3aXRoIHN0b3BQcm9wYWdhdGlvbiwgbm9uZSBvZlxuICogeW91ciBub24tanNhY3Rpb24taGFuZGxlcnMgd2lsbCBldmVyIHNlZSBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNUT1BfUFJPUEFHQVRJT04gPSB0cnVlO1xuXG4vKipcbiAqIEBkZWZpbmUgU3VwcG9ydCBmb3IgY3VzdG9tIGV2ZW50cywgd2hpY2ggYXJlIHR5cGUgRXZlbnRUeXBlLkNVU1RPTS4gVGhlc2UgYXJlXG4gKiBuYXRpdmUgRE9NIGV2ZW50cyB3aXRoIGFuIGFkZGl0aW9uYWwgdHlwZSBmaWVsZCBhbmQgYW4gb3B0aW9uYWwgcGF5bG9hZC5cbiAqL1xuZXhwb3J0IGNvbnN0IENVU1RPTV9FVkVOVF9TVVBQT1JUID0gZmFsc2U7XG4iXX0=
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
import { EventContractContainer } from './event_contract_container';
|
|
9
|
+
/**
|
|
10
|
+
* An `EventContractContainerManager` that supports multiple containers.
|
|
11
|
+
*/
|
|
12
|
+
export class EventContractMultiContainer {
|
|
13
|
+
/**
|
|
14
|
+
* @param stopPropagation Controls whether events can bubble between
|
|
15
|
+
* containers or not.
|
|
16
|
+
*/
|
|
17
|
+
constructor(stopPropagation = false) {
|
|
18
|
+
this.stopPropagation = stopPropagation;
|
|
19
|
+
/** The list of containers. */
|
|
20
|
+
this.containers = [];
|
|
21
|
+
/** The list of nested containers. */
|
|
22
|
+
this.nestedContainers = [];
|
|
23
|
+
/** The list of event handler installers. */
|
|
24
|
+
this.eventHandlerInstallers = [];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Installs the provided installer on the element owned by this container,
|
|
28
|
+
* and maintains a reference to resulting handler in order to remove it
|
|
29
|
+
* later if desired.
|
|
30
|
+
*/
|
|
31
|
+
addEventListener(eventType, getHandler) {
|
|
32
|
+
const eventHandlerInstaller = (container) => {
|
|
33
|
+
container.addEventListener(eventType, getHandler);
|
|
34
|
+
};
|
|
35
|
+
for (let i = 0; i < this.containers.length; i++) {
|
|
36
|
+
eventHandlerInstaller(this.containers[i]);
|
|
37
|
+
}
|
|
38
|
+
this.eventHandlerInstallers.push(eventHandlerInstaller);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Removes all the handlers installed on all containers.
|
|
42
|
+
*/
|
|
43
|
+
cleanUp() {
|
|
44
|
+
const allContainers = [...this.containers, ...this.nestedContainers];
|
|
45
|
+
for (let i = 0; i < allContainers.length; i++) {
|
|
46
|
+
allContainers[i].cleanUp();
|
|
47
|
+
}
|
|
48
|
+
this.containers = [];
|
|
49
|
+
this.nestedContainers = [];
|
|
50
|
+
this.eventHandlerInstallers = [];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Adds a container to the `MultiEventContractContainer`.
|
|
54
|
+
* Signs the event contract for a new container. All registered events
|
|
55
|
+
* are enabled for this container too. Containers have to be kept disjoint,
|
|
56
|
+
* so if the newly added container is a parent/child of existing containers,
|
|
57
|
+
* they will be merged. If the container is already tracked by this
|
|
58
|
+
* `EventContract`, then the previously registered `EventContractContainer`
|
|
59
|
+
* will be returned.
|
|
60
|
+
*/
|
|
61
|
+
addContainer(element) {
|
|
62
|
+
// If the container is already registered, return.
|
|
63
|
+
for (let i = 0; i < this.containers.length; i++) {
|
|
64
|
+
if (element === this.containers[i].element) {
|
|
65
|
+
return this.containers[i];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const container = new EventContractContainer(element);
|
|
69
|
+
if (this.stopPropagation) {
|
|
70
|
+
// Events are not propagated, so containers can be considered independent.
|
|
71
|
+
this.setUpContainer(container);
|
|
72
|
+
this.containers.push(container);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
if (this.isNestedContainer(container)) {
|
|
76
|
+
// This container has an ancestor that is already a contract container.
|
|
77
|
+
// Don't install event listeners on it in order to prevent an event from
|
|
78
|
+
// being handled multiple times.
|
|
79
|
+
this.nestedContainers.push(container);
|
|
80
|
+
return container;
|
|
81
|
+
}
|
|
82
|
+
this.setUpContainer(container);
|
|
83
|
+
this.containers.push(container);
|
|
84
|
+
this.updateNestedContainers();
|
|
85
|
+
}
|
|
86
|
+
return container;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Removes an already-added container from the contract.
|
|
90
|
+
*/
|
|
91
|
+
removeContainer(container) {
|
|
92
|
+
container.cleanUp();
|
|
93
|
+
let removed = false;
|
|
94
|
+
for (let i = 0; i < this.containers.length; ++i) {
|
|
95
|
+
if (this.containers[i] === container) {
|
|
96
|
+
this.containers.splice(i, 1);
|
|
97
|
+
removed = true;
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (!removed) {
|
|
102
|
+
for (let i = 0; i < this.nestedContainers.length; ++i) {
|
|
103
|
+
if (this.nestedContainers[i] === container) {
|
|
104
|
+
this.nestedContainers.splice(i, 1);
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (this.stopPropagation) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
this.updateNestedContainers();
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Tested whether any current container is a parent of the new container.
|
|
116
|
+
*/
|
|
117
|
+
isNestedContainer(container) {
|
|
118
|
+
for (let i = 0; i < this.containers.length; i++) {
|
|
119
|
+
if (containsNode(this.containers[i].element, container.element)) {
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
/** Installs all existing event handlers on a new container. */
|
|
126
|
+
setUpContainer(container) {
|
|
127
|
+
for (let i = 0; i < this.eventHandlerInstallers.length; i++) {
|
|
128
|
+
this.eventHandlerInstallers[i](container);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Updates the list of nested containers after an add/remove operation. Only
|
|
133
|
+
* containers that are not children of other containers are placed in the
|
|
134
|
+
* containers list (and have event listeners on them). This is done in order
|
|
135
|
+
* to prevent events from being handled multiple times when `stopPropagation`
|
|
136
|
+
* is false.
|
|
137
|
+
*/
|
|
138
|
+
updateNestedContainers() {
|
|
139
|
+
const allContainers = [...this.nestedContainers, ...this.containers];
|
|
140
|
+
const newNestedContainers = [];
|
|
141
|
+
const newContainers = [];
|
|
142
|
+
for (let i = 0; i < this.containers.length; ++i) {
|
|
143
|
+
const container = this.containers[i];
|
|
144
|
+
if (isNested(container, allContainers)) {
|
|
145
|
+
newNestedContainers.push(container);
|
|
146
|
+
// Remove the event listeners from the nested container.
|
|
147
|
+
container.cleanUp();
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
newContainers.push(container);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
for (let i = 0; i < this.nestedContainers.length; ++i) {
|
|
154
|
+
const container = this.nestedContainers[i];
|
|
155
|
+
if (isNested(container, allContainers)) {
|
|
156
|
+
newNestedContainers.push(container);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
newContainers.push(container);
|
|
160
|
+
// The container is no longer nested, add event listeners on it.
|
|
161
|
+
this.setUpContainer(container);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
this.containers = newContainers;
|
|
165
|
+
this.nestedContainers = newNestedContainers;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Checks whether the container is a child of any of the containers.
|
|
170
|
+
*/
|
|
171
|
+
function isNested(container, containers) {
|
|
172
|
+
for (let i = 0; i < containers.length; ++i) {
|
|
173
|
+
if (containsNode(containers[i].element, container.element)) {
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Checks whether parent contains child.
|
|
181
|
+
* IE11 only supports the native `Node.contains` for HTMLElement.
|
|
182
|
+
*/
|
|
183
|
+
function containsNode(parent, child) {
|
|
184
|
+
if (parent === child) {
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
while (parent !== child && child.parentNode) {
|
|
188
|
+
child = child.parentNode;
|
|
189
|
+
}
|
|
190
|
+
return parent === child;
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRfY29udHJhY3RfbXVsdGlfY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9wcmltaXRpdmVzL2V2ZW50LWRpc3BhdGNoL3NyYy9ldmVudF9jb250cmFjdF9tdWx0aV9jb250YWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLHNCQUFzQixFQUFnQyxNQUFNLDRCQUE0QixDQUFDO0FBRWpHOztHQUVHO0FBQ0gsTUFBTSxPQUFPLDJCQUEyQjtJQVF0Qzs7O09BR0c7SUFDSCxZQUE2QixrQkFBa0IsS0FBSztRQUF2QixvQkFBZSxHQUFmLGVBQWUsQ0FBUTtRQVhwRCw4QkFBOEI7UUFDdEIsZUFBVSxHQUE2QixFQUFFLENBQUM7UUFDbEQscUNBQXFDO1FBQzdCLHFCQUFnQixHQUE2QixFQUFFLENBQUM7UUFDeEQsNENBQTRDO1FBQ3BDLDJCQUFzQixHQUF1RCxFQUFFLENBQUM7SUFNakMsQ0FBQztJQUV4RDs7OztPQUlHO0lBQ0gsZ0JBQWdCLENBQUMsU0FBaUIsRUFBRSxVQUF3RDtRQUMxRixNQUFNLHFCQUFxQixHQUFHLENBQUMsU0FBaUMsRUFBRSxFQUFFO1lBQ2xFLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDO1FBQ0YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEQscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOztP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RSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzNDLElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDM0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsWUFBWSxDQUFDLE1BQVksRUFBRSxLQUFXO0lBQzdDLElBQUksTUFBTSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ3JCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sTUFBTSxLQUFLLEtBQUssSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDNUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUNELE9BQU8sTUFBTSxLQUFLLEtBQUssQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7RXZlbnRDb250cmFjdENvbnRhaW5lciwgRXZlbnRDb250cmFjdENvbnRhaW5lck1hbmFnZXJ9IGZyb20gJy4vZXZlbnRfY29udHJhY3RfY29udGFpbmVyJztcblxuLyoqXG4gKiBBbiBgRXZlbnRDb250cmFjdENvbnRhaW5lck1hbmFnZXJgIHRoYXQgc3VwcG9ydHMgbXVsdGlwbGUgY29udGFpbmVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIEV2ZW50Q29udHJhY3RNdWx0aUNvbnRhaW5lciBpbXBsZW1lbnRzIEV2ZW50Q29udHJhY3RDb250YWluZXJNYW5hZ2VyIHtcbiAgLyoqIFRoZSBsaXN0IG9mIGNvbnRhaW5lcnMuICovXG4gIHByaXZhdGUgY29udGFpbmVyczogRXZlbnRDb250cmFjdENvbnRhaW5lcltdID0gW107XG4gIC8qKiBUaGUgbGlzdCBvZiBuZXN0ZWQgY29udGFpbmVycy4gKi9cbiAgcHJpdmF0ZSBuZXN0ZWRDb250YWluZXJzOiBFdmVudENvbnRyYWN0Q29udGFpbmVyW10gPSBbXTtcbiAgLyoqIFRoZSBsaXN0IG9mIGV2ZW50IGhhbmRsZXIgaW5zdGFsbGVycy4gKi9cbiAgcHJpdmF0ZSBldmVudEhhbmRsZXJJbnN0YWxsZXJzOiBBcnJheTwoY29udGFpbmVyOiBFdmVudENvbnRyYWN0Q29udGFpbmVyKSA9PiB2b2lkPiA9IFtdO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gc3RvcFByb3BhZ2F0aW9uIENvbnRyb2xzIHdoZXRoZXIgZXZlbnRzIGNhbiBidWJibGUgYmV0d2VlblxuICAgKiAgICBjb250YWluZXJzIG9yIG5vdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc3RvcFByb3BhZ2F0aW9uID0gZmFsc2UpIHt9XG5cbiAgLyoqXG4gICAqIEluc3RhbGxzIHRoZSBwcm92aWRlZCBpbnN0YWxsZXIgb24gdGhlIGVsZW1lbnQgb3duZWQgYnkgdGhpcyBjb250YWluZXIsXG4gICAqIGFuZCBtYWludGFpbnMgYSByZWZlcmVuY2UgdG8gcmVzdWx0aW5nIGhhbmRsZXIgaW4gb3JkZXIgdG8gcmVtb3ZlIGl0XG4gICAqIGxhdGVyIGlmIGRlc2lyZWQuXG4gICAqL1xuICBhZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZTogc3RyaW5nLCBnZXRIYW5kbGVyOiAoZWxlbWVudDogRWxlbWVudCkgPT4gKGV2ZW50OiBFdmVudCkgPT4gdm9pZCkge1xuICAgIGNvbnN0IGV2ZW50SGFuZGxlckluc3RhbGxlciA9IChjb250YWluZXI6IEV2ZW50Q29udHJhY3RDb250YWluZXIpID0+IHtcbiAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZ2V0SGFuZGxlcik7XG4gICAgfTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29udGFpbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgZXZlbnRIYW5kbGVySW5zdGFsbGVyKHRoaXMuY29udGFpbmVyc1tpXSk7XG4gICAgfVxuICAgIHRoaXMuZXZlbnRIYW5kbGVySW5zdGFsbGVycy5wdXNoKGV2ZW50SGFuZGxlckluc3RhbGxlcik7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgdGhlIGhhbmRsZXJzIGluc3RhbGxlZCBvbiBhbGwgY29udGFpbmVycy5cbiAgICovXG4gIGNsZWFuVXAoKSB7XG4gICAgY29uc3QgYWxsQ29udGFpbmVycyA9IFsuLi50aGlzLmNvbnRhaW5lcnMsIC4uLnRoaXMubmVzdGVkQ29udGFpbmVyc107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxDb250YWluZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhbGxDb250YWluZXJzW2ldLmNsZWFuVXAoKTtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXJzID0gW107XG4gICAgdGhpcy5uZXN0ZWRDb250YWluZXJzID0gW107XG4gICAgdGhpcy5ldmVudEhhbmRsZXJJbnN0YWxsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGNvbnRhaW5lciB0byB0aGUgYE11bHRpRXZlbnRDb250cmFjdENvbnRhaW5lcmAuXG4gICAqIFNpZ25zIHRoZSBldmVudCBjb250cmFjdCBmb3IgYSBuZXcgY29udGFpbmVyLiBBbGwgcmVnaXN0ZXJlZCBldmVudHNcbiAgICogYXJlIGVuYWJsZWQgZm9yIHRoaXMgY29udGFpbmVyIHRvby4gQ29udGFpbmVycyBoYXZlIHRvIGJlIGtlcHQgZGlzam9pbnQsXG4gICAqIHNvIGlmIHRoZSBuZXdseSBhZGRlZCBjb250YWluZXIgaXMgYSBwYXJlbnQvY2hpbGQgb2YgZXhpc3RpbmcgY29udGFpbmVycyxcbiAgICogdGhleSB3aWxsIGJlIG1lcmdlZC4gSWYgdGhlIGNvbnRhaW5lciBpcyBhbHJlYWR5IHRyYWNrZWQgYnkgdGhpc1xuICAgKiBgRXZlbnRDb250cmFjdGAsIHRoZW4gdGhlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBgRXZlbnRDb250cmFjdENvbnRhaW5lcmBcbiAgICogd2lsbCBiZSByZXR1cm5lZC5cbiAgICovXG4gIGFkZENvbnRhaW5lcihlbGVtZW50OiBFbGVtZW50KTogRXZlbnRDb250cmFjdENvbnRhaW5lciB7XG4gICAgLy8gSWYgdGhlIGNvbnRhaW5lciBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQsIHJldHVybi5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29udGFpbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGVsZW1lbnQgPT09IHRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcnNbaV07XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lciA9IG5ldyBFdmVudENvbnRyYWN0Q29udGFpbmVyKGVsZW1lbnQpO1xuICAgIGlmICh0aGlzLnN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgLy8gRXZlbnRzIGFyZSBub3QgcHJvcGFnYXRlZCwgc28gY29udGFpbmVycyBjYW4gYmUgY29uc2lkZXJlZCBpbmRlcGVuZGVudC5cbiAgICAgIHRoaXMuc2V0VXBDb250YWluZXIoY29udGFpbmVyKTtcbiAgICAgIHRoaXMuY29udGFpbmVycy5wdXNoKGNvbnRhaW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmlzTmVzdGVkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICAgICAgLy8gVGhpcyBjb250YWluZXIgaGFzIGFuIGFuY2VzdG9yIHRoYXQgaXMgYWxyZWFkeSBhIGNvbnRyYWN0IGNvbnRhaW5lci5cbiAgICAgICAgLy8gRG9uJ3QgaW5zdGFsbCBldmVudCBsaXN0ZW5lcnMgb24gaXQgaW4gb3JkZXIgdG8gcHJldmVudCBhbiBldmVudCBmcm9tXG4gICAgICAgIC8vIGJlaW5nIGhhbmRsZWQgbXVsdGlwbGUgdGltZXMuXG4gICAgICAgIHRoaXMubmVzdGVkQ29udGFpbmVycy5wdXNoKGNvbnRhaW5lcik7XG4gICAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFVwQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgICB0aGlzLmNvbnRhaW5lcnMucHVzaChjb250YWluZXIpO1xuICAgICAgdGhpcy51cGRhdGVOZXN0ZWRDb250YWluZXJzKCk7XG4gICAgfVxuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbiBhbHJlYWR5LWFkZGVkIGNvbnRhaW5lciBmcm9tIHRoZSBjb250cmFjdC5cbiAgICovXG4gIHJlbW92ZUNvbnRhaW5lcihjb250YWluZXI6IEV2ZW50Q29udHJhY3RDb250YWluZXIpIHtcbiAgICBjb250YWluZXIuY2xlYW5VcCgpO1xuICAgIGxldCByZW1vdmVkID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbnRhaW5lcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmICh0aGlzLmNvbnRhaW5lcnNbaV0gPT09IGNvbnRhaW5lcikge1xuICAgICAgICB0aGlzLmNvbnRhaW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFyZW1vdmVkKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubmVzdGVkQ29udGFpbmVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAodGhpcy5uZXN0ZWRDb250YWluZXJzW2ldID09PSBjb250YWluZXIpIHtcbiAgICAgICAgICB0aGlzLm5lc3RlZENvbnRhaW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudXBkYXRlTmVzdGVkQ29udGFpbmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlc3RlZCB3aGV0aGVyIGFueSBjdXJyZW50IGNvbnRhaW5lciBpcyBhIHBhcmVudCBvZiB0aGUgbmV3IGNvbnRhaW5lci5cbiAgICovXG4gIHByaXZhdGUgaXNOZXN0ZWRDb250YWluZXIoY29udGFpbmVyOiBFdmVudENvbnRyYWN0Q29udGFpbmVyKTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbnRhaW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChjb250YWluc05vZGUodGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnQsIGNvbnRhaW5lci5lbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEluc3RhbGxzIGFsbCBleGlzdGluZyBldmVudCBoYW5kbGVycyBvbiBhIG5ldyBjb250YWluZXIuICovXG4gIHByaXZhdGUgc2V0VXBDb250YWluZXIoY29udGFpbmVyOiBFdmVudENvbnRyYWN0Q29udGFpbmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmV2ZW50SGFuZGxlckluc3RhbGxlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZXZlbnRIYW5kbGVySW5zdGFsbGVyc1tpXShjb250YWluZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIG5lc3RlZCBjb250YWluZXJzIGFmdGVyIGFuIGFkZC9yZW1vdmUgb3BlcmF0aW9uLiBPbmx5XG4gICAqIGNvbnRhaW5lcnMgdGhhdCBhcmUgbm90IGNoaWxkcmVuIG9mIG90aGVyIGNvbnRhaW5lcnMgYXJlIHBsYWNlZCBpbiB0aGVcbiAgICogY29udGFpbmVycyBsaXN0IChhbmQgaGF2ZSBldmVudCBsaXN0ZW5lcnMgb24gdGhlbSkuIFRoaXMgaXMgZG9uZSBpbiBvcmRlclxuICAgKiB0byBwcmV2ZW50IGV2ZW50cyBmcm9tIGJlaW5nIGhhbmRsZWQgbXVsdGlwbGUgdGltZXMgd2hlbiBgc3RvcFByb3BhZ2F0aW9uYFxuICAgKiBpcyBmYWxzZS5cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlTmVzdGVkQ29udGFpbmVycygpIHtcbiAgICBjb25zdCBhbGxDb250YWluZXJzID0gWy4uLnRoaXMubmVzdGVkQ29udGFpbmVycywgLi4udGhpcy5jb250YWluZXJzXTtcbiAgICBjb25zdCBuZXdOZXN0ZWRDb250YWluZXJzID0gW107XG4gICAgY29uc3QgbmV3Q29udGFpbmVycyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbnRhaW5lcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyc1tpXTtcbiAgICAgIGlmIChpc05lc3RlZChjb250YWluZXIsIGFsbENvbnRhaW5lcnMpKSB7XG4gICAgICAgIG5ld05lc3RlZENvbnRhaW5lcnMucHVzaChjb250YWluZXIpO1xuICAgICAgICAvLyBSZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVycyBmcm9tIHRoZSBuZXN0ZWQgY29udGFpbmVyLlxuICAgICAgICBjb250YWluZXIuY2xlYW5VcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3Q29udGFpbmVycy5wdXNoKGNvbnRhaW5lcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm5lc3RlZENvbnRhaW5lcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMubmVzdGVkQ29udGFpbmVyc1tpXTtcbiAgICAgIGlmIChpc05lc3RlZChjb250YWluZXIsIGFsbENvbnRhaW5lcnMpKSB7XG4gICAgICAgIG5ld05lc3RlZENvbnRhaW5lcnMucHVzaChjb250YWluZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3Q29udGFpbmVycy5wdXNoKGNvbnRhaW5lcik7XG4gICAgICAgIC8vIFRoZSBjb250YWluZXIgaXMgbm8gbG9uZ2VyIG5lc3RlZCwgYWRkIGV2ZW50IGxpc3RlbmVycyBvbiBpdC5cbiAgICAgICAgdGhpcy5zZXRVcENvbnRhaW5lcihjb250YWluZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVycyA9IG5ld0NvbnRhaW5lcnM7XG4gICAgdGhpcy5uZXN0ZWRDb250YWluZXJzID0gbmV3TmVzdGVkQ29udGFpbmVycztcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb250YWluZXIgaXMgYSBjaGlsZCBvZiBhbnkgb2YgdGhlIGNvbnRhaW5lcnMuXG4gKi9cbmZ1bmN0aW9uIGlzTmVzdGVkKFxuICBjb250YWluZXI6IEV2ZW50Q29udHJhY3RDb250YWluZXIsXG4gIGNvbnRhaW5lcnM6IEV2ZW50Q29udHJhY3RDb250YWluZXJbXSxcbik6IGJvb2xlYW4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRhaW5lcnMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoY29udGFpbnNOb2RlKGNvbnRhaW5lcnNbaV0uZWxlbWVudCwgY29udGFpbmVyLmVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgcGFyZW50IGNvbnRhaW5zIGNoaWxkLlxuICogSUUxMSBvbmx5IHN1cHBvcnRzIHRoZSBuYXRpdmUgYE5vZGUuY29udGFpbnNgIGZvciBIVE1MRWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNOb2RlKHBhcmVudDogTm9kZSwgY2hpbGQ6IE5vZGUpOiBib29sZWFuIHtcbiAgaWYgKHBhcmVudCA9PT0gY2hpbGQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgd2hpbGUgKHBhcmVudCAhPT0gY2hpbGQgJiYgY2hpbGQucGFyZW50Tm9kZSkge1xuICAgIGNoaWxkID0gY2hpbGQucGFyZW50Tm9kZTtcbiAgfVxuICByZXR1cm4gcGFyZW50ID09PSBjaGlsZDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRfaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvcHJpbWl0aXZlcy9ldmVudC1kaXNwYXRjaC9zcmMvZXZlbnRfaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKlxuICogSW5mb3JtYXRpb24gYWJvdXQgYSByZWdpc3RlcmVkIGV2ZW50IGhhbmRsZXIsIHdoaWNoIGNhbiBiZSB1c2VkIHRvXG4gKiBkZXJlZ2lzdGVyIHRoZSBldmVudCBoYW5kbGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50SGFuZGxlckluZm8ge1xuICBldmVudFR5cGU6IHN0cmluZztcblxuICBoYW5kbGVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuXG4gIGNhcHR1cmU6IGJvb2xlYW47XG59XG4iXX0=
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
/** Added for readability when accessing stable property names. */
|
|
9
|
+
export function getEventType(eventInfo) {
|
|
10
|
+
return eventInfo.eventType;
|
|
11
|
+
}
|
|
12
|
+
/** Added for readability when accessing stable property names. */
|
|
13
|
+
export function setEventType(eventInfo, eventType) {
|
|
14
|
+
eventInfo.eventType = eventType;
|
|
15
|
+
}
|
|
16
|
+
/** Added for readability when accessing stable property names. */
|
|
17
|
+
export function getEvent(eventInfo) {
|
|
18
|
+
return eventInfo.event;
|
|
19
|
+
}
|
|
20
|
+
/** Added for readability when accessing stable property names. */
|
|
21
|
+
export function setEvent(eventInfo, event) {
|
|
22
|
+
eventInfo.event = event;
|
|
23
|
+
}
|
|
24
|
+
/** Added for readability when accessing stable property names. */
|
|
25
|
+
export function getTargetElement(eventInfo) {
|
|
26
|
+
return eventInfo.targetElement;
|
|
27
|
+
}
|
|
28
|
+
/** Added for readability when accessing stable property names. */
|
|
29
|
+
export function setTargetElement(eventInfo, targetElement) {
|
|
30
|
+
eventInfo.targetElement = targetElement;
|
|
31
|
+
}
|
|
32
|
+
/** Added for readability when accessing stable property names. */
|
|
33
|
+
export function getContainer(eventInfo) {
|
|
34
|
+
return eventInfo.eic;
|
|
35
|
+
}
|
|
36
|
+
/** Added for readability when accessing stable property names. */
|
|
37
|
+
export function setContainer(eventInfo, container) {
|
|
38
|
+
eventInfo.eic = container;
|
|
39
|
+
}
|
|
40
|
+
/** Added for readability when accessing stable property names. */
|
|
41
|
+
export function getTimestamp(eventInfo) {
|
|
42
|
+
return eventInfo.timeStamp;
|
|
43
|
+
}
|
|
44
|
+
/** Added for readability when accessing stable property names. */
|
|
45
|
+
export function setTimestamp(eventInfo, timestamp) {
|
|
46
|
+
eventInfo.timeStamp = timestamp;
|
|
47
|
+
}
|
|
48
|
+
/** Added for readability when accessing stable property names. */
|
|
49
|
+
export function getAction(eventInfo) {
|
|
50
|
+
return eventInfo.eia;
|
|
51
|
+
}
|
|
52
|
+
/** Added for readability when accessing stable property names. */
|
|
53
|
+
export function setAction(eventInfo, actionName, actionElement) {
|
|
54
|
+
eventInfo.eia = [actionName, actionElement];
|
|
55
|
+
}
|
|
56
|
+
/** Added for readability when accessing stable property names. */
|
|
57
|
+
export function unsetAction(eventInfo) {
|
|
58
|
+
eventInfo.eia = undefined;
|
|
59
|
+
}
|
|
60
|
+
/** Added for readability when accessing stable property names. */
|
|
61
|
+
export function getActionName(actionInfo) {
|
|
62
|
+
return actionInfo[0];
|
|
63
|
+
}
|
|
64
|
+
/** Added for readability when accessing stable property names. */
|
|
65
|
+
export function getActionElement(actionInfo) {
|
|
66
|
+
return actionInfo[1];
|
|
67
|
+
}
|
|
68
|
+
/** Added for readability when accessing stable property names. */
|
|
69
|
+
export function getIsReplay(eventInfo) {
|
|
70
|
+
return eventInfo.eirp;
|
|
71
|
+
}
|
|
72
|
+
/** Added for readability when accessing stable property names. */
|
|
73
|
+
export function setIsReplay(eventInfo, replay) {
|
|
74
|
+
eventInfo.eirp = replay;
|
|
75
|
+
}
|
|
76
|
+
/** Added for readability when accessing stable property names. */
|
|
77
|
+
export function getA11yClickKey(eventInfo) {
|
|
78
|
+
return eventInfo.eiack;
|
|
79
|
+
}
|
|
80
|
+
/** Added for readability when accessing stable property names. */
|
|
81
|
+
export function setA11yClickKey(eventInfo, a11yClickKey) {
|
|
82
|
+
eventInfo.eiack = a11yClickKey;
|
|
83
|
+
}
|
|
84
|
+
/** Clones an `EventInfo` */
|
|
85
|
+
export function cloneEventInfo(eventInfo) {
|
|
86
|
+
return {
|
|
87
|
+
eventType: eventInfo.eventType,
|
|
88
|
+
event: eventInfo.event,
|
|
89
|
+
targetElement: eventInfo.targetElement,
|
|
90
|
+
eic: eventInfo.eic,
|
|
91
|
+
eia: eventInfo.eia,
|
|
92
|
+
timeStamp: eventInfo.timeStamp,
|
|
93
|
+
eirp: eventInfo.eirp,
|
|
94
|
+
eiack: eventInfo.eiack,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Utility function for creating an `EventInfo`.
|
|
99
|
+
*
|
|
100
|
+
* This can be used from code-size sensitive compilation units, as taking
|
|
101
|
+
* parameters vs. an `Object` literal reduces code size.
|
|
102
|
+
*/
|
|
103
|
+
export function createEventInfoFromParameters(eventType, event, targetElement, container, timestamp, action, isReplay, a11yClickKey) {
|
|
104
|
+
return {
|
|
105
|
+
eventType,
|
|
106
|
+
event,
|
|
107
|
+
targetElement,
|
|
108
|
+
eic: container,
|
|
109
|
+
timeStamp: timestamp,
|
|
110
|
+
eia: action,
|
|
111
|
+
eirp: isReplay,
|
|
112
|
+
eiack: a11yClickKey,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Utility function for creating an `EventInfo`.
|
|
117
|
+
*
|
|
118
|
+
* This should be used in compilation units that are less sensitive to code
|
|
119
|
+
* size.
|
|
120
|
+
*/
|
|
121
|
+
export function createEventInfo({ eventType, event, targetElement, container, timestamp, action, isReplay, a11yClickKey, }) {
|
|
122
|
+
return {
|
|
123
|
+
eventType,
|
|
124
|
+
event,
|
|
125
|
+
targetElement,
|
|
126
|
+
eic: container,
|
|
127
|
+
timeStamp: timestamp,
|
|
128
|
+
eia: action ? [action.name, action.element] : undefined,
|
|
129
|
+
eirp: isReplay,
|
|
130
|
+
eiack: a11yClickKey,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Utility class around an `EventInfo`.
|
|
135
|
+
*
|
|
136
|
+
* This should be used in compilation units that are less sensitive to code
|
|
137
|
+
* size.
|
|
138
|
+
*/
|
|
139
|
+
export class EventInfoWrapper {
|
|
140
|
+
constructor(eventInfo) {
|
|
141
|
+
this.eventInfo = eventInfo;
|
|
142
|
+
}
|
|
143
|
+
getEventType() {
|
|
144
|
+
return getEventType(this.eventInfo);
|
|
145
|
+
}
|
|
146
|
+
setEventType(eventType) {
|
|
147
|
+
setEventType(this.eventInfo, eventType);
|
|
148
|
+
}
|
|
149
|
+
getEvent() {
|
|
150
|
+
return getEvent(this.eventInfo);
|
|
151
|
+
}
|
|
152
|
+
setEvent(event) {
|
|
153
|
+
setEvent(this.eventInfo, event);
|
|
154
|
+
}
|
|
155
|
+
getTargetElement() {
|
|
156
|
+
return getTargetElement(this.eventInfo);
|
|
157
|
+
}
|
|
158
|
+
setTargetElement(targetElement) {
|
|
159
|
+
setTargetElement(this.eventInfo, targetElement);
|
|
160
|
+
}
|
|
161
|
+
getContainer() {
|
|
162
|
+
return getContainer(this.eventInfo);
|
|
163
|
+
}
|
|
164
|
+
setContainer(container) {
|
|
165
|
+
setContainer(this.eventInfo, container);
|
|
166
|
+
}
|
|
167
|
+
getTimestamp() {
|
|
168
|
+
return getTimestamp(this.eventInfo);
|
|
169
|
+
}
|
|
170
|
+
setTimestamp(timestamp) {
|
|
171
|
+
setTimestamp(this.eventInfo, timestamp);
|
|
172
|
+
}
|
|
173
|
+
getAction() {
|
|
174
|
+
const action = getAction(this.eventInfo);
|
|
175
|
+
if (!action)
|
|
176
|
+
return undefined;
|
|
177
|
+
return {
|
|
178
|
+
name: action[0],
|
|
179
|
+
element: action[1],
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
setAction(action) {
|
|
183
|
+
if (!action) {
|
|
184
|
+
unsetAction(this.eventInfo);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
setAction(this.eventInfo, action.name, action.element);
|
|
188
|
+
}
|
|
189
|
+
getIsReplay() {
|
|
190
|
+
return getIsReplay(this.eventInfo);
|
|
191
|
+
}
|
|
192
|
+
setIsReplay(replay) {
|
|
193
|
+
setIsReplay(this.eventInfo, replay);
|
|
194
|
+
}
|
|
195
|
+
clone() {
|
|
196
|
+
return new EventInfoWrapper(cloneEventInfo(this.eventInfo));
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRfaW5mby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvcHJpbWl0aXZlcy9ldmVudC1kaXNwYXRjaC9zcmMvZXZlbnRfaW5mby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFvREgsa0VBQWtFO0FBQ2xFLE1BQU0sVUFBVSxZQUFZLENBQUMsU0FBb0I7SUFDL0MsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDO0FBQzdCLENBQUM7QUFFRCxrRUFBa0U7QUFDbEUsTUFBTSxVQUFVLFlBQVksQ0FBQyxTQUFvQixFQUFFLFNBQWlCO0lBQ2xFLFNBQVMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQ2xDLENBQUM7QUFFRCxrRUFBa0U7QUFDbEUsTUFBTSxVQUFVLFFBQVEsQ0FBQyxTQUFvQjtJQUMzQyxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUM7QUFDekIsQ0FBQztBQUVELGtFQUFrRTtBQUNsRSxNQUFNLFVBQVUsUUFBUSxDQUFDLFNBQW9CLEVBQUUsS0FBWTtJQUN6RCxTQUFTLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMxQixDQUFDO0FBRUQsa0VBQWtFO0FBQ2xFLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxTQUFvQjtJQUNuRCxPQUFPLFNBQVMsQ0FBQyxhQUFhLENBQUM7QUFDakMsQ0FBQztBQUVELGtFQUFrRTtBQUNsRSxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsU0FBb0IsRUFBRSxhQUFzQjtJQUMzRSxTQUFTLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUMxQyxDQUFDO0FBRUQsa0VBQWtFO0FBQ2xFLE1BQU0sVUFBVSxZQUFZLENBQUMsU0FBb0I7SUFDL0MsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxrRUFBa0U7QUFDbEUsTUFBTSxVQUFVLFlBQVksQ0FBQyxTQUFvQixFQUFFLFNBQWtCO0lBQ25F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KipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBSZWNvcmRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhY3Rpb24gdGhhdCBzaG91bGQgaGFuZGxlIGEgZ2l2ZW4gYEV2ZW50YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25JbmZvIHtcbiAgbmFtZTogc3RyaW5nO1xuICBlbGVtZW50OiBFbGVtZW50O1xufVxuXG50eXBlIEFjdGlvbkluZm9JbnRlcm5hbCA9IFtuYW1lOiBzdHJpbmcsIGVsZW1lbnQ6IEVsZW1lbnRdO1xuXG4vKipcbiAqIFJlY29yZHMgaW5mb3JtYXRpb24gZm9yIGxhdGVyIGhhbmRsaW5nIG9mIGV2ZW50cy4gVGhpcyB0eXBlIGlzXG4gKiBzaGFyZWQsIGFuZCBpbnN0YW5jZXMgb2YgaXQgYXJlIHBhc3NlZCwgYmV0d2VlbiB0aGUgZXZlbnRjb250cmFjdFxuICogYW5kIHRoZSBkaXNwYXRjaGVyIGpzYmluYXJ5LiBUaGVyZWZvcmUsIHRoZSBmaWVsZHMgb2YgdGhpcyB0eXBlIGFyZVxuICogcmVmZXJlbmNlZCBieSBzdHJpbmcgbGl0ZXJhbHMgcmF0aGVyIHRoYW4gcHJvcGVydHkgbGl0ZXJhbHNcbiAqIHRocm91Z2hvdXQgdGhlIGNvZGUuXG4gKlxuICogJ3RhcmdldEVsZW1lbnQnIGlzIHRoZSBlbGVtZW50IHRoZSBhY3Rpb24gb2NjdXJyZWQgb24sICdhY3Rpb25FbGVtZW50J1xuICogaXMgdGhlIGVsZW1lbnQgdGhhdCBoYXMgdGhlIGpzYWN0aW9uIGhhbmRsZXIuXG4gKlxuICogQSBudWxsICdhY3Rpb25FbGVtZW50JyBpZGVudGlmaWVzIGFuIEV2ZW50SW5mbyBpbnN0YW5jZSB0aGF0IGRpZG4ndCBtYXRjaCBhXG4gKiBqc2FjdGlvbiBhdHRyaWJ1dGUuICBUaGlzIGFsbG93cyB1cyB0byBleGVjdXRlIGdsb2JhbCBldmVudCBoYW5kbGVycyB3aXRoIHRoZVxuICogYXBwcm9wcmlhdGUgZXZlbnQgdHlwZSAoaW5jbHVkaW5nIGExMXkgY2xpY2tzIGFuZCBjdXN0b20gZXZlbnRzKS5cbiAqIFRoZSBkZWNsYXJlIHBvcnRpb24gb2YgdGhpcyBpbnRlcmZhY2UgY3JlYXRlcyBhIHNldCBvZiBleHRlcm5zIHRoYXQgbWFrZSBzdXJlXG4gKiByZW5hbWluZyBkb2Vzbid0IGhhcHBlbiBmb3IgRXZlbnRJbmZvLiBUaGlzIGlzIGltcG9ydGFudCBzaW5jZSBFdmVudEluZm9cbiAqIGlzIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgYmluYXJpZXMuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBFdmVudEluZm8ge1xuICBldmVudFR5cGU6IHN0cmluZztcbiAgZXZlbnQ6IEV2ZW50O1xuICB0YXJnZXRFbGVtZW50OiBFbGVtZW50O1xuICAvKiogVGhlIGVsZW1lbnQgdGhhdCBpcyB0aGUgY29udGFpbmVyIGZvciB0aGlzIEV2ZW50LiAqL1xuICBlaWM6IEVsZW1lbnQ7XG4gIHRpbWVTdGFtcDogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGFjdGlvbiBwYXJzZWQgZnJvbSB0aGUgSlNBY3Rpb24gZWxlbWVudC5cbiAgICovXG4gIGVpYT86IEFjdGlvbkluZm9JbnRlcm5hbDtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBgRXZlbnRgIGlzIGEgcmVwbGF5IGV2ZW50LCBtZWFuaW5nIG5vIGRpc3BhdGNoZXIgd2FzXG4gICAqIGluc3RhbGxlZCB3aGVuIHRoaXMgYEV2ZW50YCB3YXMgb3JpZ2luYWxseSBkaXNwYXRjaGVkLlxuICAgKi9cbiAgZWlycD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgYEV2ZW50YCByZXByZXNlbnRzIGEgYGtleWRvd25gIGV2ZW50IHRoYXQgc2hvdWxkIGJlIHByb2Nlc3NlZFxuICAgKiBhcyBhIGBjbGlja2AuIE9ubHkgdXNlZCB3aGVuIGExMXkgY2xpY2sgZXZlbnRzIGlzIG9uLlxuICAgKi9cbiAgZWlhY2s/OiBib29sZWFuO1xufVxuXG4vKiogQWRkZWQgZm9yIHJlYWRhYmlsaXR5IHdoZW4gYWNjZXNzaW5nIHN0YWJsZSBwcm9wZXJ0eSBuYW1lcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFdmVudFR5cGUoZXZlbnRJbmZvOiBFdmVudEluZm8pIHtcbiAgcmV0dXJuIGV2ZW50SW5mby5ldmVudFR5cGU7XG59XG5cbi8qKiBBZGRlZCBmb3IgcmVhZGFiaWxpdHkgd2hlbiBhY2Nlc3Npbmcgc3RhYmxlIHByb3BlcnR5IG5hbWVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEV2ZW50VHlwZShldmVudEluZm86IEV2ZW50SW5mbywgZXZlbnRUeXBlOiBzdHJpbmcpIHtcbiAgZXZlbnRJbmZvLmV2ZW50VHlwZSA9IGV2ZW50VHlwZTtcbn1cblxuLyoqIEFkZGVkIGZvciByZWFkYWJpbGl0eSB3aGVuIGFjY2Vzc2luZyBzdGFibGUgcHJvcGVydHkgbmFtZXMuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXZlbnQoZXZlbnRJbmZvOiBFdmVudEluZm8pIHtcbiAgcmV0dXJuIGV2ZW50SW5mby5ldmVudDtcbn1cblxuLyoqIEFkZGVkIGZvciByZWFkYWJpbGl0eSB3aGVuIGFjY2Vzc2luZyBzdGFibGUgcHJvcGVydHkgbmFtZXMuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RXZlbnQoZXZlbnRJbmZvOiBFdmVudEluZm8sIGV2ZW50OiBFdmVudCkge1xuICBldmVudEluZm8uZXZlbnQgPSBldmVudDtcbn1cblxuLyoqIEFkZGVkIGZvciByZWFkYWJpbGl0eSB3aGVuIGFjY2Vzc2luZyBzdGFibGUgcHJvcGVydHkgbmFtZXMuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0RWxlbWVudChldmVudEluZm86IEV2ZW50SW5mbykge1xuICByZXR1cm4gZXZlbnRJbmZvLnRhcmdldEVsZW1lbnQ7XG59XG5cbi8qKiBBZGRlZCBmb3IgcmVhZGFiaWxpdHkgd2hlbiBhY2Nlc3Npbmcgc3RhYmxlIHByb3BlcnR5IG5hbWVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFRhcmdldEVsZW1lbnQoZXZlbnRJbmZvOiBFdmVudEluZm8sIHRhcmdldEVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgZXZlbnRJbmZvLnRhcmdldEVsZW1lbnQgPSB0YXJnZXRFbGVtZW50O1xufVxuXG4vKiogQWRkZWQgZm9yIHJlYWRhYmlsaXR5IHdoZW4gYWNjZXNzaW5nIHN0YWJsZSBwcm9wZXJ0eSBuYW1lcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250YWluZXIoZXZlbnRJbmZvOiBFdmVudEluZm8pIHtcbiAgcmV0dXJuIGV2ZW50SW5mby5laWM7XG59XG5cbi8qKiBBZGRlZCBmb3IgcmVhZGFiaWxpdHkgd2hlbiBhY2Nlc3Npbmcgc3RhYmxlIHByb3BlcnR5IG5hbWVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldENvbnRhaW5lcihldmVudEluZm86IEV2ZW50SW5mbywgY29udGFpbmVyOiBFbGVtZW50KSB7XG4gIGV2ZW50SW5mby5laWMgPSBjb250YWluZXI7XG59XG5cbi8qKiBBZGRlZCBmb3IgcmVhZGFiaWxpdHkgd2hlbiBhY2Nlc3Npbmcgc3RhYmxlIHByb3BlcnR5IG5hbWVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVzdGFtcChldmVudEluZm86IEV2ZW50SW5mbykge1xuICByZXR1cm4gZXZlbnRJbmZvLnRpbWVTdGFtcDtcbn1cblxuLyoqIEFkZGVkIGZvciByZWFkYWJpbGl0eSB3aGVuIGFjY2Vzc2luZyBzdGFibGUgcHJvcGVydHkgbmFtZXMuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0VGltZXN0YW1wKGV2ZW50SW5mbzogRXZlbnRJbmZvLCB0aW1lc3RhbXA6IG51bWJlcikge1xuICBldmVudEluZm8udGltZVN0YW1wID0gdGltZXN0YW1wO1xufVxuXG4vKiogQWRkZWQgZm9yIHJlYWRhYmlsaXR5IHdoZW4gYWNjZXNzaW5nIHN0YWJsZSBwcm9wZXJ0eSBuYW1lcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb24oZXZlbnRJbmZvOiBFdmVudEluZm8pIHtcbiAgcmV0dXJuIGV2ZW50SW5mby5laWE7XG59XG5cbi8qKiBBZGRlZCBmb3IgcmVhZGFiaWxpdHkgd2hlbiBhY2Nlc3Npbmcgc3RhYmxlIHByb3BlcnR5IG5hbWVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEFjdGlvbihldmVudEluZm86IEV2ZW50SW5mbywgYWN0aW9uTmFtZTogc3RyaW5nLCBhY3Rpb25FbGVtZW50OiBFbGVtZW50KSB7XG4gIGV2ZW50SW5mby5laWEgPSBbYWN0aW9uTmFtZSwgYWN0aW9uRWxlbWVudF07XG59XG5cbi8qKiBBZGRlZCBmb3IgcmVhZGFiaWxpdHkgd2hlbiBhY2Nlc3Npbmcgc3RhYmxlIHByb3BlcnR5IG5hbWVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuc2V0QWN0aW9uKGV2ZW50SW5mbzogRXZlbnRJbmZvKSB7XG4gIGV2ZW50SW5mby5laWEgPSB1bmRlZmluZWQ7XG59XG5cbi8qKiBBZGRlZCBmb3IgcmVhZGFiaWxpdHkgd2hlbiBhY2Nlc3Npbmcgc3RhYmxlIHByb3BlcnR5IG5hbWVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFjdGlvbk5hbWUoYWN0aW9uSW5mbzogQWN0aW9uSW5mb0ludGVybmFsKSB7XG4gIHJldHVybiBhY3Rpb25JbmZvWzBdO1xufVxuXG4vKiogQWRkZWQgZm9yIHJlYWRhYmlsaXR5IHdoZW4gYWNjZXNzaW5nIHN0YWJsZSBwcm9wZXJ0eSBuYW1lcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25FbGVtZW50KGFjdGlvbkluZm86IEFjdGlvbkluZm9JbnRlcm5hbCkge1xuICByZXR1cm4gYWN0aW9uSW5mb1sxXTtcbn1cblxuLyoqIEFkZGVkIGZvciByZWFkYWJpbGl0eSB3aGVuIGFjY2Vzc2luZyBzdGFibGUgcHJvcGVydHkgbmFtZXMuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXNSZXBsYXkoZXZlbnRJbmZvOiBFdmVudEluZm8pIHtcbiAgcmV0dXJuIGV2ZW50SW5mby5laXJwO1xufVxuXG4vKiogQWRkZWQgZm9yIHJlYWRhYmlsaXR5IHdoZW4gYWNjZXNzaW5nIHN0YWJsZSBwcm9wZXJ0eSBuYW1lcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRJc1JlcGxheShldmVudEluZm86IEV2ZW50SW5mbywgcmVwbGF5OiBib29sZWFuKSB7XG4gIGV2ZW50SW5mby5laXJwID0gcmVwbGF5O1xufVxuXG4vKiogQWRkZWQgZm9yIHJlYWRhYmlsaXR5IHdoZW4gYWNjZXNzaW5nIHN0YWJsZSBwcm9wZXJ0eSBuYW1lcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBMTF5Q2xpY2tLZXkoZXZlbnRJbmZvOiBFdmVudEluZm8pIHtcbiAgcmV0dXJuIGV2ZW50SW5mby5laWFjaztcbn1cblxuLyoqIEFkZGVkIGZvciByZWFkYWJpbGl0eSB3aGVuIGFjY2Vzc2luZyBzdGFibGUgcHJvcGVydHkgbmFtZXMuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0QTExeUNsaWNrS2V5KGV2ZW50SW5mbzogRXZlbnRJbmZvLCBhMTF5Q2xpY2tLZXk6IGJvb2xlYW4pIHtcbiAgZXZlbnRJbmZvLmVpYWNrID0gYTExeUNsaWNrS2V5O1xufVxuXG4vKiogQ2xvbmVzIGFuIGBFdmVudEluZm9gICovXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVFdmVudEluZm8oZXZlbnRJbmZvOiBFdmVudEluZm8pOiBFdmVudEluZm8ge1xuICByZXR1cm4ge1xuICAgIGV2ZW50VHlwZTogZXZlbnRJbmZvLmV2ZW50VHlwZSxcbiAgICBldmVudDogZXZlbnRJbmZvLmV2ZW50LFxuICAgIHRhcmdldEVsZW1lbnQ6IGV2ZW50SW5mby50YXJnZXRFbGVtZW50LFxuICAgIGVpYzogZXZlbnRJbmZvLmVpYyxcbiAgICBlaWE6IGV2ZW50SW5mby5laWEsXG4gICAgdGltZVN0YW1wOiBldmVudEluZm8udGltZVN0YW1wLFxuICAgIGVpcnA6IGV2ZW50SW5mby5laXJwLFxuICAgIGVpYWNrOiBldmVudEluZm8uZWlhY2ssXG4gIH07XG59XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYW4gYEV2ZW50SW5mb2AuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCBmcm9tIGNvZGUtc2l6ZSBzZW5zaXRpdmUgY29tcGlsYXRpb24gdW5pdHMsIGFzIHRha2luZ1xuICogcGFyYW1ldGVycyB2cy4gYW4gYE9iamVjdGAgbGl0ZXJhbCByZWR1Y2VzIGNvZGUgc2l6ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV2ZW50SW5mb0Zyb21QYXJhbWV0ZXJzKFxuICBldmVudFR5cGU6IHN0cmluZyxcbiAgZXZlbnQ6IEV2ZW50LFxuICB0YXJnZXRFbGVtZW50OiBFbGVtZW50LFxuICBjb250YWluZXI6IEVsZW1lbnQsXG4gIHRpbWVzdGFtcDogbnVtYmVyLFxuICBhY3Rpb24/OiBBY3Rpb25JbmZvSW50ZXJuYWwsXG4gIGlzUmVwbGF5PzogYm9vbGVhbixcbiAgYTExeUNsaWNrS2V5PzogYm9vbGVhbixcbik6IEV2ZW50SW5mbyB7XG4gIHJldHVybiB7XG4gICAgZXZlbnRUeXBlLFxuICAgIGV2ZW50LFxuICAgIHRhcmdldEVsZW1lbnQsXG4gICAgZWljOiBjb250YWluZXIsXG4gICAgdGltZVN0YW1wOiB0aW1lc3RhbXAsXG4gICAgZWlhOiBhY3Rpb24sXG4gICAgZWlycDogaXNSZXBsYXksXG4gICAgZWlhY2s6IGExMXlDbGlja0tleSxcbiAgfTtcbn1cblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhbiBgRXZlbnRJbmZvYC5cbiAqXG4gKiBUaGlzIHNob3VsZCBiZSB1c2VkIGluIGNvbXBpbGF0aW9uIHVuaXRzIHRoYXQgYXJlIGxlc3Mgc2Vuc2l0aXZlIHRvIGNvZGVcbiAqIHNpemUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFdmVudEluZm8oe1xuICBldmVudFR5cGUsXG4gIGV2ZW50LFxuICB0YXJnZXRFbGVtZW50LFxuICBjb250YWluZXIsXG4gIHRpbWVzdGFtcCxcbiAgYWN0aW9uLFxuICBpc1JlcGxheSxcbiAgYTExeUNsaWNrS2V5LFxufToge1xuICBldmVudFR5cGU6IHN0cmluZztcbiAgZXZlbnQ6IEV2ZW50O1xuICB0YXJnZXRFbGVtZW50OiBFbGVtZW50O1xuICBjb250YWluZXI6IEVsZW1lbnQ7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBhY3Rpb24/OiBBY3Rpb25JbmZvO1xuICBpc1JlcGxheT86IGJvb2xlYW47XG4gIGExMXlDbGlja0tleT86IGJvb2xlYW47XG59KTogRXZlbnRJbmZvIHtcbiAgcmV0dXJuIHtcbiAgICBldmVudFR5cGUsXG4gICAgZXZlbnQsXG4gICAgdGFyZ2V0RWxlbWVudCxcbiAgICBlaWM6IGNvbnRhaW5lcixcbiAgICB0aW1lU3RhbXA6IHRpbWVzdGFtcCxcbiAgICBlaWE6IGFjdGlvbiA/IFthY3Rpb24ubmFtZSwgYWN0aW9uLmVsZW1lbnRdIDogdW5kZWZpbmVkLFxuICAgIGVpcnA6IGlzUmVwbGF5LFxuICAgIGVpYWNrOiBhMTF5Q2xpY2tLZXksXG4gIH07XG59XG5cbi8qKlxuICogVXRpbGl0eSBjbGFzcyBhcm91bmQgYW4gYEV2ZW50SW5mb2AuXG4gKlxuICogVGhpcyBzaG91bGQgYmUgdXNlZCBpbiBjb21waWxhdGlvbiB1bml0cyB0aGF0IGFyZSBsZXNzIHNlbnNpdGl2ZSB0byBjb2RlXG4gKiBzaXplLlxuICovXG5leHBvcnQgY2xhc3MgRXZlbnRJbmZvV3JhcHBlciB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGV2ZW50SW5mbzogRXZlbnRJbmZvKSB7fVxuXG4gIGdldEV2ZW50VHlwZSgpIHtcbiAgICByZXR1cm4gZ2V0RXZlbnRUeXBlKHRoaXMuZXZlbnRJbmZvKTtcbiAgfVxuXG4gIHNldEV2ZW50VHlwZShldmVudFR5cGU6IHN0cmluZykge1xuICAgIHNldEV2ZW50VHlwZSh0aGlzLmV2ZW50SW5mbywgZXZlbnRUeXBlKTtcbiAgfVxuXG4gIGdldEV2ZW50KCkge1xuICAgIHJldHVybiBnZXRFdmVudCh0aGlzLmV2ZW50SW5mbyk7XG4gIH1cblxuICBzZXRFdmVudChldmVudDogRXZlbnQpIHtcbiAgICBzZXRFdmVudCh0aGlzLmV2ZW50SW5mbywgZXZlbnQpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0RWxlbWVudCgpIHtcbiAgICByZXR1cm4gZ2V0VGFyZ2V0RWxlbWVudCh0aGlzLmV2ZW50SW5mbyk7XG4gIH1cblxuICBzZXRUYXJnZXRFbGVtZW50KHRhcmdldEVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgICBzZXRUYXJnZXRFbGVtZW50KHRoaXMuZXZlbnRJbmZvLCB0YXJnZXRFbGVtZW50KTtcbiAgfVxuXG4gIGdldENvbnRhaW5lcigpIHtcbiAgICByZXR1cm4gZ2V0Q29udGFpbmVyKHRoaXMuZXZlbnRJbmZvKTtcbiAgfVxuXG4gIHNldENvbnRhaW5lcihjb250YWluZXI6IEVsZW1lbnQpIHtcbiAgICBzZXRDb250YWluZXIodGhpcy5ldmVudEluZm8sIGNvbnRhaW5lcik7XG4gIH1cbiAgZ2V0VGltZXN0YW1wKCkge1xuICAgIHJldHVybiBnZXRUaW1lc3RhbXAodGhpcy5ldmVudEluZm8pO1xuICB9XG5cbiAgc2V0VGltZXN0YW1wKHRpbWVzdGFtcDogbnVtYmVyKSB7XG4gICAgc2V0VGltZXN0YW1wKHRoaXMuZXZlbnRJbmZvLCB0aW1lc3RhbXApO1xuICB9XG5cbiAgZ2V0QWN0aW9uKCkge1xuICAgIGNvbnN0IGFjdGlvbiA9IGdldEFjdGlvbih0aGlzLmV2ZW50SW5mbyk7XG4gICAgaWYgKCFhY3Rpb24pIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGFjdGlvblswXSxcbiAgICAgIGVsZW1lbnQ6IGFjdGlvblsxXSxcbiAgICB9O1xuICB9XG5cbiAgc2V0QWN0aW9uKGFjdGlvbjogQWN0aW9uSW5mbyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghYWN0aW9uKSB7XG4gICAgICB1bnNldEFjdGlvbih0aGlzLmV2ZW50SW5mbyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldEFjdGlvbih0aGlzLmV2ZW50SW5mbywgYWN0aW9uLm5hbWUsIGFjdGlvbi5lbGVtZW50KTtcbiAgfVxuXG4gIGdldElzUmVwbGF5KCkge1xuICAgIHJldHVybiBnZXRJc1JlcGxheSh0aGlzLmV2ZW50SW5mbyk7XG4gIH1cblxuICBzZXRJc1JlcGxheShyZXBsYXk6IGJvb2xlYW4pIHtcbiAgICBzZXRJc1JlcGxheSh0aGlzLmV2ZW50SW5mbywgcmVwbGF5KTtcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgRXZlbnRJbmZvV3JhcHBlcihjbG9uZUV2ZW50SW5mbyh0aGlzLmV2ZW50SW5mbykpO1xuICB9XG59XG4iXX0=
|