@valentin30/signal 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +113 -163
- package/dist/index.d.ts +26 -26
- package/dist/index.js +38 -22
- package/dist/index.mjs +37 -22
- package/package.json +2 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,203 +1,153 @@
|
|
|
1
|
-
type Maybe<T> = T | null | undefined
|
|
1
|
+
type Maybe<T> = T | null | undefined;
|
|
2
2
|
|
|
3
3
|
type Factory<Fn extends FactoryFunction> = Fn & {
|
|
4
|
-
factory(factory: Maybe<Fn>): void
|
|
5
|
-
default(factory: Maybe<Fn>): void
|
|
6
|
-
configured(): boolean
|
|
7
|
-
}
|
|
8
|
-
type FactoryFunction = (...args: any[]) => any
|
|
4
|
+
factory(factory: Maybe<Fn>): void;
|
|
5
|
+
default(factory: Maybe<Fn>): void;
|
|
6
|
+
configured(): boolean;
|
|
7
|
+
};
|
|
8
|
+
type FactoryFunction = (...args: any[]) => any;
|
|
9
9
|
|
|
10
10
|
interface Collector$1<T> {
|
|
11
|
-
add(value: T): void
|
|
12
|
-
collect(callback: () => void): Readonly<Set<T
|
|
13
|
-
}
|
|
14
|
-
interface CollectorFactoryFunction {
|
|
15
|
-
<T>(): Collector$1<T>
|
|
11
|
+
add(value: T): void;
|
|
12
|
+
collect(callback: () => void): Readonly<Set<T>>;
|
|
16
13
|
}
|
|
17
|
-
type
|
|
18
|
-
|
|
19
|
-
declare const collector$1: Factory<CollectorFactoryFunction>
|
|
14
|
+
type CollectorFactoryFunction = <T>() => Collector$1<T>;
|
|
15
|
+
declare const collector$1: Factory<CollectorFactoryFunction>;
|
|
20
16
|
|
|
21
|
-
type Equals<T> = (value: T, other: T) => boolean
|
|
17
|
+
type Equals<T> = (value: T, other: T) => boolean;
|
|
22
18
|
interface Comparable<T> {
|
|
23
|
-
equals(other: T): boolean
|
|
19
|
+
equals(other: T): boolean;
|
|
24
20
|
}
|
|
25
21
|
|
|
26
22
|
interface Reader<T> {
|
|
27
|
-
read(): T
|
|
23
|
+
read(): T;
|
|
28
24
|
}
|
|
29
25
|
|
|
30
|
-
type Callback = () => void
|
|
26
|
+
type Callback = () => void;
|
|
31
27
|
|
|
32
28
|
interface Subscription {
|
|
33
|
-
subscribe(callback: Callback): Callback
|
|
34
|
-
unsubscribe(callback: Callback): void
|
|
29
|
+
subscribe(callback: Callback): Callback;
|
|
30
|
+
unsubscribe(callback: Callback): void;
|
|
35
31
|
}
|
|
36
32
|
|
|
37
33
|
interface Writer<T> {
|
|
38
|
-
write(value: T): void
|
|
34
|
+
write(value: T): void;
|
|
39
35
|
}
|
|
40
36
|
|
|
41
|
-
interface Signal$1<T> extends Reader<T>, Writer<T>, Comparable<T>, Subscription {
|
|
42
|
-
interface ReadonlySignal<T> extends Reader<T>, Comparable<T>, Subscription {}
|
|
43
|
-
interface SignalFactoryFunction {
|
|
44
|
-
<T>(value: T, equals?: Equals<T>): Signal$1<T>
|
|
37
|
+
interface Signal$1<T> extends Reader<T>, Writer<T>, Comparable<T>, Subscription {
|
|
45
38
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
interface ComposedFactoryFunction {
|
|
49
|
-
<T>(compute: () => T, write: (value: T) => void, equals?: Equals<T>): Signal$1<T>
|
|
39
|
+
interface ReadonlySignal<T> extends Reader<T>, Comparable<T>, Subscription {
|
|
50
40
|
}
|
|
51
|
-
|
|
41
|
+
type SignalFactoryFunction = <T>(value: T, equals?: Equals<T>) => Signal$1<T>;
|
|
42
|
+
declare const signal$1: Factory<SignalFactoryFunction>;
|
|
52
43
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
declare const computed$1: Factory<ComputedFactoryFunction>
|
|
44
|
+
type ComposedFactoryFunction = <T>(compute: () => T, write: (value: T) => void, equals?: Equals<T>) => Signal$1<T>;
|
|
45
|
+
declare const composed$1: Factory<ComposedFactoryFunction>;
|
|
57
46
|
|
|
58
|
-
|
|
47
|
+
type ComputedFactoryFunction = <T>(compute: () => T, equals?: Equals<T>) => ReadonlySignal<T>;
|
|
48
|
+
declare const computed$1: Factory<ComputedFactoryFunction>;
|
|
49
|
+
|
|
50
|
+
type Effect = () => void;
|
|
51
|
+
type EffectCallback = (init: boolean) => EffectCleanup | void;
|
|
52
|
+
type EffectCleanup = (destroy: boolean) => void;
|
|
53
|
+
type EffectFactoryFunction = (callback: EffectCallback) => Effect;
|
|
54
|
+
declare const effect$1: Factory<EffectFactoryFunction>;
|
|
55
|
+
|
|
56
|
+
declare function collector<T>(): Collector$1<T>;
|
|
59
57
|
declare class Collector<T> implements Collector$1<T> {
|
|
60
|
-
private values
|
|
61
|
-
constructor(values: Set<T> | null)
|
|
62
|
-
add(value: T): void
|
|
63
|
-
collect(callback: () => void): Set<T
|
|
58
|
+
private values;
|
|
59
|
+
constructor(values: Set<T> | null);
|
|
60
|
+
add(value: T): void;
|
|
61
|
+
collect(callback: () => void): Set<T>;
|
|
64
62
|
}
|
|
65
63
|
|
|
66
|
-
declare function computed<T>(compute: () => T, equals?: Equals<T>): Computed<T
|
|
64
|
+
declare function computed<T>(compute: () => T, equals?: Equals<T>): Computed<T>;
|
|
67
65
|
declare namespace computed {
|
|
68
|
-
var collector: Factory<ComputedCollectorFactoryFunction
|
|
69
|
-
}
|
|
70
|
-
interface ComputedCollectorFactoryFunction {
|
|
71
|
-
(): Maybe<Collector$1<ReadonlySignal<unknown>>>
|
|
66
|
+
var collector: Factory<ComputedCollectorFactoryFunction>;
|
|
72
67
|
}
|
|
68
|
+
type ComputedCollectorFactoryFunction = () => Collector$1<ReadonlySignal<unknown>>;
|
|
73
69
|
declare class Computed<T> implements ReadonlySignal<T> {
|
|
74
|
-
private empty
|
|
75
|
-
private value
|
|
76
|
-
private values
|
|
77
|
-
private dependencies
|
|
78
|
-
private readonly compute
|
|
79
|
-
private readonly equalsFn
|
|
80
|
-
private readonly listeners
|
|
81
|
-
private readonly collector
|
|
82
|
-
constructor(
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
)
|
|
92
|
-
private dirty
|
|
93
|
-
read(): T
|
|
94
|
-
equals(other: T): boolean
|
|
95
|
-
subscribe(callback: Callback): Callback
|
|
96
|
-
unsubscribe(callback: Callback): void
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
declare function composed<T>(compute: () => T, write: (value: T) => void, equals?: Equals<T>): Composed<T>
|
|
70
|
+
private empty;
|
|
71
|
+
private value;
|
|
72
|
+
private values;
|
|
73
|
+
private dependencies;
|
|
74
|
+
private readonly compute;
|
|
75
|
+
private readonly equalsFn;
|
|
76
|
+
private readonly listeners;
|
|
77
|
+
private readonly collector;
|
|
78
|
+
constructor(empty: boolean, value: T | undefined, values: unknown[], dependencies: Set<ReadonlySignal<unknown>>, listeners: Set<Callback>, collector: Collector$1<ReadonlySignal<unknown>>, compute: () => T, equals: Maybe<Equals<T>>);
|
|
79
|
+
private dirty;
|
|
80
|
+
read(): T;
|
|
81
|
+
equals(other: T): boolean;
|
|
82
|
+
subscribe(callback: Callback): Callback;
|
|
83
|
+
unsubscribe(callback: Callback): void;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
declare function composed<T>(compute: () => T, write: (value: T) => void, equals?: Equals<T>): Composed<T>;
|
|
100
87
|
declare namespace composed {
|
|
101
|
-
var collector: Factory<ComposedCollectorFactoryFunction
|
|
102
|
-
}
|
|
103
|
-
interface ComposedCollectorFactoryFunction {
|
|
104
|
-
(): Maybe<Collector$1<ReadonlySignal<unknown>>>
|
|
88
|
+
var collector: Factory<ComposedCollectorFactoryFunction>;
|
|
105
89
|
}
|
|
90
|
+
type ComposedCollectorFactoryFunction = () => Collector$1<ReadonlySignal<unknown>>;
|
|
106
91
|
declare class Composed<T> extends Computed<T> implements Signal$1<T> {
|
|
107
|
-
private readonly writeFn
|
|
108
|
-
constructor(
|
|
109
|
-
|
|
110
|
-
value: T | undefined,
|
|
111
|
-
values: unknown[],
|
|
112
|
-
dependencies: Set<ReadonlySignal<unknown>>,
|
|
113
|
-
listeners: Set<Callback>,
|
|
114
|
-
collector: Collector$1<ReadonlySignal<unknown>>,
|
|
115
|
-
compute: () => T,
|
|
116
|
-
write: (value: T) => void,
|
|
117
|
-
equals: Maybe<Equals<T>>,
|
|
118
|
-
)
|
|
119
|
-
write(value: T): void
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
declare function signal<T>(value: T, equals?: Equals<T>): Signal$1<T>
|
|
123
|
-
declare namespace signal {
|
|
124
|
-
var collector: Factory<SignalCollectorFactoryFunction>
|
|
92
|
+
private readonly writeFn;
|
|
93
|
+
constructor(empty: boolean, value: T | undefined, values: unknown[], dependencies: Set<ReadonlySignal<unknown>>, listeners: Set<Callback>, collector: Collector$1<ReadonlySignal<unknown>>, compute: () => T, write: (value: T) => void, equals: Maybe<Equals<T>>);
|
|
94
|
+
write(value: T): void;
|
|
125
95
|
}
|
|
126
|
-
|
|
127
|
-
|
|
96
|
+
|
|
97
|
+
type EffectCollectorFactoryFunction = () => Collector$1<ReadonlySignal<unknown>>;
|
|
98
|
+
declare function effect(cb: EffectCallback): Callback;
|
|
99
|
+
declare namespace effect {
|
|
100
|
+
var collector: Factory<EffectCollectorFactoryFunction>;
|
|
128
101
|
}
|
|
102
|
+
|
|
103
|
+
declare function signal<T>(value: T, equals?: Equals<T>): Signal$1<T>;
|
|
104
|
+
declare namespace signal {
|
|
105
|
+
var collector: Factory<SignalCollectorFactoryFunction>;
|
|
106
|
+
}
|
|
107
|
+
type SignalCollectorFactoryFunction = () => Maybe<Collector$1<ReadonlySignal<unknown>>>;
|
|
129
108
|
declare class Signal<T> implements Signal$1<T> {
|
|
130
|
-
private value
|
|
131
|
-
private equalsFn
|
|
132
|
-
private listeners
|
|
133
|
-
private collector
|
|
134
|
-
constructor(value: T, equals: Maybe<Equals<T>>, listeners: Set<Callback>, collector: Maybe<Collector$1<ReadonlySignal<unknown>>>)
|
|
135
|
-
read(): T
|
|
136
|
-
write(value: T): void
|
|
137
|
-
equals(other: T): boolean
|
|
138
|
-
subscribe(callback: Callback): Callback
|
|
139
|
-
unsubscribe(callback: Callback): void
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
type index_Collector<T> = Collector<T
|
|
143
|
-
declare const index_Collector: typeof Collector
|
|
144
|
-
type index_Composed<T> = Composed<T
|
|
145
|
-
declare const index_Composed: typeof Composed
|
|
146
|
-
type index_ComposedCollectorFactoryFunction = ComposedCollectorFactoryFunction
|
|
147
|
-
type index_Computed<T> = Computed<T
|
|
148
|
-
declare const index_Computed: typeof Computed
|
|
149
|
-
type index_ComputedCollectorFactoryFunction = ComputedCollectorFactoryFunction
|
|
150
|
-
type
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
declare const
|
|
155
|
-
declare const
|
|
156
|
-
declare const
|
|
109
|
+
private value;
|
|
110
|
+
private equalsFn;
|
|
111
|
+
private listeners;
|
|
112
|
+
private collector;
|
|
113
|
+
constructor(value: T, equals: Maybe<Equals<T>>, listeners: Set<Callback>, collector: Maybe<Collector$1<ReadonlySignal<unknown>>>);
|
|
114
|
+
read(): T;
|
|
115
|
+
write(value: T): void;
|
|
116
|
+
equals(other: T): boolean;
|
|
117
|
+
subscribe(callback: Callback): Callback;
|
|
118
|
+
unsubscribe(callback: Callback): void;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
type index_Collector<T> = Collector<T>;
|
|
122
|
+
declare const index_Collector: typeof Collector;
|
|
123
|
+
type index_Composed<T> = Composed<T>;
|
|
124
|
+
declare const index_Composed: typeof Composed;
|
|
125
|
+
type index_ComposedCollectorFactoryFunction = ComposedCollectorFactoryFunction;
|
|
126
|
+
type index_Computed<T> = Computed<T>;
|
|
127
|
+
declare const index_Computed: typeof Computed;
|
|
128
|
+
type index_ComputedCollectorFactoryFunction = ComputedCollectorFactoryFunction;
|
|
129
|
+
type index_EffectCollectorFactoryFunction = EffectCollectorFactoryFunction;
|
|
130
|
+
type index_Signal<T> = Signal<T>;
|
|
131
|
+
declare const index_Signal: typeof Signal;
|
|
132
|
+
type index_SignalCollectorFactoryFunction = SignalCollectorFactoryFunction;
|
|
133
|
+
declare const index_collector: typeof collector;
|
|
134
|
+
declare const index_composed: typeof composed;
|
|
135
|
+
declare const index_computed: typeof computed;
|
|
136
|
+
declare const index_effect: typeof effect;
|
|
137
|
+
declare const index_signal: typeof signal;
|
|
157
138
|
declare namespace index {
|
|
158
|
-
|
|
159
|
-
index_Collector as Collector,
|
|
160
|
-
index_Composed as Composed,
|
|
161
|
-
type index_ComposedCollectorFactoryFunction as ComposedCollectorFactoryFunction,
|
|
162
|
-
index_Computed as Computed,
|
|
163
|
-
type index_ComputedCollectorFactoryFunction as ComputedCollectorFactoryFunction,
|
|
164
|
-
index_Signal as Signal,
|
|
165
|
-
type index_SignalCollectorFactoryFunction as SignalCollectorFactoryFunction,
|
|
166
|
-
index_collector as collector,
|
|
167
|
-
index_composed as composed,
|
|
168
|
-
index_computed as computed,
|
|
169
|
-
index_signal as signal,
|
|
170
|
-
}
|
|
139
|
+
export { index_Collector as Collector, index_Composed as Composed, type index_ComposedCollectorFactoryFunction as ComposedCollectorFactoryFunction, index_Computed as Computed, type index_ComputedCollectorFactoryFunction as ComputedCollectorFactoryFunction, type index_EffectCollectorFactoryFunction as EffectCollectorFactoryFunction, index_Signal as Signal, type index_SignalCollectorFactoryFunction as SignalCollectorFactoryFunction, index_collector as collector, index_composed as composed, index_computed as computed, index_effect as effect, index_signal as signal };
|
|
171
140
|
}
|
|
172
141
|
|
|
142
|
+
type Arguments<T> = T extends (...args: infer A) => any ? A : never;
|
|
143
|
+
|
|
173
144
|
interface Config {
|
|
174
|
-
collector?: Maybe<CollectorFactoryFunction
|
|
175
|
-
signal?: Maybe<SignalFactoryFunction
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
declare function config(config?: Config): void
|
|
180
|
-
|
|
181
|
-
export {
|
|
182
|
-
type Callback,
|
|
183
|
-
type Collector$1 as Collector,
|
|
184
|
-
type CollectorFactoryFunction,
|
|
185
|
-
type Comparable,
|
|
186
|
-
type ComposedFactoryFunction,
|
|
187
|
-
type ComputedFactoryFunction,
|
|
188
|
-
type Config,
|
|
189
|
-
type Equals,
|
|
190
|
-
type Maybe,
|
|
191
|
-
type Reader,
|
|
192
|
-
type ReadonlySignal,
|
|
193
|
-
type Signal$1 as Signal,
|
|
194
|
-
type SignalFactoryFunction,
|
|
195
|
-
type Subscription,
|
|
196
|
-
type Writer,
|
|
197
|
-
collector$1 as collector,
|
|
198
|
-
composed$1 as composed,
|
|
199
|
-
computed$1 as computed,
|
|
200
|
-
config,
|
|
201
|
-
index as internal,
|
|
202
|
-
signal$1 as signal,
|
|
145
|
+
collector?: Maybe<CollectorFactoryFunction>;
|
|
146
|
+
signal?: Maybe<SignalFactoryFunction>;
|
|
147
|
+
effect?: Maybe<EffectFactoryFunction>;
|
|
148
|
+
computed?: Maybe<ComputedFactoryFunction>;
|
|
149
|
+
composed?: Maybe<ComposedFactoryFunction>;
|
|
203
150
|
}
|
|
151
|
+
declare function config(config?: Config): void;
|
|
152
|
+
|
|
153
|
+
export { type Arguments, type Callback, type Collector$1 as Collector, type CollectorFactoryFunction, type Comparable, type ComposedFactoryFunction, type ComputedFactoryFunction, type Config, type Effect, type EffectCallback, type EffectCleanup, type EffectFactoryFunction, type Equals, type Maybe, type Reader, type ReadonlySignal, type Signal$1 as Signal, type SignalFactoryFunction, type Subscription, type Writer, collector$1 as collector, composed$1 as composed, computed$1 as computed, config, effect$1 as effect, index as internal, signal$1 as signal };
|
package/dist/index.d.ts
CHANGED
|
@@ -11,12 +11,7 @@ interface Collector$1<T> {
|
|
|
11
11
|
add(value: T): void;
|
|
12
12
|
collect(callback: () => void): Readonly<Set<T>>;
|
|
13
13
|
}
|
|
14
|
-
|
|
15
|
-
<T>(): Collector$1<T>;
|
|
16
|
-
}
|
|
17
|
-
type collector_type = typeof collector$1;
|
|
18
|
-
interface collector$1 extends collector_type {
|
|
19
|
-
}
|
|
14
|
+
type CollectorFactoryFunction = <T>() => Collector$1<T>;
|
|
20
15
|
declare const collector$1: Factory<CollectorFactoryFunction>;
|
|
21
16
|
|
|
22
17
|
type Equals<T> = (value: T, other: T) => boolean;
|
|
@@ -43,21 +38,21 @@ interface Signal$1<T> extends Reader<T>, Writer<T>, Comparable<T>, Subscription
|
|
|
43
38
|
}
|
|
44
39
|
interface ReadonlySignal<T> extends Reader<T>, Comparable<T>, Subscription {
|
|
45
40
|
}
|
|
46
|
-
|
|
47
|
-
<T>(value: T, equals?: Equals<T>): Signal$1<T>;
|
|
48
|
-
}
|
|
41
|
+
type SignalFactoryFunction = <T>(value: T, equals?: Equals<T>) => Signal$1<T>;
|
|
49
42
|
declare const signal$1: Factory<SignalFactoryFunction>;
|
|
50
43
|
|
|
51
|
-
|
|
52
|
-
<T>(compute: () => T, write: (value: T) => void, equals?: Equals<T>): Signal$1<T>;
|
|
53
|
-
}
|
|
44
|
+
type ComposedFactoryFunction = <T>(compute: () => T, write: (value: T) => void, equals?: Equals<T>) => Signal$1<T>;
|
|
54
45
|
declare const composed$1: Factory<ComposedFactoryFunction>;
|
|
55
46
|
|
|
56
|
-
|
|
57
|
-
<T>(compute: () => T, equals?: Equals<T>): ReadonlySignal<T>;
|
|
58
|
-
}
|
|
47
|
+
type ComputedFactoryFunction = <T>(compute: () => T, equals?: Equals<T>) => ReadonlySignal<T>;
|
|
59
48
|
declare const computed$1: Factory<ComputedFactoryFunction>;
|
|
60
49
|
|
|
50
|
+
type Effect = () => void;
|
|
51
|
+
type EffectCallback = (init: boolean) => EffectCleanup | void;
|
|
52
|
+
type EffectCleanup = (destroy: boolean) => void;
|
|
53
|
+
type EffectFactoryFunction = (callback: EffectCallback) => Effect;
|
|
54
|
+
declare const effect$1: Factory<EffectFactoryFunction>;
|
|
55
|
+
|
|
61
56
|
declare function collector<T>(): Collector$1<T>;
|
|
62
57
|
declare class Collector<T> implements Collector$1<T> {
|
|
63
58
|
private values;
|
|
@@ -70,9 +65,7 @@ declare function computed<T>(compute: () => T, equals?: Equals<T>): Computed<T>;
|
|
|
70
65
|
declare namespace computed {
|
|
71
66
|
var collector: Factory<ComputedCollectorFactoryFunction>;
|
|
72
67
|
}
|
|
73
|
-
|
|
74
|
-
(): Maybe<Collector$1<ReadonlySignal<unknown>>>;
|
|
75
|
-
}
|
|
68
|
+
type ComputedCollectorFactoryFunction = () => Collector$1<ReadonlySignal<unknown>>;
|
|
76
69
|
declare class Computed<T> implements ReadonlySignal<T> {
|
|
77
70
|
private empty;
|
|
78
71
|
private value;
|
|
@@ -94,22 +87,24 @@ declare function composed<T>(compute: () => T, write: (value: T) => void, equals
|
|
|
94
87
|
declare namespace composed {
|
|
95
88
|
var collector: Factory<ComposedCollectorFactoryFunction>;
|
|
96
89
|
}
|
|
97
|
-
|
|
98
|
-
(): Maybe<Collector$1<ReadonlySignal<unknown>>>;
|
|
99
|
-
}
|
|
90
|
+
type ComposedCollectorFactoryFunction = () => Collector$1<ReadonlySignal<unknown>>;
|
|
100
91
|
declare class Composed<T> extends Computed<T> implements Signal$1<T> {
|
|
101
92
|
private readonly writeFn;
|
|
102
93
|
constructor(empty: boolean, value: T | undefined, values: unknown[], dependencies: Set<ReadonlySignal<unknown>>, listeners: Set<Callback>, collector: Collector$1<ReadonlySignal<unknown>>, compute: () => T, write: (value: T) => void, equals: Maybe<Equals<T>>);
|
|
103
94
|
write(value: T): void;
|
|
104
95
|
}
|
|
105
96
|
|
|
97
|
+
type EffectCollectorFactoryFunction = () => Collector$1<ReadonlySignal<unknown>>;
|
|
98
|
+
declare function effect(cb: EffectCallback): Callback;
|
|
99
|
+
declare namespace effect {
|
|
100
|
+
var collector: Factory<EffectCollectorFactoryFunction>;
|
|
101
|
+
}
|
|
102
|
+
|
|
106
103
|
declare function signal<T>(value: T, equals?: Equals<T>): Signal$1<T>;
|
|
107
104
|
declare namespace signal {
|
|
108
105
|
var collector: Factory<SignalCollectorFactoryFunction>;
|
|
109
106
|
}
|
|
110
|
-
|
|
111
|
-
(): Maybe<Collector$1<ReadonlySignal<unknown>>>;
|
|
112
|
-
}
|
|
107
|
+
type SignalCollectorFactoryFunction = () => Maybe<Collector$1<ReadonlySignal<unknown>>>;
|
|
113
108
|
declare class Signal<T> implements Signal$1<T> {
|
|
114
109
|
private value;
|
|
115
110
|
private equalsFn;
|
|
@@ -131,23 +126,28 @@ type index_ComposedCollectorFactoryFunction = ComposedCollectorFactoryFunction;
|
|
|
131
126
|
type index_Computed<T> = Computed<T>;
|
|
132
127
|
declare const index_Computed: typeof Computed;
|
|
133
128
|
type index_ComputedCollectorFactoryFunction = ComputedCollectorFactoryFunction;
|
|
129
|
+
type index_EffectCollectorFactoryFunction = EffectCollectorFactoryFunction;
|
|
134
130
|
type index_Signal<T> = Signal<T>;
|
|
135
131
|
declare const index_Signal: typeof Signal;
|
|
136
132
|
type index_SignalCollectorFactoryFunction = SignalCollectorFactoryFunction;
|
|
137
133
|
declare const index_collector: typeof collector;
|
|
138
134
|
declare const index_composed: typeof composed;
|
|
139
135
|
declare const index_computed: typeof computed;
|
|
136
|
+
declare const index_effect: typeof effect;
|
|
140
137
|
declare const index_signal: typeof signal;
|
|
141
138
|
declare namespace index {
|
|
142
|
-
export { index_Collector as Collector, index_Composed as Composed, type index_ComposedCollectorFactoryFunction as ComposedCollectorFactoryFunction, index_Computed as Computed, type index_ComputedCollectorFactoryFunction as ComputedCollectorFactoryFunction, index_Signal as Signal, type index_SignalCollectorFactoryFunction as SignalCollectorFactoryFunction, index_collector as collector, index_composed as composed, index_computed as computed, index_signal as signal };
|
|
139
|
+
export { index_Collector as Collector, index_Composed as Composed, type index_ComposedCollectorFactoryFunction as ComposedCollectorFactoryFunction, index_Computed as Computed, type index_ComputedCollectorFactoryFunction as ComputedCollectorFactoryFunction, type index_EffectCollectorFactoryFunction as EffectCollectorFactoryFunction, index_Signal as Signal, type index_SignalCollectorFactoryFunction as SignalCollectorFactoryFunction, index_collector as collector, index_composed as composed, index_computed as computed, index_effect as effect, index_signal as signal };
|
|
143
140
|
}
|
|
144
141
|
|
|
142
|
+
type Arguments<T> = T extends (...args: infer A) => any ? A : never;
|
|
143
|
+
|
|
145
144
|
interface Config {
|
|
146
145
|
collector?: Maybe<CollectorFactoryFunction>;
|
|
147
146
|
signal?: Maybe<SignalFactoryFunction>;
|
|
147
|
+
effect?: Maybe<EffectFactoryFunction>;
|
|
148
148
|
computed?: Maybe<ComputedFactoryFunction>;
|
|
149
149
|
composed?: Maybe<ComposedFactoryFunction>;
|
|
150
150
|
}
|
|
151
151
|
declare function config(config?: Config): void;
|
|
152
152
|
|
|
153
|
-
export { type Callback, type Collector$1 as Collector, type CollectorFactoryFunction, type Comparable, type ComposedFactoryFunction, type ComputedFactoryFunction, type Config, type Equals, type Maybe, type Reader, type ReadonlySignal, type Signal$1 as Signal, type SignalFactoryFunction, type Subscription, type Writer, collector$1 as collector, composed$1 as composed, computed$1 as computed, config, index as internal, signal$1 as signal };
|
|
153
|
+
export { type Arguments, type Callback, type Collector$1 as Collector, type CollectorFactoryFunction, type Comparable, type ComposedFactoryFunction, type ComputedFactoryFunction, type Config, type Effect, type EffectCallback, type EffectCleanup, type EffectFactoryFunction, type Equals, type Maybe, type Reader, type ReadonlySignal, type Signal$1 as Signal, type SignalFactoryFunction, type Subscription, type Writer, collector$1 as collector, composed$1 as composed, computed$1 as computed, config, effect$1 as effect, index as internal, signal$1 as signal };
|
package/dist/index.js
CHANGED
|
@@ -24,6 +24,7 @@ __export(index_exports, {
|
|
|
24
24
|
composed: () => composed,
|
|
25
25
|
computed: () => computed,
|
|
26
26
|
config: () => config,
|
|
27
|
+
effect: () => effect,
|
|
27
28
|
internal: () => internal_exports,
|
|
28
29
|
signal: () => signal
|
|
29
30
|
});
|
|
@@ -57,6 +58,9 @@ var composed = factory("composed");
|
|
|
57
58
|
// src/core/computed.ts
|
|
58
59
|
var computed = factory("computed");
|
|
59
60
|
|
|
61
|
+
// src/core/effect.ts
|
|
62
|
+
var effect = factory("effect");
|
|
63
|
+
|
|
60
64
|
// src/core/signal.ts
|
|
61
65
|
var signal = factory("signal");
|
|
62
66
|
|
|
@@ -70,6 +74,7 @@ __export(internal_exports, {
|
|
|
70
74
|
collector: () => collector2,
|
|
71
75
|
composed: () => composed2,
|
|
72
76
|
computed: () => computed2,
|
|
77
|
+
effect: () => effect2,
|
|
73
78
|
signal: () => signal2
|
|
74
79
|
});
|
|
75
80
|
|
|
@@ -98,9 +103,6 @@ var Collector = class {
|
|
|
98
103
|
|
|
99
104
|
// src/internal/computed.ts
|
|
100
105
|
function computed2(compute, equals) {
|
|
101
|
-
if (!computed2.collector()) {
|
|
102
|
-
throw new Error("computed: collector is not configured.");
|
|
103
|
-
}
|
|
104
106
|
return new Computed(
|
|
105
107
|
true,
|
|
106
108
|
void 0,
|
|
@@ -134,28 +136,20 @@ var Computed = class {
|
|
|
134
136
|
}
|
|
135
137
|
dirty() {
|
|
136
138
|
if (this.empty) return true;
|
|
137
|
-
return Array.from(this.dependencies).some((
|
|
139
|
+
return Array.from(this.dependencies).some((dep, index) => !dep.equals(this.values[index]));
|
|
138
140
|
}
|
|
139
141
|
read() {
|
|
140
142
|
this.collector.add(this);
|
|
141
143
|
if (!this.dirty()) return this.value;
|
|
142
144
|
const current = this.dependencies;
|
|
143
|
-
const next = this.collector.collect(() =>
|
|
144
|
-
this.value = this.compute();
|
|
145
|
-
});
|
|
145
|
+
const next = this.collector.collect(() => this.value = this.compute());
|
|
146
146
|
this.dependencies = next;
|
|
147
|
-
this.values = Array.from(
|
|
147
|
+
this.values = Array.from(next).map((dep) => dep.read());
|
|
148
148
|
this.empty = false;
|
|
149
149
|
if (!current.size && !next.size) return this.value;
|
|
150
150
|
if (!this.listeners.size) return this.value;
|
|
151
|
-
current.forEach((
|
|
152
|
-
|
|
153
|
-
this.listeners.forEach((listener) => dependency.unsubscribe(listener));
|
|
154
|
-
});
|
|
155
|
-
next.forEach((dependency) => {
|
|
156
|
-
if (current.has(dependency)) return;
|
|
157
|
-
this.listeners.forEach((listener) => dependency.subscribe(listener));
|
|
158
|
-
});
|
|
151
|
+
current.forEach((dep) => !next.has(dep) && this.listeners.forEach((listener) => dep.unsubscribe(listener)));
|
|
152
|
+
next.forEach((dep) => !current.has(dep) && this.listeners.forEach((listener) => dep.subscribe(listener)));
|
|
159
153
|
return this.value;
|
|
160
154
|
}
|
|
161
155
|
equals(other) {
|
|
@@ -164,20 +158,17 @@ var Computed = class {
|
|
|
164
158
|
}
|
|
165
159
|
subscribe(callback) {
|
|
166
160
|
this.listeners.add(callback);
|
|
167
|
-
this.dependencies.forEach((
|
|
161
|
+
this.dependencies.forEach((dep) => dep.subscribe(callback));
|
|
168
162
|
return () => this.unsubscribe(callback);
|
|
169
163
|
}
|
|
170
164
|
unsubscribe(callback) {
|
|
171
165
|
this.listeners.delete(callback);
|
|
172
|
-
this.dependencies.forEach((
|
|
166
|
+
this.dependencies.forEach((dep) => dep.unsubscribe(callback));
|
|
173
167
|
}
|
|
174
168
|
};
|
|
175
169
|
|
|
176
170
|
// src/internal/composed.ts
|
|
177
171
|
function composed2(compute, write, equals) {
|
|
178
|
-
if (!composed2.collector()) {
|
|
179
|
-
throw new Error("composed: collector is not configured.");
|
|
180
|
-
}
|
|
181
172
|
return new Composed(
|
|
182
173
|
true,
|
|
183
174
|
void 0,
|
|
@@ -203,6 +194,27 @@ var Composed = class extends Computed {
|
|
|
203
194
|
}
|
|
204
195
|
};
|
|
205
196
|
|
|
197
|
+
// src/internal/effect.ts
|
|
198
|
+
function effect2(cb) {
|
|
199
|
+
let cleanupFn = null;
|
|
200
|
+
let dependencies = effect2.collector().collect(() => cleanupFn = cb(true) ?? null);
|
|
201
|
+
dependencies.forEach((dependency) => dependency.subscribe(callback));
|
|
202
|
+
function callback() {
|
|
203
|
+
if (cleanupFn) cleanupFn(false);
|
|
204
|
+
const next = effect2.collector().collect(() => cleanupFn = cb(false) ?? null);
|
|
205
|
+
next.forEach((dependency) => !dependencies.has(dependency) && dependency.subscribe(callback));
|
|
206
|
+
dependencies.forEach((dependency) => !next.has(dependency) && dependency.unsubscribe(callback));
|
|
207
|
+
dependencies = next;
|
|
208
|
+
}
|
|
209
|
+
return () => {
|
|
210
|
+
dependencies.forEach((dependency) => dependency.unsubscribe(callback));
|
|
211
|
+
dependencies.clear();
|
|
212
|
+
if (cleanupFn) cleanupFn(true);
|
|
213
|
+
cleanupFn = null;
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
effect2.collector = factory("effect.collector");
|
|
217
|
+
|
|
206
218
|
// src/internal/signal.ts
|
|
207
219
|
function signal2(value, equals) {
|
|
208
220
|
return new Signal(value, equals, /* @__PURE__ */ new Set(), signal2.collector());
|
|
@@ -243,8 +255,9 @@ var Signal = class {
|
|
|
243
255
|
|
|
244
256
|
// src/index.ts
|
|
245
257
|
function config(config2 = {}) {
|
|
246
|
-
signal.factory(config2.signal);
|
|
247
258
|
collector.factory(config2.collector);
|
|
259
|
+
signal.factory(config2.signal);
|
|
260
|
+
effect.factory(config2.effect);
|
|
248
261
|
computed.factory(config2.computed);
|
|
249
262
|
composed.factory(config2.composed);
|
|
250
263
|
}
|
|
@@ -254,9 +267,11 @@ function shared() {
|
|
|
254
267
|
return __shared__;
|
|
255
268
|
}
|
|
256
269
|
signal2.collector.default(shared);
|
|
270
|
+
effect2.collector.default(shared);
|
|
257
271
|
computed2.collector.default(shared);
|
|
258
272
|
composed2.collector.default(shared);
|
|
259
273
|
signal.default(signal2);
|
|
274
|
+
effect.default(effect2);
|
|
260
275
|
collector.default(collector2);
|
|
261
276
|
computed.default(computed2);
|
|
262
277
|
composed.default(composed2);
|
|
@@ -266,6 +281,7 @@ composed.default(composed2);
|
|
|
266
281
|
composed,
|
|
267
282
|
computed,
|
|
268
283
|
config,
|
|
284
|
+
effect,
|
|
269
285
|
internal,
|
|
270
286
|
signal
|
|
271
287
|
});
|
package/dist/index.mjs
CHANGED
|
@@ -32,6 +32,9 @@ var composed = factory("composed");
|
|
|
32
32
|
// src/core/computed.ts
|
|
33
33
|
var computed = factory("computed");
|
|
34
34
|
|
|
35
|
+
// src/core/effect.ts
|
|
36
|
+
var effect = factory("effect");
|
|
37
|
+
|
|
35
38
|
// src/core/signal.ts
|
|
36
39
|
var signal = factory("signal");
|
|
37
40
|
|
|
@@ -45,6 +48,7 @@ __export(internal_exports, {
|
|
|
45
48
|
collector: () => collector2,
|
|
46
49
|
composed: () => composed2,
|
|
47
50
|
computed: () => computed2,
|
|
51
|
+
effect: () => effect2,
|
|
48
52
|
signal: () => signal2
|
|
49
53
|
});
|
|
50
54
|
|
|
@@ -73,9 +77,6 @@ var Collector = class {
|
|
|
73
77
|
|
|
74
78
|
// src/internal/computed.ts
|
|
75
79
|
function computed2(compute, equals) {
|
|
76
|
-
if (!computed2.collector()) {
|
|
77
|
-
throw new Error("computed: collector is not configured.");
|
|
78
|
-
}
|
|
79
80
|
return new Computed(
|
|
80
81
|
true,
|
|
81
82
|
void 0,
|
|
@@ -109,28 +110,20 @@ var Computed = class {
|
|
|
109
110
|
}
|
|
110
111
|
dirty() {
|
|
111
112
|
if (this.empty) return true;
|
|
112
|
-
return Array.from(this.dependencies).some((
|
|
113
|
+
return Array.from(this.dependencies).some((dep, index) => !dep.equals(this.values[index]));
|
|
113
114
|
}
|
|
114
115
|
read() {
|
|
115
116
|
this.collector.add(this);
|
|
116
117
|
if (!this.dirty()) return this.value;
|
|
117
118
|
const current = this.dependencies;
|
|
118
|
-
const next = this.collector.collect(() =>
|
|
119
|
-
this.value = this.compute();
|
|
120
|
-
});
|
|
119
|
+
const next = this.collector.collect(() => this.value = this.compute());
|
|
121
120
|
this.dependencies = next;
|
|
122
|
-
this.values = Array.from(
|
|
121
|
+
this.values = Array.from(next).map((dep) => dep.read());
|
|
123
122
|
this.empty = false;
|
|
124
123
|
if (!current.size && !next.size) return this.value;
|
|
125
124
|
if (!this.listeners.size) return this.value;
|
|
126
|
-
current.forEach((
|
|
127
|
-
|
|
128
|
-
this.listeners.forEach((listener) => dependency.unsubscribe(listener));
|
|
129
|
-
});
|
|
130
|
-
next.forEach((dependency) => {
|
|
131
|
-
if (current.has(dependency)) return;
|
|
132
|
-
this.listeners.forEach((listener) => dependency.subscribe(listener));
|
|
133
|
-
});
|
|
125
|
+
current.forEach((dep) => !next.has(dep) && this.listeners.forEach((listener) => dep.unsubscribe(listener)));
|
|
126
|
+
next.forEach((dep) => !current.has(dep) && this.listeners.forEach((listener) => dep.subscribe(listener)));
|
|
134
127
|
return this.value;
|
|
135
128
|
}
|
|
136
129
|
equals(other) {
|
|
@@ -139,20 +132,17 @@ var Computed = class {
|
|
|
139
132
|
}
|
|
140
133
|
subscribe(callback) {
|
|
141
134
|
this.listeners.add(callback);
|
|
142
|
-
this.dependencies.forEach((
|
|
135
|
+
this.dependencies.forEach((dep) => dep.subscribe(callback));
|
|
143
136
|
return () => this.unsubscribe(callback);
|
|
144
137
|
}
|
|
145
138
|
unsubscribe(callback) {
|
|
146
139
|
this.listeners.delete(callback);
|
|
147
|
-
this.dependencies.forEach((
|
|
140
|
+
this.dependencies.forEach((dep) => dep.unsubscribe(callback));
|
|
148
141
|
}
|
|
149
142
|
};
|
|
150
143
|
|
|
151
144
|
// src/internal/composed.ts
|
|
152
145
|
function composed2(compute, write, equals) {
|
|
153
|
-
if (!composed2.collector()) {
|
|
154
|
-
throw new Error("composed: collector is not configured.");
|
|
155
|
-
}
|
|
156
146
|
return new Composed(
|
|
157
147
|
true,
|
|
158
148
|
void 0,
|
|
@@ -178,6 +168,27 @@ var Composed = class extends Computed {
|
|
|
178
168
|
}
|
|
179
169
|
};
|
|
180
170
|
|
|
171
|
+
// src/internal/effect.ts
|
|
172
|
+
function effect2(cb) {
|
|
173
|
+
let cleanupFn = null;
|
|
174
|
+
let dependencies = effect2.collector().collect(() => cleanupFn = cb(true) ?? null);
|
|
175
|
+
dependencies.forEach((dependency) => dependency.subscribe(callback));
|
|
176
|
+
function callback() {
|
|
177
|
+
if (cleanupFn) cleanupFn(false);
|
|
178
|
+
const next = effect2.collector().collect(() => cleanupFn = cb(false) ?? null);
|
|
179
|
+
next.forEach((dependency) => !dependencies.has(dependency) && dependency.subscribe(callback));
|
|
180
|
+
dependencies.forEach((dependency) => !next.has(dependency) && dependency.unsubscribe(callback));
|
|
181
|
+
dependencies = next;
|
|
182
|
+
}
|
|
183
|
+
return () => {
|
|
184
|
+
dependencies.forEach((dependency) => dependency.unsubscribe(callback));
|
|
185
|
+
dependencies.clear();
|
|
186
|
+
if (cleanupFn) cleanupFn(true);
|
|
187
|
+
cleanupFn = null;
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
effect2.collector = factory("effect.collector");
|
|
191
|
+
|
|
181
192
|
// src/internal/signal.ts
|
|
182
193
|
function signal2(value, equals) {
|
|
183
194
|
return new Signal(value, equals, /* @__PURE__ */ new Set(), signal2.collector());
|
|
@@ -218,8 +229,9 @@ var Signal = class {
|
|
|
218
229
|
|
|
219
230
|
// src/index.ts
|
|
220
231
|
function config(config2 = {}) {
|
|
221
|
-
signal.factory(config2.signal);
|
|
222
232
|
collector.factory(config2.collector);
|
|
233
|
+
signal.factory(config2.signal);
|
|
234
|
+
effect.factory(config2.effect);
|
|
223
235
|
computed.factory(config2.computed);
|
|
224
236
|
composed.factory(config2.composed);
|
|
225
237
|
}
|
|
@@ -229,9 +241,11 @@ function shared() {
|
|
|
229
241
|
return __shared__;
|
|
230
242
|
}
|
|
231
243
|
signal2.collector.default(shared);
|
|
244
|
+
effect2.collector.default(shared);
|
|
232
245
|
computed2.collector.default(shared);
|
|
233
246
|
composed2.collector.default(shared);
|
|
234
247
|
signal.default(signal2);
|
|
248
|
+
effect.default(effect2);
|
|
235
249
|
collector.default(collector2);
|
|
236
250
|
computed.default(computed2);
|
|
237
251
|
composed.default(composed2);
|
|
@@ -240,6 +254,7 @@ export {
|
|
|
240
254
|
composed,
|
|
241
255
|
computed,
|
|
242
256
|
config,
|
|
257
|
+
effect,
|
|
243
258
|
internal_exports as internal,
|
|
244
259
|
signal
|
|
245
260
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@valentin30/signal",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
"scripts": {
|
|
12
12
|
"clean": "rimraf dist",
|
|
13
13
|
"build": "npm run clean && tsup",
|
|
14
|
+
"publish": "npm run build && npm publish --access public",
|
|
14
15
|
"dev": "tsup --watch",
|
|
15
16
|
"test": "vitest run",
|
|
16
17
|
"test:watch": "vitest"
|