@thyn/core 0.0.240 → 0.0.241
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/element.js +4 -8
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/router.d.ts +1 -8
- package/dist/signals.d.ts +13 -11
- package/dist/signals.js +111 -63
- package/package.json +1 -1
- package/src/element.ts +4 -8
- package/src/index.ts +4 -5
- package/src/signals.ts +124 -75
- package/tsconfig.tsbuildinfo +1 -1
package/dist/element.js
CHANGED
|
@@ -4,9 +4,7 @@ export function mount(app, parent) {
|
|
|
4
4
|
}
|
|
5
5
|
let collectingHead;
|
|
6
6
|
export function collectEffect(effectFn) {
|
|
7
|
-
|
|
8
|
-
effectFn.next = collectingHead;
|
|
9
|
-
}
|
|
7
|
+
effectFn.next = collectingHead;
|
|
10
8
|
collectingHead = effectFn;
|
|
11
9
|
}
|
|
12
10
|
export function createReactiveTextNode(v) {
|
|
@@ -396,13 +394,11 @@ export function isolatedTerminalList(props) {
|
|
|
396
394
|
parent = startBookend.parentNode;
|
|
397
395
|
if (!parent) {
|
|
398
396
|
prevItems = props.items();
|
|
399
|
-
|
|
400
|
-
fragment.appendChild(startBookend);
|
|
397
|
+
outlet.appendChild(startBookend);
|
|
401
398
|
for (let i = 0, len = prevItems.length; i < len; i++) {
|
|
402
|
-
|
|
399
|
+
outlet.appendChild(render(prevItems[i]));
|
|
403
400
|
}
|
|
404
|
-
|
|
405
|
-
outlet.appendChild(fragment);
|
|
401
|
+
outlet.appendChild(endBookend);
|
|
406
402
|
return;
|
|
407
403
|
}
|
|
408
404
|
let nextItems = props.items();
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { addChildren, addEffect, component, createReactiveTextNode, list, markAsReactive, mount, setAttribute, setProperty, setReactiveAttribute, setReactiveProperty, show, terminalList
|
|
2
|
-
export {
|
|
1
|
+
export { addChildren, addEffect, component, createReactiveTextNode, isolatedTerminalList, list, markAsReactive, mount, setAttribute, setProperty, setReactiveAttribute, setReactiveProperty, show, terminalList } from "./element.js";
|
|
2
|
+
export { $effect, $signal, staticEffect } from "./signals.js";
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { addChildren, addEffect, component, createReactiveTextNode, list, markAsReactive, mount, setAttribute, setProperty, setReactiveAttribute, setReactiveProperty, show, terminalList
|
|
2
|
-
export {
|
|
1
|
+
export { addChildren, addEffect, component, createReactiveTextNode, isolatedTerminalList, list, markAsReactive, mount, setAttribute, setProperty, setReactiveAttribute, setReactiveProperty, show, terminalList } from "./element.js";
|
|
2
|
+
export { $effect, $signal, staticEffect } from "./signals.js";
|
package/dist/router.d.ts
CHANGED
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
export declare const router: {
|
|
2
|
-
path:
|
|
3
|
-
subs: any;
|
|
4
|
-
value: string;
|
|
5
|
-
get(): string;
|
|
6
|
-
delete(ef: any): void;
|
|
7
|
-
set(value: string): void;
|
|
8
|
-
update(action: (prev: string) => string): void;
|
|
9
|
-
};
|
|
2
|
+
path: import("./signals.js").SignalImpl<string>;
|
|
10
3
|
param: (name: string) => string | undefined;
|
|
11
4
|
};
|
|
12
5
|
interface Route {
|
package/dist/signals.d.ts
CHANGED
|
@@ -1,19 +1,21 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
export declare class EffectNode {
|
|
2
|
+
next: EffectNode | undefined;
|
|
3
|
+
fn: () => any;
|
|
4
|
+
td: any;
|
|
5
|
+
dyn: boolean;
|
|
6
|
+
mv: boolean;
|
|
7
|
+
constructor(fn: () => any, dyn: boolean);
|
|
8
|
+
}
|
|
9
|
+
export declare class SignalImpl<T> {
|
|
7
10
|
value: T;
|
|
8
11
|
subs: any;
|
|
9
12
|
constructor(value: T);
|
|
10
13
|
get(): T;
|
|
11
|
-
delete(
|
|
14
|
+
delete(node: EffectNode): void;
|
|
12
15
|
set(value: T): void;
|
|
13
16
|
update(action: (prev: T) => T): void;
|
|
14
17
|
}
|
|
15
18
|
export declare function $signal<T>(value: T): SignalImpl<T>;
|
|
16
|
-
export declare function
|
|
17
|
-
export declare function
|
|
18
|
-
export declare function
|
|
19
|
-
export {};
|
|
19
|
+
export declare function cleanup(node: EffectNode): void;
|
|
20
|
+
export declare function $effect(fn: () => any): EffectNode;
|
|
21
|
+
export declare function staticEffect(fn: () => any): EffectNode;
|
package/dist/signals.js
CHANGED
|
@@ -1,72 +1,103 @@
|
|
|
1
1
|
import { collectEffect } from "./element.js";
|
|
2
|
+
// --- V8 Optimization: Stable Shape ---
|
|
3
|
+
// By using a class, we guarantee that all effects share the same "Hidden Class".
|
|
4
|
+
// This prevents V8 from constantly de-optimizing code when properties like '.next' or '.td' are added dynamically.
|
|
5
|
+
export class EffectNode {
|
|
6
|
+
constructor(fn, dyn) {
|
|
7
|
+
this.next = undefined; // For the collection stack
|
|
8
|
+
this.td = undefined; // Teardowns: SignalImpl | Function | Array
|
|
9
|
+
this.fn = fn;
|
|
10
|
+
this.dyn = dyn;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
// --- Globals ---
|
|
2
14
|
let currentEffect;
|
|
3
|
-
let isBatching;
|
|
15
|
+
let isBatching = false;
|
|
4
16
|
const pendingEffects = [];
|
|
5
|
-
|
|
6
|
-
|
|
17
|
+
// --- Scheduler ---
|
|
18
|
+
function scheduleEffect(node) {
|
|
19
|
+
pendingEffects.push(node);
|
|
7
20
|
if (!isBatching) {
|
|
8
21
|
isBatching = true;
|
|
9
|
-
queueMicrotask(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
queueMicrotask(flushEffects);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function flushEffects() {
|
|
26
|
+
for (let i = 0; i < pendingEffects.length; i++) {
|
|
27
|
+
const node = pendingEffects[i];
|
|
28
|
+
// Fast property access (Monomorphic)
|
|
29
|
+
if (node.dyn) {
|
|
30
|
+
cleanup(node);
|
|
31
|
+
const prev = currentEffect;
|
|
32
|
+
currentEffect = node;
|
|
33
|
+
runEffectNode(node);
|
|
34
|
+
currentEffect = prev;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
// Static effects re-run without 'currentEffect' set,
|
|
38
|
+
// ensuring they don't re-subscribe or leak dependencies.
|
|
39
|
+
node.fn();
|
|
40
|
+
}
|
|
25
41
|
}
|
|
42
|
+
pendingEffects.length = 0;
|
|
43
|
+
isBatching = false;
|
|
26
44
|
}
|
|
27
|
-
|
|
45
|
+
// --- Signal Implementation ---
|
|
46
|
+
export class SignalImpl {
|
|
28
47
|
constructor(value) {
|
|
29
48
|
this.value = value;
|
|
49
|
+
// subs is polymorphic: undefined | EffectNode | Set<EffectNode>
|
|
50
|
+
// We check types carefully to avoid de-opts.
|
|
30
51
|
this.subs = undefined;
|
|
31
52
|
}
|
|
32
53
|
get() {
|
|
33
54
|
if (currentEffect) {
|
|
55
|
+
// 1. Manage Subscriptions (Signal -> Effect)
|
|
34
56
|
if (!this.subs) {
|
|
35
57
|
this.subs = currentEffect;
|
|
36
58
|
}
|
|
37
|
-
else if (
|
|
59
|
+
else if (this.subs instanceof EffectNode) {
|
|
38
60
|
if (this.subs !== currentEffect) {
|
|
39
|
-
const
|
|
61
|
+
const old = this.subs;
|
|
40
62
|
this.subs = new Set();
|
|
41
|
-
this.subs.add(
|
|
63
|
+
this.subs.add(old);
|
|
42
64
|
this.subs.add(currentEffect);
|
|
43
65
|
}
|
|
44
66
|
}
|
|
45
67
|
else {
|
|
46
68
|
this.subs.add(currentEffect);
|
|
47
69
|
}
|
|
48
|
-
|
|
70
|
+
// 2. Manage Dependencies (Effect -> Signal)
|
|
71
|
+
// This allows the effect to unsubscribe from this signal later.
|
|
72
|
+
const td = currentEffect.td;
|
|
73
|
+
if (!td) {
|
|
49
74
|
currentEffect.td = this;
|
|
50
75
|
}
|
|
51
|
-
else if (
|
|
52
|
-
|
|
76
|
+
else if (td instanceof SignalImpl || typeof td === 'function') {
|
|
77
|
+
// Upgrade from single item to Array
|
|
78
|
+
currentEffect.td = [td, this];
|
|
53
79
|
}
|
|
54
80
|
else {
|
|
55
|
-
|
|
81
|
+
// Already an Array
|
|
82
|
+
td.push(this);
|
|
56
83
|
}
|
|
57
84
|
}
|
|
58
85
|
return this.value;
|
|
59
86
|
}
|
|
60
|
-
delete
|
|
61
|
-
|
|
87
|
+
// Optimized delete to restore "Fast Path"
|
|
88
|
+
delete(node) {
|
|
89
|
+
if (this.subs === node) {
|
|
62
90
|
this.subs = undefined;
|
|
63
91
|
}
|
|
64
|
-
else if (
|
|
65
|
-
this.subs.delete(
|
|
66
|
-
|
|
92
|
+
else if (this.subs instanceof Set) {
|
|
93
|
+
this.subs.delete(node);
|
|
94
|
+
const size = this.subs.size;
|
|
95
|
+
if (size === 0) {
|
|
67
96
|
this.subs = undefined;
|
|
68
97
|
}
|
|
69
|
-
else if (
|
|
98
|
+
else if (size === 1) {
|
|
99
|
+
// Downgrade Set -> Single Node
|
|
100
|
+
// This restores the fast direct-call path in .set()
|
|
70
101
|
this.subs = this.subs.values().next().value;
|
|
71
102
|
}
|
|
72
103
|
}
|
|
@@ -75,7 +106,7 @@ class SignalImpl {
|
|
|
75
106
|
if (value !== this.value) {
|
|
76
107
|
this.value = value;
|
|
77
108
|
if (this.subs) {
|
|
78
|
-
if (
|
|
109
|
+
if (this.subs instanceof EffectNode) {
|
|
79
110
|
scheduleEffect(this.subs);
|
|
80
111
|
}
|
|
81
112
|
else {
|
|
@@ -93,47 +124,64 @@ class SignalImpl {
|
|
|
93
124
|
export function $signal(value) {
|
|
94
125
|
return new SignalImpl(value);
|
|
95
126
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
127
|
+
// --- Effect Helpers ---
|
|
128
|
+
function runEffectNode(node) {
|
|
129
|
+
const cleanupFn = node.fn();
|
|
130
|
+
if (typeof cleanupFn === 'function') {
|
|
131
|
+
// If the effect returns a cleanup function, track it in 'td'
|
|
132
|
+
const td = node.td;
|
|
133
|
+
if (!td) {
|
|
134
|
+
node.td = cleanupFn;
|
|
135
|
+
}
|
|
136
|
+
else if (Array.isArray(td)) {
|
|
137
|
+
td.push(cleanupFn);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
node.td = [td, cleanupFn];
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
export function cleanup(node) {
|
|
145
|
+
const td = node.td;
|
|
146
|
+
if (!td)
|
|
147
|
+
return;
|
|
148
|
+
// Reset dependencies for the next run
|
|
149
|
+
node.td = undefined;
|
|
150
|
+
if (Array.isArray(td)) {
|
|
151
|
+
for (const item of td) {
|
|
152
|
+
if (item instanceof SignalImpl) {
|
|
153
|
+
item.delete(node);
|
|
102
154
|
}
|
|
103
|
-
else {
|
|
104
|
-
|
|
155
|
+
else if (typeof item === 'function') {
|
|
156
|
+
item();
|
|
105
157
|
}
|
|
106
158
|
}
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
if (td instanceof SignalImpl) {
|
|
162
|
+
td.delete(node);
|
|
163
|
+
}
|
|
107
164
|
else {
|
|
108
|
-
|
|
165
|
+
td();
|
|
109
166
|
}
|
|
110
167
|
}
|
|
111
168
|
}
|
|
112
169
|
export function $effect(fn) {
|
|
170
|
+
const node = new EffectNode(fn, true);
|
|
113
171
|
const prev = currentEffect;
|
|
114
|
-
currentEffect =
|
|
115
|
-
|
|
116
|
-
runEffectFn(fn);
|
|
172
|
+
currentEffect = node;
|
|
173
|
+
runEffectNode(node);
|
|
117
174
|
currentEffect = prev;
|
|
118
|
-
collectEffect(
|
|
119
|
-
return
|
|
175
|
+
collectEffect(node);
|
|
176
|
+
return node;
|
|
120
177
|
}
|
|
121
178
|
export function staticEffect(fn) {
|
|
179
|
+
const node = new EffectNode(fn, false);
|
|
122
180
|
const prev = currentEffect;
|
|
123
|
-
currentEffect =
|
|
124
|
-
|
|
181
|
+
currentEffect = node;
|
|
182
|
+
// Static effects run once to subscribe, but don't handle cleanup returns
|
|
183
|
+
node.fn();
|
|
125
184
|
currentEffect = prev;
|
|
126
|
-
collectEffect(
|
|
127
|
-
return
|
|
128
|
-
}
|
|
129
|
-
export function cleanup(ef) {
|
|
130
|
-
if (!ef.td)
|
|
131
|
-
return;
|
|
132
|
-
if (Array.isArray(ef.td)) {
|
|
133
|
-
for (const f of ef.td)
|
|
134
|
-
typeof f === "function" ? f() : f.delete(ef);
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
typeof ef.td === "function" ? ef.td() : ef.td.delete(ef);
|
|
138
|
-
}
|
|
185
|
+
collectEffect(node);
|
|
186
|
+
return node;
|
|
139
187
|
}
|
package/package.json
CHANGED
package/src/element.ts
CHANGED
|
@@ -7,9 +7,7 @@ export function mount(app, parent) {
|
|
|
7
7
|
let collectingHead;
|
|
8
8
|
|
|
9
9
|
export function collectEffect(effectFn) {
|
|
10
|
-
|
|
11
|
-
effectFn.next = collectingHead;
|
|
12
|
-
}
|
|
10
|
+
effectFn.next = collectingHead;
|
|
13
11
|
collectingHead = effectFn;
|
|
14
12
|
}
|
|
15
13
|
|
|
@@ -425,13 +423,11 @@ export function isolatedTerminalList(props) {
|
|
|
425
423
|
parent = startBookend.parentNode;
|
|
426
424
|
if (!parent) {
|
|
427
425
|
prevItems = props.items();
|
|
428
|
-
|
|
429
|
-
fragment.appendChild(startBookend);
|
|
426
|
+
outlet.appendChild(startBookend);
|
|
430
427
|
for (let i = 0, len = prevItems.length; i < len; i++) {
|
|
431
|
-
|
|
428
|
+
outlet.appendChild(render(prevItems[i]));
|
|
432
429
|
}
|
|
433
|
-
|
|
434
|
-
outlet.appendChild(fragment);
|
|
430
|
+
outlet.appendChild(endBookend);
|
|
435
431
|
return;
|
|
436
432
|
}
|
|
437
433
|
let nextItems = props.items();
|
package/src/index.ts
CHANGED
|
@@ -2,8 +2,7 @@ export {
|
|
|
2
2
|
addChildren,
|
|
3
3
|
addEffect,
|
|
4
4
|
component,
|
|
5
|
-
createReactiveTextNode,
|
|
6
|
-
list,
|
|
5
|
+
createReactiveTextNode, isolatedTerminalList, list,
|
|
7
6
|
markAsReactive,
|
|
8
7
|
mount,
|
|
9
8
|
setAttribute,
|
|
@@ -11,7 +10,7 @@ export {
|
|
|
11
10
|
setReactiveAttribute,
|
|
12
11
|
setReactiveProperty,
|
|
13
12
|
show,
|
|
14
|
-
terminalList
|
|
15
|
-
isolatedTerminalList,
|
|
13
|
+
terminalList
|
|
16
14
|
} from "./element.js";
|
|
17
|
-
export {
|
|
15
|
+
export { $effect, $signal, staticEffect } from "./signals.js";
|
|
16
|
+
|
package/src/signals.ts
CHANGED
|
@@ -1,76 +1,107 @@
|
|
|
1
1
|
import { collectEffect } from "./element.js";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
// --- V8 Optimization: Stable Shape ---
|
|
4
|
+
// By using a class, we guarantee that all effects share the same "Hidden Class".
|
|
5
|
+
// This prevents V8 from constantly de-optimizing code when properties like '.next' or '.td' are added dynamically.
|
|
6
|
+
export class EffectNode {
|
|
7
|
+
next: EffectNode | undefined = undefined; // For the collection stack
|
|
8
|
+
fn: () => any; // The user's function
|
|
9
|
+
td: any = undefined; // Teardowns: SignalImpl | Function | Array
|
|
10
|
+
dyn: boolean; // Is this a dynamic effect?
|
|
11
|
+
mv: boolean;
|
|
12
|
+
|
|
13
|
+
constructor(fn: () => any, dyn: boolean) {
|
|
14
|
+
this.fn = fn;
|
|
15
|
+
this.dyn = dyn;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
4
18
|
|
|
5
|
-
|
|
6
|
-
|
|
19
|
+
// --- Globals ---
|
|
20
|
+
let currentEffect: EffectNode | undefined;
|
|
21
|
+
let isBatching = false;
|
|
22
|
+
const pendingEffects: EffectNode[] = [];
|
|
7
23
|
|
|
8
|
-
|
|
9
|
-
|
|
24
|
+
// --- Scheduler ---
|
|
25
|
+
function scheduleEffect(node: EffectNode) {
|
|
26
|
+
pendingEffects.push(node);
|
|
10
27
|
if (!isBatching) {
|
|
11
28
|
isBatching = true;
|
|
12
|
-
queueMicrotask(
|
|
13
|
-
for (const ef of pendingEffects) {
|
|
14
|
-
if (ef.dyn) {
|
|
15
|
-
cleanup(ef);
|
|
16
|
-
const prev = currentEffect;
|
|
17
|
-
currentEffect = ef;
|
|
18
|
-
runEffectFn(ef);
|
|
19
|
-
currentEffect = prev;
|
|
20
|
-
} else {
|
|
21
|
-
ef();
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
pendingEffects.length = 0;
|
|
25
|
-
isBatching = false;
|
|
26
|
-
});
|
|
29
|
+
queueMicrotask(flushEffects);
|
|
27
30
|
}
|
|
28
31
|
}
|
|
29
32
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
function flushEffects() {
|
|
34
|
+
for (let i = 0; i < pendingEffects.length; i++) {
|
|
35
|
+
const node = pendingEffects[i];
|
|
36
|
+
// Fast property access (Monomorphic)
|
|
37
|
+
if (node.dyn) {
|
|
38
|
+
cleanup(node);
|
|
39
|
+
const prev = currentEffect;
|
|
40
|
+
currentEffect = node;
|
|
41
|
+
runEffectNode(node);
|
|
42
|
+
currentEffect = prev;
|
|
43
|
+
} else {
|
|
44
|
+
// Static effects re-run without 'currentEffect' set,
|
|
45
|
+
// ensuring they don't re-subscribe or leak dependencies.
|
|
46
|
+
node.fn();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
pendingEffects.length = 0;
|
|
50
|
+
isBatching = false;
|
|
51
|
+
}
|
|
35
52
|
|
|
36
|
-
|
|
53
|
+
// --- Signal Implementation ---
|
|
54
|
+
export class SignalImpl<T> {
|
|
55
|
+
// subs is polymorphic: undefined | EffectNode | Set<EffectNode>
|
|
56
|
+
// We check types carefully to avoid de-opts.
|
|
37
57
|
subs: any = undefined;
|
|
38
58
|
|
|
39
59
|
constructor(public value: T) { }
|
|
40
60
|
|
|
41
61
|
get(): T {
|
|
42
62
|
if (currentEffect) {
|
|
63
|
+
// 1. Manage Subscriptions (Signal -> Effect)
|
|
43
64
|
if (!this.subs) {
|
|
44
65
|
this.subs = currentEffect;
|
|
45
|
-
} else if (
|
|
66
|
+
} else if (this.subs instanceof EffectNode) {
|
|
46
67
|
if (this.subs !== currentEffect) {
|
|
47
|
-
const
|
|
68
|
+
const old = this.subs;
|
|
48
69
|
this.subs = new Set();
|
|
49
|
-
this.subs.add(
|
|
70
|
+
this.subs.add(old);
|
|
50
71
|
this.subs.add(currentEffect);
|
|
51
72
|
}
|
|
52
73
|
} else {
|
|
53
74
|
this.subs.add(currentEffect);
|
|
54
75
|
}
|
|
55
|
-
|
|
76
|
+
|
|
77
|
+
// 2. Manage Dependencies (Effect -> Signal)
|
|
78
|
+
// This allows the effect to unsubscribe from this signal later.
|
|
79
|
+
const td = currentEffect.td;
|
|
80
|
+
if (!td) {
|
|
56
81
|
currentEffect.td = this;
|
|
57
|
-
} else if (
|
|
58
|
-
|
|
82
|
+
} else if (td instanceof SignalImpl || typeof td === 'function') {
|
|
83
|
+
// Upgrade from single item to Array
|
|
84
|
+
currentEffect.td = [td, this];
|
|
59
85
|
} else {
|
|
60
|
-
|
|
86
|
+
// Already an Array
|
|
87
|
+
td.push(this);
|
|
61
88
|
}
|
|
62
89
|
}
|
|
63
90
|
return this.value;
|
|
64
91
|
}
|
|
65
92
|
|
|
66
|
-
delete
|
|
67
|
-
|
|
93
|
+
// Optimized delete to restore "Fast Path"
|
|
94
|
+
delete(node: EffectNode): void {
|
|
95
|
+
if (this.subs === node) {
|
|
68
96
|
this.subs = undefined;
|
|
69
|
-
} else if (
|
|
70
|
-
this.subs.delete(
|
|
71
|
-
|
|
97
|
+
} else if (this.subs instanceof Set) {
|
|
98
|
+
this.subs.delete(node);
|
|
99
|
+
const size = this.subs.size;
|
|
100
|
+
if (size === 0) {
|
|
72
101
|
this.subs = undefined;
|
|
73
|
-
} else if (
|
|
102
|
+
} else if (size === 1) {
|
|
103
|
+
// Downgrade Set -> Single Node
|
|
104
|
+
// This restores the fast direct-call path in .set()
|
|
74
105
|
this.subs = this.subs.values().next().value;
|
|
75
106
|
}
|
|
76
107
|
}
|
|
@@ -80,7 +111,7 @@ class SignalImpl<T> {
|
|
|
80
111
|
if (value !== this.value) {
|
|
81
112
|
this.value = value;
|
|
82
113
|
if (this.subs) {
|
|
83
|
-
if (
|
|
114
|
+
if (this.subs instanceof EffectNode) {
|
|
84
115
|
scheduleEffect(this.subs);
|
|
85
116
|
} else {
|
|
86
117
|
for (const ef of this.subs) {
|
|
@@ -100,52 +131,70 @@ export function $signal<T>(value: T): SignalImpl<T> {
|
|
|
100
131
|
return new SignalImpl(value);
|
|
101
132
|
}
|
|
102
133
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
134
|
+
// --- Effect Helpers ---
|
|
135
|
+
|
|
136
|
+
function runEffectNode(node: EffectNode) {
|
|
137
|
+
const cleanupFn = node.fn();
|
|
138
|
+
if (typeof cleanupFn === 'function') {
|
|
139
|
+
// If the effect returns a cleanup function, track it in 'td'
|
|
140
|
+
const td = node.td;
|
|
141
|
+
if (!td) {
|
|
142
|
+
node.td = cleanupFn;
|
|
143
|
+
} else if (Array.isArray(td)) {
|
|
144
|
+
td.push(cleanupFn);
|
|
112
145
|
} else {
|
|
113
|
-
|
|
146
|
+
node.td = [td, cleanupFn];
|
|
114
147
|
}
|
|
115
148
|
}
|
|
116
149
|
}
|
|
117
150
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
151
|
+
export function cleanup(node: EffectNode) {
|
|
152
|
+
const td = node.td;
|
|
153
|
+
if (!td) return;
|
|
154
|
+
|
|
155
|
+
// Reset dependencies for the next run
|
|
156
|
+
node.td = undefined;
|
|
157
|
+
|
|
158
|
+
if (Array.isArray(td)) {
|
|
159
|
+
for (const item of td) {
|
|
160
|
+
if (item instanceof SignalImpl) {
|
|
161
|
+
item.delete(node);
|
|
162
|
+
} else if (typeof item === 'function') {
|
|
163
|
+
item();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
} else {
|
|
167
|
+
if (td instanceof SignalImpl) {
|
|
168
|
+
td.delete(node);
|
|
169
|
+
} else {
|
|
170
|
+
td();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
123
173
|
}
|
|
124
174
|
|
|
125
|
-
export function $effect(fn: (
|
|
175
|
+
export function $effect(fn: () => any) {
|
|
176
|
+
const node = new EffectNode(fn, true);
|
|
177
|
+
|
|
126
178
|
const prev = currentEffect;
|
|
127
|
-
currentEffect =
|
|
128
|
-
|
|
129
|
-
runEffectFn(fn);
|
|
179
|
+
currentEffect = node;
|
|
180
|
+
runEffectNode(node);
|
|
130
181
|
currentEffect = prev;
|
|
131
|
-
|
|
132
|
-
|
|
182
|
+
|
|
183
|
+
collectEffect(node);
|
|
184
|
+
return node;
|
|
133
185
|
}
|
|
134
186
|
|
|
135
|
-
export function staticEffect(fn: (
|
|
187
|
+
export function staticEffect(fn: () => any) {
|
|
188
|
+
const node = new EffectNode(fn, false);
|
|
189
|
+
|
|
136
190
|
const prev = currentEffect;
|
|
137
|
-
currentEffect =
|
|
138
|
-
|
|
191
|
+
currentEffect = node;
|
|
192
|
+
|
|
193
|
+
// Static effects run once to subscribe, but don't handle cleanup returns
|
|
194
|
+
node.fn();
|
|
195
|
+
|
|
139
196
|
currentEffect = prev;
|
|
140
|
-
collectEffect(fn);
|
|
141
|
-
return fn;
|
|
142
|
-
}
|
|
143
197
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
for (const f of ef.td) typeof f === "function" ? f() : f.delete(ef);
|
|
148
|
-
} else {
|
|
149
|
-
typeof ef.td === "function" ? ef.td() : ef.td.delete(ef);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
198
|
+
collectEffect(node);
|
|
199
|
+
return node;
|
|
200
|
+
}
|
package/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.dom.asynciterable.d.ts","./node_modules/typescript/lib/lib.webworker.importscripts.d.ts","./node_modules/typescript/lib/lib.scripthost.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/typescript/lib/lib.es2020.full.d.ts","./src/signals.ts","./src/element.ts","./src/index.ts","./src/router.ts","./node_modules/@types/deep-eql/index.d.ts","./node_modules/assertion-error/index.d.ts","./node_modules/@types/chai/index.d.ts","./node_modules/@types/estree/index.d.ts"],"fileIdsList":[[56,57],[52],[52,53],[53]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"1305d1e76ca44e30fb8b2b8075fa522b83f60c0bcf5d4326a9d2cf79b53724f8","impliedFormat":1},{"version":"f3672a7799cd210d882739d8938c9376236ca8fb67e10996cf99381ebffe7a21","signature":"6f62706ec7610ba34467f5a0c3a393d6557bc78b9cc5592492fd0beca1a0315f"},{"version":"62c843097d40ba2553db7ec7b058898a32fdf4ae207a08777968846ada9f0529","signature":"4e15936f04a7ab7370e9a897f6d9befa980662283d92660ba0b5cacfab78e5d1"},{"version":"ac16f8022e1d86594d058f84a530164af4b03dcc8bb45ac4a00736fe8aab62e7","signature":"1e325d171d22aa3144736ace94df4b5bf779c6083bc0f9ce684855844f8abcbc"},{"version":"a155e9ebe821846c43103394346639a6a19a7f844be4892bbe4352aa20ee6707","signature":"58b2b60f8aae88fb4b926c3f9700b21a56e0b0f4016e56ab9fa879550cbdb294"},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1}],"root":[[52,55]],"options":{"allowJs":true,"checkJs":false,"composite":true,"esModuleInterop":true,"module":99,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"target":7},"referencedMap":[[58,1],[53,2],[54,3],[55,3],[52,4]],"latestChangedDtsFile":"./dist/router.d.ts","version":"5.9.3"}
|
|
1
|
+
{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.dom.asynciterable.d.ts","./node_modules/typescript/lib/lib.webworker.importscripts.d.ts","./node_modules/typescript/lib/lib.scripthost.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/typescript/lib/lib.es2020.full.d.ts","./src/signals.ts","./src/element.ts","./src/index.ts","./src/router.ts","./node_modules/@types/deep-eql/index.d.ts","./node_modules/assertion-error/index.d.ts","./node_modules/@types/chai/index.d.ts","./node_modules/@types/estree/index.d.ts"],"fileIdsList":[[56,57],[52],[52,53],[53]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"1305d1e76ca44e30fb8b2b8075fa522b83f60c0bcf5d4326a9d2cf79b53724f8","impliedFormat":1},{"version":"ddddb2a7d94d833eae518ea31b704c076f268ed015ae65367a8b83c47a520246","signature":"343765e4d17ccb5613bcaa8279cc7d0706a9dd3b2a3c84289c1a28bf59036821"},{"version":"8f21babe665aa16bf796a0d640d759fb8a7985c97c0710249991eb54b58d84da","signature":"4e15936f04a7ab7370e9a897f6d9befa980662283d92660ba0b5cacfab78e5d1"},{"version":"5c43c77be1404645197853d72379199a8fa166fc89934f19097e9c9739352938","signature":"0b67658946996edbc53389306d39f959f726d1e11cc83ebf24941c04afe42ca4"},{"version":"a155e9ebe821846c43103394346639a6a19a7f844be4892bbe4352aa20ee6707","signature":"e0ab53c40fe9f98fa856101cbf2acb51c4e53b4286d699383624c0cd69688f4c"},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1}],"root":[[52,55]],"options":{"allowJs":true,"checkJs":false,"composite":true,"esModuleInterop":true,"module":99,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"target":7},"referencedMap":[[58,1],[53,2],[54,3],[55,3],[52,4]],"latestChangedDtsFile":"./dist/index.d.ts","version":"5.9.3"}
|