@esportsplus/reactivity 0.1.14 → 0.1.15
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/build/signal.js +5 -5
- package/build/types.d.ts +5 -2
- package/package.json +1 -1
- package/src/signal.ts +12 -12
- package/src/types.ts +5 -2
package/build/signal.js
CHANGED
|
@@ -155,12 +155,12 @@ function removeSourceObservers(node, start) {
|
|
|
155
155
|
return;
|
|
156
156
|
}
|
|
157
157
|
for (let i = start, n = node.sources.length; i < n; i++) {
|
|
158
|
-
let
|
|
159
|
-
if (
|
|
158
|
+
let observers = node.sources[i].observers;
|
|
159
|
+
if (observers === null) {
|
|
160
160
|
continue;
|
|
161
161
|
}
|
|
162
|
-
|
|
163
|
-
|
|
162
|
+
observers[observers.indexOf(node)] = observers[observers.length - 1];
|
|
163
|
+
observers.pop();
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
166
|
function sync(node) {
|
|
@@ -200,7 +200,7 @@ function update(node) {
|
|
|
200
200
|
}
|
|
201
201
|
for (let i = index, n = node.sources.length; i < n; i++) {
|
|
202
202
|
let source = node.sources[i];
|
|
203
|
-
if (
|
|
203
|
+
if (source.observers === null) {
|
|
204
204
|
source.observers = [node];
|
|
205
205
|
}
|
|
206
206
|
else {
|
package/build/types.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { Function, NeverAsync, Prettify } from '@esportsplus/typescript';
|
|
2
2
|
import { CHECK, CLEAN, COMPUTED, DIRTY, DISPOSED, EFFECT, ROOT, SIGNAL } from './constants';
|
|
3
3
|
import { Reactive } from './signal';
|
|
4
|
-
type Base<T> = Omit<Reactive<T>, 'changed' | 'fn' | 'scheduler' | 'task' | 'tracking'>;
|
|
4
|
+
type Base<T> = Omit<Reactive<T>, 'changed' | 'fn' | 'get' | 'scheduler' | 'set' | 'task' | 'tracking'>;
|
|
5
5
|
type Changed = (a: unknown, b: unknown) => boolean;
|
|
6
6
|
type Computed<T> = {
|
|
7
7
|
changed: Changed;
|
|
8
8
|
fn: NeverAsync<() => T>;
|
|
9
|
+
get(): T;
|
|
9
10
|
} & Base<T>;
|
|
10
11
|
type Effect = {
|
|
11
12
|
fn: NeverAsync<(node: Effect) => void>;
|
|
@@ -28,10 +29,12 @@ type Root = {
|
|
|
28
29
|
scheduler: Scheduler;
|
|
29
30
|
tracking: boolean;
|
|
30
31
|
value: void;
|
|
31
|
-
} & Omit<Reactive<void>, '
|
|
32
|
+
} & Omit<Reactive<void>, 'root'>;
|
|
32
33
|
type Scheduler = (fn: Function) => unknown;
|
|
33
34
|
type Signal<T> = {
|
|
34
35
|
changed: Changed;
|
|
36
|
+
get(): T;
|
|
37
|
+
set(value: T): T;
|
|
35
38
|
} & Base<T>;
|
|
36
39
|
type State = typeof CHECK | typeof CLEAN | typeof DIRTY | typeof DISPOSED;
|
|
37
40
|
type Type = typeof COMPUTED | typeof EFFECT | typeof ROOT | typeof SIGNAL;
|
package/package.json
CHANGED
package/src/signal.ts
CHANGED
|
@@ -201,14 +201,14 @@ function removeSourceObservers<T>(node: Reactive<T>, start: number) {
|
|
|
201
201
|
}
|
|
202
202
|
|
|
203
203
|
for (let i = start, n = node.sources.length; i < n; i++) {
|
|
204
|
-
let
|
|
204
|
+
let observers = node.sources[i].observers;
|
|
205
205
|
|
|
206
|
-
if (
|
|
206
|
+
if (observers === null) {
|
|
207
207
|
continue;
|
|
208
208
|
}
|
|
209
209
|
|
|
210
|
-
|
|
211
|
-
|
|
210
|
+
observers[observers.indexOf(node)] = observers[observers.length - 1];
|
|
211
|
+
observers.pop();
|
|
212
212
|
}
|
|
213
213
|
}
|
|
214
214
|
|
|
@@ -266,7 +266,7 @@ function update<T>(node: Reactive<T>) {
|
|
|
266
266
|
for (let i = index, n = node.sources.length; i < n; i++) {
|
|
267
267
|
let source = node.sources[i];
|
|
268
268
|
|
|
269
|
-
if (
|
|
269
|
+
if (source.observers === null) {
|
|
270
270
|
source.observers = [node];
|
|
271
271
|
}
|
|
272
272
|
else {
|
|
@@ -294,12 +294,12 @@ function update<T>(node: Reactive<T>) {
|
|
|
294
294
|
|
|
295
295
|
|
|
296
296
|
const computed = <T>(fn: Computed<T>['fn'], options?: Options) => {
|
|
297
|
-
let instance = new Reactive(DIRTY, COMPUTED, undefined as T)
|
|
297
|
+
let instance = new Reactive(DIRTY, COMPUTED, undefined as T);
|
|
298
298
|
|
|
299
299
|
instance.changed = options?.changed || changed;
|
|
300
300
|
instance.fn = fn;
|
|
301
301
|
|
|
302
|
-
return instance
|
|
302
|
+
return instance as Computed<T>;
|
|
303
303
|
};
|
|
304
304
|
|
|
305
305
|
const dispose = <T extends { dispose: VoidFunction }>(dispose?: T[] | T | null) => {
|
|
@@ -318,14 +318,14 @@ const dispose = <T extends { dispose: VoidFunction }>(dispose?: T[] | T | null)
|
|
|
318
318
|
};
|
|
319
319
|
|
|
320
320
|
const effect = (fn: Effect['fn']) => {
|
|
321
|
-
let instance = new Reactive(DIRTY, EFFECT, null)
|
|
321
|
+
let instance = new Reactive(DIRTY, EFFECT, null);
|
|
322
322
|
|
|
323
323
|
instance.fn = fn;
|
|
324
324
|
instance.task = () => instance.get();
|
|
325
325
|
|
|
326
|
-
update(instance
|
|
326
|
+
update(instance);
|
|
327
327
|
|
|
328
|
-
return instance;
|
|
328
|
+
return instance as Effect;
|
|
329
329
|
};
|
|
330
330
|
|
|
331
331
|
const root = <T>(fn: NeverAsync<(root: Root) => T>, scheduler: Scheduler | null = null) => {
|
|
@@ -355,11 +355,11 @@ const root = <T>(fn: NeverAsync<(root: Root) => T>, scheduler: Scheduler | null
|
|
|
355
355
|
};
|
|
356
356
|
|
|
357
357
|
const signal = <T>(value: T, options?: Options) => {
|
|
358
|
-
let instance = new Reactive(CLEAN, SIGNAL, value)
|
|
358
|
+
let instance = new Reactive(CLEAN, SIGNAL, value);
|
|
359
359
|
|
|
360
360
|
instance.changed = options?.changed || changed;
|
|
361
361
|
|
|
362
|
-
return instance
|
|
362
|
+
return instance as Signal<T>;
|
|
363
363
|
};
|
|
364
364
|
|
|
365
365
|
|
package/src/types.ts
CHANGED
|
@@ -3,13 +3,14 @@ import { CHECK, CLEAN, COMPUTED, DIRTY, DISPOSED, EFFECT, ROOT, SIGNAL } from '.
|
|
|
3
3
|
import { Reactive } from './signal';
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
type Base<T> = Omit<Reactive<T>, 'changed' | 'fn' | 'scheduler' | 'task' | 'tracking'>;
|
|
6
|
+
type Base<T> = Omit<Reactive<T>, 'changed' | 'fn' | 'get' | 'scheduler' | 'set' | 'task' | 'tracking'>;
|
|
7
7
|
|
|
8
8
|
type Changed = (a: unknown, b: unknown) => boolean;
|
|
9
9
|
|
|
10
10
|
type Computed<T> = {
|
|
11
11
|
changed: Changed;
|
|
12
12
|
fn: NeverAsync<() => T>;
|
|
13
|
+
get(): T;
|
|
13
14
|
} & Base<T>;
|
|
14
15
|
|
|
15
16
|
type Effect = {
|
|
@@ -36,12 +37,14 @@ type Root = {
|
|
|
36
37
|
scheduler: Scheduler;
|
|
37
38
|
tracking: boolean;
|
|
38
39
|
value: void;
|
|
39
|
-
} & Omit<Reactive<void>, '
|
|
40
|
+
} & Omit<Reactive<void>, 'root'>;
|
|
40
41
|
|
|
41
42
|
type Scheduler = (fn: Function) => unknown;
|
|
42
43
|
|
|
43
44
|
type Signal<T> = {
|
|
44
45
|
changed: Changed;
|
|
46
|
+
get(): T;
|
|
47
|
+
set(value: T): T;
|
|
45
48
|
} & Base<T>;
|
|
46
49
|
|
|
47
50
|
type State = typeof CHECK | typeof CLEAN | typeof DIRTY | typeof DISPOSED;
|