{"record":{"id":"08c81b859e6d897b","repo":"amark/gun","slug":"can-t-create-reactive-setter-for-debugname","errorCode":null,"errorMessage":"can't create reactive setter (for '${debugName}') inside reactive context","messagePattern":"can't create reactive setter \\(for '(.+?)'\\) inside reactive context","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"lib/wave.js","lineNumber":283,"sourceCode":"  setLinks = edide.keep(new Map); // for reactiveGraph, show setters inside reactive/setter:s\n\n  debugging = false; //edide.editorModule?\n\n  depsRequired = new Map; // varName : dependsOn\n\n  inInitCall = false; // TODO use dependsOn? instead\n\n  dependsOn = new Set(); // remove\n\n  initSetter = (name, setter) => {\n    var debugName, err, parent, ref, val;\n    debugName = (ref = setter.type) != null ? ref : name;\n    if ((setters.get(name)) != null) {\n      throw Error(`Reactive for '${debugName}' already exists`);\n    }\n    setters.set(name, setter);\n    if (inInitCall) {\n      throw Error(`can't create reactive setter (for '${debugName}') inside reactive context`);\n    }\n    inInitCall = name;\n    dependsOn.clear(); // TODO clear => new Set\n    try {\n      val = setter(); // TODO: some day add revar and unvar as params; helps with multiple reactives to keep the separated\n    } catch (error) {\n      err = error;\n      inInitCall = false;\n      err.message = `Reactive initialization of '${debugName}' failed: ${err.message}`;\n      throw err;\n    }\n    parent = null;\n    dependsOn.forEach((depName) => {\n      var deps;\n      if ((deps = dependees.get(depName)) == null) {\n        dependees.set(depName, deps = new Set);\n      }\n      return deps.add(name);","sourceCodeStart":265,"sourceCodeEnd":301,"githubUrl":"https://github.com/amark/gun/blob/552227599d47ba0493824b7fcf8a00c8cd6404ba/lib/wave.js#L265-L301","documentation":"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).","triggerScenarios":"Thrown at lib/wave.js:283 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","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"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"552227599d47ba0493824b7fcf8a00c8cd6404ba","analyzedAt":"2026-09-02T18:40:58.370Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-09T21:17:11.164Z"}