@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.d.mts +108 -115
- package/dist/index.d.ts +108 -115
- package/dist/index.js +202 -185
- package/dist/index.mjs +202 -185
- package/package.json +1 -1
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
|
66
|
-
if (
|
|
67
|
-
|
|
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
|
-
|
|
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
|
|
73
|
-
return new
|
|
70
|
+
function internal_collector() {
|
|
71
|
+
return new internal_collector.Constructor(null);
|
|
74
72
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
|
|
81
|
-
|
|
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
|
|
105
|
-
return new
|
|
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
|
-
|
|
112
|
+
internal_computed.collector(),
|
|
112
113
|
compute,
|
|
113
114
|
equals
|
|
114
115
|
);
|
|
115
116
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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
|
-
|
|
141
|
-
|
|
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
|
|
170
|
-
return new
|
|
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
|
-
|
|
177
|
-
|
|
180
|
+
internal_composed.batcher(),
|
|
181
|
+
internal_composed.collector(),
|
|
178
182
|
compute,
|
|
179
183
|
write,
|
|
180
184
|
equals
|
|
181
185
|
);
|
|
182
186
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
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
|
-
|
|
194
|
-
|
|
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
|
|
207
|
+
function internal_effect(cb) {
|
|
201
208
|
let cleanupFn = null;
|
|
202
|
-
let dependencies =
|
|
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 =
|
|
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
|
-
|
|
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
|
|
230
|
+
function internal_ignore(callback, ...args) {
|
|
222
231
|
let value;
|
|
223
|
-
|
|
232
|
+
internal_ignore.collector().ignore(() => value = typeof callback === "function" ? callback(...args) : callback.read());
|
|
224
233
|
return value;
|
|
225
234
|
}
|
|
226
|
-
|
|
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
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
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
|
-
|
|
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
|
|
244
|
-
return new
|
|
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
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
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
|
-
|
|
269
|
-
|
|
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
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
collector.default(
|
|
308
|
-
signal.default(
|
|
309
|
-
computed.default(
|
|
310
|
-
composed.default(
|
|
311
|
-
effect.default(
|
|
312
|
-
batch.default(
|
|
313
|
-
ignore.default(
|
|
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