deno.land / x / solid_signals@solid-signals@1.3.7 / src / signals / composable / createSet / createSet.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
import { createSignal } from "solid-js";import { Signal, SignalOptions } from "solid-js/types/reactive/signal";import { getNativeExtensions, NativeMutators, signalExtender,} from "../../../utils/signal.js";
const setMutators = ["add", "delete", "clear"] as const;
type AnySet = Set<any>;
declare namespace createSet { export type Extensions<T extends AnySet> = [ {}, NativeMutators<T, typeof setMutators[number]> ]; export type Type< T extends AnySet, Base extends [{}, {}] = [{}, {}] > = createSignal.Extended<T, Base & Extensions<T>>;
export type Result< T extends AnySet, Base extends [{}, {}] = [{}, {}] > = ReturnType<Type<T, Base>>;}
function createSet<T = any>( value?: Set<T> | T[], options?: SignalOptions<Set<T>>) { return createSet.wrap(createSignal(new Set(value), options));}
createSet.wrap = <Sig extends Signal<AnySet>>(signal: Sig) => { type T = Sig extends Signal<infer T> ? T : never;
return signalExtender(signal).extend<createSet.Extensions<T>>( ([state, setState]) => [ {}, { ...getNativeExtensions( () => new Set(state()) as T, setState, setMutators ), // Optimization: `clear` does not need state copy clear() { setState(new Set()); }, }, ] );};
export default createSet;
solid_signals

Version Info

Tagged at
2 years ago