@@ -4,42 +4,35 @@ const {
4
4
isStringOrObjectOrThrow
5
5
} = require ( "../../utils/fun.js" ) ;
6
6
7
- function JSONParser ( decorator ) {
8
- this . decorator = decorator ;
9
- }
10
-
11
7
const invalidPayloadTypeError =
12
8
new Error ( "invalid payload type, allowed are: string or object" ) ;
13
-
14
9
const nullOrIndefinedPayload =
15
10
new Error ( "null or undefined payload" ) ;
16
11
17
- // Function
18
12
const asJSON = ( v ) => ( isString ( v ) ? JSON . parse ( v ) : v ) ;
19
13
20
- // Level 0 of validation: is that string? is that JSON?
21
- function validateAndParse ( payload ) {
22
- const json =
23
- Array . of ( payload )
14
+ class JSONParser {
15
+ constructor ( decorator ) {
16
+ this . decorator = decorator ;
17
+ }
18
+
19
+ /**
20
+ * Parses the payload with an optional decorator
21
+ * @param {object|string } payload the JSON payload
22
+ * @return {object } the parsed JSON payload.
23
+ */
24
+ parse ( payload ) {
25
+ if ( this . decorator ) {
26
+ payload = this . decorator . parse ( payload ) ;
27
+ }
28
+
29
+ return Array . of ( payload )
30
+
24
31
. filter ( ( p ) => isDefinedOrThrow ( p , nullOrIndefinedPayload ) )
25
32
. filter ( ( p ) => isStringOrObjectOrThrow ( p , invalidPayloadTypeError ) )
26
33
. map ( asJSON )
27
34
. shift ( ) ;
28
-
29
- return json ;
30
- }
31
-
32
- JSONParser . prototype . parse = function ( payload ) {
33
- let toparse = payload ;
34
-
35
- if ( this . decorator ) {
36
- toparse = this . decorator . parse ( payload ) ;
37
35
}
38
-
39
- // is that string? is that JSON?
40
- const valid = validateAndParse ( toparse ) ;
41
-
42
- return valid ;
43
- } ;
36
+ }
44
37
45
38
module . exports = JSONParser ;
0 commit comments