UNPKG

solid-js

Version:

A declarative JavaScript library for building user interfaces.

74 lines (73 loc) 6.01 kB
import { $PROXY, Accessor } from "../.."; export declare const $RAW: unique symbol, $NODE: unique symbol, $NAME: unique symbol; export declare type StoreNode = { [$NODE]?: any; [$PROXY]?: any; [$NAME]?: string; [k: string]: any; [k: number]: any; }; declare type AddSymbolToPrimitive<T> = T extends { [Symbol.toPrimitive]: infer V; } ? { [Symbol.toPrimitive]: V; } : {}; declare type AddSymbolIterator<T> = T extends { [Symbol.iterator]: infer V; } ? { [Symbol.iterator]: V; } : {}; declare type AddSymbolToStringTag<T> = T extends { [Symbol.toStringTag]: infer V; } ? { [Symbol.toStringTag]: V; } : {}; declare type AddCallable<T> = T extends { (...x: any[]): infer V; } ? { (...x: Parameters<T>): V; } : {}; export declare type NotWrappable = string | number | boolean | Function | null; export declare type Store<T> = { [P in keyof T]: T[P] extends object ? Store<T[P]> & T[P] : T[P]; } & { [$RAW]?: T; } & AddSymbolToPrimitive<T> & AddSymbolIterator<T> & AddSymbolToStringTag<T> & AddCallable<T>; export declare function isWrappable(obj: any): boolean; export declare function unwrap<T extends StoreNode>(item: any, set?: Set<unknown>): T; export declare function getDataNodes(target: StoreNode): any; export declare function proxyDescriptor(target: StoreNode, property: string | number | symbol): PropertyDescriptor | undefined; export declare function ownKeys(target: StoreNode): (string | symbol)[]; export declare function createDataNode(): Accessor<void> & { $: () => void; }; export declare function setProperty(state: StoreNode, property: string | number, value: any): void; export declare function updatePath(current: StoreNode, path: any[], traversed?: (number | string)[]): void; export declare type Readonly<T> = { readonly [K in keyof T]: DeepReadonly<T[K]>; }; export declare type DeepReadonly<T> = T extends [infer A] ? Readonly<[A]> : T extends [infer A, infer B] ? Readonly<[A, B]> : T extends [infer A, infer B, infer C] ? Readonly<[A, B, C]> : T extends [infer A, infer B, infer C, infer D] ? Readonly<[A, B, C, D]> : T extends [infer A, infer B, infer C, infer D, infer E] ? Readonly<[A, B, C, D, E]> : T extends [infer A, infer B, infer C, infer D, infer E, infer F] ? Readonly<[A, B, C, D, E, F]> : T extends [infer A, infer B, infer C, infer D, infer E, infer F, infer G] ? Readonly<[A, B, C, D, E, F, G]> : T extends [infer A, infer B, infer C, infer D, infer E, infer F, infer G, infer H] ? Readonly<[A, B, C, D, E, F, G, H]> : T extends object ? Readonly<T> : T; export declare type StoreSetter<T> = Partial<T> | ((prevState: T extends NotWrappable ? T : Store<DeepReadonly<T>>, traversed?: (string | number)[]) => Partial<T | DeepReadonly<T>> | void); export declare type StorePathRange = { from?: number; to?: number; by?: number; }; export declare type ArrayFilterFn<T> = (item: T extends any[] ? T[number] : never, index: number) => boolean; export declare type Part<T> = keyof T | Array<keyof T> | StorePathRange | ArrayFilterFn<T>; export declare type Next<T, K> = K extends keyof T ? T[K] : K extends Array<keyof T> ? T[K[number]] : T extends any[] ? K extends StorePathRange ? T[number] : K extends ArrayFilterFn<T> ? T[number] : never : never; export interface SetStoreFunction<T> { <Setter extends StoreSetter<T>>(...args: [Setter]): void; <K1 extends Part<T>, Setter extends StoreSetter<Next<T, K1>>>(...args: [K1, Setter]): void; <K1 extends Part<T>, K2 extends Part<Next<T, K1>>, Setter extends StoreSetter<Next<Next<T, K1>, K2>>>(...args: [K1, K2, Setter]): void; <K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, Setter extends StoreSetter<Next<Next<Next<T, K1>, K2>, K3>>>(...args: [K1, K2, K3, Setter]): void; <K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, K4 extends Part<Next<Next<Next<T, K1>, K2>, K3>>, Setter extends StoreSetter<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>>>(...args: [K1, K2, K3, K4, Setter]): void; <K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, K4 extends Part<Next<Next<Next<T, K1>, K2>, K3>>, K5 extends Part<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>>, Setter extends StoreSetter<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>>>(...args: [K1, K2, K3, K4, K5, Setter]): void; <K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, K4 extends Part<Next<Next<Next<T, K1>, K2>, K3>>, K5 extends Part<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>>, K6 extends Part<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>>, Setter extends StoreSetter<Next<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>>>(...args: [K1, K2, K3, K4, K5, K6, Setter]): void; <K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, K4 extends Part<Next<Next<Next<T, K1>, K2>, K3>>, K5 extends Part<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>>, K6 extends Part<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>>, K7 extends Part<Next<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>>, Setter extends StoreSetter<Next<Next<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>, K7>>>(...args: [K1, K2, K3, K4, K5, K6, K7, Setter]): void; <K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, K4 extends Part<Next<Next<Next<T, K1>, K2>, K3>>, K5 extends Part<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>>, K6 extends Part<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>>, K7 extends Part<Next<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>>, K8 extends Part<Next<Next<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>, K7>>>(...args: [K1, K2, K3, K4, K5, K6, K7, K8, ...(Part<any> | StoreSetter<any>)[]]): void; } export declare function createStore<T extends StoreNode>(store: T | Store<T>, options?: { name?: string; }): [get: Store<T>, set: SetStoreFunction<T>]; export {};