/** * @license * Copyright Google Inc. 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 */ export function patchCallbacks( api: _ZonePrivate, target: any, targetName: string, method: string, callbacks: string[]) { const symbol = Zone.__symbol__(method); if (target[symbol]) { return; } const nativeDelegate = target[symbol] = target[method]; target[method] = function(name: any, opts: any, options?: any) { if (opts && opts.prototype) { callbacks.forEach(function(callback) { const source = `${targetName}.${method}::` + callback; const prototype = opts.prototype; if (prototype.hasOwnProperty(callback)) { const descriptor = api.ObjectGetOwnPropertyDescriptor(prototype, callback); if (descriptor && descriptor.value) { descriptor.value = api.wrapWithCurrentZone(descriptor.value, source); api._redefineProperty(opts.prototype, callback, descriptor); } else if (prototype[callback]) { prototype[callback] = api.wrapWithCurrentZone(prototype[callback], source); } } else if (prototype[callback]) { prototype[callback] = api.wrapWithCurrentZone(prototype[callback], source); } }); } return nativeDelegate.call(target, name, opts, options); }; api.attachOriginToPatched(target[method], nativeDelegate); }