source: trip-planner-front/node_modules/zone.js/bundles/zone.umd.js@ fa375fe

Last change on this file since fa375fe was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 161.8 KB
Line 
1'use strict';
2/**
3 * @license Angular v12.0.0-next.0
4 * (c) 2010-2020 Google LLC. https://angular.io/
5 * License: MIT
6 */
7(function (factory) {
8 typeof define === 'function' && define.amd ? define(factory) :
9 factory();
10}((function () {
11 'use strict';
12 /**
13 * @license
14 * Copyright Google LLC All Rights Reserved.
15 *
16 * Use of this source code is governed by an MIT-style license that can be
17 * found in the LICENSE file at https://angular.io/license
18 */
19 var Zone$1 = (function (global) {
20 var performance = global['performance'];
21 function mark(name) {
22 performance && performance['mark'] && performance['mark'](name);
23 }
24 function performanceMeasure(name, label) {
25 performance && performance['measure'] && performance['measure'](name, label);
26 }
27 mark('Zone');
28 // Initialize before it's accessed below.
29 // __Zone_symbol_prefix global can be used to override the default zone
30 // symbol prefix with a custom one if needed.
31 var symbolPrefix = global['__Zone_symbol_prefix'] || '__zone_symbol__';
32 function __symbol__(name) {
33 return symbolPrefix + name;
34 }
35 var checkDuplicate = global[__symbol__('forceDuplicateZoneCheck')] === true;
36 if (global['Zone']) {
37 // if global['Zone'] already exists (maybe zone.js was already loaded or
38 // some other lib also registered a global object named Zone), we may need
39 // to throw an error, but sometimes user may not want this error.
40 // For example,
41 // we have two web pages, page1 includes zone.js, page2 doesn't.
42 // and the 1st time user load page1 and page2, everything work fine,
43 // but when user load page2 again, error occurs because global['Zone'] already exists.
44 // so we add a flag to let user choose whether to throw this error or not.
45 // By default, if existing Zone is from zone.js, we will not throw the error.
46 if (checkDuplicate || typeof global['Zone'].__symbol__ !== 'function') {
47 throw new Error('Zone already loaded.');
48 }
49 else {
50 return global['Zone'];
51 }
52 }
53 var Zone = /** @class */ (function () {
54 function Zone(parent, zoneSpec) {
55 this._parent = parent;
56 this._name = zoneSpec ? zoneSpec.name || 'unnamed' : '<root>';
57 this._properties = zoneSpec && zoneSpec.properties || {};
58 this._zoneDelegate =
59 new ZoneDelegate(this, this._parent && this._parent._zoneDelegate, zoneSpec);
60 }
61 Zone.assertZonePatched = function () {
62 if (global['Promise'] !== patches['ZoneAwarePromise']) {
63 throw new Error('Zone.js has detected that ZoneAwarePromise `(window|global).Promise` ' +
64 'has been overwritten.\n' +
65 'Most likely cause is that a Promise polyfill has been loaded ' +
66 'after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. ' +
67 'If you must load one, do so before loading zone.js.)');
68 }
69 };
70 Object.defineProperty(Zone, "root", {
71 get: function () {
72 var zone = Zone.current;
73 while (zone.parent) {
74 zone = zone.parent;
75 }
76 return zone;
77 },
78 enumerable: false,
79 configurable: true
80 });
81 Object.defineProperty(Zone, "current", {
82 get: function () {
83 return _currentZoneFrame.zone;
84 },
85 enumerable: false,
86 configurable: true
87 });
88 Object.defineProperty(Zone, "currentTask", {
89 get: function () {
90 return _currentTask;
91 },
92 enumerable: false,
93 configurable: true
94 });
95 // tslint:disable-next-line:require-internal-with-underscore
96 Zone.__load_patch = function (name, fn, ignoreDuplicate) {
97 if (ignoreDuplicate === void 0) { ignoreDuplicate = false; }
98 if (patches.hasOwnProperty(name)) {
99 // `checkDuplicate` option is defined from global variable
100 // so it works for all modules.
101 // `ignoreDuplicate` can work for the specified module
102 if (!ignoreDuplicate && checkDuplicate) {
103 throw Error('Already loaded patch: ' + name);
104 }
105 }
106 else if (!global['__Zone_disable_' + name]) {
107 var perfName = 'Zone:' + name;
108 mark(perfName);
109 patches[name] = fn(global, Zone, _api);
110 performanceMeasure(perfName, perfName);
111 }
112 };
113 Object.defineProperty(Zone.prototype, "parent", {
114 get: function () {
115 return this._parent;
116 },
117 enumerable: false,
118 configurable: true
119 });
120 Object.defineProperty(Zone.prototype, "name", {
121 get: function () {
122 return this._name;
123 },
124 enumerable: false,
125 configurable: true
126 });
127 Zone.prototype.get = function (key) {
128 var zone = this.getZoneWith(key);
129 if (zone)
130 return zone._properties[key];
131 };
132 Zone.prototype.getZoneWith = function (key) {
133 var current = this;
134 while (current) {
135 if (current._properties.hasOwnProperty(key)) {
136 return current;
137 }
138 current = current._parent;
139 }
140 return null;
141 };
142 Zone.prototype.fork = function (zoneSpec) {
143 if (!zoneSpec)
144 throw new Error('ZoneSpec required!');
145 return this._zoneDelegate.fork(this, zoneSpec);
146 };
147 Zone.prototype.wrap = function (callback, source) {
148 if (typeof callback !== 'function') {
149 throw new Error('Expecting function got: ' + callback);
150 }
151 var _callback = this._zoneDelegate.intercept(this, callback, source);
152 var zone = this;
153 return function () {
154 return zone.runGuarded(_callback, this, arguments, source);
155 };
156 };
157 Zone.prototype.run = function (callback, applyThis, applyArgs, source) {
158 _currentZoneFrame = { parent: _currentZoneFrame, zone: this };
159 try {
160 return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source);
161 }
162 finally {
163 _currentZoneFrame = _currentZoneFrame.parent;
164 }
165 };
166 Zone.prototype.runGuarded = function (callback, applyThis, applyArgs, source) {
167 if (applyThis === void 0) { applyThis = null; }
168 _currentZoneFrame = { parent: _currentZoneFrame, zone: this };
169 try {
170 try {
171 return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source);
172 }
173 catch (error) {
174 if (this._zoneDelegate.handleError(this, error)) {
175 throw error;
176 }
177 }
178 }
179 finally {
180 _currentZoneFrame = _currentZoneFrame.parent;
181 }
182 };
183 Zone.prototype.runTask = function (task, applyThis, applyArgs) {
184 if (task.zone != this) {
185 throw new Error('A task can only be run in the zone of creation! (Creation: ' +
186 (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')');
187 }
188 // https://github.com/angular/zone.js/issues/778, sometimes eventTask
189 // will run in notScheduled(canceled) state, we should not try to
190 // run such kind of task but just return
191 if (task.state === notScheduled && (task.type === eventTask || task.type === macroTask)) {
192 return;
193 }
194 var reEntryGuard = task.state != running;
195 reEntryGuard && task._transitionTo(running, scheduled);
196 task.runCount++;
197 var previousTask = _currentTask;
198 _currentTask = task;
199 _currentZoneFrame = { parent: _currentZoneFrame, zone: this };
200 try {
201 if (task.type == macroTask && task.data && !task.data.isPeriodic) {
202 task.cancelFn = undefined;
203 }
204 try {
205 return this._zoneDelegate.invokeTask(this, task, applyThis, applyArgs);
206 }
207 catch (error) {
208 if (this._zoneDelegate.handleError(this, error)) {
209 throw error;
210 }
211 }
212 }
213 finally {
214 // if the task's state is notScheduled or unknown, then it has already been cancelled
215 // we should not reset the state to scheduled
216 if (task.state !== notScheduled && task.state !== unknown) {
217 if (task.type == eventTask || (task.data && task.data.isPeriodic)) {
218 reEntryGuard && task._transitionTo(scheduled, running);
219 }
220 else {
221 task.runCount = 0;
222 this._updateTaskCount(task, -1);
223 reEntryGuard &&
224 task._transitionTo(notScheduled, running, notScheduled);
225 }
226 }
227 _currentZoneFrame = _currentZoneFrame.parent;
228 _currentTask = previousTask;
229 }
230 };
231 Zone.prototype.scheduleTask = function (task) {
232 if (task.zone && task.zone !== this) {
233 // check if the task was rescheduled, the newZone
234 // should not be the children of the original zone
235 var newZone = this;
236 while (newZone) {
237 if (newZone === task.zone) {
238 throw Error("can not reschedule task to " + this.name + " which is descendants of the original zone " + task.zone.name);
239 }
240 newZone = newZone.parent;
241 }
242 }
243 task._transitionTo(scheduling, notScheduled);
244 var zoneDelegates = [];
245 task._zoneDelegates = zoneDelegates;
246 task._zone = this;
247 try {
248 task = this._zoneDelegate.scheduleTask(this, task);
249 }
250 catch (err) {
251 // should set task's state to unknown when scheduleTask throw error
252 // because the err may from reschedule, so the fromState maybe notScheduled
253 task._transitionTo(unknown, scheduling, notScheduled);
254 // TODO: @JiaLiPassion, should we check the result from handleError?
255 this._zoneDelegate.handleError(this, err);
256 throw err;
257 }
258 if (task._zoneDelegates === zoneDelegates) {
259 // we have to check because internally the delegate can reschedule the task.
260 this._updateTaskCount(task, 1);
261 }
262 if (task.state == scheduling) {
263 task._transitionTo(scheduled, scheduling);
264 }
265 return task;
266 };
267 Zone.prototype.scheduleMicroTask = function (source, callback, data, customSchedule) {
268 return this.scheduleTask(new ZoneTask(microTask, source, callback, data, customSchedule, undefined));
269 };
270 Zone.prototype.scheduleMacroTask = function (source, callback, data, customSchedule, customCancel) {
271 return this.scheduleTask(new ZoneTask(macroTask, source, callback, data, customSchedule, customCancel));
272 };
273 Zone.prototype.scheduleEventTask = function (source, callback, data, customSchedule, customCancel) {
274 return this.scheduleTask(new ZoneTask(eventTask, source, callback, data, customSchedule, customCancel));
275 };
276 Zone.prototype.cancelTask = function (task) {
277 if (task.zone != this)
278 throw new Error('A task can only be cancelled in the zone of creation! (Creation: ' +
279 (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')');
280 task._transitionTo(canceling, scheduled, running);
281 try {
282 this._zoneDelegate.cancelTask(this, task);
283 }
284 catch (err) {
285 // if error occurs when cancelTask, transit the state to unknown
286 task._transitionTo(unknown, canceling);
287 this._zoneDelegate.handleError(this, err);
288 throw err;
289 }
290 this._updateTaskCount(task, -1);
291 task._transitionTo(notScheduled, canceling);
292 task.runCount = 0;
293 return task;
294 };
295 Zone.prototype._updateTaskCount = function (task, count) {
296 var zoneDelegates = task._zoneDelegates;
297 if (count == -1) {
298 task._zoneDelegates = null;
299 }
300 for (var i = 0; i < zoneDelegates.length; i++) {
301 zoneDelegates[i]._updateTaskCount(task.type, count);
302 }
303 };
304 return Zone;
305 }());
306 // tslint:disable-next-line:require-internal-with-underscore
307 Zone.__symbol__ = __symbol__;
308 var DELEGATE_ZS = {
309 name: '',
310 onHasTask: function (delegate, _, target, hasTaskState) { return delegate.hasTask(target, hasTaskState); },
311 onScheduleTask: function (delegate, _, target, task) { return delegate.scheduleTask(target, task); },
312 onInvokeTask: function (delegate, _, target, task, applyThis, applyArgs) { return delegate.invokeTask(target, task, applyThis, applyArgs); },
313 onCancelTask: function (delegate, _, target, task) { return delegate.cancelTask(target, task); }
314 };
315 var ZoneDelegate = /** @class */ (function () {
316 function ZoneDelegate(zone, parentDelegate, zoneSpec) {
317 this._taskCounts = { 'microTask': 0, 'macroTask': 0, 'eventTask': 0 };
318 this.zone = zone;
319 this._parentDelegate = parentDelegate;
320 this._forkZS = zoneSpec && (zoneSpec && zoneSpec.onFork ? zoneSpec : parentDelegate._forkZS);
321 this._forkDlgt = zoneSpec && (zoneSpec.onFork ? parentDelegate : parentDelegate._forkDlgt);
322 this._forkCurrZone =
323 zoneSpec && (zoneSpec.onFork ? this.zone : parentDelegate._forkCurrZone);
324 this._interceptZS =
325 zoneSpec && (zoneSpec.onIntercept ? zoneSpec : parentDelegate._interceptZS);
326 this._interceptDlgt =
327 zoneSpec && (zoneSpec.onIntercept ? parentDelegate : parentDelegate._interceptDlgt);
328 this._interceptCurrZone =
329 zoneSpec && (zoneSpec.onIntercept ? this.zone : parentDelegate._interceptCurrZone);
330 this._invokeZS = zoneSpec && (zoneSpec.onInvoke ? zoneSpec : parentDelegate._invokeZS);
331 this._invokeDlgt =
332 zoneSpec && (zoneSpec.onInvoke ? parentDelegate : parentDelegate._invokeDlgt);
333 this._invokeCurrZone =
334 zoneSpec && (zoneSpec.onInvoke ? this.zone : parentDelegate._invokeCurrZone);
335 this._handleErrorZS =
336 zoneSpec && (zoneSpec.onHandleError ? zoneSpec : parentDelegate._handleErrorZS);
337 this._handleErrorDlgt =
338 zoneSpec && (zoneSpec.onHandleError ? parentDelegate : parentDelegate._handleErrorDlgt);
339 this._handleErrorCurrZone =
340 zoneSpec && (zoneSpec.onHandleError ? this.zone : parentDelegate._handleErrorCurrZone);
341 this._scheduleTaskZS =
342 zoneSpec && (zoneSpec.onScheduleTask ? zoneSpec : parentDelegate._scheduleTaskZS);
343 this._scheduleTaskDlgt = zoneSpec &&
344 (zoneSpec.onScheduleTask ? parentDelegate : parentDelegate._scheduleTaskDlgt);
345 this._scheduleTaskCurrZone =
346 zoneSpec && (zoneSpec.onScheduleTask ? this.zone : parentDelegate._scheduleTaskCurrZone);
347 this._invokeTaskZS =
348 zoneSpec && (zoneSpec.onInvokeTask ? zoneSpec : parentDelegate._invokeTaskZS);
349 this._invokeTaskDlgt =
350 zoneSpec && (zoneSpec.onInvokeTask ? parentDelegate : parentDelegate._invokeTaskDlgt);
351 this._invokeTaskCurrZone =
352 zoneSpec && (zoneSpec.onInvokeTask ? this.zone : parentDelegate._invokeTaskCurrZone);
353 this._cancelTaskZS =
354 zoneSpec && (zoneSpec.onCancelTask ? zoneSpec : parentDelegate._cancelTaskZS);
355 this._cancelTaskDlgt =
356 zoneSpec && (zoneSpec.onCancelTask ? parentDelegate : parentDelegate._cancelTaskDlgt);
357 this._cancelTaskCurrZone =
358 zoneSpec && (zoneSpec.onCancelTask ? this.zone : parentDelegate._cancelTaskCurrZone);
359 this._hasTaskZS = null;
360 this._hasTaskDlgt = null;
361 this._hasTaskDlgtOwner = null;
362 this._hasTaskCurrZone = null;
363 var zoneSpecHasTask = zoneSpec && zoneSpec.onHasTask;
364 var parentHasTask = parentDelegate && parentDelegate._hasTaskZS;
365 if (zoneSpecHasTask || parentHasTask) {
366 // If we need to report hasTask, than this ZS needs to do ref counting on tasks. In such
367 // a case all task related interceptors must go through this ZD. We can't short circuit it.
368 this._hasTaskZS = zoneSpecHasTask ? zoneSpec : DELEGATE_ZS;
369 this._hasTaskDlgt = parentDelegate;
370 this._hasTaskDlgtOwner = this;
371 this._hasTaskCurrZone = zone;
372 if (!zoneSpec.onScheduleTask) {
373 this._scheduleTaskZS = DELEGATE_ZS;
374 this._scheduleTaskDlgt = parentDelegate;
375 this._scheduleTaskCurrZone = this.zone;
376 }
377 if (!zoneSpec.onInvokeTask) {
378 this._invokeTaskZS = DELEGATE_ZS;
379 this._invokeTaskDlgt = parentDelegate;
380 this._invokeTaskCurrZone = this.zone;
381 }
382 if (!zoneSpec.onCancelTask) {
383 this._cancelTaskZS = DELEGATE_ZS;
384 this._cancelTaskDlgt = parentDelegate;
385 this._cancelTaskCurrZone = this.zone;
386 }
387 }
388 }
389 ZoneDelegate.prototype.fork = function (targetZone, zoneSpec) {
390 return this._forkZS ? this._forkZS.onFork(this._forkDlgt, this.zone, targetZone, zoneSpec) :
391 new Zone(targetZone, zoneSpec);
392 };
393 ZoneDelegate.prototype.intercept = function (targetZone, callback, source) {
394 return this._interceptZS ?
395 this._interceptZS.onIntercept(this._interceptDlgt, this._interceptCurrZone, targetZone, callback, source) :
396 callback;
397 };
398 ZoneDelegate.prototype.invoke = function (targetZone, callback, applyThis, applyArgs, source) {
399 return this._invokeZS ? this._invokeZS.onInvoke(this._invokeDlgt, this._invokeCurrZone, targetZone, callback, applyThis, applyArgs, source) :
400 callback.apply(applyThis, applyArgs);
401 };
402 ZoneDelegate.prototype.handleError = function (targetZone, error) {
403 return this._handleErrorZS ?
404 this._handleErrorZS.onHandleError(this._handleErrorDlgt, this._handleErrorCurrZone, targetZone, error) :
405 true;
406 };
407 ZoneDelegate.prototype.scheduleTask = function (targetZone, task) {
408 var returnTask = task;
409 if (this._scheduleTaskZS) {
410 if (this._hasTaskZS) {
411 returnTask._zoneDelegates.push(this._hasTaskDlgtOwner);
412 }
413 // clang-format off
414 returnTask = this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt, this._scheduleTaskCurrZone, targetZone, task);
415 // clang-format on
416 if (!returnTask)
417 returnTask = task;
418 }
419 else {
420 if (task.scheduleFn) {
421 task.scheduleFn(task);
422 }
423 else if (task.type == microTask) {
424 scheduleMicroTask(task);
425 }
426 else {
427 throw new Error('Task is missing scheduleFn.');
428 }
429 }
430 return returnTask;
431 };
432 ZoneDelegate.prototype.invokeTask = function (targetZone, task, applyThis, applyArgs) {
433 return this._invokeTaskZS ? this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt, this._invokeTaskCurrZone, targetZone, task, applyThis, applyArgs) :
434 task.callback.apply(applyThis, applyArgs);
435 };
436 ZoneDelegate.prototype.cancelTask = function (targetZone, task) {
437 var value;
438 if (this._cancelTaskZS) {
439 value = this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt, this._cancelTaskCurrZone, targetZone, task);
440 }
441 else {
442 if (!task.cancelFn) {
443 throw Error('Task is not cancelable');
444 }
445 value = task.cancelFn(task);
446 }
447 return value;
448 };
449 ZoneDelegate.prototype.hasTask = function (targetZone, isEmpty) {
450 // hasTask should not throw error so other ZoneDelegate
451 // can still trigger hasTask callback
452 try {
453 this._hasTaskZS &&
454 this._hasTaskZS.onHasTask(this._hasTaskDlgt, this._hasTaskCurrZone, targetZone, isEmpty);
455 }
456 catch (err) {
457 this.handleError(targetZone, err);
458 }
459 };
460 // tslint:disable-next-line:require-internal-with-underscore
461 ZoneDelegate.prototype._updateTaskCount = function (type, count) {
462 var counts = this._taskCounts;
463 var prev = counts[type];
464 var next = counts[type] = prev + count;
465 if (next < 0) {
466 throw new Error('More tasks executed then were scheduled.');
467 }
468 if (prev == 0 || next == 0) {
469 var isEmpty = {
470 microTask: counts['microTask'] > 0,
471 macroTask: counts['macroTask'] > 0,
472 eventTask: counts['eventTask'] > 0,
473 change: type
474 };
475 this.hasTask(this.zone, isEmpty);
476 }
477 };
478 return ZoneDelegate;
479 }());
480 var ZoneTask = /** @class */ (function () {
481 function ZoneTask(type, source, callback, options, scheduleFn, cancelFn) {
482 // tslint:disable-next-line:require-internal-with-underscore
483 this._zone = null;
484 this.runCount = 0;
485 // tslint:disable-next-line:require-internal-with-underscore
486 this._zoneDelegates = null;
487 // tslint:disable-next-line:require-internal-with-underscore
488 this._state = 'notScheduled';
489 this.type = type;
490 this.source = source;
491 this.data = options;
492 this.scheduleFn = scheduleFn;
493 this.cancelFn = cancelFn;
494 if (!callback) {
495 throw new Error('callback is not defined');
496 }
497 this.callback = callback;
498 var self = this;
499 // TODO: @JiaLiPassion options should have interface
500 if (type === eventTask && options && options.useG) {
501 this.invoke = ZoneTask.invokeTask;
502 }
503 else {
504 this.invoke = function () {
505 return ZoneTask.invokeTask.call(global, self, this, arguments);
506 };
507 }
508 }
509 ZoneTask.invokeTask = function (task, target, args) {
510 if (!task) {
511 task = this;
512 }
513 _numberOfNestedTaskFrames++;
514 try {
515 task.runCount++;
516 return task.zone.runTask(task, target, args);
517 }
518 finally {
519 if (_numberOfNestedTaskFrames == 1) {
520 drainMicroTaskQueue();
521 }
522 _numberOfNestedTaskFrames--;
523 }
524 };
525 Object.defineProperty(ZoneTask.prototype, "zone", {
526 get: function () {
527 return this._zone;
528 },
529 enumerable: false,
530 configurable: true
531 });
532 Object.defineProperty(ZoneTask.prototype, "state", {
533 get: function () {
534 return this._state;
535 },
536 enumerable: false,
537 configurable: true
538 });
539 ZoneTask.prototype.cancelScheduleRequest = function () {
540 this._transitionTo(notScheduled, scheduling);
541 };
542 // tslint:disable-next-line:require-internal-with-underscore
543 ZoneTask.prototype._transitionTo = function (toState, fromState1, fromState2) {
544 if (this._state === fromState1 || this._state === fromState2) {
545 this._state = toState;
546 if (toState == notScheduled) {
547 this._zoneDelegates = null;
548 }
549 }
550 else {
551 throw new Error(this.type + " '" + this.source + "': can not transition to '" + toState + "', expecting state '" + fromState1 + "'" + (fromState2 ? ' or \'' + fromState2 + '\'' : '') + ", was '" + this._state + "'.");
552 }
553 };
554 ZoneTask.prototype.toString = function () {
555 if (this.data && typeof this.data.handleId !== 'undefined') {
556 return this.data.handleId.toString();
557 }
558 else {
559 return Object.prototype.toString.call(this);
560 }
561 };
562 // add toJSON method to prevent cyclic error when
563 // call JSON.stringify(zoneTask)
564 ZoneTask.prototype.toJSON = function () {
565 return {
566 type: this.type,
567 state: this.state,
568 source: this.source,
569 zone: this.zone.name,
570 runCount: this.runCount
571 };
572 };
573 return ZoneTask;
574 }());
575 //////////////////////////////////////////////////////
576 //////////////////////////////////////////////////////
577 /// MICROTASK QUEUE
578 //////////////////////////////////////////////////////
579 //////////////////////////////////////////////////////
580 var symbolSetTimeout = __symbol__('setTimeout');
581 var symbolPromise = __symbol__('Promise');
582 var symbolThen = __symbol__('then');
583 var _microTaskQueue = [];
584 var _isDrainingMicrotaskQueue = false;
585 var nativeMicroTaskQueuePromise;
586 function scheduleMicroTask(task) {
587 // if we are not running in any task, and there has not been anything scheduled
588 // we must bootstrap the initial task creation by manually scheduling the drain
589 if (_numberOfNestedTaskFrames === 0 && _microTaskQueue.length === 0) {
590 // We are not running in Task, so we need to kickstart the microtask queue.
591 if (!nativeMicroTaskQueuePromise) {
592 if (global[symbolPromise]) {
593 nativeMicroTaskQueuePromise = global[symbolPromise].resolve(0);
594 }
595 }
596 if (nativeMicroTaskQueuePromise) {
597 var nativeThen = nativeMicroTaskQueuePromise[symbolThen];
598 if (!nativeThen) {
599 // native Promise is not patchable, we need to use `then` directly
600 // issue 1078
601 nativeThen = nativeMicroTaskQueuePromise['then'];
602 }
603 nativeThen.call(nativeMicroTaskQueuePromise, drainMicroTaskQueue);
604 }
605 else {
606 global[symbolSetTimeout](drainMicroTaskQueue, 0);
607 }
608 }
609 task && _microTaskQueue.push(task);
610 }
611 function drainMicroTaskQueue() {
612 if (!_isDrainingMicrotaskQueue) {
613 _isDrainingMicrotaskQueue = true;
614 while (_microTaskQueue.length) {
615 var queue = _microTaskQueue;
616 _microTaskQueue = [];
617 for (var i = 0; i < queue.length; i++) {
618 var task = queue[i];
619 try {
620 task.zone.runTask(task, null, null);
621 }
622 catch (error) {
623 _api.onUnhandledError(error);
624 }
625 }
626 }
627 _api.microtaskDrainDone();
628 _isDrainingMicrotaskQueue = false;
629 }
630 }
631 //////////////////////////////////////////////////////
632 //////////////////////////////////////////////////////
633 /// BOOTSTRAP
634 //////////////////////////////////////////////////////
635 //////////////////////////////////////////////////////
636 var NO_ZONE = { name: 'NO ZONE' };
637 var notScheduled = 'notScheduled', scheduling = 'scheduling', scheduled = 'scheduled', running = 'running', canceling = 'canceling', unknown = 'unknown';
638 var microTask = 'microTask', macroTask = 'macroTask', eventTask = 'eventTask';
639 var patches = {};
640 var _api = {
641 symbol: __symbol__,
642 currentZoneFrame: function () { return _currentZoneFrame; },
643 onUnhandledError: noop,
644 microtaskDrainDone: noop,
645 scheduleMicroTask: scheduleMicroTask,
646 showUncaughtError: function () { return !Zone[__symbol__('ignoreConsoleErrorUncaughtError')]; },
647 patchEventTarget: function () { return []; },
648 patchOnProperties: noop,
649 patchMethod: function () { return noop; },
650 bindArguments: function () { return []; },
651 patchThen: function () { return noop; },
652 patchMacroTask: function () { return noop; },
653 patchEventPrototype: function () { return noop; },
654 isIEOrEdge: function () { return false; },
655 getGlobalObjects: function () { return undefined; },
656 ObjectDefineProperty: function () { return noop; },
657 ObjectGetOwnPropertyDescriptor: function () { return undefined; },
658 ObjectCreate: function () { return undefined; },
659 ArraySlice: function () { return []; },
660 patchClass: function () { return noop; },
661 wrapWithCurrentZone: function () { return noop; },
662 filterProperties: function () { return []; },
663 attachOriginToPatched: function () { return noop; },
664 _redefineProperty: function () { return noop; },
665 patchCallbacks: function () { return noop; }
666 };
667 var _currentZoneFrame = { parent: null, zone: new Zone(null, null) };
668 var _currentTask = null;
669 var _numberOfNestedTaskFrames = 0;
670 function noop() { }
671 performanceMeasure('Zone', 'Zone');
672 return global['Zone'] = Zone;
673 })(typeof window !== 'undefined' && window || typeof self !== 'undefined' && self || global);
674 /**
675 * @license
676 * Copyright Google LLC All Rights Reserved.
677 *
678 * Use of this source code is governed by an MIT-style license that can be
679 * found in the LICENSE file at https://angular.io/license
680 */
681 /**
682 * Suppress closure compiler errors about unknown 'Zone' variable
683 * @fileoverview
684 * @suppress {undefinedVars,globalThis,missingRequire}
685 */
686 /// <reference types="node"/>
687 // issue #989, to reduce bundle size, use short name
688 /** Object.getOwnPropertyDescriptor */
689 var ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
690 /** Object.defineProperty */
691 var ObjectDefineProperty = Object.defineProperty;
692 /** Object.getPrototypeOf */
693 var ObjectGetPrototypeOf = Object.getPrototypeOf;
694 /** Object.create */
695 var ObjectCreate = Object.create;
696 /** Array.prototype.slice */
697 var ArraySlice = Array.prototype.slice;
698 /** addEventListener string const */
699 var ADD_EVENT_LISTENER_STR = 'addEventListener';
700 /** removeEventListener string const */
701 var REMOVE_EVENT_LISTENER_STR = 'removeEventListener';
702 /** zoneSymbol addEventListener */
703 var ZONE_SYMBOL_ADD_EVENT_LISTENER = Zone.__symbol__(ADD_EVENT_LISTENER_STR);
704 /** zoneSymbol removeEventListener */
705 var ZONE_SYMBOL_REMOVE_EVENT_LISTENER = Zone.__symbol__(REMOVE_EVENT_LISTENER_STR);
706 /** true string const */
707 var TRUE_STR = 'true';
708 /** false string const */
709 var FALSE_STR = 'false';
710 /** Zone symbol prefix string const. */
711 var ZONE_SYMBOL_PREFIX = Zone.__symbol__('');
712 function wrapWithCurrentZone(callback, source) {
713 return Zone.current.wrap(callback, source);
714 }
715 function scheduleMacroTaskWithCurrentZone(source, callback, data, customSchedule, customCancel) {
716 return Zone.current.scheduleMacroTask(source, callback, data, customSchedule, customCancel);
717 }
718 var zoneSymbol = Zone.__symbol__;
719 var isWindowExists = typeof window !== 'undefined';
720 var internalWindow = isWindowExists ? window : undefined;
721 var _global = isWindowExists && internalWindow || typeof self === 'object' && self || global;
722 var REMOVE_ATTRIBUTE = 'removeAttribute';
723 var NULL_ON_PROP_VALUE = [null];
724 function bindArguments(args, source) {
725 for (var i = args.length - 1; i >= 0; i--) {
726 if (typeof args[i] === 'function') {
727 args[i] = wrapWithCurrentZone(args[i], source + '_' + i);
728 }
729 }
730 return args;
731 }
732 function patchPrototype(prototype, fnNames) {
733 var source = prototype.constructor['name'];
734 var _loop_1 = function (i) {
735 var name_1 = fnNames[i];
736 var delegate = prototype[name_1];
737 if (delegate) {
738 var prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, name_1);
739 if (!isPropertyWritable(prototypeDesc)) {
740 return "continue";
741 }
742 prototype[name_1] = (function (delegate) {
743 var patched = function () {
744 return delegate.apply(this, bindArguments(arguments, source + '.' + name_1));
745 };
746 attachOriginToPatched(patched, delegate);
747 return patched;
748 })(delegate);
749 }
750 };
751 for (var i = 0; i < fnNames.length; i++) {
752 _loop_1(i);
753 }
754 }
755 function isPropertyWritable(propertyDesc) {
756 if (!propertyDesc) {
757 return true;
758 }
759 if (propertyDesc.writable === false) {
760 return false;
761 }
762 return !(typeof propertyDesc.get === 'function' && typeof propertyDesc.set === 'undefined');
763 }
764 var isWebWorker = (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope);
765 // Make sure to access `process` through `_global` so that WebPack does not accidentally browserify
766 // this code.
767 var isNode = (!('nw' in _global) && typeof _global.process !== 'undefined' &&
768 {}.toString.call(_global.process) === '[object process]');
769 var isBrowser = !isNode && !isWebWorker && !!(isWindowExists && internalWindow['HTMLElement']);
770 // we are in electron of nw, so we are both browser and nodejs
771 // Make sure to access `process` through `_global` so that WebPack does not accidentally browserify
772 // this code.
773 var isMix = typeof _global.process !== 'undefined' &&
774 {}.toString.call(_global.process) === '[object process]' && !isWebWorker &&
775 !!(isWindowExists && internalWindow['HTMLElement']);
776 var zoneSymbolEventNames = {};
777 var wrapFn = function (event) {
778 // https://github.com/angular/zone.js/issues/911, in IE, sometimes
779 // event will be undefined, so we need to use window.event
780 event = event || _global.event;
781 if (!event) {
782 return;
783 }
784 var eventNameSymbol = zoneSymbolEventNames[event.type];
785 if (!eventNameSymbol) {
786 eventNameSymbol = zoneSymbolEventNames[event.type] = zoneSymbol('ON_PROPERTY' + event.type);
787 }
788 var target = this || event.target || _global;
789 var listener = target[eventNameSymbol];
790 var result;
791 if (isBrowser && target === internalWindow && event.type === 'error') {
792 // window.onerror have different signiture
793 // https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror#window.onerror
794 // and onerror callback will prevent default when callback return true
795 var errorEvent = event;
796 result = listener &&
797 listener.call(this, errorEvent.message, errorEvent.filename, errorEvent.lineno, errorEvent.colno, errorEvent.error);
798 if (result === true) {
799 event.preventDefault();
800 }
801 }
802 else {
803 result = listener && listener.apply(this, arguments);
804 if (result != undefined && !result) {
805 event.preventDefault();
806 }
807 }
808 return result;
809 };
810 function patchProperty(obj, prop, prototype) {
811 var desc = ObjectGetOwnPropertyDescriptor(obj, prop);
812 if (!desc && prototype) {
813 // when patch window object, use prototype to check prop exist or not
814 var prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, prop);
815 if (prototypeDesc) {
816 desc = { enumerable: true, configurable: true };
817 }
818 }
819 // if the descriptor not exists or is not configurable
820 // just return
821 if (!desc || !desc.configurable) {
822 return;
823 }
824 var onPropPatchedSymbol = zoneSymbol('on' + prop + 'patched');
825 if (obj.hasOwnProperty(onPropPatchedSymbol) && obj[onPropPatchedSymbol]) {
826 return;
827 }
828 // A property descriptor cannot have getter/setter and be writable
829 // deleting the writable and value properties avoids this error:
830 //
831 // TypeError: property descriptors must not specify a value or be writable when a
832 // getter or setter has been specified
833 delete desc.writable;
834 delete desc.value;
835 var originalDescGet = desc.get;
836 var originalDescSet = desc.set;
837 // substr(2) cuz 'onclick' -> 'click', etc
838 var eventName = prop.substr(2);
839 var eventNameSymbol = zoneSymbolEventNames[eventName];
840 if (!eventNameSymbol) {
841 eventNameSymbol = zoneSymbolEventNames[eventName] = zoneSymbol('ON_PROPERTY' + eventName);
842 }
843 desc.set = function (newValue) {
844 // in some of windows's onproperty callback, this is undefined
845 // so we need to check it
846 var target = this;
847 if (!target && obj === _global) {
848 target = _global;
849 }
850 if (!target) {
851 return;
852 }
853 var previousValue = target[eventNameSymbol];
854 if (previousValue) {
855 target.removeEventListener(eventName, wrapFn);
856 }
857 // issue #978, when onload handler was added before loading zone.js
858 // we should remove it with originalDescSet
859 if (originalDescSet) {
860 originalDescSet.apply(target, NULL_ON_PROP_VALUE);
861 }
862 if (typeof newValue === 'function') {
863 target[eventNameSymbol] = newValue;
864 target.addEventListener(eventName, wrapFn, false);
865 }
866 else {
867 target[eventNameSymbol] = null;
868 }
869 };
870 // The getter would return undefined for unassigned properties but the default value of an
871 // unassigned property is null
872 desc.get = function () {
873 // in some of windows's onproperty callback, this is undefined
874 // so we need to check it
875 var target = this;
876 if (!target && obj === _global) {
877 target = _global;
878 }
879 if (!target) {
880 return null;
881 }
882 var listener = target[eventNameSymbol];
883 if (listener) {
884 return listener;
885 }
886 else if (originalDescGet) {
887 // result will be null when use inline event attribute,
888 // such as <button onclick="func();">OK</button>
889 // because the onclick function is internal raw uncompiled handler
890 // the onclick will be evaluated when first time event was triggered or
891 // the property is accessed, https://github.com/angular/zone.js/issues/525
892 // so we should use original native get to retrieve the handler
893 var value = originalDescGet && originalDescGet.call(this);
894 if (value) {
895 desc.set.call(this, value);
896 if (typeof target[REMOVE_ATTRIBUTE] === 'function') {
897 target.removeAttribute(prop);
898 }
899 return value;
900 }
901 }
902 return null;
903 };
904 ObjectDefineProperty(obj, prop, desc);
905 obj[onPropPatchedSymbol] = true;
906 }
907 function patchOnProperties(obj, properties, prototype) {
908 if (properties) {
909 for (var i = 0; i < properties.length; i++) {
910 patchProperty(obj, 'on' + properties[i], prototype);
911 }
912 }
913 else {
914 var onProperties = [];
915 for (var prop in obj) {
916 if (prop.substr(0, 2) == 'on') {
917 onProperties.push(prop);
918 }
919 }
920 for (var j = 0; j < onProperties.length; j++) {
921 patchProperty(obj, onProperties[j], prototype);
922 }
923 }
924 }
925 var originalInstanceKey = zoneSymbol('originalInstance');
926 // wrap some native API on `window`
927 function patchClass(className) {
928 var OriginalClass = _global[className];
929 if (!OriginalClass)
930 return;
931 // keep original class in global
932 _global[zoneSymbol(className)] = OriginalClass;
933 _global[className] = function () {
934 var a = bindArguments(arguments, className);
935 switch (a.length) {
936 case 0:
937 this[originalInstanceKey] = new OriginalClass();
938 break;
939 case 1:
940 this[originalInstanceKey] = new OriginalClass(a[0]);
941 break;
942 case 2:
943 this[originalInstanceKey] = new OriginalClass(a[0], a[1]);
944 break;
945 case 3:
946 this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2]);
947 break;
948 case 4:
949 this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2], a[3]);
950 break;
951 default:
952 throw new Error('Arg list too long.');
953 }
954 };
955 // attach original delegate to patched function
956 attachOriginToPatched(_global[className], OriginalClass);
957 var instance = new OriginalClass(function () { });
958 var prop;
959 for (prop in instance) {
960 // https://bugs.webkit.org/show_bug.cgi?id=44721
961 if (className === 'XMLHttpRequest' && prop === 'responseBlob')
962 continue;
963 (function (prop) {
964 if (typeof instance[prop] === 'function') {
965 _global[className].prototype[prop] = function () {
966 return this[originalInstanceKey][prop].apply(this[originalInstanceKey], arguments);
967 };
968 }
969 else {
970 ObjectDefineProperty(_global[className].prototype, prop, {
971 set: function (fn) {
972 if (typeof fn === 'function') {
973 this[originalInstanceKey][prop] = wrapWithCurrentZone(fn, className + '.' + prop);
974 // keep callback in wrapped function so we can
975 // use it in Function.prototype.toString to return
976 // the native one.
977 attachOriginToPatched(this[originalInstanceKey][prop], fn);
978 }
979 else {
980 this[originalInstanceKey][prop] = fn;
981 }
982 },
983 get: function () {
984 return this[originalInstanceKey][prop];
985 }
986 });
987 }
988 }(prop));
989 }
990 for (prop in OriginalClass) {
991 if (prop !== 'prototype' && OriginalClass.hasOwnProperty(prop)) {
992 _global[className][prop] = OriginalClass[prop];
993 }
994 }
995 }
996 function patchMethod(target, name, patchFn) {
997 var proto = target;
998 while (proto && !proto.hasOwnProperty(name)) {
999 proto = ObjectGetPrototypeOf(proto);
1000 }
1001 if (!proto && target[name]) {
1002 // somehow we did not find it, but we can see it. This happens on IE for Window properties.
1003 proto = target;
1004 }
1005 var delegateName = zoneSymbol(name);
1006 var delegate = null;
1007 if (proto && (!(delegate = proto[delegateName]) || !proto.hasOwnProperty(delegateName))) {
1008 delegate = proto[delegateName] = proto[name];
1009 // check whether proto[name] is writable
1010 // some property is readonly in safari, such as HtmlCanvasElement.prototype.toBlob
1011 var desc = proto && ObjectGetOwnPropertyDescriptor(proto, name);
1012 if (isPropertyWritable(desc)) {
1013 var patchDelegate_1 = patchFn(delegate, delegateName, name);
1014 proto[name] = function () {
1015 return patchDelegate_1(this, arguments);
1016 };
1017 attachOriginToPatched(proto[name], delegate);
1018 }
1019 }
1020 return delegate;
1021 }
1022 // TODO: @JiaLiPassion, support cancel task later if necessary
1023 function patchMacroTask(obj, funcName, metaCreator) {
1024 var setNative = null;
1025 function scheduleTask(task) {
1026 var data = task.data;
1027 data.args[data.cbIdx] = function () {
1028 task.invoke.apply(this, arguments);
1029 };
1030 setNative.apply(data.target, data.args);
1031 return task;
1032 }
1033 setNative = patchMethod(obj, funcName, function (delegate) { return function (self, args) {
1034 var meta = metaCreator(self, args);
1035 if (meta.cbIdx >= 0 && typeof args[meta.cbIdx] === 'function') {
1036 return scheduleMacroTaskWithCurrentZone(meta.name, args[meta.cbIdx], meta, scheduleTask);
1037 }
1038 else {
1039 // cause an error by calling it directly.
1040 return delegate.apply(self, args);
1041 }
1042 }; });
1043 }
1044 function attachOriginToPatched(patched, original) {
1045 patched[zoneSymbol('OriginalDelegate')] = original;
1046 }
1047 var isDetectedIEOrEdge = false;
1048 var ieOrEdge = false;
1049 function isIE() {
1050 try {
1051 var ua = internalWindow.navigator.userAgent;
1052 if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1) {
1053 return true;
1054 }
1055 }
1056 catch (error) {
1057 }
1058 return false;
1059 }
1060 function isIEOrEdge() {
1061 if (isDetectedIEOrEdge) {
1062 return ieOrEdge;
1063 }
1064 isDetectedIEOrEdge = true;
1065 try {
1066 var ua = internalWindow.navigator.userAgent;
1067 if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1 || ua.indexOf('Edge/') !== -1) {
1068 ieOrEdge = true;
1069 }
1070 }
1071 catch (error) {
1072 }
1073 return ieOrEdge;
1074 }
1075 /**
1076 * @license
1077 * Copyright Google LLC All Rights Reserved.
1078 *
1079 * Use of this source code is governed by an MIT-style license that can be
1080 * found in the LICENSE file at https://angular.io/license
1081 */
1082 Zone.__load_patch('ZoneAwarePromise', function (global, Zone, api) {
1083 var ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
1084 var ObjectDefineProperty = Object.defineProperty;
1085 function readableObjectToString(obj) {
1086 if (obj && obj.toString === Object.prototype.toString) {
1087 var className = obj.constructor && obj.constructor.name;
1088 return (className ? className : '') + ': ' + JSON.stringify(obj);
1089 }
1090 return obj ? obj.toString() : Object.prototype.toString.call(obj);
1091 }
1092 var __symbol__ = api.symbol;
1093 var _uncaughtPromiseErrors = [];
1094 var isDisableWrappingUncaughtPromiseRejection = global[__symbol__('DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION')] === true;
1095 var symbolPromise = __symbol__('Promise');
1096 var symbolThen = __symbol__('then');
1097 var creationTrace = '__creationTrace__';
1098 api.onUnhandledError = function (e) {
1099 if (api.showUncaughtError()) {
1100 var rejection = e && e.rejection;
1101 if (rejection) {
1102 console.error('Unhandled Promise rejection:', rejection instanceof Error ? rejection.message : rejection, '; Zone:', e.zone.name, '; Task:', e.task && e.task.source, '; Value:', rejection, rejection instanceof Error ? rejection.stack : undefined);
1103 }
1104 else {
1105 console.error(e);
1106 }
1107 }
1108 };
1109 api.microtaskDrainDone = function () {
1110 var _loop_2 = function () {
1111 var uncaughtPromiseError = _uncaughtPromiseErrors.shift();
1112 try {
1113 uncaughtPromiseError.zone.runGuarded(function () {
1114 if (uncaughtPromiseError.throwOriginal) {
1115 throw uncaughtPromiseError.rejection;
1116 }
1117 throw uncaughtPromiseError;
1118 });
1119 }
1120 catch (error) {
1121 handleUnhandledRejection(error);
1122 }
1123 };
1124 while (_uncaughtPromiseErrors.length) {
1125 _loop_2();
1126 }
1127 };
1128 var UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL = __symbol__('unhandledPromiseRejectionHandler');
1129 function handleUnhandledRejection(e) {
1130 api.onUnhandledError(e);
1131 try {
1132 var handler = Zone[UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL];
1133 if (typeof handler === 'function') {
1134 handler.call(this, e);
1135 }
1136 }
1137 catch (err) {
1138 }
1139 }
1140 function isThenable(value) {
1141 return value && value.then;
1142 }
1143 function forwardResolution(value) {
1144 return value;
1145 }
1146 function forwardRejection(rejection) {
1147 return ZoneAwarePromise.reject(rejection);
1148 }
1149 var symbolState = __symbol__('state');
1150 var symbolValue = __symbol__('value');
1151 var symbolFinally = __symbol__('finally');
1152 var symbolParentPromiseValue = __symbol__('parentPromiseValue');
1153 var symbolParentPromiseState = __symbol__('parentPromiseState');
1154 var source = 'Promise.then';
1155 var UNRESOLVED = null;
1156 var RESOLVED = true;
1157 var REJECTED = false;
1158 var REJECTED_NO_CATCH = 0;
1159 function makeResolver(promise, state) {
1160 return function (v) {
1161 try {
1162 resolvePromise(promise, state, v);
1163 }
1164 catch (err) {
1165 resolvePromise(promise, false, err);
1166 }
1167 // Do not return value or you will break the Promise spec.
1168 };
1169 }
1170 var once = function () {
1171 var wasCalled = false;
1172 return function wrapper(wrappedFunction) {
1173 return function () {
1174 if (wasCalled) {
1175 return;
1176 }
1177 wasCalled = true;
1178 wrappedFunction.apply(null, arguments);
1179 };
1180 };
1181 };
1182 var TYPE_ERROR = 'Promise resolved with itself';
1183 var CURRENT_TASK_TRACE_SYMBOL = __symbol__('currentTaskTrace');
1184 // Promise Resolution
1185 function resolvePromise(promise, state, value) {
1186 var onceWrapper = once();
1187 if (promise === value) {
1188 throw new TypeError(TYPE_ERROR);
1189 }
1190 if (promise[symbolState] === UNRESOLVED) {
1191 // should only get value.then once based on promise spec.
1192 var then = null;
1193 try {
1194 if (typeof value === 'object' || typeof value === 'function') {
1195 then = value && value.then;
1196 }
1197 }
1198 catch (err) {
1199 onceWrapper(function () {
1200 resolvePromise(promise, false, err);
1201 })();
1202 return promise;
1203 }
1204 // if (value instanceof ZoneAwarePromise) {
1205 if (state !== REJECTED && value instanceof ZoneAwarePromise &&
1206 value.hasOwnProperty(symbolState) && value.hasOwnProperty(symbolValue) &&
1207 value[symbolState] !== UNRESOLVED) {
1208 clearRejectedNoCatch(value);
1209 resolvePromise(promise, value[symbolState], value[symbolValue]);
1210 }
1211 else if (state !== REJECTED && typeof then === 'function') {
1212 try {
1213 then.call(value, onceWrapper(makeResolver(promise, state)), onceWrapper(makeResolver(promise, false)));
1214 }
1215 catch (err) {
1216 onceWrapper(function () {
1217 resolvePromise(promise, false, err);
1218 })();
1219 }
1220 }
1221 else {
1222 promise[symbolState] = state;
1223 var queue = promise[symbolValue];
1224 promise[symbolValue] = value;
1225 if (promise[symbolFinally] === symbolFinally) {
1226 // the promise is generated by Promise.prototype.finally
1227 if (state === RESOLVED) {
1228 // the state is resolved, should ignore the value
1229 // and use parent promise value
1230 promise[symbolState] = promise[symbolParentPromiseState];
1231 promise[symbolValue] = promise[symbolParentPromiseValue];
1232 }
1233 }
1234 // record task information in value when error occurs, so we can
1235 // do some additional work such as render longStackTrace
1236 if (state === REJECTED && value instanceof Error) {
1237 // check if longStackTraceZone is here
1238 var trace = Zone.currentTask && Zone.currentTask.data &&
1239 Zone.currentTask.data[creationTrace];
1240 if (trace) {
1241 // only keep the long stack trace into error when in longStackTraceZone
1242 ObjectDefineProperty(value, CURRENT_TASK_TRACE_SYMBOL, { configurable: true, enumerable: false, writable: true, value: trace });
1243 }
1244 }
1245 for (var i = 0; i < queue.length;) {
1246 scheduleResolveOrReject(promise, queue[i++], queue[i++], queue[i++], queue[i++]);
1247 }
1248 if (queue.length == 0 && state == REJECTED) {
1249 promise[symbolState] = REJECTED_NO_CATCH;
1250 var uncaughtPromiseError = value;
1251 try {
1252 // Here we throws a new Error to print more readable error log
1253 // and if the value is not an error, zone.js builds an `Error`
1254 // Object here to attach the stack information.
1255 throw new Error('Uncaught (in promise): ' + readableObjectToString(value) +
1256 (value && value.stack ? '\n' + value.stack : ''));
1257 }
1258 catch (err) {
1259 uncaughtPromiseError = err;
1260 }
1261 if (isDisableWrappingUncaughtPromiseRejection) {
1262 // If disable wrapping uncaught promise reject
1263 // use the value instead of wrapping it.
1264 uncaughtPromiseError.throwOriginal = true;
1265 }
1266 uncaughtPromiseError.rejection = value;
1267 uncaughtPromiseError.promise = promise;
1268 uncaughtPromiseError.zone = Zone.current;
1269 uncaughtPromiseError.task = Zone.currentTask;
1270 _uncaughtPromiseErrors.push(uncaughtPromiseError);
1271 api.scheduleMicroTask(); // to make sure that it is running
1272 }
1273 }
1274 }
1275 // Resolving an already resolved promise is a noop.
1276 return promise;
1277 }
1278 var REJECTION_HANDLED_HANDLER = __symbol__('rejectionHandledHandler');
1279 function clearRejectedNoCatch(promise) {
1280 if (promise[symbolState] === REJECTED_NO_CATCH) {
1281 // if the promise is rejected no catch status
1282 // and queue.length > 0, means there is a error handler
1283 // here to handle the rejected promise, we should trigger
1284 // windows.rejectionhandled eventHandler or nodejs rejectionHandled
1285 // eventHandler
1286 try {
1287 var handler = Zone[REJECTION_HANDLED_HANDLER];
1288 if (handler && typeof handler === 'function') {
1289 handler.call(this, { rejection: promise[symbolValue], promise: promise });
1290 }
1291 }
1292 catch (err) {
1293 }
1294 promise[symbolState] = REJECTED;
1295 for (var i = 0; i < _uncaughtPromiseErrors.length; i++) {
1296 if (promise === _uncaughtPromiseErrors[i].promise) {
1297 _uncaughtPromiseErrors.splice(i, 1);
1298 }
1299 }
1300 }
1301 }
1302 function scheduleResolveOrReject(promise, zone, chainPromise, onFulfilled, onRejected) {
1303 clearRejectedNoCatch(promise);
1304 var promiseState = promise[symbolState];
1305 var delegate = promiseState ?
1306 (typeof onFulfilled === 'function') ? onFulfilled : forwardResolution :
1307 (typeof onRejected === 'function') ? onRejected : forwardRejection;
1308 zone.scheduleMicroTask(source, function () {
1309 try {
1310 var parentPromiseValue = promise[symbolValue];
1311 var isFinallyPromise = !!chainPromise && symbolFinally === chainPromise[symbolFinally];
1312 if (isFinallyPromise) {
1313 // if the promise is generated from finally call, keep parent promise's state and value
1314 chainPromise[symbolParentPromiseValue] = parentPromiseValue;
1315 chainPromise[symbolParentPromiseState] = promiseState;
1316 }
1317 // should not pass value to finally callback
1318 var value = zone.run(delegate, undefined, isFinallyPromise && delegate !== forwardRejection && delegate !== forwardResolution ?
1319 [] :
1320 [parentPromiseValue]);
1321 resolvePromise(chainPromise, true, value);
1322 }
1323 catch (error) {
1324 // if error occurs, should always return this error
1325 resolvePromise(chainPromise, false, error);
1326 }
1327 }, chainPromise);
1328 }
1329 var ZONE_AWARE_PROMISE_TO_STRING = 'function ZoneAwarePromise() { [native code] }';
1330 var noop = function () { };
1331 var ZoneAwarePromise = /** @class */ (function () {
1332 function ZoneAwarePromise(executor) {
1333 var promise = this;
1334 if (!(promise instanceof ZoneAwarePromise)) {
1335 throw new Error('Must be an instanceof Promise.');
1336 }
1337 promise[symbolState] = UNRESOLVED;
1338 promise[symbolValue] = []; // queue;
1339 try {
1340 executor && executor(makeResolver(promise, RESOLVED), makeResolver(promise, REJECTED));
1341 }
1342 catch (error) {
1343 resolvePromise(promise, false, error);
1344 }
1345 }
1346 ZoneAwarePromise.toString = function () {
1347 return ZONE_AWARE_PROMISE_TO_STRING;
1348 };
1349 ZoneAwarePromise.resolve = function (value) {
1350 return resolvePromise(new this(null), RESOLVED, value);
1351 };
1352 ZoneAwarePromise.reject = function (error) {
1353 return resolvePromise(new this(null), REJECTED, error);
1354 };
1355 ZoneAwarePromise.race = function (values) {
1356 var resolve;
1357 var reject;
1358 var promise = new this(function (res, rej) {
1359 resolve = res;
1360 reject = rej;
1361 });
1362 function onResolve(value) {
1363 resolve(value);
1364 }
1365 function onReject(error) {
1366 reject(error);
1367 }
1368 for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {
1369 var value = values_1[_i];
1370 if (!isThenable(value)) {
1371 value = this.resolve(value);
1372 }
1373 value.then(onResolve, onReject);
1374 }
1375 return promise;
1376 };
1377 ZoneAwarePromise.all = function (values) {
1378 return ZoneAwarePromise.allWithCallback(values);
1379 };
1380 ZoneAwarePromise.allSettled = function (values) {
1381 var P = this && this.prototype instanceof ZoneAwarePromise ? this : ZoneAwarePromise;
1382 return P.allWithCallback(values, {
1383 thenCallback: function (value) { return ({ status: 'fulfilled', value: value }); },
1384 errorCallback: function (err) { return ({ status: 'rejected', reason: err }); }
1385 });
1386 };
1387 ZoneAwarePromise.allWithCallback = function (values, callback) {
1388 var resolve;
1389 var reject;
1390 var promise = new this(function (res, rej) {
1391 resolve = res;
1392 reject = rej;
1393 });
1394 // Start at 2 to prevent prematurely resolving if .then is called immediately.
1395 var unresolvedCount = 2;
1396 var valueIndex = 0;
1397 var resolvedValues = [];
1398 var _loop_3 = function (value) {
1399 if (!isThenable(value)) {
1400 value = this_1.resolve(value);
1401 }
1402 var curValueIndex = valueIndex;
1403 try {
1404 value.then(function (value) {
1405 resolvedValues[curValueIndex] = callback ? callback.thenCallback(value) : value;
1406 unresolvedCount--;
1407 if (unresolvedCount === 0) {
1408 resolve(resolvedValues);
1409 }
1410 }, function (err) {
1411 if (!callback) {
1412 reject(err);
1413 }
1414 else {
1415 resolvedValues[curValueIndex] = callback.errorCallback(err);
1416 unresolvedCount--;
1417 if (unresolvedCount === 0) {
1418 resolve(resolvedValues);
1419 }
1420 }
1421 });
1422 }
1423 catch (thenErr) {
1424 reject(thenErr);
1425 }
1426 unresolvedCount++;
1427 valueIndex++;
1428 };
1429 var this_1 = this;
1430 for (var _i = 0, values_2 = values; _i < values_2.length; _i++) {
1431 var value = values_2[_i];
1432 _loop_3(value);
1433 }
1434 // Make the unresolvedCount zero-based again.
1435 unresolvedCount -= 2;
1436 if (unresolvedCount === 0) {
1437 resolve(resolvedValues);
1438 }
1439 return promise;
1440 };
1441 Object.defineProperty(ZoneAwarePromise.prototype, Symbol.toStringTag, {
1442 get: function () {
1443 return 'Promise';
1444 },
1445 enumerable: false,
1446 configurable: true
1447 });
1448 Object.defineProperty(ZoneAwarePromise.prototype, Symbol.species, {
1449 get: function () {
1450 return ZoneAwarePromise;
1451 },
1452 enumerable: false,
1453 configurable: true
1454 });
1455 ZoneAwarePromise.prototype.then = function (onFulfilled, onRejected) {
1456 var C = this.constructor[Symbol.species];
1457 if (!C || typeof C !== 'function') {
1458 C = this.constructor || ZoneAwarePromise;
1459 }
1460 var chainPromise = new C(noop);
1461 var zone = Zone.current;
1462 if (this[symbolState] == UNRESOLVED) {
1463 this[symbolValue].push(zone, chainPromise, onFulfilled, onRejected);
1464 }
1465 else {
1466 scheduleResolveOrReject(this, zone, chainPromise, onFulfilled, onRejected);
1467 }
1468 return chainPromise;
1469 };
1470 ZoneAwarePromise.prototype.catch = function (onRejected) {
1471 return this.then(null, onRejected);
1472 };
1473 ZoneAwarePromise.prototype.finally = function (onFinally) {
1474 var C = this.constructor[Symbol.species];
1475 if (!C || typeof C !== 'function') {
1476 C = ZoneAwarePromise;
1477 }
1478 var chainPromise = new C(noop);
1479 chainPromise[symbolFinally] = symbolFinally;
1480 var zone = Zone.current;
1481 if (this[symbolState] == UNRESOLVED) {
1482 this[symbolValue].push(zone, chainPromise, onFinally, onFinally);
1483 }
1484 else {
1485 scheduleResolveOrReject(this, zone, chainPromise, onFinally, onFinally);
1486 }
1487 return chainPromise;
1488 };
1489 return ZoneAwarePromise;
1490 }());
1491 // Protect against aggressive optimizers dropping seemingly unused properties.
1492 // E.g. Closure Compiler in advanced mode.
1493 ZoneAwarePromise['resolve'] = ZoneAwarePromise.resolve;
1494 ZoneAwarePromise['reject'] = ZoneAwarePromise.reject;
1495 ZoneAwarePromise['race'] = ZoneAwarePromise.race;
1496 ZoneAwarePromise['all'] = ZoneAwarePromise.all;
1497 var NativePromise = global[symbolPromise] = global['Promise'];
1498 global['Promise'] = ZoneAwarePromise;
1499 var symbolThenPatched = __symbol__('thenPatched');
1500 function patchThen(Ctor) {
1501 var proto = Ctor.prototype;
1502 var prop = ObjectGetOwnPropertyDescriptor(proto, 'then');
1503 if (prop && (prop.writable === false || !prop.configurable)) {
1504 // check Ctor.prototype.then propertyDescriptor is writable or not
1505 // in meteor env, writable is false, we should ignore such case
1506 return;
1507 }
1508 var originalThen = proto.then;
1509 // Keep a reference to the original method.
1510 proto[symbolThen] = originalThen;
1511 Ctor.prototype.then = function (onResolve, onReject) {
1512 var _this = this;
1513 var wrapped = new ZoneAwarePromise(function (resolve, reject) {
1514 originalThen.call(_this, resolve, reject);
1515 });
1516 return wrapped.then(onResolve, onReject);
1517 };
1518 Ctor[symbolThenPatched] = true;
1519 }
1520 api.patchThen = patchThen;
1521 function zoneify(fn) {
1522 return function (self, args) {
1523 var resultPromise = fn.apply(self, args);
1524 if (resultPromise instanceof ZoneAwarePromise) {
1525 return resultPromise;
1526 }
1527 var ctor = resultPromise.constructor;
1528 if (!ctor[symbolThenPatched]) {
1529 patchThen(ctor);
1530 }
1531 return resultPromise;
1532 };
1533 }
1534 if (NativePromise) {
1535 patchThen(NativePromise);
1536 patchMethod(global, 'fetch', function (delegate) { return zoneify(delegate); });
1537 }
1538 // This is not part of public API, but it is useful for tests, so we expose it.
1539 Promise[Zone.__symbol__('uncaughtPromiseErrors')] = _uncaughtPromiseErrors;
1540 return ZoneAwarePromise;
1541 });
1542 /**
1543 * @license
1544 * Copyright Google LLC All Rights Reserved.
1545 *
1546 * Use of this source code is governed by an MIT-style license that can be
1547 * found in the LICENSE file at https://angular.io/license
1548 */
1549 // override Function.prototype.toString to make zone.js patched function
1550 // look like native function
1551 Zone.__load_patch('toString', function (global) {
1552 // patch Func.prototype.toString to let them look like native
1553 var originalFunctionToString = Function.prototype.toString;
1554 var ORIGINAL_DELEGATE_SYMBOL = zoneSymbol('OriginalDelegate');
1555 var PROMISE_SYMBOL = zoneSymbol('Promise');
1556 var ERROR_SYMBOL = zoneSymbol('Error');
1557 var newFunctionToString = function toString() {
1558 if (typeof this === 'function') {
1559 var originalDelegate = this[ORIGINAL_DELEGATE_SYMBOL];
1560 if (originalDelegate) {
1561 if (typeof originalDelegate === 'function') {
1562 return originalFunctionToString.call(originalDelegate);
1563 }
1564 else {
1565 return Object.prototype.toString.call(originalDelegate);
1566 }
1567 }
1568 if (this === Promise) {
1569 var nativePromise = global[PROMISE_SYMBOL];
1570 if (nativePromise) {
1571 return originalFunctionToString.call(nativePromise);
1572 }
1573 }
1574 if (this === Error) {
1575 var nativeError = global[ERROR_SYMBOL];
1576 if (nativeError) {
1577 return originalFunctionToString.call(nativeError);
1578 }
1579 }
1580 }
1581 return originalFunctionToString.call(this);
1582 };
1583 newFunctionToString[ORIGINAL_DELEGATE_SYMBOL] = originalFunctionToString;
1584 Function.prototype.toString = newFunctionToString;
1585 // patch Object.prototype.toString to let them look like native
1586 var originalObjectToString = Object.prototype.toString;
1587 var PROMISE_OBJECT_TO_STRING = '[object Promise]';
1588 Object.prototype.toString = function () {
1589 if (typeof Promise === 'function' && this instanceof Promise) {
1590 return PROMISE_OBJECT_TO_STRING;
1591 }
1592 return originalObjectToString.call(this);
1593 };
1594 });
1595 /**
1596 * @license
1597 * Copyright Google LLC All Rights Reserved.
1598 *
1599 * Use of this source code is governed by an MIT-style license that can be
1600 * found in the LICENSE file at https://angular.io/license
1601 */
1602 var passiveSupported = false;
1603 if (typeof window !== 'undefined') {
1604 try {
1605 var options = Object.defineProperty({}, 'passive', {
1606 get: function () {
1607 passiveSupported = true;
1608 }
1609 });
1610 window.addEventListener('test', options, options);
1611 window.removeEventListener('test', options, options);
1612 }
1613 catch (err) {
1614 passiveSupported = false;
1615 }
1616 }
1617 // an identifier to tell ZoneTask do not create a new invoke closure
1618 var OPTIMIZED_ZONE_EVENT_TASK_DATA = {
1619 useG: true
1620 };
1621 var zoneSymbolEventNames$1 = {};
1622 var globalSources = {};
1623 var EVENT_NAME_SYMBOL_REGX = new RegExp('^' + ZONE_SYMBOL_PREFIX + '(\\w+)(true|false)$');
1624 var IMMEDIATE_PROPAGATION_SYMBOL = zoneSymbol('propagationStopped');
1625 function prepareEventNames(eventName, eventNameToString) {
1626 var falseEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + FALSE_STR;
1627 var trueEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + TRUE_STR;
1628 var symbol = ZONE_SYMBOL_PREFIX + falseEventName;
1629 var symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName;
1630 zoneSymbolEventNames$1[eventName] = {};
1631 zoneSymbolEventNames$1[eventName][FALSE_STR] = symbol;
1632 zoneSymbolEventNames$1[eventName][TRUE_STR] = symbolCapture;
1633 }
1634 function patchEventTarget(_global, apis, patchOptions) {
1635 var ADD_EVENT_LISTENER = (patchOptions && patchOptions.add) || ADD_EVENT_LISTENER_STR;
1636 var REMOVE_EVENT_LISTENER = (patchOptions && patchOptions.rm) || REMOVE_EVENT_LISTENER_STR;
1637 var LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.listeners) || 'eventListeners';
1638 var REMOVE_ALL_LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.rmAll) || 'removeAllListeners';
1639 var zoneSymbolAddEventListener = zoneSymbol(ADD_EVENT_LISTENER);
1640 var ADD_EVENT_LISTENER_SOURCE = '.' + ADD_EVENT_LISTENER + ':';
1641 var PREPEND_EVENT_LISTENER = 'prependListener';
1642 var PREPEND_EVENT_LISTENER_SOURCE = '.' + PREPEND_EVENT_LISTENER + ':';
1643 var invokeTask = function (task, target, event) {
1644 // for better performance, check isRemoved which is set
1645 // by removeEventListener
1646 if (task.isRemoved) {
1647 return;
1648 }
1649 var delegate = task.callback;
1650 if (typeof delegate === 'object' && delegate.handleEvent) {
1651 // create the bind version of handleEvent when invoke
1652 task.callback = function (event) { return delegate.handleEvent(event); };
1653 task.originalDelegate = delegate;
1654 }
1655 // invoke static task.invoke
1656 task.invoke(task, target, [event]);
1657 var options = task.options;
1658 if (options && typeof options === 'object' && options.once) {
1659 // if options.once is true, after invoke once remove listener here
1660 // only browser need to do this, nodejs eventEmitter will cal removeListener
1661 // inside EventEmitter.once
1662 var delegate_1 = task.originalDelegate ? task.originalDelegate : task.callback;
1663 target[REMOVE_EVENT_LISTENER].call(target, event.type, delegate_1, options);
1664 }
1665 };
1666 // global shared zoneAwareCallback to handle all event callback with capture = false
1667 var globalZoneAwareCallback = function (event) {
1668 // https://github.com/angular/zone.js/issues/911, in IE, sometimes
1669 // event will be undefined, so we need to use window.event
1670 event = event || _global.event;
1671 if (!event) {
1672 return;
1673 }
1674 // event.target is needed for Samsung TV and SourceBuffer
1675 // || global is needed https://github.com/angular/zone.js/issues/190
1676 var target = this || event.target || _global;
1677 var tasks = target[zoneSymbolEventNames$1[event.type][FALSE_STR]];
1678 if (tasks) {
1679 // invoke all tasks which attached to current target with given event.type and capture = false
1680 // for performance concern, if task.length === 1, just invoke
1681 if (tasks.length === 1) {
1682 invokeTask(tasks[0], target, event);
1683 }
1684 else {
1685 // https://github.com/angular/zone.js/issues/836
1686 // copy the tasks array before invoke, to avoid
1687 // the callback will remove itself or other listener
1688 var copyTasks = tasks.slice();
1689 for (var i = 0; i < copyTasks.length; i++) {
1690 if (event && event[IMMEDIATE_PROPAGATION_SYMBOL] === true) {
1691 break;
1692 }
1693 invokeTask(copyTasks[i], target, event);
1694 }
1695 }
1696 }
1697 };
1698 // global shared zoneAwareCallback to handle all event callback with capture = true
1699 var globalZoneAwareCaptureCallback = function (event) {
1700 // https://github.com/angular/zone.js/issues/911, in IE, sometimes
1701 // event will be undefined, so we need to use window.event
1702 event = event || _global.event;
1703 if (!event) {
1704 return;
1705 }
1706 // event.target is needed for Samsung TV and SourceBuffer
1707 // || global is needed https://github.com/angular/zone.js/issues/190
1708 var target = this || event.target || _global;
1709 var tasks = target[zoneSymbolEventNames$1[event.type][TRUE_STR]];
1710 if (tasks) {
1711 // invoke all tasks which attached to current target with given event.type and capture = false
1712 // for performance concern, if task.length === 1, just invoke
1713 if (tasks.length === 1) {
1714 invokeTask(tasks[0], target, event);
1715 }
1716 else {
1717 // https://github.com/angular/zone.js/issues/836
1718 // copy the tasks array before invoke, to avoid
1719 // the callback will remove itself or other listener
1720 var copyTasks = tasks.slice();
1721 for (var i = 0; i < copyTasks.length; i++) {
1722 if (event && event[IMMEDIATE_PROPAGATION_SYMBOL] === true) {
1723 break;
1724 }
1725 invokeTask(copyTasks[i], target, event);
1726 }
1727 }
1728 }
1729 };
1730 function patchEventTargetMethods(obj, patchOptions) {
1731 if (!obj) {
1732 return false;
1733 }
1734 var useGlobalCallback = true;
1735 if (patchOptions && patchOptions.useG !== undefined) {
1736 useGlobalCallback = patchOptions.useG;
1737 }
1738 var validateHandler = patchOptions && patchOptions.vh;
1739 var checkDuplicate = true;
1740 if (patchOptions && patchOptions.chkDup !== undefined) {
1741 checkDuplicate = patchOptions.chkDup;
1742 }
1743 var returnTarget = false;
1744 if (patchOptions && patchOptions.rt !== undefined) {
1745 returnTarget = patchOptions.rt;
1746 }
1747 var proto = obj;
1748 while (proto && !proto.hasOwnProperty(ADD_EVENT_LISTENER)) {
1749 proto = ObjectGetPrototypeOf(proto);
1750 }
1751 if (!proto && obj[ADD_EVENT_LISTENER]) {
1752 // somehow we did not find it, but we can see it. This happens on IE for Window properties.
1753 proto = obj;
1754 }
1755 if (!proto) {
1756 return false;
1757 }
1758 if (proto[zoneSymbolAddEventListener]) {
1759 return false;
1760 }
1761 var eventNameToString = patchOptions && patchOptions.eventNameToString;
1762 // a shared global taskData to pass data for scheduleEventTask
1763 // so we do not need to create a new object just for pass some data
1764 var taskData = {};
1765 var nativeAddEventListener = proto[zoneSymbolAddEventListener] = proto[ADD_EVENT_LISTENER];
1766 var nativeRemoveEventListener = proto[zoneSymbol(REMOVE_EVENT_LISTENER)] =
1767 proto[REMOVE_EVENT_LISTENER];
1768 var nativeListeners = proto[zoneSymbol(LISTENERS_EVENT_LISTENER)] =
1769 proto[LISTENERS_EVENT_LISTENER];
1770 var nativeRemoveAllListeners = proto[zoneSymbol(REMOVE_ALL_LISTENERS_EVENT_LISTENER)] =
1771 proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER];
1772 var nativePrependEventListener;
1773 if (patchOptions && patchOptions.prepend) {
1774 nativePrependEventListener = proto[zoneSymbol(patchOptions.prepend)] =
1775 proto[patchOptions.prepend];
1776 }
1777 /**
1778 * This util function will build an option object with passive option
1779 * to handle all possible input from the user.
1780 */
1781 function buildEventListenerOptions(options, passive) {
1782 if (!passiveSupported && typeof options === 'object' && options) {
1783 // doesn't support passive but user want to pass an object as options.
1784 // this will not work on some old browser, so we just pass a boolean
1785 // as useCapture parameter
1786 return !!options.capture;
1787 }
1788 if (!passiveSupported || !passive) {
1789 return options;
1790 }
1791 if (typeof options === 'boolean') {
1792 return { capture: options, passive: true };
1793 }
1794 if (!options) {
1795 return { passive: true };
1796 }
1797 if (typeof options === 'object' && options.passive !== false) {
1798 return Object.assign(Object.assign({}, options), { passive: true });
1799 }
1800 return options;
1801 }
1802 var customScheduleGlobal = function (task) {
1803 // if there is already a task for the eventName + capture,
1804 // just return, because we use the shared globalZoneAwareCallback here.
1805 if (taskData.isExisting) {
1806 return;
1807 }
1808 return nativeAddEventListener.call(taskData.target, taskData.eventName, taskData.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, taskData.options);
1809 };
1810 var customCancelGlobal = function (task) {
1811 // if task is not marked as isRemoved, this call is directly
1812 // from Zone.prototype.cancelTask, we should remove the task
1813 // from tasksList of target first
1814 if (!task.isRemoved) {
1815 var symbolEventNames = zoneSymbolEventNames$1[task.eventName];
1816 var symbolEventName = void 0;
1817 if (symbolEventNames) {
1818 symbolEventName = symbolEventNames[task.capture ? TRUE_STR : FALSE_STR];
1819 }
1820 var existingTasks = symbolEventName && task.target[symbolEventName];
1821 if (existingTasks) {
1822 for (var i = 0; i < existingTasks.length; i++) {
1823 var existingTask = existingTasks[i];
1824 if (existingTask === task) {
1825 existingTasks.splice(i, 1);
1826 // set isRemoved to data for faster invokeTask check
1827 task.isRemoved = true;
1828 if (existingTasks.length === 0) {
1829 // all tasks for the eventName + capture have gone,
1830 // remove globalZoneAwareCallback and remove the task cache from target
1831 task.allRemoved = true;
1832 task.target[symbolEventName] = null;
1833 }
1834 break;
1835 }
1836 }
1837 }
1838 }
1839 // if all tasks for the eventName + capture have gone,
1840 // we will really remove the global event callback,
1841 // if not, return
1842 if (!task.allRemoved) {
1843 return;
1844 }
1845 return nativeRemoveEventListener.call(task.target, task.eventName, task.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, task.options);
1846 };
1847 var customScheduleNonGlobal = function (task) {
1848 return nativeAddEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options);
1849 };
1850 var customSchedulePrepend = function (task) {
1851 return nativePrependEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options);
1852 };
1853 var customCancelNonGlobal = function (task) {
1854 return nativeRemoveEventListener.call(task.target, task.eventName, task.invoke, task.options);
1855 };
1856 var customSchedule = useGlobalCallback ? customScheduleGlobal : customScheduleNonGlobal;
1857 var customCancel = useGlobalCallback ? customCancelGlobal : customCancelNonGlobal;
1858 var compareTaskCallbackVsDelegate = function (task, delegate) {
1859 var typeOfDelegate = typeof delegate;
1860 return (typeOfDelegate === 'function' && task.callback === delegate) ||
1861 (typeOfDelegate === 'object' && task.originalDelegate === delegate);
1862 };
1863 var compare = (patchOptions && patchOptions.diff) ? patchOptions.diff : compareTaskCallbackVsDelegate;
1864 var unpatchedEvents = Zone[zoneSymbol('UNPATCHED_EVENTS')];
1865 var passiveEvents = _global[zoneSymbol('PASSIVE_EVENTS')];
1866 var makeAddListener = function (nativeListener, addSource, customScheduleFn, customCancelFn, returnTarget, prepend) {
1867 if (returnTarget === void 0) { returnTarget = false; }
1868 if (prepend === void 0) { prepend = false; }
1869 return function () {
1870 var target = this || _global;
1871 var eventName = arguments[0];
1872 if (patchOptions && patchOptions.transferEventName) {
1873 eventName = patchOptions.transferEventName(eventName);
1874 }
1875 var delegate = arguments[1];
1876 if (!delegate) {
1877 return nativeListener.apply(this, arguments);
1878 }
1879 if (isNode && eventName === 'uncaughtException') {
1880 // don't patch uncaughtException of nodejs to prevent endless loop
1881 return nativeListener.apply(this, arguments);
1882 }
1883 // don't create the bind delegate function for handleEvent
1884 // case here to improve addEventListener performance
1885 // we will create the bind delegate when invoke
1886 var isHandleEvent = false;
1887 if (typeof delegate !== 'function') {
1888 if (!delegate.handleEvent) {
1889 return nativeListener.apply(this, arguments);
1890 }
1891 isHandleEvent = true;
1892 }
1893 if (validateHandler && !validateHandler(nativeListener, delegate, target, arguments)) {
1894 return;
1895 }
1896 var passive = passiveSupported && !!passiveEvents && passiveEvents.indexOf(eventName) !== -1;
1897 var options = buildEventListenerOptions(arguments[2], passive);
1898 if (unpatchedEvents) {
1899 // check upatched list
1900 for (var i = 0; i < unpatchedEvents.length; i++) {
1901 if (eventName === unpatchedEvents[i]) {
1902 if (passive) {
1903 return nativeListener.call(target, eventName, delegate, options);
1904 }
1905 else {
1906 return nativeListener.apply(this, arguments);
1907 }
1908 }
1909 }
1910 }
1911 var capture = !options ? false : typeof options === 'boolean' ? true : options.capture;
1912 var once = options && typeof options === 'object' ? options.once : false;
1913 var zone = Zone.current;
1914 var symbolEventNames = zoneSymbolEventNames$1[eventName];
1915 if (!symbolEventNames) {
1916 prepareEventNames(eventName, eventNameToString);
1917 symbolEventNames = zoneSymbolEventNames$1[eventName];
1918 }
1919 var symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR];
1920 var existingTasks = target[symbolEventName];
1921 var isExisting = false;
1922 if (existingTasks) {
1923 // already have task registered
1924 isExisting = true;
1925 if (checkDuplicate) {
1926 for (var i = 0; i < existingTasks.length; i++) {
1927 if (compare(existingTasks[i], delegate)) {
1928 // same callback, same capture, same event name, just return
1929 return;
1930 }
1931 }
1932 }
1933 }
1934 else {
1935 existingTasks = target[symbolEventName] = [];
1936 }
1937 var source;
1938 var constructorName = target.constructor['name'];
1939 var targetSource = globalSources[constructorName];
1940 if (targetSource) {
1941 source = targetSource[eventName];
1942 }
1943 if (!source) {
1944 source = constructorName + addSource +
1945 (eventNameToString ? eventNameToString(eventName) : eventName);
1946 }
1947 // do not create a new object as task.data to pass those things
1948 // just use the global shared one
1949 taskData.options = options;
1950 if (once) {
1951 // if addEventListener with once options, we don't pass it to
1952 // native addEventListener, instead we keep the once setting
1953 // and handle ourselves.
1954 taskData.options.once = false;
1955 }
1956 taskData.target = target;
1957 taskData.capture = capture;
1958 taskData.eventName = eventName;
1959 taskData.isExisting = isExisting;
1960 var data = useGlobalCallback ? OPTIMIZED_ZONE_EVENT_TASK_DATA : undefined;
1961 // keep taskData into data to allow onScheduleEventTask to access the task information
1962 if (data) {
1963 data.taskData = taskData;
1964 }
1965 var task = zone.scheduleEventTask(source, delegate, data, customScheduleFn, customCancelFn);
1966 // should clear taskData.target to avoid memory leak
1967 // issue, https://github.com/angular/angular/issues/20442
1968 taskData.target = null;
1969 // need to clear up taskData because it is a global object
1970 if (data) {
1971 data.taskData = null;
1972 }
1973 // have to save those information to task in case
1974 // application may call task.zone.cancelTask() directly
1975 if (once) {
1976 options.once = true;
1977 }
1978 if (!(!passiveSupported && typeof task.options === 'boolean')) {
1979 // if not support passive, and we pass an option object
1980 // to addEventListener, we should save the options to task
1981 task.options = options;
1982 }
1983 task.target = target;
1984 task.capture = capture;
1985 task.eventName = eventName;
1986 if (isHandleEvent) {
1987 // save original delegate for compare to check duplicate
1988 task.originalDelegate = delegate;
1989 }
1990 if (!prepend) {
1991 existingTasks.push(task);
1992 }
1993 else {
1994 existingTasks.unshift(task);
1995 }
1996 if (returnTarget) {
1997 return target;
1998 }
1999 };
2000 };
2001 proto[ADD_EVENT_LISTENER] = makeAddListener(nativeAddEventListener, ADD_EVENT_LISTENER_SOURCE, customSchedule, customCancel, returnTarget);
2002 if (nativePrependEventListener) {
2003 proto[PREPEND_EVENT_LISTENER] = makeAddListener(nativePrependEventListener, PREPEND_EVENT_LISTENER_SOURCE, customSchedulePrepend, customCancel, returnTarget, true);
2004 }
2005 proto[REMOVE_EVENT_LISTENER] = function () {
2006 var target = this || _global;
2007 var eventName = arguments[0];
2008 if (patchOptions && patchOptions.transferEventName) {
2009 eventName = patchOptions.transferEventName(eventName);
2010 }
2011 var options = arguments[2];
2012 var capture = !options ? false : typeof options === 'boolean' ? true : options.capture;
2013 var delegate = arguments[1];
2014 if (!delegate) {
2015 return nativeRemoveEventListener.apply(this, arguments);
2016 }
2017 if (validateHandler &&
2018 !validateHandler(nativeRemoveEventListener, delegate, target, arguments)) {
2019 return;
2020 }
2021 var symbolEventNames = zoneSymbolEventNames$1[eventName];
2022 var symbolEventName;
2023 if (symbolEventNames) {
2024 symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR];
2025 }
2026 var existingTasks = symbolEventName && target[symbolEventName];
2027 if (existingTasks) {
2028 for (var i = 0; i < existingTasks.length; i++) {
2029 var existingTask = existingTasks[i];
2030 if (compare(existingTask, delegate)) {
2031 existingTasks.splice(i, 1);
2032 // set isRemoved to data for faster invokeTask check
2033 existingTask.isRemoved = true;
2034 if (existingTasks.length === 0) {
2035 // all tasks for the eventName + capture have gone,
2036 // remove globalZoneAwareCallback and remove the task cache from target
2037 existingTask.allRemoved = true;
2038 target[symbolEventName] = null;
2039 // in the target, we have an event listener which is added by on_property
2040 // such as target.onclick = function() {}, so we need to clear this internal
2041 // property too if all delegates all removed
2042 if (typeof eventName === 'string') {
2043 var onPropertySymbol = ZONE_SYMBOL_PREFIX + 'ON_PROPERTY' + eventName;
2044 target[onPropertySymbol] = null;
2045 }
2046 }
2047 existingTask.zone.cancelTask(existingTask);
2048 if (returnTarget) {
2049 return target;
2050 }
2051 return;
2052 }
2053 }
2054 }
2055 // issue 930, didn't find the event name or callback
2056 // from zone kept existingTasks, the callback maybe
2057 // added outside of zone, we need to call native removeEventListener
2058 // to try to remove it.
2059 return nativeRemoveEventListener.apply(this, arguments);
2060 };
2061 proto[LISTENERS_EVENT_LISTENER] = function () {
2062 var target = this || _global;
2063 var eventName = arguments[0];
2064 if (patchOptions && patchOptions.transferEventName) {
2065 eventName = patchOptions.transferEventName(eventName);
2066 }
2067 var listeners = [];
2068 var tasks = findEventTasks(target, eventNameToString ? eventNameToString(eventName) : eventName);
2069 for (var i = 0; i < tasks.length; i++) {
2070 var task = tasks[i];
2071 var delegate = task.originalDelegate ? task.originalDelegate : task.callback;
2072 listeners.push(delegate);
2073 }
2074 return listeners;
2075 };
2076 proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER] = function () {
2077 var target = this || _global;
2078 var eventName = arguments[0];
2079 if (!eventName) {
2080 var keys = Object.keys(target);
2081 for (var i = 0; i < keys.length; i++) {
2082 var prop = keys[i];
2083 var match = EVENT_NAME_SYMBOL_REGX.exec(prop);
2084 var evtName = match && match[1];
2085 // in nodejs EventEmitter, removeListener event is
2086 // used for monitoring the removeListener call,
2087 // so just keep removeListener eventListener until
2088 // all other eventListeners are removed
2089 if (evtName && evtName !== 'removeListener') {
2090 this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, evtName);
2091 }
2092 }
2093 // remove removeListener listener finally
2094 this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, 'removeListener');
2095 }
2096 else {
2097 if (patchOptions && patchOptions.transferEventName) {
2098 eventName = patchOptions.transferEventName(eventName);
2099 }
2100 var symbolEventNames = zoneSymbolEventNames$1[eventName];
2101 if (symbolEventNames) {
2102 var symbolEventName = symbolEventNames[FALSE_STR];
2103 var symbolCaptureEventName = symbolEventNames[TRUE_STR];
2104 var tasks = target[symbolEventName];
2105 var captureTasks = target[symbolCaptureEventName];
2106 if (tasks) {
2107 var removeTasks = tasks.slice();
2108 for (var i = 0; i < removeTasks.length; i++) {
2109 var task = removeTasks[i];
2110 var delegate = task.originalDelegate ? task.originalDelegate : task.callback;
2111 this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options);
2112 }
2113 }
2114 if (captureTasks) {
2115 var removeTasks = captureTasks.slice();
2116 for (var i = 0; i < removeTasks.length; i++) {
2117 var task = removeTasks[i];
2118 var delegate = task.originalDelegate ? task.originalDelegate : task.callback;
2119 this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options);
2120 }
2121 }
2122 }
2123 }
2124 if (returnTarget) {
2125 return this;
2126 }
2127 };
2128 // for native toString patch
2129 attachOriginToPatched(proto[ADD_EVENT_LISTENER], nativeAddEventListener);
2130 attachOriginToPatched(proto[REMOVE_EVENT_LISTENER], nativeRemoveEventListener);
2131 if (nativeRemoveAllListeners) {
2132 attachOriginToPatched(proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER], nativeRemoveAllListeners);
2133 }
2134 if (nativeListeners) {
2135 attachOriginToPatched(proto[LISTENERS_EVENT_LISTENER], nativeListeners);
2136 }
2137 return true;
2138 }
2139 var results = [];
2140 for (var i = 0; i < apis.length; i++) {
2141 results[i] = patchEventTargetMethods(apis[i], patchOptions);
2142 }
2143 return results;
2144 }
2145 function findEventTasks(target, eventName) {
2146 if (!eventName) {
2147 var foundTasks = [];
2148 for (var prop in target) {
2149 var match = EVENT_NAME_SYMBOL_REGX.exec(prop);
2150 var evtName = match && match[1];
2151 if (evtName && (!eventName || evtName === eventName)) {
2152 var tasks = target[prop];
2153 if (tasks) {
2154 for (var i = 0; i < tasks.length; i++) {
2155 foundTasks.push(tasks[i]);
2156 }
2157 }
2158 }
2159 }
2160 return foundTasks;
2161 }
2162 var symbolEventName = zoneSymbolEventNames$1[eventName];
2163 if (!symbolEventName) {
2164 prepareEventNames(eventName);
2165 symbolEventName = zoneSymbolEventNames$1[eventName];
2166 }
2167 var captureFalseTasks = target[symbolEventName[FALSE_STR]];
2168 var captureTrueTasks = target[symbolEventName[TRUE_STR]];
2169 if (!captureFalseTasks) {
2170 return captureTrueTasks ? captureTrueTasks.slice() : [];
2171 }
2172 else {
2173 return captureTrueTasks ? captureFalseTasks.concat(captureTrueTasks) :
2174 captureFalseTasks.slice();
2175 }
2176 }
2177 function patchEventPrototype(global, api) {
2178 var Event = global['Event'];
2179 if (Event && Event.prototype) {
2180 api.patchMethod(Event.prototype, 'stopImmediatePropagation', function (delegate) { return function (self, args) {
2181 self[IMMEDIATE_PROPAGATION_SYMBOL] = true;
2182 // we need to call the native stopImmediatePropagation
2183 // in case in some hybrid application, some part of
2184 // application will be controlled by zone, some are not
2185 delegate && delegate.apply(self, args);
2186 }; });
2187 }
2188 }
2189 /**
2190 * @license
2191 * Copyright Google LLC All Rights Reserved.
2192 *
2193 * Use of this source code is governed by an MIT-style license that can be
2194 * found in the LICENSE file at https://angular.io/license
2195 */
2196 function patchCallbacks(api, target, targetName, method, callbacks) {
2197 var symbol = Zone.__symbol__(method);
2198 if (target[symbol]) {
2199 return;
2200 }
2201 var nativeDelegate = target[symbol] = target[method];
2202 target[method] = function (name, opts, options) {
2203 if (opts && opts.prototype) {
2204 callbacks.forEach(function (callback) {
2205 var source = targetName + "." + method + "::" + callback;
2206 var prototype = opts.prototype;
2207 if (prototype.hasOwnProperty(callback)) {
2208 var descriptor = api.ObjectGetOwnPropertyDescriptor(prototype, callback);
2209 if (descriptor && descriptor.value) {
2210 descriptor.value = api.wrapWithCurrentZone(descriptor.value, source);
2211 api._redefineProperty(opts.prototype, callback, descriptor);
2212 }
2213 else if (prototype[callback]) {
2214 prototype[callback] = api.wrapWithCurrentZone(prototype[callback], source);
2215 }
2216 }
2217 else if (prototype[callback]) {
2218 prototype[callback] = api.wrapWithCurrentZone(prototype[callback], source);
2219 }
2220 });
2221 }
2222 return nativeDelegate.call(target, name, opts, options);
2223 };
2224 api.attachOriginToPatched(target[method], nativeDelegate);
2225 }
2226 /**
2227 * @license
2228 * Copyright Google LLC All Rights Reserved.
2229 *
2230 * Use of this source code is governed by an MIT-style license that can be
2231 * found in the LICENSE file at https://angular.io/license
2232 */
2233 var globalEventHandlersEventNames = [
2234 'abort',
2235 'animationcancel',
2236 'animationend',
2237 'animationiteration',
2238 'auxclick',
2239 'beforeinput',
2240 'blur',
2241 'cancel',
2242 'canplay',
2243 'canplaythrough',
2244 'change',
2245 'compositionstart',
2246 'compositionupdate',
2247 'compositionend',
2248 'cuechange',
2249 'click',
2250 'close',
2251 'contextmenu',
2252 'curechange',
2253 'dblclick',
2254 'drag',
2255 'dragend',
2256 'dragenter',
2257 'dragexit',
2258 'dragleave',
2259 'dragover',
2260 'drop',
2261 'durationchange',
2262 'emptied',
2263 'ended',
2264 'error',
2265 'focus',
2266 'focusin',
2267 'focusout',
2268 'gotpointercapture',
2269 'input',
2270 'invalid',
2271 'keydown',
2272 'keypress',
2273 'keyup',
2274 'load',
2275 'loadstart',
2276 'loadeddata',
2277 'loadedmetadata',
2278 'lostpointercapture',
2279 'mousedown',
2280 'mouseenter',
2281 'mouseleave',
2282 'mousemove',
2283 'mouseout',
2284 'mouseover',
2285 'mouseup',
2286 'mousewheel',
2287 'orientationchange',
2288 'pause',
2289 'play',
2290 'playing',
2291 'pointercancel',
2292 'pointerdown',
2293 'pointerenter',
2294 'pointerleave',
2295 'pointerlockchange',
2296 'mozpointerlockchange',
2297 'webkitpointerlockerchange',
2298 'pointerlockerror',
2299 'mozpointerlockerror',
2300 'webkitpointerlockerror',
2301 'pointermove',
2302 'pointout',
2303 'pointerover',
2304 'pointerup',
2305 'progress',
2306 'ratechange',
2307 'reset',
2308 'resize',
2309 'scroll',
2310 'seeked',
2311 'seeking',
2312 'select',
2313 'selectionchange',
2314 'selectstart',
2315 'show',
2316 'sort',
2317 'stalled',
2318 'submit',
2319 'suspend',
2320 'timeupdate',
2321 'volumechange',
2322 'touchcancel',
2323 'touchmove',
2324 'touchstart',
2325 'touchend',
2326 'transitioncancel',
2327 'transitionend',
2328 'waiting',
2329 'wheel'
2330 ];
2331 var documentEventNames = [
2332 'afterscriptexecute', 'beforescriptexecute', 'DOMContentLoaded', 'freeze', 'fullscreenchange',
2333 'mozfullscreenchange', 'webkitfullscreenchange', 'msfullscreenchange', 'fullscreenerror',
2334 'mozfullscreenerror', 'webkitfullscreenerror', 'msfullscreenerror', 'readystatechange',
2335 'visibilitychange', 'resume'
2336 ];
2337 var windowEventNames = [
2338 'absolutedeviceorientation',
2339 'afterinput',
2340 'afterprint',
2341 'appinstalled',
2342 'beforeinstallprompt',
2343 'beforeprint',
2344 'beforeunload',
2345 'devicelight',
2346 'devicemotion',
2347 'deviceorientation',
2348 'deviceorientationabsolute',
2349 'deviceproximity',
2350 'hashchange',
2351 'languagechange',
2352 'message',
2353 'mozbeforepaint',
2354 'offline',
2355 'online',
2356 'paint',
2357 'pageshow',
2358 'pagehide',
2359 'popstate',
2360 'rejectionhandled',
2361 'storage',
2362 'unhandledrejection',
2363 'unload',
2364 'userproximity',
2365 'vrdisplayconnected',
2366 'vrdisplaydisconnected',
2367 'vrdisplaypresentchange'
2368 ];
2369 var htmlElementEventNames = [
2370 'beforecopy', 'beforecut', 'beforepaste', 'copy', 'cut', 'paste', 'dragstart', 'loadend',
2371 'animationstart', 'search', 'transitionrun', 'transitionstart', 'webkitanimationend',
2372 'webkitanimationiteration', 'webkitanimationstart', 'webkittransitionend'
2373 ];
2374 var mediaElementEventNames = ['encrypted', 'waitingforkey', 'msneedkey', 'mozinterruptbegin', 'mozinterruptend'];
2375 var ieElementEventNames = [
2376 'activate',
2377 'afterupdate',
2378 'ariarequest',
2379 'beforeactivate',
2380 'beforedeactivate',
2381 'beforeeditfocus',
2382 'beforeupdate',
2383 'cellchange',
2384 'controlselect',
2385 'dataavailable',
2386 'datasetchanged',
2387 'datasetcomplete',
2388 'errorupdate',
2389 'filterchange',
2390 'layoutcomplete',
2391 'losecapture',
2392 'move',
2393 'moveend',
2394 'movestart',
2395 'propertychange',
2396 'resizeend',
2397 'resizestart',
2398 'rowenter',
2399 'rowexit',
2400 'rowsdelete',
2401 'rowsinserted',
2402 'command',
2403 'compassneedscalibration',
2404 'deactivate',
2405 'help',
2406 'mscontentzoom',
2407 'msmanipulationstatechanged',
2408 'msgesturechange',
2409 'msgesturedoubletap',
2410 'msgestureend',
2411 'msgesturehold',
2412 'msgesturestart',
2413 'msgesturetap',
2414 'msgotpointercapture',
2415 'msinertiastart',
2416 'mslostpointercapture',
2417 'mspointercancel',
2418 'mspointerdown',
2419 'mspointerenter',
2420 'mspointerhover',
2421 'mspointerleave',
2422 'mspointermove',
2423 'mspointerout',
2424 'mspointerover',
2425 'mspointerup',
2426 'pointerout',
2427 'mssitemodejumplistitemremoved',
2428 'msthumbnailclick',
2429 'stop',
2430 'storagecommit'
2431 ];
2432 var webglEventNames = ['webglcontextrestored', 'webglcontextlost', 'webglcontextcreationerror'];
2433 var formEventNames = ['autocomplete', 'autocompleteerror'];
2434 var detailEventNames = ['toggle'];
2435 var frameEventNames = ['load'];
2436 var frameSetEventNames = ['blur', 'error', 'focus', 'load', 'resize', 'scroll', 'messageerror'];
2437 var marqueeEventNames = ['bounce', 'finish', 'start'];
2438 var XMLHttpRequestEventNames = [
2439 'loadstart', 'progress', 'abort', 'error', 'load', 'progress', 'timeout', 'loadend',
2440 'readystatechange'
2441 ];
2442 var IDBIndexEventNames = ['upgradeneeded', 'complete', 'abort', 'success', 'error', 'blocked', 'versionchange', 'close'];
2443 var websocketEventNames = ['close', 'error', 'open', 'message'];
2444 var workerEventNames = ['error', 'message'];
2445 var eventNames = globalEventHandlersEventNames.concat(webglEventNames, formEventNames, detailEventNames, documentEventNames, windowEventNames, htmlElementEventNames, ieElementEventNames);
2446 function filterProperties(target, onProperties, ignoreProperties) {
2447 if (!ignoreProperties || ignoreProperties.length === 0) {
2448 return onProperties;
2449 }
2450 var tip = ignoreProperties.filter(function (ip) { return ip.target === target; });
2451 if (!tip || tip.length === 0) {
2452 return onProperties;
2453 }
2454 var targetIgnoreProperties = tip[0].ignoreProperties;
2455 return onProperties.filter(function (op) { return targetIgnoreProperties.indexOf(op) === -1; });
2456 }
2457 function patchFilteredProperties(target, onProperties, ignoreProperties, prototype) {
2458 // check whether target is available, sometimes target will be undefined
2459 // because different browser or some 3rd party plugin.
2460 if (!target) {
2461 return;
2462 }
2463 var filteredProperties = filterProperties(target, onProperties, ignoreProperties);
2464 patchOnProperties(target, filteredProperties, prototype);
2465 }
2466 function propertyDescriptorPatch(api, _global) {
2467 if (isNode && !isMix) {
2468 return;
2469 }
2470 if (Zone[api.symbol('patchEvents')]) {
2471 // events are already been patched by legacy patch.
2472 return;
2473 }
2474 var supportsWebSocket = typeof WebSocket !== 'undefined';
2475 var ignoreProperties = _global['__Zone_ignore_on_properties'];
2476 // for browsers that we can patch the descriptor: Chrome & Firefox
2477 if (isBrowser) {
2478 var internalWindow_1 = window;
2479 var ignoreErrorProperties = isIE() ? [{ target: internalWindow_1, ignoreProperties: ['error'] }] : [];
2480 // in IE/Edge, onProp not exist in window object, but in WindowPrototype
2481 // so we need to pass WindowPrototype to check onProp exist or not
2482 patchFilteredProperties(internalWindow_1, eventNames.concat(['messageerror']), ignoreProperties ? ignoreProperties.concat(ignoreErrorProperties) : ignoreProperties, ObjectGetPrototypeOf(internalWindow_1));
2483 patchFilteredProperties(Document.prototype, eventNames, ignoreProperties);
2484 if (typeof internalWindow_1['SVGElement'] !== 'undefined') {
2485 patchFilteredProperties(internalWindow_1['SVGElement'].prototype, eventNames, ignoreProperties);
2486 }
2487 patchFilteredProperties(Element.prototype, eventNames, ignoreProperties);
2488 patchFilteredProperties(HTMLElement.prototype, eventNames, ignoreProperties);
2489 patchFilteredProperties(HTMLMediaElement.prototype, mediaElementEventNames, ignoreProperties);
2490 patchFilteredProperties(HTMLFrameSetElement.prototype, windowEventNames.concat(frameSetEventNames), ignoreProperties);
2491 patchFilteredProperties(HTMLBodyElement.prototype, windowEventNames.concat(frameSetEventNames), ignoreProperties);
2492 patchFilteredProperties(HTMLFrameElement.prototype, frameEventNames, ignoreProperties);
2493 patchFilteredProperties(HTMLIFrameElement.prototype, frameEventNames, ignoreProperties);
2494 var HTMLMarqueeElement_1 = internalWindow_1['HTMLMarqueeElement'];
2495 if (HTMLMarqueeElement_1) {
2496 patchFilteredProperties(HTMLMarqueeElement_1.prototype, marqueeEventNames, ignoreProperties);
2497 }
2498 var Worker_1 = internalWindow_1['Worker'];
2499 if (Worker_1) {
2500 patchFilteredProperties(Worker_1.prototype, workerEventNames, ignoreProperties);
2501 }
2502 }
2503 var XMLHttpRequest = _global['XMLHttpRequest'];
2504 if (XMLHttpRequest) {
2505 // XMLHttpRequest is not available in ServiceWorker, so we need to check here
2506 patchFilteredProperties(XMLHttpRequest.prototype, XMLHttpRequestEventNames, ignoreProperties);
2507 }
2508 var XMLHttpRequestEventTarget = _global['XMLHttpRequestEventTarget'];
2509 if (XMLHttpRequestEventTarget) {
2510 patchFilteredProperties(XMLHttpRequestEventTarget && XMLHttpRequestEventTarget.prototype, XMLHttpRequestEventNames, ignoreProperties);
2511 }
2512 if (typeof IDBIndex !== 'undefined') {
2513 patchFilteredProperties(IDBIndex.prototype, IDBIndexEventNames, ignoreProperties);
2514 patchFilteredProperties(IDBRequest.prototype, IDBIndexEventNames, ignoreProperties);
2515 patchFilteredProperties(IDBOpenDBRequest.prototype, IDBIndexEventNames, ignoreProperties);
2516 patchFilteredProperties(IDBDatabase.prototype, IDBIndexEventNames, ignoreProperties);
2517 patchFilteredProperties(IDBTransaction.prototype, IDBIndexEventNames, ignoreProperties);
2518 patchFilteredProperties(IDBCursor.prototype, IDBIndexEventNames, ignoreProperties);
2519 }
2520 if (supportsWebSocket) {
2521 patchFilteredProperties(WebSocket.prototype, websocketEventNames, ignoreProperties);
2522 }
2523 }
2524 /**
2525 * @license
2526 * Copyright Google LLC All Rights Reserved.
2527 *
2528 * Use of this source code is governed by an MIT-style license that can be
2529 * found in the LICENSE file at https://angular.io/license
2530 */
2531 Zone.__load_patch('util', function (global, Zone, api) {
2532 api.patchOnProperties = patchOnProperties;
2533 api.patchMethod = patchMethod;
2534 api.bindArguments = bindArguments;
2535 api.patchMacroTask = patchMacroTask;
2536 // In earlier version of zone.js (<0.9.0), we use env name `__zone_symbol__BLACK_LISTED_EVENTS` to
2537 // define which events will not be patched by `Zone.js`.
2538 // In newer version (>=0.9.0), we change the env name to `__zone_symbol__UNPATCHED_EVENTS` to keep
2539 // the name consistent with angular repo.
2540 // The `__zone_symbol__BLACK_LISTED_EVENTS` is deprecated, but it is still be supported for
2541 // backwards compatibility.
2542 var SYMBOL_BLACK_LISTED_EVENTS = Zone.__symbol__('BLACK_LISTED_EVENTS');
2543 var SYMBOL_UNPATCHED_EVENTS = Zone.__symbol__('UNPATCHED_EVENTS');
2544 if (global[SYMBOL_UNPATCHED_EVENTS]) {
2545 global[SYMBOL_BLACK_LISTED_EVENTS] = global[SYMBOL_UNPATCHED_EVENTS];
2546 }
2547 if (global[SYMBOL_BLACK_LISTED_EVENTS]) {
2548 Zone[SYMBOL_BLACK_LISTED_EVENTS] = Zone[SYMBOL_UNPATCHED_EVENTS] =
2549 global[SYMBOL_BLACK_LISTED_EVENTS];
2550 }
2551 api.patchEventPrototype = patchEventPrototype;
2552 api.patchEventTarget = patchEventTarget;
2553 api.isIEOrEdge = isIEOrEdge;
2554 api.ObjectDefineProperty = ObjectDefineProperty;
2555 api.ObjectGetOwnPropertyDescriptor = ObjectGetOwnPropertyDescriptor;
2556 api.ObjectCreate = ObjectCreate;
2557 api.ArraySlice = ArraySlice;
2558 api.patchClass = patchClass;
2559 api.wrapWithCurrentZone = wrapWithCurrentZone;
2560 api.filterProperties = filterProperties;
2561 api.attachOriginToPatched = attachOriginToPatched;
2562 api._redefineProperty = Object.defineProperty;
2563 api.patchCallbacks = patchCallbacks;
2564 api.getGlobalObjects = function () { return ({
2565 globalSources: globalSources,
2566 zoneSymbolEventNames: zoneSymbolEventNames$1,
2567 eventNames: eventNames,
2568 isBrowser: isBrowser,
2569 isMix: isMix,
2570 isNode: isNode,
2571 TRUE_STR: TRUE_STR,
2572 FALSE_STR: FALSE_STR,
2573 ZONE_SYMBOL_PREFIX: ZONE_SYMBOL_PREFIX,
2574 ADD_EVENT_LISTENER_STR: ADD_EVENT_LISTENER_STR,
2575 REMOVE_EVENT_LISTENER_STR: REMOVE_EVENT_LISTENER_STR
2576 }); };
2577 });
2578 /**
2579 * @license
2580 * Copyright Google LLC All Rights Reserved.
2581 *
2582 * Use of this source code is governed by an MIT-style license that can be
2583 * found in the LICENSE file at https://angular.io/license
2584 */
2585 /*
2586 * This is necessary for Chrome and Chrome mobile, to enable
2587 * things like redefining `createdCallback` on an element.
2588 */
2589 var zoneSymbol$1;
2590 var _defineProperty;
2591 var _getOwnPropertyDescriptor;
2592 var _create;
2593 var unconfigurablesKey;
2594 function propertyPatch() {
2595 zoneSymbol$1 = Zone.__symbol__;
2596 _defineProperty = Object[zoneSymbol$1('defineProperty')] = Object.defineProperty;
2597 _getOwnPropertyDescriptor = Object[zoneSymbol$1('getOwnPropertyDescriptor')] =
2598 Object.getOwnPropertyDescriptor;
2599 _create = Object.create;
2600 unconfigurablesKey = zoneSymbol$1('unconfigurables');
2601 Object.defineProperty = function (obj, prop, desc) {
2602 if (isUnconfigurable(obj, prop)) {
2603 throw new TypeError('Cannot assign to read only property \'' + prop + '\' of ' + obj);
2604 }
2605 var originalConfigurableFlag = desc.configurable;
2606 if (prop !== 'prototype') {
2607 desc = rewriteDescriptor(obj, prop, desc);
2608 }
2609 return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag);
2610 };
2611 Object.defineProperties = function (obj, props) {
2612 Object.keys(props).forEach(function (prop) {
2613 Object.defineProperty(obj, prop, props[prop]);
2614 });
2615 return obj;
2616 };
2617 Object.create = function (obj, proto) {
2618 if (typeof proto === 'object' && !Object.isFrozen(proto)) {
2619 Object.keys(proto).forEach(function (prop) {
2620 proto[prop] = rewriteDescriptor(obj, prop, proto[prop]);
2621 });
2622 }
2623 return _create(obj, proto);
2624 };
2625 Object.getOwnPropertyDescriptor = function (obj, prop) {
2626 var desc = _getOwnPropertyDescriptor(obj, prop);
2627 if (desc && isUnconfigurable(obj, prop)) {
2628 desc.configurable = false;
2629 }
2630 return desc;
2631 };
2632 }
2633 function _redefineProperty(obj, prop, desc) {
2634 var originalConfigurableFlag = desc.configurable;
2635 desc = rewriteDescriptor(obj, prop, desc);
2636 return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag);
2637 }
2638 function isUnconfigurable(obj, prop) {
2639 return obj && obj[unconfigurablesKey] && obj[unconfigurablesKey][prop];
2640 }
2641 function rewriteDescriptor(obj, prop, desc) {
2642 // issue-927, if the desc is frozen, don't try to change the desc
2643 if (!Object.isFrozen(desc)) {
2644 desc.configurable = true;
2645 }
2646 if (!desc.configurable) {
2647 // issue-927, if the obj is frozen, don't try to set the desc to obj
2648 if (!obj[unconfigurablesKey] && !Object.isFrozen(obj)) {
2649 _defineProperty(obj, unconfigurablesKey, { writable: true, value: {} });
2650 }
2651 if (obj[unconfigurablesKey]) {
2652 obj[unconfigurablesKey][prop] = true;
2653 }
2654 }
2655 return desc;
2656 }
2657 function _tryDefineProperty(obj, prop, desc, originalConfigurableFlag) {
2658 try {
2659 return _defineProperty(obj, prop, desc);
2660 }
2661 catch (error) {
2662 if (desc.configurable) {
2663 // In case of errors, when the configurable flag was likely set by rewriteDescriptor(), let's
2664 // retry with the original flag value
2665 if (typeof originalConfigurableFlag == 'undefined') {
2666 delete desc.configurable;
2667 }
2668 else {
2669 desc.configurable = originalConfigurableFlag;
2670 }
2671 try {
2672 return _defineProperty(obj, prop, desc);
2673 }
2674 catch (error) {
2675 var swallowError = false;
2676 if (prop === 'createdCallback' || prop === 'attachedCallback' ||
2677 prop === 'detachedCallback' || prop === 'attributeChangedCallback') {
2678 // We only swallow the error in registerElement patch
2679 // this is the work around since some applications
2680 // fail if we throw the error
2681 swallowError = true;
2682 }
2683 if (!swallowError) {
2684 throw error;
2685 }
2686 // TODO: @JiaLiPassion, Some application such as `registerElement` patch
2687 // still need to swallow the error, in the future after these applications
2688 // are updated, the following logic can be removed.
2689 var descJson = null;
2690 try {
2691 descJson = JSON.stringify(desc);
2692 }
2693 catch (error) {
2694 descJson = desc.toString();
2695 }
2696 console.log("Attempting to configure '" + prop + "' with descriptor '" + descJson + "' on object '" + obj + "' and got error, giving up: " + error);
2697 }
2698 }
2699 else {
2700 throw error;
2701 }
2702 }
2703 }
2704 /**
2705 * @license
2706 * Copyright Google LLC All Rights Reserved.
2707 *
2708 * Use of this source code is governed by an MIT-style license that can be
2709 * found in the LICENSE file at https://angular.io/license
2710 */
2711 function eventTargetLegacyPatch(_global, api) {
2712 var _a = api.getGlobalObjects(), eventNames = _a.eventNames, globalSources = _a.globalSources, zoneSymbolEventNames = _a.zoneSymbolEventNames, TRUE_STR = _a.TRUE_STR, FALSE_STR = _a.FALSE_STR, ZONE_SYMBOL_PREFIX = _a.ZONE_SYMBOL_PREFIX;
2713 var WTF_ISSUE_555 = 'Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video';
2714 var NO_EVENT_TARGET = 'ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex,WebSocket'
2715 .split(',');
2716 var EVENT_TARGET = 'EventTarget';
2717 var apis = [];
2718 var isWtf = _global['wtf'];
2719 var WTF_ISSUE_555_ARRAY = WTF_ISSUE_555.split(',');
2720 if (isWtf) {
2721 // Workaround for: https://github.com/google/tracing-framework/issues/555
2722 apis = WTF_ISSUE_555_ARRAY.map(function (v) { return 'HTML' + v + 'Element'; }).concat(NO_EVENT_TARGET);
2723 }
2724 else if (_global[EVENT_TARGET]) {
2725 apis.push(EVENT_TARGET);
2726 }
2727 else {
2728 // Note: EventTarget is not available in all browsers,
2729 // if it's not available, we instead patch the APIs in the IDL that inherit from EventTarget
2730 apis = NO_EVENT_TARGET;
2731 }
2732 var isDisableIECheck = _global['__Zone_disable_IE_check'] || false;
2733 var isEnableCrossContextCheck = _global['__Zone_enable_cross_context_check'] || false;
2734 var ieOrEdge = api.isIEOrEdge();
2735 var ADD_EVENT_LISTENER_SOURCE = '.addEventListener:';
2736 var FUNCTION_WRAPPER = '[object FunctionWrapper]';
2737 var BROWSER_TOOLS = 'function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }';
2738 var pointerEventsMap = {
2739 'MSPointerCancel': 'pointercancel',
2740 'MSPointerDown': 'pointerdown',
2741 'MSPointerEnter': 'pointerenter',
2742 'MSPointerHover': 'pointerhover',
2743 'MSPointerLeave': 'pointerleave',
2744 'MSPointerMove': 'pointermove',
2745 'MSPointerOut': 'pointerout',
2746 'MSPointerOver': 'pointerover',
2747 'MSPointerUp': 'pointerup'
2748 };
2749 // predefine all __zone_symbol__ + eventName + true/false string
2750 for (var i = 0; i < eventNames.length; i++) {
2751 var eventName = eventNames[i];
2752 var falseEventName = eventName + FALSE_STR;
2753 var trueEventName = eventName + TRUE_STR;
2754 var symbol = ZONE_SYMBOL_PREFIX + falseEventName;
2755 var symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName;
2756 zoneSymbolEventNames[eventName] = {};
2757 zoneSymbolEventNames[eventName][FALSE_STR] = symbol;
2758 zoneSymbolEventNames[eventName][TRUE_STR] = symbolCapture;
2759 }
2760 // predefine all task.source string
2761 for (var i = 0; i < WTF_ISSUE_555_ARRAY.length; i++) {
2762 var target = WTF_ISSUE_555_ARRAY[i];
2763 var targets = globalSources[target] = {};
2764 for (var j = 0; j < eventNames.length; j++) {
2765 var eventName = eventNames[j];
2766 targets[eventName] = target + ADD_EVENT_LISTENER_SOURCE + eventName;
2767 }
2768 }
2769 var checkIEAndCrossContext = function (nativeDelegate, delegate, target, args) {
2770 if (!isDisableIECheck && ieOrEdge) {
2771 if (isEnableCrossContextCheck) {
2772 try {
2773 var testString = delegate.toString();
2774 if ((testString === FUNCTION_WRAPPER || testString == BROWSER_TOOLS)) {
2775 nativeDelegate.apply(target, args);
2776 return false;
2777 }
2778 }
2779 catch (error) {
2780 nativeDelegate.apply(target, args);
2781 return false;
2782 }
2783 }
2784 else {
2785 var testString = delegate.toString();
2786 if ((testString === FUNCTION_WRAPPER || testString == BROWSER_TOOLS)) {
2787 nativeDelegate.apply(target, args);
2788 return false;
2789 }
2790 }
2791 }
2792 else if (isEnableCrossContextCheck) {
2793 try {
2794 delegate.toString();
2795 }
2796 catch (error) {
2797 nativeDelegate.apply(target, args);
2798 return false;
2799 }
2800 }
2801 return true;
2802 };
2803 var apiTypes = [];
2804 for (var i = 0; i < apis.length; i++) {
2805 var type = _global[apis[i]];
2806 apiTypes.push(type && type.prototype);
2807 }
2808 // vh is validateHandler to check event handler
2809 // is valid or not(for security check)
2810 api.patchEventTarget(_global, apiTypes, {
2811 vh: checkIEAndCrossContext,
2812 transferEventName: function (eventName) {
2813 var pointerEventName = pointerEventsMap[eventName];
2814 return pointerEventName || eventName;
2815 }
2816 });
2817 Zone[api.symbol('patchEventTarget')] = !!_global[EVENT_TARGET];
2818 return true;
2819 }
2820 /**
2821 * @license
2822 * Copyright Google LLC All Rights Reserved.
2823 *
2824 * Use of this source code is governed by an MIT-style license that can be
2825 * found in the LICENSE file at https://angular.io/license
2826 */
2827 // we have to patch the instance since the proto is non-configurable
2828 function apply(api, _global) {
2829 var _a = api.getGlobalObjects(), ADD_EVENT_LISTENER_STR = _a.ADD_EVENT_LISTENER_STR, REMOVE_EVENT_LISTENER_STR = _a.REMOVE_EVENT_LISTENER_STR;
2830 var WS = _global.WebSocket;
2831 // On Safari window.EventTarget doesn't exist so need to patch WS add/removeEventListener
2832 // On older Chrome, no need since EventTarget was already patched
2833 if (!_global.EventTarget) {
2834 api.patchEventTarget(_global, [WS.prototype]);
2835 }
2836 _global.WebSocket = function (x, y) {
2837 var socket = arguments.length > 1 ? new WS(x, y) : new WS(x);
2838 var proxySocket;
2839 var proxySocketProto;
2840 // Safari 7.0 has non-configurable own 'onmessage' and friends properties on the socket instance
2841 var onmessageDesc = api.ObjectGetOwnPropertyDescriptor(socket, 'onmessage');
2842 if (onmessageDesc && onmessageDesc.configurable === false) {
2843 proxySocket = api.ObjectCreate(socket);
2844 // socket have own property descriptor 'onopen', 'onmessage', 'onclose', 'onerror'
2845 // but proxySocket not, so we will keep socket as prototype and pass it to
2846 // patchOnProperties method
2847 proxySocketProto = socket;
2848 [ADD_EVENT_LISTENER_STR, REMOVE_EVENT_LISTENER_STR, 'send', 'close'].forEach(function (propName) {
2849 proxySocket[propName] = function () {
2850 var args = api.ArraySlice.call(arguments);
2851 if (propName === ADD_EVENT_LISTENER_STR || propName === REMOVE_EVENT_LISTENER_STR) {
2852 var eventName = args.length > 0 ? args[0] : undefined;
2853 if (eventName) {
2854 var propertySymbol = Zone.__symbol__('ON_PROPERTY' + eventName);
2855 socket[propertySymbol] = proxySocket[propertySymbol];
2856 }
2857 }
2858 return socket[propName].apply(socket, args);
2859 };
2860 });
2861 }
2862 else {
2863 // we can patch the real socket
2864 proxySocket = socket;
2865 }
2866 api.patchOnProperties(proxySocket, ['close', 'error', 'message', 'open'], proxySocketProto);
2867 return proxySocket;
2868 };
2869 var globalWebSocket = _global['WebSocket'];
2870 for (var prop in WS) {
2871 globalWebSocket[prop] = WS[prop];
2872 }
2873 }
2874 /**
2875 * @license
2876 * Copyright Google LLC All Rights Reserved.
2877 *
2878 * Use of this source code is governed by an MIT-style license that can be
2879 * found in the LICENSE file at https://angular.io/license
2880 */
2881 function propertyDescriptorLegacyPatch(api, _global) {
2882 var _a = api.getGlobalObjects(), isNode = _a.isNode, isMix = _a.isMix;
2883 if (isNode && !isMix) {
2884 return;
2885 }
2886 if (!canPatchViaPropertyDescriptor(api, _global)) {
2887 var supportsWebSocket = typeof WebSocket !== 'undefined';
2888 // Safari, Android browsers (Jelly Bean)
2889 patchViaCapturingAllTheEvents(api);
2890 api.patchClass('XMLHttpRequest');
2891 if (supportsWebSocket) {
2892 apply(api, _global);
2893 }
2894 Zone[api.symbol('patchEvents')] = true;
2895 }
2896 }
2897 function canPatchViaPropertyDescriptor(api, _global) {
2898 var _a = api.getGlobalObjects(), isBrowser = _a.isBrowser, isMix = _a.isMix;
2899 if ((isBrowser || isMix) &&
2900 !api.ObjectGetOwnPropertyDescriptor(HTMLElement.prototype, 'onclick') &&
2901 typeof Element !== 'undefined') {
2902 // WebKit https://bugs.webkit.org/show_bug.cgi?id=134364
2903 // IDL interface attributes are not configurable
2904 var desc = api.ObjectGetOwnPropertyDescriptor(Element.prototype, 'onclick');
2905 if (desc && !desc.configurable)
2906 return false;
2907 // try to use onclick to detect whether we can patch via propertyDescriptor
2908 // because XMLHttpRequest is not available in service worker
2909 if (desc) {
2910 api.ObjectDefineProperty(Element.prototype, 'onclick', {
2911 enumerable: true,
2912 configurable: true,
2913 get: function () {
2914 return true;
2915 }
2916 });
2917 var div = document.createElement('div');
2918 var result = !!div.onclick;
2919 api.ObjectDefineProperty(Element.prototype, 'onclick', desc);
2920 return result;
2921 }
2922 }
2923 var XMLHttpRequest = _global['XMLHttpRequest'];
2924 if (!XMLHttpRequest) {
2925 // XMLHttpRequest is not available in service worker
2926 return false;
2927 }
2928 var ON_READY_STATE_CHANGE = 'onreadystatechange';
2929 var XMLHttpRequestPrototype = XMLHttpRequest.prototype;
2930 var xhrDesc = api.ObjectGetOwnPropertyDescriptor(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE);
2931 // add enumerable and configurable here because in opera
2932 // by default XMLHttpRequest.prototype.onreadystatechange is undefined
2933 // without adding enumerable and configurable will cause onreadystatechange
2934 // non-configurable
2935 // and if XMLHttpRequest.prototype.onreadystatechange is undefined,
2936 // we should set a real desc instead a fake one
2937 if (xhrDesc) {
2938 api.ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, {
2939 enumerable: true,
2940 configurable: true,
2941 get: function () {
2942 return true;
2943 }
2944 });
2945 var req = new XMLHttpRequest();
2946 var result = !!req.onreadystatechange;
2947 // restore original desc
2948 api.ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, xhrDesc || {});
2949 return result;
2950 }
2951 else {
2952 var SYMBOL_FAKE_ONREADYSTATECHANGE_1 = api.symbol('fake');
2953 api.ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, {
2954 enumerable: true,
2955 configurable: true,
2956 get: function () {
2957 return this[SYMBOL_FAKE_ONREADYSTATECHANGE_1];
2958 },
2959 set: function (value) {
2960 this[SYMBOL_FAKE_ONREADYSTATECHANGE_1] = value;
2961 }
2962 });
2963 var req = new XMLHttpRequest();
2964 var detectFunc = function () { };
2965 req.onreadystatechange = detectFunc;
2966 var result = req[SYMBOL_FAKE_ONREADYSTATECHANGE_1] === detectFunc;
2967 req.onreadystatechange = null;
2968 return result;
2969 }
2970 }
2971 // Whenever any eventListener fires, we check the eventListener target and all parents
2972 // for `onwhatever` properties and replace them with zone-bound functions
2973 // - Chrome (for now)
2974 function patchViaCapturingAllTheEvents(api) {
2975 var eventNames = api.getGlobalObjects().eventNames;
2976 var unboundKey = api.symbol('unbound');
2977 var _loop_4 = function (i) {
2978 var property = eventNames[i];
2979 var onproperty = 'on' + property;
2980 self.addEventListener(property, function (event) {
2981 var elt = event.target, bound, source;
2982 if (elt) {
2983 source = elt.constructor['name'] + '.' + onproperty;
2984 }
2985 else {
2986 source = 'unknown.' + onproperty;
2987 }
2988 while (elt) {
2989 if (elt[onproperty] && !elt[onproperty][unboundKey]) {
2990 bound = api.wrapWithCurrentZone(elt[onproperty], source);
2991 bound[unboundKey] = elt[onproperty];
2992 elt[onproperty] = bound;
2993 }
2994 elt = elt.parentElement;
2995 }
2996 }, true);
2997 };
2998 for (var i = 0; i < eventNames.length; i++) {
2999 _loop_4(i);
3000 }
3001 }
3002 /**
3003 * @license
3004 * Copyright Google LLC All Rights Reserved.
3005 *
3006 * Use of this source code is governed by an MIT-style license that can be
3007 * found in the LICENSE file at https://angular.io/license
3008 */
3009 function registerElementPatch(_global, api) {
3010 var _a = api.getGlobalObjects(), isBrowser = _a.isBrowser, isMix = _a.isMix;
3011 if ((!isBrowser && !isMix) || !('registerElement' in _global.document)) {
3012 return;
3013 }
3014 var callbacks = ['createdCallback', 'attachedCallback', 'detachedCallback', 'attributeChangedCallback'];
3015 api.patchCallbacks(api, document, 'Document', 'registerElement', callbacks);
3016 }
3017 /**
3018 * @license
3019 * Copyright Google LLC All Rights Reserved.
3020 *
3021 * Use of this source code is governed by an MIT-style license that can be
3022 * found in the LICENSE file at https://angular.io/license
3023 */
3024 (function (_global) {
3025 var symbolPrefix = _global['__Zone_symbol_prefix'] || '__zone_symbol__';
3026 function __symbol__(name) {
3027 return symbolPrefix + name;
3028 }
3029 _global[__symbol__('legacyPatch')] = function () {
3030 var Zone = _global['Zone'];
3031 Zone.__load_patch('defineProperty', function (global, Zone, api) {
3032 api._redefineProperty = _redefineProperty;
3033 propertyPatch();
3034 });
3035 Zone.__load_patch('registerElement', function (global, Zone, api) {
3036 registerElementPatch(global, api);
3037 });
3038 Zone.__load_patch('EventTargetLegacy', function (global, Zone, api) {
3039 eventTargetLegacyPatch(global, api);
3040 propertyDescriptorLegacyPatch(api, global);
3041 });
3042 };
3043 })(typeof window !== 'undefined' ?
3044 window :
3045 typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {});
3046 /**
3047 * @license
3048 * Copyright Google LLC All Rights Reserved.
3049 *
3050 * Use of this source code is governed by an MIT-style license that can be
3051 * found in the LICENSE file at https://angular.io/license
3052 */
3053 var taskSymbol = zoneSymbol('zoneTask');
3054 function patchTimer(window, setName, cancelName, nameSuffix) {
3055 var setNative = null;
3056 var clearNative = null;
3057 setName += nameSuffix;
3058 cancelName += nameSuffix;
3059 var tasksByHandleId = {};
3060 function scheduleTask(task) {
3061 var data = task.data;
3062 data.args[0] = function () {
3063 return task.invoke.apply(this, arguments);
3064 };
3065 data.handleId = setNative.apply(window, data.args);
3066 return task;
3067 }
3068 function clearTask(task) {
3069 return clearNative.call(window, task.data.handleId);
3070 }
3071 setNative =
3072 patchMethod(window, setName, function (delegate) { return function (self, args) {
3073 if (typeof args[0] === 'function') {
3074 var options_1 = {
3075 isPeriodic: nameSuffix === 'Interval',
3076 delay: (nameSuffix === 'Timeout' || nameSuffix === 'Interval') ? args[1] || 0 :
3077 undefined,
3078 args: args
3079 };
3080 var callback_1 = args[0];
3081 args[0] = function timer() {
3082 try {
3083 return callback_1.apply(this, arguments);
3084 }
3085 finally {
3086 // issue-934, task will be cancelled
3087 // even it is a periodic task such as
3088 // setInterval
3089 // https://github.com/angular/angular/issues/40387
3090 // Cleanup tasksByHandleId should be handled before scheduleTask
3091 // Since some zoneSpec may intercept and doesn't trigger
3092 // scheduleFn(scheduleTask) provided here.
3093 if (!(options_1.isPeriodic)) {
3094 if (typeof options_1.handleId === 'number') {
3095 // in non-nodejs env, we remove timerId
3096 // from local cache
3097 delete tasksByHandleId[options_1.handleId];
3098 }
3099 else if (options_1.handleId) {
3100 // Node returns complex objects as handleIds
3101 // we remove task reference from timer object
3102 options_1.handleId[taskSymbol] = null;
3103 }
3104 }
3105 }
3106 };
3107 var task = scheduleMacroTaskWithCurrentZone(setName, args[0], options_1, scheduleTask, clearTask);
3108 if (!task) {
3109 return task;
3110 }
3111 // Node.js must additionally support the ref and unref functions.
3112 var handle = task.data.handleId;
3113 if (typeof handle === 'number') {
3114 // for non nodejs env, we save handleId: task
3115 // mapping in local cache for clearTimeout
3116 tasksByHandleId[handle] = task;
3117 }
3118 else if (handle) {
3119 // for nodejs env, we save task
3120 // reference in timerId Object for clearTimeout
3121 handle[taskSymbol] = task;
3122 }
3123 // check whether handle is null, because some polyfill or browser
3124 // may return undefined from setTimeout/setInterval/setImmediate/requestAnimationFrame
3125 if (handle && handle.ref && handle.unref && typeof handle.ref === 'function' &&
3126 typeof handle.unref === 'function') {
3127 task.ref = handle.ref.bind(handle);
3128 task.unref = handle.unref.bind(handle);
3129 }
3130 if (typeof handle === 'number' || handle) {
3131 return handle;
3132 }
3133 return task;
3134 }
3135 else {
3136 // cause an error by calling it directly.
3137 return delegate.apply(window, args);
3138 }
3139 }; });
3140 clearNative =
3141 patchMethod(window, cancelName, function (delegate) { return function (self, args) {
3142 var id = args[0];
3143 var task;
3144 if (typeof id === 'number') {
3145 // non nodejs env.
3146 task = tasksByHandleId[id];
3147 }
3148 else {
3149 // nodejs env.
3150 task = id && id[taskSymbol];
3151 // other environments.
3152 if (!task) {
3153 task = id;
3154 }
3155 }
3156 if (task && typeof task.type === 'string') {
3157 if (task.state !== 'notScheduled' &&
3158 (task.cancelFn && task.data.isPeriodic || task.runCount === 0)) {
3159 if (typeof id === 'number') {
3160 delete tasksByHandleId[id];
3161 }
3162 else if (id) {
3163 id[taskSymbol] = null;
3164 }
3165 // Do not cancel already canceled functions
3166 task.zone.cancelTask(task);
3167 }
3168 }
3169 else {
3170 // cause an error by calling it directly.
3171 delegate.apply(window, args);
3172 }
3173 }; });
3174 }
3175 /**
3176 * @license
3177 * Copyright Google LLC All Rights Reserved.
3178 *
3179 * Use of this source code is governed by an MIT-style license that can be
3180 * found in the LICENSE file at https://angular.io/license
3181 */
3182 function patchCustomElements(_global, api) {
3183 var _a = api.getGlobalObjects(), isBrowser = _a.isBrowser, isMix = _a.isMix;
3184 if ((!isBrowser && !isMix) || !_global['customElements'] || !('customElements' in _global)) {
3185 return;
3186 }
3187 var callbacks = ['connectedCallback', 'disconnectedCallback', 'adoptedCallback', 'attributeChangedCallback'];
3188 api.patchCallbacks(api, _global.customElements, 'customElements', 'define', callbacks);
3189 }
3190 /**
3191 * @license
3192 * Copyright Google LLC All Rights Reserved.
3193 *
3194 * Use of this source code is governed by an MIT-style license that can be
3195 * found in the LICENSE file at https://angular.io/license
3196 */
3197 function eventTargetPatch(_global, api) {
3198 if (Zone[api.symbol('patchEventTarget')]) {
3199 // EventTarget is already patched.
3200 return;
3201 }
3202 var _a = api.getGlobalObjects(), eventNames = _a.eventNames, zoneSymbolEventNames = _a.zoneSymbolEventNames, TRUE_STR = _a.TRUE_STR, FALSE_STR = _a.FALSE_STR, ZONE_SYMBOL_PREFIX = _a.ZONE_SYMBOL_PREFIX;
3203 // predefine all __zone_symbol__ + eventName + true/false string
3204 for (var i = 0; i < eventNames.length; i++) {
3205 var eventName = eventNames[i];
3206 var falseEventName = eventName + FALSE_STR;
3207 var trueEventName = eventName + TRUE_STR;
3208 var symbol = ZONE_SYMBOL_PREFIX + falseEventName;
3209 var symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName;
3210 zoneSymbolEventNames[eventName] = {};
3211 zoneSymbolEventNames[eventName][FALSE_STR] = symbol;
3212 zoneSymbolEventNames[eventName][TRUE_STR] = symbolCapture;
3213 }
3214 var EVENT_TARGET = _global['EventTarget'];
3215 if (!EVENT_TARGET || !EVENT_TARGET.prototype) {
3216 return;
3217 }
3218 api.patchEventTarget(_global, [EVENT_TARGET && EVENT_TARGET.prototype]);
3219 return true;
3220 }
3221 function patchEvent(global, api) {
3222 api.patchEventPrototype(global, api);
3223 }
3224 /**
3225 * @license
3226 * Copyright Google LLC All Rights Reserved.
3227 *
3228 * Use of this source code is governed by an MIT-style license that can be
3229 * found in the LICENSE file at https://angular.io/license
3230 */
3231 Zone.__load_patch('legacy', function (global) {
3232 var legacyPatch = global[Zone.__symbol__('legacyPatch')];
3233 if (legacyPatch) {
3234 legacyPatch();
3235 }
3236 });
3237 Zone.__load_patch('queueMicrotask', function (global, Zone, api) {
3238 api.patchMethod(global, 'queueMicrotask', function (delegate) {
3239 return function (self, args) {
3240 Zone.current.scheduleMicroTask('queueMicrotask', args[0]);
3241 };
3242 });
3243 });
3244 Zone.__load_patch('timers', function (global) {
3245 var set = 'set';
3246 var clear = 'clear';
3247 patchTimer(global, set, clear, 'Timeout');
3248 patchTimer(global, set, clear, 'Interval');
3249 patchTimer(global, set, clear, 'Immediate');
3250 });
3251 Zone.__load_patch('requestAnimationFrame', function (global) {
3252 patchTimer(global, 'request', 'cancel', 'AnimationFrame');
3253 patchTimer(global, 'mozRequest', 'mozCancel', 'AnimationFrame');
3254 patchTimer(global, 'webkitRequest', 'webkitCancel', 'AnimationFrame');
3255 });
3256 Zone.__load_patch('blocking', function (global, Zone) {
3257 var blockingMethods = ['alert', 'prompt', 'confirm'];
3258 for (var i = 0; i < blockingMethods.length; i++) {
3259 var name_2 = blockingMethods[i];
3260 patchMethod(global, name_2, function (delegate, symbol, name) {
3261 return function (s, args) {
3262 return Zone.current.run(delegate, global, args, name);
3263 };
3264 });
3265 }
3266 });
3267 Zone.__load_patch('EventTarget', function (global, Zone, api) {
3268 patchEvent(global, api);
3269 eventTargetPatch(global, api);
3270 // patch XMLHttpRequestEventTarget's addEventListener/removeEventListener
3271 var XMLHttpRequestEventTarget = global['XMLHttpRequestEventTarget'];
3272 if (XMLHttpRequestEventTarget && XMLHttpRequestEventTarget.prototype) {
3273 api.patchEventTarget(global, [XMLHttpRequestEventTarget.prototype]);
3274 }
3275 });
3276 Zone.__load_patch('MutationObserver', function (global, Zone, api) {
3277 patchClass('MutationObserver');
3278 patchClass('WebKitMutationObserver');
3279 });
3280 Zone.__load_patch('IntersectionObserver', function (global, Zone, api) {
3281 patchClass('IntersectionObserver');
3282 });
3283 Zone.__load_patch('FileReader', function (global, Zone, api) {
3284 patchClass('FileReader');
3285 });
3286 Zone.__load_patch('on_property', function (global, Zone, api) {
3287 propertyDescriptorPatch(api, global);
3288 });
3289 Zone.__load_patch('customElements', function (global, Zone, api) {
3290 patchCustomElements(global, api);
3291 });
3292 Zone.__load_patch('XHR', function (global, Zone) {
3293 // Treat XMLHttpRequest as a macrotask.
3294 patchXHR(global);
3295 var XHR_TASK = zoneSymbol('xhrTask');
3296 var XHR_SYNC = zoneSymbol('xhrSync');
3297 var XHR_LISTENER = zoneSymbol('xhrListener');
3298 var XHR_SCHEDULED = zoneSymbol('xhrScheduled');
3299 var XHR_URL = zoneSymbol('xhrURL');
3300 var XHR_ERROR_BEFORE_SCHEDULED = zoneSymbol('xhrErrorBeforeScheduled');
3301 function patchXHR(window) {
3302 var XMLHttpRequest = window['XMLHttpRequest'];
3303 if (!XMLHttpRequest) {
3304 // XMLHttpRequest is not available in service worker
3305 return;
3306 }
3307 var XMLHttpRequestPrototype = XMLHttpRequest.prototype;
3308 function findPendingTask(target) {
3309 return target[XHR_TASK];
3310 }
3311 var oriAddListener = XMLHttpRequestPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER];
3312 var oriRemoveListener = XMLHttpRequestPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];
3313 if (!oriAddListener) {
3314 var XMLHttpRequestEventTarget_1 = window['XMLHttpRequestEventTarget'];
3315 if (XMLHttpRequestEventTarget_1) {
3316 var XMLHttpRequestEventTargetPrototype = XMLHttpRequestEventTarget_1.prototype;
3317 oriAddListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER];
3318 oriRemoveListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];
3319 }
3320 }
3321 var READY_STATE_CHANGE = 'readystatechange';
3322 var SCHEDULED = 'scheduled';
3323 function scheduleTask(task) {
3324 var data = task.data;
3325 var target = data.target;
3326 target[XHR_SCHEDULED] = false;
3327 target[XHR_ERROR_BEFORE_SCHEDULED] = false;
3328 // remove existing event listener
3329 var listener = target[XHR_LISTENER];
3330 if (!oriAddListener) {
3331 oriAddListener = target[ZONE_SYMBOL_ADD_EVENT_LISTENER];
3332 oriRemoveListener = target[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];
3333 }
3334 if (listener) {
3335 oriRemoveListener.call(target, READY_STATE_CHANGE, listener);
3336 }
3337 var newListener = target[XHR_LISTENER] = function () {
3338 if (target.readyState === target.DONE) {
3339 // sometimes on some browsers XMLHttpRequest will fire onreadystatechange with
3340 // readyState=4 multiple times, so we need to check task state here
3341 if (!data.aborted && target[XHR_SCHEDULED] && task.state === SCHEDULED) {
3342 // check whether the xhr has registered onload listener
3343 // if that is the case, the task should invoke after all
3344 // onload listeners finish.
3345 // Also if the request failed without response (status = 0), the load event handler
3346 // will not be triggered, in that case, we should also invoke the placeholder callback
3347 // to close the XMLHttpRequest::send macroTask.
3348 // https://github.com/angular/angular/issues/38795
3349 var loadTasks = target[Zone.__symbol__('loadfalse')];
3350 if (target.status !== 0 && loadTasks && loadTasks.length > 0) {
3351 var oriInvoke_1 = task.invoke;
3352 task.invoke = function () {
3353 // need to load the tasks again, because in other
3354 // load listener, they may remove themselves
3355 var loadTasks = target[Zone.__symbol__('loadfalse')];
3356 for (var i = 0; i < loadTasks.length; i++) {
3357 if (loadTasks[i] === task) {
3358 loadTasks.splice(i, 1);
3359 }
3360 }
3361 if (!data.aborted && task.state === SCHEDULED) {
3362 oriInvoke_1.call(task);
3363 }
3364 };
3365 loadTasks.push(task);
3366 }
3367 else {
3368 task.invoke();
3369 }
3370 }
3371 else if (!data.aborted && target[XHR_SCHEDULED] === false) {
3372 // error occurs when xhr.send()
3373 target[XHR_ERROR_BEFORE_SCHEDULED] = true;
3374 }
3375 }
3376 };
3377 oriAddListener.call(target, READY_STATE_CHANGE, newListener);
3378 var storedTask = target[XHR_TASK];
3379 if (!storedTask) {
3380 target[XHR_TASK] = task;
3381 }
3382 sendNative.apply(target, data.args);
3383 target[XHR_SCHEDULED] = true;
3384 return task;
3385 }
3386 function placeholderCallback() { }
3387 function clearTask(task) {
3388 var data = task.data;
3389 // Note - ideally, we would call data.target.removeEventListener here, but it's too late
3390 // to prevent it from firing. So instead, we store info for the event listener.
3391 data.aborted = true;
3392 return abortNative.apply(data.target, data.args);
3393 }
3394 var openNative = patchMethod(XMLHttpRequestPrototype, 'open', function () { return function (self, args) {
3395 self[XHR_SYNC] = args[2] == false;
3396 self[XHR_URL] = args[1];
3397 return openNative.apply(self, args);
3398 }; });
3399 var XMLHTTPREQUEST_SOURCE = 'XMLHttpRequest.send';
3400 var fetchTaskAborting = zoneSymbol('fetchTaskAborting');
3401 var fetchTaskScheduling = zoneSymbol('fetchTaskScheduling');
3402 var sendNative = patchMethod(XMLHttpRequestPrototype, 'send', function () { return function (self, args) {
3403 if (Zone.current[fetchTaskScheduling] === true) {
3404 // a fetch is scheduling, so we are using xhr to polyfill fetch
3405 // and because we already schedule macroTask for fetch, we should
3406 // not schedule a macroTask for xhr again
3407 return sendNative.apply(self, args);
3408 }
3409 if (self[XHR_SYNC]) {
3410 // if the XHR is sync there is no task to schedule, just execute the code.
3411 return sendNative.apply(self, args);
3412 }
3413 else {
3414 var options = { target: self, url: self[XHR_URL], isPeriodic: false, args: args, aborted: false };
3415 var task = scheduleMacroTaskWithCurrentZone(XMLHTTPREQUEST_SOURCE, placeholderCallback, options, scheduleTask, clearTask);
3416 if (self && self[XHR_ERROR_BEFORE_SCHEDULED] === true && !options.aborted &&
3417 task.state === SCHEDULED) {
3418 // xhr request throw error when send
3419 // we should invoke task instead of leaving a scheduled
3420 // pending macroTask
3421 task.invoke();
3422 }
3423 }
3424 }; });
3425 var abortNative = patchMethod(XMLHttpRequestPrototype, 'abort', function () { return function (self, args) {
3426 var task = findPendingTask(self);
3427 if (task && typeof task.type == 'string') {
3428 // If the XHR has already completed, do nothing.
3429 // If the XHR has already been aborted, do nothing.
3430 // Fix #569, call abort multiple times before done will cause
3431 // macroTask task count be negative number
3432 if (task.cancelFn == null || (task.data && task.data.aborted)) {
3433 return;
3434 }
3435 task.zone.cancelTask(task);
3436 }
3437 else if (Zone.current[fetchTaskAborting] === true) {
3438 // the abort is called from fetch polyfill, we need to call native abort of XHR.
3439 return abortNative.apply(self, args);
3440 }
3441 // Otherwise, we are trying to abort an XHR which has not yet been sent, so there is no
3442 // task
3443 // to cancel. Do nothing.
3444 }; });
3445 }
3446 });
3447 Zone.__load_patch('geolocation', function (global) {
3448 /// GEO_LOCATION
3449 if (global['navigator'] && global['navigator'].geolocation) {
3450 patchPrototype(global['navigator'].geolocation, ['getCurrentPosition', 'watchPosition']);
3451 }
3452 });
3453 Zone.__load_patch('PromiseRejectionEvent', function (global, Zone) {
3454 // handle unhandled promise rejection
3455 function findPromiseRejectionHandler(evtName) {
3456 return function (e) {
3457 var eventTasks = findEventTasks(global, evtName);
3458 eventTasks.forEach(function (eventTask) {
3459 // windows has added unhandledrejection event listener
3460 // trigger the event listener
3461 var PromiseRejectionEvent = global['PromiseRejectionEvent'];
3462 if (PromiseRejectionEvent) {
3463 var evt = new PromiseRejectionEvent(evtName, { promise: e.promise, reason: e.rejection });
3464 eventTask.invoke(evt);
3465 }
3466 });
3467 };
3468 }
3469 if (global['PromiseRejectionEvent']) {
3470 Zone[zoneSymbol('unhandledPromiseRejectionHandler')] =
3471 findPromiseRejectionHandler('unhandledrejection');
3472 Zone[zoneSymbol('rejectionHandledHandler')] =
3473 findPromiseRejectionHandler('rejectionhandled');
3474 }
3475 });
3476})));
Note: See TracBrowser for help on using the repository browser.