zone-legacy.umd.js 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706
  1. 'use strict';
  2. var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
  3. if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
  4. if (ar || !(i in from)) {
  5. if (!ar) ar = Array.prototype.slice.call(from, 0, i);
  6. ar[i] = from[i];
  7. }
  8. }
  9. return to.concat(ar || Array.prototype.slice.call(from));
  10. };
  11. /**
  12. * @license Angular v<unknown>
  13. * (c) 2010-2025 Google LLC. https://angular.io/
  14. * License: MIT
  15. */
  16. (function (factory) {
  17. typeof define === 'function' && define.amd ? define(factory) :
  18. factory();
  19. })((function () {
  20. 'use strict';
  21. /*
  22. * This is necessary for Chrome and Chrome mobile, to enable
  23. * things like redefining `createdCallback` on an element.
  24. */
  25. var zoneSymbol;
  26. var _defineProperty;
  27. var _getOwnPropertyDescriptor;
  28. var _create;
  29. var unconfigurablesKey;
  30. function propertyPatch() {
  31. zoneSymbol = Zone.__symbol__;
  32. _defineProperty = Object[zoneSymbol('defineProperty')] = Object.defineProperty;
  33. _getOwnPropertyDescriptor = Object[zoneSymbol('getOwnPropertyDescriptor')] =
  34. Object.getOwnPropertyDescriptor;
  35. _create = Object.create;
  36. unconfigurablesKey = zoneSymbol('unconfigurables');
  37. Object.defineProperty = function (obj, prop, desc) {
  38. if (isUnconfigurable(obj, prop)) {
  39. throw new TypeError("Cannot assign to read only property '" + prop + "' of " + obj);
  40. }
  41. var originalConfigurableFlag = desc.configurable;
  42. if (prop !== 'prototype') {
  43. desc = rewriteDescriptor(obj, prop, desc);
  44. }
  45. return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag);
  46. };
  47. Object.defineProperties = function (obj, props) {
  48. Object.keys(props).forEach(function (prop) {
  49. Object.defineProperty(obj, prop, props[prop]);
  50. });
  51. for (var _i = 0, _a = Object.getOwnPropertySymbols(props); _i < _a.length; _i++) {
  52. var sym = _a[_i];
  53. var desc = Object.getOwnPropertyDescriptor(props, sym);
  54. // Since `Object.getOwnPropertySymbols` returns *all* symbols,
  55. // including non-enumerable ones, retrieve property descriptor and check
  56. // enumerability there. Proceed with the rewrite only when a property is
  57. // enumerable to make the logic consistent with the way regular
  58. // properties are retrieved (via `Object.keys`, which respects
  59. // `enumerable: false` flag). More information:
  60. // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties#retrieval
  61. if (desc === null || desc === void 0 ? void 0 : desc.enumerable) {
  62. Object.defineProperty(obj, sym, props[sym]);
  63. }
  64. }
  65. return obj;
  66. };
  67. Object.create = function (proto, propertiesObject) {
  68. if (typeof propertiesObject === 'object' && !Object.isFrozen(propertiesObject)) {
  69. Object.keys(propertiesObject).forEach(function (prop) {
  70. propertiesObject[prop] = rewriteDescriptor(proto, prop, propertiesObject[prop]);
  71. });
  72. }
  73. return _create(proto, propertiesObject);
  74. };
  75. Object.getOwnPropertyDescriptor = function (obj, prop) {
  76. var desc = _getOwnPropertyDescriptor(obj, prop);
  77. if (desc && isUnconfigurable(obj, prop)) {
  78. desc.configurable = false;
  79. }
  80. return desc;
  81. };
  82. }
  83. function _redefineProperty(obj, prop, desc) {
  84. var originalConfigurableFlag = desc.configurable;
  85. desc = rewriteDescriptor(obj, prop, desc);
  86. return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag);
  87. }
  88. function isUnconfigurable(obj, prop) {
  89. return obj && obj[unconfigurablesKey] && obj[unconfigurablesKey][prop];
  90. }
  91. function rewriteDescriptor(obj, prop, desc) {
  92. // issue-927, if the desc is frozen, don't try to change the desc
  93. if (!Object.isFrozen(desc)) {
  94. desc.configurable = true;
  95. }
  96. if (!desc.configurable) {
  97. // issue-927, if the obj is frozen, don't try to set the desc to obj
  98. if (!obj[unconfigurablesKey] && !Object.isFrozen(obj)) {
  99. _defineProperty(obj, unconfigurablesKey, { writable: true, value: {} });
  100. }
  101. if (obj[unconfigurablesKey]) {
  102. obj[unconfigurablesKey][prop] = true;
  103. }
  104. }
  105. return desc;
  106. }
  107. function _tryDefineProperty(obj, prop, desc, originalConfigurableFlag) {
  108. try {
  109. return _defineProperty(obj, prop, desc);
  110. }
  111. catch (error) {
  112. if (desc.configurable) {
  113. // In case of errors, when the configurable flag was likely set by rewriteDescriptor(),
  114. // let's retry with the original flag value
  115. if (typeof originalConfigurableFlag == 'undefined') {
  116. delete desc.configurable;
  117. }
  118. else {
  119. desc.configurable = originalConfigurableFlag;
  120. }
  121. try {
  122. return _defineProperty(obj, prop, desc);
  123. }
  124. catch (error) {
  125. var swallowError = false;
  126. if (prop === 'createdCallback' ||
  127. prop === 'attachedCallback' ||
  128. prop === 'detachedCallback' ||
  129. prop === 'attributeChangedCallback') {
  130. // We only swallow the error in registerElement patch
  131. // this is the work around since some applications
  132. // fail if we throw the error
  133. swallowError = true;
  134. }
  135. if (!swallowError) {
  136. throw error;
  137. }
  138. // TODO: @JiaLiPassion, Some application such as `registerElement` patch
  139. // still need to swallow the error, in the future after these applications
  140. // are updated, the following logic can be removed.
  141. var descJson = null;
  142. try {
  143. descJson = JSON.stringify(desc);
  144. }
  145. catch (error) {
  146. descJson = desc.toString();
  147. }
  148. console.log("Attempting to configure '".concat(prop, "' with descriptor '").concat(descJson, "' on object '").concat(obj, "' and got error, giving up: ").concat(error));
  149. }
  150. }
  151. else {
  152. throw error;
  153. }
  154. }
  155. }
  156. function eventTargetLegacyPatch(_global, api) {
  157. 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;
  158. 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';
  159. 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'.split(',');
  160. var EVENT_TARGET = 'EventTarget';
  161. var apis = [];
  162. var isWtf = _global['wtf'];
  163. var WTF_ISSUE_555_ARRAY = WTF_ISSUE_555.split(',');
  164. if (isWtf) {
  165. // Workaround for: https://github.com/google/tracing-framework/issues/555
  166. apis = WTF_ISSUE_555_ARRAY.map(function (v) { return 'HTML' + v + 'Element'; }).concat(NO_EVENT_TARGET);
  167. }
  168. else if (_global[EVENT_TARGET]) {
  169. apis.push(EVENT_TARGET);
  170. }
  171. else {
  172. // Note: EventTarget is not available in all browsers,
  173. // if it's not available, we instead patch the APIs in the IDL that inherit from EventTarget
  174. apis = NO_EVENT_TARGET;
  175. }
  176. var isDisableIECheck = _global['__Zone_disable_IE_check'] || false;
  177. var isEnableCrossContextCheck = _global['__Zone_enable_cross_context_check'] || false;
  178. var ieOrEdge = api.isIEOrEdge();
  179. var ADD_EVENT_LISTENER_SOURCE = '.addEventListener:';
  180. var FUNCTION_WRAPPER = '[object FunctionWrapper]';
  181. var BROWSER_TOOLS = 'function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }';
  182. var pointerEventsMap = {
  183. 'MSPointerCancel': 'pointercancel',
  184. 'MSPointerDown': 'pointerdown',
  185. 'MSPointerEnter': 'pointerenter',
  186. 'MSPointerHover': 'pointerhover',
  187. 'MSPointerLeave': 'pointerleave',
  188. 'MSPointerMove': 'pointermove',
  189. 'MSPointerOut': 'pointerout',
  190. 'MSPointerOver': 'pointerover',
  191. 'MSPointerUp': 'pointerup',
  192. };
  193. // predefine all __zone_symbol__ + eventName + true/false string
  194. for (var i = 0; i < eventNames.length; i++) {
  195. var eventName = eventNames[i];
  196. var falseEventName = eventName + FALSE_STR;
  197. var trueEventName = eventName + TRUE_STR;
  198. var symbol = ZONE_SYMBOL_PREFIX + falseEventName;
  199. var symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName;
  200. zoneSymbolEventNames[eventName] = {};
  201. zoneSymbolEventNames[eventName][FALSE_STR] = symbol;
  202. zoneSymbolEventNames[eventName][TRUE_STR] = symbolCapture;
  203. }
  204. // predefine all task.source string
  205. for (var i = 0; i < WTF_ISSUE_555_ARRAY.length; i++) {
  206. var target = WTF_ISSUE_555_ARRAY[i];
  207. var targets = (globalSources[target] = {});
  208. for (var j = 0; j < eventNames.length; j++) {
  209. var eventName = eventNames[j];
  210. targets[eventName] = target + ADD_EVENT_LISTENER_SOURCE + eventName;
  211. }
  212. }
  213. var checkIEAndCrossContext = function (nativeDelegate, delegate, target, args) {
  214. if (!isDisableIECheck && ieOrEdge) {
  215. if (isEnableCrossContextCheck) {
  216. try {
  217. var testString = delegate.toString();
  218. if (testString === FUNCTION_WRAPPER || testString == BROWSER_TOOLS) {
  219. nativeDelegate.apply(target, args);
  220. return false;
  221. }
  222. }
  223. catch (error) {
  224. nativeDelegate.apply(target, args);
  225. return false;
  226. }
  227. }
  228. else {
  229. var testString = delegate.toString();
  230. if (testString === FUNCTION_WRAPPER || testString == BROWSER_TOOLS) {
  231. nativeDelegate.apply(target, args);
  232. return false;
  233. }
  234. }
  235. }
  236. else if (isEnableCrossContextCheck) {
  237. try {
  238. delegate.toString();
  239. }
  240. catch (error) {
  241. nativeDelegate.apply(target, args);
  242. return false;
  243. }
  244. }
  245. return true;
  246. };
  247. var apiTypes = [];
  248. for (var i = 0; i < apis.length; i++) {
  249. var type = _global[apis[i]];
  250. apiTypes.push(type && type.prototype);
  251. }
  252. // vh is validateHandler to check event handler
  253. // is valid or not(for security check)
  254. api.patchEventTarget(_global, api, apiTypes, {
  255. vh: checkIEAndCrossContext,
  256. transferEventName: function (eventName) {
  257. var pointerEventName = pointerEventsMap[eventName];
  258. return pointerEventName || eventName;
  259. },
  260. });
  261. Zone[api.symbol('patchEventTarget')] = !!_global[EVENT_TARGET];
  262. return true;
  263. }
  264. // we have to patch the instance since the proto is non-configurable
  265. function apply(api, _global) {
  266. var _a = api.getGlobalObjects(), ADD_EVENT_LISTENER_STR = _a.ADD_EVENT_LISTENER_STR, REMOVE_EVENT_LISTENER_STR = _a.REMOVE_EVENT_LISTENER_STR;
  267. var WS = _global.WebSocket;
  268. // On Safari window.EventTarget doesn't exist so need to patch WS add/removeEventListener
  269. // On older Chrome, no need since EventTarget was already patched
  270. if (!_global.EventTarget) {
  271. api.patchEventTarget(_global, api, [WS.prototype]);
  272. }
  273. _global.WebSocket = function (x, y) {
  274. var socket = arguments.length > 1 ? new WS(x, y) : new WS(x);
  275. var proxySocket;
  276. var proxySocketProto;
  277. // Safari 7.0 has non-configurable own 'onmessage' and friends properties on the socket instance
  278. var onmessageDesc = api.ObjectGetOwnPropertyDescriptor(socket, 'onmessage');
  279. if (onmessageDesc && onmessageDesc.configurable === false) {
  280. proxySocket = api.ObjectCreate(socket);
  281. // socket have own property descriptor 'onopen', 'onmessage', 'onclose', 'onerror'
  282. // but proxySocket not, so we will keep socket as prototype and pass it to
  283. // patchOnProperties method
  284. proxySocketProto = socket;
  285. [ADD_EVENT_LISTENER_STR, REMOVE_EVENT_LISTENER_STR, 'send', 'close'].forEach(function (propName) {
  286. proxySocket[propName] = function () {
  287. var args = api.ArraySlice.call(arguments);
  288. if (propName === ADD_EVENT_LISTENER_STR || propName === REMOVE_EVENT_LISTENER_STR) {
  289. var eventName = args.length > 0 ? args[0] : undefined;
  290. if (eventName) {
  291. var propertySymbol = Zone.__symbol__('ON_PROPERTY' + eventName);
  292. socket[propertySymbol] = proxySocket[propertySymbol];
  293. }
  294. }
  295. return socket[propName].apply(socket, args);
  296. };
  297. });
  298. }
  299. else {
  300. // we can patch the real socket
  301. proxySocket = socket;
  302. }
  303. api.patchOnProperties(proxySocket, ['close', 'error', 'message', 'open'], proxySocketProto);
  304. return proxySocket;
  305. };
  306. var globalWebSocket = _global['WebSocket'];
  307. for (var prop in WS) {
  308. globalWebSocket[prop] = WS[prop];
  309. }
  310. }
  311. /**
  312. * @fileoverview
  313. * @suppress {globalThis}
  314. */
  315. function propertyDescriptorLegacyPatch(api, _global) {
  316. var _a = api.getGlobalObjects(), isNode = _a.isNode, isMix = _a.isMix;
  317. if (isNode && !isMix) {
  318. return;
  319. }
  320. if (!canPatchViaPropertyDescriptor(api, _global)) {
  321. var supportsWebSocket = typeof WebSocket !== 'undefined';
  322. // Safari, Android browsers (Jelly Bean)
  323. patchViaCapturingAllTheEvents(api);
  324. api.patchClass('XMLHttpRequest');
  325. if (supportsWebSocket) {
  326. apply(api, _global);
  327. }
  328. Zone[api.symbol('patchEvents')] = true;
  329. }
  330. }
  331. function canPatchViaPropertyDescriptor(api, _global) {
  332. var _a = api.getGlobalObjects(), isBrowser = _a.isBrowser, isMix = _a.isMix;
  333. if ((isBrowser || isMix) &&
  334. !api.ObjectGetOwnPropertyDescriptor(HTMLElement.prototype, 'onclick') &&
  335. typeof Element !== 'undefined') {
  336. // WebKit https://bugs.webkit.org/show_bug.cgi?id=134364
  337. // IDL interface attributes are not configurable
  338. var desc = api.ObjectGetOwnPropertyDescriptor(Element.prototype, 'onclick');
  339. if (desc && !desc.configurable)
  340. return false;
  341. // try to use onclick to detect whether we can patch via propertyDescriptor
  342. // because XMLHttpRequest is not available in service worker
  343. if (desc) {
  344. api.ObjectDefineProperty(Element.prototype, 'onclick', {
  345. enumerable: true,
  346. configurable: true,
  347. get: function () {
  348. return true;
  349. },
  350. });
  351. var div = document.createElement('div');
  352. var result = !!div.onclick;
  353. api.ObjectDefineProperty(Element.prototype, 'onclick', desc);
  354. return result;
  355. }
  356. }
  357. var XMLHttpRequest = _global['XMLHttpRequest'];
  358. if (!XMLHttpRequest) {
  359. // XMLHttpRequest is not available in service worker
  360. return false;
  361. }
  362. var ON_READY_STATE_CHANGE = 'onreadystatechange';
  363. var XMLHttpRequestPrototype = XMLHttpRequest.prototype;
  364. var xhrDesc = api.ObjectGetOwnPropertyDescriptor(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE);
  365. // add enumerable and configurable here because in opera
  366. // by default XMLHttpRequest.prototype.onreadystatechange is undefined
  367. // without adding enumerable and configurable will cause onreadystatechange
  368. // non-configurable
  369. // and if XMLHttpRequest.prototype.onreadystatechange is undefined,
  370. // we should set a real desc instead a fake one
  371. if (xhrDesc) {
  372. api.ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, {
  373. enumerable: true,
  374. configurable: true,
  375. get: function () {
  376. return true;
  377. },
  378. });
  379. var req = new XMLHttpRequest();
  380. var result = !!req.onreadystatechange;
  381. // restore original desc
  382. api.ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, xhrDesc || {});
  383. return result;
  384. }
  385. else {
  386. var SYMBOL_FAKE_ONREADYSTATECHANGE_1 = api.symbol('fake');
  387. api.ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, {
  388. enumerable: true,
  389. configurable: true,
  390. get: function () {
  391. return this[SYMBOL_FAKE_ONREADYSTATECHANGE_1];
  392. },
  393. set: function (value) {
  394. this[SYMBOL_FAKE_ONREADYSTATECHANGE_1] = value;
  395. },
  396. });
  397. var req = new XMLHttpRequest();
  398. var detectFunc = function () { };
  399. req.onreadystatechange = detectFunc;
  400. var result = req[SYMBOL_FAKE_ONREADYSTATECHANGE_1] === detectFunc;
  401. req.onreadystatechange = null;
  402. return result;
  403. }
  404. }
  405. var globalEventHandlersEventNames = [
  406. 'abort',
  407. 'animationcancel',
  408. 'animationend',
  409. 'animationiteration',
  410. 'auxclick',
  411. 'beforeinput',
  412. 'blur',
  413. 'cancel',
  414. 'canplay',
  415. 'canplaythrough',
  416. 'change',
  417. 'compositionstart',
  418. 'compositionupdate',
  419. 'compositionend',
  420. 'cuechange',
  421. 'click',
  422. 'close',
  423. 'contextmenu',
  424. 'curechange',
  425. 'dblclick',
  426. 'drag',
  427. 'dragend',
  428. 'dragenter',
  429. 'dragexit',
  430. 'dragleave',
  431. 'dragover',
  432. 'drop',
  433. 'durationchange',
  434. 'emptied',
  435. 'ended',
  436. 'error',
  437. 'focus',
  438. 'focusin',
  439. 'focusout',
  440. 'gotpointercapture',
  441. 'input',
  442. 'invalid',
  443. 'keydown',
  444. 'keypress',
  445. 'keyup',
  446. 'load',
  447. 'loadstart',
  448. 'loadeddata',
  449. 'loadedmetadata',
  450. 'lostpointercapture',
  451. 'mousedown',
  452. 'mouseenter',
  453. 'mouseleave',
  454. 'mousemove',
  455. 'mouseout',
  456. 'mouseover',
  457. 'mouseup',
  458. 'mousewheel',
  459. 'orientationchange',
  460. 'pause',
  461. 'play',
  462. 'playing',
  463. 'pointercancel',
  464. 'pointerdown',
  465. 'pointerenter',
  466. 'pointerleave',
  467. 'pointerlockchange',
  468. 'mozpointerlockchange',
  469. 'webkitpointerlockerchange',
  470. 'pointerlockerror',
  471. 'mozpointerlockerror',
  472. 'webkitpointerlockerror',
  473. 'pointermove',
  474. 'pointout',
  475. 'pointerover',
  476. 'pointerup',
  477. 'progress',
  478. 'ratechange',
  479. 'reset',
  480. 'resize',
  481. 'scroll',
  482. 'seeked',
  483. 'seeking',
  484. 'select',
  485. 'selectionchange',
  486. 'selectstart',
  487. 'show',
  488. 'sort',
  489. 'stalled',
  490. 'submit',
  491. 'suspend',
  492. 'timeupdate',
  493. 'volumechange',
  494. 'touchcancel',
  495. 'touchmove',
  496. 'touchstart',
  497. 'touchend',
  498. 'transitioncancel',
  499. 'transitionend',
  500. 'waiting',
  501. 'wheel',
  502. ];
  503. var documentEventNames = [
  504. 'afterscriptexecute',
  505. 'beforescriptexecute',
  506. 'DOMContentLoaded',
  507. 'freeze',
  508. 'fullscreenchange',
  509. 'mozfullscreenchange',
  510. 'webkitfullscreenchange',
  511. 'msfullscreenchange',
  512. 'fullscreenerror',
  513. 'mozfullscreenerror',
  514. 'webkitfullscreenerror',
  515. 'msfullscreenerror',
  516. 'readystatechange',
  517. 'visibilitychange',
  518. 'resume',
  519. ];
  520. var windowEventNames = [
  521. 'absolutedeviceorientation',
  522. 'afterinput',
  523. 'afterprint',
  524. 'appinstalled',
  525. 'beforeinstallprompt',
  526. 'beforeprint',
  527. 'beforeunload',
  528. 'devicelight',
  529. 'devicemotion',
  530. 'deviceorientation',
  531. 'deviceorientationabsolute',
  532. 'deviceproximity',
  533. 'hashchange',
  534. 'languagechange',
  535. 'message',
  536. 'mozbeforepaint',
  537. 'offline',
  538. 'online',
  539. 'paint',
  540. 'pageshow',
  541. 'pagehide',
  542. 'popstate',
  543. 'rejectionhandled',
  544. 'storage',
  545. 'unhandledrejection',
  546. 'unload',
  547. 'userproximity',
  548. 'vrdisplayconnected',
  549. 'vrdisplaydisconnected',
  550. 'vrdisplaypresentchange',
  551. ];
  552. var htmlElementEventNames = [
  553. 'beforecopy',
  554. 'beforecut',
  555. 'beforepaste',
  556. 'copy',
  557. 'cut',
  558. 'paste',
  559. 'dragstart',
  560. 'loadend',
  561. 'animationstart',
  562. 'search',
  563. 'transitionrun',
  564. 'transitionstart',
  565. 'webkitanimationend',
  566. 'webkitanimationiteration',
  567. 'webkitanimationstart',
  568. 'webkittransitionend',
  569. ];
  570. var ieElementEventNames = [
  571. 'activate',
  572. 'afterupdate',
  573. 'ariarequest',
  574. 'beforeactivate',
  575. 'beforedeactivate',
  576. 'beforeeditfocus',
  577. 'beforeupdate',
  578. 'cellchange',
  579. 'controlselect',
  580. 'dataavailable',
  581. 'datasetchanged',
  582. 'datasetcomplete',
  583. 'errorupdate',
  584. 'filterchange',
  585. 'layoutcomplete',
  586. 'losecapture',
  587. 'move',
  588. 'moveend',
  589. 'movestart',
  590. 'propertychange',
  591. 'resizeend',
  592. 'resizestart',
  593. 'rowenter',
  594. 'rowexit',
  595. 'rowsdelete',
  596. 'rowsinserted',
  597. 'command',
  598. 'compassneedscalibration',
  599. 'deactivate',
  600. 'help',
  601. 'mscontentzoom',
  602. 'msmanipulationstatechanged',
  603. 'msgesturechange',
  604. 'msgesturedoubletap',
  605. 'msgestureend',
  606. 'msgesturehold',
  607. 'msgesturestart',
  608. 'msgesturetap',
  609. 'msgotpointercapture',
  610. 'msinertiastart',
  611. 'mslostpointercapture',
  612. 'mspointercancel',
  613. 'mspointerdown',
  614. 'mspointerenter',
  615. 'mspointerhover',
  616. 'mspointerleave',
  617. 'mspointermove',
  618. 'mspointerout',
  619. 'mspointerover',
  620. 'mspointerup',
  621. 'pointerout',
  622. 'mssitemodejumplistitemremoved',
  623. 'msthumbnailclick',
  624. 'stop',
  625. 'storagecommit',
  626. ];
  627. var webglEventNames = ['webglcontextrestored', 'webglcontextlost', 'webglcontextcreationerror'];
  628. var formEventNames = ['autocomplete', 'autocompleteerror'];
  629. var detailEventNames = ['toggle'];
  630. var eventNames = __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], globalEventHandlersEventNames, true), webglEventNames, true), formEventNames, true), detailEventNames, true), documentEventNames, true), windowEventNames, true), htmlElementEventNames, true), ieElementEventNames, true);
  631. // Whenever any eventListener fires, we check the eventListener target and all parents
  632. // for `onwhatever` properties and replace them with zone-bound functions
  633. // - Chrome (for now)
  634. function patchViaCapturingAllTheEvents(api) {
  635. var unboundKey = api.symbol('unbound');
  636. var _loop_1 = function (i) {
  637. var property = eventNames[i];
  638. var onproperty = 'on' + property;
  639. self.addEventListener(property, function (event) {
  640. var elt = event.target, bound, source;
  641. if (elt) {
  642. source = elt.constructor['name'] + '.' + onproperty;
  643. }
  644. else {
  645. source = 'unknown.' + onproperty;
  646. }
  647. while (elt) {
  648. if (elt[onproperty] && !elt[onproperty][unboundKey]) {
  649. bound = api.wrapWithCurrentZone(elt[onproperty], source);
  650. bound[unboundKey] = elt[onproperty];
  651. elt[onproperty] = bound;
  652. }
  653. elt = elt.parentElement;
  654. }
  655. }, true);
  656. };
  657. for (var i = 0; i < eventNames.length; i++) {
  658. _loop_1(i);
  659. }
  660. }
  661. function registerElementPatch(_global, api) {
  662. var _a = api.getGlobalObjects(), isBrowser = _a.isBrowser, isMix = _a.isMix;
  663. if ((!isBrowser && !isMix) || !('registerElement' in _global.document)) {
  664. return;
  665. }
  666. var callbacks = [
  667. 'createdCallback',
  668. 'attachedCallback',
  669. 'detachedCallback',
  670. 'attributeChangedCallback',
  671. ];
  672. api.patchCallbacks(api, document, 'Document', 'registerElement', callbacks);
  673. }
  674. /**
  675. * @fileoverview
  676. * @suppress {missingRequire}
  677. */
  678. function patchBrowserLegacy() {
  679. var _global = typeof window !== 'undefined'
  680. ? window
  681. : typeof global !== 'undefined'
  682. ? global
  683. : typeof self !== 'undefined'
  684. ? self
  685. : {};
  686. var symbolPrefix = _global['__Zone_symbol_prefix'] || '__zone_symbol__';
  687. function __symbol__(name) {
  688. return symbolPrefix + name;
  689. }
  690. _global[__symbol__('legacyPatch')] = function () {
  691. var Zone = _global['Zone'];
  692. Zone.__load_patch('defineProperty', function (global, Zone, api) {
  693. api._redefineProperty = _redefineProperty;
  694. propertyPatch();
  695. });
  696. Zone.__load_patch('registerElement', function (global, Zone, api) {
  697. registerElementPatch(global, api);
  698. });
  699. Zone.__load_patch('EventTargetLegacy', function (global, Zone, api) {
  700. eventTargetLegacyPatch(global, api);
  701. propertyDescriptorLegacyPatch(api, global);
  702. });
  703. };
  704. }
  705. patchBrowserLegacy();
  706. }));