amark/gun · error · Error

Reactive for '${debugName}' already exists

Error message

Reactive for '${debugName}' already exists

What it means

Duplicate reactive-setter registration in the EDIDE wave reactive system. initSetter() keeps a Map of variable name -> setter; when a new reactive is initialized under a name that already has a setter, it throws to prevent silently overwriting an existing reactive's update logic. The debugName in the message is the setter's type label (or the variable name).

Source

Thrown at lib/wave.js:279

  setters = edide.keep(new Map); // varName => setter:func

  dependees = edide.keep(new Map); // varName => deps:

  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;

View on GitHub (pinned to 552227599d)

Solutions

  1. Rename the new reactive so it does not collide with the existing one
  2. Remove or unbind the old reactive for that name before creating a new one
  3. Check app init code for accidental double registration of the same reactive (e.g. hot reload or re-running a setup block)
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at lib/wave.js:279 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/50201b14d52842fd. Report an issue: GitHub.