As part of FW-1265, the `zone.js` package is made compatible with the TypeScript `--strict` flag. Read more about the strict flag [here](https://www.typescriptlang.org/docs/handbook/compiler-options.html) PR Close #30993
		
			
				
	
	
		
			58 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
/**
 | 
						|
 * @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
 | 
						|
 */
 | 
						|
import {zoneSymbol} from './utils';
 | 
						|
 | 
						|
// override Function.prototype.toString to make zone.js patched function
 | 
						|
// look like native function
 | 
						|
Zone.__load_patch('toString', (global: any) => {
 | 
						|
  // patch Func.prototype.toString to let them look like native
 | 
						|
  const originalFunctionToString = Function.prototype.toString;
 | 
						|
 | 
						|
  const ORIGINAL_DELEGATE_SYMBOL = zoneSymbol('OriginalDelegate');
 | 
						|
  const PROMISE_SYMBOL = zoneSymbol('Promise');
 | 
						|
  const ERROR_SYMBOL = zoneSymbol('Error');
 | 
						|
  const newFunctionToString = function toString(this: unknown) {
 | 
						|
    if (typeof this === 'function') {
 | 
						|
      const originalDelegate = (this as any)[ORIGINAL_DELEGATE_SYMBOL];
 | 
						|
      if (originalDelegate) {
 | 
						|
        if (typeof originalDelegate === 'function') {
 | 
						|
          return originalFunctionToString.call(originalDelegate);
 | 
						|
        } else {
 | 
						|
          return Object.prototype.toString.call(originalDelegate);
 | 
						|
        }
 | 
						|
      }
 | 
						|
      if (this === Promise) {
 | 
						|
        const nativePromise = global[PROMISE_SYMBOL];
 | 
						|
        if (nativePromise) {
 | 
						|
          return originalFunctionToString.call(nativePromise);
 | 
						|
        }
 | 
						|
      }
 | 
						|
      if (this === Error) {
 | 
						|
        const nativeError = global[ERROR_SYMBOL];
 | 
						|
        if (nativeError) {
 | 
						|
          return originalFunctionToString.call(nativeError);
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
    return originalFunctionToString.call(this);
 | 
						|
  };
 | 
						|
  (newFunctionToString as any)[ORIGINAL_DELEGATE_SYMBOL] = originalFunctionToString;
 | 
						|
  Function.prototype.toString = newFunctionToString;
 | 
						|
 | 
						|
 | 
						|
  // patch Object.prototype.toString to let them look like native
 | 
						|
  const originalObjectToString = Object.prototype.toString;
 | 
						|
  const PROMISE_OBJECT_TO_STRING = '[object Promise]';
 | 
						|
  Object.prototype.toString = function() {
 | 
						|
    if (this instanceof Promise) {
 | 
						|
      return PROMISE_OBJECT_TO_STRING;
 | 
						|
    }
 | 
						|
    return originalObjectToString.call(this);
 | 
						|
  };
 | 
						|
});
 |