@valentin30/signal 0.0.8 → 0.1.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.js CHANGED
@@ -42,9 +42,13 @@ function factory(name) {
42
42
  if (__default__) return __default__(...args);
43
43
  throw new Error(`${name}.factory() not configured!`);
44
44
  }
45
- object.default = (factory2) => __default__ = factory2;
46
- object.factory = (factory2) => __factory__ = factory2;
47
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
+ };
48
52
  return object;
49
53
  }
50
54
 
@@ -72,163 +76,170 @@ var signal = factory("signal");
72
76
  // src/internal/index.ts
73
77
  var internal_exports = {};
74
78
  __export(internal_exports, {
75
- Collector: () => Collector,
76
- Composed: () => Composed,
77
- Computed: () => Computed,
78
- Signal: () => Signal,
79
- batch: () => batch2,
80
- collector: () => collector2,
81
- composed: () => composed2,
82
- computed: () => computed2,
83
- effect: () => effect2,
84
- ignore: () => ignore2,
85
- shared: () => shared,
86
- signal: () => signal2
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
87
  });
88
88
 
89
89
  // src/internal/batch.ts
90
- function batch2(callback, collector3 = batch2.collector()) {
91
- if (collector3.collecting()) return callback();
92
- collector3.collect(callback).forEach((listener) => listener());
90
+ function internal_batch(callback, collector2 = internal_batch.collector()) {
91
+ if (collector2.collecting()) return callback();
92
+ collector2.collect(callback).forEach((listener) => listener());
93
93
  }
94
- batch2.collector = factory("batch.collector");
94
+ ((internal_batch2) => {
95
+ internal_batch2.collector = factory("batch.collector");
96
+ })(internal_batch || (internal_batch = {}));
95
97
 
96
98
  // src/internal/collector.ts
97
- function collector2() {
98
- return new Collector(null);
99
+ function internal_collector() {
100
+ return new internal_collector.Constructor(null);
99
101
  }
100
- var Collector = class {
101
- #values;
102
- constructor(values) {
103
- this.#values = values;
104
- }
105
- collecting() {
106
- return this.#values !== null;
107
- }
108
- add(value) {
109
- if (!this.collecting() || !this.#values) return;
110
- this.#values.add(value);
111
- }
112
- collect(callback) {
113
- const current = this.#values;
114
- this.#values = /* @__PURE__ */ new Set();
115
- callback();
116
- const collected = this.#values;
117
- this.#values = current;
118
- return collected;
119
- }
120
- ignore(callback) {
121
- const current = this.#values;
122
- this.#values = null;
123
- callback();
124
- this.#values = current;
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
+ }
125
129
  }
126
- };
130
+ internal_collector2.Constructor = Constructor;
131
+ })(internal_collector || (internal_collector = {}));
127
132
 
128
133
  // src/internal/computed.ts
129
- function computed2(compute, equals) {
130
- return new Computed(
134
+ function internal_computed(compute, equals) {
135
+ return new internal_computed.Constructor(
131
136
  true,
132
137
  void 0,
133
138
  [],
134
139
  /* @__PURE__ */ new Set(),
135
140
  /* @__PURE__ */ new Set(),
136
- computed2.collector(),
141
+ internal_computed.collector(),
137
142
  compute,
138
143
  equals
139
144
  );
140
145
  }
141
- computed2.collector = factory("computed.collector");
142
- var Computed = class {
143
- #empty;
144
- #value;
145
- #values;
146
- #dependencies;
147
- #compute;
148
- #equals;
149
- #listeners;
150
- #collector;
151
- constructor(empty, value, values, dependencies, listeners, collector3, compute, equals) {
152
- this.#empty = empty;
153
- this.#value = value;
154
- this.#values = values;
155
- this.#dependencies = dependencies;
156
- this.#listeners = listeners;
157
- this.#collector = collector3;
158
- this.#compute = compute;
159
- this.#equals = equals;
160
- }
161
- read() {
162
- this.#collector.add(this);
163
- return this.peek();
164
- }
165
- peek() {
166
- if (!this.#empty && !this.#values.some(([dep, value]) => !dep.equals(value))) return this.#value;
167
- const current = this.#dependencies;
168
- const next = this.#collector.collect(() => this.#value = this.#compute());
169
- this.#dependencies = next;
170
- this.#values = Array.from(next).map((dep) => [dep, dep.read()]);
171
- this.#empty = false;
172
- if (!current.size && !next.size) return this.#value;
173
- if (!this.#listeners.size) return this.#value;
174
- current.forEach((dep) => !next.has(dep) && this.#listeners.forEach((listener) => dep.unsubscribe(listener)));
175
- next.forEach((dep) => !current.has(dep) && this.#listeners.forEach((listener) => dep.subscribe(listener)));
176
- return this.#value;
177
- }
178
- equals(other) {
179
- if (this.#equals) return this.#equals(this.read(), other);
180
- return this.read() === other;
181
- }
182
- subscribe(callback) {
183
- this.#listeners.add(callback);
184
- this.#dependencies.forEach((dep) => dep.subscribe(callback));
185
- return this.unsubscribe.bind(this, callback);
186
- }
187
- unsubscribe(callback) {
188
- this.#listeners.delete(callback);
189
- this.#dependencies.forEach((dep) => dep.unsubscribe(callback));
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
+ }
190
197
  }
191
- };
198
+ internal_computed2.Constructor = Constructor;
199
+ })(internal_computed || (internal_computed = {}));
192
200
 
193
201
  // src/internal/composed.ts
194
- function composed2(compute, write, equals) {
195
- return new Composed(
202
+ function internal_composed(compute, write, equals) {
203
+ return new internal_composed.Constructor(
196
204
  true,
197
205
  void 0,
198
206
  [],
199
207
  /* @__PURE__ */ new Set(),
200
208
  /* @__PURE__ */ new Set(),
201
- composed2.batcher(),
202
- composed2.collector(),
209
+ internal_composed.batcher(),
210
+ internal_composed.collector(),
203
211
  compute,
204
212
  write,
205
213
  equals
206
214
  );
207
215
  }
208
- composed2.batcher = factory("composed.batcher");
209
- composed2.collector = factory("composed.collector");
210
- var Composed = class extends Computed {
211
- #batcher;
212
- #write;
213
- constructor(empty, value, values, dependencies, listeners, batcher, collector3, compute, write, equals) {
214
- super(empty, value, values, dependencies, listeners, collector3, compute, equals);
215
- this.#batcher = batcher;
216
- this.#write = write;
217
- }
218
- write(value) {
219
- if (this.equals(value)) return;
220
- batch(() => this.#write(value), this.#batcher);
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
+ }
221
231
  }
222
- };
232
+ internal_composed2.Constructor = Constructor;
233
+ })(internal_composed || (internal_composed = {}));
223
234
 
224
235
  // src/internal/effect.ts
225
- function effect2(cb) {
236
+ function internal_effect(cb) {
226
237
  let cleanupFn = null;
227
- let dependencies = effect2.collector().collect(() => cleanupFn = cb(true) ?? null);
238
+ let dependencies = internal_effect.collector().collect(() => cleanupFn = cb(true) ?? null);
228
239
  dependencies.forEach((dependency) => dependency.subscribe(callback));
229
240
  function callback() {
230
241
  if (cleanupFn) cleanupFn(false);
231
- const next = effect2.collector().collect(() => cleanupFn = cb(false) ?? null);
242
+ const next = internal_effect.collector().collect(() => cleanupFn = cb(false) ?? null);
232
243
  next.forEach((dependency) => !dependencies.has(dependency) && dependency.subscribe(callback));
233
244
  dependencies.forEach((dependency) => !next.has(dependency) && dependency.unsubscribe(callback));
234
245
  dependencies = next;
@@ -240,74 +251,84 @@ function effect2(cb) {
240
251
  cleanupFn = null;
241
252
  };
242
253
  }
243
- effect2.collector = factory("effect.collector");
254
+ ((internal_effect2) => {
255
+ internal_effect2.collector = factory("effect.collector");
256
+ })(internal_effect || (internal_effect = {}));
244
257
 
245
258
  // src/internal/ignore.ts
246
- function ignore2(callback, ...args) {
259
+ function internal_ignore(callback, ...args) {
247
260
  let value;
248
- ignore2.collector().ignore(() => value = typeof callback === "function" ? callback(...args) : callback.read());
261
+ internal_ignore.collector().ignore(() => value = typeof callback === "function" ? callback(...args) : callback.read());
249
262
  return value;
250
263
  }
251
- ignore2.collector = factory("signal.collector");
264
+ ((internal_ignore2) => {
265
+ internal_ignore2.collector = factory("signal.collector");
266
+ })(internal_ignore || (internal_ignore = {}));
252
267
 
253
268
  // src/internal/shared.ts
254
- var __batcher__ = null;
255
- var __collector__ = null;
256
- var shared = {
257
- batcher() {
269
+ var internal_shared;
270
+ ((internal_shared2) => {
271
+ let __batcher__ = null;
272
+ let __collector__ = null;
273
+ function batcher() {
258
274
  if (!__batcher__) __batcher__ = collector();
259
275
  return __batcher__;
260
- },
261
- collector() {
276
+ }
277
+ internal_shared2.batcher = batcher;
278
+ function collector2() {
262
279
  if (!__collector__) __collector__ = collector();
263
280
  return __collector__;
264
281
  }
265
- };
282
+ internal_shared2.collector = collector2;
283
+ })(internal_shared || (internal_shared = {}));
266
284
 
267
285
  // src/internal/signal.ts
268
- function signal2(value, equals) {
269
- return new Signal(value, equals, /* @__PURE__ */ new Set(), signal2.batcher(), signal2.collector());
286
+ function internal_signal(value, equals) {
287
+ return new internal_signal.Constructor(value, equals, /* @__PURE__ */ new Set(), internal_signal.batcher(), internal_signal.collector());
270
288
  }
271
- signal2.batcher = factory("signal.batcher");
272
- signal2.collector = factory("signal.collector");
273
- var Signal = class {
274
- #value;
275
- #equals;
276
- #listeners;
277
- #batcher;
278
- #collector;
279
- constructor(value, equals, listeners, batcher, collector3) {
280
- this.#value = value;
281
- this.#equals = equals;
282
- this.#listeners = listeners;
283
- this.#batcher = batcher;
284
- this.#collector = collector3;
285
- }
286
- read() {
287
- this.#collector.add(this);
288
- return this.peek();
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
+ }
289
329
  }
290
- peek() {
291
- return this.#value;
292
- }
293
- write(value) {
294
- if (this.equals(value)) return;
295
- this.#value = value;
296
- if (this.#batcher.collecting()) this.#listeners.forEach((listener) => this.#batcher.add(listener));
297
- else this.#listeners.forEach((listener) => listener());
298
- }
299
- equals(other) {
300
- if (this.#equals) return this.#equals(this.#value, other);
301
- return this.#value === other;
302
- }
303
- subscribe(callback) {
304
- this.#listeners.add(callback);
305
- return this.unsubscribe.bind(this, callback);
306
- }
307
- unsubscribe(callback) {
308
- this.#listeners.delete(callback);
309
- }
310
- };
330
+ internal_signal2.Constructor = Constructor;
331
+ })(internal_signal || (internal_signal = {}));
311
332
 
312
333
  // src/core/config.ts
313
334
  function config(config2 = {}) {
@@ -321,21 +342,21 @@ function config(config2 = {}) {
321
342
  }
322
343
 
323
344
  // src/index.ts
324
- signal2.collector.default(shared.collector);
325
- computed2.collector.default(shared.collector);
326
- composed2.collector.default(shared.collector);
327
- effect2.collector.default(shared.collector);
328
- ignore2.collector.default(shared.collector);
329
- signal2.batcher.default(shared.batcher);
330
- composed2.batcher.default(shared.batcher);
331
- batch2.collector.default(shared.batcher);
332
- collector.default(collector2);
333
- signal.default(signal2);
334
- computed.default(computed2);
335
- composed.default(composed2);
336
- effect.default(effect2);
337
- batch.default(batch2);
338
- ignore.default(ignore2);
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);
339
360
  // Annotate the CommonJS export names for ESM import in node:
340
361
  0 && (module.exports = {
341
362
  batch,