export function ref(initial: T) { let value = $state(initial) return { get value() { return value }, set value(newValue) { value = newValue }, } } export function promiseWithResolvers() { let resolve: (value: T) => void let reject: (reason?: any) => void const promise = new Promise((res, rej) => { resolve = res reject = rej }) return { promise, resolve: resolve!, reject: reject! } } export function withEffectRoot(fn: () => void | Promise) { return async () => { let promise: void | Promise = Promise.resolve() const cleanup = $effect.root(() => { promise = fn() }) await promise cleanup() } }