diff --git a/packages/babel-traverse/src/path/index.js b/packages/babel-traverse/src/path/index.js index 1469becd39..39a0e26348 100644 --- a/packages/babel-traverse/src/path/index.js +++ b/packages/babel-traverse/src/path/index.js @@ -77,15 +77,23 @@ export default class NodePath { } } + if (!(path instanceof NodePath)) { + if (path.constructor.name === "NodePath") { + // we're going to absolutley thrash the tree and allocate way too many node paths + // than is necessary but there's no way around this as the node module resolution + // algorithm is ridiculous + path = null; + } else { + // badly deserialised probably + throw new Error("We found a path that isn't a NodePath instance. Possiblly due to bad serialisation."); + } + } + if (!path) { path = new NodePath(hub, parent); paths.push(path); } - if (!(path instanceof NodePath)) { - throw new Error("We found a path that isn't a NodePath instance"); - } - path.setup(parentPath, container, listKey, key); return path;