export default function create (initialState) {
  let state = initialState
  const listeners = []

  function setState (partial) {
    state = { ...state, ...partial }
    for (let i = 0; i < listeners.length; i++) {
      listeners[i]()
    }
  }

  function getState () {
    return state
  }

  function subscribe (listener) {
    listeners.push(listener)

    return function unsubscribe () {
      const index = listeners.indexOf(listener)
      listeners.splice(index, 1)
    }
  }

  return {
    setState,
    getState,
    subscribe,
  }
}