Skip to content

Commit c46d89b

Browse files
committed
serialize JS Errors
1 parent f7df43d commit c46d89b

File tree

2 files changed

+30
-30
lines changed

2 files changed

+30
-30
lines changed

lib/serialization/ErrorObjectSerializer.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
1+
/*
2+
MIT License http://www.opensource.org/licenses/mit-license.php
3+
*/
4+
15
"use strict";
26

37
class ErrorObjectSerializer {
8+
constructor(Type) {
9+
this.Type = Type;
10+
}
11+
412
serialize(obj, { write }) {
5-
write(obj.name);
613
write(obj.message);
714
write(obj.stack);
815
}
916

1017
deserialize({ read }) {
11-
const err = new Error();
18+
const err = new this.Type();
1219

13-
err.name = read();
1420
err.message = read();
1521
err.stack = read();
1622

lib/serialization/ObjectMiddleware.js

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,7 @@ const ESCAPE_UNDEFINED = false;
5858

5959
const CURRENT_VERSION = 1;
6060

61-
const errorObjectSerializer = new ErrorObjectSerializer();
6261
const plainObjectSerializer = new PlainObjectSerializer();
63-
const mapObjectSerializer = new MapObjectSerializer();
64-
const setObjectSerializer = new SetObjectSerializer();
65-
const regExpObjectSerializer = new RegExpObjectSerializer();
6662

6763
const serializers = new Map();
6864
const serializerInversed = new Map();
@@ -83,29 +79,27 @@ serializers.set(Array, {
8379
serializer: plainObjectSerializer
8480
});
8581

86-
serializers.set(Map, {
87-
request: "",
88-
name: 1,
89-
serializer: mapObjectSerializer
90-
});
91-
92-
serializers.set(Set, {
93-
request: "",
94-
name: 2,
95-
serializer: setObjectSerializer
96-
});
97-
98-
serializers.set(RegExp, {
99-
request: "",
100-
name: 3,
101-
serializer: regExpObjectSerializer
102-
});
103-
104-
serializers.set(Error, {
105-
request: "",
106-
name: 4,
107-
serializer: errorObjectSerializer
108-
});
82+
const jsTypes = new Map();
83+
jsTypes.set(Map, new MapObjectSerializer());
84+
jsTypes.set(Set, new SetObjectSerializer());
85+
jsTypes.set(RegExp, new RegExpObjectSerializer());
86+
jsTypes.set(Error, new ErrorObjectSerializer(Error));
87+
jsTypes.set(EvalError, new ErrorObjectSerializer(EvalError));
88+
jsTypes.set(RangeError, new ErrorObjectSerializer(RangeError));
89+
jsTypes.set(ReferenceError, new ErrorObjectSerializer(ReferenceError));
90+
jsTypes.set(SyntaxError, new ErrorObjectSerializer(SyntaxError));
91+
jsTypes.set(TypeError, new ErrorObjectSerializer(TypeError));
92+
93+
{
94+
let i = 1;
95+
for (const [type, serializer] of jsTypes) {
96+
serializers.set(type, {
97+
request: "",
98+
name: i++,
99+
serializer
100+
});
101+
}
102+
}
109103

110104
for (const { request, name, serializer } of serializers.values()) {
111105
serializerInversed.set(`${request}/${name}`, serializer);

0 commit comments

Comments
 (0)