summaryrefslogtreecommitdiff
path: root/cli/rt/01_web_util.js
diff options
context:
space:
mode:
Diffstat (limited to 'cli/rt/01_web_util.js')
-rw-r--r--cli/rt/01_web_util.js10
1 files changed, 7 insertions, 3 deletions
diff --git a/cli/rt/01_web_util.js b/cli/rt/01_web_util.js
index c843ac086..3076993ff 100644
--- a/cli/rt/01_web_util.js
+++ b/cli/rt/01_web_util.js
@@ -88,22 +88,26 @@
if (value instanceof Map) {
const clonedMap = new Map();
objectCloneMemo.set(value, clonedMap);
- value.forEach((v, k) => clonedMap.set(k, cloneValue(v)));
+ value.forEach((v, k) => {
+ clonedMap.set(cloneValue(k), cloneValue(v));
+ });
return clonedMap;
}
if (value instanceof Set) {
- const clonedSet = new Map();
+ // assumes that cloneValue still takes only one argument
+ const clonedSet = new Set([...value].map(cloneValue));
objectCloneMemo.set(value, clonedSet);
- value.forEach((v, k) => clonedSet.set(k, cloneValue(v)));
return clonedSet;
}
+ // default for objects
const clonedObj = {};
objectCloneMemo.set(value, clonedObj);
const sourceKeys = Object.getOwnPropertyNames(value);
for (const key of sourceKeys) {
clonedObj[key] = cloneValue(value[key]);
}
+ Reflect.setPrototypeOf(clonedObj, Reflect.getPrototypeOf(value));
return clonedObj;
}
case "symbol":