@@ -89,25 +89,29 @@ function withHooks (app: Application, service: Service<any>, methods: string[])
8989 hooksDecorator ( service , hookMap ) ;
9090}
9191
92- function mixinMethod ( this : any ) {
93- const service = this ;
94- const args = Array . from ( arguments ) ;
95-
96- const returnHook = args [ args . length - 1 ] === true || args [ args . length - 1 ] instanceof HookContext
97- ? args . pop ( ) : false ;
98-
99- const hookContext = returnHook instanceof HookContext ? returnHook : this . _super . createContext ( ) ;
100-
101- return this . _super . call ( service , ...args , hookContext )
102- . then ( ( ) => returnHook ? hookContext : hookContext . result )
103- // Handle errors
104- . catch ( ( ) => {
105- if ( typeof hookContext . error !== 'undefined' && typeof hookContext . result === 'undefined' ) {
106- return Promise . reject ( returnHook ? hookContext : hookContext . error ) ;
107- } else {
108- return returnHook ? hookContext : hookContext . result ;
109- }
110- } ) ;
92+ const mixinMethod = ( _super : any ) => {
93+ const result = function ( this : any ) {
94+ const service = this ;
95+ const args = Array . from ( arguments ) ;
96+
97+ const returnHook = args [ args . length - 1 ] === true || args [ args . length - 1 ] instanceof HookContext
98+ ? args . pop ( ) : false ;
99+
100+ const hookContext = returnHook instanceof HookContext ? returnHook : _super . createContext ( ) ;
101+
102+ return _super . call ( service , ...args , hookContext )
103+ . then ( ( ) => returnHook ? hookContext : hookContext . result )
104+ // Handle errors
105+ . catch ( ( ) => {
106+ if ( typeof hookContext . error !== 'undefined' && typeof hookContext . result === 'undefined' ) {
107+ return Promise . reject ( returnHook ? hookContext : hookContext . error ) ;
108+ } else {
109+ return returnHook ? hookContext : hookContext . result ;
110+ }
111+ } ) ;
112+ } ;
113+
114+ return Object . assign ( result , _super ) ;
111115}
112116
113117// A service mixin that adds `service.hooks()` method and functionality
@@ -116,7 +120,7 @@ const hookMixin = exports.hookMixin = function hookMixin (service: any) {
116120 return ;
117121 }
118122
119- service . methods = Object . getOwnPropertyNames ( service )
123+ service . methods = Object . getOwnPropertyNames ( Object . getPrototypeOf ( service ) )
120124 . filter ( key => typeof service [ key ] === 'function' && service [ key ] [ ACTIVATE_HOOKS ] )
121125 . reduce ( ( result , methodName ) => {
122126 result [ methodName ] = service [ methodName ] [ ACTIVATE_HOOKS ] ;
@@ -143,15 +147,15 @@ const hookMixin = exports.hookMixin = function hookMixin (service: any) {
143147 return mixin ;
144148 }
145149
146- mixin [ method ] = mixinMethod ;
150+ mixin [ method ] = mixinMethod ( service [ method ] ) ;
147151
148152 return mixin ;
149153 } , { } as any ) ;
150154
151155 // Add .hooks method and properties to the service
152156 enableHooks ( service , methodNames , app . hookTypes ) ;
153157
154- service . mixin ( mixin ) ;
158+ Object . assign ( service , mixin ) ;
155159} ;
156160
157161export default function ( ) {
0 commit comments