UNPKG

solid-js

Version:

A declarative JavaScript library for building user interfaces.

264 lines (263 loc) 8.34 kB
export declare const $RAW: unique symbol, $NODE: unique symbol, $HAS: unique symbol, $SELF: unique symbol; export declare const DevHooks: { onStoreNodeUpdate: OnStoreNodeUpdate | null; }; type DataNode = { (): any; $(value?: any): void; }; export type DataNodes = Record<PropertyKey, DataNode | undefined>; export type OnStoreNodeUpdate = ( state: StoreNode, property: PropertyKey, value: StoreNode | NotWrappable, prev: StoreNode | NotWrappable ) => void; export interface StoreNode { [$NODE]?: DataNodes; [key: PropertyKey]: any; } export declare namespace SolidStore { interface Unwrappable {} } export type NotWrappable = | string | number | bigint | symbol | boolean | Function | null | undefined | SolidStore.Unwrappable[keyof SolidStore.Unwrappable]; export type Store<T> = T; export declare function isWrappable<T>(obj: T | NotWrappable): obj is T; /** * Returns the underlying data in the store without a proxy. * @param item store proxy object * @example * ```js * const initial = {z...}; * const [state, setState] = createStore(initial); * initial === state; // => false * initial === unwrap(state); // => true * ``` */ export declare function unwrap<T>(item: T, set?: Set<unknown>): T; export declare function getNodes(target: StoreNode, symbol: typeof $NODE | typeof $HAS): DataNodes; export declare function getNode(nodes: DataNodes, property: PropertyKey, value?: any): DataNode; export declare function proxyDescriptor( target: StoreNode, property: PropertyKey ): TypedPropertyDescriptor<any> | undefined; export declare function trackSelf(target: StoreNode): void; export declare function ownKeys(target: StoreNode): (string | symbol)[]; export declare function setProperty( state: StoreNode, property: PropertyKey, value: any, deleting?: boolean ): void; export declare function updatePath( current: StoreNode, path: any[], traversed?: PropertyKey[] ): void; /** @deprecated */ export type DeepReadonly<T> = 0 extends 1 & T ? T : T extends NotWrappable ? T : { readonly [K in keyof T]: DeepReadonly<T[K]>; }; /** @deprecated */ export type DeepMutable<T> = 0 extends 1 & T ? T : T extends NotWrappable ? T : { -readonly [K in keyof T]: DeepMutable<T[K]>; }; export type CustomPartial<T> = T extends readonly unknown[] ? "0" extends keyof T ? { [K in Extract<keyof T, `${number}`>]?: T[K]; } : { [x: number]: T[number]; } : Partial<T>; export type PickMutable<T> = { [K in keyof T as (<U>() => U extends { [V in K]: T[V]; } ? 1 : 2) extends <U>() => U extends { -readonly [V in K]: T[V]; } ? 1 : 2 ? K : never]: T[K]; }; export type StorePathRange = { from?: number; to?: number; by?: number; }; export type ArrayFilterFn<T> = (item: T, index: number) => boolean; export type StoreSetter<T, U extends PropertyKey[] = []> = | T | CustomPartial<T> | ((prevState: T, traversed: U) => T | CustomPartial<T>); export type Part<T, K extends KeyOf<T> = KeyOf<T>> = | K | ([K] extends [never] ? never : readonly K[]) | ([T] extends [readonly unknown[]] ? ArrayFilterFn<T[number]> | StorePathRange : never); type W<T> = Exclude<T, NotWrappable>; type KeyOf<T> = number extends keyof T ? 0 extends 1 & T ? keyof T : [T] extends [never] ? never : [T] extends [readonly unknown[]] ? number : keyof T : keyof T; type MutableKeyOf<T> = KeyOf<T> & keyof PickMutable<T>; type Rest<T, U extends PropertyKey[], K extends KeyOf<T> = KeyOf<T>> = [T] extends [never] ? never : K extends MutableKeyOf<T> ? [Part<T, K>, ...RestSetterOrContinue<T[K], [K, ...U]>] : K extends KeyOf<T> ? [Part<T, K>, ...RestContinue<T[K], [K, ...U]>] : never; type RestContinue<T, U extends PropertyKey[]> = 0 extends 1 & T ? [...Part<any>[], StoreSetter<any, PropertyKey[]>] : Rest<W<T>, U>; type RestSetterOrContinue<T, U extends PropertyKey[]> = [StoreSetter<T, U>] | RestContinue<T, U>; export interface SetStoreFunction<T> { < K1 extends KeyOf<W<T>>, K2 extends KeyOf<W<W<T>[K1]>>, K3 extends KeyOf<W<W<W<T>[K1]>[K2]>>, K4 extends KeyOf<W<W<W<W<T>[K1]>[K2]>[K3]>>, K5 extends KeyOf<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>>, K6 extends KeyOf<W<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>[K5]>>, K7 extends MutableKeyOf<W<W<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>[K5]>[K6]>> >( k1: Part<W<T>, K1>, k2: Part<W<W<T>[K1]>, K2>, k3: Part<W<W<W<T>[K1]>[K2]>, K3>, k4: Part<W<W<W<W<T>[K1]>[K2]>[K3]>, K4>, k5: Part<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>, K5>, k6: Part<W<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>[K5]>, K6>, k7: Part<W<W<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>[K5]>[K6]>, K7>, setter: StoreSetter< W<W<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>[K5]>[K6]>[K7], [K7, K6, K5, K4, K3, K2, K1] > ): void; < K1 extends KeyOf<W<T>>, K2 extends KeyOf<W<W<T>[K1]>>, K3 extends KeyOf<W<W<W<T>[K1]>[K2]>>, K4 extends KeyOf<W<W<W<W<T>[K1]>[K2]>[K3]>>, K5 extends KeyOf<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>>, K6 extends MutableKeyOf<W<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>[K5]>> >( k1: Part<W<T>, K1>, k2: Part<W<W<T>[K1]>, K2>, k3: Part<W<W<W<T>[K1]>[K2]>, K3>, k4: Part<W<W<W<W<T>[K1]>[K2]>[K3]>, K4>, k5: Part<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>, K5>, k6: Part<W<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>[K5]>, K6>, setter: StoreSetter<W<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>[K5]>[K6], [K6, K5, K4, K3, K2, K1]> ): void; < K1 extends KeyOf<W<T>>, K2 extends KeyOf<W<W<T>[K1]>>, K3 extends KeyOf<W<W<W<T>[K1]>[K2]>>, K4 extends KeyOf<W<W<W<W<T>[K1]>[K2]>[K3]>>, K5 extends MutableKeyOf<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>> >( k1: Part<W<T>, K1>, k2: Part<W<W<T>[K1]>, K2>, k3: Part<W<W<W<T>[K1]>[K2]>, K3>, k4: Part<W<W<W<W<T>[K1]>[K2]>[K3]>, K4>, k5: Part<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>, K5>, setter: StoreSetter<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>[K5], [K5, K4, K3, K2, K1]> ): void; < K1 extends KeyOf<W<T>>, K2 extends KeyOf<W<W<T>[K1]>>, K3 extends KeyOf<W<W<W<T>[K1]>[K2]>>, K4 extends MutableKeyOf<W<W<W<W<T>[K1]>[K2]>[K3]>> >( k1: Part<W<T>, K1>, k2: Part<W<W<T>[K1]>, K2>, k3: Part<W<W<W<T>[K1]>[K2]>, K3>, k4: Part<W<W<W<W<T>[K1]>[K2]>[K3]>, K4>, setter: StoreSetter<W<W<W<W<T>[K1]>[K2]>[K3]>[K4], [K4, K3, K2, K1]> ): void; < K1 extends KeyOf<W<T>>, K2 extends KeyOf<W<W<T>[K1]>>, K3 extends MutableKeyOf<W<W<W<T>[K1]>[K2]>> >( k1: Part<W<T>, K1>, k2: Part<W<W<T>[K1]>, K2>, k3: Part<W<W<W<T>[K1]>[K2]>, K3>, setter: StoreSetter<W<W<W<T>[K1]>[K2]>[K3], [K3, K2, K1]> ): void; <K1 extends KeyOf<W<T>>, K2 extends MutableKeyOf<W<W<T>[K1]>>>( k1: Part<W<T>, K1>, k2: Part<W<W<T>[K1]>, K2>, setter: StoreSetter<W<W<T>[K1]>[K2], [K2, K1]> ): void; <K1 extends MutableKeyOf<W<T>>>(k1: Part<W<T>, K1>, setter: StoreSetter<W<T>[K1], [K1]>): void; (setter: StoreSetter<T, []>): void; < K1 extends KeyOf<W<T>>, K2 extends KeyOf<W<W<T>[K1]>>, K3 extends KeyOf<W<W<W<T>[K1]>[K2]>>, K4 extends KeyOf<W<W<W<W<T>[K1]>[K2]>[K3]>>, K5 extends KeyOf<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>>, K6 extends KeyOf<W<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>[K5]>>, K7 extends KeyOf<W<W<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>[K5]>[K6]>> >( k1: Part<W<T>, K1>, k2: Part<W<W<T>[K1]>, K2>, k3: Part<W<W<W<T>[K1]>[K2]>, K3>, k4: Part<W<W<W<W<T>[K1]>[K2]>[K3]>, K4>, k5: Part<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>, K5>, k6: Part<W<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>[K5]>, K6>, k7: Part<W<W<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>[K5]>[K6]>, K7>, ...rest: Rest<W<W<W<W<W<W<W<T>[K1]>[K2]>[K3]>[K4]>[K5]>[K6]>[K7], [K7, K6, K5, K4, K3, K2, K1]> ): void; } /** * Creates a reactive store that can be read through a proxy object and written with a setter function * * @description https://docs.solidjs.com/reference/store-utilities/create-store */ export declare function createStore<T extends object = {}>( ...[store, options]: {} extends T ? [ store?: T | Store<T>, options?: { name?: string; } ] : [ store: T | Store<T>, options?: { name?: string; } ] ): [get: Store<T>, set: SetStoreFunction<T>]; export {};