@valentin30/signal 0.1.0 → 1.0.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.
Files changed (56) hide show
  1. package/.prettierrc +21 -0
  2. package/package.json +86 -8
  3. package/src/core/computed.ts +68 -0
  4. package/src/core/contracts/consumer.ts +3 -0
  5. package/src/core/contracts/source.ts +7 -0
  6. package/src/core/interfaces/consumers.ts +8 -0
  7. package/src/core/interfaces/sources.ts +8 -0
  8. package/src/core/interfaces/value.ts +5 -0
  9. package/src/core/signal.ts +45 -0
  10. package/src/modules/common/contracts/addable.ts +3 -0
  11. package/src/modules/common/contracts/disposable.ts +3 -0
  12. package/src/modules/common/contracts/subscriber.ts +6 -0
  13. package/src/modules/common/types/callable.ts +1 -0
  14. package/src/modules/common/types/callback.ts +1 -0
  15. package/src/modules/common/utils/compare.ts +3 -0
  16. package/src/modules/common/utils/swap.ts +23 -0
  17. package/src/modules/consumers/factory.ts +26 -0
  18. package/src/modules/event/channel.ts +82 -0
  19. package/src/modules/event/effect.ts +45 -0
  20. package/src/modules/event/notifier.ts +38 -0
  21. package/src/modules/node/factory.ts +51 -0
  22. package/src/modules/node/index.ts +13 -0
  23. package/src/modules/node/source.ts +11 -0
  24. package/src/modules/scheduler/dispatch.ts +3 -0
  25. package/src/modules/scheduler/runner.ts +47 -0
  26. package/src/modules/sources/dynamic.ts +73 -0
  27. package/src/modules/sources/static.ts +49 -0
  28. package/src/modules/value/factory.ts +29 -0
  29. package/src/packages/builder/consumers.ts +11 -0
  30. package/src/packages/builder/node.ts +16 -0
  31. package/src/packages/builder/sources.ts +18 -0
  32. package/src/packages/builder/value.ts +11 -0
  33. package/src/packages/builder.ts +4 -0
  34. package/src/packages/core/computed.ts +15 -0
  35. package/src/packages/core/context.ts +5 -0
  36. package/src/packages/core/scheduler.ts +5 -0
  37. package/src/packages/core/signal.ts +12 -0
  38. package/src/packages/core.ts +2 -0
  39. package/src/packages/event/channel.ts +17 -0
  40. package/src/packages/event/effect.ts +15 -0
  41. package/src/packages/event/notifier.ts +14 -0
  42. package/src/packages/event.ts +3 -0
  43. package/src/packages/react/use-computed.ts +9 -0
  44. package/src/packages/react/use-read.ts +23 -0
  45. package/src/packages/react/use-signal.ts +9 -0
  46. package/src/packages/react.ts +3 -0
  47. package/src/runtime/context.ts +36 -0
  48. package/src/runtime/scheduler.ts +75 -0
  49. package/tsconfig.build.json +4 -0
  50. package/tsconfig.json +16 -0
  51. package/tsup.config.ts +53 -0
  52. package/vitest.config.ts +14 -0
  53. package/dist/index.d.mts +0 -194
  54. package/dist/index.d.ts +0 -194
  55. package/dist/index.js +0 -372
  56. package/dist/index.mjs +0 -342
package/dist/index.js DELETED
@@ -1,372 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/index.ts
21
- var index_exports = {};
22
- __export(index_exports, {
23
- batch: () => batch,
24
- collector: () => collector,
25
- composed: () => composed,
26
- computed: () => computed,
27
- config: () => config,
28
- effect: () => effect,
29
- factory: () => factory,
30
- ignore: () => ignore,
31
- internal: () => internal_exports,
32
- signal: () => signal
33
- });
34
- module.exports = __toCommonJS(index_exports);
35
-
36
- // src/core/factory.ts
37
- function factory(name) {
38
- let __default__ = null;
39
- let __factory__ = null;
40
- function object(...args) {
41
- if (__factory__) return __factory__(...args);
42
- if (__default__) return __default__(...args);
43
- throw new Error(`${name}.factory() not configured!`);
44
- }
45
- object.configured = () => __default__ !== null || __factory__ !== null;
46
- object.default = (factory2) => {
47
- __default__ = factory2 ?? null;
48
- };
49
- object.factory = (factory2) => {
50
- __factory__ = factory2 ?? null;
51
- };
52
- return object;
53
- }
54
-
55
- // src/core/batch.ts
56
- var batch = factory("batch");
57
-
58
- // src/core/collector.ts
59
- var collector = factory("collector");
60
-
61
- // src/core/composed.ts
62
- var composed = factory("composed");
63
-
64
- // src/core/computed.ts
65
- var computed = factory("computed");
66
-
67
- // src/core/effect.ts
68
- var effect = factory("effect");
69
-
70
- // src/core/ignore.ts
71
- var ignore = factory("ignore");
72
-
73
- // src/core/signal.ts
74
- var signal = factory("signal");
75
-
76
- // src/internal/index.ts
77
- var internal_exports = {};
78
- __export(internal_exports, {
79
- batch: () => internal_batch,
80
- collector: () => internal_collector,
81
- composed: () => internal_composed,
82
- computed: () => internal_computed,
83
- effect: () => internal_effect,
84
- ignore: () => internal_ignore,
85
- shared: () => internal_shared,
86
- signal: () => internal_signal
87
- });
88
-
89
- // src/internal/batch.ts
90
- function internal_batch(callback, collector2 = internal_batch.collector()) {
91
- if (collector2.collecting()) return callback();
92
- collector2.collect(callback).forEach((listener) => listener());
93
- }
94
- ((internal_batch2) => {
95
- internal_batch2.collector = factory("batch.collector");
96
- })(internal_batch || (internal_batch = {}));
97
-
98
- // src/internal/collector.ts
99
- function internal_collector() {
100
- return new internal_collector.Constructor(null);
101
- }
102
- ((internal_collector2) => {
103
- class Constructor {
104
- #values;
105
- constructor(values) {
106
- this.#values = values;
107
- }
108
- collecting() {
109
- return this.#values !== null;
110
- }
111
- add(value) {
112
- if (!this.collecting() || !this.#values) return;
113
- this.#values.add(value);
114
- }
115
- collect(callback) {
116
- const current = this.#values;
117
- this.#values = /* @__PURE__ */ new Set();
118
- callback();
119
- const collected = this.#values;
120
- this.#values = current;
121
- return collected;
122
- }
123
- ignore(callback) {
124
- const current = this.#values;
125
- this.#values = null;
126
- callback();
127
- this.#values = current;
128
- }
129
- }
130
- internal_collector2.Constructor = Constructor;
131
- })(internal_collector || (internal_collector = {}));
132
-
133
- // src/internal/computed.ts
134
- function internal_computed(compute, equals) {
135
- return new internal_computed.Constructor(
136
- true,
137
- void 0,
138
- [],
139
- /* @__PURE__ */ new Set(),
140
- /* @__PURE__ */ new Set(),
141
- internal_computed.collector(),
142
- compute,
143
- equals
144
- );
145
- }
146
- ((internal_computed2) => {
147
- internal_computed2.collector = factory("computed.collector");
148
- class Constructor {
149
- #empty;
150
- #value;
151
- #values;
152
- #dependencies;
153
- #compute;
154
- #equals;
155
- #listeners;
156
- #collector;
157
- constructor(empty, value, values, dependencies, listeners, collector3, compute, equals) {
158
- this.#empty = empty;
159
- this.#value = value;
160
- this.#values = values;
161
- this.#dependencies = dependencies;
162
- this.#listeners = listeners;
163
- this.#collector = collector3;
164
- this.#compute = compute;
165
- this.#equals = equals;
166
- }
167
- read() {
168
- this.#collector.add(this);
169
- return this.peek();
170
- }
171
- peek() {
172
- if (!this.#empty && !this.#values.some(([dep, value]) => !dep.equals(value))) return this.#value;
173
- const current = this.#dependencies;
174
- const next = this.#collector.collect(() => this.#value = this.#compute());
175
- this.#dependencies = next;
176
- this.#values = Array.from(next).map((dep) => [dep, dep.read()]);
177
- this.#empty = false;
178
- if (!current.size && !next.size) return this.#value;
179
- if (!this.#listeners.size) return this.#value;
180
- current.forEach((dep) => !next.has(dep) && this.#listeners.forEach((listener) => dep.unsubscribe(listener)));
181
- next.forEach((dep) => !current.has(dep) && this.#listeners.forEach((listener) => dep.subscribe(listener)));
182
- return this.#value;
183
- }
184
- equals(other) {
185
- if (this.#equals) return this.#equals(this.read(), other);
186
- return this.read() === other;
187
- }
188
- subscribe(callback) {
189
- this.#listeners.add(callback);
190
- this.#dependencies.forEach((dep) => dep.subscribe(callback));
191
- return this.unsubscribe.bind(this, callback);
192
- }
193
- unsubscribe(callback) {
194
- this.#listeners.delete(callback);
195
- this.#dependencies.forEach((dep) => dep.unsubscribe(callback));
196
- }
197
- }
198
- internal_computed2.Constructor = Constructor;
199
- })(internal_computed || (internal_computed = {}));
200
-
201
- // src/internal/composed.ts
202
- function internal_composed(compute, write, equals) {
203
- return new internal_composed.Constructor(
204
- true,
205
- void 0,
206
- [],
207
- /* @__PURE__ */ new Set(),
208
- /* @__PURE__ */ new Set(),
209
- internal_composed.batcher(),
210
- internal_composed.collector(),
211
- compute,
212
- write,
213
- equals
214
- );
215
- }
216
- ((internal_composed2) => {
217
- internal_composed2.batcher = factory("composed.batcher");
218
- internal_composed2.collector = factory("composed.collector");
219
- class Constructor extends internal_computed.Constructor {
220
- #batcher;
221
- #write;
222
- constructor(empty, value, values, dependencies, listeners, batcher2, collector3, compute, write, equals) {
223
- super(empty, value, values, dependencies, listeners, collector3, compute, equals);
224
- this.#batcher = batcher2;
225
- this.#write = write;
226
- }
227
- write(value) {
228
- if (this.equals(value)) return;
229
- batch(() => this.#write(value), this.#batcher);
230
- }
231
- }
232
- internal_composed2.Constructor = Constructor;
233
- })(internal_composed || (internal_composed = {}));
234
-
235
- // src/internal/effect.ts
236
- function internal_effect(cb) {
237
- let cleanupFn = null;
238
- let dependencies = internal_effect.collector().collect(() => cleanupFn = cb(true) ?? null);
239
- dependencies.forEach((dependency) => dependency.subscribe(callback));
240
- function callback() {
241
- if (cleanupFn) cleanupFn(false);
242
- const next = internal_effect.collector().collect(() => cleanupFn = cb(false) ?? null);
243
- next.forEach((dependency) => !dependencies.has(dependency) && dependency.subscribe(callback));
244
- dependencies.forEach((dependency) => !next.has(dependency) && dependency.unsubscribe(callback));
245
- dependencies = next;
246
- }
247
- return () => {
248
- dependencies.forEach((dependency) => dependency.unsubscribe(callback));
249
- dependencies.clear();
250
- if (cleanupFn) cleanupFn(true);
251
- cleanupFn = null;
252
- };
253
- }
254
- ((internal_effect2) => {
255
- internal_effect2.collector = factory("effect.collector");
256
- })(internal_effect || (internal_effect = {}));
257
-
258
- // src/internal/ignore.ts
259
- function internal_ignore(callback, ...args) {
260
- let value;
261
- internal_ignore.collector().ignore(() => value = typeof callback === "function" ? callback(...args) : callback.read());
262
- return value;
263
- }
264
- ((internal_ignore2) => {
265
- internal_ignore2.collector = factory("signal.collector");
266
- })(internal_ignore || (internal_ignore = {}));
267
-
268
- // src/internal/shared.ts
269
- var internal_shared;
270
- ((internal_shared2) => {
271
- let __batcher__ = null;
272
- let __collector__ = null;
273
- function batcher() {
274
- if (!__batcher__) __batcher__ = collector();
275
- return __batcher__;
276
- }
277
- internal_shared2.batcher = batcher;
278
- function collector2() {
279
- if (!__collector__) __collector__ = collector();
280
- return __collector__;
281
- }
282
- internal_shared2.collector = collector2;
283
- })(internal_shared || (internal_shared = {}));
284
-
285
- // src/internal/signal.ts
286
- function internal_signal(value, equals) {
287
- return new internal_signal.Constructor(value, equals, /* @__PURE__ */ new Set(), internal_signal.batcher(), internal_signal.collector());
288
- }
289
- ((internal_signal2) => {
290
- internal_signal2.batcher = factory("signal.batcher");
291
- internal_signal2.collector = factory("signal.collector");
292
- class Constructor {
293
- #value;
294
- #equals;
295
- #listeners;
296
- #batcher;
297
- #collector;
298
- constructor(value, equals, listeners, batcher2, collector3) {
299
- this.#value = value;
300
- this.#equals = equals;
301
- this.#listeners = listeners;
302
- this.#batcher = batcher2;
303
- this.#collector = collector3;
304
- }
305
- read() {
306
- this.#collector.add(this);
307
- return this.peek();
308
- }
309
- peek() {
310
- return this.#value;
311
- }
312
- write(value) {
313
- if (this.equals(value)) return;
314
- this.#value = value;
315
- if (this.#batcher.collecting()) this.#listeners.forEach((listener) => this.#batcher.add(listener));
316
- else this.#listeners.forEach((listener) => listener());
317
- }
318
- equals(other) {
319
- if (this.#equals) return this.#equals(this.#value, other);
320
- return this.#value === other;
321
- }
322
- subscribe(callback) {
323
- this.#listeners.add(callback);
324
- return this.unsubscribe.bind(this, callback);
325
- }
326
- unsubscribe(callback) {
327
- this.#listeners.delete(callback);
328
- }
329
- }
330
- internal_signal2.Constructor = Constructor;
331
- })(internal_signal || (internal_signal = {}));
332
-
333
- // src/core/config.ts
334
- function config(config2 = {}) {
335
- collector.factory(config2.collector);
336
- signal.factory(config2.signal);
337
- computed.factory(config2.computed);
338
- composed.factory(config2.composed);
339
- effect.factory(config2.effect);
340
- batch.factory(config2.batch);
341
- ignore.factory(config2.ignore);
342
- }
343
-
344
- // src/index.ts
345
- internal_signal.collector.default(internal_shared.collector);
346
- internal_computed.collector.default(internal_shared.collector);
347
- internal_composed.collector.default(internal_shared.collector);
348
- internal_effect.collector.default(internal_shared.collector);
349
- internal_ignore.collector.default(internal_shared.collector);
350
- internal_signal.batcher.default(internal_shared.batcher);
351
- internal_composed.batcher.default(internal_shared.batcher);
352
- internal_batch.collector.default(internal_shared.batcher);
353
- collector.default(internal_collector);
354
- signal.default(internal_signal);
355
- computed.default(internal_computed);
356
- composed.default(internal_composed);
357
- effect.default(internal_effect);
358
- batch.default(internal_batch);
359
- ignore.default(internal_ignore);
360
- // Annotate the CommonJS export names for ESM import in node:
361
- 0 && (module.exports = {
362
- batch,
363
- collector,
364
- composed,
365
- computed,
366
- config,
367
- effect,
368
- factory,
369
- ignore,
370
- internal,
371
- signal
372
- });
package/dist/index.mjs DELETED
@@ -1,342 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __export = (target, all) => {
3
- for (var name in all)
4
- __defProp(target, name, { get: all[name], enumerable: true });
5
- };
6
-
7
- // src/core/factory.ts
8
- function factory(name) {
9
- let __default__ = null;
10
- let __factory__ = null;
11
- function object(...args) {
12
- if (__factory__) return __factory__(...args);
13
- if (__default__) return __default__(...args);
14
- throw new Error(`${name}.factory() not configured!`);
15
- }
16
- object.configured = () => __default__ !== null || __factory__ !== null;
17
- object.default = (factory2) => {
18
- __default__ = factory2 ?? null;
19
- };
20
- object.factory = (factory2) => {
21
- __factory__ = factory2 ?? null;
22
- };
23
- return object;
24
- }
25
-
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
- batch: () => internal_batch,
51
- collector: () => internal_collector,
52
- composed: () => internal_composed,
53
- computed: () => internal_computed,
54
- effect: () => internal_effect,
55
- ignore: () => internal_ignore,
56
- shared: () => internal_shared,
57
- signal: () => internal_signal
58
- });
59
-
60
- // src/internal/batch.ts
61
- function internal_batch(callback, collector2 = internal_batch.collector()) {
62
- if (collector2.collecting()) return callback();
63
- collector2.collect(callback).forEach((listener) => listener());
64
- }
65
- ((internal_batch2) => {
66
- internal_batch2.collector = factory("batch.collector");
67
- })(internal_batch || (internal_batch = {}));
68
-
69
- // src/internal/collector.ts
70
- function internal_collector() {
71
- return new internal_collector.Constructor(null);
72
- }
73
- ((internal_collector2) => {
74
- class Constructor {
75
- #values;
76
- constructor(values) {
77
- this.#values = values;
78
- }
79
- collecting() {
80
- return this.#values !== null;
81
- }
82
- add(value) {
83
- if (!this.collecting() || !this.#values) return;
84
- this.#values.add(value);
85
- }
86
- collect(callback) {
87
- const current = this.#values;
88
- this.#values = /* @__PURE__ */ new Set();
89
- callback();
90
- const collected = this.#values;
91
- this.#values = current;
92
- return collected;
93
- }
94
- ignore(callback) {
95
- const current = this.#values;
96
- this.#values = null;
97
- callback();
98
- this.#values = current;
99
- }
100
- }
101
- internal_collector2.Constructor = Constructor;
102
- })(internal_collector || (internal_collector = {}));
103
-
104
- // src/internal/computed.ts
105
- function internal_computed(compute, equals) {
106
- return new internal_computed.Constructor(
107
- true,
108
- void 0,
109
- [],
110
- /* @__PURE__ */ new Set(),
111
- /* @__PURE__ */ new Set(),
112
- internal_computed.collector(),
113
- compute,
114
- equals
115
- );
116
- }
117
- ((internal_computed2) => {
118
- internal_computed2.collector = factory("computed.collector");
119
- class Constructor {
120
- #empty;
121
- #value;
122
- #values;
123
- #dependencies;
124
- #compute;
125
- #equals;
126
- #listeners;
127
- #collector;
128
- constructor(empty, value, values, dependencies, listeners, collector3, compute, equals) {
129
- this.#empty = empty;
130
- this.#value = value;
131
- this.#values = values;
132
- this.#dependencies = dependencies;
133
- this.#listeners = listeners;
134
- this.#collector = collector3;
135
- this.#compute = compute;
136
- this.#equals = equals;
137
- }
138
- read() {
139
- this.#collector.add(this);
140
- return this.peek();
141
- }
142
- peek() {
143
- if (!this.#empty && !this.#values.some(([dep, value]) => !dep.equals(value))) return this.#value;
144
- const current = this.#dependencies;
145
- const next = this.#collector.collect(() => this.#value = this.#compute());
146
- this.#dependencies = next;
147
- this.#values = Array.from(next).map((dep) => [dep, dep.read()]);
148
- this.#empty = false;
149
- if (!current.size && !next.size) return this.#value;
150
- if (!this.#listeners.size) return this.#value;
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)));
153
- return this.#value;
154
- }
155
- equals(other) {
156
- if (this.#equals) return this.#equals(this.read(), other);
157
- return this.read() === other;
158
- }
159
- subscribe(callback) {
160
- this.#listeners.add(callback);
161
- this.#dependencies.forEach((dep) => dep.subscribe(callback));
162
- return this.unsubscribe.bind(this, callback);
163
- }
164
- unsubscribe(callback) {
165
- this.#listeners.delete(callback);
166
- this.#dependencies.forEach((dep) => dep.unsubscribe(callback));
167
- }
168
- }
169
- internal_computed2.Constructor = Constructor;
170
- })(internal_computed || (internal_computed = {}));
171
-
172
- // src/internal/composed.ts
173
- function internal_composed(compute, write, equals) {
174
- return new internal_composed.Constructor(
175
- true,
176
- void 0,
177
- [],
178
- /* @__PURE__ */ new Set(),
179
- /* @__PURE__ */ new Set(),
180
- internal_composed.batcher(),
181
- internal_composed.collector(),
182
- compute,
183
- write,
184
- equals
185
- );
186
- }
187
- ((internal_composed2) => {
188
- internal_composed2.batcher = factory("composed.batcher");
189
- internal_composed2.collector = factory("composed.collector");
190
- class Constructor extends internal_computed.Constructor {
191
- #batcher;
192
- #write;
193
- constructor(empty, value, values, dependencies, listeners, batcher2, collector3, compute, write, equals) {
194
- super(empty, value, values, dependencies, listeners, collector3, compute, equals);
195
- this.#batcher = batcher2;
196
- this.#write = write;
197
- }
198
- write(value) {
199
- if (this.equals(value)) return;
200
- batch(() => this.#write(value), this.#batcher);
201
- }
202
- }
203
- internal_composed2.Constructor = Constructor;
204
- })(internal_composed || (internal_composed = {}));
205
-
206
- // src/internal/effect.ts
207
- function internal_effect(cb) {
208
- let cleanupFn = null;
209
- let dependencies = internal_effect.collector().collect(() => cleanupFn = cb(true) ?? null);
210
- dependencies.forEach((dependency) => dependency.subscribe(callback));
211
- function callback() {
212
- if (cleanupFn) cleanupFn(false);
213
- const next = internal_effect.collector().collect(() => cleanupFn = cb(false) ?? null);
214
- next.forEach((dependency) => !dependencies.has(dependency) && dependency.subscribe(callback));
215
- dependencies.forEach((dependency) => !next.has(dependency) && dependency.unsubscribe(callback));
216
- dependencies = next;
217
- }
218
- return () => {
219
- dependencies.forEach((dependency) => dependency.unsubscribe(callback));
220
- dependencies.clear();
221
- if (cleanupFn) cleanupFn(true);
222
- cleanupFn = null;
223
- };
224
- }
225
- ((internal_effect2) => {
226
- internal_effect2.collector = factory("effect.collector");
227
- })(internal_effect || (internal_effect = {}));
228
-
229
- // src/internal/ignore.ts
230
- function internal_ignore(callback, ...args) {
231
- let value;
232
- internal_ignore.collector().ignore(() => value = typeof callback === "function" ? callback(...args) : callback.read());
233
- return value;
234
- }
235
- ((internal_ignore2) => {
236
- internal_ignore2.collector = factory("signal.collector");
237
- })(internal_ignore || (internal_ignore = {}));
238
-
239
- // src/internal/shared.ts
240
- var internal_shared;
241
- ((internal_shared2) => {
242
- let __batcher__ = null;
243
- let __collector__ = null;
244
- function batcher() {
245
- if (!__batcher__) __batcher__ = collector();
246
- return __batcher__;
247
- }
248
- internal_shared2.batcher = batcher;
249
- function collector2() {
250
- if (!__collector__) __collector__ = collector();
251
- return __collector__;
252
- }
253
- internal_shared2.collector = collector2;
254
- })(internal_shared || (internal_shared = {}));
255
-
256
- // src/internal/signal.ts
257
- function internal_signal(value, equals) {
258
- return new internal_signal.Constructor(value, equals, /* @__PURE__ */ new Set(), internal_signal.batcher(), internal_signal.collector());
259
- }
260
- ((internal_signal2) => {
261
- internal_signal2.batcher = factory("signal.batcher");
262
- internal_signal2.collector = factory("signal.collector");
263
- class Constructor {
264
- #value;
265
- #equals;
266
- #listeners;
267
- #batcher;
268
- #collector;
269
- constructor(value, equals, listeners, batcher2, collector3) {
270
- this.#value = value;
271
- this.#equals = equals;
272
- this.#listeners = listeners;
273
- this.#batcher = batcher2;
274
- this.#collector = collector3;
275
- }
276
- read() {
277
- this.#collector.add(this);
278
- return this.peek();
279
- }
280
- peek() {
281
- return this.#value;
282
- }
283
- write(value) {
284
- if (this.equals(value)) return;
285
- this.#value = value;
286
- if (this.#batcher.collecting()) this.#listeners.forEach((listener) => this.#batcher.add(listener));
287
- else this.#listeners.forEach((listener) => listener());
288
- }
289
- equals(other) {
290
- if (this.#equals) return this.#equals(this.#value, other);
291
- return this.#value === other;
292
- }
293
- subscribe(callback) {
294
- this.#listeners.add(callback);
295
- return this.unsubscribe.bind(this, callback);
296
- }
297
- unsubscribe(callback) {
298
- this.#listeners.delete(callback);
299
- }
300
- }
301
- internal_signal2.Constructor = Constructor;
302
- })(internal_signal || (internal_signal = {}));
303
-
304
- // src/core/config.ts
305
- function config(config2 = {}) {
306
- collector.factory(config2.collector);
307
- signal.factory(config2.signal);
308
- computed.factory(config2.computed);
309
- composed.factory(config2.composed);
310
- effect.factory(config2.effect);
311
- batch.factory(config2.batch);
312
- ignore.factory(config2.ignore);
313
- }
314
-
315
- // src/index.ts
316
- internal_signal.collector.default(internal_shared.collector);
317
- internal_computed.collector.default(internal_shared.collector);
318
- internal_composed.collector.default(internal_shared.collector);
319
- internal_effect.collector.default(internal_shared.collector);
320
- internal_ignore.collector.default(internal_shared.collector);
321
- internal_signal.batcher.default(internal_shared.batcher);
322
- internal_composed.batcher.default(internal_shared.batcher);
323
- internal_batch.collector.default(internal_shared.batcher);
324
- collector.default(internal_collector);
325
- signal.default(internal_signal);
326
- computed.default(internal_computed);
327
- composed.default(internal_composed);
328
- effect.default(internal_effect);
329
- batch.default(internal_batch);
330
- ignore.default(internal_ignore);
331
- export {
332
- batch,
333
- collector,
334
- composed,
335
- computed,
336
- config,
337
- effect,
338
- factory,
339
- ignore,
340
- internal_exports as internal,
341
- signal
342
- };