{"version":3,"file":"store.cjs","names":["#listeners","#snapshot"],"sources":["../../src/stream/store.ts"],"sourcesContent":["/**\n * Minimal observable store backing every framework binding.\n *\n * The shape is intentionally tiny:\n *\n *  - `subscribe(listener) → unsubscribe` lines up with React's\n *    `useSyncExternalStore`.\n *  - `getSnapshot()` returns a referentially-stable value for\n *    unchanged state so React can bail out of renders.\n *  - Vue/Svelte/Angular bindings wrap `subscribe` + `getSnapshot` in\n *    their own reactivity primitive (`shallowRef` / `writable` /\n *    `signal`) in ~10 lines.\n *\n * Snapshot identity matters: a listener is only useful if\n * `getSnapshot()` returns a *different* reference when state changes.\n * Callers MUST pass a freshly-constructed value to {@link setState};\n * mutating the previous snapshot in place will break React's bail-out\n * and cause infinite re-renders.\n */\n\nexport type StoreListener = () => void;\n\nexport class StreamStore<T> {\n  #snapshot: T;\n  readonly #listeners = new Set<StoreListener>();\n\n  constructor(initial: T) {\n    this.#snapshot = initial;\n  }\n\n  subscribe = (listener: StoreListener): (() => void) => {\n    this.#listeners.add(listener);\n    return () => {\n      this.#listeners.delete(listener);\n    };\n  };\n\n  getSnapshot = (): T => this.#snapshot;\n\n  /** Replace the snapshot and notify every listener. */\n  setValue = (next: T): void => {\n    if (Object.is(next, this.#snapshot)) return;\n    this.#snapshot = next;\n    for (const listener of this.#listeners) listener();\n  };\n\n  /**\n   * Functional update. The `updater` receives the current snapshot and\n   * MUST return a new object. Returning the same reference is a no-op.\n   */\n  setState = (updater: (previous: T) => T): void => {\n    this.setValue(updater(this.#snapshot));\n  };\n}\n"],"mappings":";AAsBA,IAAa,cAAb,MAA4B;CAC1B;CACA,6BAAsB,IAAI,KAAoB;CAE9C,YAAY,SAAY;AACtB,QAAA,WAAiB;;CAGnB,aAAa,aAA0C;AACrD,QAAA,UAAgB,IAAI,SAAS;AAC7B,eAAa;AACX,SAAA,UAAgB,OAAO,SAAS;;;CAIpC,oBAAuB,MAAA;;CAGvB,YAAY,SAAkB;AAC5B,MAAI,OAAO,GAAG,MAAM,MAAA,SAAe,CAAE;AACrC,QAAA,WAAiB;AACjB,OAAK,MAAM,YAAY,MAAA,UAAiB,WAAU;;;;;;CAOpD,YAAY,YAAsC;AAChD,OAAK,SAAS,QAAQ,MAAA,SAAe,CAAC"}