From 3131697ac03aa0d644b3d97f7588181af25105e8 Mon Sep 17 00:00:00 2001 From: Valerie Date: Sat, 12 Jun 2021 15:43:52 -0400 Subject: [PATCH] no infinite loop on walks! --- src/Frigid.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Frigid.ts b/src/Frigid.ts index 2026b04..1a90104 100644 --- a/src/Frigid.ts +++ b/src/Frigid.ts @@ -1,4 +1,5 @@ import { existsSync, readFileSync, writeFileSync } from "fs"; +import { reverseLookup } from "./reverseLookup.js"; import Serializable from "./Serializable.js"; const PERSIST_LOCATION = Symbol('PERSIST_LOCATION'); @@ -34,14 +35,17 @@ export default class Frigid extends Serializable { } } -function walk(obj, transform) { +function walk(obj, transform, done = new Map()) { if(obj instanceof Serializable) { transform(obj); + if(reverseLookup(done, obj) === null) { + done.set(done.size, obj); + } } for(const key of Object.keys(obj)) { const val = obj[key]; if(typeof obj === 'object') { - walk(val, transform); + walk(val, transform, done); } } }