@@ -13,6 +13,9 @@ import {
13
13
DetailedFunctionType ,
14
14
ElementDocumentationContainer ,
15
15
DocumentationTag ,
16
+ PropertyDocumentationBlock ,
17
+ DetailedEventType ,
18
+ DetailedEventReferenceType ,
16
19
} from '@electron/docs-parser' ;
17
20
18
21
const modules : Record < string , string [ ] > = { } ;
@@ -100,16 +103,17 @@ export const generateModuleDeclaration = (
100
103
101
104
moduleEvent . parameters . forEach ( ( eventListenerArg , index ) => {
102
105
let argString = '' ;
103
- if ( eventListenerArg . description ) {
106
+ const additionalTags = ( eventListenerArg as any ) . additionalTags || [ ] ;
107
+ if ( eventListenerArg . description || additionalTags . length ) {
104
108
if ( index === 0 ) argString += `\n${ indent } ` ;
105
109
argString += utils
106
- . wrapComment ( eventListenerArg . description )
110
+ . wrapComment ( eventListenerArg . description , additionalTags )
107
111
. map ( ( l , i ) => `${ l } \n${ indent } ` )
108
112
. join ( '' ) ;
109
113
}
110
114
111
115
let argType : string | null = null ;
112
- const objectListenerArg = eventListenerArg as DetailedObjectType &
116
+ const objectListenerArg = eventListenerArg as ( DetailedObjectType ) &
113
117
DocumentationBlock &
114
118
TypeInformation & { required : boolean } ;
115
119
if (
@@ -127,6 +131,38 @@ export const generateModuleDeclaration = (
127
131
) ;
128
132
}
129
133
134
+ const eventGenericListenerArg = eventListenerArg as ( DetailedEventType ) &
135
+ DocumentationBlock &
136
+ TypeInformation & { required : boolean } ;
137
+ const eventReferenceListenerArg = eventListenerArg as ( DetailedEventReferenceType ) &
138
+ DocumentationBlock &
139
+ TypeInformation & { required : boolean } ;
140
+
141
+ if ( eventGenericListenerArg . type === 'Event' ) {
142
+ let eventParamsType = 'EmptyParams' ;
143
+ if (
144
+ eventGenericListenerArg . eventProperties &&
145
+ eventGenericListenerArg . eventProperties . length
146
+ ) {
147
+ const fakeObject : any = {
148
+ name : 'EventParams' ,
149
+ type : 'Object' ,
150
+ collection : false ,
151
+ properties : eventGenericListenerArg . eventProperties ,
152
+ } ;
153
+ eventParamsType = DynamicParamInterfaces . createParamInterface (
154
+ fakeObject ,
155
+ `${ _ . upperFirst ( _ . camelCase ( module . name ) ) } ${ _ . upperFirst (
156
+ _ . camelCase ( moduleEvent . name ) ,
157
+ ) } `,
158
+ ) ;
159
+ }
160
+ if ( eventReferenceListenerArg . eventPropertiesReference ) {
161
+ eventParamsType = utils . typify ( eventReferenceListenerArg . eventPropertiesReference ) ;
162
+ }
163
+ argType = `Event<${ eventParamsType } , Electron.${ _ . upperFirst ( module . name ) } >` ;
164
+ }
165
+
130
166
let newType = argType || utils . typify ( eventListenerArg ) ;
131
167
const functionListenerArg = ( eventListenerArg as any ) as DetailedFunctionType &
132
168
DocumentationBlock &
@@ -163,15 +199,15 @@ export const generateModuleDeclaration = (
163
199
moduleAPI ,
164
200
utils . wrapComment ( domEvent . description , domEvent . additionalTags ) ,
165
201
) ;
166
- let eventType = 'Event ' ;
202
+ let eventType = 'DOMEvent ' ;
167
203
168
204
if ( domEvent . parameters && domEvent . parameters . length ) {
169
205
const fakeObject : any = {
170
206
name : 'event' ,
171
207
type : 'Object' ,
172
208
collection : false ,
173
209
properties : [ ] ,
174
- extends : 'Event ' ,
210
+ extends : 'DOMEvent ' ,
175
211
} ;
176
212
177
213
domEvent . parameters . forEach ( ( eventListenerProp , index ) => {
@@ -365,6 +401,15 @@ export const generateModuleDeclaration = (
365
401
: '' ;
366
402
type = type || utils . typify ( paramType ) ;
367
403
404
+ if ( type === 'Function' ) {
405
+ type = utils . genMethodString (
406
+ DynamicParamInterfaces ,
407
+ module ,
408
+ p as any , // FIXME: <--
409
+ undefined ,
410
+ ) ;
411
+ }
412
+
368
413
utils . extendArray ( moduleAPI , utils . wrapComment ( p . description , p . additionalTags ) ) ;
369
414
if ( module . name === 'process' && p . name === 'versions' ) return ;
370
415
0 commit comments