{"record":{"id":"333f2e9cd3a63987","repo":"karatelabs/karate","slug":"iterator-value-is-not-an-entry-object-jsweakmapconstructor","errorCode":null,"errorMessage":"Iterator value  is not an entry object","messagePattern":"Iterator value  is not an entry object","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"karate-js/src/main/java/io/karatelabs/js/JsWeakMapConstructor.java","lineNumber":63,"sourceCode":"        if (!isNew) {\n            throw JsErrorException.typeError(\"Constructor WeakMap requires 'new'\");\n        }\n        JsWeakMap map = new JsWeakMap();\n        if (args.length == 0 || args[0] == null || args[0] == Terms.UNDEFINED) {\n            return map;\n        }\n        Object setFn = map.getMember(\"set\");\n        if (!(setFn instanceof JsCallable adder)) {\n            throw JsErrorException.typeError(\"WeakMap.prototype.set is not callable\");\n        }\n        JsIterator iter = IterUtils.getIterator(args[0], context);\n        CoreContext cc = context instanceof CoreContext c ? c : null;\n        Object savedThis = cc != null ? cc.thisObject : null;\n        try {\n            while (iter.hasNext()) {\n                Object entry = iter.next();\n                if (!(entry instanceof List) && !(entry instanceof ObjectLike)) {\n                    throw JsErrorException.typeError(\"Iterator value \" + entry + \" is not an entry object\");\n                }\n                Object k;\n                Object v;\n                if (entry instanceof List<?> list) {\n                    k = list.isEmpty() ? Terms.UNDEFINED : list.get(0);\n                    v = list.size() < 2 ? Terms.UNDEFINED : list.get(1);\n                } else {\n                    ObjectLike ol = (ObjectLike) entry;\n                    k = ol.getMember(\"0\");\n                    v = ol.getMember(\"1\");\n                    if (k == null) k = Terms.UNDEFINED;\n                    if (v == null) v = Terms.UNDEFINED;\n                }\n                if (cc != null) cc.thisObject = map;\n                adder.call(context, new Object[]{k, v});\n                if (cc != null && cc.isError()) {\n                    return map;\n                }","sourceCodeStart":45,"sourceCodeEnd":81,"githubUrl":"https://github.com/karatelabs/karate/blob/a22eb90246d958d15a47bf436693d0121ad2812d/karate-js/src/main/java/io/karatelabs/js/JsWeakMapConstructor.java#L45-L81","documentation":"When new WeakMap(iterable) iterates its argument, each yielded value must be an entry object: an array-like (List) or key/value-holding object (ObjectLike). Karate throws this TypeError when an iterator yields something else (a bare string, number, or plain non-entry object), mirroring V8's 'Iterator value X is not an entry object'.","triggerScenarios":"new WeakMap([1, 2, 3]) or new WeakMap('ab') — passing an iterable of scalars instead of [[key, value], ...] pairs; also new WeakMap(gen()) where a generator yields non-entry values.","commonSituations":"Copying from a WeakSet or array of keys instead of entries; converting Map-style code but forgetting to wrap values in pairs; iterators over flat lists from config or JSON data.","solutions":["Pass an array of [key, value] pairs: new WeakMap([[keyObj, value], ...]).","Map flat iterables into pairs first: new WeakMap(keys.map(k => [k, defaultValue])).","Filter or transform the source iterator so each element is a List/ObjectLike entry.","If you only have keys, build the map with set() in a loop instead."],"exampleFix":"// before\nconst wm = new WeakMap([obj1, obj2]); // not entries\n\n// after\nconst wm = new WeakMap([[obj1, 'meta1'], [obj2, 'meta2']]);","handlingStrategy":"validation","validationCode":"if (!Array.isArray(entries) || !entries.every(e => Array.isArray(e) || (e && typeof e === 'object'))) throw new Error('WeakMap iterable must contain [key, value] entries');","typeGuard":"function isEntry(e) { return Array.isArray(e) || (e !== null && typeof e === 'object'); }","tryCatchPattern":null,"preventionTips":["Always pass [[key, value], ...] pairs to the WeakMap constructor","Convert flat key lists with keys.map(k => [k, v]) first","Verify generator/iterator output shape before constructing"],"tags":["javascript","weakmap","iterator","typeerror"],"backgroundTag":"invalid-argument-format","analyzedSha":"a22eb90246d958d15a47bf436693d0121ad2812d","analyzedAt":"2026-09-12T09:01:00.220Z","contentChangedAt":"2026-09-12T09:01:00.220Z","schemaVersion":2},"datasetVersion":"2026-09-16T19:17:19.609Z"}