@valentin30/signal 0.0.9 → 0.2.0

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.mjs CHANGED
@@ -4,14 +4,74 @@ var __export = (target, all) => {
4
4
  __defProp(target, name, { get: all[name], enumerable: true });
5
5
  };
6
6
 
7
- // src/core/factory.ts
7
+ // src/core/contracts/comparable.ts
8
+ var Equals;
9
+ ((Equals2) => {
10
+ function strict(value, other) {
11
+ if (value === other) return true;
12
+ if (value !== value && other !== other) return true;
13
+ return false;
14
+ }
15
+ Equals2.strict = strict;
16
+ })(Equals || (Equals = {}));
17
+ function comparator(equals = Equals.strict) {
18
+ return { equals };
19
+ }
20
+
21
+ // src/core/contracts/readable.ts
22
+ function reader(read) {
23
+ return { read };
24
+ }
25
+
26
+ // src/core/contracts/writable.ts
27
+ function writer(write) {
28
+ return {
29
+ write(value) {
30
+ const result = write(value);
31
+ if (typeof result === "boolean") return result;
32
+ return true;
33
+ }
34
+ };
35
+ }
36
+
37
+ // src/internal/internal.ts
38
+ var internal_exports = {};
39
+ __export(internal_exports, {
40
+ BasicValue: () => BasicValue,
41
+ BatchWriter: () => BatchWriter,
42
+ CallbackScheduler: () => CallbackScheduler,
43
+ CollectorBasedBatcher: () => CollectorBasedBatcher,
44
+ CollectorController: () => CollectorController,
45
+ Composed: () => Composed,
46
+ ComputedValue: () => ComputedValue,
47
+ DependencyManager: () => DependencyManager,
48
+ EmittingValue: () => EmittingValue,
49
+ Reactive: () => Reactive,
50
+ ScheduledEmitter: () => ScheduledEmitter,
51
+ Snapshot: () => Snapshot
52
+ });
53
+
54
+ // src/utils/utils.ts
55
+ var utils_exports = {};
56
+ __export(utils_exports, {
57
+ call: () => call,
58
+ factory: () => factory,
59
+ singleton: () => singleton
60
+ });
61
+
62
+ // src/utils/call.ts
63
+ function call(callback) {
64
+ callback();
65
+ }
66
+
67
+ // src/utils/factory.ts
8
68
  function factory(name) {
9
69
  let __default__ = null;
10
70
  let __factory__ = null;
11
71
  function object(...args) {
12
72
  if (__factory__) return __factory__(...args);
13
73
  if (__default__) return __default__(...args);
14
- throw new Error(`${name}.factory() not configured!`);
74
+ throw new Error(`${name}::factory() not configured!`);
15
75
  }
16
76
  object.configured = () => __default__ !== null || __factory__ !== null;
17
77
  object.default = (factory2) => {
@@ -23,303 +83,383 @@ function factory(name) {
23
83
  return object;
24
84
  }
25
85
 
26
- // src/core/batch.ts
27
- var batch = factory("batch");
28
-
29
- // src/core/collector.ts
30
- var collector = factory("collector");
31
-
32
- // src/core/composed.ts
33
- var composed = factory("composed");
34
-
35
- // src/core/computed.ts
36
- var computed = factory("computed");
37
-
38
- // src/core/effect.ts
39
- var effect = factory("effect");
40
-
41
- // src/core/ignore.ts
42
- var ignore = factory("ignore");
43
-
44
- // src/core/signal.ts
45
- var signal = factory("signal");
46
-
47
- // src/internal/index.ts
48
- var internal_exports = {};
49
- __export(internal_exports, {
50
- Collector: () => Collector,
51
- Composed: () => Composed,
52
- Computed: () => Computed,
53
- Signal: () => Signal,
54
- batch: () => batch2,
55
- collector: () => collector2,
56
- composed: () => composed2,
57
- computed: () => computed2,
58
- effect: () => effect2,
59
- ignore: () => ignore2,
60
- shared: () => shared,
61
- signal: () => signal2
62
- });
86
+ // src/utils/singleton.ts
87
+ function singleton(factory2) {
88
+ function object() {
89
+ return object.instance ??= factory2();
90
+ }
91
+ object.instance = void 0;
92
+ return object;
93
+ }
63
94
 
64
95
  // src/internal/batch.ts
65
- function batch2(callback, collector3 = batch2.collector()) {
66
- if (collector3.collecting()) return callback();
67
- collector3.collect(callback).forEach((listener) => listener());
68
- }
69
- batch2.collector = factory("batch.collector");
96
+ var CollectorBasedBatcher = class {
97
+ collector;
98
+ constructor(collector) {
99
+ this.collector = collector;
100
+ }
101
+ batch(callback, ...args) {
102
+ if (this.collector.collecting()) return callback(...args);
103
+ const [value, collected] = this.collector.collect(callback, ...args);
104
+ collected.forEach(utils_exports.call);
105
+ return value;
106
+ }
107
+ };
70
108
 
71
109
  // src/internal/collector.ts
72
- function collector2() {
73
- return new Collector(null);
74
- }
75
- var Collector = class {
76
- #values;
77
- constructor(values) {
78
- this.#values = values;
110
+ var CollectorController = class {
111
+ values;
112
+ constructor(values = null) {
113
+ this.values = values;
79
114
  }
80
115
  collecting() {
81
- return this.#values !== null;
116
+ return !!this.values;
82
117
  }
83
118
  add(value) {
84
- if (!this.collecting() || !this.#values) return;
85
- this.#values.add(value);
86
- }
87
- collect(callback) {
88
- const current = this.#values;
89
- this.#values = /* @__PURE__ */ new Set();
90
- callback();
91
- const collected = this.#values;
92
- this.#values = current;
93
- return collected;
94
- }
95
- ignore(callback) {
96
- const current = this.#values;
97
- this.#values = null;
98
- callback();
99
- this.#values = current;
119
+ if (!this.values) return;
120
+ this.values.add(value);
121
+ }
122
+ track(value) {
123
+ if (!this.values) return;
124
+ this.values.add(value);
125
+ }
126
+ collect(callback, ...args) {
127
+ const current = this.values;
128
+ this.values = /* @__PURE__ */ new Set();
129
+ const response = [];
130
+ try {
131
+ response[0] = callback(...args);
132
+ } finally {
133
+ response[1] = this.values;
134
+ this.values = current;
135
+ return response;
136
+ }
137
+ }
138
+ ignore(callback, ...args) {
139
+ const current = this.values;
140
+ this.values = null;
141
+ try {
142
+ return callback(...args);
143
+ } finally {
144
+ this.values = current;
145
+ }
100
146
  }
101
147
  };
102
148
 
103
- // src/internal/computed.ts
104
- function computed2(compute, equals) {
105
- return new Computed(
106
- true,
107
- void 0,
108
- [],
109
- /* @__PURE__ */ new Set(),
110
- /* @__PURE__ */ new Set(),
111
- computed2.collector(),
112
- compute,
113
- equals
114
- );
115
- }
116
- computed2.collector = factory("computed.collector");
117
- var Computed = class {
118
- #empty;
119
- #value;
120
- #values;
121
- #dependencies;
122
- #compute;
123
- #equals;
124
- #listeners;
125
- #collector;
126
- constructor(empty, value, values, dependencies, listeners, collector3, compute, equals) {
127
- this.#empty = empty;
128
- this.#value = value;
129
- this.#values = values;
130
- this.#dependencies = dependencies;
131
- this.#listeners = listeners;
132
- this.#collector = collector3;
133
- this.#compute = compute;
134
- this.#equals = equals;
149
+ // src/internal/composed.ts
150
+ var Composed = class {
151
+ value;
152
+ writer;
153
+ constructor(value, writer2) {
154
+ this.value = value;
155
+ this.writer = writer2;
135
156
  }
136
157
  read() {
137
- this.#collector.add(this);
138
- return this.peek();
158
+ return this.value.read();
139
159
  }
140
160
  peek() {
141
- if (!this.#empty && !this.#values.some(([dep, value]) => !dep.equals(value))) return this.#value;
142
- const current = this.#dependencies;
143
- const next = this.#collector.collect(() => this.#value = this.#compute());
144
- this.#dependencies = next;
145
- this.#values = Array.from(next).map((dep) => [dep, dep.read()]);
146
- this.#empty = false;
147
- if (!current.size && !next.size) return this.#value;
148
- if (!this.#listeners.size) return this.#value;
149
- current.forEach((dep) => !next.has(dep) && this.#listeners.forEach((listener) => dep.unsubscribe(listener)));
150
- next.forEach((dep) => !current.has(dep) && this.#listeners.forEach((listener) => dep.subscribe(listener)));
151
- return this.#value;
161
+ return this.value.peek();
152
162
  }
153
- equals(other) {
154
- if (this.#equals) return this.#equals(this.read(), other);
155
- return this.read() === other;
163
+ write(value) {
164
+ if (this.value.equals(this.peek(), value)) return false;
165
+ return this.writer.write(value);
166
+ }
167
+ equals(...args) {
168
+ const [value, other] = args.length === 1 ? [this.read(), args[0]] : args;
169
+ return this.value.equals(value, other);
156
170
  }
157
171
  subscribe(callback) {
158
- this.#listeners.add(callback);
159
- this.#dependencies.forEach((dep) => dep.subscribe(callback));
160
- return this.unsubscribe.bind(this, callback);
172
+ return this.value.subscribe(callback);
161
173
  }
162
174
  unsubscribe(callback) {
163
- this.#listeners.delete(callback);
164
- this.#dependencies.forEach((dep) => dep.unsubscribe(callback));
175
+ return this.value.unsubscribe(callback);
165
176
  }
166
177
  };
167
178
 
168
- // src/internal/composed.ts
169
- function composed2(compute, write, equals) {
170
- return new Composed(
171
- true,
172
- void 0,
173
- [],
174
- /* @__PURE__ */ new Set(),
175
- /* @__PURE__ */ new Set(),
176
- composed2.batcher(),
177
- composed2.collector(),
178
- compute,
179
- write,
180
- equals
181
- );
182
- }
183
- composed2.batcher = factory("composed.batcher");
184
- composed2.collector = factory("composed.collector");
185
- var Composed = class extends Computed {
186
- #batcher;
187
- #write;
188
- constructor(empty, value, values, dependencies, listeners, batcher, collector3, compute, write, equals) {
189
- super(empty, value, values, dependencies, listeners, collector3, compute, equals);
190
- this.#batcher = batcher;
191
- this.#write = write;
179
+ // src/internal/dependency.ts
180
+ var Snapshot;
181
+ ((Snapshot2) => {
182
+ function changed([value, snapshot]) {
183
+ return !value.equals(value.peek(), snapshot);
192
184
  }
193
- write(value) {
194
- if (this.equals(value)) return;
195
- batch(() => this.#write(value), this.#batcher);
185
+ Snapshot2.changed = changed;
186
+ function from(values) {
187
+ if (!values.size) return [];
188
+ return Array.from(values).map(create);
189
+ }
190
+ Snapshot2.from = from;
191
+ function create(value) {
192
+ return [value, value.peek()];
193
+ }
194
+ })(Snapshot || (Snapshot = {}));
195
+ var DependencyManager = class {
196
+ snapshot;
197
+ dependencies;
198
+ collector;
199
+ listeners;
200
+ constructor(collector, listeners = /* @__PURE__ */ new Set(), dependencies = /* @__PURE__ */ new Set(), snapshot = null) {
201
+ this.collector = collector;
202
+ this.listeners = listeners;
203
+ this.dependencies = dependencies;
204
+ this.snapshot = snapshot;
205
+ }
206
+ changed() {
207
+ if (!this.snapshot) return true;
208
+ return this.snapshot.some(Snapshot.changed);
209
+ }
210
+ track(callback) {
211
+ const [_, dependencies] = this.collector.collect(callback);
212
+ if (!this.dependencies.size && !dependencies.size) return;
213
+ this.snapshot = Snapshot.from(dependencies);
214
+ if (this.equals(dependencies)) return;
215
+ if (this.listeners.size) {
216
+ this.dependencies.forEach((dep) => !dependencies.has(dep) && this.listeners.forEach((cb) => dep.unsubscribe(cb)));
217
+ dependencies.forEach((dep) => !this.dependencies.has(dep) && this.listeners.forEach((cb) => dep.subscribe(cb)));
218
+ }
219
+ this.dependencies = dependencies;
220
+ }
221
+ subscribe(callback) {
222
+ this.listeners.add(callback);
223
+ this.dependencies.forEach((dep) => dep.subscribe(callback));
224
+ return () => this.unsubscribe(callback);
225
+ }
226
+ unsubscribe(callback) {
227
+ this.listeners.delete(callback);
228
+ this.dependencies.forEach((dep) => dep.unsubscribe(callback));
229
+ }
230
+ equals(other) {
231
+ if (this.dependencies === other) return true;
232
+ if (this.dependencies.size !== other.size) return false;
233
+ for (const item of this.dependencies) if (!other.has(item)) return false;
234
+ return true;
196
235
  }
197
236
  };
198
237
 
199
- // src/internal/effect.ts
200
- function effect2(cb) {
201
- let cleanupFn = null;
202
- let dependencies = effect2.collector().collect(() => cleanupFn = cb(true) ?? null);
203
- dependencies.forEach((dependency) => dependency.subscribe(callback));
204
- function callback() {
205
- if (cleanupFn) cleanupFn(false);
206
- const next = effect2.collector().collect(() => cleanupFn = cb(false) ?? null);
207
- next.forEach((dependency) => !dependencies.has(dependency) && dependency.subscribe(callback));
208
- dependencies.forEach((dependency) => !next.has(dependency) && dependency.unsubscribe(callback));
209
- dependencies = next;
210
- }
211
- return () => {
212
- dependencies.forEach((dependency) => dependency.unsubscribe(callback));
213
- dependencies.clear();
214
- if (cleanupFn) cleanupFn(true);
215
- cleanupFn = null;
216
- };
217
- }
218
- effect2.collector = factory("effect.collector");
219
-
220
- // src/internal/ignore.ts
221
- function ignore2(callback, ...args) {
222
- let value;
223
- ignore2.collector().ignore(() => value = typeof callback === "function" ? callback(...args) : callback.read());
224
- return value;
225
- }
226
- ignore2.collector = factory("signal.collector");
227
-
228
- // src/internal/shared.ts
229
- var __batcher__ = null;
230
- var __collector__ = null;
231
- var shared = {
232
- batcher() {
233
- if (!__batcher__) __batcher__ = collector();
234
- return __batcher__;
235
- },
236
- collector() {
237
- if (!__collector__) __collector__ = collector();
238
- return __collector__;
238
+ // src/internal/emitter.ts
239
+ var ScheduledEmitter = class {
240
+ listeners;
241
+ scheduler;
242
+ constructor(scheduler, listeners = /* @__PURE__ */ new Set()) {
243
+ this.scheduler = scheduler;
244
+ this.listeners = listeners;
245
+ }
246
+ emit() {
247
+ this.scheduler.schedule(...this.listeners);
248
+ }
249
+ subscribe(callback) {
250
+ this.listeners.add(callback);
251
+ return () => this.unsubscribe(callback);
252
+ }
253
+ unsubscribe(callback) {
254
+ this.listeners.delete(callback);
239
255
  }
240
256
  };
241
257
 
242
- // src/internal/signal.ts
243
- function signal2(value, equals) {
244
- return new Signal(value, equals, /* @__PURE__ */ new Set(), signal2.batcher(), signal2.collector());
245
- }
246
- signal2.batcher = factory("signal.batcher");
247
- signal2.collector = factory("signal.collector");
248
- var Signal = class {
249
- #value;
250
- #equals;
251
- #listeners;
252
- #batcher;
253
- #collector;
254
- constructor(value, equals, listeners, batcher, collector3) {
255
- this.#value = value;
256
- this.#equals = equals;
257
- this.#listeners = listeners;
258
- this.#batcher = batcher;
259
- this.#collector = collector3;
258
+ // src/internal/reactive.ts
259
+ var Reactive = class {
260
+ value;
261
+ tracker;
262
+ subscription;
263
+ constructor(value, tracker, subscription) {
264
+ this.value = value;
265
+ this.tracker = tracker;
266
+ this.subscription = subscription;
260
267
  }
261
268
  read() {
262
- this.#collector.add(this);
269
+ this.tracker.track(this);
263
270
  return this.peek();
264
271
  }
265
272
  peek() {
266
- return this.#value;
273
+ return this.value.read();
267
274
  }
268
275
  write(value) {
269
- if (this.equals(value)) return;
270
- this.#value = value;
271
- if (this.#batcher.collecting()) this.#listeners.forEach((listener) => this.#batcher.add(listener));
272
- else this.#listeners.forEach((listener) => listener());
276
+ return this.value.write(value);
273
277
  }
274
- equals(other) {
275
- if (this.#equals) return this.#equals(this.#value, other);
276
- return this.#value === other;
278
+ equals(...args) {
279
+ const [value, other] = args.length === 1 ? [this.read(), args[0]] : args;
280
+ return this.value.equals(value, other);
277
281
  }
278
282
  subscribe(callback) {
279
- this.#listeners.add(callback);
280
- return this.unsubscribe.bind(this, callback);
283
+ return this.subscription.subscribe(callback);
281
284
  }
282
285
  unsubscribe(callback) {
283
- this.#listeners.delete(callback);
286
+ return this.subscription.unsubscribe(callback);
284
287
  }
285
288
  };
286
289
 
287
- // src/core/config.ts
288
- function config(config2 = {}) {
289
- collector.factory(config2.collector);
290
- signal.factory(config2.signal);
291
- computed.factory(config2.computed);
292
- composed.factory(config2.composed);
293
- effect.factory(config2.effect);
294
- batch.factory(config2.batch);
295
- ignore.factory(config2.ignore);
290
+ // src/internal/scheduler.ts
291
+ var CallbackScheduler = class {
292
+ collector;
293
+ add;
294
+ constructor(collector) {
295
+ this.collector = collector;
296
+ this.add = this.collector.add.bind(this.collector);
297
+ }
298
+ schedule(...args) {
299
+ if (args.length === 0) return;
300
+ if (!this.collector.collecting()) return args.forEach(utils_exports.call);
301
+ args.forEach(this.add);
302
+ }
303
+ };
304
+
305
+ // src/internal/value.ts
306
+ var BasicValue = class {
307
+ value;
308
+ comparator;
309
+ constructor(value, comparator2) {
310
+ this.value = value;
311
+ this.comparator = comparator2;
312
+ }
313
+ read() {
314
+ return this.value;
315
+ }
316
+ write(value) {
317
+ if (this.comparator.equals(this.value, value)) return false;
318
+ this.value = value;
319
+ return true;
320
+ }
321
+ equals(...args) {
322
+ const [value, other] = args.length === 1 ? [this.read(), args[0]] : args;
323
+ return this.comparator.equals(value, other);
324
+ }
325
+ };
326
+ var EmittingValue = class {
327
+ value;
328
+ emitter;
329
+ constructor(value, emitter) {
330
+ this.value = value;
331
+ this.emitter = emitter;
332
+ }
333
+ read() {
334
+ return this.value.read();
335
+ }
336
+ write(value) {
337
+ const changed = this.value.write(value);
338
+ if (changed) this.emitter.emit();
339
+ return changed;
340
+ }
341
+ equals(...args) {
342
+ const [value, other] = args.length === 1 ? [this.read(), args[0]] : args;
343
+ return this.value.equals(value, other);
344
+ }
345
+ };
346
+ var ComputedValue = class {
347
+ cache;
348
+ computation;
349
+ dependencies;
350
+ constructor(cache, computation, dependencies) {
351
+ this.cache = cache;
352
+ this.computation = computation;
353
+ this.dependencies = dependencies;
354
+ this.recompute = this.recompute.bind(this);
355
+ }
356
+ read() {
357
+ if (this.dependencies.changed()) this.dependencies.track(this.recompute);
358
+ return this.cache.read();
359
+ }
360
+ recompute() {
361
+ this.cache.write(this.computation.read());
362
+ }
363
+ write(_) {
364
+ return false;
365
+ }
366
+ equals(...args) {
367
+ const [value, other] = args.length === 1 ? [this.read(), args[0]] : args;
368
+ return this.cache.equals(value, other);
369
+ }
370
+ };
371
+
372
+ // src/internal/writable.ts
373
+ var BatchWriter = class {
374
+ writer;
375
+ batcher;
376
+ constructor(writer2, batcher) {
377
+ this.writer = writer2;
378
+ this.batcher = batcher;
379
+ }
380
+ write(value) {
381
+ const result = this.batcher.batch(() => this.writer.write(value));
382
+ if (typeof result === "boolean") return result;
383
+ return true;
384
+ }
385
+ };
386
+
387
+ // src/app/index.ts
388
+ function configuration() {
389
+ return __configuration__;
390
+ }
391
+ var __configuration__ = {
392
+ signal: utils_exports.factory("@configuration.signal"),
393
+ computed: utils_exports.factory("@configuration.computed"),
394
+ composed: utils_exports.factory("@configuration.composed"),
395
+ batcher: utils_exports.factory("@configuration.batch"),
396
+ ignorer: utils_exports.factory("@configuration.ignore"),
397
+ // Internal
398
+ scheduler: utils_exports.factory("@configuration.scheduler"),
399
+ tracker: utils_exports.factory("@configuration.tracker"),
400
+ collector: utils_exports.factory("@configuration.collector"),
401
+ dependency_tracker: utils_exports.factory("@configuration.dependency.tracker"),
402
+ dependency_collector: utils_exports.factory("@configuration.dependency.collector"),
403
+ callback_collector: utils_exports.factory("@configuration.callback.collector")
404
+ };
405
+ __configuration__.signal.default((value, equals) => {
406
+ const emitter = new internal_exports.ScheduledEmitter(configuration().scheduler());
407
+ const state = new internal_exports.EmittingValue(new internal_exports.BasicValue(value, comparator(equals)), emitter);
408
+ return new internal_exports.Reactive(state, configuration().tracker(), emitter);
409
+ });
410
+ __configuration__.computed.default((compute, equals) => {
411
+ const dependency = configuration().dependency_tracker();
412
+ const cache = new internal_exports.BasicValue(void 0, comparator(equals));
413
+ const value = new internal_exports.ComputedValue(cache, reader(compute), dependency);
414
+ return new internal_exports.Reactive(value, configuration().tracker(), dependency);
415
+ });
416
+ __configuration__.composed.default(
417
+ (value, write) => new internal_exports.Composed(value, new internal_exports.BatchWriter(writer(write), configuration().batcher()))
418
+ );
419
+ __configuration__.batcher.default(utils_exports.singleton(() => new internal_exports.CollectorBasedBatcher(configuration().callback_collector())));
420
+ __configuration__.ignorer.default(configuration().dependency_collector);
421
+ __configuration__.scheduler.default(utils_exports.singleton(() => new internal_exports.CallbackScheduler(configuration().callback_collector())));
422
+ __configuration__.collector.default(configuration().dependency_collector);
423
+ __configuration__.tracker.default(configuration().dependency_collector);
424
+ __configuration__.dependency_tracker.default(() => new internal_exports.DependencyManager(configuration().collector()));
425
+ __configuration__.dependency_collector.default(utils_exports.singleton(() => new internal_exports.CollectorController()));
426
+ __configuration__.callback_collector.default(utils_exports.singleton(() => new internal_exports.CollectorController()));
427
+
428
+ // src/core/batch.ts
429
+ function batch(callback, ...args) {
430
+ return configuration().batcher().batch(callback, ...args);
296
431
  }
297
432
 
298
- // src/index.ts
299
- signal2.collector.default(shared.collector);
300
- computed2.collector.default(shared.collector);
301
- composed2.collector.default(shared.collector);
302
- effect2.collector.default(shared.collector);
303
- ignore2.collector.default(shared.collector);
304
- signal2.batcher.default(shared.batcher);
305
- composed2.batcher.default(shared.batcher);
306
- batch2.collector.default(shared.batcher);
307
- collector.default(collector2);
308
- signal.default(signal2);
309
- computed.default(computed2);
310
- composed.default(composed2);
311
- effect.default(effect2);
312
- batch.default(batch2);
313
- ignore.default(ignore2);
433
+ // src/core/composed.ts
434
+ function composed(value, write) {
435
+ return configuration().composed(value, write);
436
+ }
437
+
438
+ // src/core/computed.ts
439
+ function computed(compute, equals) {
440
+ return configuration().computed(compute, equals);
441
+ }
442
+
443
+ // src/core/ignore.ts
444
+ function ignore(callback, ...args) {
445
+ return configuration().ignorer().ignore(callback, ...args);
446
+ }
447
+
448
+ // src/core/signal.ts
449
+ function signal(value, equals) {
450
+ return configuration().signal(value, equals);
451
+ }
314
452
  export {
453
+ Equals,
454
+ internal_exports as Internal,
315
455
  batch,
316
- collector,
456
+ comparator,
317
457
  composed,
318
458
  computed,
319
- config,
320
- effect,
321
- factory,
459
+ configuration,
322
460
  ignore,
323
- internal_exports as internal,
324
- signal
461
+ reader,
462
+ signal,
463
+ utils_exports as utils,
464
+ writer
325
465
  };