fix(zone.js): browser-legacy should not reference Zone (#32016)

PR Close #32016
This commit is contained in:
JiaLiPassion 2019-08-06 09:54:54 +09:00 committed by Kara Erickson
parent 48487cb70e
commit a91a55a6d2
4 changed files with 25 additions and 11 deletions

View File

@ -10,7 +10,6 @@ import {globalSources, patchEventPrototype, patchEventTarget, zoneSymbolEventNam
import {ADD_EVENT_LISTENER_STR, ArraySlice, FALSE_STR, ObjectCreate, ObjectDefineProperty, ObjectGetOwnPropertyDescriptor, REMOVE_EVENT_LISTENER_STR, TRUE_STR, ZONE_SYMBOL_PREFIX, attachOriginToPatched, bindArguments, isBrowser, isIEOrEdge, isMix, isNode, patchClass, patchMacroTask, patchMethod, patchOnProperties, wrapWithCurrentZone} from '../common/utils'; import {ADD_EVENT_LISTENER_STR, ArraySlice, FALSE_STR, ObjectCreate, ObjectDefineProperty, ObjectGetOwnPropertyDescriptor, REMOVE_EVENT_LISTENER_STR, TRUE_STR, ZONE_SYMBOL_PREFIX, attachOriginToPatched, bindArguments, isBrowser, isIEOrEdge, isMix, isNode, patchClass, patchMacroTask, patchMethod, patchOnProperties, wrapWithCurrentZone} from '../common/utils';
import {patchCallbacks} from './browser-util'; import {patchCallbacks} from './browser-util';
import {_redefineProperty} from './define-property';
import {eventNames, filterProperties} from './property-descriptor'; import {eventNames, filterProperties} from './property-descriptor';
Zone.__load_patch('util', (global: any, Zone: ZoneType, api: _ZonePrivate) => { Zone.__load_patch('util', (global: any, Zone: ZoneType, api: _ZonePrivate) => {
@ -44,7 +43,7 @@ Zone.__load_patch('util', (global: any, Zone: ZoneType, api: _ZonePrivate) => {
api.wrapWithCurrentZone = wrapWithCurrentZone; api.wrapWithCurrentZone = wrapWithCurrentZone;
api.filterProperties = filterProperties; api.filterProperties = filterProperties;
api.attachOriginToPatched = attachOriginToPatched; api.attachOriginToPatched = attachOriginToPatched;
api._redefineProperty = _redefineProperty; api._redefineProperty = Object.defineProperty;
api.patchCallbacks = patchCallbacks; api.patchCallbacks = patchCallbacks;
api.getGlobalObjects = () => api.getGlobalObjects = () =>
({globalSources, zoneSymbolEventNames, eventNames, isBrowser, isMix, isNode, TRUE_STR, ({globalSources, zoneSymbolEventNames, eventNames, isBrowser, isMix, isNode, TRUE_STR,

View File

@ -10,15 +10,20 @@
* @suppress {missingRequire} * @suppress {missingRequire}
*/ */
import {propertyPatch} from './define-property'; import {_redefineProperty, propertyPatch} from './define-property';
import {eventTargetLegacyPatch} from './event-target-legacy'; import {eventTargetLegacyPatch} from './event-target-legacy';
import {propertyDescriptorLegacyPatch} from './property-descriptor-legacy'; import {propertyDescriptorLegacyPatch} from './property-descriptor-legacy';
import {registerElementPatch} from './register-element'; import {registerElementPatch} from './register-element';
(function(_global: any) { (function(_global: any) {
_global[Zone.__symbol__('legacyPatch')] = function() { const symbolPrefix = _global['__Zone_symbol_prefix'] || '__zone_symbol__';
function __symbol__(name: string) { return symbolPrefix + name; }
_global[__symbol__('legacyPatch')] = function() {
const Zone = _global['Zone']; const Zone = _global['Zone'];
Zone.__load_patch('defineProperty', () => { propertyPatch(); }); Zone.__load_patch('defineProperty', (global: any, Zone: ZoneType, api: _ZonePrivate) => {
api._redefineProperty = _redefineProperty;
propertyPatch();
});
Zone.__load_patch('registerElement', (global: any, Zone: ZoneType, api: _ZonePrivate) => { Zone.__load_patch('registerElement', (global: any, Zone: ZoneType, api: _ZonePrivate) => {
registerElementPatch(global, api); registerElementPatch(global, api);
}); });

View File

@ -11,14 +11,19 @@
* things like redefining `createdCallback` on an element. * things like redefining `createdCallback` on an element.
*/ */
const zoneSymbol = Zone.__symbol__; let zoneSymbol: any;
const _defineProperty = (Object as any)[zoneSymbol('defineProperty')] = Object.defineProperty; let _defineProperty: any;
const _getOwnPropertyDescriptor = (Object as any)[zoneSymbol('getOwnPropertyDescriptor')] = let _getOwnPropertyDescriptor: any;
Object.getOwnPropertyDescriptor; let _create: any;
const _create = Object.create; let unconfigurablesKey: any;
const unconfigurablesKey = zoneSymbol('unconfigurables');
export function propertyPatch() { export function propertyPatch() {
zoneSymbol = Zone.__symbol__;
_defineProperty = (Object as any)[zoneSymbol('defineProperty')] = Object.defineProperty;
_getOwnPropertyDescriptor = (Object as any)[zoneSymbol('getOwnPropertyDescriptor')] =
Object.getOwnPropertyDescriptor;
_create = Object.create;
unconfigurablesKey = zoneSymbol('unconfigurables');
Object.defineProperty = function(obj: any, prop: string, desc: any) { Object.defineProperty = function(obj: any, prop: string, desc: any) {
if (isUnconfigurable(obj, prop)) { if (isUnconfigurable(obj, prop)) {
throw new TypeError('Cannot assign to read only property \'' + prop + '\' of ' + obj); throw new TypeError('Cannot assign to read only property \'' + prop + '\' of ' + obj);

View File

@ -235,6 +235,11 @@ karma_tests = {
"//packages/zone.js/dist:zone-evergreen-dist-dev-test", "//packages/zone.js/dist:zone-evergreen-dist-dev-test",
"//packages/zone.js/dist:zone-testing-dist-dev-test", "//packages/zone.js/dist:zone-testing-dist-dev-test",
], ],
"browser_legacy_test": [
"//packages/zone.js/dist:zone-legacy-dist-dev-test",
"//packages/zone.js/dist:zone-evergreen-dist-dev-test",
"//packages/zone.js/dist:zone-testing-dist-dev-test",
],
} }
karma_test( karma_test(