amark/gun · error · Error
can't create reactive setter (for '${debugName}') inside rea
Error message
can't create reactive setter (for '${debugName}') inside reactive context What it means
Nesting guard in the wave reactive system: initSetter() sets an inInitCall flag while it runs a setter to compute a reactive value. If creating a new reactive setter is attempted while that flag is set — i.e. a reactive initialization itself tries to declare another reactive — this throws, because nested reactive creation would corrupt the dependency tracking (dependsOn of the outer setter).
Source
Thrown at lib/wave.js:283
setLinks = edide.keep(new Map); // for reactiveGraph, show setters inside reactive/setter:s
debugging = false; //edide.editorModule?
depsRequired = new Map; // varName : dependsOn
inInitCall = false; // TODO use dependsOn? instead
dependsOn = new Set(); // remove
initSetter = (name, setter) => {
var debugName, err, parent, ref, val;
debugName = (ref = setter.type) != null ? ref : name;
if ((setters.get(name)) != null) {
throw Error(`Reactive for '${debugName}' already exists`);
}
setters.set(name, setter);
if (inInitCall) {
throw Error(`can't create reactive setter (for '${debugName}') inside reactive context`);
}
inInitCall = name;
dependsOn.clear(); // TODO clear => new Set
try {
val = setter(); // TODO: some day add revar and unvar as params; helps with multiple reactives to keep the separated
} catch (error) {
err = error;
inInitCall = false;
err.message = `Reactive initialization of '${debugName}' failed: ${err.message}`;
throw err;
}
parent = null;
dependsOn.forEach((depName) => {
var deps;
if ((deps = dependees.get(depName)) == null) {
dependees.set(depName, deps = new Set);
}
return deps.add(name);View on GitHub (pinned to 552227599d)
Solutions
- Move reactive declarations out of reactive setter bodies to top level of the reactive block
- Defer the nested creation until after initialization completes (e.g. schedule it, don't call it synchronously inside the setter)
- Restructure so the inner reactive is created before the outer one and only referenced by it
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at lib/wave.js:283 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of amark/gun@552227599d (2026-09-02).
Data as JSON: /api/errors/08c81b859e6d897b.
Report an issue: GitHub.