@angular/core 18.0.0-rc.0 → 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 (73) 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 +221 -0
  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 +52 -176
  7. package/esm2022/primitives/event-dispatch/src/earlyeventcontract.mjs +15 -9
  8. package/esm2022/primitives/event-dispatch/src/event_contract_defines.mjs +1 -19
  9. package/esm2022/primitives/event-dispatch/src/eventcontract.mjs +24 -362
  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 +16 -17
  14. package/esm2022/primitives/event-dispatch/src/restriction.mjs +2 -2
  15. package/esm2022/src/application/application_ref.mjs +6 -3
  16. package/esm2022/src/application/create_application.mjs +12 -5
  17. package/esm2022/src/change_detection/scheduling/exhaustive_check_no_changes.mjs +150 -0
  18. package/esm2022/src/change_detection/scheduling/ng_zone_scheduling.mjs +6 -4
  19. package/esm2022/src/change_detection/scheduling/zoneless_scheduling.mjs +3 -1
  20. package/esm2022/src/change_detection/scheduling/zoneless_scheduling_impl.mjs +9 -6
  21. package/esm2022/src/core.mjs +2 -1
  22. package/esm2022/src/core_private_export.mjs +2 -1
  23. package/esm2022/src/core_reactivity_export_internal.mjs +1 -3
  24. package/esm2022/src/core_render3_private_export.mjs +1 -3
  25. package/esm2022/src/defer/instructions.mjs +20 -12
  26. package/esm2022/src/defer/interfaces.mjs +1 -3
  27. package/esm2022/src/errors.mjs +1 -1
  28. package/esm2022/src/hydration/event_replay.mjs +67 -79
  29. package/esm2022/src/hydration/utils.mjs +1 -2
  30. package/esm2022/src/metadata/directives.mjs +1 -1
  31. package/esm2022/src/platform/platform_ref.mjs +10 -4
  32. package/esm2022/src/render3/after_render_hooks.mjs +4 -2
  33. package/esm2022/src/render3/component_ref.mjs +1 -1
  34. package/esm2022/src/render3/index.mjs +1 -3
  35. package/esm2022/src/render3/instructions/change_detection.mjs +13 -10
  36. package/esm2022/src/render3/instructions/listener.mjs +12 -1
  37. package/esm2022/src/render3/interfaces/public_definitions.mjs +1 -1
  38. package/esm2022/src/render3/state.mjs +14 -4
  39. package/esm2022/src/render3/view_ref.mjs +3 -2
  40. package/esm2022/src/util/callback_scheduler.mjs +12 -26
  41. package/esm2022/src/version.mjs +1 -1
  42. package/esm2022/src/zone/ng_zone.mjs +9 -23
  43. package/esm2022/testing/src/component_fixture.mjs +2 -4
  44. package/esm2022/testing/src/defer.mjs +1 -2
  45. package/esm2022/testing/src/logger.mjs +3 -3
  46. package/esm2022/testing/src/test_bed.mjs +1 -3
  47. package/esm2022/testing/src/test_bed_compiler.mjs +3 -6
  48. package/event-dispatch-contract.min.js +1 -1
  49. package/fesm2022/core.mjs +800 -660
  50. package/fesm2022/core.mjs.map +1 -1
  51. package/fesm2022/primitives/event-dispatch.mjs +484 -807
  52. package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
  53. package/fesm2022/primitives/signals.mjs +1 -1
  54. package/fesm2022/rxjs-interop.mjs +1 -1
  55. package/fesm2022/testing.mjs +4 -10
  56. package/fesm2022/testing.mjs.map +1 -1
  57. package/index.d.ts +36 -4
  58. package/package.json +1 -1
  59. package/primitives/event-dispatch/index.d.ts +111 -162
  60. package/primitives/signals/index.d.ts +1 -1
  61. package/rxjs-interop/index.d.ts +1 -1
  62. package/schematics/migrations/http-providers/bundle.js +110 -71
  63. package/schematics/migrations/http-providers/bundle.js.map +3 -3
  64. package/schematics/migrations/invalid-two-way-bindings/bundle.js +197 -167
  65. package/schematics/migrations/invalid-two-way-bindings/bundle.js.map +2 -2
  66. package/schematics/ng-generate/control-flow-migration/bundle.js +205 -175
  67. package/schematics/ng-generate/control-flow-migration/bundle.js.map +2 -2
  68. package/schematics/ng-generate/standalone-migration/bundle.js +481 -451
  69. package/schematics/ng-generate/standalone-migration/bundle.js.map +2 -2
  70. package/testing/index.d.ts +1 -4
  71. package/esm2022/primitives/event-dispatch/src/base_dispatcher.mjs +0 -96
  72. package/esm2022/primitives/event-dispatch/src/custom_events.mjs +0 -63
  73. 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
@@ -5,28 +5,27 @@
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 { EventContractContainer } from './event_contract_container';
9
- import { EventContract } from './eventcontract';
8
+ import { EarlyEventContract } from './earlyeventcontract';
10
9
  /**
11
10
  * Provides a factory function for bootstrapping an event contract on a
12
- * window object.
13
- * @param field The property on the window that the event contract will be placed on.
11
+ * specified object (by default, exposed on the `window`).
12
+ * @param field The property on the object that the event contract will be placed on.
14
13
  * @param container The container that listens to events
15
14
  * @param appId A given identifier for an application. If there are multiple apps on the page
16
15
  * then this is how contracts can be initialized for each one.
17
- * @param events An array of event names that should be listened to.
18
- * @param anyWindow The global window object that should receive the event contract.
19
- * @returns The `event` contract. This is both assigned to `anyWindow` and returned for testing.
16
+ * @param eventTypes An array of event names that should be listened to.
17
+ * @param captureEventTypes An array of event names that should be listened to with capture.
18
+ * @param earlyJsactionTracker The object that should receive the event contract.
20
19
  */
21
- export function bootstrapEventContract(field, container, appId, events, anyWindow = window) {
22
- if (!anyWindow[field]) {
23
- anyWindow[field] = {};
20
+ export function bootstrapEarlyEventContract(field, container, appId, eventTypes, captureEventTypes, earlyJsactionTracker = window) {
21
+ if (!earlyJsactionTracker[field]) {
22
+ earlyJsactionTracker[field] = {};
24
23
  }
25
- const eventContract = new EventContract(new EventContractContainer(container));
26
- anyWindow[field][appId] = eventContract;
27
- for (const ev of events) {
28
- eventContract.addEvent(ev);
29
- }
30
- return eventContract;
24
+ earlyJsactionTracker[field][appId] = {};
25
+ const eventContract = new EarlyEventContract(earlyJsactionTracker[field][appId], container);
26
+ if (eventTypes)
27
+ eventContract.addEvents(eventTypes);
28
+ if (captureEventTypes)
29
+ eventContract.addEvents(captureEventTypes, true);
31
30
  }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXJfZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9wcmltaXRpdmVzL2V2ZW50LWRpc3BhdGNoL3NyYy9yZWdpc3Rlcl9ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTlDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLEtBQWEsRUFDYixTQUFrQixFQUNsQixLQUFhLEVBQ2IsTUFBZ0IsRUFDaEIsWUFBaUIsTUFBTTtJQUV2QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdEIsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQy9FLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxhQUFhLENBQUM7SUFDeEMsS0FBSyxNQUFNLEVBQUUsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN4QixhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7RXZlbnRDb250cmFjdENvbnRhaW5lcn0gZnJvbSAnLi9ldmVudF9jb250cmFjdF9jb250YWluZXInO1xuaW1wb3J0IHtFdmVudENvbnRyYWN0fSBmcm9tICcuL2V2ZW50Y29udHJhY3QnO1xuXG4vKipcbiAqIFByb3ZpZGVzIGEgZmFjdG9yeSBmdW5jdGlvbiBmb3IgYm9vdHN0cmFwcGluZyBhbiBldmVudCBjb250cmFjdCBvbiBhXG4gKiB3aW5kb3cgb2JqZWN0LlxuICogQHBhcmFtIGZpZWxkIFRoZSBwcm9wZXJ0eSBvbiB0aGUgd2luZG93IHRoYXQgdGhlIGV2ZW50IGNvbnRyYWN0IHdpbGwgYmUgcGxhY2VkIG9uLlxuICogQHBhcmFtIGNvbnRhaW5lciBUaGUgY29udGFpbmVyIHRoYXQgbGlzdGVucyB0byBldmVudHNcbiAqIEBwYXJhbSBhcHBJZCBBIGdpdmVuIGlkZW50aWZpZXIgZm9yIGFuIGFwcGxpY2F0aW9uLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgYXBwcyBvbiB0aGUgcGFnZVxuICogICAgICAgICAgICAgIHRoZW4gdGhpcyBpcyBob3cgY29udHJhY3RzIGNhbiBiZSBpbml0aWFsaXplZCBmb3IgZWFjaCBvbmUuXG4gKiBAcGFyYW0gZXZlbnRzIEFuIGFycmF5IG9mIGV2ZW50IG5hbWVzIHRoYXQgc2hvdWxkIGJlIGxpc3RlbmVkIHRvLlxuICogQHBhcmFtIGFueVdpbmRvdyBUaGUgZ2xvYmFsIHdpbmRvdyBvYmplY3QgdGhhdCBzaG91bGQgcmVjZWl2ZSB0aGUgZXZlbnQgY29udHJhY3QuXG4gKiBAcmV0dXJucyBUaGUgYGV2ZW50YCBjb250cmFjdC4gVGhpcyBpcyBib3RoIGFzc2lnbmVkIHRvIGBhbnlXaW5kb3dgIGFuZCByZXR1cm5lZCBmb3IgdGVzdGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJvb3RzdHJhcEV2ZW50Q29udHJhY3QoXG4gIGZpZWxkOiBzdHJpbmcsXG4gIGNvbnRhaW5lcjogRWxlbWVudCxcbiAgYXBwSWQ6IHN0cmluZyxcbiAgZXZlbnRzOiBzdHJpbmdbXSxcbiAgYW55V2luZG93OiBhbnkgPSB3aW5kb3csXG4pIHtcbiAgaWYgKCFhbnlXaW5kb3dbZmllbGRdKSB7XG4gICAgYW55V2luZG93W2ZpZWxkXSA9IHt9O1xuICB9XG4gIGNvbnN0IGV2ZW50Q29udHJhY3QgPSBuZXcgRXZlbnRDb250cmFjdChuZXcgRXZlbnRDb250cmFjdENvbnRhaW5lcihjb250YWluZXIpKTtcbiAgYW55V2luZG93W2ZpZWxkXVthcHBJZF0gPSBldmVudENvbnRyYWN0O1xuICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50cykge1xuICAgIGV2ZW50Q29udHJhY3QuYWRkRXZlbnQoZXYpO1xuICB9XG4gIHJldHVybiBldmVudENvbnRyYWN0O1xufVxuIl19
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