@@ -7,6 +7,7 @@ import { Adapter } from 'js-data-adapter';
7
7
export class JsonApiAdapter extends HttpAdapter {
8
8
adapter : Adapter ;
9
9
private store : DataStore ;
10
+ private options : any ;
10
11
11
12
constructor ( options ?:any ) {
12
13
options = utils . deepMixIn ( {
@@ -19,32 +20,39 @@ export class JsonApiAdapter extends HttpAdapter{
19
20
throw new Error ( 'JsonApiAdapter needs to be given a store option.' )
20
21
}
21
22
22
- if ( options . serialize ) {
23
- options . beforeSerialize = options . serialize
24
- }
25
-
26
- if ( options . deserialize ) {
27
- options . afterDeserialize = options . deserialize
28
- }
29
-
30
23
var selfWrapper :any = { } ;
31
24
32
25
options . serialize = function ( wrapper :any ) :any {
33
- return function ( ) {
34
- return wrapper . self . jsonApiSerialize . apply ( wrapper . self , arguments ) ;
26
+ return function ( mapper :any , data :any , opts :any ) {
27
+ let
28
+ beforeSerialize = opts . beforeSerialize || mapper . beforeSerialize || wrapper . self . options . beforeSerialize ,
29
+ afterSerialize = opts . afterSerialize || mapper . afterSerialize || wrapper . self . options . afterSerialize ;
30
+
31
+ if ( beforeSerialize ) data = beforeSerialize . call ( wrapper . self , mapper , data , opts ) ;
32
+ data = wrapper . self . jsonApiSerialize . call ( wrapper . self , mapper , data , opts ) ;
33
+ if ( afterSerialize ) data = afterSerialize . call ( wrapper . self , mapper , data , opts ) ;
34
+ return data ;
35
35
}
36
36
} ( selfWrapper ) ;
37
37
38
38
options . deserialize = function ( wrapper :any ) :any {
39
- return function ( ) {
40
- return wrapper . self . jsonApiDeserialize . apply ( wrapper . self , arguments ) ;
39
+ return function ( mapper :any , res :any , opts :any ) {
40
+ let
41
+ beforeDeserialize = opts . beforeDeserialize || mapper . beforeDeserialize || wrapper . self . options . beforeDeserialize ,
42
+ afterDeserialize = opts . afterDeserialize || mapper . afterDeserialize || wrapper . self . options . afterDeserialize ;
43
+
44
+ if ( beforeDeserialize ) res = beforeDeserialize . call ( wrapper . self , mapper , res , opts ) ;
45
+ res = wrapper . self . jsonApiDeserialize . call ( wrapper . self , mapper , res , opts ) ;
46
+ if ( afterDeserialize ) res = afterDeserialize . call ( wrapper . self , mapper , res , opts ) ;
47
+ return res ;
41
48
}
42
49
} ( selfWrapper ) ;
43
50
44
51
super ( options ) ;
45
52
46
53
selfWrapper . self = this ;
47
54
this . store = options . store ;
55
+ this . options = options ;
48
56
}
49
57
50
58
private warn ( ...args :any [ ] ) {
@@ -218,16 +226,30 @@ export class JsonApiAdapter extends HttpAdapter{
218
226
return response ;
219
227
} }
220
228
229
+ private handleBeforeLifecycle ( opts ?:any ) : Promise < void > {
230
+ if ( opts && ( opts . serialize || opts . deserialize ) ) {
231
+ return Promise . reject ( new Error ( 'You can not use deserialize and serialize options with this adapter, you should instead provide an afterSerialize, a beforeSerialize, an afterDeserialize or a beforeDeserialize.' ) )
232
+ }
233
+
234
+ return Promise . resolve ( ) ;
235
+ }
236
+
221
237
public find ( mapper : Mapper , id : string | number , opts ?: any ) : Promise < any > {
222
- return super . find ( mapper , id , opts ) . then ( this . handleResponse ( opts ) )
238
+ return this . handleBeforeLifecycle ( opts ) . then ( ( ) => {
239
+ return HttpAdapter . prototype . find . call ( this , mapper , id , opts ) ;
240
+ } ) . then ( this . handleResponse ( opts ) ) ;
223
241
}
224
242
225
243
public findAll ( mapper : Mapper , query ?: any , opts ?: any ) : Promise < any > {
226
- return super . findAll ( mapper , query , opts ) . then ( this . handleResponse ( opts ) )
244
+ return this . handleBeforeLifecycle ( opts ) . then ( ( ) => {
245
+ return HttpAdapter . prototype . findAll . call ( this , mapper , query , opts ) ;
246
+ } ) . then ( this . handleResponse ( opts ) ) ;
227
247
}
228
248
229
249
public create ( mapper : Mapper , props : any , opts ?: any ) : Promise < any > {
230
- return super . create ( mapper , props , opts ) . then ( this . handleResponse ( opts ) )
250
+ return this . handleBeforeLifecycle ( opts ) . then ( ( ) => {
251
+ return HttpAdapter . prototype . create . call ( this , mapper , props , opts ) ;
252
+ } ) . then ( this . handleResponse ( opts ) )
231
253
}
232
254
233
255
public createMany ( mapper : Mapper , props : any , opts ?: any ) : Promise < any > {
@@ -238,7 +260,9 @@ export class JsonApiAdapter extends HttpAdapter{
238
260
// Ensure id is properly set
239
261
props [ mapper . idAttribute ] = id ;
240
262
241
- return super . update ( mapper , id , props , opts ) . then ( this . handleResponse ( opts ) )
263
+ return this . handleBeforeLifecycle ( opts ) . then ( ( ) => {
264
+ return HttpAdapter . prototype . update . call ( this , mapper , id , props , opts )
265
+ } ) . then ( this . handleResponse ( opts ) )
242
266
}
243
267
244
268
public updateAll ( mapper : Mapper , props : any , query : any , opts ?: any ) : Promise < any > {
@@ -250,7 +274,9 @@ export class JsonApiAdapter extends HttpAdapter{
250
274
}
251
275
252
276
public destroy ( mapper : Mapper , id : string | number , opts ?: any ) : Promise < any > {
253
- return super . destroy ( mapper , id , opts ) . then ( this . handleResponse ( opts ) )
277
+ return this . handleBeforeLifecycle ( opts ) . then ( ( ) => {
278
+ return HttpAdapter . prototype . destroy . call ( this , mapper , id , opts ) ;
279
+ } ) . then ( this . handleResponse ( opts ) )
254
280
}
255
281
256
282
public destroyAll ( mapper : Mapper , query : any , opts ?: any ) : Promise < any > {
0 commit comments