@@ -610,10 +610,9 @@ function unregisterContextListeners() {
610610 * @private
611611 */
612612 function registerContextListeners ( ) {
613-
614- //description: change default max listeners (10) to 64 in order to avoid node.js message
615- // for reaching the maximum number of listeners
616- //author: k.barbounakis@gmail .com
613+ // unregister listeners
614+ unregisterContextListeners . call ( this ) ;
615+ // set max listeners
617616 if ( typeof this . setMaxListeners === 'function' ) {
618617 this . setMaxListeners ( 64 ) ;
619618 }
@@ -652,7 +651,7 @@ function unregisterContextListeners() {
652651 this . on ( 'before.save' , OnJsonAttribute . prototype . beforeSave ) ;
653652 //get module loader
654653 /**
655- * @type {ModuleLoader|* }
654+ * @type {ModuleLoaderStrategy }
656655 */
657656 var moduleLoader = this . context . getConfiguration ( ) . getStrategy ( ModuleLoaderStrategy ) ;
658657 //register configuration listeners
@@ -662,10 +661,25 @@ function unregisterContextListeners() {
662661 //get listener type (e.g. type: require('./custom-listener.js'))
663662 if ( listener . type && ! listener . disabled )
664663 {
664+ const [ listenerModule , listenerClassOrObject ] = listener . type . split ( '#' ) ;
665665 /**
666666 * @type {{beforeSave?:function,afterSave?:function,beforeRemove?:function,afterRemove?:function,beforeExecute?:function,afterExecute?:function,beforeUpgrade?:function,afterUpgrade?:function} }
667667 */
668- var dataEventListener = moduleLoader . require ( listener . type ) ;
668+ let dataEventListener ;
669+ if ( listenerClassOrObject ) {
670+ const module = moduleLoader . require ( listenerModule ) ;
671+ if ( Object . prototype . hasOwnProperty . call ( module , listenerClassOrObject ) === false ) {
672+ throw new DataError ( 'ERR_TYPE_NOENT' `The event listener type "${ listenerClassOrObject } " cannot be found in target module` , null , this . name ) ;
673+ }
674+ if ( isObjectDeep ( module [ listenerClassOrObject ] ) ) {
675+ dataEventListener = module [ listenerClassOrObject ] ;
676+ } else {
677+ const ListenerClass = module [ listenerClassOrObject ] ;
678+ dataEventListener = new ListenerClass ( ) ;
679+ }
680+ } else {
681+ dataEventListener = moduleLoader . require ( listener . type ) ;
682+ }
669683 if ( typeof dataEventListener . beforeUpgrade === 'function' )
670684 this . on ( 'before.upgrade' , dataEventListener . beforeUpgrade ) ;
671685 if ( typeof dataEventListener . beforeSave === 'function' )
0 commit comments