@@ -4,44 +4,48 @@ import { decode } from "./decode";
44
55export const JavaScriptCodecType = 0 ;
66
7+ const enum JSData {
8+ Map ,
9+ Set ,
10+ Date ,
11+ RegExp ,
12+ }
13+
714export function encodeJavaScriptData ( input : unknown ) : Uint8Array | null {
815 if ( input instanceof Map ) {
9- return encode ( [ " Map" , [ ...input ] ] ) ;
16+ return encode ( [ JSData . Map , [ ...input ] ] ) ;
1017 } else if ( input instanceof Set ) {
11- return encode ( [ " Set" , [ ...input ] ] ) ;
18+ return encode ( [ JSData . Set , [ ...input ] ] ) ;
1219 } else if ( input instanceof Date ) {
1320 // Not a MessagePack timestamp because
1421 // it may be overrided by users
15- return encode ( [ " Date" , input . getTime ( ) ] ) ;
22+ return encode ( [ JSData . Date , input . getTime ( ) ] ) ;
1623 } else if ( input instanceof RegExp ) {
17- return encode ( [ " RegExp" , [ input . source , input . flags ] ] ) ;
24+ return encode ( [ JSData . RegExp , [ input . source , input . flags ] ] ) ;
1825 } else {
1926 return null ;
2027 }
2128}
2229
2330export function decodeJavaScriptData ( data : Uint8Array ) {
24- const [ constructor , source ] = decode ( data ) as [ string , any ] ;
31+ const [ jsDataType , source ] = decode ( data ) as [ JSData , any ] ;
2532
26- switch ( constructor ) {
27- case "undefined" : {
28- return undefined ;
29- }
30- case "Map" : {
33+ switch ( jsDataType ) {
34+ case JSData . Map : {
3135 return new Map < unknown , unknown > ( source ) ;
3236 }
33- case " Set" : {
37+ case JSData . Set : {
3438 return new Set < unknown > ( source ) ;
3539 }
36- case " Date" : {
40+ case JSData . Date : {
3741 return new Date ( source ) ;
3842 }
39- case " RegExp" : {
43+ case JSData . RegExp : {
4044 const [ pattern , flags ] = source ;
4145 return new RegExp ( pattern , flags ) ;
4246 }
4347 default : {
44- throw new Error ( `Unknown constructor : ${ constructor } ` ) ;
48+ throw new Error ( `Unknown data type : ${ jsDataType } ` ) ;
4549 }
4650 }
4751}
0 commit comments