# profile-builder/4.0.3/form-builder/blocks/src/lib/createPubsubStore.js

User Profile Builder – Beautiful User Registration Forms, User Profiles &amp; User Role Editor, version 4.0.3. 25 lines.

- Page: https://pluginprobe.com/plugins/profile-builder/4.0.3/code/form-builder/blocks/src/lib/createPubsubStore.js
- Raw: https://pluginprobe.com/plugins/profile-builder/4.0.3/raw/form-builder/blocks/src/lib/createPubsubStore.js
- Modified: 2026-08-17T08:51:38+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/profile-builder/4.0.3/code/form-builder/blocks/src/lib/createPubsubStore.js#L10-L20`.

```javascript
/**
 * Tiny pub/sub store for `useSyncExternalStore`. `set` short-circuits on
 * `equals` so `get` keeps a stable reference while unchanged.
 *
 * @param {*}        initialState
 * @param {Function} [equals] Default `Object.is`.
 * @returns {{ get, set, subscribe }}
 */
export function createPubsubStore( initialState, equals = Object.is ) {
    let state = initialState;
    const subscribers = new Set();
    return {
        get: () => state,
        set: ( next ) => {
            if ( equals( state, next ) ) return;
            state = next;
            subscribers.forEach( ( fn ) => fn() );
        },
        subscribe: ( fn ) => {
            subscribers.add( fn );
            return () => subscribers.delete( fn );
        },
    };
}

```
