@valentin30/signal 0.0.6 → 0.0.8

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 CHANGED
@@ -9,17 +9,17 @@ type Factory<Fn extends Function> = Fn & {
9
9
  };
10
10
  declare function factory<Fn extends Function>(name: string): Factory<Fn>;
11
11
 
12
+ type Callback = () => void;
13
+
12
14
  interface Collector$1<T> {
13
15
  add(value: T): void;
14
16
  collecting(): boolean;
15
- collect(callback: () => void): Readonly<Set<T>>;
16
- ignore(callback: () => void): void;
17
+ collect(callback: Callback): Readonly<Set<T>>;
18
+ ignore(callback: Callback): void;
17
19
  }
18
20
  type CollectorFactory = <T>() => Collector$1<T>;
19
21
  declare const collector$1: Factory<CollectorFactory>;
20
22
 
21
- type Callback = () => void;
22
-
23
23
  declare function batch$1(callback: Callback): void;
24
24
  declare function batch$1(callback: Callback, collector: Collector$1<Callback>): void;
25
25
  declare function batch$1(callback: Callback, collector?: Collector$1<Callback>): void;
@@ -34,31 +34,36 @@ declare class Collector<T> implements Collector$1<T> {
34
34
  constructor(values: Set<T> | null);
35
35
  collecting(): boolean;
36
36
  add(value: T): void;
37
- collect(callback: () => void): Set<T>;
38
- ignore(callback: () => void): void;
37
+ collect(callback: Callback): Set<T>;
38
+ ignore(callback: Callback): void;
39
39
  }
40
40
 
41
- type Equals<T> = (value: T, other: T) => boolean;
42
41
  interface Comparable<T> {
43
42
  equals(other: T): boolean;
44
43
  }
45
44
 
46
- interface Reader<T> {
45
+ interface Readable<T> {
47
46
  read(): T;
48
47
  }
49
48
 
50
- interface Subscription {
49
+ interface Subscribable {
51
50
  subscribe(callback: Callback): Callback;
52
51
  unsubscribe(callback: Callback): void;
53
52
  }
54
53
 
55
- interface Writer<T> {
54
+ interface Writable<T> {
56
55
  write(value: T): void;
57
56
  }
58
57
 
59
- interface Signal$1<T> extends Reader<T>, Writer<T>, Comparable<T>, Subscription {
58
+ type Equals<T> = (value: T, other: T) => boolean;
59
+
60
+ interface Peekable<T> {
61
+ peek(): T;
60
62
  }
61
- interface ReadonlySignal<T> extends Reader<T>, Comparable<T>, Subscription {
63
+
64
+ interface Signal$1<T> extends Readable<T>, Writable<T>, Peekable<T>, Comparable<T>, Subscribable {
65
+ }
66
+ interface ReadonlySignal<T> extends Readable<T>, Peekable<T>, Comparable<T>, Subscribable {
62
67
  }
63
68
  type SignalFactory = <T>(value: T, equals?: Equals<T>) => Signal$1<T>;
64
69
  declare const signal$1: Factory<SignalFactory>;
@@ -72,6 +77,7 @@ declare class Computed<T> implements ReadonlySignal<T> {
72
77
  #private;
73
78
  constructor(empty: boolean, value: T | undefined, values: [ReadonlySignal<unknown>, unknown][], dependencies: Set<ReadonlySignal<unknown>>, listeners: Set<Callback>, collector: Collector$1<ReadonlySignal<unknown>>, compute: () => T, equals: Maybe<Equals<T>>);
74
79
  read(): T;
80
+ peek(): T;
75
81
  equals(other: T): boolean;
76
82
  subscribe(callback: Callback): Callback;
77
83
  unsubscribe(callback: Callback): void;
@@ -114,6 +120,11 @@ declare namespace ignore$1 {
114
120
  }
115
121
  type IgnoreCollectorFactory = () => Collector$1<ReadonlySignal<unknown>>;
116
122
 
123
+ declare const shared: {
124
+ batcher(): Collector$1<Callback>;
125
+ collector(): Collector$1<ReadonlySignal<unknown>>;
126
+ };
127
+
117
128
  type SignalBatcherFactory = () => Collector$1<Callback>;
118
129
  type SignalCollectorFactory = () => Collector$1<ReadonlySignal<unknown>>;
119
130
  declare function signal<T>(value: T, equals?: Equals<T>): Signal$1<T>;
@@ -125,6 +136,7 @@ declare class Signal<T> implements Signal$1<T> {
125
136
  #private;
126
137
  constructor(value: T, equals: Maybe<Equals<T>>, listeners: Set<Callback>, batcher: Collector$1<Callback>, collector: Collector$1<ReadonlySignal<unknown>>);
127
138
  read(): T;
139
+ peek(): T;
128
140
  write(value: T): void;
129
141
  equals(other: T): boolean;
130
142
  subscribe(callback: Callback): Callback;
@@ -149,13 +161,12 @@ type index_SignalBatcherFactory = SignalBatcherFactory;
149
161
  type index_SignalCollectorFactory = SignalCollectorFactory;
150
162
  declare const index_collector: typeof collector;
151
163
  declare const index_effect: typeof effect;
164
+ declare const index_shared: typeof shared;
152
165
  declare const index_signal: typeof signal;
153
166
  declare namespace index {
154
- export { type index_BatchCollectorFactory as BatchCollectorFactory, index_Collector as Collector, index_Composed as Composed, type index_ComposedBatcherFactory as ComposedBatcherFactory, type index_ComposedCollectorFactory as ComposedCollectorFactory, index_Computed as Computed, type index_ComputedCollectorFactory as ComputedCollectorFactory, type index_EffectCollectorFactory as EffectCollectorFactory, type Ignore$1 as Ignore, type index_IgnoreCollectorFactory as IgnoreCollectorFactory, index_Signal as Signal, type index_SignalBatcherFactory as SignalBatcherFactory, type index_SignalCollectorFactory as SignalCollectorFactory, batch$1 as batch, index_collector as collector, composed$1 as composed, computed$1 as computed, index_effect as effect, ignore$1 as ignore, index_signal as signal };
167
+ export { type index_BatchCollectorFactory as BatchCollectorFactory, index_Collector as Collector, index_Composed as Composed, type index_ComposedBatcherFactory as ComposedBatcherFactory, type index_ComposedCollectorFactory as ComposedCollectorFactory, index_Computed as Computed, type index_ComputedCollectorFactory as ComputedCollectorFactory, type index_EffectCollectorFactory as EffectCollectorFactory, type Ignore$1 as Ignore, type index_IgnoreCollectorFactory as IgnoreCollectorFactory, index_Signal as Signal, type index_SignalBatcherFactory as SignalBatcherFactory, type index_SignalCollectorFactory as SignalCollectorFactory, batch$1 as batch, index_collector as collector, composed$1 as composed, computed$1 as computed, index_effect as effect, ignore$1 as ignore, index_shared as shared, index_signal as signal };
155
168
  }
156
169
 
157
- type Arguments<T> = T extends (...args: infer A) => any ? A : never;
158
-
159
170
  interface Batch {
160
171
  (callback: Callback): void;
161
172
  (callback: Callback, collector: Collector$1<Callback>): void;
@@ -187,9 +198,4 @@ interface Config {
187
198
  }
188
199
  declare function config(config?: Config): void;
189
200
 
190
- declare const shared: {
191
- batcher(): Collector$1<Callback>;
192
- collector(): Collector$1<ReadonlySignal<unknown>>;
193
- };
194
-
195
- export { type Arguments, type Batch, type Callback, type Collector$1 as Collector, type CollectorFactory, type Comparable, type ComposedFactory, type ComputedFactory, type Config, type Effect, type EffectCallback, type EffectCleanup, type Equals, type Factory, type Function, type Ignore, type Maybe, type Reader, type ReadonlySignal, type Signal$1 as Signal, type SignalFactory, type Subscription, type Writer, batch, collector$1 as collector, composed, computed, config, effect$1 as effect, factory, ignore, index as internal, shared, signal$1 as signal };
201
+ export { type Batch, type Callback, type Collector$1 as Collector, type CollectorFactory, type Comparable, type ComposedFactory, type ComputedFactory, type Config, type Effect, type EffectCallback, type EffectCleanup, type Equals, type Factory, type Function, type Ignore, type Maybe, type Peekable, type Readable, type ReadonlySignal, type Signal$1 as Signal, type SignalFactory, type Subscribable, type Writable, batch, collector$1 as collector, composed, computed, config, effect$1 as effect, factory, ignore, index as internal, signal$1 as signal };
package/dist/index.d.ts CHANGED
@@ -9,17 +9,17 @@ type Factory<Fn extends Function> = Fn & {
9
9
  };
10
10
  declare function factory<Fn extends Function>(name: string): Factory<Fn>;
11
11
 
12
+ type Callback = () => void;
13
+
12
14
  interface Collector$1<T> {
13
15
  add(value: T): void;
14
16
  collecting(): boolean;
15
- collect(callback: () => void): Readonly<Set<T>>;
16
- ignore(callback: () => void): void;
17
+ collect(callback: Callback): Readonly<Set<T>>;
18
+ ignore(callback: Callback): void;
17
19
  }
18
20
  type CollectorFactory = <T>() => Collector$1<T>;
19
21
  declare const collector$1: Factory<CollectorFactory>;
20
22
 
21
- type Callback = () => void;
22
-
23
23
  declare function batch$1(callback: Callback): void;
24
24
  declare function batch$1(callback: Callback, collector: Collector$1<Callback>): void;
25
25
  declare function batch$1(callback: Callback, collector?: Collector$1<Callback>): void;
@@ -34,31 +34,36 @@ declare class Collector<T> implements Collector$1<T> {
34
34
  constructor(values: Set<T> | null);
35
35
  collecting(): boolean;
36
36
  add(value: T): void;
37
- collect(callback: () => void): Set<T>;
38
- ignore(callback: () => void): void;
37
+ collect(callback: Callback): Set<T>;
38
+ ignore(callback: Callback): void;
39
39
  }
40
40
 
41
- type Equals<T> = (value: T, other: T) => boolean;
42
41
  interface Comparable<T> {
43
42
  equals(other: T): boolean;
44
43
  }
45
44
 
46
- interface Reader<T> {
45
+ interface Readable<T> {
47
46
  read(): T;
48
47
  }
49
48
 
50
- interface Subscription {
49
+ interface Subscribable {
51
50
  subscribe(callback: Callback): Callback;
52
51
  unsubscribe(callback: Callback): void;
53
52
  }
54
53
 
55
- interface Writer<T> {
54
+ interface Writable<T> {
56
55
  write(value: T): void;
57
56
  }
58
57
 
59
- interface Signal$1<T> extends Reader<T>, Writer<T>, Comparable<T>, Subscription {
58
+ type Equals<T> = (value: T, other: T) => boolean;
59
+
60
+ interface Peekable<T> {
61
+ peek(): T;
60
62
  }
61
- interface ReadonlySignal<T> extends Reader<T>, Comparable<T>, Subscription {
63
+
64
+ interface Signal$1<T> extends Readable<T>, Writable<T>, Peekable<T>, Comparable<T>, Subscribable {
65
+ }
66
+ interface ReadonlySignal<T> extends Readable<T>, Peekable<T>, Comparable<T>, Subscribable {
62
67
  }
63
68
  type SignalFactory = <T>(value: T, equals?: Equals<T>) => Signal$1<T>;
64
69
  declare const signal$1: Factory<SignalFactory>;
@@ -72,6 +77,7 @@ declare class Computed<T> implements ReadonlySignal<T> {
72
77
  #private;
73
78
  constructor(empty: boolean, value: T | undefined, values: [ReadonlySignal<unknown>, unknown][], dependencies: Set<ReadonlySignal<unknown>>, listeners: Set<Callback>, collector: Collector$1<ReadonlySignal<unknown>>, compute: () => T, equals: Maybe<Equals<T>>);
74
79
  read(): T;
80
+ peek(): T;
75
81
  equals(other: T): boolean;
76
82
  subscribe(callback: Callback): Callback;
77
83
  unsubscribe(callback: Callback): void;
@@ -114,6 +120,11 @@ declare namespace ignore$1 {
114
120
  }
115
121
  type IgnoreCollectorFactory = () => Collector$1<ReadonlySignal<unknown>>;
116
122
 
123
+ declare const shared: {
124
+ batcher(): Collector$1<Callback>;
125
+ collector(): Collector$1<ReadonlySignal<unknown>>;
126
+ };
127
+
117
128
  type SignalBatcherFactory = () => Collector$1<Callback>;
118
129
  type SignalCollectorFactory = () => Collector$1<ReadonlySignal<unknown>>;
119
130
  declare function signal<T>(value: T, equals?: Equals<T>): Signal$1<T>;
@@ -125,6 +136,7 @@ declare class Signal<T> implements Signal$1<T> {
125
136
  #private;
126
137
  constructor(value: T, equals: Maybe<Equals<T>>, listeners: Set<Callback>, batcher: Collector$1<Callback>, collector: Collector$1<ReadonlySignal<unknown>>);
127
138
  read(): T;
139
+ peek(): T;
128
140
  write(value: T): void;
129
141
  equals(other: T): boolean;
130
142
  subscribe(callback: Callback): Callback;
@@ -149,13 +161,12 @@ type index_SignalBatcherFactory = SignalBatcherFactory;
149
161
  type index_SignalCollectorFactory = SignalCollectorFactory;
150
162
  declare const index_collector: typeof collector;
151
163
  declare const index_effect: typeof effect;
164
+ declare const index_shared: typeof shared;
152
165
  declare const index_signal: typeof signal;
153
166
  declare namespace index {
154
- export { type index_BatchCollectorFactory as BatchCollectorFactory, index_Collector as Collector, index_Composed as Composed, type index_ComposedBatcherFactory as ComposedBatcherFactory, type index_ComposedCollectorFactory as ComposedCollectorFactory, index_Computed as Computed, type index_ComputedCollectorFactory as ComputedCollectorFactory, type index_EffectCollectorFactory as EffectCollectorFactory, type Ignore$1 as Ignore, type index_IgnoreCollectorFactory as IgnoreCollectorFactory, index_Signal as Signal, type index_SignalBatcherFactory as SignalBatcherFactory, type index_SignalCollectorFactory as SignalCollectorFactory, batch$1 as batch, index_collector as collector, composed$1 as composed, computed$1 as computed, index_effect as effect, ignore$1 as ignore, index_signal as signal };
167
+ export { type index_BatchCollectorFactory as BatchCollectorFactory, index_Collector as Collector, index_Composed as Composed, type index_ComposedBatcherFactory as ComposedBatcherFactory, type index_ComposedCollectorFactory as ComposedCollectorFactory, index_Computed as Computed, type index_ComputedCollectorFactory as ComputedCollectorFactory, type index_EffectCollectorFactory as EffectCollectorFactory, type Ignore$1 as Ignore, type index_IgnoreCollectorFactory as IgnoreCollectorFactory, index_Signal as Signal, type index_SignalBatcherFactory as SignalBatcherFactory, type index_SignalCollectorFactory as SignalCollectorFactory, batch$1 as batch, index_collector as collector, composed$1 as composed, computed$1 as computed, index_effect as effect, ignore$1 as ignore, index_shared as shared, index_signal as signal };
155
168
  }
156
169
 
157
- type Arguments<T> = T extends (...args: infer A) => any ? A : never;
158
-
159
170
  interface Batch {
160
171
  (callback: Callback): void;
161
172
  (callback: Callback, collector: Collector$1<Callback>): void;
@@ -187,9 +198,4 @@ interface Config {
187
198
  }
188
199
  declare function config(config?: Config): void;
189
200
 
190
- declare const shared: {
191
- batcher(): Collector$1<Callback>;
192
- collector(): Collector$1<ReadonlySignal<unknown>>;
193
- };
194
-
195
- export { type Arguments, type Batch, type Callback, type Collector$1 as Collector, type CollectorFactory, type Comparable, type ComposedFactory, type ComputedFactory, type Config, type Effect, type EffectCallback, type EffectCleanup, type Equals, type Factory, type Function, type Ignore, type Maybe, type Reader, type ReadonlySignal, type Signal$1 as Signal, type SignalFactory, type Subscription, type Writer, batch, collector$1 as collector, composed, computed, config, effect$1 as effect, factory, ignore, index as internal, shared, signal$1 as signal };
201
+ export { type Batch, type Callback, type Collector$1 as Collector, type CollectorFactory, type Comparable, type ComposedFactory, type ComputedFactory, type Config, type Effect, type EffectCallback, type EffectCleanup, type Equals, type Factory, type Function, type Ignore, type Maybe, type Peekable, type Readable, type ReadonlySignal, type Signal$1 as Signal, type SignalFactory, type Subscribable, type Writable, batch, collector$1 as collector, composed, computed, config, effect$1 as effect, factory, ignore, index as internal, signal$1 as signal };
package/dist/index.js CHANGED
@@ -29,7 +29,6 @@ __export(index_exports, {
29
29
  factory: () => factory,
30
30
  ignore: () => ignore,
31
31
  internal: () => internal_exports,
32
- shared: () => shared,
33
32
  signal: () => signal
34
33
  });
35
34
  module.exports = __toCommonJS(index_exports);
@@ -67,27 +66,13 @@ var effect = factory("effect");
67
66
  // src/core/ignore.ts
68
67
  var ignore = factory("ignore");
69
68
 
70
- // src/core/shared.ts
71
- var __batcher__ = null;
72
- var __collector__ = null;
73
- var shared = {
74
- batcher() {
75
- if (!__batcher__) __batcher__ = collector();
76
- return __batcher__;
77
- },
78
- collector() {
79
- if (!__collector__) __collector__ = collector();
80
- return __collector__;
81
- }
82
- };
83
-
84
69
  // src/core/signal.ts
85
70
  var signal = factory("signal");
86
71
 
87
72
  // src/internal/index.ts
88
73
  var internal_exports = {};
89
74
  __export(internal_exports, {
90
- Collector: () => Collector2,
75
+ Collector: () => Collector,
91
76
  Composed: () => Composed,
92
77
  Computed: () => Computed,
93
78
  Signal: () => Signal,
@@ -97,6 +82,7 @@ __export(internal_exports, {
97
82
  computed: () => computed2,
98
83
  effect: () => effect2,
99
84
  ignore: () => ignore2,
85
+ shared: () => shared,
100
86
  signal: () => signal2
101
87
  });
102
88
 
@@ -109,9 +95,9 @@ batch2.collector = factory("batch.collector");
109
95
 
110
96
  // src/internal/collector.ts
111
97
  function collector2() {
112
- return new Collector2(null);
98
+ return new Collector(null);
113
99
  }
114
- var Collector2 = class {
100
+ var Collector = class {
115
101
  #values;
116
102
  constructor(values) {
117
103
  this.#values = values;
@@ -172,13 +158,12 @@ var Computed = class {
172
158
  this.#compute = compute;
173
159
  this.#equals = equals;
174
160
  }
175
- #dirty() {
176
- if (this.#empty) return true;
177
- return this.#values.some(([dep, value]) => !dep.equals(value));
178
- }
179
161
  read() {
180
162
  this.#collector.add(this);
181
- if (!this.#dirty()) return this.#value;
163
+ return this.peek();
164
+ }
165
+ peek() {
166
+ if (!this.#empty && !this.#values.some(([dep, value]) => !dep.equals(value))) return this.#value;
182
167
  const current = this.#dependencies;
183
168
  const next = this.#collector.collect(() => this.#value = this.#compute());
184
169
  this.#dependencies = next;
@@ -265,6 +250,20 @@ function ignore2(callback, ...args) {
265
250
  }
266
251
  ignore2.collector = factory("signal.collector");
267
252
 
253
+ // src/internal/shared.ts
254
+ var __batcher__ = null;
255
+ var __collector__ = null;
256
+ var shared = {
257
+ batcher() {
258
+ if (!__batcher__) __batcher__ = collector();
259
+ return __batcher__;
260
+ },
261
+ collector() {
262
+ if (!__collector__) __collector__ = collector();
263
+ return __collector__;
264
+ }
265
+ };
266
+
268
267
  // src/internal/signal.ts
269
268
  function signal2(value, equals) {
270
269
  return new Signal(value, equals, /* @__PURE__ */ new Set(), signal2.batcher(), signal2.collector());
@@ -286,6 +285,9 @@ var Signal = class {
286
285
  }
287
286
  read() {
288
287
  this.#collector.add(this);
288
+ return this.peek();
289
+ }
290
+ peek() {
289
291
  return this.#value;
290
292
  }
291
293
  write(value) {
@@ -345,6 +347,5 @@ ignore.default(ignore2);
345
347
  factory,
346
348
  ignore,
347
349
  internal,
348
- shared,
349
350
  signal
350
351
  });
package/dist/index.mjs CHANGED
@@ -37,27 +37,13 @@ var effect = factory("effect");
37
37
  // src/core/ignore.ts
38
38
  var ignore = factory("ignore");
39
39
 
40
- // src/core/shared.ts
41
- var __batcher__ = null;
42
- var __collector__ = null;
43
- var shared = {
44
- batcher() {
45
- if (!__batcher__) __batcher__ = collector();
46
- return __batcher__;
47
- },
48
- collector() {
49
- if (!__collector__) __collector__ = collector();
50
- return __collector__;
51
- }
52
- };
53
-
54
40
  // src/core/signal.ts
55
41
  var signal = factory("signal");
56
42
 
57
43
  // src/internal/index.ts
58
44
  var internal_exports = {};
59
45
  __export(internal_exports, {
60
- Collector: () => Collector2,
46
+ Collector: () => Collector,
61
47
  Composed: () => Composed,
62
48
  Computed: () => Computed,
63
49
  Signal: () => Signal,
@@ -67,6 +53,7 @@ __export(internal_exports, {
67
53
  computed: () => computed2,
68
54
  effect: () => effect2,
69
55
  ignore: () => ignore2,
56
+ shared: () => shared,
70
57
  signal: () => signal2
71
58
  });
72
59
 
@@ -79,9 +66,9 @@ batch2.collector = factory("batch.collector");
79
66
 
80
67
  // src/internal/collector.ts
81
68
  function collector2() {
82
- return new Collector2(null);
69
+ return new Collector(null);
83
70
  }
84
- var Collector2 = class {
71
+ var Collector = class {
85
72
  #values;
86
73
  constructor(values) {
87
74
  this.#values = values;
@@ -142,13 +129,12 @@ var Computed = class {
142
129
  this.#compute = compute;
143
130
  this.#equals = equals;
144
131
  }
145
- #dirty() {
146
- if (this.#empty) return true;
147
- return this.#values.some(([dep, value]) => !dep.equals(value));
148
- }
149
132
  read() {
150
133
  this.#collector.add(this);
151
- if (!this.#dirty()) return this.#value;
134
+ return this.peek();
135
+ }
136
+ peek() {
137
+ if (!this.#empty && !this.#values.some(([dep, value]) => !dep.equals(value))) return this.#value;
152
138
  const current = this.#dependencies;
153
139
  const next = this.#collector.collect(() => this.#value = this.#compute());
154
140
  this.#dependencies = next;
@@ -235,6 +221,20 @@ function ignore2(callback, ...args) {
235
221
  }
236
222
  ignore2.collector = factory("signal.collector");
237
223
 
224
+ // src/internal/shared.ts
225
+ var __batcher__ = null;
226
+ var __collector__ = null;
227
+ var shared = {
228
+ batcher() {
229
+ if (!__batcher__) __batcher__ = collector();
230
+ return __batcher__;
231
+ },
232
+ collector() {
233
+ if (!__collector__) __collector__ = collector();
234
+ return __collector__;
235
+ }
236
+ };
237
+
238
238
  // src/internal/signal.ts
239
239
  function signal2(value, equals) {
240
240
  return new Signal(value, equals, /* @__PURE__ */ new Set(), signal2.batcher(), signal2.collector());
@@ -256,6 +256,9 @@ var Signal = class {
256
256
  }
257
257
  read() {
258
258
  this.#collector.add(this);
259
+ return this.peek();
260
+ }
261
+ peek() {
259
262
  return this.#value;
260
263
  }
261
264
  write(value) {
@@ -314,6 +317,5 @@ export {
314
317
  factory,
315
318
  ignore,
316
319
  internal_exports as internal,
317
- shared,
318
320
  signal
319
321
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@valentin30/signal",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
4
4
  "description": "My take on signals - lightweight reactive primitives inspired by Preact Signals, written in TypeScript.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",