@@ -54,11 +54,13 @@ class ExtensionsManager extends EventEmitter {
5454 if ( typeof this . kites . options . discover === 'undefined' ) {
5555 this . kites . options . discover = [ false , 0 ] ;
5656 } else if ( typeof this . kites . options . discover === 'boolean' ) {
57- this . kites . options . discover = [ this . kites . options . discover , 2 , this . kites . options . appDirectory ] ;
57+ this . kites . options . discover = [ this . kites . options . discover , 3 , this . kites . options . appDirectory ] ;
5858 } else if ( typeof this . kites . options . discover === 'string' ) {
59- this . kites . options . discover = [ true , 2 , this . kites . options . discover ] ;
59+ this . kites . options . discover = [ true , 3 , this . kites . options . discover ] ;
6060 } else if ( this . kites . options . discover . length < 2 ) {
6161 throw new Error ( 'Discover options as array requires at least 2 elements! Example: [true, 2]' ) ;
62+ } else if ( this . kites . options . discover . length < 3 ) {
63+ this . kites . options . discover . push ( this . kites . options . appDirectory ) ;
6264 }
6365
6466 // autodiscover extensions
@@ -73,7 +75,7 @@ class ExtensionsManager extends EventEmitter {
7375 logger : this . kites . logger ,
7476 env : this . kites . options . env ,
7577 depth : depth ,
76- rootDirectory : directories ,
78+ directories : directories ,
7779 tempDirectory : this . kites . options . tempDirectory ,
7880 } ) ;
7981 this . kites . logger . debug ( 'Autodiscover ' + extensions . length + ' extensions!' ) ;
@@ -96,69 +98,70 @@ class ExtensionsManager extends EventEmitter {
9698 * Execute init extensions
9799 * @param extensions
98100 */
99- private useMany ( extensions : KitesExtension [ ] ) {
100- var promises = extensions . map ( ( e ) => this . useOne ( e ) ) ;
101- return Promise . all ( promises ) ;
101+ private async useMany ( extensions : KitesExtension [ ] ) {
102+ for ( const e of extensions ) {
103+ await this . useOne ( e ) ;
104+ }
102105 }
103106
104107 /**
105108 * Execute init one extension
106109 * @param extension
107110 */
108- private useOne ( extension : KitesExtension ) {
109- // extends options
110- // Review _.assign(), _.defaults(), or _.merge?
111- const xname = extension . name && extension . name . toLowerCase ( ) ;
112- const options = _ . assign <
113- ExtensionOptions ,
114- ExtensionOptions | undefined ,
115- ExtensionOptions | undefined > ( { } , extension . options , this . kites . options [ xname ] ) ;
116-
117- extension . options = options ;
118- this . kites . options [ xname ] = options ;
119-
120- if ( options . enabled === false ) {
121- this . kites . logger . debug ( `Extension ${ extension . name } is disabled, skipping` ) ;
122- return Promise . resolve ( ) ;
123- }
111+ private async useOne ( extension : KitesExtension ) {
112+ try {
124113
125- return Promise . resolve ( )
126- . then ( ( ) => {
127- if ( typeof extension . main === 'function' ) {
128- ( extension . main as Function ) . call ( this , this . kites , extension ) ;
129- return Promise . resolve ( ) ;
130- } else if ( typeof extension . main === 'string' && extension . directory ) {
131- // TODO: REMOVE, reason: Un-Support
132- let extPath = path . join ( extension . directory , extension . main ) ;
133- let extModule = require ( extPath ) ;
134- extModule . call ( this , this . kites , extension ) ;
135- return Promise . resolve ( ) ;
136- } else if ( typeof extension . init === 'function' ) {
137- ( extension . init as Function ) . call ( this , this . kites , extension ) ;
138- return Promise . resolve ( ) ;
139- } else {
140- return Promise . reject ( 'Invalid kites extension: ' + extension . name ) ;
141- }
142- } )
143- . then ( ( ) => {
144- if ( options . enabled !== false ) {
145- this . emit ( 'extension:registered' , extension ) ;
146- } else {
147- this . kites . logger . debug ( `Extension ${ extension . name } was disabled` ) ;
148- }
149- } )
150- . catch ( ( e : Error ) => {
151- let errorMsg ;
114+ // extends options
115+ // Review _.assign(), _.defaults(), or _.merge?
116+ const xname = extension . name && extension . name . toLowerCase ( ) ;
117+ const options = _ . assign <
118+ ExtensionOptions ,
119+ ExtensionOptions | undefined ,
120+ ExtensionOptions | undefined > ( { } , extension . options , this . kites . options [ xname ] ) ;
121+
122+ extension . options = options ;
123+ this . kites . options [ xname ] = options ;
152124
125+ if ( options . enabled === false ) {
153126 if ( ! extension . name ) {
154- errorMsg = `Error when loading anonymous extension ${ extension . directory != null ? ` at ${ extension . directory } ` : '' } ${ os . EOL } ${ e . stack } ` ;
127+ this . kites . logger . debug ( `Anonymous Extension ${ extension . directory != null ? ` at ${ extension . directory } ` : '' } is disabled, skipping` ) ;
155128 } else {
156- errorMsg = `Error when loading extension ${ extension . name } ${ os . EOL } ${ e . stack } ` ;
129+ this . kites . logger . debug ( `Extension ${ extension . name } is disabled, skipping` ) ;
157130 }
158-
159- this . kites . logger . error ( errorMsg ) ;
160- throw new Error ( errorMsg ) ;
161- } ) ;
131+ return ;
132+ }
133+
134+ if ( ! extension . name ) {
135+ this . kites . logger . info ( `Register extension: anonymous${ extension . directory != null ? ` at ${ extension . directory } ` : '' } ` ) ;
136+ } else {
137+ this . kites . logger . info ( `Register extension: ${ extension . name } ` ) ;
138+ }
139+
140+ if ( typeof extension . main === 'function' ) {
141+ // execute main function without await!
142+ ( extension . main as Function ) . call ( this , this . kites , extension ) ;
143+ } else if ( typeof extension . main === 'string' && extension . directory ) {
144+ const main = await import ( path . join ( extension . directory , extension . main ) ) ;
145+ // ES6 Module support
146+ // execute main function without await!
147+ ( main && main . default ) . call ( this , this . kites , extension ) ;
148+ } else {
149+ throw new Error ( 'Invalid kites extension: ' + extension . name + ' -> ' + JSON . stringify ( extension ) ) ;
150+ }
151+
152+ this . emit ( 'extension:registered' , extension ) ;
153+ } catch ( error ) {
154+ let errorMsg ;
155+
156+ if ( ! extension . name ) {
157+ errorMsg = `Error when loading anonymous extension ${ extension . directory != null ? ` at ${ extension . directory } ` : '' } ${ os . EOL } ${ error . stack } ` ;
158+ } else {
159+ errorMsg = `Error when loading extension ${ extension . name } ${ os . EOL } ${ error . stack } ` ;
160+ }
161+
162+ this . kites . logger . error ( errorMsg ) ;
163+ throw new Error ( errorMsg ) ;
164+ }
162165 }
163166
164167}
0 commit comments