Skip to content

Commit 4acb676

Browse files
JiaLiPassionmhevery
authored andcommitted
feat: add interface definitions which zone extends EventTarget (#35304)
Close #35173 PR Close #35304
1 parent df816c9 commit 4acb676

4 files changed

Lines changed: 87 additions & 30 deletions

File tree

packages/zone.js/dist/BUILD.bazel

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,27 @@ genrule(
1212
)
1313

1414
genrule(
15-
name = "zone_d_ts",
15+
name = "zone_js_d_ts",
1616
srcs = ["//packages/zone.js/lib:zone_d_ts"],
1717
outs = ["zone.js.d.ts"],
1818
cmd = "cp $< $@",
1919
)
2020

21+
genrule(
22+
name = "zone_extensions_d_ts",
23+
srcs = ["//packages/zone.js/lib:zone.api.extensions.ts"],
24+
outs = ["zone.api.extensions.ts"],
25+
cmd = "cp $< $@",
26+
)
27+
28+
filegroup(
29+
name = "zone_d_ts",
30+
srcs = [
31+
":zone_extensions_d_ts",
32+
":zone_js_d_ts",
33+
],
34+
)
35+
2136
zone_rollup_bundle(
2237
bundles = ES5_BUNDLES.items(),
2338
config_file = "//packages/zone.js:rollup-es5.config.js",
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* @license
3+
* Copyright Google Inc. All Rights Reserved.
4+
*
5+
* Use of this source code is governed by an MIT-style license that can be
6+
* found in the LICENSE file at https://angular.io/license
7+
*/
8+
9+
/**
10+
* Additional `EventTarget` methods added by `Zone.js`.
11+
*
12+
* 1. removeAllListeners, remove all event listeners of the given event name.
13+
* 2. eventListeners, get all event listeners of the given event name.
14+
*/
15+
interface EventTarget {
16+
/**
17+
*
18+
* Remove all event listeners by name for this event target.
19+
*
20+
* If the `eventName` is provided, will remove event listeners of that name.
21+
* If the `eventName` is not provided, will remove all event listeners associated with
22+
* `EventTarget`.
23+
*
24+
* @param eventName the name of the event, such as `click`. This parameter is optional.
25+
*/
26+
removeAllListeners(eventName?: string): void;
27+
/**
28+
*
29+
* Retrieve all event listeners by name.
30+
*
31+
* If the `eventName` is provided, will return an array of event handlers or event listener
32+
* objects of the given event.
33+
* If the `eventName` is not provided, will return all listeners.
34+
*
35+
* @param eventName the name of the event, such as click. This parameter is optional.
36+
*/
37+
eventListeners(eventName?: string): EventListenerOrEventListenerObject[];
38+
}

packages/zone.js/test/browser/browser.spec.ts

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1120,11 +1120,11 @@ describe('Zone', function() {
11201120
});
11211121

11221122
zone.run(() => { button.addEventListener('click', function() { logs.push('click'); }); });
1123-
let listeners = (button as any).eventListeners('click');
1123+
let listeners = button.eventListeners('click');
11241124
expect(listeners.length).toBe(1);
11251125
eventTask !.zone.cancelTask(eventTask !);
11261126

1127-
listeners = (button as any).eventListeners('click');
1127+
listeners = button.eventListeners('click');
11281128
button.dispatchEvent(clickEvent);
11291129
expect(logs.length).toBe(0);
11301130
expect(listeners.length).toBe(0);
@@ -1146,11 +1146,11 @@ describe('Zone', function() {
11461146
zone.run(() => {
11471147
button.addEventListener('click', function() { logs.push('click'); }, true);
11481148
});
1149-
let listeners = (button as any).eventListeners('click');
1149+
let listeners = button.eventListeners('click');
11501150
expect(listeners.length).toBe(1);
11511151
eventTask !.zone.cancelTask(eventTask !);
11521152

1153-
listeners = (button as any).eventListeners('click');
1153+
listeners = button.eventListeners('click');
11541154
button.dispatchEvent(clickEvent);
11551155
expect(logs.length).toBe(0);
11561156
expect(listeners.length).toBe(0);
@@ -1172,7 +1172,7 @@ describe('Zone', function() {
11721172
zone.run(
11731173
() => { button.addEventListener('click', function() { logs.push('click1'); }); });
11741174
button.addEventListener('click', function() { logs.push('click2'); });
1175-
let listeners = (button as any).eventListeners('click');
1175+
let listeners = button.eventListeners('click');
11761176
expect(listeners.length).toBe(2);
11771177

11781178
button.dispatchEvent(clickEvent);
@@ -1181,7 +1181,7 @@ describe('Zone', function() {
11811181
eventTask !.zone.cancelTask(eventTask !);
11821182
logs = [];
11831183

1184-
listeners = (button as any).eventListeners('click');
1184+
listeners = button.eventListeners('click');
11851185
button.dispatchEvent(clickEvent);
11861186
expect(logs.length).toBe(1);
11871187
expect(listeners.length).toBe(1);
@@ -1205,7 +1205,7 @@ describe('Zone', function() {
12051205
button.addEventListener('click', function() { logs.push('click1'); }, true);
12061206
});
12071207
button.addEventListener('click', function() { logs.push('click2'); }, true);
1208-
let listeners = (button as any).eventListeners('click');
1208+
let listeners = button.eventListeners('click');
12091209
expect(listeners.length).toBe(2);
12101210

12111211
button.dispatchEvent(clickEvent);
@@ -1214,7 +1214,7 @@ describe('Zone', function() {
12141214
eventTask !.zone.cancelTask(eventTask !);
12151215
logs = [];
12161216

1217-
listeners = (button as any).eventListeners('click');
1217+
listeners = button.eventListeners('click');
12181218
button.dispatchEvent(clickEvent);
12191219
expect(logs.length).toBe(1);
12201220
expect(listeners.length).toBe(1);
@@ -1238,7 +1238,7 @@ describe('Zone', function() {
12381238
button.addEventListener('click', function() { logs.push('click1'); }, true);
12391239
});
12401240
button.addEventListener('click', function() { logs.push('click2'); });
1241-
let listeners = (button as any).eventListeners('click');
1241+
let listeners = button.eventListeners('click');
12421242
expect(listeners.length).toBe(2);
12431243

12441244
button.dispatchEvent(clickEvent);
@@ -1247,7 +1247,7 @@ describe('Zone', function() {
12471247
eventTask !.zone.cancelTask(eventTask !);
12481248
logs = [];
12491249

1250-
listeners = (button as any).eventListeners('click');
1250+
listeners = button.eventListeners('click');
12511251
button.dispatchEvent(clickEvent);
12521252
expect(logs.length).toBe(1);
12531253
expect(listeners.length).toBe(1);
@@ -1789,7 +1789,7 @@ describe('Zone', function() {
17891789
function() {
17901790
let logs: string[] = [];
17911791
const listener1 = function() {
1792-
(button as any).removeAllListeners('click');
1792+
button.removeAllListeners('click');
17931793
logs.push('listener1');
17941794
};
17951795
const listener2 = function() { logs.push('listener2'); };
@@ -1812,7 +1812,7 @@ describe('Zone', function() {
18121812
function() {
18131813
let logs: string[] = [];
18141814
const listener1 = function() {
1815-
(button as any).removeAllListeners('click');
1815+
button.removeAllListeners('click');
18161816
logs.push('listener1');
18171817
};
18181818
const listener2 = function() { logs.push('listener2'); };
@@ -1836,7 +1836,7 @@ describe('Zone', function() {
18361836
let logs: string[] = [];
18371837
const listener1 = function() { logs.push('listener1'); };
18381838
const listener2 = function() {
1839-
(button as any).removeAllListeners('click');
1839+
button.removeAllListeners('click');
18401840
logs.push('listener2');
18411841
};
18421842
const listener3 = {handleEvent: function(event: Event) { logs.push('listener3'); }};
@@ -1859,7 +1859,7 @@ describe('Zone', function() {
18591859
let logs: string[] = [];
18601860
const listener1 = function() { logs.push('listener1'); };
18611861
const listener2 = function() {
1862-
(button as any).removeAllListeners('click');
1862+
button.removeAllListeners('click');
18631863
logs.push('listener2');
18641864
};
18651865
const listener3 = {handleEvent: function(event: Event) { logs.push('listener3'); }};
@@ -1885,7 +1885,7 @@ describe('Zone', function() {
18851885
const listener3 = {
18861886
handleEvent: function(event: Event) {
18871887
logs.push('listener3');
1888-
(button as any).removeAllListeners('click');
1888+
button.removeAllListeners('click');
18891889
}
18901890
};
18911891

@@ -1910,7 +1910,7 @@ describe('Zone', function() {
19101910
const listener3 = {
19111911
handleEvent: function(event: Event) {
19121912
logs.push('listener3');
1913-
(button as any).removeAllListeners('click');
1913+
button.removeAllListeners('click');
19141914
}
19151915
};
19161916

@@ -1939,7 +1939,7 @@ describe('Zone', function() {
19391939
button.addEventListener('click', listener3);
19401940
button.addEventListener('mouseover', listener4);
19411941

1942-
const listeners = (button as any).eventListeners('click');
1942+
const listeners = button.eventListeners('click');
19431943
expect(listeners.length).toBe(3);
19441944
expect(listeners).toEqual([listener1, listener2, listener3]);
19451945
button.removeEventListener('click', listener1);
@@ -1956,7 +1956,7 @@ describe('Zone', function() {
19561956
button.addEventListener('mouseover', listener2);
19571957
button.addEventListener('mousehover', listener3);
19581958

1959-
const listeners = (button as any).eventListeners();
1959+
const listeners = button.eventListeners();
19601960
expect(listeners.length).toBe(3);
19611961
expect(listeners).toEqual([listener1, listener2, listener3]);
19621962
button.removeEventListener('click', listener1);
@@ -1979,8 +1979,8 @@ describe('Zone', function() {
19791979
button.onmouseover = listener5;
19801980
expect((button as any)[Zone.__symbol__('ON_PROPERTYmouseover')]).toEqual(listener5);
19811981

1982-
(button as any).removeAllListeners('mouseover');
1983-
const listeners = (button as any).eventListeners('mouseover');
1982+
button.removeAllListeners('mouseover');
1983+
const listeners = button.eventListeners('mouseover');
19841984
expect(listeners.length).toBe(0);
19851985
expect((button as any)[Zone.__symbol__('ON_PROPERTYmouseover')]).toBeNull();
19861986
expect(!!button.onmouseover).toBeFalsy();
@@ -2010,8 +2010,8 @@ describe('Zone', function() {
20102010
button.addEventListener('mouseover', listener3, true);
20112011
button.addEventListener('click', listener4, true);
20122012

2013-
(button as any).removeAllListeners('mouseover');
2014-
const listeners = (button as any).eventListeners('mouseover');
2013+
button.removeAllListeners('mouseover');
2014+
const listeners = button.eventListeners('mouseover');
20152015
expect(listeners.length).toBe(0);
20162016

20172017
const mouseEvent = document.createEvent('Event');
@@ -2039,8 +2039,8 @@ describe('Zone', function() {
20392039
button.addEventListener('mouseover', listener3, true);
20402040
button.addEventListener('click', listener4, true);
20412041

2042-
(button as any).removeAllListeners('mouseover');
2043-
const listeners = (button as any).eventListeners('mouseove');
2042+
button.removeAllListeners('mouseover');
2043+
const listeners = button.eventListeners('mouseove');
20442044
expect(listeners.length).toBe(0);
20452045

20462046
const mouseEvent = document.createEvent('Event');
@@ -2070,8 +2070,8 @@ describe('Zone', function() {
20702070
button.onmouseover = listener5;
20712071
expect((button as any)[Zone.__symbol__('ON_PROPERTYmouseover')]).toEqual(listener5);
20722072

2073-
(button as any).removeAllListeners();
2074-
const listeners = (button as any).eventListeners('mouseover');
2073+
button.removeAllListeners();
2074+
const listeners = button.eventListeners('mouseover');
20752075
expect(listeners.length).toBe(0);
20762076
expect((button as any)[Zone.__symbol__('ON_PROPERTYmouseover')]).toBeNull();
20772077
expect(!!button.onmouseover).toBeFalsy();
@@ -2102,7 +2102,7 @@ describe('Zone', function() {
21022102
button.removeEventListener('mouseover', listener2);
21032103
button.removeEventListener('click', listener3);
21042104
button.removeEventListener('click', listener4);
2105-
const listeners = (button as any).eventListeners('mouseover');
2105+
const listeners = button.eventListeners('mouseover');
21062106
expect(listeners.length).toBe(0);
21072107

21082108
const mouseEvent = document.createEvent('Event');
@@ -2127,8 +2127,8 @@ describe('Zone', function() {
21272127
button.addEventListener('click', listener3);
21282128
(button as any)[Zone.__symbol__('addEventListener')]('click', listener4);
21292129

2130-
(button as any).removeAllListeners();
2131-
const listeners = (button as any).eventListeners('mouseover');
2130+
button.removeAllListeners();
2131+
const listeners = button.eventListeners('mouseover');
21322132
expect(listeners.length).toBe(0);
21332133

21342134
const mouseEvent = document.createEvent('Event');

packages/zone.js/test/npm_package/npm_package.spec.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ describe('Zone.js npm_package', () => {
3939
describe('typescript support', () => {
4040
it('should have an zone.js.d.ts file',
4141
() => { expect(shx.cat('zone.js.d.ts')).toContain('declare const'); });
42+
43+
it('should have an zone.api.extensions.ts file',
44+
() => { expect(shx.cat('zone.api.extensions.ts')).toContain('EventTarget'); });
4245
});
4346

4447
describe('closure', () => {
@@ -136,6 +139,7 @@ describe('Zone.js npm_package', () => {
136139
'zone-testing.min.js',
137140
'zone.js',
138141
'zone.js.d.ts',
142+
'zone.api.extensions.ts',
139143
'zone.min.js',
140144
].sort();
141145
expect(list.length).toBe(expected.length);

0 commit comments

Comments
 (0)