signalium 0.3.8 → 1.0.1
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/.turbo/turbo-build.log +3 -3
- package/CHANGELOG.md +21 -0
- package/build/react.js +19 -0
- package/build/transform.js +19 -0
- package/dist/cjs/config.d.ts +8 -3
- package/dist/cjs/config.d.ts.map +1 -1
- package/dist/cjs/config.js +14 -8
- package/dist/cjs/config.js.map +1 -1
- package/dist/cjs/debug.d.ts +2 -2
- package/dist/cjs/debug.d.ts.map +1 -1
- package/dist/cjs/debug.js +3 -3
- package/dist/cjs/debug.js.map +1 -1
- package/dist/cjs/hooks.d.ts +14 -42
- package/dist/cjs/hooks.d.ts.map +1 -1
- package/dist/cjs/hooks.js +19 -240
- package/dist/cjs/hooks.js.map +1 -1
- package/dist/cjs/index.d.ts +5 -3
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +18 -18
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internals/async.d.ts +52 -0
- package/dist/cjs/internals/async.d.ts.map +1 -0
- package/dist/cjs/internals/async.js +394 -0
- package/dist/cjs/internals/async.js.map +1 -0
- package/dist/cjs/internals/connect.d.ts +4 -0
- package/dist/cjs/internals/connect.d.ts.map +1 -0
- package/dist/cjs/internals/connect.js +37 -0
- package/dist/cjs/internals/connect.js.map +1 -0
- package/dist/cjs/internals/consumer.d.ts +6 -0
- package/dist/cjs/internals/consumer.d.ts.map +1 -0
- package/dist/cjs/internals/consumer.js +13 -0
- package/dist/cjs/internals/consumer.js.map +1 -0
- package/dist/cjs/internals/contexts.d.ts +33 -0
- package/dist/cjs/internals/contexts.d.ts.map +1 -0
- package/dist/cjs/internals/contexts.js +103 -0
- package/dist/cjs/internals/contexts.js.map +1 -0
- package/dist/cjs/internals/derived.d.ts +66 -0
- package/dist/cjs/internals/derived.d.ts.map +1 -0
- package/dist/cjs/internals/derived.js +128 -0
- package/dist/cjs/internals/derived.js.map +1 -0
- package/dist/cjs/internals/dirty.d.ts +5 -0
- package/dist/cjs/internals/dirty.d.ts.map +1 -0
- package/dist/cjs/internals/dirty.js +79 -0
- package/dist/cjs/internals/dirty.js.map +1 -0
- package/dist/cjs/internals/edge.d.ts +32 -0
- package/dist/cjs/internals/edge.d.ts.map +1 -0
- package/dist/cjs/internals/edge.js +59 -0
- package/dist/cjs/internals/edge.js.map +1 -0
- package/dist/cjs/internals/get.d.ts +10 -0
- package/dist/cjs/internals/get.d.ts.map +1 -0
- package/dist/cjs/internals/get.js +255 -0
- package/dist/cjs/internals/get.js.map +1 -0
- package/dist/cjs/internals/scheduling.d.ts +12 -0
- package/dist/cjs/internals/scheduling.d.ts.map +1 -0
- package/dist/cjs/internals/scheduling.js +117 -0
- package/dist/cjs/internals/scheduling.js.map +1 -0
- package/dist/cjs/internals/state.d.ts +18 -0
- package/dist/cjs/internals/state.d.ts.map +1 -0
- package/dist/cjs/internals/state.js +88 -0
- package/dist/cjs/internals/state.js.map +1 -0
- package/dist/cjs/internals/utils/debug-name.d.ts +2 -0
- package/dist/cjs/internals/utils/debug-name.d.ts.map +1 -0
- package/dist/cjs/internals/utils/debug-name.js +14 -0
- package/dist/cjs/internals/utils/debug-name.js.map +1 -0
- package/dist/cjs/internals/utils/equals.d.ts +3 -0
- package/dist/cjs/internals/utils/equals.d.ts.map +1 -0
- package/dist/cjs/internals/utils/equals.js +13 -0
- package/dist/cjs/internals/utils/equals.js.map +1 -0
- package/dist/cjs/internals/utils/hash.d.ts +7 -0
- package/dist/cjs/internals/utils/hash.d.ts.map +1 -0
- package/dist/cjs/internals/utils/hash.js +181 -0
- package/dist/cjs/internals/utils/hash.js.map +1 -0
- package/dist/cjs/internals/utils/stringify.d.ts +3 -0
- package/dist/cjs/internals/utils/stringify.d.ts.map +1 -0
- package/dist/cjs/{utils.js → internals/utils/stringify.js} +5 -27
- package/dist/cjs/internals/utils/stringify.js.map +1 -0
- package/dist/cjs/internals/utils/type-utils.d.ts +6 -0
- package/dist/cjs/internals/utils/type-utils.d.ts.map +1 -0
- package/dist/cjs/internals/utils/type-utils.js +22 -0
- package/dist/cjs/internals/utils/type-utils.js.map +1 -0
- package/dist/cjs/react/context.d.ts +1 -1
- package/dist/cjs/react/context.d.ts.map +1 -1
- package/dist/cjs/react/provider.d.ts +4 -3
- package/dist/cjs/react/provider.d.ts.map +1 -1
- package/dist/cjs/react/provider.js +7 -3
- package/dist/cjs/react/provider.js.map +1 -1
- package/dist/cjs/react/setup.d.ts.map +1 -1
- package/dist/cjs/react/setup.js +2 -1
- package/dist/cjs/react/setup.js.map +1 -1
- package/dist/cjs/react/signal-value.d.ts +5 -1
- package/dist/cjs/react/signal-value.d.ts.map +1 -1
- package/dist/cjs/react/signal-value.js +35 -45
- package/dist/cjs/react/signal-value.js.map +1 -1
- package/dist/cjs/trace.d.ts +32 -28
- package/dist/cjs/trace.d.ts.map +1 -1
- package/dist/cjs/trace.js +14 -16
- package/dist/cjs/trace.js.map +1 -1
- package/dist/cjs/transform.d.ts +6 -0
- package/dist/cjs/transform.d.ts.map +1 -0
- package/dist/cjs/transform.js +92 -0
- package/dist/cjs/transform.js.map +1 -0
- package/dist/cjs/types.d.ts +32 -40
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/esm/config.d.ts +8 -3
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js +12 -7
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/debug.d.ts +2 -2
- package/dist/esm/debug.d.ts.map +1 -1
- package/dist/esm/debug.js +2 -2
- package/dist/esm/debug.js.map +1 -1
- package/dist/esm/hooks.d.ts +14 -42
- package/dist/esm/hooks.d.ts.map +1 -1
- package/dist/esm/hooks.js +17 -226
- package/dist/esm/hooks.js.map +1 -1
- package/dist/esm/index.d.ts +5 -3
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +5 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internals/async.d.ts +52 -0
- package/dist/esm/internals/async.d.ts.map +1 -0
- package/dist/esm/internals/async.js +387 -0
- package/dist/esm/internals/async.js.map +1 -0
- package/dist/esm/internals/connect.d.ts +4 -0
- package/dist/esm/internals/connect.d.ts.map +1 -0
- package/dist/esm/internals/connect.js +33 -0
- package/dist/esm/internals/connect.js.map +1 -0
- package/dist/esm/internals/consumer.d.ts +6 -0
- package/dist/esm/internals/consumer.d.ts.map +1 -0
- package/dist/esm/internals/consumer.js +9 -0
- package/dist/esm/internals/consumer.js.map +1 -0
- package/dist/esm/internals/contexts.d.ts +33 -0
- package/dist/esm/internals/contexts.d.ts.map +1 -0
- package/dist/esm/internals/contexts.js +92 -0
- package/dist/esm/internals/contexts.js.map +1 -0
- package/dist/esm/internals/derived.d.ts +66 -0
- package/dist/esm/internals/derived.d.ts.map +1 -0
- package/dist/esm/internals/derived.js +118 -0
- package/dist/esm/internals/derived.js.map +1 -0
- package/dist/esm/internals/dirty.d.ts +5 -0
- package/dist/esm/internals/dirty.d.ts.map +1 -0
- package/dist/esm/internals/dirty.js +75 -0
- package/dist/esm/internals/dirty.js.map +1 -0
- package/dist/esm/internals/edge.d.ts +32 -0
- package/dist/esm/internals/edge.d.ts.map +1 -0
- package/dist/esm/internals/edge.js +54 -0
- package/dist/esm/internals/edge.js.map +1 -0
- package/dist/esm/internals/get.d.ts +10 -0
- package/dist/esm/internals/get.d.ts.map +1 -0
- package/dist/esm/internals/get.js +247 -0
- package/dist/esm/internals/get.js.map +1 -0
- package/dist/esm/internals/scheduling.d.ts +12 -0
- package/dist/esm/internals/scheduling.d.ts.map +1 -0
- package/dist/esm/internals/scheduling.js +106 -0
- package/dist/esm/internals/scheduling.js.map +1 -0
- package/dist/esm/internals/state.d.ts +18 -0
- package/dist/esm/internals/state.d.ts.map +1 -0
- package/dist/esm/internals/state.js +82 -0
- package/dist/esm/internals/state.js.map +1 -0
- package/dist/esm/internals/utils/debug-name.d.ts +2 -0
- package/dist/esm/internals/utils/debug-name.d.ts.map +1 -0
- package/dist/esm/internals/utils/debug-name.js +11 -0
- package/dist/esm/internals/utils/debug-name.js.map +1 -0
- package/dist/esm/internals/utils/equals.d.ts +3 -0
- package/dist/esm/internals/utils/equals.d.ts.map +1 -0
- package/dist/esm/internals/utils/equals.js +9 -0
- package/dist/esm/internals/utils/equals.js.map +1 -0
- package/dist/esm/internals/utils/hash.d.ts +7 -0
- package/dist/esm/internals/utils/hash.d.ts.map +1 -0
- package/dist/esm/internals/utils/hash.js +174 -0
- package/dist/esm/internals/utils/hash.js.map +1 -0
- package/dist/esm/internals/utils/stringify.d.ts +3 -0
- package/dist/esm/internals/utils/stringify.d.ts.map +1 -0
- package/dist/esm/{utils.js → internals/utils/stringify.js} +4 -25
- package/dist/esm/internals/utils/stringify.js.map +1 -0
- package/dist/esm/internals/utils/type-utils.d.ts +6 -0
- package/dist/esm/internals/utils/type-utils.d.ts.map +1 -0
- package/dist/esm/internals/utils/type-utils.js +15 -0
- package/dist/esm/internals/utils/type-utils.js.map +1 -0
- package/dist/esm/react/context.d.ts +1 -1
- package/dist/esm/react/context.d.ts.map +1 -1
- package/dist/esm/react/provider.d.ts +4 -3
- package/dist/esm/react/provider.d.ts.map +1 -1
- package/dist/esm/react/provider.js +6 -2
- package/dist/esm/react/provider.js.map +1 -1
- package/dist/esm/react/setup.d.ts.map +1 -1
- package/dist/esm/react/setup.js +3 -2
- package/dist/esm/react/setup.js.map +1 -1
- package/dist/esm/react/signal-value.d.ts +5 -1
- package/dist/esm/react/signal-value.d.ts.map +1 -1
- package/dist/esm/react/signal-value.js +34 -45
- package/dist/esm/react/signal-value.js.map +1 -1
- package/dist/esm/trace.d.ts +32 -28
- package/dist/esm/trace.d.ts.map +1 -1
- package/dist/esm/trace.js +13 -15
- package/dist/esm/trace.js.map +1 -1
- package/dist/esm/transform.d.ts +6 -0
- package/dist/esm/transform.d.ts.map +1 -0
- package/dist/esm/transform.js +89 -0
- package/dist/esm/transform.js.map +1 -0
- package/dist/esm/types.d.ts +32 -40
- package/dist/esm/types.d.ts.map +1 -1
- package/package.json +23 -4
- package/src/__tests__/__snapshots__/context.test.ts.snap +2101 -0
- package/src/__tests__/__snapshots__/nesting.test.ts.snap +16201 -0
- package/src/__tests__/__snapshots__/params-and-state.test.ts.snap +1879 -0
- package/src/__tests__/async-task.test.ts +327 -0
- package/src/__tests__/context.test.ts +517 -0
- package/src/__tests__/nesting.test.ts +298 -0
- package/src/__tests__/params-and-state.test.ts +230 -0
- package/src/__tests__/reactive-async.test.ts +548 -0
- package/src/__tests__/reactive-sync.test.ts +130 -0
- package/src/__tests__/subscription.test.ts +510 -0
- package/src/__tests__/utils/async.ts +1 -1
- package/src/__tests__/utils/instrumented-hooks.ts +229 -124
- package/src/__tests__/utils/permute.ts +25 -14
- package/src/config.ts +19 -9
- package/src/debug.ts +2 -2
- package/src/hooks.ts +46 -380
- package/src/index.ts +7 -24
- package/src/internals/async.ts +558 -0
- package/src/internals/connect.ts +41 -0
- package/src/internals/consumer.ts +13 -0
- package/src/internals/contexts.ts +133 -0
- package/src/internals/derived.ts +208 -0
- package/src/internals/dirty.ts +91 -0
- package/src/internals/edge.ts +109 -0
- package/src/internals/get.ts +298 -0
- package/src/internals/scheduling.ts +140 -0
- package/src/internals/state.ts +111 -0
- package/src/internals/utils/debug-name.ts +14 -0
- package/src/internals/utils/equals.ts +12 -0
- package/src/internals/utils/hash.ts +221 -0
- package/src/{utils.ts → internals/utils/stringify.ts} +3 -29
- package/src/internals/utils/type-utils.ts +19 -0
- package/src/react/__tests__/async.test.tsx +704 -0
- package/src/react/__tests__/basic.test.tsx +95 -0
- package/src/react/__tests__/contexts.test.tsx +99 -0
- package/src/react/__tests__/subscriptions.test.tsx +49 -0
- package/src/react/__tests__/utils.tsx +40 -0
- package/src/react/context.ts +1 -1
- package/src/react/provider.tsx +12 -4
- package/src/react/setup.ts +3 -2
- package/src/react/signal-value.ts +47 -67
- package/src/trace.ts +43 -38
- package/src/transform.ts +113 -0
- package/src/types.ts +56 -46
- package/transform.js +19 -0
- package/vitest.workspace.ts +38 -2
- package/dist/cjs/scheduling.d.ts +0 -11
- package/dist/cjs/scheduling.d.ts.map +0 -1
- package/dist/cjs/scheduling.js +0 -108
- package/dist/cjs/scheduling.js.map +0 -1
- package/dist/cjs/signals.d.ts +0 -73
- package/dist/cjs/signals.d.ts.map +0 -1
- package/dist/cjs/signals.js +0 -632
- package/dist/cjs/signals.js.map +0 -1
- package/dist/cjs/utils.d.ts +0 -4
- package/dist/cjs/utils.d.ts.map +0 -1
- package/dist/cjs/utils.js.map +0 -1
- package/dist/esm/scheduling.d.ts +0 -11
- package/dist/esm/scheduling.d.ts.map +0 -1
- package/dist/esm/scheduling.js +0 -97
- package/dist/esm/scheduling.js.map +0 -1
- package/dist/esm/signals.d.ts +0 -73
- package/dist/esm/signals.d.ts.map +0 -1
- package/dist/esm/signals.js +0 -614
- package/dist/esm/signals.js.map +0 -1
- package/dist/esm/utils.d.ts +0 -4
- package/dist/esm/utils.d.ts.map +0 -1
- package/dist/esm/utils.js.map +0 -1
- package/src/__tests__/hooks/async-computed.test.ts +0 -190
- package/src/__tests__/hooks/async-task.test.ts +0 -334
- package/src/__tests__/hooks/computed.test.ts +0 -126
- package/src/__tests__/hooks/context.test.ts +0 -527
- package/src/__tests__/hooks/nesting.test.ts +0 -303
- package/src/__tests__/hooks/params-and-state.test.ts +0 -168
- package/src/__tests__/hooks/subscription.test.ts +0 -97
- package/src/__tests__/signals/async.test.ts +0 -416
- package/src/__tests__/signals/basic.test.ts +0 -399
- package/src/__tests__/signals/subscription.test.ts +0 -632
- package/src/__tests__/signals/watcher.test.ts +0 -253
- package/src/__tests__/utils/builders.ts +0 -22
- package/src/__tests__/utils/instrumented-signals.ts +0 -291
- package/src/react/__tests__/react.test.tsx +0 -227
- package/src/scheduling.ts +0 -130
- package/src/signals.ts +0 -824
package/src/trace.ts
CHANGED
@@ -1,23 +1,22 @@
|
|
1
|
-
import { scheduleTracer } from './scheduling.js';
|
2
|
-
import {
|
3
|
-
import { Signal
|
1
|
+
import { scheduleTracer } from './internals/scheduling.js';
|
2
|
+
import { DerivedSignal, SignalId } from './internals/derived.js';
|
3
|
+
import { Signal } from './types.js';
|
4
4
|
|
5
5
|
export let TRACER: TracerProxy | undefined;
|
6
6
|
|
7
|
-
export enum VisualizerNodeType {
|
8
|
-
State,
|
9
|
-
Computed,
|
10
|
-
AsyncComputed,
|
11
|
-
Subscription,
|
12
|
-
Watcher,
|
13
|
-
}
|
14
|
-
|
15
7
|
export interface VisualizerLink {
|
16
8
|
connected: boolean;
|
17
9
|
version: number;
|
18
10
|
node: VisualizerNode;
|
19
11
|
}
|
20
12
|
|
13
|
+
export interface TracerMeta {
|
14
|
+
id: string | number;
|
15
|
+
desc: string;
|
16
|
+
params: string;
|
17
|
+
tracer?: Tracer;
|
18
|
+
}
|
19
|
+
|
21
20
|
export enum TracerEventType {
|
22
21
|
StartUpdate = 'StartUpdate',
|
23
22
|
EndUpdate = 'EndUpdate',
|
@@ -32,46 +31,46 @@ export enum TracerEventType {
|
|
32
31
|
|
33
32
|
type StartUpdateEvent = {
|
34
33
|
type: TracerEventType.StartUpdate;
|
35
|
-
id: string;
|
34
|
+
id: string | number;
|
36
35
|
};
|
37
36
|
|
38
37
|
type EndUpdateEvent = {
|
39
38
|
type: TracerEventType.EndUpdate;
|
40
|
-
id: string;
|
39
|
+
id: string | number;
|
41
40
|
value: unknown;
|
42
41
|
preserveChildren?: boolean;
|
43
42
|
};
|
44
43
|
|
45
44
|
type StartLoadingEvent = {
|
46
45
|
type: TracerEventType.StartLoading;
|
47
|
-
id: string;
|
46
|
+
id: string | number;
|
48
47
|
};
|
49
48
|
|
50
49
|
type EndLoadingEvent = {
|
51
50
|
type: TracerEventType.EndLoading;
|
52
|
-
id: string;
|
51
|
+
id: string | number;
|
53
52
|
value: unknown;
|
54
53
|
};
|
55
54
|
|
56
55
|
type ConnectedEvent = {
|
57
56
|
type: TracerEventType.Connected;
|
58
|
-
id: string;
|
59
|
-
childId: string;
|
60
|
-
nodeType:
|
57
|
+
id: string | number;
|
58
|
+
childId: string | number;
|
59
|
+
nodeType: SignalType;
|
61
60
|
name?: string;
|
62
61
|
params?: string;
|
63
62
|
};
|
64
63
|
|
65
64
|
type DisconnectedEvent = {
|
66
65
|
type: TracerEventType.Disconnected;
|
67
|
-
id: string;
|
68
|
-
childId: string;
|
66
|
+
id: string | number;
|
67
|
+
childId: string | number;
|
69
68
|
};
|
70
69
|
|
71
70
|
type ConsumeStateEvent = {
|
72
71
|
type: TracerEventType.ConsumeState;
|
73
|
-
id: string;
|
74
|
-
childId: string;
|
72
|
+
id: string | number;
|
73
|
+
childId: string | number;
|
75
74
|
value: unknown;
|
76
75
|
setValue: (value: unknown) => void;
|
77
76
|
};
|
@@ -85,6 +84,12 @@ type TracerEvent =
|
|
85
84
|
| DisconnectedEvent
|
86
85
|
| ConsumeStateEvent;
|
87
86
|
|
87
|
+
export enum SignalType {
|
88
|
+
State = 'state',
|
89
|
+
Reactive = 'reactive',
|
90
|
+
Watcher = 'watcher',
|
91
|
+
}
|
92
|
+
|
88
93
|
export class VisualizerNode {
|
89
94
|
private subscribers: (() => void)[] = [];
|
90
95
|
|
@@ -102,8 +107,8 @@ export class VisualizerNode {
|
|
102
107
|
constructor(
|
103
108
|
private tracer: Tracer,
|
104
109
|
public depth: number,
|
105
|
-
public type:
|
106
|
-
public id: string,
|
110
|
+
public type: SignalType,
|
111
|
+
public id: string | number,
|
107
112
|
public value: unknown,
|
108
113
|
public name?: string,
|
109
114
|
public params?: string,
|
@@ -125,7 +130,7 @@ export class VisualizerNode {
|
|
125
130
|
}
|
126
131
|
|
127
132
|
setValue(value: unknown) {
|
128
|
-
if (this.type !==
|
133
|
+
if (this.type !== SignalType.State) {
|
129
134
|
throw new Error('setValue is only allowed on state nodes');
|
130
135
|
}
|
131
136
|
|
@@ -168,7 +173,7 @@ export class VisualizerNode {
|
|
168
173
|
return shouldSkip;
|
169
174
|
}
|
170
175
|
|
171
|
-
disconnectChild(childId: string) {
|
176
|
+
disconnectChild(childId: string | number) {
|
172
177
|
const childLink = this.children.find(link => link.node.id === childId);
|
173
178
|
|
174
179
|
if (!childLink) {
|
@@ -208,7 +213,7 @@ export class VisualizerNode {
|
|
208
213
|
this.notify();
|
209
214
|
}
|
210
215
|
|
211
|
-
consumeState(id: string, value: unknown, setValue: (value: unknown) => void) {
|
216
|
+
consumeState(id: string | number, value: unknown, setValue: (value: unknown) => void) {
|
212
217
|
const existing = this.stateChildren.find(child => child.id === id);
|
213
218
|
|
214
219
|
if (existing) {
|
@@ -219,7 +224,7 @@ export class VisualizerNode {
|
|
219
224
|
const node = new VisualizerNode(
|
220
225
|
this.tracer,
|
221
226
|
this.depth + 1,
|
222
|
-
|
227
|
+
SignalType.State,
|
223
228
|
id,
|
224
229
|
value,
|
225
230
|
undefined,
|
@@ -281,7 +286,7 @@ class TraceFlush {
|
|
281
286
|
}
|
282
287
|
|
283
288
|
export class Tracer {
|
284
|
-
private nodeMap = new Map<string, VisualizerNode>();
|
289
|
+
private nodeMap = new Map<string | number, VisualizerNode>();
|
285
290
|
|
286
291
|
delay = 200;
|
287
292
|
maxDepth = 0;
|
@@ -289,7 +294,7 @@ export class Tracer {
|
|
289
294
|
private initialized = false;
|
290
295
|
|
291
296
|
constructor(
|
292
|
-
id: string,
|
297
|
+
id: string | number,
|
293
298
|
immediate = false,
|
294
299
|
public showParams = true,
|
295
300
|
public showValue = true,
|
@@ -298,7 +303,7 @@ export class Tracer {
|
|
298
303
|
// If it's immediate, we should run the first flush immediately, skipping animations
|
299
304
|
this.initialized = !immediate;
|
300
305
|
|
301
|
-
const node = new VisualizerNode(this, 0,
|
306
|
+
const node = new VisualizerNode(this, 0, SignalType.Watcher, id, '');
|
302
307
|
|
303
308
|
this.rootNode = node;
|
304
309
|
this.nodeMap.set(id, node);
|
@@ -313,14 +318,14 @@ export class Tracer {
|
|
313
318
|
if (event.type === TracerEventType.Connected || event.type === TracerEventType.ConsumeState) {
|
314
319
|
const node = this.nodeMap.get(event.id);
|
315
320
|
|
316
|
-
if (!node) {
|
321
|
+
if (!node || (event.type === TracerEventType.Connected && !event.name)) {
|
317
322
|
return;
|
318
323
|
}
|
319
324
|
|
320
325
|
if (!this.nodeMap.has(event.childId)) {
|
321
326
|
const name = event.type === TracerEventType.Connected ? event.name : undefined;
|
322
327
|
const params = event.type === TracerEventType.Connected ? event.params : undefined;
|
323
|
-
const nodeType = event.type === TracerEventType.Connected ? event.nodeType :
|
328
|
+
const nodeType = event.type === TracerEventType.Connected ? event.nodeType : SignalType.State;
|
324
329
|
|
325
330
|
this.nodeMap.set(
|
326
331
|
event.childId,
|
@@ -402,7 +407,7 @@ class TracerProxy {
|
|
402
407
|
this.tracers.forEach(tracer => tracer.emit(event));
|
403
408
|
}
|
404
409
|
|
405
|
-
createTracer(id: string, immediate = false): Tracer {
|
410
|
+
createTracer(id: string | number, immediate = false): Tracer {
|
406
411
|
const tracer = new Tracer(id, immediate);
|
407
412
|
|
408
413
|
this.tracers.push(tracer);
|
@@ -427,12 +432,12 @@ export function setTracing(enabled: boolean) {
|
|
427
432
|
}
|
428
433
|
}
|
429
434
|
|
430
|
-
export function createTracer(_signal: Signal<unknown
|
431
|
-
const signal = _signal as
|
432
|
-
return createTracerFromId(signal.
|
435
|
+
export function createTracer(_signal: Signal<unknown>, immediate = false) {
|
436
|
+
const signal = _signal as unknown as DerivedSignal<unknown, unknown[]>;
|
437
|
+
return createTracerFromId(signal.tracerMeta!.id, immediate);
|
433
438
|
}
|
434
439
|
|
435
|
-
export function createTracerFromId(id: string, immediate = false) {
|
440
|
+
export function createTracerFromId(id: string | number, immediate = false) {
|
436
441
|
if (!TRACER) {
|
437
442
|
throw new Error('Tracing is not enabled');
|
438
443
|
}
|
package/src/transform.ts
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
import type { NodePath, PluginObj, types as t } from '@babel/core';
|
2
|
+
|
3
|
+
export interface SignaliumAsyncTransformOptions {
|
4
|
+
transformedImports: [string, string | RegExp][];
|
5
|
+
}
|
6
|
+
|
7
|
+
export function signaliumAsyncTransform(opts?: SignaliumAsyncTransformOptions): (api: any) => PluginObj {
|
8
|
+
const transformedImports: Record<string, [string | RegExp]> = {
|
9
|
+
callback: ['signalium'],
|
10
|
+
reactive: ['signalium'],
|
11
|
+
subscription: ['signalium'],
|
12
|
+
task: ['signalium'],
|
13
|
+
};
|
14
|
+
|
15
|
+
for (const [name, path] of opts?.transformedImports ?? []) {
|
16
|
+
const existing = transformedImports[name];
|
17
|
+
|
18
|
+
if (existing) {
|
19
|
+
existing.push(path);
|
20
|
+
} else {
|
21
|
+
transformedImports[name] = [path];
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
return api => {
|
26
|
+
const t = api.types;
|
27
|
+
|
28
|
+
const isReactiveCall = (path: any) => {
|
29
|
+
if (!t.isCallExpression(path.node)) return false;
|
30
|
+
const callee = path.node.callee;
|
31
|
+
|
32
|
+
const importPath = transformedImports[callee.name];
|
33
|
+
|
34
|
+
if (!importPath) return false;
|
35
|
+
|
36
|
+
// Check if reactive is imported from signalium
|
37
|
+
const binding = path.scope.getBinding(callee.name);
|
38
|
+
if (!binding || !t.isImportSpecifier(binding.path.node)) return false;
|
39
|
+
|
40
|
+
const importDecl = binding.path.parent;
|
41
|
+
|
42
|
+
if (!t.isImportDeclaration(importDecl)) return false;
|
43
|
+
|
44
|
+
return importPath.some(p =>
|
45
|
+
typeof p === 'string' ? importDecl.source.value === p : p.test(importDecl.source.value),
|
46
|
+
);
|
47
|
+
};
|
48
|
+
|
49
|
+
function convertReactiveToGenerator(path: NodePath<t.FunctionExpression | t.ArrowFunctionExpression>) {
|
50
|
+
// Only transform if parent is a reactive() call
|
51
|
+
const parentPath = path.parentPath;
|
52
|
+
if (!isReactiveCall(parentPath)) return;
|
53
|
+
if (!path.node.async) return;
|
54
|
+
|
55
|
+
// Transform all await expressions to yields
|
56
|
+
path.traverse({
|
57
|
+
AwaitExpression(awaitPath) {
|
58
|
+
const funcParent = awaitPath.getFunctionParent();
|
59
|
+
if (funcParent?.node !== path.node) return;
|
60
|
+
|
61
|
+
awaitPath.replaceWith(t.yieldExpression(awaitPath.node.argument));
|
62
|
+
},
|
63
|
+
});
|
64
|
+
|
65
|
+
// Remove async keyword
|
66
|
+
path.node.async = false;
|
67
|
+
|
68
|
+
if (t.isArrowFunctionExpression(path.node)) {
|
69
|
+
// Convert arrow function to regular function expression
|
70
|
+
let hasThis = false;
|
71
|
+
|
72
|
+
// Scan for this keywords
|
73
|
+
path.traverse({
|
74
|
+
ThisExpression() {
|
75
|
+
hasThis = true;
|
76
|
+
},
|
77
|
+
});
|
78
|
+
|
79
|
+
const functionBody = t.isBlockStatement(path.node.body)
|
80
|
+
? path.node.body
|
81
|
+
: t.blockStatement([t.returnStatement(path.node.body)]);
|
82
|
+
|
83
|
+
const newFunction = t.functionExpression(
|
84
|
+
null,
|
85
|
+
path.node.params,
|
86
|
+
functionBody,
|
87
|
+
true, // generator
|
88
|
+
false, // async
|
89
|
+
);
|
90
|
+
|
91
|
+
// If we found 'this' usage, wrap in bind call
|
92
|
+
if (hasThis) {
|
93
|
+
path.replaceWith(
|
94
|
+
t.callExpression(t.memberExpression(newFunction, t.identifier('bind')), [t.thisExpression()]),
|
95
|
+
);
|
96
|
+
} else {
|
97
|
+
path.replaceWith(newFunction);
|
98
|
+
}
|
99
|
+
} else {
|
100
|
+
// Regular function - just set generator flag
|
101
|
+
path.node.generator = true;
|
102
|
+
}
|
103
|
+
}
|
104
|
+
|
105
|
+
return {
|
106
|
+
name: 'transform-reactive-async',
|
107
|
+
visitor: {
|
108
|
+
FunctionExpression: convertReactiveToGenerator,
|
109
|
+
ArrowFunctionExpression: convertReactiveToGenerator,
|
110
|
+
},
|
111
|
+
};
|
112
|
+
};
|
113
|
+
}
|
package/src/types.ts
CHANGED
@@ -1,91 +1,101 @@
|
|
1
|
-
import
|
1
|
+
import { SignalScope } from './internals/contexts.js';
|
2
2
|
|
3
3
|
export interface Signal<T = unknown> {
|
4
4
|
get(): T;
|
5
|
+
addListener(listener: SignalListener): () => void;
|
5
6
|
}
|
6
7
|
|
7
8
|
export interface WriteableSignal<T> extends Signal<T> {
|
8
9
|
set(value: T): void;
|
9
10
|
}
|
10
11
|
|
11
|
-
export type AsyncSignal<T> = Signal<AsyncResult<T>>;
|
12
|
-
|
13
|
-
export type SignalCompute<T> = (prev: T | undefined) => T;
|
14
|
-
|
15
|
-
export type SignalAsyncCompute<T> = (prev: T | undefined) => T | Promise<T>;
|
16
|
-
|
17
12
|
export type SignalEquals<T> = (prev: T, next: T) => boolean;
|
18
13
|
|
14
|
+
export type SignalListener = () => void;
|
15
|
+
|
19
16
|
export type SignalSubscription = {
|
20
17
|
update?(): void;
|
21
18
|
unsubscribe?(): void;
|
22
19
|
};
|
23
20
|
|
24
21
|
export interface SubscriptionState<T> {
|
25
|
-
get: () => T;
|
26
|
-
set: (value: T) => void;
|
22
|
+
get: () => T | undefined;
|
23
|
+
set: (value: T | Promise<T>) => void;
|
24
|
+
setError: (error: unknown) => void;
|
27
25
|
}
|
28
26
|
|
29
|
-
export type SignalSubscribe<T
|
27
|
+
export type SignalSubscribe<T> = (
|
30
28
|
state: SubscriptionState<T>,
|
31
|
-
...args: Args
|
32
29
|
) => SignalSubscription | (() => unknown) | undefined | void;
|
33
30
|
|
34
31
|
export interface SignalOptions<T, Args extends unknown[]> {
|
35
32
|
equals?: SignalEquals<T> | false;
|
36
33
|
id?: string;
|
37
34
|
desc?: string;
|
38
|
-
params?: string;
|
39
35
|
scope?: SignalScope;
|
40
36
|
paramKey?: (...args: Args) => string;
|
41
37
|
}
|
42
38
|
|
43
39
|
export interface SignalOptionsWithInit<T, Args extends unknown[]> extends SignalOptions<T, Args> {
|
44
|
-
initValue: T;
|
45
|
-
}
|
46
|
-
|
47
|
-
export interface AsyncBaseResult<T> {
|
48
|
-
invalidate(): void;
|
49
|
-
await(): T;
|
40
|
+
initValue: T extends Promise<infer U> ? U : T extends Generator<any, infer U, any> ? U : T;
|
50
41
|
}
|
51
42
|
|
52
|
-
export interface
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
isError: boolean;
|
58
|
-
isSuccess: boolean;
|
59
|
-
didResolve: boolean;
|
43
|
+
export interface Thenable<T> {
|
44
|
+
then(onfulfilled?: (value: T) => void, onrejected?: (reason: unknown) => void): void;
|
45
|
+
finally: any;
|
46
|
+
catch: any;
|
47
|
+
[Symbol.toStringTag]: string;
|
60
48
|
}
|
61
49
|
|
62
|
-
export interface
|
63
|
-
|
50
|
+
export interface BaseReactivePromise<T> extends Promise<T> {
|
51
|
+
value: T | undefined;
|
64
52
|
error: unknown;
|
65
|
-
isPending: boolean;
|
66
|
-
isReady: true;
|
67
|
-
isError: boolean;
|
68
|
-
isSuccess: boolean;
|
69
|
-
didResolve: boolean;
|
70
|
-
}
|
71
|
-
|
72
|
-
export type AsyncResult<T> = AsyncPending<T> | AsyncReady<T>;
|
73
53
|
|
74
|
-
export interface AsyncTask<T, RunArgs extends unknown[] = unknown[]> {
|
75
|
-
result: T | undefined;
|
76
|
-
error: unknown;
|
77
54
|
isPending: boolean;
|
78
|
-
|
79
|
-
|
55
|
+
isRejected: boolean;
|
56
|
+
isResolved: boolean;
|
57
|
+
isSettled: boolean;
|
80
58
|
isReady: boolean;
|
81
59
|
|
82
|
-
|
60
|
+
rerun(): void;
|
83
61
|
}
|
84
62
|
|
85
|
-
export interface
|
86
|
-
|
63
|
+
export interface PendingReactivePromise<T> extends BaseReactivePromise<T> {
|
64
|
+
value: undefined;
|
65
|
+
isReady: false;
|
87
66
|
}
|
88
67
|
|
89
|
-
export interface
|
90
|
-
|
68
|
+
export interface ReadyReactivePromise<T> extends BaseReactivePromise<T> {
|
69
|
+
value: T;
|
70
|
+
isReady: true;
|
91
71
|
}
|
72
|
+
|
73
|
+
export type ReactivePromise<T> = PendingReactivePromise<T> | ReadyReactivePromise<T>;
|
74
|
+
|
75
|
+
export type ReactiveTask<T, Args extends unknown[]> = Omit<ReactivePromise<T>, 'notify'> & {
|
76
|
+
run(...args: Args): ReactivePromise<T>;
|
77
|
+
};
|
78
|
+
|
79
|
+
export type ReactiveSubscription<T> = Omit<ReactivePromise<T>, 'rerun'>;
|
80
|
+
|
81
|
+
export type ReactiveValue<T> =
|
82
|
+
// We have to first check if T is a ReactiveTask, because it will also match Promise<T>
|
83
|
+
T extends ReactiveTask<infer U, infer Args>
|
84
|
+
? ReactiveTask<U, Args>
|
85
|
+
: T extends Promise<infer U>
|
86
|
+
? ReactivePromise<U>
|
87
|
+
: T extends Generator<any, infer U>
|
88
|
+
? ReactivePromise<U>
|
89
|
+
: T;
|
90
|
+
|
91
|
+
// This type is used when initial values are provided to async functions and
|
92
|
+
// subscriptions. It allows us to skip checking `isReady` when there is always
|
93
|
+
// a guaranteed value to return.
|
94
|
+
export type ReadyReactiveValue<T> =
|
95
|
+
T extends ReactiveTask<infer U, infer Args>
|
96
|
+
? ReactiveTask<U, Args>
|
97
|
+
: T extends Promise<infer U>
|
98
|
+
? ReadyReactivePromise<U>
|
99
|
+
: T extends Generator<any, infer U>
|
100
|
+
? ReadyReactivePromise<U>
|
101
|
+
: T;
|
package/transform.js
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
// This file is for backwards compatibility with non-module build systems
|
2
|
+
//
|
3
|
+
// TODO: Generate this automatically on build/publish
|
4
|
+
|
5
|
+
'use strict';
|
6
|
+
Object.defineProperty(exports, '__esModule', {
|
7
|
+
value: true,
|
8
|
+
});
|
9
|
+
var _index = require('./dist/cjs/transform.js');
|
10
|
+
Object.keys(_index).forEach(function (key) {
|
11
|
+
if (key === 'default' || key === '__esModule') return;
|
12
|
+
if (key in exports && exports[key] === _index[key]) return;
|
13
|
+
Object.defineProperty(exports, key, {
|
14
|
+
enumerable: true,
|
15
|
+
get: function () {
|
16
|
+
return _index[key];
|
17
|
+
},
|
18
|
+
});
|
19
|
+
});
|
package/vitest.workspace.ts
CHANGED
@@ -2,9 +2,32 @@
|
|
2
2
|
|
3
3
|
import { defineWorkspace } from 'vitest/config';
|
4
4
|
import react from '@vitejs/plugin-react';
|
5
|
+
import babel from 'vite-plugin-babel';
|
6
|
+
import { signaliumAsyncTransform } from './src/transform.js';
|
5
7
|
|
6
8
|
export default defineWorkspace([
|
7
9
|
{
|
10
|
+
plugins: [
|
11
|
+
(babel as any)({
|
12
|
+
filter: /\.(j|t)sx?$/,
|
13
|
+
babelConfig: {
|
14
|
+
babelrc: false,
|
15
|
+
configFile: false,
|
16
|
+
sourceMaps: true,
|
17
|
+
plugins: [
|
18
|
+
signaliumAsyncTransform({
|
19
|
+
transformedImports: [
|
20
|
+
['reactive', /instrumented-hooks.js$/],
|
21
|
+
['task', /instrumented-hooks.js$/],
|
22
|
+
],
|
23
|
+
}),
|
24
|
+
],
|
25
|
+
parserOpts: {
|
26
|
+
plugins: ['typescript'],
|
27
|
+
},
|
28
|
+
},
|
29
|
+
}),
|
30
|
+
],
|
8
31
|
test: {
|
9
32
|
include: ['src/__tests__/**/*.test.ts'],
|
10
33
|
name: 'unit',
|
@@ -12,9 +35,22 @@ export default defineWorkspace([
|
|
12
35
|
},
|
13
36
|
},
|
14
37
|
{
|
15
|
-
plugins: [
|
38
|
+
plugins: [
|
39
|
+
react({
|
40
|
+
babel: {
|
41
|
+
plugins: [
|
42
|
+
signaliumAsyncTransform({
|
43
|
+
transformedImports: [
|
44
|
+
['reactive', /instrumented-hooks.js$/],
|
45
|
+
['task', /instrumented-hooks.js$/],
|
46
|
+
],
|
47
|
+
}),
|
48
|
+
],
|
49
|
+
},
|
50
|
+
}),
|
51
|
+
],
|
16
52
|
test: {
|
17
|
-
include: ['src/**/*.test.ts'],
|
53
|
+
include: ['src/react/__tests__/**/*.test.ts(x)'],
|
18
54
|
browser: {
|
19
55
|
enabled: true,
|
20
56
|
provider: 'playwright',
|
package/dist/cjs/scheduling.d.ts
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
import { ComputedSignal } from './signals.js';
|
2
|
-
import { Tracer } from './trace.js';
|
3
|
-
export declare const scheduleWatcher: (watcher: ComputedSignal<any>) => void;
|
4
|
-
export declare const scheduleDirty: (signal: ComputedSignal<any>) => void;
|
5
|
-
export declare const schedulePull: (signal: ComputedSignal<any>) => void;
|
6
|
-
export declare const scheduleConnect: (connect: ComputedSignal<any>) => void;
|
7
|
-
export declare const scheduleDisconnect: (disconnect: ComputedSignal<any>) => void;
|
8
|
-
export declare const scheduleEffect: (signal: ComputedSignal<any>) => void;
|
9
|
-
export declare const scheduleTracer: (tracer: Tracer) => void;
|
10
|
-
export declare const settled: () => Promise<void>;
|
11
|
-
//# sourceMappingURL=scheduling.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"scheduling.d.ts","sourceRoot":"","sources":["../../src/scheduling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAyBpC,eAAO,MAAM,eAAe,YAAa,cAAc,CAAC,GAAG,CAAC,SAI3D,CAAC;AAEF,eAAO,MAAM,aAAa,WAAY,cAAc,CAAC,GAAG,CAAC,SAGxD,CAAC;AAEF,eAAO,MAAM,YAAY,WAAY,cAAc,CAAC,GAAG,CAAC,SAGvD,CAAC;AAEF,eAAO,MAAM,eAAe,YAAa,cAAc,CAAC,GAAG,CAAC,SAM3D,CAAC;AAEF,eAAO,MAAM,kBAAkB,eAAgB,cAAc,CAAC,GAAG,CAAC,SAMjE,CAAC;AAEF,eAAO,MAAM,cAAc,WAAY,cAAc,CAAC,GAAG,CAAC,SAGzD,CAAC;AAEF,eAAO,MAAM,cAAc,WAAY,MAAM,SAG5C,CAAC;AA0DF,eAAO,MAAM,OAAO,qBAInB,CAAC"}
|
package/dist/cjs/scheduling.js
DELETED
@@ -1,108 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.settled = exports.scheduleTracer = exports.scheduleEffect = exports.scheduleDisconnect = exports.scheduleConnect = exports.schedulePull = exports.scheduleDirty = exports.scheduleWatcher = void 0;
|
4
|
-
const config_js_1 = require("./config.js");
|
5
|
-
let PENDING_DIRTIES = [];
|
6
|
-
let PENDING_PULLS = [];
|
7
|
-
let PENDING_WATCHERS = [];
|
8
|
-
let PENDING_CONNECTS = new Map();
|
9
|
-
let PENDING_DISCONNECTS = new Map();
|
10
|
-
let PENDING_EFFECTS = [];
|
11
|
-
let PENDING_TRACERS = [];
|
12
|
-
const microtask = () => Promise.resolve();
|
13
|
-
let currentFlush = null;
|
14
|
-
const scheduleFlush = (fn) => {
|
15
|
-
if (currentFlush)
|
16
|
-
return;
|
17
|
-
let resolve;
|
18
|
-
const promise = new Promise(r => (resolve = r));
|
19
|
-
currentFlush = { promise, resolve: resolve };
|
20
|
-
(0, config_js_1.scheduleFlush)(flushWatchers);
|
21
|
-
};
|
22
|
-
const scheduleWatcher = (watcher) => {
|
23
|
-
PENDING_WATCHERS.push(watcher);
|
24
|
-
scheduleFlush(flushWatchers);
|
25
|
-
};
|
26
|
-
exports.scheduleWatcher = scheduleWatcher;
|
27
|
-
const scheduleDirty = (signal) => {
|
28
|
-
PENDING_DIRTIES.push(signal);
|
29
|
-
scheduleFlush(flushWatchers);
|
30
|
-
};
|
31
|
-
exports.scheduleDirty = scheduleDirty;
|
32
|
-
const schedulePull = (signal) => {
|
33
|
-
PENDING_PULLS.push(signal);
|
34
|
-
scheduleFlush(flushWatchers);
|
35
|
-
};
|
36
|
-
exports.schedulePull = schedulePull;
|
37
|
-
const scheduleConnect = (connect) => {
|
38
|
-
const current = PENDING_CONNECTS.get(connect) ?? 0;
|
39
|
-
PENDING_CONNECTS.set(connect, current + 1);
|
40
|
-
scheduleFlush(flushWatchers);
|
41
|
-
};
|
42
|
-
exports.scheduleConnect = scheduleConnect;
|
43
|
-
const scheduleDisconnect = (disconnect) => {
|
44
|
-
const current = PENDING_DISCONNECTS.get(disconnect) ?? 0;
|
45
|
-
PENDING_DISCONNECTS.set(disconnect, current + 1);
|
46
|
-
scheduleFlush(flushWatchers);
|
47
|
-
};
|
48
|
-
exports.scheduleDisconnect = scheduleDisconnect;
|
49
|
-
const scheduleEffect = (signal) => {
|
50
|
-
PENDING_EFFECTS.push(signal);
|
51
|
-
scheduleFlush(flushWatchers);
|
52
|
-
};
|
53
|
-
exports.scheduleEffect = scheduleEffect;
|
54
|
-
const scheduleTracer = (tracer) => {
|
55
|
-
PENDING_TRACERS.push(tracer);
|
56
|
-
scheduleFlush(flushWatchers);
|
57
|
-
};
|
58
|
-
exports.scheduleTracer = scheduleTracer;
|
59
|
-
const flushWatchers = async () => {
|
60
|
-
const flush = currentFlush;
|
61
|
-
// Flush all the dirty signals and pulls recursively, clearing
|
62
|
-
// the microtask queue until they are all settled
|
63
|
-
while (PENDING_DIRTIES.length > 0 || PENDING_PULLS.length > 0) {
|
64
|
-
for (const dirty of PENDING_DIRTIES) {
|
65
|
-
dirty._dirtyConsumers();
|
66
|
-
}
|
67
|
-
for (const pull of PENDING_PULLS) {
|
68
|
-
pull._check();
|
69
|
-
}
|
70
|
-
PENDING_DIRTIES = [];
|
71
|
-
PENDING_PULLS = [];
|
72
|
-
await microtask();
|
73
|
-
}
|
74
|
-
// Clear the flush so that if any more watchers are scheduled,
|
75
|
-
// they will be flushed in the next tick
|
76
|
-
currentFlush = null;
|
77
|
-
(0, config_js_1.runBatch)(() => {
|
78
|
-
for (const watcher of PENDING_WATCHERS) {
|
79
|
-
watcher._check();
|
80
|
-
}
|
81
|
-
for (const [signal, count] of PENDING_CONNECTS) {
|
82
|
-
signal._check(true, count);
|
83
|
-
}
|
84
|
-
for (const [signal, count] of PENDING_DISCONNECTS) {
|
85
|
-
signal._disconnect(count);
|
86
|
-
}
|
87
|
-
for (const signal of PENDING_EFFECTS) {
|
88
|
-
signal._runEffects();
|
89
|
-
}
|
90
|
-
for (const tracer of PENDING_TRACERS) {
|
91
|
-
tracer.flush();
|
92
|
-
}
|
93
|
-
PENDING_WATCHERS = [];
|
94
|
-
PENDING_CONNECTS.clear();
|
95
|
-
PENDING_DISCONNECTS.clear();
|
96
|
-
PENDING_EFFECTS = [];
|
97
|
-
PENDING_TRACERS = [];
|
98
|
-
});
|
99
|
-
// resolve the flush promise
|
100
|
-
flush.resolve();
|
101
|
-
};
|
102
|
-
const settled = async () => {
|
103
|
-
while (currentFlush) {
|
104
|
-
await currentFlush.promise;
|
105
|
-
}
|
106
|
-
};
|
107
|
-
exports.settled = settled;
|
108
|
-
//# sourceMappingURL=scheduling.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"scheduling.js","sourceRoot":"","sources":["../../src/scheduling.ts"],"names":[],"mappings":"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"}
|