Skip to content

Commit 0bfb144

Browse files
committed
use const enum for JavaScript data types
1 parent c683916 commit 0bfb144

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

src/JavaScriptCodec.ts

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,44 +4,48 @@ import { decode } from "./decode";
44

55
export const JavaScriptCodecType = 0;
66

7+
const enum JSData {
8+
Map,
9+
Set,
10+
Date,
11+
RegExp,
12+
}
13+
714
export 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

2330
export 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

Comments
 (0)