MCPcopy
hub / github.com/midrender/revideo / CompoundSignalContext

Class CompoundSignalContext

packages/core/src/signals/CompoundSignalContext.ts:24–131  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

22};
23
24export class CompoundSignalContext<
25 TSetterValue,
26 TValue extends TSetterValue,
27 TKeys extends keyof TValue = keyof TValue,
28 TOwner = void,
29> extends SignalContext<TSetterValue, TValue, TOwner> {
30 public readonly signals: [keyof TValue, Signal<any, any, TOwner>][] = [];
31
32 public constructor(
33 private readonly entries: (
34 | TKeys
35 | [keyof TValue, Signal<any, any, TOwner>]
36 )[],
37 parser: (value: TSetterValue) => TValue,
38 initial: SignalValue<TSetterValue>,
39 interpolation: InterpolationFunction<TValue>,
40 owner: TOwner = <TOwner>(<unknown>undefined),
41 extensions: Partial<SignalExtensions<TSetterValue, TValue>> = {},
42 ) {
43 super(undefined, interpolation, owner, parser, extensions);
44 this.parser = parser;
45
46 for (const entry of entries) {
47 let key: keyof TValue;
48 let signal: Signal<any, any, TOwner>;
49 if (Array.isArray(entry)) {
50 [key, signal] = entry;
51 (signal.context as any).owner ??= this;
52 } else {
53 key = entry;
54 signal = new SignalContext(
55 modify(initial, value => parser(value)[entry]),
56 <any>map,
57 owner ?? this.invokable,
58 ).toSignal();
59 }
60 this.signals.push([key, signal]);
61 Object.defineProperty(this.invokable, key, {value: signal});
62 }
63 }
64
65 public override toSignal(): CompoundSignal<
66 TSetterValue,
67 TValue,
68 TKeys,
69 TOwner
70 > {
71 return this.invokable;
72 }
73
74 public override parse(value: TSetterValue): TValue {
75 return this.parser(value);
76 }
77
78 public override getter(): TValue {
79 return this.parse(
80 <TSetterValue>(
81 Object.fromEntries(

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected