@@ -4,44 +4,48 @@ import { decode } from "./decode";
4
4
5
5
export const JavaScriptCodecType = 0 ;
6
6
7
+ const enum JSData {
8
+ Map ,
9
+ Set ,
10
+ Date ,
11
+ RegExp ,
12
+ }
13
+
7
14
export function encodeJavaScriptData ( input : unknown ) : Uint8Array | null {
8
15
if ( input instanceof Map ) {
9
- return encode ( [ " Map" , [ ...input ] ] ) ;
16
+ return encode ( [ JSData . Map , [ ...input ] ] ) ;
10
17
} else if ( input instanceof Set ) {
11
- return encode ( [ " Set" , [ ...input ] ] ) ;
18
+ return encode ( [ JSData . Set , [ ...input ] ] ) ;
12
19
} else if ( input instanceof Date ) {
13
20
// Not a MessagePack timestamp because
14
21
// it may be overrided by users
15
- return encode ( [ " Date" , input . getTime ( ) ] ) ;
22
+ return encode ( [ JSData . Date , input . getTime ( ) ] ) ;
16
23
} else if ( input instanceof RegExp ) {
17
- return encode ( [ " RegExp" , [ input . source , input . flags ] ] ) ;
24
+ return encode ( [ JSData . RegExp , [ input . source , input . flags ] ] ) ;
18
25
} else {
19
26
return null ;
20
27
}
21
28
}
22
29
23
30
export function decodeJavaScriptData ( data : Uint8Array ) {
24
- const [ constructor , source ] = decode ( data ) as [ string , any ] ;
31
+ const [ jsDataType , source ] = decode ( data ) as [ JSData , any ] ;
25
32
26
- switch ( constructor ) {
27
- case "undefined" : {
28
- return undefined ;
29
- }
30
- case "Map" : {
33
+ switch ( jsDataType ) {
34
+ case JSData . Map : {
31
35
return new Map < unknown , unknown > ( source ) ;
32
36
}
33
- case " Set" : {
37
+ case JSData . Set : {
34
38
return new Set < unknown > ( source ) ;
35
39
}
36
- case " Date" : {
40
+ case JSData . Date : {
37
41
return new Date ( source ) ;
38
42
}
39
- case " RegExp" : {
43
+ case JSData . RegExp : {
40
44
const [ pattern , flags ] = source ;
41
45
return new RegExp ( pattern , flags ) ;
42
46
}
43
47
default : {
44
- throw new Error ( `Unknown constructor : ${ constructor } ` ) ;
48
+ throw new Error ( `Unknown data type : ${ jsDataType } ` ) ;
45
49
}
46
50
}
47
51
}
0 commit comments