123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659 |
- 'use strict';
- /**
- * @license Angular v<unknown>
- * (c) 2010-2022 Google LLC. https://angular.io/
- * License: MIT
- */
- /*
- * This is necessary for Chrome and Chrome mobile, to enable
- * things like redefining `createdCallback` on an element.
- */
- let zoneSymbol;
- let _defineProperty;
- let _getOwnPropertyDescriptor;
- let _create;
- let unconfigurablesKey;
- function propertyPatch() {
- zoneSymbol = Zone.__symbol__;
- _defineProperty = Object[zoneSymbol('defineProperty')] = Object.defineProperty;
- _getOwnPropertyDescriptor = Object[zoneSymbol('getOwnPropertyDescriptor')] =
- Object.getOwnPropertyDescriptor;
- _create = Object.create;
- unconfigurablesKey = zoneSymbol('unconfigurables');
- Object.defineProperty = function (obj, prop, desc) {
- if (isUnconfigurable(obj, prop)) {
- throw new TypeError('Cannot assign to read only property \'' + prop + '\' of ' + obj);
- }
- const originalConfigurableFlag = desc.configurable;
- if (prop !== 'prototype') {
- desc = rewriteDescriptor(obj, prop, desc);
- }
- return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag);
- };
- Object.defineProperties = function (obj, props) {
- Object.keys(props).forEach(function (prop) {
- Object.defineProperty(obj, prop, props[prop]);
- });
- for (const sym of Object.getOwnPropertySymbols(props)) {
- const desc = Object.getOwnPropertyDescriptor(props, sym);
- // Since `Object.getOwnPropertySymbols` returns *all* symbols,
- // including non-enumerable ones, retrieve property descriptor and check
- // enumerability there. Proceed with the rewrite only when a property is
- // enumerable to make the logic consistent with the way regular
- // properties are retrieved (via `Object.keys`, which respects
- // `enumerable: false` flag). More information:
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties#retrieval
- if (desc?.enumerable) {
- Object.defineProperty(obj, sym, props[sym]);
- }
- }
- return obj;
- };
- Object.create = function (proto, propertiesObject) {
- if (typeof propertiesObject === 'object' && !Object.isFrozen(propertiesObject)) {
- Object.keys(propertiesObject).forEach(function (prop) {
- propertiesObject[prop] = rewriteDescriptor(proto, prop, propertiesObject[prop]);
- });
- }
- return _create(proto, propertiesObject);
- };
- Object.getOwnPropertyDescriptor = function (obj, prop) {
- const desc = _getOwnPropertyDescriptor(obj, prop);
- if (desc && isUnconfigurable(obj, prop)) {
- desc.configurable = false;
- }
- return desc;
- };
- }
- function _redefineProperty(obj, prop, desc) {
- const originalConfigurableFlag = desc.configurable;
- desc = rewriteDescriptor(obj, prop, desc);
- return _tryDefineProperty(obj, prop, desc, originalConfigurableFlag);
- }
- function isUnconfigurable(obj, prop) {
- return obj && obj[unconfigurablesKey] && obj[unconfigurablesKey][prop];
- }
- function rewriteDescriptor(obj, prop, desc) {
- // issue-927, if the desc is frozen, don't try to change the desc
- if (!Object.isFrozen(desc)) {
- desc.configurable = true;
- }
- if (!desc.configurable) {
- // issue-927, if the obj is frozen, don't try to set the desc to obj
- if (!obj[unconfigurablesKey] && !Object.isFrozen(obj)) {
- _defineProperty(obj, unconfigurablesKey, { writable: true, value: {} });
- }
- if (obj[unconfigurablesKey]) {
- obj[unconfigurablesKey][prop] = true;
- }
- }
- return desc;
- }
- function _tryDefineProperty(obj, prop, desc, originalConfigurableFlag) {
- try {
- return _defineProperty(obj, prop, desc);
- }
- catch (error) {
- if (desc.configurable) {
- // In case of errors, when the configurable flag was likely set by rewriteDescriptor(),
- // let's retry with the original flag value
- if (typeof originalConfigurableFlag == 'undefined') {
- delete desc.configurable;
- }
- else {
- desc.configurable = originalConfigurableFlag;
- }
- try {
- return _defineProperty(obj, prop, desc);
- }
- catch (error) {
- let swallowError = false;
- if (prop === 'createdCallback' || prop === 'attachedCallback' ||
- prop === 'detachedCallback' || prop === 'attributeChangedCallback') {
- // We only swallow the error in registerElement patch
- // this is the work around since some applications
- // fail if we throw the error
- swallowError = true;
- }
- if (!swallowError) {
- throw error;
- }
- // TODO: @JiaLiPassion, Some application such as `registerElement` patch
- // still need to swallow the error, in the future after these applications
- // are updated, the following logic can be removed.
- let descJson = null;
- try {
- descJson = JSON.stringify(desc);
- }
- catch (error) {
- descJson = desc.toString();
- }
- console.log(`Attempting to configure '${prop}' with descriptor '${descJson}' on object '${obj}' and got error, giving up: ${error}`);
- }
- }
- else {
- throw error;
- }
- }
- }
- function eventTargetLegacyPatch(_global, api) {
- const { eventNames, globalSources, zoneSymbolEventNames, TRUE_STR, FALSE_STR, ZONE_SYMBOL_PREFIX } = api.getGlobalObjects();
- const 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';
- const 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(',');
- const EVENT_TARGET = 'EventTarget';
- let apis = [];
- const isWtf = _global['wtf'];
- const WTF_ISSUE_555_ARRAY = WTF_ISSUE_555.split(',');
- if (isWtf) {
- // Workaround for: https://github.com/google/tracing-framework/issues/555
- apis = WTF_ISSUE_555_ARRAY.map((v) => 'HTML' + v + 'Element').concat(NO_EVENT_TARGET);
- }
- else if (_global[EVENT_TARGET]) {
- apis.push(EVENT_TARGET);
- }
- else {
- // Note: EventTarget is not available in all browsers,
- // if it's not available, we instead patch the APIs in the IDL that inherit from EventTarget
- apis = NO_EVENT_TARGET;
- }
- const isDisableIECheck = _global['__Zone_disable_IE_check'] || false;
- const isEnableCrossContextCheck = _global['__Zone_enable_cross_context_check'] || false;
- const ieOrEdge = api.isIEOrEdge();
- const ADD_EVENT_LISTENER_SOURCE = '.addEventListener:';
- const FUNCTION_WRAPPER = '[object FunctionWrapper]';
- const BROWSER_TOOLS = 'function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }';
- const pointerEventsMap = {
- 'MSPointerCancel': 'pointercancel',
- 'MSPointerDown': 'pointerdown',
- 'MSPointerEnter': 'pointerenter',
- 'MSPointerHover': 'pointerhover',
- 'MSPointerLeave': 'pointerleave',
- 'MSPointerMove': 'pointermove',
- 'MSPointerOut': 'pointerout',
- 'MSPointerOver': 'pointerover',
- 'MSPointerUp': 'pointerup'
- };
- // predefine all __zone_symbol__ + eventName + true/false string
- for (let i = 0; i < eventNames.length; i++) {
- const eventName = eventNames[i];
- const falseEventName = eventName + FALSE_STR;
- const trueEventName = eventName + TRUE_STR;
- const symbol = ZONE_SYMBOL_PREFIX + falseEventName;
- const symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName;
- zoneSymbolEventNames[eventName] = {};
- zoneSymbolEventNames[eventName][FALSE_STR] = symbol;
- zoneSymbolEventNames[eventName][TRUE_STR] = symbolCapture;
- }
- // predefine all task.source string
- for (let i = 0; i < WTF_ISSUE_555_ARRAY.length; i++) {
- const target = WTF_ISSUE_555_ARRAY[i];
- const targets = globalSources[target] = {};
- for (let j = 0; j < eventNames.length; j++) {
- const eventName = eventNames[j];
- targets[eventName] = target + ADD_EVENT_LISTENER_SOURCE + eventName;
- }
- }
- const checkIEAndCrossContext = function (nativeDelegate, delegate, target, args) {
- if (!isDisableIECheck && ieOrEdge) {
- if (isEnableCrossContextCheck) {
- try {
- const testString = delegate.toString();
- if ((testString === FUNCTION_WRAPPER || testString == BROWSER_TOOLS)) {
- nativeDelegate.apply(target, args);
- return false;
- }
- }
- catch (error) {
- nativeDelegate.apply(target, args);
- return false;
- }
- }
- else {
- const testString = delegate.toString();
- if ((testString === FUNCTION_WRAPPER || testString == BROWSER_TOOLS)) {
- nativeDelegate.apply(target, args);
- return false;
- }
- }
- }
- else if (isEnableCrossContextCheck) {
- try {
- delegate.toString();
- }
- catch (error) {
- nativeDelegate.apply(target, args);
- return false;
- }
- }
- return true;
- };
- const apiTypes = [];
- for (let i = 0; i < apis.length; i++) {
- const type = _global[apis[i]];
- apiTypes.push(type && type.prototype);
- }
- // vh is validateHandler to check event handler
- // is valid or not(for security check)
- api.patchEventTarget(_global, api, apiTypes, {
- vh: checkIEAndCrossContext,
- transferEventName: (eventName) => {
- const pointerEventName = pointerEventsMap[eventName];
- return pointerEventName || eventName;
- }
- });
- Zone[api.symbol('patchEventTarget')] = !!_global[EVENT_TARGET];
- return true;
- }
- // we have to patch the instance since the proto is non-configurable
- function apply(api, _global) {
- const { ADD_EVENT_LISTENER_STR, REMOVE_EVENT_LISTENER_STR } = api.getGlobalObjects();
- const WS = _global.WebSocket;
- // On Safari window.EventTarget doesn't exist so need to patch WS add/removeEventListener
- // On older Chrome, no need since EventTarget was already patched
- if (!_global.EventTarget) {
- api.patchEventTarget(_global, api, [WS.prototype]);
- }
- _global.WebSocket = function (x, y) {
- const socket = arguments.length > 1 ? new WS(x, y) : new WS(x);
- let proxySocket;
- let proxySocketProto;
- // Safari 7.0 has non-configurable own 'onmessage' and friends properties on the socket instance
- const onmessageDesc = api.ObjectGetOwnPropertyDescriptor(socket, 'onmessage');
- if (onmessageDesc && onmessageDesc.configurable === false) {
- proxySocket = api.ObjectCreate(socket);
- // socket have own property descriptor 'onopen', 'onmessage', 'onclose', 'onerror'
- // but proxySocket not, so we will keep socket as prototype and pass it to
- // patchOnProperties method
- proxySocketProto = socket;
- [ADD_EVENT_LISTENER_STR, REMOVE_EVENT_LISTENER_STR, 'send', 'close'].forEach(function (propName) {
- proxySocket[propName] = function () {
- const args = api.ArraySlice.call(arguments);
- if (propName === ADD_EVENT_LISTENER_STR || propName === REMOVE_EVENT_LISTENER_STR) {
- const eventName = args.length > 0 ? args[0] : undefined;
- if (eventName) {
- const propertySymbol = Zone.__symbol__('ON_PROPERTY' + eventName);
- socket[propertySymbol] = proxySocket[propertySymbol];
- }
- }
- return socket[propName].apply(socket, args);
- };
- });
- }
- else {
- // we can patch the real socket
- proxySocket = socket;
- }
- api.patchOnProperties(proxySocket, ['close', 'error', 'message', 'open'], proxySocketProto);
- return proxySocket;
- };
- const globalWebSocket = _global['WebSocket'];
- for (const prop in WS) {
- globalWebSocket[prop] = WS[prop];
- }
- }
- /**
- * @fileoverview
- * @suppress {globalThis}
- */
- function propertyDescriptorLegacyPatch(api, _global) {
- const { isNode, isMix } = api.getGlobalObjects();
- if (isNode && !isMix) {
- return;
- }
- if (!canPatchViaPropertyDescriptor(api, _global)) {
- const supportsWebSocket = typeof WebSocket !== 'undefined';
- // Safari, Android browsers (Jelly Bean)
- patchViaCapturingAllTheEvents(api);
- api.patchClass('XMLHttpRequest');
- if (supportsWebSocket) {
- apply(api, _global);
- }
- Zone[api.symbol('patchEvents')] = true;
- }
- }
- function canPatchViaPropertyDescriptor(api, _global) {
- const { isBrowser, isMix } = api.getGlobalObjects();
- if ((isBrowser || isMix) &&
- !api.ObjectGetOwnPropertyDescriptor(HTMLElement.prototype, 'onclick') &&
- typeof Element !== 'undefined') {
- // WebKit https://bugs.webkit.org/show_bug.cgi?id=134364
- // IDL interface attributes are not configurable
- const desc = api.ObjectGetOwnPropertyDescriptor(Element.prototype, 'onclick');
- if (desc && !desc.configurable)
- return false;
- // try to use onclick to detect whether we can patch via propertyDescriptor
- // because XMLHttpRequest is not available in service worker
- if (desc) {
- api.ObjectDefineProperty(Element.prototype, 'onclick', {
- enumerable: true,
- configurable: true,
- get: function () {
- return true;
- }
- });
- const div = document.createElement('div');
- const result = !!div.onclick;
- api.ObjectDefineProperty(Element.prototype, 'onclick', desc);
- return result;
- }
- }
- const XMLHttpRequest = _global['XMLHttpRequest'];
- if (!XMLHttpRequest) {
- // XMLHttpRequest is not available in service worker
- return false;
- }
- const ON_READY_STATE_CHANGE = 'onreadystatechange';
- const XMLHttpRequestPrototype = XMLHttpRequest.prototype;
- const xhrDesc = api.ObjectGetOwnPropertyDescriptor(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE);
- // add enumerable and configurable here because in opera
- // by default XMLHttpRequest.prototype.onreadystatechange is undefined
- // without adding enumerable and configurable will cause onreadystatechange
- // non-configurable
- // and if XMLHttpRequest.prototype.onreadystatechange is undefined,
- // we should set a real desc instead a fake one
- if (xhrDesc) {
- api.ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, {
- enumerable: true,
- configurable: true,
- get: function () {
- return true;
- }
- });
- const req = new XMLHttpRequest();
- const result = !!req.onreadystatechange;
- // restore original desc
- api.ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, xhrDesc || {});
- return result;
- }
- else {
- const SYMBOL_FAKE_ONREADYSTATECHANGE = api.symbol('fake');
- api.ObjectDefineProperty(XMLHttpRequestPrototype, ON_READY_STATE_CHANGE, {
- enumerable: true,
- configurable: true,
- get: function () {
- return this[SYMBOL_FAKE_ONREADYSTATECHANGE];
- },
- set: function (value) {
- this[SYMBOL_FAKE_ONREADYSTATECHANGE] = value;
- }
- });
- const req = new XMLHttpRequest();
- const detectFunc = () => { };
- req.onreadystatechange = detectFunc;
- const result = req[SYMBOL_FAKE_ONREADYSTATECHANGE] === detectFunc;
- req.onreadystatechange = null;
- return result;
- }
- }
- const globalEventHandlersEventNames = [
- 'abort',
- 'animationcancel',
- 'animationend',
- 'animationiteration',
- 'auxclick',
- 'beforeinput',
- 'blur',
- 'cancel',
- 'canplay',
- 'canplaythrough',
- 'change',
- 'compositionstart',
- 'compositionupdate',
- 'compositionend',
- 'cuechange',
- 'click',
- 'close',
- 'contextmenu',
- 'curechange',
- 'dblclick',
- 'drag',
- 'dragend',
- 'dragenter',
- 'dragexit',
- 'dragleave',
- 'dragover',
- 'drop',
- 'durationchange',
- 'emptied',
- 'ended',
- 'error',
- 'focus',
- 'focusin',
- 'focusout',
- 'gotpointercapture',
- 'input',
- 'invalid',
- 'keydown',
- 'keypress',
- 'keyup',
- 'load',
- 'loadstart',
- 'loadeddata',
- 'loadedmetadata',
- 'lostpointercapture',
- 'mousedown',
- 'mouseenter',
- 'mouseleave',
- 'mousemove',
- 'mouseout',
- 'mouseover',
- 'mouseup',
- 'mousewheel',
- 'orientationchange',
- 'pause',
- 'play',
- 'playing',
- 'pointercancel',
- 'pointerdown',
- 'pointerenter',
- 'pointerleave',
- 'pointerlockchange',
- 'mozpointerlockchange',
- 'webkitpointerlockerchange',
- 'pointerlockerror',
- 'mozpointerlockerror',
- 'webkitpointerlockerror',
- 'pointermove',
- 'pointout',
- 'pointerover',
- 'pointerup',
- 'progress',
- 'ratechange',
- 'reset',
- 'resize',
- 'scroll',
- 'seeked',
- 'seeking',
- 'select',
- 'selectionchange',
- 'selectstart',
- 'show',
- 'sort',
- 'stalled',
- 'submit',
- 'suspend',
- 'timeupdate',
- 'volumechange',
- 'touchcancel',
- 'touchmove',
- 'touchstart',
- 'touchend',
- 'transitioncancel',
- 'transitionend',
- 'waiting',
- 'wheel'
- ];
- const documentEventNames = [
- 'afterscriptexecute', 'beforescriptexecute', 'DOMContentLoaded', 'freeze', 'fullscreenchange',
- 'mozfullscreenchange', 'webkitfullscreenchange', 'msfullscreenchange', 'fullscreenerror',
- 'mozfullscreenerror', 'webkitfullscreenerror', 'msfullscreenerror', 'readystatechange',
- 'visibilitychange', 'resume'
- ];
- const windowEventNames = [
- 'absolutedeviceorientation',
- 'afterinput',
- 'afterprint',
- 'appinstalled',
- 'beforeinstallprompt',
- 'beforeprint',
- 'beforeunload',
- 'devicelight',
- 'devicemotion',
- 'deviceorientation',
- 'deviceorientationabsolute',
- 'deviceproximity',
- 'hashchange',
- 'languagechange',
- 'message',
- 'mozbeforepaint',
- 'offline',
- 'online',
- 'paint',
- 'pageshow',
- 'pagehide',
- 'popstate',
- 'rejectionhandled',
- 'storage',
- 'unhandledrejection',
- 'unload',
- 'userproximity',
- 'vrdisplayconnected',
- 'vrdisplaydisconnected',
- 'vrdisplaypresentchange'
- ];
- const htmlElementEventNames = [
- 'beforecopy', 'beforecut', 'beforepaste', 'copy', 'cut', 'paste', 'dragstart', 'loadend',
- 'animationstart', 'search', 'transitionrun', 'transitionstart', 'webkitanimationend',
- 'webkitanimationiteration', 'webkitanimationstart', 'webkittransitionend'
- ];
- const ieElementEventNames = [
- 'activate',
- 'afterupdate',
- 'ariarequest',
- 'beforeactivate',
- 'beforedeactivate',
- 'beforeeditfocus',
- 'beforeupdate',
- 'cellchange',
- 'controlselect',
- 'dataavailable',
- 'datasetchanged',
- 'datasetcomplete',
- 'errorupdate',
- 'filterchange',
- 'layoutcomplete',
- 'losecapture',
- 'move',
- 'moveend',
- 'movestart',
- 'propertychange',
- 'resizeend',
- 'resizestart',
- 'rowenter',
- 'rowexit',
- 'rowsdelete',
- 'rowsinserted',
- 'command',
- 'compassneedscalibration',
- 'deactivate',
- 'help',
- 'mscontentzoom',
- 'msmanipulationstatechanged',
- 'msgesturechange',
- 'msgesturedoubletap',
- 'msgestureend',
- 'msgesturehold',
- 'msgesturestart',
- 'msgesturetap',
- 'msgotpointercapture',
- 'msinertiastart',
- 'mslostpointercapture',
- 'mspointercancel',
- 'mspointerdown',
- 'mspointerenter',
- 'mspointerhover',
- 'mspointerleave',
- 'mspointermove',
- 'mspointerout',
- 'mspointerover',
- 'mspointerup',
- 'pointerout',
- 'mssitemodejumplistitemremoved',
- 'msthumbnailclick',
- 'stop',
- 'storagecommit'
- ];
- const webglEventNames = ['webglcontextrestored', 'webglcontextlost', 'webglcontextcreationerror'];
- const formEventNames = ['autocomplete', 'autocompleteerror'];
- const detailEventNames = ['toggle'];
- const eventNames = [
- ...globalEventHandlersEventNames, ...webglEventNames, ...formEventNames, ...detailEventNames,
- ...documentEventNames, ...windowEventNames, ...htmlElementEventNames, ...ieElementEventNames
- ];
- // Whenever any eventListener fires, we check the eventListener target and all parents
- // for `onwhatever` properties and replace them with zone-bound functions
- // - Chrome (for now)
- function patchViaCapturingAllTheEvents(api) {
- const unboundKey = api.symbol('unbound');
- for (let i = 0; i < eventNames.length; i++) {
- const property = eventNames[i];
- const onproperty = 'on' + property;
- self.addEventListener(property, function (event) {
- let elt = event.target, bound, source;
- if (elt) {
- source = elt.constructor['name'] + '.' + onproperty;
- }
- else {
- source = 'unknown.' + onproperty;
- }
- while (elt) {
- if (elt[onproperty] && !elt[onproperty][unboundKey]) {
- bound = api.wrapWithCurrentZone(elt[onproperty], source);
- bound[unboundKey] = elt[onproperty];
- elt[onproperty] = bound;
- }
- elt = elt.parentElement;
- }
- }, true);
- }
- }
- function registerElementPatch(_global, api) {
- const { isBrowser, isMix } = api.getGlobalObjects();
- if ((!isBrowser && !isMix) || !('registerElement' in _global.document)) {
- return;
- }
- const callbacks = ['createdCallback', 'attachedCallback', 'detachedCallback', 'attributeChangedCallback'];
- api.patchCallbacks(api, document, 'Document', 'registerElement', callbacks);
- }
- /**
- * @fileoverview
- * @suppress {missingRequire}
- */
- (function (_global) {
- const symbolPrefix = _global['__Zone_symbol_prefix'] || '__zone_symbol__';
- function __symbol__(name) {
- return symbolPrefix + name;
- }
- _global[__symbol__('legacyPatch')] = function () {
- const Zone = _global['Zone'];
- Zone.__load_patch('defineProperty', (global, Zone, api) => {
- api._redefineProperty = _redefineProperty;
- propertyPatch();
- });
- Zone.__load_patch('registerElement', (global, Zone, api) => {
- registerElementPatch(global, api);
- });
- Zone.__load_patch('EventTargetLegacy', (global, Zone, api) => {
- eventTargetLegacyPatch(global, api);
- propertyDescriptorLegacyPatch(api, global);
- });
- };
- })(typeof window !== 'undefined' ?
- window :
- typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {});
|