type Current = null | (() => void); let current: Current = null; export function createSignal(value: T): [() => T, (value: T) => void] { let innerValue = value; const observers: Array = []; const indices = new Map(); const getter = () => { if (current !== null && !indices.has(current)) { observers.push(current); indices.set(current, observers.length); } return innerValue; }; const setter = (value: T) => { innerValue = value; for (let i = 0; i < observers.length; i++) { observers[i]!(); } }; return [getter, setter]; } export function createEffect(callback: () => void): void { current = callback; callback(); current = null; }