@valentin30/signal 0.0.9 → 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.mjs CHANGED
@@ -47,163 +47,170 @@ var signal = factory("signal");
47
47
  // src/internal/index.ts
48
48
  var internal_exports = {};
49
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
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
62
58
  });
63
59
 
64
60
  // src/internal/batch.ts
65
- function batch2(callback, collector3 = batch2.collector()) {
66
- if (collector3.collecting()) return callback();
67
- collector3.collect(callback).forEach((listener) => listener());
61
+ function internal_batch(callback, collector2 = internal_batch.collector()) {
62
+ if (collector2.collecting()) return callback();
63
+ collector2.collect(callback).forEach((listener) => listener());
68
64
  }
69
- batch2.collector = factory("batch.collector");
65
+ ((internal_batch2) => {
66
+ internal_batch2.collector = factory("batch.collector");
67
+ })(internal_batch || (internal_batch = {}));
70
68
 
71
69
  // src/internal/collector.ts
72
- function collector2() {
73
- return new Collector(null);
70
+ function internal_collector() {
71
+ return new internal_collector.Constructor(null);
74
72
  }
75
- var Collector = class {
76
- #values;
77
- constructor(values) {
78
- this.#values = values;
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
+ }
79
100
  }
80
- collecting() {
81
- return this.#values !== null;
82
- }
83
- 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;
100
- }
101
- };
101
+ internal_collector2.Constructor = Constructor;
102
+ })(internal_collector || (internal_collector = {}));
102
103
 
103
104
  // src/internal/computed.ts
104
- function computed2(compute, equals) {
105
- return new Computed(
105
+ function internal_computed(compute, equals) {
106
+ return new internal_computed.Constructor(
106
107
  true,
107
108
  void 0,
108
109
  [],
109
110
  /* @__PURE__ */ new Set(),
110
111
  /* @__PURE__ */ new Set(),
111
- computed2.collector(),
112
+ internal_computed.collector(),
112
113
  compute,
113
114
  equals
114
115
  );
115
116
  }
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;
135
- }
136
- read() {
137
- this.#collector.add(this);
138
- return this.peek();
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
+ }
139
168
  }
140
- 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;
152
- }
153
- equals(other) {
154
- if (this.#equals) return this.#equals(this.read(), other);
155
- return this.read() === other;
156
- }
157
- subscribe(callback) {
158
- this.#listeners.add(callback);
159
- this.#dependencies.forEach((dep) => dep.subscribe(callback));
160
- return this.unsubscribe.bind(this, callback);
161
- }
162
- unsubscribe(callback) {
163
- this.#listeners.delete(callback);
164
- this.#dependencies.forEach((dep) => dep.unsubscribe(callback));
165
- }
166
- };
169
+ internal_computed2.Constructor = Constructor;
170
+ })(internal_computed || (internal_computed = {}));
167
171
 
168
172
  // src/internal/composed.ts
169
- function composed2(compute, write, equals) {
170
- return new Composed(
173
+ function internal_composed(compute, write, equals) {
174
+ return new internal_composed.Constructor(
171
175
  true,
172
176
  void 0,
173
177
  [],
174
178
  /* @__PURE__ */ new Set(),
175
179
  /* @__PURE__ */ new Set(),
176
- composed2.batcher(),
177
- composed2.collector(),
180
+ internal_composed.batcher(),
181
+ internal_composed.collector(),
178
182
  compute,
179
183
  write,
180
184
  equals
181
185
  );
182
186
  }
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;
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
+ }
192
202
  }
193
- write(value) {
194
- if (this.equals(value)) return;
195
- batch(() => this.#write(value), this.#batcher);
196
- }
197
- };
203
+ internal_composed2.Constructor = Constructor;
204
+ })(internal_composed || (internal_composed = {}));
198
205
 
199
206
  // src/internal/effect.ts
200
- function effect2(cb) {
207
+ function internal_effect(cb) {
201
208
  let cleanupFn = null;
202
- let dependencies = effect2.collector().collect(() => cleanupFn = cb(true) ?? null);
209
+ let dependencies = internal_effect.collector().collect(() => cleanupFn = cb(true) ?? null);
203
210
  dependencies.forEach((dependency) => dependency.subscribe(callback));
204
211
  function callback() {
205
212
  if (cleanupFn) cleanupFn(false);
206
- const next = effect2.collector().collect(() => cleanupFn = cb(false) ?? null);
213
+ const next = internal_effect.collector().collect(() => cleanupFn = cb(false) ?? null);
207
214
  next.forEach((dependency) => !dependencies.has(dependency) && dependency.subscribe(callback));
208
215
  dependencies.forEach((dependency) => !next.has(dependency) && dependency.unsubscribe(callback));
209
216
  dependencies = next;
@@ -215,74 +222,84 @@ function effect2(cb) {
215
222
  cleanupFn = null;
216
223
  };
217
224
  }
218
- effect2.collector = factory("effect.collector");
225
+ ((internal_effect2) => {
226
+ internal_effect2.collector = factory("effect.collector");
227
+ })(internal_effect || (internal_effect = {}));
219
228
 
220
229
  // src/internal/ignore.ts
221
- function ignore2(callback, ...args) {
230
+ function internal_ignore(callback, ...args) {
222
231
  let value;
223
- ignore2.collector().ignore(() => value = typeof callback === "function" ? callback(...args) : callback.read());
232
+ internal_ignore.collector().ignore(() => value = typeof callback === "function" ? callback(...args) : callback.read());
224
233
  return value;
225
234
  }
226
- ignore2.collector = factory("signal.collector");
235
+ ((internal_ignore2) => {
236
+ internal_ignore2.collector = factory("signal.collector");
237
+ })(internal_ignore || (internal_ignore = {}));
227
238
 
228
239
  // src/internal/shared.ts
229
- var __batcher__ = null;
230
- var __collector__ = null;
231
- var shared = {
232
- batcher() {
240
+ var internal_shared;
241
+ ((internal_shared2) => {
242
+ let __batcher__ = null;
243
+ let __collector__ = null;
244
+ function batcher() {
233
245
  if (!__batcher__) __batcher__ = collector();
234
246
  return __batcher__;
235
- },
236
- collector() {
247
+ }
248
+ internal_shared2.batcher = batcher;
249
+ function collector2() {
237
250
  if (!__collector__) __collector__ = collector();
238
251
  return __collector__;
239
252
  }
240
- };
253
+ internal_shared2.collector = collector2;
254
+ })(internal_shared || (internal_shared = {}));
241
255
 
242
256
  // src/internal/signal.ts
243
- function signal2(value, equals) {
244
- return new Signal(value, equals, /* @__PURE__ */ new Set(), signal2.batcher(), signal2.collector());
257
+ function internal_signal(value, equals) {
258
+ return new internal_signal.Constructor(value, equals, /* @__PURE__ */ new Set(), internal_signal.batcher(), internal_signal.collector());
245
259
  }
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;
260
- }
261
- read() {
262
- this.#collector.add(this);
263
- return this.peek();
264
- }
265
- peek() {
266
- return this.#value;
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
+ }
267
300
  }
268
- 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());
273
- }
274
- equals(other) {
275
- if (this.#equals) return this.#equals(this.#value, other);
276
- return this.#value === other;
277
- }
278
- subscribe(callback) {
279
- this.#listeners.add(callback);
280
- return this.unsubscribe.bind(this, callback);
281
- }
282
- unsubscribe(callback) {
283
- this.#listeners.delete(callback);
284
- }
285
- };
301
+ internal_signal2.Constructor = Constructor;
302
+ })(internal_signal || (internal_signal = {}));
286
303
 
287
304
  // src/core/config.ts
288
305
  function config(config2 = {}) {
@@ -296,21 +313,21 @@ function config(config2 = {}) {
296
313
  }
297
314
 
298
315
  // 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);
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);
314
331
  export {
315
332
  batch,
316
333
  collector,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@valentin30/signal",
3
- "version": "0.0.9",
3
+ "version": "0.1.0",
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",