MCPcopy
hub / github.com/rx-angular/rx-angular / createSignalStateProxy

Function createSignalStateProxy

libs/state/src/lib/signal-state-proxy.ts:16–58  ·  view source on GitHub ↗
(
  state$: Observable<State>,
  stateFn: <K extends keyof State>(k: K) => State[K]
)

Source from the content-addressed store, hash-verified

14};
15
16export function createSignalStateProxy<State extends object>(
17 state$: Observable<State>,
18 stateFn: <K extends keyof State>(k: K) => State[K]
19) {
20 const destroyRef = inject(DestroyRef);
21
22 const signalState = {} as SignalStateProxy<State>;
23 return new Proxy<SignalStateProxy<State>>(signalState, {
24 get<K extends keyof State>(
25 target: SignalStateProxy<State>,
26 p: K | string | symbol
27 ): Signal<State[K]> {
28 let _signal = target[p as K];
29 if (!_signal) {
30 const val = stateFn(p as K);
31 _signal = signal(val);
32 target[p as K] = _signal;
33 state$
34 .pipe(select(p as K), takeUntilDestroyed(destroyRef))
35 .subscribe((val) => (_signal as WritableSignal<State[K]>).set(val));
36 }
37 return _signal;
38 },
39 has<K extends keyof State>(
40 target: SignalStateProxy<State>,
41 prop: K | string | symbol
42 ) {
43 return !!target[prop as K];
44 },
45 ownKeys(target) {
46 return [...Reflect.ownKeys(target)];
47 },
48 getOwnPropertyDescriptor(target, key) {
49 return {
50 enumerable: true,
51 configurable: true,
52 };
53 },
54 set(): boolean {
55 return true;
56 },
57 });
58}

Callers 1

subscribeMethod · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected