// Same vanilla store contract used by Zustand, without a React dependency on // the dedicated server. Each arena operation restores its own saved state. export function create(initialize: (set: any, get: () => T, api: any) => T) { let state: T; const listeners = new Set<(state: T, previous: T) => void>(); const api = { getState: () => state, setState(update: any, replace = false) { const previous = state; const patch = typeof update === "function" ? update(state) : update; state = replace ? patch : Object.assign({}, state, patch); if (state !== previous) for (const listener of listeners) listener(state, previous); }, subscribe(listener: (state: T, previous: T) => void) { listeners.add(listener); return () => listeners.delete(listener); }, }; state = initialize(api.setState, api.getState, api); return api; }