1
1
import { AsyncMiddleware , compose } from './compose.ts' ;
2
- import { convertOptions , HookContext , HookContextData , HookOptions , setManager , setMiddleware } from './base.ts' ;
2
+ import {
3
+ convertOptions ,
4
+ HookContext ,
5
+ HookContextData ,
6
+ HookOptions ,
7
+ setManager ,
8
+ setMiddleware
9
+ } from './base.ts' ;
3
10
import { copyFnProperties , copyProperties } from './utils.ts' ;
4
11
5
12
export function getOriginal ( fn : any ) : any {
@@ -23,7 +30,7 @@ export function functionHooks<F>(fn: F, managerOrMiddleware: HookOptions) {
23
30
// Assemble the hook chain
24
31
const hookChain : AsyncMiddleware [ ] = [
25
32
// Return `ctx.result` or the context
26
- ( ctx , next ) => next ( ) . then ( ( ) => returnContext ? ctx : ctx . result ) ,
33
+ ( ctx , next ) => next ( ) . then ( ( ) => ( returnContext ? ctx : ctx . result ) )
27
34
] ;
28
35
29
36
// Create the hook chain by calling the `collectMiddleware function
@@ -41,7 +48,7 @@ export function functionHooks<F>(fn: F, managerOrMiddleware: HookOptions) {
41
48
ctx . result = result ;
42
49
43
50
return next ( ) ;
44
- } ,
51
+ }
45
52
) ;
46
53
}
47
54
@@ -60,7 +67,7 @@ export function functionHooks<F>(fn: F, managerOrMiddleware: HookOptions) {
60
67
Context : manager . getContextClass ( ) ,
61
68
createContext : ( data : HookContextData = { } ) => {
62
69
return new wrapper . Context ( data ) ;
63
- } ,
70
+ }
64
71
} ) ;
65
72
}
66
73
@@ -90,10 +97,26 @@ export function objectHooks(obj: any, hooks: HookMap | AsyncMiddleware[]) {
90
97
}
91
98
92
99
export const hookDecorator = ( managerOrMiddleware ?: HookOptions ) => {
100
+ return ( target : any , context : DecoratorContext ) => {
101
+ const manager = convertOptions ( managerOrMiddleware ) ;
102
+
103
+ if ( context . kind === 'class' ) {
104
+ setManager ( target . prototype , manager ) ;
105
+ return target ;
106
+ } else if ( context . kind === 'method' ) {
107
+ const method = String ( context . name ) ;
108
+ return functionHooks ( target , manager . props ( { method } ) ) ;
109
+ }
110
+
111
+ throw new Error ( 'Can not apply hooks.' ) ;
112
+ } ;
113
+ } ;
114
+
115
+ export const legacyDecorator = ( managerOrMiddleware ?: HookOptions ) => {
93
116
const wrapper : any = (
94
117
_target : any ,
95
118
method : string ,
96
- descriptor : TypedPropertyDescriptor < any > ,
119
+ descriptor : TypedPropertyDescriptor < any >
97
120
) : TypedPropertyDescriptor < any > => {
98
121
const manager = convertOptions ( managerOrMiddleware ) ;
99
122
0 commit comments