Skip to content

Commit 9d6bd10

Browse files
committed
events: add jsdoc details for Event and EventTarget
Signed-off-by: James M Snell <[email protected]> PR-URL: #41274 Reviewed-By: Antoine du Hamel <[email protected]> Reviewed-By: Benjamin Gruenbaum <[email protected]> Reviewed-By: Adrian Estrada <[email protected]>
1 parent 4069e7e commit 9d6bd10

File tree

1 file changed

+127
-1
lines changed

1 file changed

+127
-1
lines changed

lib/internal/event_target.js

+127-1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,14 @@ function isEvent(value) {
8787
}
8888

8989
class Event {
90+
/**
91+
* @param {string} type
92+
* @param {{
93+
* bubbles?: boolean,
94+
* cancelable?: boolean,
95+
* composed?: boolean,
96+
* }} [options]
97+
*/
9098
constructor(type, options = null) {
9199
if (arguments.length === 0)
92100
throw new ERR_MISSING_ARGS('type');
@@ -146,42 +154,63 @@ class Event {
146154
this[kDefaultPrevented] = true;
147155
}
148156

157+
/**
158+
* @type {EventTarget}
159+
*/
149160
get target() {
150161
if (!isEvent(this))
151162
throw new ERR_INVALID_THIS('Event');
152163
return this[kTarget];
153164
}
154165

166+
/**
167+
* @type {EventTarget}
168+
*/
155169
get currentTarget() {
156170
if (!isEvent(this))
157171
throw new ERR_INVALID_THIS('Event');
158172
return this[kTarget];
159173
}
160174

175+
/**
176+
* @type {EventTarget}
177+
*/
161178
get srcElement() {
162179
if (!isEvent(this))
163180
throw new ERR_INVALID_THIS('Event');
164181
return this[kTarget];
165182
}
166183

184+
/**
185+
* @type {string}
186+
*/
167187
get type() {
168188
if (!isEvent(this))
169189
throw new ERR_INVALID_THIS('Event');
170190
return this[kType];
171191
}
172192

193+
/**
194+
* @type {boolean}
195+
*/
173196
get cancelable() {
174197
if (!isEvent(this))
175198
throw new ERR_INVALID_THIS('Event');
176199
return this[kCancelable];
177200
}
178201

202+
/**
203+
* @type {boolean}
204+
*/
179205
get defaultPrevented() {
180206
if (!isEvent(this))
181207
throw new ERR_INVALID_THIS('Event');
182208
return this[kCancelable] && this[kDefaultPrevented];
183209
}
184210

211+
/**
212+
* @type {number}
213+
*/
185214
get timeStamp() {
186215
if (!isEvent(this))
187216
throw new ERR_INVALID_THIS('Event');
@@ -192,43 +221,63 @@ class Event {
192221
// The following are non-op and unused properties/methods from Web API Event.
193222
// These are not supported in Node.js and are provided purely for
194223
// API completeness.
195-
224+
/**
225+
* @returns {EventTarget[]}
226+
*/
196227
composedPath() {
197228
if (!isEvent(this))
198229
throw new ERR_INVALID_THIS('Event');
199230
return this[kIsBeingDispatched] ? [this[kTarget]] : [];
200231
}
201232

233+
/**
234+
* @type {boolean}
235+
*/
202236
get returnValue() {
203237
if (!isEvent(this))
204238
throw new ERR_INVALID_THIS('Event');
205239
return !this.defaultPrevented;
206240
}
207241

242+
/**
243+
* @type {boolean}
244+
*/
208245
get bubbles() {
209246
if (!isEvent(this))
210247
throw new ERR_INVALID_THIS('Event');
211248
return this[kBubbles];
212249
}
213250

251+
/**
252+
* @type {boolean}
253+
*/
214254
get composed() {
215255
if (!isEvent(this))
216256
throw new ERR_INVALID_THIS('Event');
217257
return this[kComposed];
218258
}
219259

260+
/**
261+
* @type {number}
262+
*/
220263
get eventPhase() {
221264
if (!isEvent(this))
222265
throw new ERR_INVALID_THIS('Event');
223266
return this[kIsBeingDispatched] ? Event.AT_TARGET : Event.NONE;
224267
}
225268

269+
/**
270+
* @type {boolean}
271+
*/
226272
get cancelBubble() {
227273
if (!isEvent(this))
228274
throw new ERR_INVALID_THIS('Event');
229275
return this[kPropagationStopped];
230276
}
231277

278+
/**
279+
* @type {boolean}
280+
*/
232281
set cancelBubble(value) {
233282
if (!isEvent(this))
234283
throw new ERR_INVALID_THIS('Event');
@@ -391,6 +440,19 @@ class EventTarget {
391440
}
392441
[kRemoveListener](size, type, listener, capture) {}
393442

443+
/**
444+
* @callback EventTargetCallback
445+
* @param {Event} event
446+
* @typedef {{ handleEvent: EventTargetCallback }} EventListener
447+
* @param {string} type
448+
* @param {EventTargetCallback|EventListener} listener
449+
* @param {{
450+
* capture?: boolean,
451+
* once?: boolean,
452+
* passive?: boolean,
453+
* signal?: AbortSignal
454+
* }} [options]
455+
*/
394456
addEventListener(type, listener, options = {}) {
395457
if (!isEventTarget(this))
396458
throw new ERR_INVALID_THIS('EventTarget');
@@ -471,6 +533,13 @@ class EventTarget {
471533
this[kNewListener](root.size, type, listener, once, capture, passive, weak);
472534
}
473535

536+
/**
537+
* @param {string} type
538+
* @param {EventTargetCallback|EventListener} listener
539+
* @param {{
540+
* capture?: boolean,
541+
* }} [options]
542+
*/
474543
removeEventListener(type, listener, options = {}) {
475544
if (!isEventTarget(this))
476545
throw new ERR_INVALID_THIS('EventTarget');
@@ -498,6 +567,9 @@ class EventTarget {
498567
}
499568
}
500569

570+
/**
571+
* @param {Event} event
572+
*/
501573
dispatchEvent(event) {
502574
if (!isEventTarget(this))
503575
throw new ERR_INVALID_THIS('EventTarget');
@@ -627,58 +699,103 @@ class NodeEventTarget extends EventTarget {
627699
initNodeEventTarget(this);
628700
}
629701

702+
/**
703+
* @param {number} n
704+
*/
630705
setMaxListeners(n) {
631706
if (!isNodeEventTarget(this))
632707
throw new ERR_INVALID_THIS('NodeEventTarget');
633708
EventEmitter.setMaxListeners(n, this);
634709
}
635710

711+
/**
712+
* @returns {number}
713+
*/
636714
getMaxListeners() {
637715
if (!isNodeEventTarget(this))
638716
throw new ERR_INVALID_THIS('NodeEventTarget');
639717
return this[kMaxEventTargetListeners];
640718
}
641719

720+
/**
721+
* @returns {string[]}
722+
*/
642723
eventNames() {
643724
if (!isNodeEventTarget(this))
644725
throw new ERR_INVALID_THIS('NodeEventTarget');
645726
return ArrayFrom(this[kEvents].keys());
646727
}
647728

729+
/**
730+
* @param {string} [type]
731+
* @returns {number}
732+
*/
648733
listenerCount(type) {
649734
if (!isNodeEventTarget(this))
650735
throw new ERR_INVALID_THIS('NodeEventTarget');
651736
const root = this[kEvents].get(String(type));
652737
return root !== undefined ? root.size : 0;
653738
}
654739

740+
/**
741+
* @param {string} type
742+
* @param {EventTargetCallback|EventListener} listener
743+
* @param {{
744+
* capture?: boolean,
745+
* }} [options]
746+
* @returns {NodeEventTarget}
747+
*/
655748
off(type, listener, options) {
656749
if (!isNodeEventTarget(this))
657750
throw new ERR_INVALID_THIS('NodeEventTarget');
658751
this.removeEventListener(type, listener, options);
659752
return this;
660753
}
661754

755+
/**
756+
* @param {string} type
757+
* @param {EventTargetCallback|EventListener} listener
758+
* @param {{
759+
* capture?: boolean,
760+
* }} [options]
761+
* @returns {NodeEventTarget}
762+
*/
662763
removeListener(type, listener, options) {
663764
if (!isNodeEventTarget(this))
664765
throw new ERR_INVALID_THIS('NodeEventTarget');
665766
this.removeEventListener(type, listener, options);
666767
return this;
667768
}
668769

770+
/**
771+
* @param {string} type
772+
* @param {EventTargetCallback|EventListener} listener
773+
* @returns {NodeEventTarget}
774+
*/
669775
on(type, listener) {
670776
if (!isNodeEventTarget(this))
671777
throw new ERR_INVALID_THIS('NodeEventTarget');
672778
this.addEventListener(type, listener, { [kIsNodeStyleListener]: true });
673779
return this;
674780
}
675781

782+
/**
783+
* @param {string} type
784+
* @param {EventTargetCallback|EventListener} listener
785+
* @returns {NodeEventTarget}
786+
*/
676787
addListener(type, listener) {
677788
if (!isNodeEventTarget(this))
678789
throw new ERR_INVALID_THIS('NodeEventTarget');
679790
this.addEventListener(type, listener, { [kIsNodeStyleListener]: true });
680791
return this;
681792
}
793+
794+
/**
795+
* @param {string} type
796+
* @param {any} arg
797+
* @returns {boolean}
798+
*/
682799
emit(type, arg) {
683800
if (!isNodeEventTarget(this))
684801
throw new ERR_INVALID_THIS('NodeEventTarget');
@@ -688,6 +805,11 @@ class NodeEventTarget extends EventTarget {
688805
return hadListeners;
689806
}
690807

808+
/**
809+
* @param {string} type
810+
* @param {EventTargetCallback|EventListener} listener
811+
* @returns {NodeEventTarget}
812+
*/
691813
once(type, listener) {
692814
if (!isNodeEventTarget(this))
693815
throw new ERR_INVALID_THIS('NodeEventTarget');
@@ -696,6 +818,10 @@ class NodeEventTarget extends EventTarget {
696818
return this;
697819
}
698820

821+
/**
822+
* @param {string} type
823+
* @returns {NodeEventTarget}
824+
*/
699825
removeAllListeners(type) {
700826
if (!isNodeEventTarget(this))
701827
throw new ERR_INVALID_THIS('NodeEventTarget');

0 commit comments

Comments
 (0)