@angular/core 18.0.0-rc.1 → 18.0.0-rc.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.
Files changed (59) hide show
  1. package/esm2022/primitives/event-dispatch/contract_binary.mjs +3 -3
  2. package/esm2022/primitives/event-dispatch/index.mjs +2 -2
  3. package/esm2022/primitives/event-dispatch/src/action_resolver.mjs +5 -18
  4. package/esm2022/primitives/event-dispatch/src/attribute.mjs +63 -65
  5. package/esm2022/primitives/event-dispatch/src/cache.mjs +10 -10
  6. package/esm2022/primitives/event-dispatch/src/dispatcher.mjs +50 -181
  7. package/esm2022/primitives/event-dispatch/src/earlyeventcontract.mjs +4 -4
  8. package/esm2022/primitives/event-dispatch/src/event_contract_defines.mjs +1 -6
  9. package/esm2022/primitives/event-dispatch/src/eventcontract.mjs +13 -30
  10. package/esm2022/primitives/event-dispatch/src/key_code.mjs +11 -13
  11. package/esm2022/primitives/event-dispatch/src/legacy_dispatcher.mjs +252 -2
  12. package/esm2022/primitives/event-dispatch/src/property.mjs +30 -27
  13. package/esm2022/primitives/event-dispatch/src/register_events.mjs +5 -25
  14. package/esm2022/primitives/event-dispatch/src/restriction.mjs +2 -2
  15. package/esm2022/src/application/create_application.mjs +11 -4
  16. package/esm2022/src/change_detection/scheduling/ng_zone_scheduling.mjs +4 -16
  17. package/esm2022/src/change_detection/scheduling/zoneless_scheduling.mjs +3 -1
  18. package/esm2022/src/change_detection/scheduling/zoneless_scheduling_impl.mjs +5 -2
  19. package/esm2022/src/core_reactivity_export_internal.mjs +1 -3
  20. package/esm2022/src/core_render3_private_export.mjs +1 -3
  21. package/esm2022/src/hydration/event_replay.mjs +51 -83
  22. package/esm2022/src/hydration/utils.mjs +1 -2
  23. package/esm2022/src/metadata/directives.mjs +1 -1
  24. package/esm2022/src/platform/platform_ref.mjs +9 -10
  25. package/esm2022/src/render3/component_ref.mjs +1 -1
  26. package/esm2022/src/render3/index.mjs +1 -3
  27. package/esm2022/src/render3/instructions/listener.mjs +3 -3
  28. package/esm2022/src/render3/interfaces/public_definitions.mjs +1 -1
  29. package/esm2022/src/version.mjs +1 -1
  30. package/esm2022/testing/src/component_fixture.mjs +2 -2
  31. package/esm2022/testing/src/logger.mjs +3 -3
  32. package/esm2022/testing/src/test_bed.mjs +1 -3
  33. package/esm2022/testing/src/test_bed_compiler.mjs +1 -3
  34. package/event-dispatch-contract.min.js +1 -1
  35. package/fesm2022/core.mjs +79 -117
  36. package/fesm2022/core.mjs.map +1 -1
  37. package/fesm2022/primitives/event-dispatch.mjs +246 -515
  38. package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
  39. package/fesm2022/primitives/signals.mjs +1 -1
  40. package/fesm2022/rxjs-interop.mjs +1 -1
  41. package/fesm2022/testing.mjs +2 -4
  42. package/fesm2022/testing.mjs.map +1 -1
  43. package/index.d.ts +3 -1
  44. package/package.json +1 -1
  45. package/primitives/event-dispatch/index.d.ts +83 -131
  46. package/primitives/signals/index.d.ts +1 -1
  47. package/rxjs-interop/index.d.ts +1 -1
  48. package/schematics/migrations/http-providers/bundle.js +46 -29
  49. package/schematics/migrations/http-providers/bundle.js.map +3 -3
  50. package/schematics/migrations/invalid-two-way-bindings/bundle.js +159 -159
  51. package/schematics/migrations/invalid-two-way-bindings/bundle.js.map +2 -2
  52. package/schematics/ng-generate/control-flow-migration/bundle.js +167 -167
  53. package/schematics/ng-generate/control-flow-migration/bundle.js.map +2 -2
  54. package/schematics/ng-generate/standalone-migration/bundle.js +443 -443
  55. package/schematics/ng-generate/standalone-migration/bundle.js.map +2 -2
  56. package/testing/index.d.ts +1 -1
  57. package/esm2022/primitives/event-dispatch/src/base_dispatcher.mjs +0 -94
  58. package/esm2022/primitives/event-dispatch/src/custom_events.mjs +0 -102
  59. package/esm2022/primitives/event-dispatch/src/replay.mjs +0 -389
@@ -5,17 +5,15 @@
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
+ /**
9
+ * If on a Macintosh with an extended keyboard, the Enter key located in the
10
+ * numeric pad has a different ASCII code.
11
+ */
12
+ export const MAC_ENTER = 3;
13
+ /** The Enter key. */
14
+ export const ENTER = 13;
15
+ /** The Space key. */
16
+ export const SPACE = 32;
8
17
  /** Special keycodes used by jsaction for the generic click action. */
9
- export var KeyCode;
10
- (function (KeyCode) {
11
- /**
12
- * If on a Macintosh with an extended keyboard, the Enter key located in the
13
- * numeric pad has a different ASCII code.
14
- */
15
- KeyCode[KeyCode["MAC_ENTER"] = 3] = "MAC_ENTER";
16
- /** The Enter key. */
17
- KeyCode[KeyCode["ENTER"] = 13] = "ENTER";
18
- /** The Space key. */
19
- KeyCode[KeyCode["SPACE"] = 32] = "SPACE";
20
- })(KeyCode || (KeyCode = {}));
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5X2NvZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvc3JjL2tleV9jb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILHNFQUFzRTtBQUN0RSxNQUFNLENBQU4sSUFBWSxPQVlYO0FBWkQsV0FBWSxPQUFPO0lBQ2pCOzs7T0FHRztJQUNILCtDQUFhLENBQUE7SUFFYixxQkFBcUI7SUFDckIsd0NBQVUsQ0FBQTtJQUVWLHFCQUFxQjtJQUNyQix3Q0FBVSxDQUFBO0FBQ1osQ0FBQyxFQVpXLE9BQU8sS0FBUCxPQUFPLFFBWWxCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKiBTcGVjaWFsIGtleWNvZGVzIHVzZWQgYnkganNhY3Rpb24gZm9yIHRoZSBnZW5lcmljIGNsaWNrIGFjdGlvbi4gKi9cbmV4cG9ydCBlbnVtIEtleUNvZGUge1xuICAvKipcbiAgICogSWYgb24gYSBNYWNpbnRvc2ggd2l0aCBhbiBleHRlbmRlZCBrZXlib2FyZCwgdGhlIEVudGVyIGtleSBsb2NhdGVkIGluIHRoZVxuICAgKiBudW1lcmljIHBhZCBoYXMgYSBkaWZmZXJlbnQgQVNDSUkgY29kZS5cbiAgICovXG4gIE1BQ19FTlRFUiA9IDMsXG5cbiAgLyoqIFRoZSBFbnRlciBrZXkuICovXG4gIEVOVEVSID0gMTMsXG5cbiAgLyoqIFRoZSBTcGFjZSBrZXkuICovXG4gIFNQQUNFID0gMzIsXG59XG4iXX0=
18
+ export const KeyCode = { MAC_ENTER, ENTER, SPACE };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5X2NvZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvc3JjL2tleV9jb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVIOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFFM0IscUJBQXFCO0FBQ3JCLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7QUFFeEIscUJBQXFCO0FBQ3JCLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7QUFFeEIsc0VBQXNFO0FBQ3RFLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBJZiBvbiBhIE1hY2ludG9zaCB3aXRoIGFuIGV4dGVuZGVkIGtleWJvYXJkLCB0aGUgRW50ZXIga2V5IGxvY2F0ZWQgaW4gdGhlXG4gKiBudW1lcmljIHBhZCBoYXMgYSBkaWZmZXJlbnQgQVNDSUkgY29kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BQ19FTlRFUiA9IDM7XG5cbi8qKiBUaGUgRW50ZXIga2V5LiAqL1xuZXhwb3J0IGNvbnN0IEVOVEVSID0gMTM7XG5cbi8qKiBUaGUgU3BhY2Uga2V5LiAqL1xuZXhwb3J0IGNvbnN0IFNQQUNFID0gMzI7XG5cbi8qKiBTcGVjaWFsIGtleWNvZGVzIHVzZWQgYnkganNhY3Rpb24gZm9yIHRoZSBnZW5lcmljIGNsaWNrIGFjdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBLZXlDb2RlID0ge01BQ19FTlRFUiwgRU5URVIsIFNQQUNFfTtcbiJdfQ==
@@ -5,5 +5,255 @@
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
- export { Dispatcher as LegacyDispatcher, registerDispatcher } from './dispatcher';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVnYWN5X2Rpc3BhdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvc3JjL2xlZ2FjeV9kaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxVQUFVLElBQUksZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0IHtEaXNwYXRjaGVyIGFzIExlZ2FjeURpc3BhdGNoZXIsIHJlZ2lzdGVyRGlzcGF0Y2hlcn0gZnJvbSAnLi9kaXNwYXRjaGVyJztcbiJdfQ==
8
+ import { Dispatcher, stopPropagation, } from './dispatcher';
9
+ import { Char } from './char';
10
+ import * as eventLib from './event';
11
+ import { EventType } from './event_type';
12
+ import { Restriction } from './restriction';
13
+ export { stopPropagation } from './dispatcher';
14
+ /**
15
+ * Receives a DOM event, determines the jsaction associated with the source
16
+ * element of the DOM event, and invokes the handler associated with the
17
+ * jsaction.
18
+ */
19
+ export class LegacyDispatcher {
20
+ /**
21
+ * Receives a DOM event, determines the jsaction associated with the source
22
+ * element of the DOM event, and invokes the handler associated with the
23
+ * jsaction.
24
+ *
25
+ * @param getHandler A function that knows how to get the handler for a
26
+ * given event info.
27
+ */
28
+ constructor(getHandler, { actionResolver, eventReplayer, stopPropagation = false, } = {}) {
29
+ this.getHandler = getHandler;
30
+ /**
31
+ * The actions that are registered for this Dispatcher instance.
32
+ * This should be the primary one used once migration off of registerHandlers
33
+ * is done.
34
+ */
35
+ this.actions = {};
36
+ /** A map of global event handlers, where each key is an event type. */
37
+ this.globalHandlers = new Map();
38
+ /** Whether event replay is scheduled. */
39
+ this.eventReplayScheduled = false;
40
+ this.eventReplayer = eventReplayer;
41
+ this.dispatcher = new Dispatcher((eventInfoWrapper) => {
42
+ this.dispatchToHandler(eventInfoWrapper);
43
+ }, {
44
+ actionResolver,
45
+ eventReplayer: (eventInfoWrappers) => {
46
+ this.eventInfoWrapperQueue = eventInfoWrappers;
47
+ this.eventReplayer?.(this.eventInfoWrapperQueue, this);
48
+ },
49
+ });
50
+ this.stopPropagation = stopPropagation;
51
+ }
52
+ /**
53
+ * Receives an event or the event queue from the EventContract. The event
54
+ * queue is copied and it attempts to replay.
55
+ * If event info is passed in it looks for an action handler that can handle
56
+ * the given event. If there is no handler registered queues the event and
57
+ * checks if a loader is registered for the given namespace. If so, calls it.
58
+ *
59
+ * Alternatively, if in global dispatch mode, calls all registered global
60
+ * handlers for the appropriate event type.
61
+ *
62
+ * The three functionalities of this call are deliberately not split into
63
+ * three methods (and then declared as an abstract interface), because the
64
+ * interface is used by EventContract, which lives in a different jsbinary.
65
+ * Therefore the interface between the three is defined entirely in terms that
66
+ * are invariant under jscompiler processing (Function and Array, as opposed
67
+ * to a custom type with method names).
68
+ *
69
+ * @param eventInfo The info for the event that triggered this call or the
70
+ * queue of events from EventContract.
71
+ */
72
+ dispatch(eventInfo, isGlobalDispatch) {
73
+ this.dispatcher.dispatch(eventInfo);
74
+ }
75
+ /**
76
+ * Dispatches an `EventInfoWrapper`.
77
+ */
78
+ dispatchToHandler(eventInfoWrapper) {
79
+ if (this.globalHandlers.size) {
80
+ const globalEventInfoWrapper = eventInfoWrapper.clone();
81
+ // In some cases, `populateAction` will rewrite `click` events to
82
+ // `clickonly`. Revert back to a regular click, otherwise we won't be able
83
+ // to execute global event handlers registered on click events.
84
+ if (globalEventInfoWrapper.getEventType() === EventType.CLICKONLY) {
85
+ globalEventInfoWrapper.setEventType(EventType.CLICK);
86
+ }
87
+ // Skip everything related to jsaction handlers, and execute the global
88
+ // handlers.
89
+ const event = globalEventInfoWrapper.getEvent();
90
+ const eventTypeHandlers = this.globalHandlers.get(globalEventInfoWrapper.getEventType());
91
+ let shouldPreventDefault = false;
92
+ if (eventTypeHandlers) {
93
+ for (const handler of eventTypeHandlers) {
94
+ if (handler(event) === false) {
95
+ shouldPreventDefault = true;
96
+ }
97
+ }
98
+ }
99
+ if (shouldPreventDefault) {
100
+ eventLib.preventDefault(event);
101
+ }
102
+ }
103
+ const action = eventInfoWrapper.getAction();
104
+ if (!action) {
105
+ return;
106
+ }
107
+ if (this.stopPropagation) {
108
+ stopPropagation(eventInfoWrapper);
109
+ }
110
+ let handler = undefined;
111
+ if (this.getHandler) {
112
+ handler = this.getHandler(eventInfoWrapper);
113
+ }
114
+ if (!handler) {
115
+ handler = this.actions[action.name];
116
+ }
117
+ if (handler) {
118
+ handler(eventInfoWrapper);
119
+ return;
120
+ }
121
+ // No handler was found.
122
+ this.eventInfoWrapperQueue?.push(eventInfoWrapper);
123
+ }
124
+ /**
125
+ * Registers multiple methods all bound to the same object
126
+ * instance. This is a common case: an application module binds
127
+ * multiple of its methods under public names to the event contract of
128
+ * the application. So we provide a shortcut for it.
129
+ * Attempts to replay the queued events after registering the handlers.
130
+ *
131
+ * @param namespace The namespace of the jsaction name.
132
+ *
133
+ * @param instance The object to bind the methods to. If this is null, then
134
+ * the functions are not bound, but directly added under the public names.
135
+ *
136
+ * @param methods A map from public name to functions that will be bound to
137
+ * instance and registered as action under the public name. I.e. the
138
+ * property names are the public names. The property values are the
139
+ * methods of instance.
140
+ */
141
+ registerEventInfoHandlers(namespace, instance, methods) {
142
+ for (const [name, method] of Object.entries(methods)) {
143
+ const handler = instance ? method.bind(instance) : method;
144
+ if (namespace) {
145
+ // Include a '.' separator between namespace name and action name.
146
+ // In the case that no namespace name is provided, the jsaction name
147
+ // consists of the action name only (no period).
148
+ const fullName = namespace + Char.NAMESPACE_ACTION_SEPARATOR + name;
149
+ this.actions[fullName] = handler;
150
+ }
151
+ else {
152
+ this.actions[name] = handler;
153
+ }
154
+ }
155
+ this.scheduleEventReplay();
156
+ }
157
+ /**
158
+ * Unregisters an action. Provided as an easy way to reverse the effects of
159
+ * registerHandlers.
160
+ * @param namespace The namespace of the jsaction name.
161
+ * @param name The action name to unbind.
162
+ */
163
+ unregisterHandler(namespace, name) {
164
+ const fullName = namespace ? namespace + Char.NAMESPACE_ACTION_SEPARATOR + name : name;
165
+ delete this.actions[fullName];
166
+ }
167
+ /** Registers a global event handler. */
168
+ registerGlobalHandler(eventType, handler) {
169
+ if (!this.globalHandlers.has(eventType)) {
170
+ this.globalHandlers.set(eventType, new Set([handler]));
171
+ }
172
+ else {
173
+ this.globalHandlers.get(eventType).add(handler);
174
+ }
175
+ }
176
+ /** Unregisters a global event handler. */
177
+ unregisterGlobalHandler(eventType, handler) {
178
+ if (this.globalHandlers.has(eventType)) {
179
+ this.globalHandlers.get(eventType).delete(handler);
180
+ }
181
+ }
182
+ /**
183
+ * Checks whether there is an action registered under the given
184
+ * name. This returns true if there is a namespace handler, even
185
+ * if it can not yet handle the event.
186
+ *
187
+ * @param name Action name.
188
+ * @return Whether the name is registered.
189
+ * @see #canDispatch
190
+ */
191
+ hasAction(name) {
192
+ return this.actions.hasOwnProperty(name);
193
+ }
194
+ /**
195
+ * Whether this dispatcher can dispatch the event. This can be used by
196
+ * event replayer to check whether the dispatcher can replay an event.
197
+ */
198
+ canDispatch(eventInfoWrapper) {
199
+ const action = eventInfoWrapper.getAction();
200
+ if (!action) {
201
+ return false;
202
+ }
203
+ return this.hasAction(action.name);
204
+ }
205
+ /**
206
+ * Sets the event replayer, enabling queued events to be replayed when actions
207
+ * are bound. To replay events, you must register the dispatcher to the
208
+ * contract after setting the `EventReplayer`. The event replayer takes as
209
+ * parameters the queue of events and the dispatcher (used to check whether
210
+ * actions have handlers registered and can be replayed). The event replayer
211
+ * is also responsible for dequeuing events.
212
+ *
213
+ * Example: An event replayer that replays only the last event.
214
+ *
215
+ * const dispatcher = new Dispatcher();
216
+ * // ...
217
+ * dispatcher.setEventReplayer((queue, dispatcher) => {
218
+ * const lastEventInfoWrapper = queue[queue.length -1];
219
+ * if (dispatcher.canDispatch(lastEventInfoWrapper.getAction())) {
220
+ * jsaction.replay.replayEvent(
221
+ * lastEventInfoWrapper.getEvent(),
222
+ * lastEventInfoWrapper.getTargetElement(),
223
+ * lastEventInfoWrapper.getEventType(),
224
+ * );
225
+ * queue.length = 0;
226
+ * }
227
+ * });
228
+ *
229
+ * @param eventReplayer It allows elements to be replayed and dequeuing.
230
+ */
231
+ setEventReplayer(eventReplayer) {
232
+ this.eventReplayer = eventReplayer;
233
+ }
234
+ /**
235
+ * Replays queued events, if any. The replaying will happen in its own
236
+ * stack once the current flow cedes control. This is done to mimic
237
+ * browser event handling.
238
+ */
239
+ scheduleEventReplay() {
240
+ if (this.eventReplayScheduled || !this.eventReplayer || !this.eventInfoWrapperQueue?.length) {
241
+ return;
242
+ }
243
+ this.eventReplayScheduled = true;
244
+ Promise.resolve().then(() => {
245
+ this.eventReplayScheduled = false;
246
+ this.eventReplayer(this.eventInfoWrapperQueue, this);
247
+ });
248
+ }
249
+ }
250
+ /**
251
+ * Registers deferred functionality for an EventContract and a Jsaction
252
+ * Dispatcher.
253
+ */
254
+ export function registerDispatcher(eventContract, dispatcher) {
255
+ eventContract.ecrd((eventInfo) => {
256
+ dispatcher.dispatch(eventInfo);
257
+ }, Restriction.I_AM_THE_JSACTION_FRAMEWORK);
258
+ }
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVnYWN5X2Rpc3BhdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvc3JjL2xlZ2FjeV9kaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFDTCxVQUFVLEVBR1YsZUFBZSxHQUNoQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sS0FBSyxRQUFRLE1BQU0sU0FBUyxDQUFDO0FBRXBDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFdkMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQVMxQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBVzdDOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBeUIzQjs7Ozs7OztPQU9HO0lBQ0gsWUFDbUIsVUFFa0IsRUFDbkMsRUFDRSxjQUFjLEVBQ2QsYUFBYSxFQUNiLGVBQWUsR0FBRyxLQUFLLE1BQ21FLEVBQUU7UUFQN0UsZUFBVSxHQUFWLFVBQVUsQ0FFUTtRQTlCckM7Ozs7V0FJRztRQUNjLFlBQU8sR0FBNkMsRUFBRSxDQUFDO1FBRXhFLHVFQUF1RTtRQUN0RCxtQkFBYyxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBUXhFLHlDQUF5QztRQUNqQyx5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFvQjVDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQzlCLENBQUMsZ0JBQWtDLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMzQyxDQUFDLEVBQ0Q7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TyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDMUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztZQUNsQyxJQUFJLENBQUMsYUFBYyxDQUFDLElBQUksQ0FBQyxxQkFBc0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsYUFBcUMsRUFDckMsVUFBNEI7SUFFNUIsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQW9CLEVBQUUsRUFBRTtRQUMxQyxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pDLENBQUMsRUFBRSxXQUFXLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7XG4gIERpc3BhdGNoZXIsXG4gIEV2ZW50SW5mb0hhbmRsZXIgYXMgRXZlbnRJbmZvV3JhcHBlckhhbmRsZXIsXG4gIEdsb2JhbEhhbmRsZXIsXG4gIHN0b3BQcm9wYWdhdGlvbixcbn0gZnJvbSAnLi9kaXNwYXRjaGVyJztcbmltcG9ydCB7Q2hhcn0gZnJvbSAnLi9jaGFyJztcbmltcG9ydCAqIGFzIGV2ZW50TGliIGZyb20gJy4vZXZlbnQnO1xuaW1wb3J0IHtFdmVudEluZm8sIEV2ZW50SW5mb1dyYXBwZXJ9IGZyb20gJy4vZXZlbnRfaW5mbyc7XG5pbXBvcnQge0V2ZW50VHlwZX0gZnJvbSAnLi9ldmVudF90eXBlJztcbmltcG9ydCB7VW5yZW5hbWVkRXZlbnRDb250cmFjdH0gZnJvbSAnLi9ldmVudGNvbnRyYWN0JztcbmltcG9ydCB7UmVzdHJpY3Rpb259IGZyb20gJy4vcmVzdHJpY3Rpb24nO1xuaW1wb3J0IHtBY3Rpb25SZXNvbHZlcn0gZnJvbSAnLi9hY3Rpb25fcmVzb2x2ZXInO1xuXG4vKiogUmUtZXhwb3J0cyB0aGF0IHNob3VsZCBldmVudHVhbGx5IGJlIG1vdmVkIGludG8gdGhpcyBmaWxlLiAqL1xuZXhwb3J0IHR5cGUge1xuICBFdmVudEluZm9IYW5kbGVyLFxuICBFdmVudEluZm9IYW5kbGVyIGFzIEV2ZW50SW5mb1dyYXBwZXJIYW5kbGVyLFxuICBHbG9iYWxIYW5kbGVyLFxufSBmcm9tICcuL2Rpc3BhdGNoZXInO1xuZXhwb3J0IHtzdG9wUHJvcGFnYXRpb259IGZyb20gJy4vZGlzcGF0Y2hlcic7XG5cbi8qKlxuICogQSByZXBsYXllciBpcyBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIHF1ZXVlZCBldmVudHMsXG4gKiBlaXRoZXIgZnJvbSB0aGUgYEV2ZW50Q29udHJhY3RgIG9yIHdoZW4gdGhlcmUgYXJlIG5vIGRldGVjdGVkIGhhbmRsZXJzLlxuICovXG5leHBvcnQgdHlwZSBSZXBsYXllciA9IChcbiAgZXZlbnRJbmZvV3JhcHBlcnM6IEV2ZW50SW5mb1dyYXBwZXJbXSxcbiAgZGlzcGF0Y2hlcjogTGVnYWN5RGlzcGF0Y2hlcixcbikgPT4gdm9pZDtcblxuLyoqXG4gKiBSZWNlaXZlcyBhIERPTSBldmVudCwgZGV0ZXJtaW5lcyB0aGUganNhY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBzb3VyY2VcbiAqIGVsZW1lbnQgb2YgdGhlIERPTSBldmVudCwgYW5kIGludm9rZXMgdGhlIGhhbmRsZXIgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICoganNhY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBMZWdhY3lEaXNwYXRjaGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHN0b3AgcHJvcGFnYXRpb24gZm9yIGFuIGBFdmVudEluZm9gLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3BQcm9wYWdhdGlvbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGFjdGlvbnMgdGhhdCBhcmUgcmVnaXN0ZXJlZCBmb3IgdGhpcyBEaXNwYXRjaGVyIGluc3RhbmNlLlxuICAgKiBUaGlzIHNob3VsZCBiZSB0aGUgcHJpbWFyeSBvbmUgdXNlZCBvbmNlIG1pZ3JhdGlvbiBvZmYgb2YgcmVnaXN0ZXJIYW5kbGVyc1xuICAgKiBpcyBkb25lLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBhY3Rpb25zOiB7W2tleTogc3RyaW5nXTogRXZlbnRJbmZvV3JhcHBlckhhbmRsZXJ9ID0ge307XG5cbiAgLyoqIEEgbWFwIG9mIGdsb2JhbCBldmVudCBoYW5kbGVycywgd2hlcmUgZWFjaCBrZXkgaXMgYW4gZXZlbnQgdHlwZS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxIYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8R2xvYmFsSGFuZGxlcj4+KCk7XG5cbiAgLyoqIFRoZSBldmVudCByZXBsYXllci4gKi9cbiAgcHJpdmF0ZSBldmVudFJlcGxheWVyPzogUmVwbGF5ZXI7XG5cbiAgLyoqIFRoZSBldmVudCBpbmZvcyB0aGF0IGhhdmUgYmUgcmVwbGF5ZWQuICovXG4gIHByaXZhdGUgZXZlbnRJbmZvV3JhcHBlclF1ZXVlPzogRXZlbnRJbmZvV3JhcHBlcltdO1xuXG4gIC8qKiBXaGV0aGVyIGV2ZW50IHJlcGxheSBpcyBzY2hlZHVsZWQuICovXG4gIHByaXZhdGUgZXZlbnRSZXBsYXlTY2hlZHVsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogUmVjZWl2ZXMgYSBET00gZXZlbnQsIGRldGVybWluZXMgdGhlIGpzYWN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgc291cmNlXG4gICAqIGVsZW1lbnQgb2YgdGhlIERPTSBldmVudCwgYW5kIGludm9rZXMgdGhlIGhhbmRsZXIgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAgKiBqc2FjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGdldEhhbmRsZXIgQSBmdW5jdGlvbiB0aGF0IGtub3dzIGhvdyB0byBnZXQgdGhlIGhhbmRsZXIgZm9yIGFcbiAgICogICAgIGdpdmVuIGV2ZW50IGluZm8uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdldEhhbmRsZXI/OiAoXG4gICAgICBldmVudEluZm9XcmFwcGVyOiBFdmVudEluZm9XcmFwcGVyLFxuICAgICkgPT4gRXZlbnRJbmZvV3JhcHBlckhhbmRsZXIgfCB2b2lkLFxuICAgIHtcbiAgICAgIGFjdGlvblJlc29sdmVyLFxuICAgICAgZXZlbnRSZXBsYXllcixcbiAgICAgIHN0b3BQcm9wYWdhdGlvbiA9IGZhbHNlLFxuICAgIH06IHthY3Rpb25SZXNvbHZlcj86IEFjdGlvblJlc29sdmVyOyBldmVudFJlcGxheWVyPzogUmVwbGF5ZXI7IHN0b3BQcm9wYWdhdGlvbj86IGJvb2xlYW59ID0ge30sXG4gICkge1xuICAgIHRoaXMuZXZlbnRSZXBsYXllciA9IGV2ZW50UmVwbGF5ZXI7XG4gICAgdGhpcy5kaXNwYXRjaGVyID0gbmV3IERpc3BhdGNoZXIoXG4gICAgICAoZXZlbnRJbmZvV3JhcHBlcjogRXZlbnRJbmZvV3JhcHBlcikgPT4ge1xuICAgICAgICB0aGlzLmRpc3BhdGNoVG9IYW5kbGVyKGV2ZW50SW5mb1dyYXBwZXIpO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uUmVzb2x2ZXIsXG4gICAgICAgIGV2ZW50UmVwbGF5ZXI6IChldmVudEluZm9XcmFwcGVycykgPT4ge1xuICAgICAgICAgIHRoaXMuZXZlbnRJbmZvV3JhcHBlclF1ZXVlID0gZXZlbnRJbmZvV3JhcHBlcnM7XG4gICAgICAgICAgdGhpcy5ldmVudFJlcGxheWVyPy4odGhpcy5ldmVudEluZm9XcmFwcGVyUXVldWUsIHRoaXMpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuICAgIHRoaXMuc3RvcFByb3BhZ2F0aW9uID0gc3RvcFByb3BhZ2F0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY2VpdmVzIGFuIGV2ZW50IG9yIHRoZSBldmVudCBxdWV1ZSBmcm9tIHRoZSBFdmVudENvbnRyYWN0LiBUaGUgZXZlbnRcbiAgICogcXVldWUgaXMgY29waWVkIGFuZCBpdCBhdHRlbXB0cyB0byByZXBsYXkuXG4gICAqIElmIGV2ZW50IGluZm8gaXMgcGFzc2VkIGluIGl0IGxvb2tzIGZvciBhbiBhY3Rpb24gaGFuZGxlciB0aGF0IGNhbiBoYW5kbGVcbiAgICogdGhlIGdpdmVuIGV2ZW50LiAgSWYgdGhlcmUgaXMgbm8gaGFuZGxlciByZWdpc3RlcmVkIHF1ZXVlcyB0aGUgZXZlbnQgYW5kXG4gICAqIGNoZWNrcyBpZiBhIGxvYWRlciBpcyByZWdpc3RlcmVkIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlLiBJZiBzbywgY2FsbHMgaXQuXG4gICAqXG4gICAqIEFsdGVybmF0aXZlbHksIGlmIGluIGdsb2JhbCBkaXNwYXRjaCBtb2RlLCBjYWxscyBhbGwgcmVnaXN0ZXJlZCBnbG9iYWxcbiAgICogaGFuZGxlcnMgZm9yIHRoZSBhcHByb3ByaWF0ZSBldmVudCB0eXBlLlxuICAgKlxuICAgKiBUaGUgdGhyZWUgZnVuY3Rpb25hbGl0aWVzIG9mIHRoaXMgY2FsbCBhcmUgZGVsaWJlcmF0ZWx5IG5vdCBzcGxpdCBpbnRvXG4gICAqIHRocmVlIG1ldGhvZHMgKGFuZCB0aGVuIGRlY2xhcmVkIGFzIGFuIGFic3RyYWN0IGludGVyZmFjZSksIGJlY2F1c2UgdGhlXG4gICAqIGludGVyZmFjZSBpcyB1c2VkIGJ5IEV2ZW50Q29udHJhY3QsIHdoaWNoIGxpdmVzIGluIGEgZGlmZmVyZW50IGpzYmluYXJ5LlxuICAgKiBUaGVyZWZvcmUgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSB0aHJlZSBpcyBkZWZpbmVkIGVudGlyZWx5IGluIHRlcm1zIHRoYXRcbiAgICogYXJlIGludmFyaWFudCB1bmRlciBqc2NvbXBpbGVyIHByb2Nlc3NpbmcgKEZ1bmN0aW9uIGFuZCBBcnJheSwgYXMgb3Bwb3NlZFxuICAgKiB0byBhIGN1c3RvbSB0eXBlIHdpdGggbWV0aG9kIG5hbWVzKS5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50SW5mbyBUaGUgaW5mbyBmb3IgdGhlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoaXMgY2FsbCBvciB0aGVcbiAgICogICAgIHF1ZXVlIG9mIGV2ZW50cyBmcm9tIEV2ZW50Q29udHJhY3QuXG4gICAqL1xuICBkaXNwYXRjaChldmVudEluZm86IEV2ZW50SW5mbywgaXNHbG9iYWxEaXNwYXRjaD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BhdGNoZXIuZGlzcGF0Y2goZXZlbnRJbmZvKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaGVzIGFuIGBFdmVudEluZm9XcmFwcGVyYC5cbiAgICovXG4gIHByaXZhdGUgZGlzcGF0Y2hUb0hhbmRsZXIoZXZlbnRJbmZvV3JhcHBlcjogRXZlbnRJbmZvV3JhcHBlcikge1xuICAgIGlmICh0aGlzLmdsb2JhbEhhbmRsZXJzLnNpemUpIHtcbiAgICAgIGNvbnN0IGdsb2JhbEV2ZW50SW5mb1dyYXBwZXIgPSBldmVudEluZm9XcmFwcGVyLmNsb25lKCk7XG5cbiAgICAgIC8vIEluIHNvbWUgY2FzZXMsIGBwb3B1bGF0ZUFjdGlvbmAgd2lsbCByZXdyaXRlIGBjbGlja2AgZXZlbnRzIHRvXG4gICAgICAvLyBgY2xpY2tvbmx5YC4gUmV2ZXJ0IGJhY2sgdG8gYSByZWd1bGFyIGNsaWNrLCBvdGhlcndpc2Ugd2Ugd29uJ3QgYmUgYWJsZVxuICAgICAgLy8gdG8gZXhlY3V0ZSBnbG9iYWwgZXZlbnQgaGFuZGxlcnMgcmVnaXN0ZXJlZCBvbiBjbGljayBldmVudHMuXG4gICAgICBpZiAoZ2xvYmFsRXZlbnRJbmZvV3JhcHBlci5nZXRFdmVudFR5cGUoKSA9PT0gRXZlbnRUeXBlLkNMSUNLT05MWSkge1xuICAgICAgICBnbG9iYWxFdmVudEluZm9XcmFwcGVyLnNldEV2ZW50VHlwZShFdmVudFR5cGUuQ0xJQ0spO1xuICAgICAgfVxuICAgICAgLy8gU2tpcCBldmVyeXRoaW5nIHJlbGF0ZWQgdG8ganNhY3Rpb24gaGFuZGxlcnMsIGFuZCBleGVjdXRlIHRoZSBnbG9iYWxcbiAgICAgIC8vIGhhbmRsZXJzLlxuICAgICAgY29uc3QgZXZlbnQgPSBnbG9iYWxFdmVudEluZm9XcmFwcGVyLmdldEV2ZW50KCk7XG4gICAgICBjb25zdCBldmVudFR5cGVIYW5kbGVycyA9IHRoaXMuZ2xvYmFsSGFuZGxlcnMuZ2V0KGdsb2JhbEV2ZW50SW5mb1dyYXBwZXIuZ2V0RXZlbnRUeXBlKCkpO1xuICAgICAgbGV0IHNob3VsZFByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG4gICAgICBpZiAoZXZlbnRUeXBlSGFuZGxlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIGV2ZW50VHlwZUhhbmRsZXJzKSB7XG4gICAgICAgICAgaWYgKGhhbmRsZXIoZXZlbnQpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc2hvdWxkUHJldmVudERlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHNob3VsZFByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgIGV2ZW50TGliLnByZXZlbnREZWZhdWx0KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhY3Rpb24gPSBldmVudEluZm9XcmFwcGVyLmdldEFjdGlvbigpO1xuICAgIGlmICghYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICBzdG9wUHJvcGFnYXRpb24oZXZlbnRJbmZvV3JhcHBlcik7XG4gICAgfVxuXG4gICAgbGV0IGhhbmRsZXI6IEV2ZW50SW5mb1dyYXBwZXJIYW5kbGVyIHwgdm9pZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5nZXRIYW5kbGVyKSB7XG4gICAgICBoYW5kbGVyID0gdGhpcy5nZXRIYW5kbGVyKGV2ZW50SW5mb1dyYXBwZXIpO1xuICAgIH1cblxuICAgIGlmICghaGFuZGxlcikge1xuICAgICAgaGFuZGxlciA9IHRoaXMuYWN0aW9uc1thY3Rpb24ubmFtZV07XG4gICAgfVxuXG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIGhhbmRsZXIoZXZlbnRJbmZvV3JhcHBlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gTm8gaGFuZGxlciB3YXMgZm91bmQuXG4gICAgdGhpcy5ldmVudEluZm9XcmFwcGVyUXVldWU/LnB1c2goZXZlbnRJbmZvV3JhcHBlcik7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIG11bHRpcGxlIG1ldGhvZHMgYWxsIGJvdW5kIHRvIHRoZSBzYW1lIG9iamVjdFxuICAgKiBpbnN0YW5jZS4gVGhpcyBpcyBhIGNvbW1vbiBjYXNlOiBhbiBhcHBsaWNhdGlvbiBtb2R1bGUgYmluZHNcbiAgICogbXVsdGlwbGUgb2YgaXRzIG1ldGhvZHMgdW5kZXIgcHVibGljIG5hbWVzIHRvIHRoZSBldmVudCBjb250cmFjdCBvZlxuICAgKiB0aGUgYXBwbGljYXRpb24uIFNvIHdlIHByb3ZpZGUgYSBzaG9ydGN1dCBmb3IgaXQuXG4gICAqIEF0dGVtcHRzIHRvIHJlcGxheSB0aGUgcXVldWVkIGV2ZW50cyBhZnRlciByZWdpc3RlcmluZyB0aGUgaGFuZGxlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBvZiB0aGUganNhY3Rpb24gbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIGluc3RhbmNlIFRoZSBvYmplY3QgdG8gYmluZCB0aGUgbWV0aG9kcyB0by4gSWYgdGhpcyBpcyBudWxsLCB0aGVuXG4gICAqICAgICB0aGUgZnVuY3Rpb25zIGFyZSBub3QgYm91bmQsIGJ1dCBkaXJlY3RseSBhZGRlZCB1bmRlciB0aGUgcHVibGljIG5hbWVzLlxuICAgKlxuICAgKiBAcGFyYW0gbWV0aG9kcyBBIG1hcCBmcm9tIHB1YmxpYyBuYW1lIHRvIGZ1bmN0aW9ucyB0aGF0IHdpbGwgYmUgYm91bmQgdG9cbiAgICogICAgIGluc3RhbmNlIGFuZCByZWdpc3RlcmVkIGFzIGFjdGlvbiB1bmRlciB0aGUgcHVibGljIG5hbWUuIEkuZS4gdGhlXG4gICAqICAgICBwcm9wZXJ0eSBuYW1lcyBhcmUgdGhlIHB1YmxpYyBuYW1lcy4gVGhlIHByb3BlcnR5IHZhbHVlcyBhcmUgdGhlXG4gICAqICAgICBtZXRob2RzIG9mIGluc3RhbmNlLlxuICAgKi9cbiAgcmVnaXN0ZXJFdmVudEluZm9IYW5kbGVyczxUPihcbiAgICBuYW1lc3BhY2U6IHN0cmluZyxcbiAgICBpbnN0YW5jZTogVCB8IG51bGwsXG4gICAgbWV0aG9kczoge1trZXk6IHN0cmluZ106IEV2ZW50SW5mb1dyYXBwZXJIYW5kbGVyfSxcbiAgKSB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgbWV0aG9kXSBvZiBPYmplY3QuZW50cmllcyhtZXRob2RzKSkge1xuICAgICAgY29uc3QgaGFuZGxlciA9IGluc3RhbmNlID8gbWV0aG9kLmJpbmQoaW5zdGFuY2UpIDogbWV0aG9kO1xuICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICAvLyBJbmNsdWRlIGEgJy4nIHNlcGFyYXRvciBiZXR3ZWVuIG5hbWVzcGFjZSBuYW1lIGFuZCBhY3Rpb24gbmFtZS5cbiAgICAgICAgLy8gSW4gdGhlIGNhc2UgdGhhdCBubyBuYW1lc3BhY2UgbmFtZSBpcyBwcm92aWRlZCwgdGhlIGpzYWN0aW9uIG5hbWVcbiAgICAgICAgLy8gY29uc2lzdHMgb2YgdGhlIGFjdGlvbiBuYW1lIG9ubHkgKG5vIHBlcmlvZCkuXG4gICAgICAgIGNvbnN0IGZ1bGxOYW1lID0gbmFtZXNwYWNlICsgQ2hhci5OQU1FU1BBQ0VfQUNUSU9OX1NFUEFSQVRPUiArIG5hbWU7XG4gICAgICAgIHRoaXMuYWN0aW9uc1tmdWxsTmFtZV0gPSBoYW5kbGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zW25hbWVdID0gaGFuZGxlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNjaGVkdWxlRXZlbnRSZXBsYXkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVycyBhbiBhY3Rpb24uICBQcm92aWRlZCBhcyBhbiBlYXN5IHdheSB0byByZXZlcnNlIHRoZSBlZmZlY3RzIG9mXG4gICAqIHJlZ2lzdGVySGFuZGxlcnMuXG4gICAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBvZiB0aGUganNhY3Rpb24gbmFtZS5cbiAgICogQHBhcmFtIG5hbWUgVGhlIGFjdGlvbiBuYW1lIHRvIHVuYmluZC5cbiAgICovXG4gIHVucmVnaXN0ZXJIYW5kbGVyKG5hbWVzcGFjZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBmdWxsTmFtZSA9IG5hbWVzcGFjZSA/IG5hbWVzcGFjZSArIENoYXIuTkFNRVNQQUNFX0FDVElPTl9TRVBBUkFUT1IgKyBuYW1lIDogbmFtZTtcbiAgICBkZWxldGUgdGhpcy5hY3Rpb25zW2Z1bGxOYW1lXTtcbiAgfVxuXG4gIC8qKiBSZWdpc3RlcnMgYSBnbG9iYWwgZXZlbnQgaGFuZGxlci4gKi9cbiAgcmVnaXN0ZXJHbG9iYWxIYW5kbGVyKGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyOiBHbG9iYWxIYW5kbGVyKSB7XG4gICAgaWYgKCF0aGlzLmdsb2JhbEhhbmRsZXJzLmhhcyhldmVudFR5cGUpKSB7XG4gICAgICB0aGlzLmdsb2JhbEhhbmRsZXJzLnNldChldmVudFR5cGUsIG5ldyBTZXQ8R2xvYmFsSGFuZGxlcj4oW2hhbmRsZXJdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2xvYmFsSGFuZGxlcnMuZ2V0KGV2ZW50VHlwZSkhLmFkZChoYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICAvKiogVW5yZWdpc3RlcnMgYSBnbG9iYWwgZXZlbnQgaGFuZGxlci4gKi9cbiAgdW5yZWdpc3Rlckdsb2JhbEhhbmRsZXIoZXZlbnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI6IEdsb2JhbEhhbmRsZXIpIHtcbiAgICBpZiAodGhpcy5nbG9iYWxIYW5kbGVycy5oYXMoZXZlbnRUeXBlKSkge1xuICAgICAgdGhpcy5nbG9iYWxIYW5kbGVycy5nZXQoZXZlbnRUeXBlKSEuZGVsZXRlKGhhbmRsZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGVyZSBpcyBhbiBhY3Rpb24gcmVnaXN0ZXJlZCB1bmRlciB0aGUgZ2l2ZW5cbiAgICogbmFtZS4gVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYSBuYW1lc3BhY2UgaGFuZGxlciwgZXZlblxuICAgKiBpZiBpdCBjYW4gbm90IHlldCBoYW5kbGUgdGhlIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBBY3Rpb24gbmFtZS5cbiAgICogQHJldHVybiBXaGV0aGVyIHRoZSBuYW1lIGlzIHJlZ2lzdGVyZWQuXG4gICAqIEBzZWUgI2NhbkRpc3BhdGNoXG4gICAqL1xuICBoYXNBY3Rpb24obmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZGlzcGF0Y2hlciBjYW4gZGlzcGF0Y2ggdGhlIGV2ZW50LiBUaGlzIGNhbiBiZSB1c2VkIGJ5XG4gICAqIGV2ZW50IHJlcGxheWVyIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGRpc3BhdGNoZXIgY2FuIHJlcGxheSBhbiBldmVudC5cbiAgICovXG4gIGNhbkRpc3BhdGNoKGV2ZW50SW5mb1dyYXBwZXI6IEV2ZW50SW5mb1dyYXBwZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBhY3Rpb24gPSBldmVudEluZm9XcmFwcGVyLmdldEFjdGlvbigpO1xuICAgIGlmICghYWN0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhhc0FjdGlvbihhY3Rpb24ubmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZXZlbnQgcmVwbGF5ZXIsIGVuYWJsaW5nIHF1ZXVlZCBldmVudHMgdG8gYmUgcmVwbGF5ZWQgd2hlbiBhY3Rpb25zXG4gICAqIGFyZSBib3VuZC4gVG8gcmVwbGF5IGV2ZW50cywgeW91IG11c3QgcmVnaXN0ZXIgdGhlIGRpc3BhdGNoZXIgdG8gdGhlXG4gICAqIGNvbnRyYWN0IGFmdGVyIHNldHRpbmcgdGhlIGBFdmVudFJlcGxheWVyYC4gVGhlIGV2ZW50IHJlcGxheWVyIHRha2VzIGFzXG4gICAqIHBhcmFtZXRlcnMgdGhlIHF1ZXVlIG9mIGV2ZW50cyBhbmQgdGhlIGRpc3BhdGNoZXIgKHVzZWQgdG8gY2hlY2sgd2hldGhlclxuICAgKiBhY3Rpb25zIGhhdmUgaGFuZGxlcnMgcmVnaXN0ZXJlZCBhbmQgY2FuIGJlIHJlcGxheWVkKS4gVGhlIGV2ZW50IHJlcGxheWVyXG4gICAqIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGRlcXVldWluZyBldmVudHMuXG4gICAqXG4gICAqIEV4YW1wbGU6IEFuIGV2ZW50IHJlcGxheWVyIHRoYXQgcmVwbGF5cyBvbmx5IHRoZSBsYXN0IGV2ZW50LlxuICAgKlxuICAgKiAgIGNvbnN0IGRpc3BhdGNoZXIgPSBuZXcgRGlzcGF0Y2hlcigpO1xuICAgKiAgIC8vIC4uLlxuICAgKiAgIGRpc3BhdGNoZXIuc2V0RXZlbnRSZXBsYXllcigocXVldWUsIGRpc3BhdGNoZXIpID0+IHtcbiAgICogICAgIGNvbnN0IGxhc3RFdmVudEluZm9XcmFwcGVyID0gcXVldWVbcXVldWUubGVuZ3RoIC0xXTtcbiAgICogICAgIGlmIChkaXNwYXRjaGVyLmNhbkRpc3BhdGNoKGxhc3RFdmVudEluZm9XcmFwcGVyLmdldEFjdGlvbigpKSkge1xuICAgKiAgICAgICBqc2FjdGlvbi5yZXBsYXkucmVwbGF5RXZlbnQoXG4gICAqICAgICAgICAgICBsYXN0RXZlbnRJbmZvV3JhcHBlci5nZXRFdmVudCgpLFxuICAgKiAgICAgICAgICAgbGFzdEV2ZW50SW5mb1dyYXBwZXIuZ2V0VGFyZ2V0RWxlbWVudCgpLFxuICAgKiAgICAgICAgICAgbGFzdEV2ZW50SW5mb1dyYXBwZXIuZ2V0RXZlbnRUeXBlKCksXG4gICAqICAgICAgICk7XG4gICAqICAgICAgIHF1ZXVlLmxlbmd0aCA9IDA7XG4gICAqICAgICB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSBldmVudFJlcGxheWVyIEl0IGFsbG93cyBlbGVtZW50cyB0byBiZSByZXBsYXllZCBhbmQgZGVxdWV1aW5nLlxuICAgKi9cbiAgc2V0RXZlbnRSZXBsYXllcihldmVudFJlcGxheWVyOiBSZXBsYXllcikge1xuICAgIHRoaXMuZXZlbnRSZXBsYXllciA9IGV2ZW50UmVwbGF5ZXI7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGF5cyBxdWV1ZWQgZXZlbnRzLCBpZiBhbnkuIFRoZSByZXBsYXlpbmcgd2lsbCBoYXBwZW4gaW4gaXRzIG93blxuICAgKiBzdGFjayBvbmNlIHRoZSBjdXJyZW50IGZsb3cgY2VkZXMgY29udHJvbC4gVGhpcyBpcyBkb25lIHRvIG1pbWljXG4gICAqIGJyb3dzZXIgZXZlbnQgaGFuZGxpbmcuXG4gICAqL1xuICBwcml2YXRlIHNjaGVkdWxlRXZlbnRSZXBsYXkoKSB7XG4gICAgaWYgKHRoaXMuZXZlbnRSZXBsYXlTY2hlZHVsZWQgfHwgIXRoaXMuZXZlbnRSZXBsYXllciB8fCAhdGhpcy5ldmVudEluZm9XcmFwcGVyUXVldWU/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmV2ZW50UmVwbGF5U2NoZWR1bGVkID0gdHJ1ZTtcbiAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuZXZlbnRSZXBsYXlTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZXZlbnRSZXBsYXllciEodGhpcy5ldmVudEluZm9XcmFwcGVyUXVldWUhLCB0aGlzKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBkZWZlcnJlZCBmdW5jdGlvbmFsaXR5IGZvciBhbiBFdmVudENvbnRyYWN0IGFuZCBhIEpzYWN0aW9uXG4gKiBEaXNwYXRjaGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEaXNwYXRjaGVyKFxuICBldmVudENvbnRyYWN0OiBVbnJlbmFtZWRFdmVudENvbnRyYWN0LFxuICBkaXNwYXRjaGVyOiBMZWdhY3lEaXNwYXRjaGVyLFxuKSB7XG4gIGV2ZW50Q29udHJhY3QuZWNyZCgoZXZlbnRJbmZvOiBFdmVudEluZm8pID0+IHtcbiAgICBkaXNwYXRjaGVyLmRpc3BhdGNoKGV2ZW50SW5mbyk7XG4gIH0sIFJlc3RyaWN0aW9uLklfQU1fVEhFX0pTQUNUSU9OX0ZSQU1FV09SSyk7XG59XG4iXX0=
@@ -5,31 +5,34 @@
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
+ /**
9
+ * The parsed value of the jsaction attribute is stored in this
10
+ * property on the DOM node. The parsed value is an Object. The
11
+ * property names of the object are the events; the values are the
12
+ * names of the actions. This property is attached even on nodes
13
+ * that don't have a jsaction attribute as an optimization, because
14
+ * property lookup is faster than attribute access.
15
+ */
16
+ export const JSACTION = '__jsaction';
17
+ /**
18
+ * The parsed value of the jsnamespace attribute is stored in this
19
+ * property on the DOM node.
20
+ */
21
+ export const JSNAMESPACE = '__jsnamespace';
22
+ /** The value of the oi attribute as a property, for faster access. */
23
+ export const OI = '__oi';
24
+ /**
25
+ * The owner property references an a logical owner for a DOM node. JSAction
26
+ * will follow this reference instead of parentNode when traversing the DOM
27
+ * to find jsaction attributes. This allows overlaying a logical structure
28
+ * over a document where the DOM structure can't reflect that structure.
29
+ */
30
+ export const OWNER = '__owner';
8
31
  /** All properties that are used by jsaction. */
9
- export var Property;
10
- (function (Property) {
11
- /**
12
- * The parsed value of the jsaction attribute is stored in this
13
- * property on the DOM node. The parsed value is an Object. The
14
- * property names of the object are the events; the values are the
15
- * names of the actions. This property is attached even on nodes
16
- * that don't have a jsaction attribute as an optimization, because
17
- * property lookup is faster than attribute access.
18
- */
19
- Property["JSACTION"] = "__jsaction";
20
- /**
21
- * The parsed value of the jsnamespace attribute is stored in this
22
- * property on the DOM node.
23
- */
24
- Property["JSNAMESPACE"] = "__jsnamespace";
25
- /** The value of the oi attribute as a property, for faster access. */
26
- Property["OI"] = "__oi";
27
- /**
28
- * The owner property references an a logical owner for a DOM node. JSAction
29
- * will follow this reference instead of parentNode when traversing the DOM
30
- * to find jsaction attributes. This allows overlaying a logical structure
31
- * over a document where the DOM structure can't reflect that structure.
32
- */
33
- Property["OWNER"] = "__owner";
34
- })(Property || (Property = {}));
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvc3JjL3Byb3BlcnR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILGdEQUFnRDtBQUNoRCxNQUFNLENBQU4sSUFBWSxRQTJCWDtBQTNCRCxXQUFZLFFBQVE7SUFDbEI7Ozs7Ozs7T0FPRztJQUNILG1DQUF1QixDQUFBO0lBRXZCOzs7T0FHRztJQUNILHlDQUE2QixDQUFBO0lBRTdCLHNFQUFzRTtJQUN0RSx1QkFBVyxDQUFBO0lBRVg7Ozs7O09BS0c7SUFDSCw2QkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBM0JXLFFBQVEsS0FBUixRQUFRLFFBMkJuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vKiogQWxsIHByb3BlcnRpZXMgdGhhdCBhcmUgdXNlZCBieSBqc2FjdGlvbi4gKi9cbmV4cG9ydCBlbnVtIFByb3BlcnR5IHtcbiAgLyoqXG4gICAqIFRoZSBwYXJzZWQgdmFsdWUgb2YgdGhlIGpzYWN0aW9uIGF0dHJpYnV0ZSBpcyBzdG9yZWQgaW4gdGhpc1xuICAgKiBwcm9wZXJ0eSBvbiB0aGUgRE9NIG5vZGUuIFRoZSBwYXJzZWQgdmFsdWUgaXMgYW4gT2JqZWN0LiBUaGVcbiAgICogcHJvcGVydHkgbmFtZXMgb2YgdGhlIG9iamVjdCBhcmUgdGhlIGV2ZW50czsgdGhlIHZhbHVlcyBhcmUgdGhlXG4gICAqIG5hbWVzIG9mIHRoZSBhY3Rpb25zLiBUaGlzIHByb3BlcnR5IGlzIGF0dGFjaGVkIGV2ZW4gb24gbm9kZXNcbiAgICogdGhhdCBkb24ndCBoYXZlIGEganNhY3Rpb24gYXR0cmlidXRlIGFzIGFuIG9wdGltaXphdGlvbiwgYmVjYXVzZVxuICAgKiBwcm9wZXJ0eSBsb29rdXAgaXMgZmFzdGVyIHRoYW4gYXR0cmlidXRlIGFjY2Vzcy5cbiAgICovXG4gIEpTQUNUSU9OID0gJ19fanNhY3Rpb24nLFxuXG4gIC8qKlxuICAgKiBUaGUgcGFyc2VkIHZhbHVlIG9mIHRoZSBqc25hbWVzcGFjZSBhdHRyaWJ1dGUgaXMgc3RvcmVkIGluIHRoaXNcbiAgICogcHJvcGVydHkgb24gdGhlIERPTSBub2RlLlxuICAgKi9cbiAgSlNOQU1FU1BBQ0UgPSAnX19qc25hbWVzcGFjZScsXG5cbiAgLyoqIFRoZSB2YWx1ZSBvZiB0aGUgb2kgYXR0cmlidXRlIGFzIGEgcHJvcGVydHksIGZvciBmYXN0ZXIgYWNjZXNzLiAqL1xuICBPSSA9ICdfX29pJyxcblxuICAvKipcbiAgICogVGhlIG93bmVyIHByb3BlcnR5IHJlZmVyZW5jZXMgYW4gYSBsb2dpY2FsIG93bmVyIGZvciBhIERPTSBub2RlLiBKU0FjdGlvblxuICAgKiB3aWxsIGZvbGxvdyB0aGlzIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIHBhcmVudE5vZGUgd2hlbiB0cmF2ZXJzaW5nIHRoZSBET01cbiAgICogdG8gZmluZCBqc2FjdGlvbiBhdHRyaWJ1dGVzLiBUaGlzIGFsbG93cyBvdmVybGF5aW5nIGEgbG9naWNhbCBzdHJ1Y3R1cmVcbiAgICogb3ZlciBhIGRvY3VtZW50IHdoZXJlIHRoZSBET00gc3RydWN0dXJlIGNhbid0IHJlZmxlY3QgdGhhdCBzdHJ1Y3R1cmUuXG4gICAqL1xuICBPV05FUiA9ICdfX293bmVyJyxcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgTm9kZSB7XG4gICAgW1Byb3BlcnR5LkpTQUNUSU9OXT86IHN0cmluZztcbiAgICBbUHJvcGVydHkuSlNOQU1FU1BBQ0VdPzogc3RyaW5nO1xuICAgIFtQcm9wZXJ0eS5PSV0/OiBzdHJpbmc7XG4gICAgW1Byb3BlcnR5Lk9XTkVSXT86IFBhcmVudE5vZGU7XG4gIH1cbn1cbiJdfQ==
32
+ export const Property = {
33
+ JSACTION,
34
+ JSNAMESPACE,
35
+ OI,
36
+ OWNER,
37
+ };
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvc3JjL3Byb3BlcnR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVIOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDO0FBRXJDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUM7QUFFM0Msc0VBQXNFO0FBQ3RFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFFekI7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDO0FBRS9CLGdEQUFnRDtBQUNoRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUc7SUFDdEIsUUFBUTtJQUNSLFdBQVc7SUFDWCxFQUFFO0lBQ0YsS0FBSztDQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBUaGUgcGFyc2VkIHZhbHVlIG9mIHRoZSBqc2FjdGlvbiBhdHRyaWJ1dGUgaXMgc3RvcmVkIGluIHRoaXNcbiAqIHByb3BlcnR5IG9uIHRoZSBET00gbm9kZS4gVGhlIHBhcnNlZCB2YWx1ZSBpcyBhbiBPYmplY3QuIFRoZVxuICogcHJvcGVydHkgbmFtZXMgb2YgdGhlIG9iamVjdCBhcmUgdGhlIGV2ZW50czsgdGhlIHZhbHVlcyBhcmUgdGhlXG4gKiBuYW1lcyBvZiB0aGUgYWN0aW9ucy4gVGhpcyBwcm9wZXJ0eSBpcyBhdHRhY2hlZCBldmVuIG9uIG5vZGVzXG4gKiB0aGF0IGRvbid0IGhhdmUgYSBqc2FjdGlvbiBhdHRyaWJ1dGUgYXMgYW4gb3B0aW1pemF0aW9uLCBiZWNhdXNlXG4gKiBwcm9wZXJ0eSBsb29rdXAgaXMgZmFzdGVyIHRoYW4gYXR0cmlidXRlIGFjY2Vzcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEpTQUNUSU9OID0gJ19fanNhY3Rpb24nO1xuXG4vKipcbiAqIFRoZSBwYXJzZWQgdmFsdWUgb2YgdGhlIGpzbmFtZXNwYWNlIGF0dHJpYnV0ZSBpcyBzdG9yZWQgaW4gdGhpc1xuICogcHJvcGVydHkgb24gdGhlIERPTSBub2RlLlxuICovXG5leHBvcnQgY29uc3QgSlNOQU1FU1BBQ0UgPSAnX19qc25hbWVzcGFjZSc7XG5cbi8qKiBUaGUgdmFsdWUgb2YgdGhlIG9pIGF0dHJpYnV0ZSBhcyBhIHByb3BlcnR5LCBmb3IgZmFzdGVyIGFjY2Vzcy4gKi9cbmV4cG9ydCBjb25zdCBPSSA9ICdfX29pJztcblxuLyoqXG4gKiBUaGUgb3duZXIgcHJvcGVydHkgcmVmZXJlbmNlcyBhbiBhIGxvZ2ljYWwgb3duZXIgZm9yIGEgRE9NIG5vZGUuIEpTQWN0aW9uXG4gKiB3aWxsIGZvbGxvdyB0aGlzIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIHBhcmVudE5vZGUgd2hlbiB0cmF2ZXJzaW5nIHRoZSBET01cbiAqIHRvIGZpbmQganNhY3Rpb24gYXR0cmlidXRlcy4gVGhpcyBhbGxvd3Mgb3ZlcmxheWluZyBhIGxvZ2ljYWwgc3RydWN0dXJlXG4gKiBvdmVyIGEgZG9jdW1lbnQgd2hlcmUgdGhlIERPTSBzdHJ1Y3R1cmUgY2FuJ3QgcmVmbGVjdCB0aGF0IHN0cnVjdHVyZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE9XTkVSID0gJ19fb3duZXInO1xuXG4vKiogQWxsIHByb3BlcnRpZXMgdGhhdCBhcmUgdXNlZCBieSBqc2FjdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBQcm9wZXJ0eSA9IHtcbiAgSlNBQ1RJT04sXG4gIEpTTkFNRVNQQUNFLFxuICBPSSxcbiAgT1dORVIsXG59O1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBOb2RlIHtcbiAgICBbSlNBQ1RJT05dPzogc3RyaW5nO1xuICAgIFtKU05BTUVTUEFDRV0/OiBzdHJpbmc7XG4gICAgW09JXT86IHN0cmluZztcbiAgICBbT1dORVJdPzogUGFyZW50Tm9kZTtcbiAgfVxufVxuIl19
@@ -6,28 +6,6 @@
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
8
  import { EarlyEventContract } from './earlyeventcontract';
9
- import { EventContractContainer } from './event_contract_container';
10
- import { EventContract } from './eventcontract';
11
- /**
12
- * Provides a factory function for bootstrapping an event contract on a
13
- * specified object (by default, exposed on the `window`).
14
- * @param field The property on the object that the event contract will be placed on.
15
- * @param container The container that listens to events
16
- * @param appId A given identifier for an application. If there are multiple apps on the page
17
- * then this is how contracts can be initialized for each one.
18
- * @param events An array of event names that should be listened to.
19
- * @param earlyJsactionTracker The object that should receive the event contract.
20
- */
21
- export function bootstrapEventContract(field, container, appId, events, earlyJsactionTracker = window) {
22
- if (!earlyJsactionTracker[field]) {
23
- earlyJsactionTracker[field] = {};
24
- }
25
- const eventContract = new EventContract(new EventContractContainer(container));
26
- earlyJsactionTracker[field][appId] = eventContract;
27
- for (const ev of events) {
28
- eventContract.addEvent(ev);
29
- }
30
- }
31
9
  /**
32
10
  * Provides a factory function for bootstrapping an event contract on a
33
11
  * specified object (by default, exposed on the `window`).
@@ -45,7 +23,9 @@ export function bootstrapEarlyEventContract(field, container, appId, eventTypes,
45
23
  }
46
24
  earlyJsactionTracker[field][appId] = {};
47
25
  const eventContract = new EarlyEventContract(earlyJsactionTracker[field][appId], container);
48
- eventContract.addEvents(eventTypes);
49
- eventContract.addEvents(captureEventTypes, true);
26
+ if (eventTypes)
27
+ eventContract.addEvents(eventTypes);
28
+ if (captureEventTypes)
29
+ eventContract.addEvents(captureEventTypes, true);
50
30
  }
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXJfZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9wcmltaXRpdmVzL2V2ZW50LWRpc3BhdGNoL3NyYy9yZWdpc3Rlcl9ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLGtCQUFrQixFQUE2QixNQUFNLHNCQUFzQixDQUFDO0FBQ3BGLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUk5Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLEtBQWEsRUFDYixTQUFrQixFQUNsQixLQUFhLEVBQ2IsTUFBZ0IsRUFDaEIsdUJBQTRELE1BQXdEO0lBRXBILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2pDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQy9FLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLGFBQWEsQ0FBQztJQUNuRCxLQUFLLE1BQU0sRUFBRSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0IsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLDJCQUEyQixDQUN6QyxLQUFhLEVBQ2IsU0FBc0IsRUFDdEIsS0FBYSxFQUNiLFVBQW9CLEVBQ3BCLGlCQUEyQixFQUMzQix1QkFBeUUsTUFBcUU7SUFFOUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDeEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1RixhQUFhLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLGFBQWEsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0Vhcmx5RXZlbnRDb250cmFjdCwgRWFybHlKc2FjdGlvbkRhdGFDb250YWluZXJ9IGZyb20gJy4vZWFybHlldmVudGNvbnRyYWN0JztcbmltcG9ydCB7RXZlbnRDb250cmFjdENvbnRhaW5lcn0gZnJvbSAnLi9ldmVudF9jb250cmFjdF9jb250YWluZXInO1xuaW1wb3J0IHtFdmVudENvbnRyYWN0fSBmcm9tICcuL2V2ZW50Y29udHJhY3QnO1xuXG5leHBvcnQgdHlwZSBFdmVudENvbnRyYWN0VHJhY2tlcjxUPiA9IHtba2V5OiBzdHJpbmddOiB7W2FwcElkOiBzdHJpbmddOiBUfX07XG5cbi8qKlxuICogUHJvdmlkZXMgYSBmYWN0b3J5IGZ1bmN0aW9uIGZvciBib290c3RyYXBwaW5nIGFuIGV2ZW50IGNvbnRyYWN0IG9uIGFcbiAqIHNwZWNpZmllZCBvYmplY3QgKGJ5IGRlZmF1bHQsIGV4cG9zZWQgb24gdGhlIGB3aW5kb3dgKS5cbiAqIEBwYXJhbSBmaWVsZCBUaGUgcHJvcGVydHkgb24gdGhlIG9iamVjdCB0aGF0IHRoZSBldmVudCBjb250cmFjdCB3aWxsIGJlIHBsYWNlZCBvbi5cbiAqIEBwYXJhbSBjb250YWluZXIgVGhlIGNvbnRhaW5lciB0aGF0IGxpc3RlbnMgdG8gZXZlbnRzXG4gKiBAcGFyYW0gYXBwSWQgQSBnaXZlbiBpZGVudGlmaWVyIGZvciBhbiBhcHBsaWNhdGlvbi4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGFwcHMgb24gdGhlIHBhZ2VcbiAqICAgICAgICAgICAgICB0aGVuIHRoaXMgaXMgaG93IGNvbnRyYWN0cyBjYW4gYmUgaW5pdGlhbGl6ZWQgZm9yIGVhY2ggb25lLlxuICogQHBhcmFtIGV2ZW50cyBBbiBhcnJheSBvZiBldmVudCBuYW1lcyB0aGF0IHNob3VsZCBiZSBsaXN0ZW5lZCB0by5cbiAqIEBwYXJhbSBlYXJseUpzYWN0aW9uVHJhY2tlciBUaGUgb2JqZWN0IHRoYXQgc2hvdWxkIHJlY2VpdmUgdGhlIGV2ZW50IGNvbnRyYWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYm9vdHN0cmFwRXZlbnRDb250cmFjdChcbiAgZmllbGQ6IHN0cmluZyxcbiAgY29udGFpbmVyOiBFbGVtZW50LFxuICBhcHBJZDogc3RyaW5nLFxuICBldmVudHM6IHN0cmluZ1tdLFxuICBlYXJseUpzYWN0aW9uVHJhY2tlcjogRXZlbnRDb250cmFjdFRyYWNrZXI8RXZlbnRDb250cmFjdD4gPSB3aW5kb3cgYXMgdW5rbm93biBhcyBFdmVudENvbnRyYWN0VHJhY2tlcjxFdmVudENvbnRyYWN0Pixcbikge1xuICBpZiAoIWVhcmx5SnNhY3Rpb25UcmFja2VyW2ZpZWxkXSkge1xuICAgIGVhcmx5SnNhY3Rpb25UcmFja2VyW2ZpZWxkXSA9IHt9O1xuICB9XG4gIGNvbnN0IGV2ZW50Q29udHJhY3QgPSBuZXcgRXZlbnRDb250cmFjdChuZXcgRXZlbnRDb250cmFjdENvbnRhaW5lcihjb250YWluZXIpKTtcbiAgZWFybHlKc2FjdGlvblRyYWNrZXJbZmllbGRdW2FwcElkXSA9IGV2ZW50Q29udHJhY3Q7XG4gIGZvciAoY29uc3QgZXYgb2YgZXZlbnRzKSB7XG4gICAgZXZlbnRDb250cmFjdC5hZGRFdmVudChldik7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm92aWRlcyBhIGZhY3RvcnkgZnVuY3Rpb24gZm9yIGJvb3RzdHJhcHBpbmcgYW4gZXZlbnQgY29udHJhY3Qgb24gYVxuICogc3BlY2lmaWVkIG9iamVjdCAoYnkgZGVmYXVsdCwgZXhwb3NlZCBvbiB0aGUgYHdpbmRvd2ApLlxuICogQHBhcmFtIGZpZWxkIFRoZSBwcm9wZXJ0eSBvbiB0aGUgb2JqZWN0IHRoYXQgdGhlIGV2ZW50IGNvbnRyYWN0IHdpbGwgYmUgcGxhY2VkIG9uLlxuICogQHBhcmFtIGNvbnRhaW5lciBUaGUgY29udGFpbmVyIHRoYXQgbGlzdGVucyB0byBldmVudHNcbiAqIEBwYXJhbSBhcHBJZCBBIGdpdmVuIGlkZW50aWZpZXIgZm9yIGFuIGFwcGxpY2F0aW9uLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgYXBwcyBvbiB0aGUgcGFnZVxuICogICAgICAgICAgICAgIHRoZW4gdGhpcyBpcyBob3cgY29udHJhY3RzIGNhbiBiZSBpbml0aWFsaXplZCBmb3IgZWFjaCBvbmUuXG4gKiBAcGFyYW0gZXZlbnRUeXBlcyBBbiBhcnJheSBvZiBldmVudCBuYW1lcyB0aGF0IHNob3VsZCBiZSBsaXN0ZW5lZCB0by5cbiAqIEBwYXJhbSBjYXB0dXJlRXZlbnRUeXBlcyBBbiBhcnJheSBvZiBldmVudCBuYW1lcyB0aGF0IHNob3VsZCBiZSBsaXN0ZW5lZCB0byB3aXRoIGNhcHR1cmUuXG4gKiBAcGFyYW0gZWFybHlKc2FjdGlvblRyYWNrZXIgVGhlIG9iamVjdCB0aGF0IHNob3VsZCByZWNlaXZlIHRoZSBldmVudCBjb250cmFjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJvb3RzdHJhcEVhcmx5RXZlbnRDb250cmFjdChcbiAgZmllbGQ6IHN0cmluZyxcbiAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgYXBwSWQ6IHN0cmluZyxcbiAgZXZlbnRUeXBlczogc3RyaW5nW10sXG4gIGNhcHR1cmVFdmVudFR5cGVzOiBzdHJpbmdbXSxcbiAgZWFybHlKc2FjdGlvblRyYWNrZXI6IEV2ZW50Q29udHJhY3RUcmFja2VyPEVhcmx5SnNhY3Rpb25EYXRhQ29udGFpbmVyPiA9IHdpbmRvdyBhcyB1bmtub3duIGFzIEV2ZW50Q29udHJhY3RUcmFja2VyPEVhcmx5SnNhY3Rpb25EYXRhQ29udGFpbmVyPixcbikge1xuICBpZiAoIWVhcmx5SnNhY3Rpb25UcmFja2VyW2ZpZWxkXSkge1xuICAgIGVhcmx5SnNhY3Rpb25UcmFja2VyW2ZpZWxkXSA9IHt9O1xuICB9XG4gIGVhcmx5SnNhY3Rpb25UcmFja2VyW2ZpZWxkXVthcHBJZF0gPSB7fTtcbiAgY29uc3QgZXZlbnRDb250cmFjdCA9IG5ldyBFYXJseUV2ZW50Q29udHJhY3QoZWFybHlKc2FjdGlvblRyYWNrZXJbZmllbGRdW2FwcElkXSwgY29udGFpbmVyKTtcbiAgZXZlbnRDb250cmFjdC5hZGRFdmVudHMoZXZlbnRUeXBlcyk7XG4gIGV2ZW50Q29udHJhY3QuYWRkRXZlbnRzKGNhcHR1cmVFdmVudFR5cGVzLCB0cnVlKTtcbn1cbiJdfQ==
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXJfZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9wcmltaXRpdmVzL2V2ZW50LWRpc3BhdGNoL3NyYy9yZWdpc3Rlcl9ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLGtCQUFrQixFQUE2QixNQUFNLHNCQUFzQixDQUFDO0FBSXBGOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsMkJBQTJCLENBQ3pDLEtBQWEsRUFDYixTQUFzQixFQUN0QixLQUFhLEVBQ2IsVUFBcUIsRUFDckIsaUJBQTRCLEVBQzVCLHVCQUF5RSxNQUFxRTtJQUU5SSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUNELG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN4QyxNQUFNLGFBQWEsR0FBRyxJQUFJLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzVGLElBQUksVUFBVTtRQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEQsSUFBSSxpQkFBaUI7UUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtFYXJseUV2ZW50Q29udHJhY3QsIEVhcmx5SnNhY3Rpb25EYXRhQ29udGFpbmVyfSBmcm9tICcuL2Vhcmx5ZXZlbnRjb250cmFjdCc7XG5cbmV4cG9ydCB0eXBlIEV2ZW50Q29udHJhY3RUcmFja2VyPFQ+ID0ge1trZXk6IHN0cmluZ106IHtbYXBwSWQ6IHN0cmluZ106IFR9fTtcblxuLyoqXG4gKiBQcm92aWRlcyBhIGZhY3RvcnkgZnVuY3Rpb24gZm9yIGJvb3RzdHJhcHBpbmcgYW4gZXZlbnQgY29udHJhY3Qgb24gYVxuICogc3BlY2lmaWVkIG9iamVjdCAoYnkgZGVmYXVsdCwgZXhwb3NlZCBvbiB0aGUgYHdpbmRvd2ApLlxuICogQHBhcmFtIGZpZWxkIFRoZSBwcm9wZXJ0eSBvbiB0aGUgb2JqZWN0IHRoYXQgdGhlIGV2ZW50IGNvbnRyYWN0IHdpbGwgYmUgcGxhY2VkIG9uLlxuICogQHBhcmFtIGNvbnRhaW5lciBUaGUgY29udGFpbmVyIHRoYXQgbGlzdGVucyB0byBldmVudHNcbiAqIEBwYXJhbSBhcHBJZCBBIGdpdmVuIGlkZW50aWZpZXIgZm9yIGFuIGFwcGxpY2F0aW9uLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgYXBwcyBvbiB0aGUgcGFnZVxuICogICAgICAgICAgICAgIHRoZW4gdGhpcyBpcyBob3cgY29udHJhY3RzIGNhbiBiZSBpbml0aWFsaXplZCBmb3IgZWFjaCBvbmUuXG4gKiBAcGFyYW0gZXZlbnRUeXBlcyBBbiBhcnJheSBvZiBldmVudCBuYW1lcyB0aGF0IHNob3VsZCBiZSBsaXN0ZW5lZCB0by5cbiAqIEBwYXJhbSBjYXB0dXJlRXZlbnRUeXBlcyBBbiBhcnJheSBvZiBldmVudCBuYW1lcyB0aGF0IHNob3VsZCBiZSBsaXN0ZW5lZCB0byB3aXRoIGNhcHR1cmUuXG4gKiBAcGFyYW0gZWFybHlKc2FjdGlvblRyYWNrZXIgVGhlIG9iamVjdCB0aGF0IHNob3VsZCByZWNlaXZlIHRoZSBldmVudCBjb250cmFjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJvb3RzdHJhcEVhcmx5RXZlbnRDb250cmFjdChcbiAgZmllbGQ6IHN0cmluZyxcbiAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgYXBwSWQ6IHN0cmluZyxcbiAgZXZlbnRUeXBlcz86IHN0cmluZ1tdLFxuICBjYXB0dXJlRXZlbnRUeXBlcz86IHN0cmluZ1tdLFxuICBlYXJseUpzYWN0aW9uVHJhY2tlcjogRXZlbnRDb250cmFjdFRyYWNrZXI8RWFybHlKc2FjdGlvbkRhdGFDb250YWluZXI+ID0gd2luZG93IGFzIHVua25vd24gYXMgRXZlbnRDb250cmFjdFRyYWNrZXI8RWFybHlKc2FjdGlvbkRhdGFDb250YWluZXI+LFxuKSB7XG4gIGlmICghZWFybHlKc2FjdGlvblRyYWNrZXJbZmllbGRdKSB7XG4gICAgZWFybHlKc2FjdGlvblRyYWNrZXJbZmllbGRdID0ge307XG4gIH1cbiAgZWFybHlKc2FjdGlvblRyYWNrZXJbZmllbGRdW2FwcElkXSA9IHt9O1xuICBjb25zdCBldmVudENvbnRyYWN0ID0gbmV3IEVhcmx5RXZlbnRDb250cmFjdChlYXJseUpzYWN0aW9uVHJhY2tlcltmaWVsZF1bYXBwSWRdLCBjb250YWluZXIpO1xuICBpZiAoZXZlbnRUeXBlcykgZXZlbnRDb250cmFjdC5hZGRFdmVudHMoZXZlbnRUeXBlcyk7XG4gIGlmIChjYXB0dXJlRXZlbnRUeXBlcykgZXZlbnRDb250cmFjdC5hZGRFdmVudHMoY2FwdHVyZUV2ZW50VHlwZXMsIHRydWUpO1xufVxuIl19
@@ -10,6 +10,6 @@
10
10
  */
11
11
  export var Restriction;
12
12
  (function (Restriction) {
13
- Restriction[Restriction["I_AM_THE_JSACTION_FRAMEWORK"] = 1] = "I_AM_THE_JSACTION_FRAMEWORK";
13
+ Restriction[Restriction["I_AM_THE_JSACTION_FRAMEWORK"] = 0] = "I_AM_THE_JSACTION_FRAMEWORK";
14
14
  })(Restriction || (Restriction = {}));
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHJpY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvc3JjL3Jlc3RyaWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVIOztHQUVHO0FBRUgsTUFBTSxDQUFOLElBQVksV0FFWDtBQUZELFdBQVksV0FBVztJQUNyQiwyRkFBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBRlcsV0FBVyxLQUFYLFdBQVcsUUFFdEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEFuIGVudW0gdG8gY29udHJvbCB3aG8gY2FuIGNhbGwgY2VydGFpbiBqc2FjdGlvbiBBUElzLlxuICovXG5cbmV4cG9ydCBlbnVtIFJlc3RyaWN0aW9uIHtcbiAgSV9BTV9USEVfSlNBQ1RJT05fRlJBTUVXT1JLID0gMSxcbn1cbiJdfQ==
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHJpY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3ByaW1pdGl2ZXMvZXZlbnQtZGlzcGF0Y2gvc3JjL3Jlc3RyaWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVIOztHQUVHO0FBRUgsTUFBTSxDQUFOLElBQVksV0FFWDtBQUZELFdBQVksV0FBVztJQUNyQiwyRkFBMkIsQ0FBQTtBQUM3QixDQUFDLEVBRlcsV0FBVyxLQUFYLFdBQVcsUUFFdEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEFuIGVudW0gdG8gY29udHJvbCB3aG8gY2FuIGNhbGwgY2VydGFpbiBqc2FjdGlvbiBBUElzLlxuICovXG5cbmV4cG9ydCBlbnVtIFJlc3RyaWN0aW9uIHtcbiAgSV9BTV9USEVfSlNBQ1RJT05fRlJBTUVXT1JLLFxufVxuIl19
@@ -5,7 +5,7 @@
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
- import { internalProvideZoneChangeDetection } from '../change_detection/scheduling/ng_zone_scheduling';
8
+ import { internalProvideZoneChangeDetection, PROVIDED_NG_ZONE, } from '../change_detection/scheduling/ng_zone_scheduling';
9
9
  import { ErrorHandler } from '../error_handler';
10
10
  import { RuntimeError } from '../errors';
11
11
  import { DEFAULT_LOCALE_ID } from '../i18n/localization';
@@ -19,6 +19,7 @@ import { EnvironmentNgModuleRefAdapter } from '../render3/ng_module_ref';
19
19
  import { NgZone } from '../zone/ng_zone';
20
20
  import { ApplicationInitStatus } from './application_init';
21
21
  import { _callAndReportToErrorHandler, ApplicationRef } from './application_ref';
22
+ import { PROVIDED_ZONELESS } from '../change_detection/scheduling/zoneless_scheduling';
22
23
  /**
23
24
  * Internal create application API that implements the core application creation logic and optional
24
25
  * bootstrap logic.
@@ -53,8 +54,14 @@ export function internalCreateApplication(config) {
53
54
  return ngZone.run(() => {
54
55
  envInjector.resolveInjectorInitializers();
55
56
  const exceptionHandler = envInjector.get(ErrorHandler, null);
56
- if ((typeof ngDevMode === 'undefined' || ngDevMode) && !exceptionHandler) {
57
- throw new RuntimeError(402 /* RuntimeErrorCode.MISSING_REQUIRED_INJECTABLE_IN_BOOTSTRAP */, 'No `ErrorHandler` found in the Dependency Injection tree.');
57
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
58
+ if (!exceptionHandler) {
59
+ throw new RuntimeError(402 /* RuntimeErrorCode.MISSING_REQUIRED_INJECTABLE_IN_BOOTSTRAP */, 'No `ErrorHandler` found in the Dependency Injection tree.');
60
+ }
61
+ if (envInjector.get(PROVIDED_ZONELESS) && envInjector.get(PROVIDED_NG_ZONE)) {
62
+ throw new RuntimeError(408 /* RuntimeErrorCode.PROVIDED_BOTH_ZONE_AND_ZONELESS */, 'Invalid change detection configuration: ' +
63
+ 'provideZoneChangeDetection and provideExperimentalZonelessChangeDetection cannot be used together.');
64
+ }
58
65
  }
59
66
  let onErrorSubscription;
60
67
  ngZone.runOutsideAngular(() => {
@@ -96,4 +103,4 @@ export function internalCreateApplication(config) {
96
103
  return Promise.reject(e);
97
104
  }
98
105
  }
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlX2FwcGxpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvYXBwbGljYXRpb24vY3JlYXRlX2FwcGxpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUlILE9BQU8sRUFBQyxrQ0FBa0MsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBR3JHLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsWUFBWSxFQUFtQixNQUFNLFdBQVcsQ0FBQztBQUN6RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFFckUsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbkUsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDaEUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV2QyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUMsNEJBQTRCLEVBQUUsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFL0U7Ozs7Ozs7Ozs7R0FVRztBQUVILE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxNQUl6QztJQUNDLElBQUksQ0FBQztRQUNILE1BQU0sRUFBQyxhQUFh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QUFJLGlCQUFpQixDQUFDLENBQUM7b0JBRTNDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQy9DLElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUNoQyxNQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUNsQyxDQUFDO29CQUNELElBQUksT0FBTyxTQUFTLEtBQUssV0FBVyxJQUFJLFNBQVMsRUFBRSxDQUFDO3dCQUNsRCxNQUFNLHVCQUF1QixHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQzt3QkFDekUsdUJBQXVCLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2xDLENBQUM7b0JBQ0QsT0FBTyxNQUFNLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtpbnRlcm5hbFByb3ZpZGVab25lQ2hhbmdlRGV0ZWN0aW9ufSBmcm9tICcuLi9jaGFuZ2VfZGV0ZWN0aW9uL3NjaGVkdWxpbmcvbmdfem9uZV9zY2hlZHVsaW5nJztcbmltcG9ydCB7RW52aXJvbm1lbnRQcm92aWRlcnMsIFByb3ZpZGVyLCBTdGF0aWNQcm92aWRlcn0gZnJvbSAnLi4vZGkvaW50ZXJmYWNlL3Byb3ZpZGVyJztcbmltcG9ydCB7RW52aXJvbm1lbnRJbmplY3Rvcn0gZnJvbSAnLi4vZGkvcjNfaW5qZWN0b3InO1xuaW1wb3J0IHtFcnJvckhhbmRsZXJ9IGZyb20gJy4uL2Vycm9yX2hhbmRsZXInO1xuaW1wb3J0IHtSdW50aW1lRXJyb3IsIFJ1bnRpbWVFcnJvckNvZGV9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQge0RFRkFVTFRfTE9DQUxFX0lEfSBmcm9tICcuLi9pMThuL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge0xPQ0FMRV9JRH0gZnJvbSAnLi4vaTE4bi90b2tlbnMnO1xuaW1wb3J0IHtJbWFnZVBlcmZvcm1hbmNlV2FybmluZ30gZnJvbSAnLi4vaW1hZ2VfcGVyZm9ybWFuY2Vfd2FybmluZyc7XG5pbXBvcnQge1R5cGV9IGZyb20gJy4uL2ludGVyZmFjZS90eXBlJztcbmltcG9ydCB7Y3JlYXRlT3JSZXVzZVBsYXRmb3JtSW5qZWN0b3J9IGZyb20gJy4uL3BsYXRmb3JtL3BsYXRmb3JtJztcbmltcG9ydCB7UExBVEZPUk1fREVTVFJPWV9MSVNURU5FUlN9IGZyb20gJy4uL3BsYXRmb3JtL3BsYXRmb3JtX3JlZic7XG5pbXBvcnQge2Fzc2VydFN0YW5kYWxvbmVDb21wb25lbnRUeXBlfSBmcm9tICcuLi9yZW5kZXIzL2Vycm9ycyc7XG5pbXBvcnQge3NldExvY2FsZUlkfSBmcm9tICcuLi9yZW5kZXIzL2kxOG4vaTE4bl9sb2NhbGVfaWQnO1xuaW1wb3J0IHtFbnZpcm9ubWVudE5nTW9kdWxlUmVmQWRhcHRlcn0gZnJvbSAnLi4vcmVuZGVyMy9uZ19tb2R1bGVfcmVmJztcbmltcG9ydCB7Tmdab25lfSBmcm9tICcuLi96b25lL25nX3pvbmUnO1xuXG5pbXBvcnQge0FwcGxpY2F0aW9uSW5pdFN0YXR1c30gZnJvbSAnLi9hcHBsaWNhdGlvbl9pbml0JztcbmltcG9ydCB7X2NhbGxBbmRSZXBvcnRUb0Vycm9ySGFuZGxlciwgQXBwbGljYXRpb25SZWZ9IGZyb20gJy4vYXBwbGljYXRpb25fcmVmJztcblxuLyoqXG4gKiBJbnRlcm5hbCBjcmVhdGUgYXBwbGljYXRpb24gQVBJIHRoYXQgaW1wbGVtZW50cyB0aGUgY29yZSBhcHBsaWNhdGlvbiBjcmVhdGlvbiBsb2dpYyBhbmQgb3B0aW9uYWxcbiAqIGJvb3RzdHJhcCBsb2dpYy5cbiAqXG4gKiBQbGF0Zm9ybXMgKHN1Y2ggYXMgYHBsYXRmb3JtLWJyb3dzZXJgKSBtYXkgcmVxdWlyZSBkaWZmZXJlbnQgc2V0IG9mIGFwcGxpY2F0aW9uIGFuZCBwbGF0Zm9ybVxuICogcHJvdmlkZXJzIGZvciBhbiBhcHBsaWNhdGlvbiB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEFzIGEgcmVzdWx0LCBwbGF0Zm9ybXMgbWF5IHVzZSB0aGlzIGZ1bmN0aW9uXG4gKiBpbnRlcm5hbGx5IGFuZCBzdXBwbHkgdGhlIG5lY2Vzc2FyeSBwcm92aWRlcnMgZHVyaW5nIHRoZSBib290c3RyYXAsIHdoaWxlIGV4cG9zaW5nXG4gKiBwbGF0Zm9ybS1zcGVjaWZpYyBBUElzIGFzIGEgcGFydCBvZiB0aGVpciBwdWJsaWMgQVBJLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJldHVybnMgYW4gYEFwcGxpY2F0aW9uUmVmYCBpbnN0YW5jZSBvbmNlIHJlc29sdmVkLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcm5hbENyZWF0ZUFwcGxpY2F0aW9uKGNvbmZpZzoge1xuICByb290Q29tcG9uZW50PzogVHlwZTx1bmtub3duPjtcbiAgYXBwUHJvdmlkZXJzPzogQXJyYXk8UHJvdmlkZXIgfCBFbnZpcm9ubWVudFByb3ZpZGVycz47XG4gIHBsYXRmb3JtUHJvdmlkZXJzPzogUHJvdmlkZXJbXTtcbn0pOiBQcm9taXNlPEFwcGxpY2F0aW9uUmVmPiB7XG4gIHRyeSB7XG4gICAgY29uc3Qge3Jvb3RDb21wb25lbnQsIGFwcFByb3ZpZGVycywgcGxhdGZvcm1Qcm92aWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKCh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmIHJvb3RDb21wb25lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXNzZXJ0U3RhbmRhbG9uZUNvbXBvbmVudFR5cGUocm9vdENvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGxhdGZvcm1JbmplY3RvciA9IGNyZWF0ZU9yUmV1c2VQbGF0Zm9ybUluamVjdG9yKHBsYXRmb3JtUHJvdmlkZXJzIGFzIFN0YXRpY1Byb3ZpZGVyW10pO1xuXG4gICAgLy8gQ3JlYXRlIHJvb3QgYXBwbGljYXRpb24gaW5qZWN0b3IgYmFzZWQgb24gYSBzZXQgb2YgcHJvdmlkZXJzIGNvbmZpZ3VyZWQgYXQgdGhlIHBsYXRmb3JtXG4gICAgLy8gYm9vdHN0cmFwIGxldmVsIGFzIHdlbGwgYXMgcHJvdmlkZXJzIHBhc3NlZCB0byB0aGUgYm9vdHN0cmFwIGNhbGwgYnkgYSB1c2VyLlxuICAgIGNvbnN0IGFsbEFwcFByb3ZpZGVycyA9IFtpbnRlcm5hbFByb3ZpZGVab25lQ2hhbmdlRGV0ZWN0aW9uKHt9KSwgLi4uKGFwcFByb3ZpZGVycyB8fCBbXSldO1xuICAgIGNvbnN0IGFkYXB0ZXIgPSBuZXcgRW52aXJvbm1lbnROZ01vZHVsZVJlZkFkYXB0ZXIoe1xuICAgICAgcHJvdmlkZXJzOiBhbGxBcHBQcm92aWRlcnMsXG4gICAgICBwYXJlbnQ6IHBsYXRmb3JtSW5qZWN0b3IgYXMgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgIGRlYnVnTmFtZTogdHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlID8gJ0Vudmlyb25tZW50IEluamVjdG9yJyA6ICcnLFxuICAgICAgLy8gV2Ugc2tpcCBlbnZpcm9ubWVudCBpbml0aWFsaXplcnMgYmVjYXVzZSB3ZSBuZWVkIHRvIHJ1biB0aGVtIGluc2lkZSB0aGUgTmdab25lLCB3aGljaFxuICAgICAgLy8gaGFwcGVucyBhZnRlciB3ZSBnZXQgdGhlIE5nWm9uZSBpbnN0YW5jZSBmcm9tIHRoZSBJbmplY3Rvci5cbiAgICAgIHJ1bkVudmlyb25tZW50SW5pdGlhbGl6ZXJzOiBmYWxzZSxcbiAgICB9KTtcbiAgICBjb25zdCBlbnZJbmplY3RvciA9IGFkYXB0ZXIuaW5qZWN0b3I7XG4gICAgY29uc3Qgbmdab25lID0gZW52SW5qZWN0b3IuZ2V0KE5nWm9uZSk7XG5cbiAgICByZXR1cm4gbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICBlbnZJbmplY3Rvci5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKTtcbiAgICAgIGNvbnN0IGV4Y2VwdGlvbkhhbmRsZXI6IEVycm9ySGFuZGxlciB8IG51bGwgPSBlbnZJbmplY3Rvci5nZXQoRXJyb3JIYW5kbGVyLCBudWxsKTtcbiAgICAgIGlmICgodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiAhZXhjZXB0aW9uSGFuZGxlcikge1xuICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFxuICAgICAgICAgIFJ1bnRpbWVFcnJvckNvZGUuTUlTU0lOR19SRVFVSVJFRF9JTkpFQ1RBQkxFX0lOX0JPT1RTVFJBUCxcbiAgICAgICAgICAnTm8gYEVycm9ySGFuZGxlcmAgZm91bmQgaW4gdGhlIERlcGVuZGVuY3kgSW5qZWN0aW9uIHRyZWUuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgbGV0IG9uRXJyb3JTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICAgIG5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIG9uRXJyb3JTdWJzY3JpcHRpb24gPSBuZ1pvbmUub25FcnJvci5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICBleGNlcHRpb25IYW5kbGVyIS5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gSWYgdGhlIHdob2xlIHBsYXRmb3JtIGlzIGRlc3Ryb3llZCwgaW52b2tlIHRoZSBgZGVzdHJveWAgbWV0aG9kXG4gICAgICAvLyBmb3IgYWxsIGJvb3RzdHJhcHBlZCBhcHBsaWNhdGlvbnMgYXMgd2VsbC5cbiAgICAgIGNvbnN0IGRlc3Ryb3lMaXN0ZW5lciA9ICgpID0+IGVudkluamVjdG9yLmRlc3Ryb3koKTtcbiAgICAgIGNvbnN0IG9uUGxhdGZvcm1EZXN0cm95TGlzdGVuZXJzID0gcGxhdGZvcm1JbmplY3Rvci5nZXQoUExBVEZPUk1fREVTVFJPWV9MSVNURU5FUlMpO1xuICAgICAgb25QbGF0Zm9ybURlc3Ryb3lMaXN0ZW5lcnMuYWRkKGRlc3Ryb3lMaXN0ZW5lcik7XG5cbiAgICAgIGVudkluamVjdG9yLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICAgIG9uRXJyb3JTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgb25QbGF0Zm9ybURlc3Ryb3lMaXN0ZW5lcnMuZGVsZXRlKGRlc3Ryb3lMaXN0ZW5lcik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIF9jYWxsQW5kUmVwb3J0VG9FcnJvckhhbmRsZXIoZXhjZXB0aW9uSGFuZGxlciEsIG5nWm9uZSwgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbml0U3RhdHVzID0gZW52SW5qZWN0b3IuZ2V0KEFwcGxpY2F0aW9uSW5pdFN0YXR1cyk7XG4gICAgICAgIGluaXRTdGF0dXMucnVuSW5pdGlhbGl6ZXJzKCk7XG5cbiAgICAgICAgcmV0dXJuIGluaXRTdGF0dXMuZG9uZVByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbG9jYWxlSWQgPSBlbnZJbmplY3Rvci5nZXQoTE9DQUxFX0lELCBERUZBVUxUX0xPQ0FMRV9JRCk7XG4gICAgICAgICAgc2V0TG9jYWxlSWQobG9jYWxlSWQgfHwgREVGQVVMVF9MT0NBTEVfSUQpO1xuXG4gICAgICAgICAgY29uc3QgYXBwUmVmID0gZW52SW5qZWN0b3IuZ2V0KEFwcGxpY2F0aW9uUmVmKTtcbiAgICAgICAgICBpZiAocm9vdENvbXBvbmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhcHBSZWYuYm9vdHN0cmFwKHJvb3RDb21wb25lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBpbWFnZVBlcmZvcm1hbmNlU2VydmljZSA9IGVudkluamVjdG9yLmdldChJbWFnZVBlcmZvcm1hbmNlV2FybmluZyk7XG4gICAgICAgICAgICBpbWFnZVBlcmZvcm1hbmNlU2VydmljZS5zdGFydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYXBwUmVmO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xuICB9XG59XG4iXX0=
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlX2FwcGxpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvYXBwbGljYXRpb24vY3JlYXRlX2FwcGxpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUlILE9BQU8sRUFDTCxrQ0FBa0MsRUFDbEMsZ0JBQWdCLEdBQ2pCLE1BQU0sbURBQW1ELENBQUM7QUFHM0QsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxZQUFZLEVBQW1CLE1BQU0sV0FBVyxDQUFDO0FBQ3pELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUVyRSxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRSxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXZDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBQyw0QkFBNEIsRUFBRSxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUMvRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUVyRjs7Ozs7Ozs7OztHQVVHO0FBRUgsTUFB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QUFFO2dCQUNsRSxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQzFELFVBQVUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFFN0IsT0FBTyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ3RDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUM7b0JBQy9ELFdBQVcsQ0FBQyxRQUFRLElBQUksaUJBQWlCLENBQUMsQ0FBQztvQkFFM0MsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDL0MsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQ2hDLE1BQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ2xDLENBQUM7b0JBQ0QsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxFQUFFLENBQUM7d0JBQ2xELE1BQU0sdUJBQXVCLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO3dCQUN6RSx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDbEMsQ0FBQztvQkFDRCxPQUFPLE1BQU0sQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBpbnRlcm5hbFByb3ZpZGVab25lQ2hhbmdlRGV0ZWN0aW9uLFxuICBQUk9WSURFRF9OR19aT05FLFxufSBmcm9tICcuLi9jaGFuZ2VfZGV0ZWN0aW9uL3NjaGVkdWxpbmcvbmdfem9uZV9zY2hlZHVsaW5nJztcbmltcG9ydCB7RW52aXJvbm1lbnRQcm92aWRlcnMsIFByb3ZpZGVyLCBTdGF0aWNQcm92aWRlcn0gZnJvbSAnLi4vZGkvaW50ZXJmYWNlL3Byb3ZpZGVyJztcbmltcG9ydCB7RW52aXJvbm1lbnRJbmplY3Rvcn0gZnJvbSAnLi4vZGkvcjNfaW5qZWN0b3InO1xuaW1wb3J0IHtFcnJvckhhbmRsZXJ9IGZyb20gJy4uL2Vycm9yX2hhbmRsZXInO1xuaW1wb3J0IHtSdW50aW1lRXJyb3IsIFJ1bnRpbWVFcnJvckNvZGV9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQge0RFRkFVTFRfTE9DQUxFX0lEfSBmcm9tICcuLi9pMThuL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge0xPQ0FMRV9JRH0gZnJvbSAnLi4vaTE4bi90b2tlbnMnO1xuaW1wb3J0IHtJbWFnZVBlcmZvcm1hbmNlV2FybmluZ30gZnJvbSAnLi4vaW1hZ2VfcGVyZm9ybWFuY2Vfd2FybmluZyc7XG5pbXBvcnQge1R5cGV9IGZyb20gJy4uL2ludGVyZmFjZS90eXBlJztcbmltcG9ydCB7Y3JlYXRlT3JSZXVzZVBsYXRmb3JtSW5qZWN0b3J9IGZyb20gJy4uL3BsYXRmb3JtL3BsYXRmb3JtJztcbmltcG9ydCB7UExBVEZPUk1fREVTVFJPWV9MSVNURU5FUlN9IGZyb20gJy4uL3BsYXRmb3JtL3BsYXRmb3JtX3JlZic7XG5pbXBvcnQge2Fzc2VydFN0YW5kYWxvbmVDb21wb25lbnRUeXBlfSBmcm9tICcuLi9yZW5kZXIzL2Vycm9ycyc7XG5pbXBvcnQge3NldExvY2FsZUlkfSBmcm9tICcuLi9yZW5kZXIzL2kxOG4vaTE4bl9sb2NhbGVfaWQnO1xuaW1wb3J0IHtFbnZpcm9ubWVudE5nTW9kdWxlUmVmQWRhcHRlcn0gZnJvbSAnLi4vcmVuZGVyMy9uZ19tb2R1bGVfcmVmJztcbmltcG9ydCB7Tmdab25lfSBmcm9tICcuLi96b25lL25nX3pvbmUnO1xuXG5pbXBvcnQge0FwcGxpY2F0aW9uSW5pdFN0YXR1c30gZnJvbSAnLi9hcHBsaWNhdGlvbl9pbml0JztcbmltcG9ydCB7X2NhbGxBbmRSZXBvcnRUb0Vycm9ySGFuZGxlciwgQXBwbGljYXRpb25SZWZ9IGZyb20gJy4vYXBwbGljYXRpb25fcmVmJztcbmltcG9ydCB7UFJPVklERURfWk9ORUxFU1N9IGZyb20gJy4uL2NoYW5nZV9kZXRlY3Rpb24vc2NoZWR1bGluZy96b25lbGVzc19zY2hlZHVsaW5nJztcblxuLyoqXG4gKiBJbnRlcm5hbCBjcmVhdGUgYXBwbGljYXRpb24gQVBJIHRoYXQgaW1wbGVtZW50cyB0aGUgY29yZSBhcHBsaWNhdGlvbiBjcmVhdGlvbiBsb2dpYyBhbmQgb3B0aW9uYWxcbiAqIGJvb3RzdHJhcCBsb2dpYy5cbiAqXG4gKiBQbGF0Zm9ybXMgKHN1Y2ggYXMgYHBsYXRmb3JtLWJyb3dzZXJgKSBtYXkgcmVxdWlyZSBkaWZmZXJlbnQgc2V0IG9mIGFwcGxpY2F0aW9uIGFuZCBwbGF0Zm9ybVxuICogcHJvdmlkZXJzIGZvciBhbiBhcHBsaWNhdGlvbiB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEFzIGEgcmVzdWx0LCBwbGF0Zm9ybXMgbWF5IHVzZSB0aGlzIGZ1bmN0aW9uXG4gKiBpbnRlcm5hbGx5IGFuZCBzdXBwbHkgdGhlIG5lY2Vzc2FyeSBwcm92aWRlcnMgZHVyaW5nIHRoZSBib290c3RyYXAsIHdoaWxlIGV4cG9zaW5nXG4gKiBwbGF0Zm9ybS1zcGVjaWZpYyBBUElzIGFzIGEgcGFydCBvZiB0aGVpciBwdWJsaWMgQVBJLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJldHVybnMgYW4gYEFwcGxpY2F0aW9uUmVmYCBpbnN0YW5jZSBvbmNlIHJlc29sdmVkLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcm5hbENyZWF0ZUFwcGxpY2F0aW9uKGNvbmZpZzoge1xuICByb290Q29tcG9uZW50PzogVHlwZTx1bmtub3duPjtcbiAgYXBwUHJvdmlkZXJzPzogQXJyYXk8UHJvdmlkZXIgfCBFbnZpcm9ubWVudFByb3ZpZGVycz47XG4gIHBsYXRmb3JtUHJvdmlkZXJzPzogUHJvdmlkZXJbXTtcbn0pOiBQcm9taXNlPEFwcGxpY2F0aW9uUmVmPiB7XG4gIHRyeSB7XG4gICAgY29uc3Qge3Jvb3RDb21wb25lbnQsIGFwcFByb3ZpZGVycywgcGxhdGZvcm1Qcm92aWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKCh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpICYmIHJvb3RDb21wb25lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXNzZXJ0U3RhbmRhbG9uZUNvbXBvbmVudFR5cGUocm9vdENvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGxhdGZvcm1JbmplY3RvciA9IGNyZWF0ZU9yUmV1c2VQbGF0Zm9ybUluamVjdG9yKHBsYXRmb3JtUHJvdmlkZXJzIGFzIFN0YXRpY1Byb3ZpZGVyW10pO1xuXG4gICAgLy8gQ3JlYXRlIHJvb3QgYXBwbGljYXRpb24gaW5qZWN0b3IgYmFzZWQgb24gYSBzZXQgb2YgcHJvdmlkZXJzIGNvbmZpZ3VyZWQgYXQgdGhlIHBsYXRmb3JtXG4gICAgLy8gYm9vdHN0cmFwIGxldmVsIGFzIHdlbGwgYXMgcHJvdmlkZXJzIHBhc3NlZCB0byB0aGUgYm9vdHN0cmFwIGNhbGwgYnkgYSB1c2VyLlxuICAgIGNvbnN0IGFsbEFwcFByb3ZpZGVycyA9IFtpbnRlcm5hbFByb3ZpZGVab25lQ2hhbmdlRGV0ZWN0aW9uKHt9KSwgLi4uKGFwcFByb3ZpZGVycyB8fCBbXSldO1xuICAgIGNvbnN0IGFkYXB0ZXIgPSBuZXcgRW52aXJvbm1lbnROZ01vZHVsZVJlZkFkYXB0ZXIoe1xuICAgICAgcHJvdmlkZXJzOiBhbGxBcHBQcm92aWRlcnMsXG4gICAgICBwYXJlbnQ6IHBsYXRmb3JtSW5qZWN0b3IgYXMgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgIGRlYnVnTmFtZTogdHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlID8gJ0Vudmlyb25tZW50IEluamVjdG9yJyA6ICcnLFxuICAgICAgLy8gV2Ugc2tpcCBlbnZpcm9ubWVudCBpbml0aWFsaXplcnMgYmVjYXVzZSB3ZSBuZWVkIHRvIHJ1biB0aGVtIGluc2lkZSB0aGUgTmdab25lLCB3aGljaFxuICAgICAgLy8gaGFwcGVucyBhZnRlciB3ZSBnZXQgdGhlIE5nWm9uZSBpbnN0YW5jZSBmcm9tIHRoZSBJbmplY3Rvci5cbiAgICAgIHJ1bkVudmlyb25tZW50SW5pdGlhbGl6ZXJzOiBmYWxzZSxcbiAgICB9KTtcbiAgICBjb25zdCBlbnZJbmplY3RvciA9IGFkYXB0ZXIuaW5qZWN0b3I7XG4gICAgY29uc3Qgbmdab25lID0gZW52SW5qZWN0b3IuZ2V0KE5nWm9uZSk7XG5cbiAgICByZXR1cm4gbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICBlbnZJbmplY3Rvci5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKTtcbiAgICAgIGNvbnN0IGV4Y2VwdGlvbkhhbmRsZXI6IEVycm9ySGFuZGxlciB8IG51bGwgPSBlbnZJbmplY3Rvci5nZXQoRXJyb3JIYW5kbGVyLCBudWxsKTtcbiAgICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICAgICAgaWYgKCFleGNlcHRpb25IYW5kbGVyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgICAgICAgIFJ1bnRpbWVFcnJvckNvZGUuTUlTU0lOR19SRVFVSVJFRF9JTkpFQ1RBQkxFX0lOX0JPT1RTVFJBUCxcbiAgICAgICAgICAgICdObyBgRXJyb3JIYW5kbGVyYCBmb3VuZCBpbiB0aGUgRGVwZW5kZW5jeSBJbmplY3Rpb24gdHJlZS4nLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudkluamVjdG9yLmdldChQUk9WSURFRF9aT05FTEVTUykgJiYgZW52SW5qZWN0b3IuZ2V0KFBST1ZJREVEX05HX1pPTkUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihcbiAgICAgICAgICAgIFJ1bnRpbWVFcnJvckNvZGUuUFJPVklERURfQk9USF9aT05FX0FORF9aT05FTEVTUyxcbiAgICAgICAgICAgICdJbnZhbGlkIGNoYW5nZSBkZXRlY3Rpb24gY29uZmlndXJhdGlvbjogJyArXG4gICAgICAgICAgICAgICdwcm92aWRlWm9uZUNoYW5nZURldGVjdGlvbiBhbmQgcHJvdmlkZUV4cGVyaW1lbnRhbFpvbmVsZXNzQ2hhbmdlRGV0ZWN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLicsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgb25FcnJvclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgICAgbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgb25FcnJvclN1YnNjcmlwdGlvbiA9IG5nWm9uZS5vbkVycm9yLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXIhLmhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJZiB0aGUgd2hvbGUgcGxhdGZvcm0gaXMgZGVzdHJveWVkLCBpbnZva2UgdGhlIGBkZXN0cm95YCBtZXRob2RcbiAgICAgIC8vIGZvciBhbGwgYm9vdHN0cmFwcGVkIGFwcGxpY2F0aW9ucyBhcyB3ZWxsLlxuICAgICAgY29uc3QgZGVzdHJveUxpc3RlbmVyID0gKCkgPT4gZW52SW5qZWN0b3IuZGVzdHJveSgpO1xuICAgICAgY29uc3Qgb25QbGF0Zm9ybURlc3Ryb3lMaXN0ZW5lcnMgPSBwbGF0Zm9ybUluamVjdG9yLmdldChQTEFURk9STV9ERVNUUk9ZX0xJU1RFTkVSUyk7XG4gICAgICBvblBsYXRmb3JtRGVzdHJveUxpc3RlbmVycy5hZGQoZGVzdHJveUxpc3RlbmVyKTtcblxuICAgICAgZW52SW5qZWN0b3Iub25EZXN0cm95KCgpID0+IHtcbiAgICAgICAgb25FcnJvclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICBvblBsYXRmb3JtRGVzdHJveUxpc3RlbmVycy5kZWxldGUoZGVzdHJveUxpc3RlbmVyKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gX2NhbGxBbmRSZXBvcnRUb0Vycm9ySGFuZGxlcihleGNlcHRpb25IYW5kbGVyISwgbmdab25lLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluaXRTdGF0dXMgPSBlbnZJbmplY3Rvci5nZXQoQXBwbGljYXRpb25Jbml0U3RhdHVzKTtcbiAgICAgICAgaW5pdFN0YXR1cy5ydW5Jbml0aWFsaXplcnMoKTtcblxuICAgICAgICByZXR1cm4gaW5pdFN0YXR1cy5kb25lUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBsb2NhbGVJZCA9IGVudkluamVjdG9yLmdldChMT0NBTEVfSUQsIERFRkFVTFRfTE9DQUxFX0lEKTtcbiAgICAgICAgICBzZXRMb2NhbGVJZChsb2NhbGVJZCB8fCBERUZBVUxUX0xPQ0FMRV9JRCk7XG5cbiAgICAgICAgICBjb25zdCBhcHBSZWYgPSBlbnZJbmplY3Rvci5nZXQoQXBwbGljYXRpb25SZWYpO1xuICAgICAgICAgIGlmIChyb290Q29tcG9uZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFwcFJlZi5ib290c3RyYXAocm9vdENvbXBvbmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlUGVyZm9ybWFuY2VTZXJ2aWNlID0gZW52SW5qZWN0b3IuZ2V0KEltYWdlUGVyZm9ybWFuY2VXYXJuaW5nKTtcbiAgICAgICAgICAgIGltYWdlUGVyZm9ybWFuY2VTZXJ2aWNlLnN0YXJ0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhcHBSZWY7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG4gIH1cbn1cbiJdfQ==