source dump of claude code
at main 34 lines 836 B view raw
1type Listener = () => void 2type OnChange<T> = (args: { newState: T; oldState: T }) => void 3 4export type Store<T> = { 5 getState: () => T 6 setState: (updater: (prev: T) => T) => void 7 subscribe: (listener: Listener) => () => void 8} 9 10export function createStore<T>( 11 initialState: T, 12 onChange?: OnChange<T>, 13): Store<T> { 14 let state = initialState 15 const listeners = new Set<Listener>() 16 17 return { 18 getState: () => state, 19 20 setState: (updater: (prev: T) => T) => { 21 const prev = state 22 const next = updater(prev) 23 if (Object.is(next, prev)) return 24 state = next 25 onChange?.({ newState: next, oldState: prev }) 26 for (const listener of listeners) listener() 27 }, 28 29 subscribe: (listener: Listener) => { 30 listeners.add(listener) 31 return () => listeners.delete(listener) 32 }, 33 } 34}