different-ai/openwork · error · InterpreterRuntimeError
Array.from(...) does not support a map function in CodeMode;
Error message
Array.from(...) does not support a map function in CodeMode; call .map() on the result instead.
What it means
CodeMode supports Array.from only for converting an array-like/iterable into an array. The two-argument form where the second parameter is a mapping function is deliberately rejected with an UnsupportedSyntax error, directing developers to chain .map() separately. This keeps the interpreter's implementation surface small and error hints actionable.
Source
Thrown at packages/codemode/src/interpreter/runtime.ts:520
case "concat": {
result = value.concat(...args.map((_, index) => str(index)))
break
}
default:
throw new InterpreterRuntimeError(`String method '${name}' is not available in CodeMode.`, node)
}
return boundedData(result, `String.${name} result`)
}
const invokeArrayStatic = (name: string, args: Array<unknown>, node: AstNode): unknown => {
switch (name) {
case "isArray":
return Array.isArray(args[0])
case "of":
return [...args]
case "from": {
if (args.length > 1) {
throw new InterpreterRuntimeError(
"Array.from(...) does not support a map function in CodeMode; call .map() on the result instead.",
node,
"UnsupportedSyntax",
[supportedSyntaxMessage],
)
}
// Map/Set materialize directly (the data checkpoint would serialize them to {}).
if (args[0] instanceof SandboxMap)
return Array.from((args[0] as SandboxMap).map.entries(), ([key, item]) => [key, item])
if (args[0] instanceof SandboxSet) return Array.from((args[0] as SandboxSet).set.values())
if (args[0] instanceof SandboxURLSearchParams) {
return Array.from(args[0].params.entries(), ([key, value]) => [key, value])
}
const source = boundedData(args[0], "Array.from input")
if (typeof source === "string") return Array.from(source)
if (Array.isArray(source)) return [...source]
if (
source !== null &&View on GitHub (pinned to 2b7df46e8a)
Solutions
- Call Array.from with a single argument, then chain .map() on the result
- Build the values with a supported loop or Array constructor pattern
- If mapping a range, use a supported helper or a for loop pushing into an array
Example fix
// before
const squares = Array.from({length: 5}, (_, i) => i * i);
// after
const squares = Array.from({length: 5}).map((_, i) => i * i); Defensive patterns
Strategy: validation
Validate before calling
// Reject two-argument Array.from before running CodeMode
if (/Array\.from\s*\([^)]*,/.test(code)) {
throw new Error('CodeMode code uses Array.from with a map function; use .map() instead');
} Type guard
function isSingleArgArrayFrom(call) { return call.arguments.length === 1; } Prevention
- Always call Array.from with exactly one argument in sandbox code
- Chain .map() after Array.from for transformations
- Add a pre-execution lint rule for the Array.from(x, fn) pattern
When it happens
Trigger: Calling Array.from(iterable, mapFn) with more than one argument inside CodeMode, e.g. Array.from({length: 5}, (_, i) => i * 2) or Array.from(str, ch => ch.toUpperCase()).
Common situations: Idiomatic JS one-liners ported into CodeMode; LLM-generated code that uses the mapFn overload; refactoring existing scripts into sandboxed code without adapting Array.from usage.
Related errors
- Array.from expects an array, string, Map, Set, or array-like
- String method '${name}' is not available in CodeMode.
- Array.${name} is not available in CodeMode.
- console.${ref.name} is not available in CodeMode.
- Date.${ref.name} is not available in CodeMode.
AI-assisted analysis of different-ai/openwork@2b7df46e8a (2026-09-01).
Data as JSON: /api/errors/0a2bfa9065d466cd.
Report an issue: GitHub.