mirror of https://github.com/webpack/webpack.git
add error for circular references while serializing
This commit is contained in:
parent
6c172166e3
commit
b93ba710df
|
|
@ -168,6 +168,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|||
};
|
||||
let currentPosTypeLookup = 0;
|
||||
const objectTypeLookup = new Map();
|
||||
const cycleStack = new Set();
|
||||
const process = item => {
|
||||
// check if we can emit a reference
|
||||
const ref = referenceable.get(item);
|
||||
|
|
@ -176,6 +177,14 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|||
return;
|
||||
}
|
||||
if (typeof item === "object" && item !== null) {
|
||||
if (cycleStack.has(item)) {
|
||||
throw new Error(
|
||||
`Circular references can't be serialized (${Array.from(cycleStack)
|
||||
.concat([item])
|
||||
.map(obj => obj.constructor.name)
|
||||
.join(" -> ")})`
|
||||
);
|
||||
}
|
||||
const { request, name, serializer } = ObjectMiddleware.getSerializerFor(
|
||||
item
|
||||
);
|
||||
|
|
@ -188,11 +197,13 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|||
} else {
|
||||
result.push(ESCAPE, currentPosTypeLookup - lastIndex);
|
||||
}
|
||||
cycleStack.add(item);
|
||||
serializer.serialize(item, {
|
||||
write(value) {
|
||||
process(value);
|
||||
}
|
||||
});
|
||||
cycleStack.delete(item);
|
||||
result.push(ESCAPE, ESCAPE_END_OBJECT);
|
||||
addReferenceable(item);
|
||||
} else if (typeof item === "string") {
|
||||
|
|
|
|||
Loading…
Reference in New Issue