fix: create proper externs so that closure does not clobber e.g. `ng` for internal variables (#19423)

This commit is contained in:
Tobias Bosch 2017-09-26 15:02:33 -07:00 committed by Victor Berchet
parent 8a0e45826a
commit b21a1d1961
4 changed files with 57 additions and 4 deletions

View File

@ -0,0 +1,18 @@
/**
* @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
*
* @externs
*/
/**
* @suppress {duplicate}
*/
var ng;
/**
* @suppress {duplicate}
*/
var wtf;

View File

@ -21,6 +21,11 @@ const __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'unde
self instanceof WorkerGlobalScope && self; self instanceof WorkerGlobalScope && self;
const __global = typeof global !== 'undefined' && global; const __global = typeof global !== 'undefined' && global;
const _global: {[name: string]: any} = __window || __global || __self; const _global: {[name: string]: any} = __window || __global || __self;
/**
* Attention: whenever providing a new value, be sure to add an
* entry into the corresponding `....externs.js` file,
* so that closure won't use that global for its purposes.
*/
export {_global as global}; export {_global as global};
// When Symbol.iterator doesn't exist, retrieves the key used in es6-shim // When Symbol.iterator doesn't exist, retrieves the key used in es6-shim

View File

@ -6,7 +6,10 @@
* found in the LICENSE file at https://angular.io/license * found in the LICENSE file at https://angular.io/license
*/ */
import {Inject, Injectable, NgZone, ɵglobal as global} from '@angular/core'; import {Inject, Injectable, NgZone} from '@angular/core';
// Import zero symbols from zone.js. This causes the zone ambient type to be
// added to the type-checker, without emitting any runtime module load statement
import {} from 'zone.js';
import {DOCUMENT} from '../dom_tokens'; import {DOCUMENT} from '../dom_tokens';
@ -18,8 +21,8 @@ import {EventManagerPlugin} from './event_manager';
* efficient bookkeeping than Zone can, because we have additional information. This speeds up * efficient bookkeeping than Zone can, because we have additional information. This speeds up
* addEventListener by 3x. * addEventListener by 3x.
*/ */
const Zone = global['Zone']; const __symbol__ =
const __symbol__ = Zone && Zone['__symbol__'] || function<T>(v: T): T { (typeof Zone !== 'undefined') && (Zone as any)['__symbol__'] || function<T>(v: T): T {
return v; return v;
}; };
const ADD_EVENT_LISTENER: 'addEventListener' = __symbol__('addEventListener'); const ADD_EVENT_LISTENER: 'addEventListener' = __symbol__('addEventListener');
@ -32,7 +35,8 @@ const ANGULAR = 'ANGULAR';
const NATIVE_ADD_LISTENER = 'addEventListener'; const NATIVE_ADD_LISTENER = 'addEventListener';
const NATIVE_REMOVE_LISTENER = 'removeEventListener'; const NATIVE_REMOVE_LISTENER = 'removeEventListener';
const blackListedEvents: string[] = Zone && Zone[__symbol__('BLACK_LISTED_EVENTS')]; const blackListedEvents: string[] =
(typeof Zone !== 'undefined') && (Zone as any)[__symbol__('BLACK_LISTED_EVENTS')];
let blackListedMap: {[eventName: string]: string}; let blackListedMap: {[eventName: string]: string};
if (blackListedEvents) { if (blackListedEvents) {
blackListedMap = {}; blackListedMap = {};

View File

@ -0,0 +1,26 @@
/**
* @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
*
* @externs
*/
/**
* @suppress {duplicate}
*/
var getAngularTestability;
/**
* @suppress {duplicate}
*/
var getAllAngularTestabilities;
/**
* @suppress {duplicate}
*/
var getAllAngularRootElements;
/**
* @suppress {duplicate}
*/
var frameworkStabilizers;