deno.land / x / jotai@v1.8.4 / src / utils / abortableAtom.ts
12345678910111213141516171819202122232425262728293031323334353637383940414243444546import { atom, SECRET_INTERNAL_registerPromiseAbort as registerPromiseAbort,} from 'jotai'import type { Atom, WritableAtom } from 'jotai'
type Getter = Parameters<Atom<unknown>['read']>[0]type WriteGetter = Parameters<WritableAtom<unknown, unknown>['write']>[0]type Setter = Parameters<WritableAtom<unknown, unknown>['write']>[1]
type Read<Value> = (get: Getter, options: { signal: AbortSignal }) => Value
type Write<Update, Result extends void | Promise<void>> = ( get: WriteGetter, set: Setter, update: Update) => Result
// writable derived atomexport function abortableAtom< Value, Update, Result extends void | Promise<void> = void>( read: Read<Value>, write: Write<Update, Result>): WritableAtom<Value, Update, Result>
// read-only derived atomexport function abortableAtom<Value>(read: Read<Value>): Atom<Value>
export function abortableAtom< Value, Update, Result extends void | Promise<void>>(read: Read<Value>, write?: Write<Update, Result>) { return atom((get) => { const controller = new AbortController() const promise = read(get, { signal: controller.signal }) if (promise instanceof Promise) { registerPromiseAbort(promise, () => controller.abort()) } return promise }, write)}
Version Info