UNPKG

solid-js

Version:

A declarative JavaScript library for building user interfaces.

177 lines (176 loc) 7.23 kB
import { requestCallback } from "./scheduler"; import type { JSX } from "../jsx"; export declare type Accessor<T> = () => T; export declare type Setter<T> = undefined extends T ? <U extends T>(v?: (U extends Function ? never : U) | ((prev?: U) => U)) => U : <U extends T>(v: (U extends Function ? never : U) | ((prev: U) => U)) => U; export declare const equalFn: <T>(a: T, b: T) => boolean; export declare const $PROXY: unique symbol; export declare const NOTPENDING: {}; export declare var Owner: Owner | null; export declare let Transition: Transition | null; declare global { var _$afterUpdate: () => void; } interface Signal<T> { value?: T; observers: Computation<any>[] | null; observerSlots: number[] | null; pending: T | {}; tValue?: T; comparator?: (prev: T, next: T) => boolean; name?: string; } interface Owner { owned: Computation<any>[] | null; cleanups: (() => void)[] | null; owner: Owner | null; context: any | null; sourceMap?: Record<string, { value: unknown; }>; name?: string; componentName?: string; } interface Computation<T> extends Owner { fn: (v?: T) => T; state: number; tState?: number; sources: Signal<T>[] | null; sourceSlots: number[] | null; value?: T; updatedAt: number | null; pure: boolean; user?: boolean; suspense?: SuspenseContextType; } interface Memo<T> extends Signal<T>, Computation<T> { tOwned?: Computation<any>[]; } interface Transition { sources: Set<Signal<any>>; effects: Computation<any>[]; promises: Set<Promise<any>>; disposed: Set<Computation<any>>; queue: Set<Computation<any>>; scheduler?: (fn: () => void) => unknown; running: boolean; cb: (() => void)[]; } export declare function createRoot<T>(fn: (dispose: () => void) => T, detachedOwner?: Owner): T; export declare function createSignal<T>(): [get: Accessor<T | undefined>, set: Setter<T | undefined>]; export declare function createSignal<T>(value: T, options?: { equals?: false | ((prev: T, next: T) => boolean); name?: string; internal?: boolean; }): [get: Accessor<T>, set: Setter<T>]; export declare function createComputed<T>(fn: (v?: T) => T | undefined): void; export declare function createComputed<T>(fn: (v: T) => T, value: T, options?: { name?: string; }): void; export declare function createRenderEffect<T>(fn: (v?: T) => T | undefined): void; export declare function createRenderEffect<T>(fn: (v: T) => T, value: T, options?: { name?: string; }): void; export declare function createEffect<T>(fn: (v?: T) => T | undefined): void; export declare function createEffect<T>(fn: (v: T) => T, value: T, options?: { name?: string; }): void; export declare function createMemo<T>(fn: (v?: T) => T, value?: undefined, options?: { equals?: false | ((prev: T, next: T) => boolean); name?: string; }): Accessor<T>; export declare function createMemo<T>(fn: (v: T) => T, value: T, options?: { equals?: false | ((prev: T, next: T) => boolean); name?: string; }): Accessor<T>; export interface Resource<T> extends Accessor<T> { loading: boolean; error: any; } export declare type ResourceReturn<T> = [ Resource<T>, { mutate: Setter<T>; refetch: () => void; } ]; export declare function createResource<T, U = true>(fetcher: (k: U, getPrev: Accessor<T | undefined>) => T | Promise<T>, options?: { initialValue?: undefined; name?: string; }): ResourceReturn<T | undefined>; export declare function createResource<T, U = true>(fetcher: (k: U, getPrev: Accessor<T>) => T | Promise<T>, options: { initialValue: T; name?: string; }): ResourceReturn<T>; export declare function createResource<T, U>(source: U | false | null | (() => U | false | null), fetcher: (k: U, getPrev: Accessor<T | undefined>) => T | Promise<T>, options?: { initialValue?: undefined; name?: string; }): ResourceReturn<T | undefined>; export declare function createResource<T, U>(source: U | false | null | (() => U | false | null), fetcher: (k: U, getPrev: Accessor<T>) => T | Promise<T>, options: { initialValue: T; name?: string; }): ResourceReturn<T>; export declare function createDeferred<T>(source: Accessor<T>, options?: { equals?: false | ((prev: T, next: T) => boolean); name?: string; timeoutMs?: number; }): Accessor<T>; export declare function createSelector<T, U>(source: Accessor<T>, fn?: (a: U, b: T) => boolean, options?: { name?: string; }): (key: U) => boolean; export declare function batch<T>(fn: () => T): T; export declare function untrack<T>(fn: Accessor<T>): T; export declare type ReturnTypes<T> = T extends (() => any)[] ? { [I in keyof T]: ReturnTypes<T[I]>; } : T extends () => any ? ReturnType<T> : never; export declare function on<T extends (() => any)[], U>(deps: [...T], fn: (input: ReturnTypes<T>, prevInput: ReturnTypes<T>, prevValue?: U) => U, options?: { defer?: boolean; }): (prevValue?: U) => U; export declare function on<T extends () => any, U>(deps: T, fn: (input: ReturnType<T>, prevInput: ReturnType<T>, prevValue?: U) => U, options?: { defer?: boolean; }): (prevValue?: U) => U; export declare function onMount(fn: () => void): void; export declare function onCleanup(fn: () => void): () => void; export declare function onError(fn: (err: any) => void): void; export declare function getListener(): Computation<any> | null; export declare function getOwner(): Owner | null; export declare function runWithOwner(o: Owner, fn: () => any): any; export declare function enableScheduling(scheduler?: typeof requestCallback): void; export declare function startTransition(fn: () => void, cb?: () => void): void; export declare function useTransition(): [Accessor<boolean>, (fn: () => void, cb?: () => void) => void]; export declare function resumeEffects(e: Computation<any>[]): void; export declare function devComponent<T>(Comp: (props: T) => JSX.Element, props: T): JSX.Element; export declare function hashValue(v: any): string; export declare function registerGraph(name: string, value: { value: unknown; }): string; interface GraphRecord { [k: string]: GraphRecord | unknown; } export declare function serializeGraph(owner?: Owner | null): GraphRecord; export interface Context<T> { id: symbol; Provider: (props: { value: T; children: any; }) => any; defaultValue: T; } export declare function createContext<T>(): Context<T | undefined>; export declare function createContext<T>(defaultValue: T): Context<T>; export declare function useContext<T>(context: Context<T>): T; export declare function children(fn: Accessor<JSX.Element>): Accessor<JSX.Element>; declare type SuspenseContextType = { increment?: () => void; decrement?: () => void; inFallback?: () => boolean; effects?: Computation<any>[]; resolved?: boolean; }; export declare function getSuspenseContext(): Context<SuspenseContextType> & { active?(): boolean; increment?(): void; decrement?(): void; }; export declare function readSignal(this: Signal<any> | Memo<any>): any; export declare function writeSignal(node: Signal<any> | Memo<any>, value: any, isComp?: boolean): any; export {};