'use strict'; /** * @license Angular v12.0.0-next.0 * (c) 2010-2020 Google LLC. https://angular.io/ * License: MIT */ (function (factory) { typeof define === 'function' && define.amd ? define(factory) : factory(); }((function () { 'use strict'; /** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ /** * Promise for async/fakeAsync zoneSpec test * can support async operation which not supported by zone.js * such as * it ('test jsonp in AsyncZone', async() => { * new Promise(res => { * jsonp(url, (data) => { * // success callback * res(data); * }); * }).then((jsonpResult) => { * // get jsonp result. * * // user will expect AsyncZoneSpec wait for * // then, but because jsonp is not zone aware * // AsyncZone will finish before then is called. * }); * }); */ Zone.__load_patch('promisefortest', function (global, Zone, api) { var symbolState = api.symbol('state'); var UNRESOLVED = null; var symbolParentUnresolved = api.symbol('parentUnresolved'); // patch Promise.prototype.then to keep an internal // number for tracking unresolved chained promise // we will decrease this number when the parent promise // being resolved/rejected and chained promise was // scheduled as a microTask. // so we can know such kind of chained promise still // not resolved in AsyncTestZone Promise[api.symbol('patchPromiseForTest')] = function patchPromiseForTest() { var oriThen = Promise[Zone.__symbol__('ZonePromiseThen')]; if (oriThen) { return; } oriThen = Promise[Zone.__symbol__('ZonePromiseThen')] = Promise.prototype.then; Promise.prototype.then = function () { var chained = oriThen.apply(this, arguments); if (this[symbolState] === UNRESOLVED) { // parent promise is unresolved. var asyncTestZoneSpec = Zone.current.get('AsyncTestZoneSpec'); if (asyncTestZoneSpec) { asyncTestZoneSpec.unresolvedChainedPromiseCount++; chained[symbolParentUnresolved] = true; } } return chained; }; }; Promise[api.symbol('unPatchPromiseForTest')] = function unpatchPromiseForTest() { // restore origin then var oriThen = Promise[Zone.__symbol__('ZonePromiseThen')]; if (oriThen) { Promise.prototype.then = oriThen; Promise[Zone.__symbol__('ZonePromiseThen')] = undefined; } }; }); })));