@@ -13,6 +13,9 @@ import {
1313 DetailedFunctionType ,
1414 ElementDocumentationContainer ,
1515 DocumentationTag ,
16+ PropertyDocumentationBlock ,
17+ DetailedEventType ,
18+ DetailedEventReferenceType ,
1619} from '@electron/docs-parser' ;
1720
1821const modules : Record < string , string [ ] > = { } ;
@@ -100,16 +103,17 @@ export const generateModuleDeclaration = (
100103
101104 moduleEvent . parameters . forEach ( ( eventListenerArg , index ) => {
102105 let argString = '' ;
103- if ( eventListenerArg . description ) {
106+ const additionalTags = ( eventListenerArg as any ) . additionalTags || [ ] ;
107+ if ( eventListenerArg . description || additionalTags . length ) {
104108 if ( index === 0 ) argString += `\n${ indent } ` ;
105109 argString += utils
106- . wrapComment ( eventListenerArg . description )
110+ . wrapComment ( eventListenerArg . description , additionalTags )
107111 . map ( ( l , i ) => `${ l } \n${ indent } ` )
108112 . join ( '' ) ;
109113 }
110114
111115 let argType : string | null = null ;
112- const objectListenerArg = eventListenerArg as DetailedObjectType &
116+ const objectListenerArg = eventListenerArg as ( DetailedObjectType ) &
113117 DocumentationBlock &
114118 TypeInformation & { required : boolean } ;
115119 if (
@@ -127,6 +131,38 @@ export const generateModuleDeclaration = (
127131 ) ;
128132 }
129133
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+
130166 let newType = argType || utils . typify ( eventListenerArg ) ;
131167 const functionListenerArg = ( eventListenerArg as any ) as DetailedFunctionType &
132168 DocumentationBlock &
@@ -163,15 +199,15 @@ export const generateModuleDeclaration = (
163199 moduleAPI ,
164200 utils . wrapComment ( domEvent . description , domEvent . additionalTags ) ,
165201 ) ;
166- let eventType = 'Event ' ;
202+ let eventType = 'DOMEvent ' ;
167203
168204 if ( domEvent . parameters && domEvent . parameters . length ) {
169205 const fakeObject : any = {
170206 name : 'event' ,
171207 type : 'Object' ,
172208 collection : false ,
173209 properties : [ ] ,
174- extends : 'Event ' ,
210+ extends : 'DOMEvent ' ,
175211 } ;
176212
177213 domEvent . parameters . forEach ( ( eventListenerProp , index ) => {
@@ -365,6 +401,15 @@ export const generateModuleDeclaration = (
365401 : '' ;
366402 type = type || utils . typify ( paramType ) ;
367403
404+ if ( type === 'Function' ) {
405+ type = utils . genMethodString (
406+ DynamicParamInterfaces ,
407+ module ,
408+ p as any , // FIXME: <--
409+ undefined ,
410+ ) ;
411+ }
412+
368413 utils . extendArray ( moduleAPI , utils . wrapComment ( p . description , p . additionalTags ) ) ;
369414 if ( module . name === 'process' && p . name === 'versions' ) return ;
370415
0 commit comments