{"record":{"id":"505f876bd65cdec0","repo":"karatelabs/karate","slug":"iterator-value-entry-is-not-an-entry-object","errorCode":null,"errorMessage":"Iterator value {entry} is not an entry object","messagePattern":"Iterator value (.+?) is not an entry object","errorType":"exception","errorClass":"JsErrorException","httpStatus":null,"severity":"error","filePath":"karate-js/src/main/java/io/karatelabs/js/JsMapConstructor.java","lineNumber":81,"sourceCode":"        }\n        JsMap map = new JsMap();\n        if (args.length == 0 || args[0] == null || args[0] == Terms.UNDEFINED) {\n            return map;\n        }\n        // Look up `set` on the freshly-constructed map's prototype chain — honors\n        // user-overridden Map.prototype.set per spec 24.1.1.1 step 9.\n        Object setFn = map.getMember(\"set\");\n        if (!(setFn instanceof JsCallable adder)) {\n            throw JsErrorException.typeError(\"Map.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":63,"sourceCodeEnd":99,"githubUrl":"https://github.com/karatelabs/karate/blob/a22eb90246d958d15a47bf436693d0121ad2812d/karate-js/src/main/java/io/karatelabs/js/JsMapConstructor.java#L63-L99","documentation":"When `new Map(iterable)` consumes an iterable, each yielded value must be an entry object (a List/array of [key, value] or an object with 0/1 properties). Karate throws this TypeError when an iterator yields something else — a scalar, a function, etc. — so no key/value pair can be extracted.","triggerScenarios":"`new Map([1, 2, 3])` — iterator yields numbers, not pairs; `new Map('ab')` — each char is a string; `new Map(gen())` where the generator yields non-entry values; a nested array flattened by mistake so inner items are scalars.","commonSituations":"Hand-writing arrays of keys instead of [key, value] pairs; converting an Object to Map via Object.keys (yields strings) instead of Object.entries; porting JS from environments where 2-element arrays were accidentally flattened.","solutions":["Wrap each element as a [key, value] pair: `new Map([[1,'a'],[2,'b']])`","Use `Object.entries(obj)` instead of `Object.keys(obj)` when building a Map from an object","Log or inspect the iterable before passing to new Map() to confirm each element is a 2-element array or entry object","Filter/map the iterable first if the source data has heterogeneous shapes"],"exampleFix":"// before\nconst m = new Map([1, 2, 3]); // TypeError\n// after\nconst m = new Map([[1, null], [2, null], [3, null]]); // or [1,2,3].map(k => [k, k*2])","handlingStrategy":"validation","validationCode":"// every element must be a pair\nif (!arr.every(e => Array.isArray(e) && e.length >= 1)) {\n  throw new Error('iterable for new Map() must yield [key, value] entries');\n}","typeGuard":"function isEntry(e) { return Array.isArray(e) || (e !== null && typeof e === 'object'); }","tryCatchPattern":"try {\n  const m = new Map(iterable);\n} catch (e) {\n  if (String(e.message).includes('is not an entry object')) {\n    throw new Error('bad input to new Map: ' + e.message);\n  } else throw e;\n}","preventionTips":["Use Object.entries(obj), not Object.keys(obj), to build Maps from objects","Inspect the iterable's first element before constructing","Keep [key, value] pair shapes intact through array transforms"],"tags":["javascript","map","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"}