deno.land / x / solid_signals@solid-signals@1.3.7 / src / signals / composable / createObject / createObject.ts

createObject.ts
نووسراو ببینە
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import { createSignal, Signal } from "solid-js";import { SignalOptions } from "solid-js/types/reactive/signal";import { signalExtender } from "../../../utils/signal.js";
type AnyObject = Record<any, any>;
declare namespace createObject { export type Extensions<T> = [ {}, { /** * Shallow merges state with updates * @param updates - New properties to be set */ update(updates: Partial<T> | ((state: T) => Partial<T>)): void; } ]; export type Type< T extends {}, Base extends [{}, {}] = [{}, {}] > = createSignal.Extended<T, Base & Extensions<T>>;
export type Result< T extends {}, Base extends [{}, {}] = [{}, {}] > = ReturnType<Type<T, Base>>;}
function createObject<T extends AnyObject>( value: T, options?: SignalOptions<T>) { return createObject.wrap(createSignal(value, options));}
createObject.wrap = <Sig extends Signal<AnyObject>>(signal: Sig) => { type T = Sig extends Signal<infer T> ? T : never;
return signalExtender(signal).extend<createObject.Extensions<T>>( ([state, setState]) => [ {}, { update(updates) { setState(() => ({ ...state(), // TODO: typeof state() is AnyObject, correct this to T ...(typeof updates === "function" ? updates(state() as T) : updates), })); return state(); }, }, ] );};
export default createObject;
solid_signals

Version Info

Tagged at
2 years ago