kiru 0.44.4 → 0.45.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/LICENSE +1 -1
- package/README.md +3 -3
- package/dist/appContext.d.ts +38 -0
- package/dist/appContext.d.ts.map +1 -0
- package/dist/appContext.js +143 -0
- package/dist/appContext.js.map +1 -0
- package/dist/cloneVNode.d.ts +2 -0
- package/dist/cloneVNode.d.ts.map +1 -0
- package/dist/cloneVNode.js +14 -0
- package/dist/cloneVNode.js.map +1 -0
- package/dist/constants.d.ts +31 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +127 -0
- package/dist/constants.js.map +1 -0
- package/dist/context.d.ts +3 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +50 -0
- package/dist/context.js.map +1 -0
- package/dist/dom.d.ts +8 -0
- package/dist/dom.d.ts.map +1 -0
- package/dist/dom.js +582 -0
- package/dist/dom.js.map +1 -0
- package/dist/element.d.ts +6 -0
- package/dist/element.d.ts.map +1 -0
- package/dist/element.js +41 -0
- package/dist/element.js.map +1 -0
- package/dist/env.d.ts +2 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +6 -0
- package/dist/env.js.map +1 -0
- package/dist/error.d.ts +19 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +63 -0
- package/dist/error.js.map +1 -0
- package/dist/flags.d.ts +6 -0
- package/dist/flags.d.ts.map +1 -0
- package/dist/flags.js +16 -0
- package/dist/flags.js.map +1 -0
- package/dist/form/index.d.ts +4 -0
- package/dist/form/index.d.ts.map +1 -0
- package/dist/form/index.js +509 -0
- package/dist/form/index.js.map +1 -0
- package/dist/form/types.d.ts +121 -0
- package/dist/form/types.d.ts.map +1 -0
- package/dist/form/types.js +2 -0
- package/dist/form/types.js.map +1 -0
- package/dist/form/utils.d.ts +3 -0
- package/dist/form/utils.d.ts.map +1 -0
- package/dist/form/utils.js +16 -0
- package/dist/form/utils.js.map +1 -0
- package/dist/generateId.d.ts +8 -0
- package/dist/generateId.d.ts.map +1 -0
- package/dist/generateId.js +15 -0
- package/dist/generateId.js.map +1 -0
- package/dist/globalContext.d.ts +37 -0
- package/dist/globalContext.d.ts.map +1 -0
- package/dist/globalContext.js +85 -0
- package/dist/globalContext.js.map +1 -0
- package/dist/globals.d.ts +16 -0
- package/dist/globals.d.ts.map +1 -0
- package/dist/globals.js +15 -0
- package/dist/globals.js.map +1 -0
- package/dist/hmr.d.ts +32 -0
- package/dist/hmr.d.ts.map +1 -0
- package/dist/hmr.js +125 -0
- package/dist/hmr.js.map +1 -0
- package/dist/hooks/index.d.ts +15 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +15 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useAsync.d.ts +29 -0
- package/dist/hooks/useAsync.d.ts.map +1 -0
- package/dist/hooks/useAsync.js +96 -0
- package/dist/hooks/useAsync.js.map +1 -0
- package/dist/hooks/useCallback.d.ts +7 -0
- package/dist/hooks/useCallback.d.ts.map +1 -0
- package/dist/hooks/useCallback.js +29 -0
- package/dist/hooks/useCallback.js.map +1 -0
- package/dist/hooks/useContext.d.ts +7 -0
- package/dist/hooks/useContext.d.ts.map +1 -0
- package/dist/hooks/useContext.js +59 -0
- package/dist/hooks/useContext.js.map +1 -0
- package/dist/hooks/useEffect.d.ts +8 -0
- package/dist/hooks/useEffect.d.ts.map +1 -0
- package/dist/hooks/useEffect.js +33 -0
- package/dist/hooks/useEffect.js.map +1 -0
- package/dist/hooks/useEffectEvent.d.ts +8 -0
- package/dist/hooks/useEffectEvent.d.ts.map +1 -0
- package/dist/hooks/useEffectEvent.js +22 -0
- package/dist/hooks/useEffectEvent.js.map +1 -0
- package/dist/hooks/useId.d.ts +8 -0
- package/dist/hooks/useId.d.ts.map +1 -0
- package/dist/hooks/useId.js +35 -0
- package/dist/hooks/useId.js.map +1 -0
- package/dist/hooks/useLayoutEffect.d.ts +8 -0
- package/dist/hooks/useLayoutEffect.d.ts.map +1 -0
- package/dist/hooks/useLayoutEffect.js +33 -0
- package/dist/hooks/useLayoutEffect.js.map +1 -0
- package/dist/hooks/useMemo.d.ts +8 -0
- package/dist/hooks/useMemo.d.ts.map +1 -0
- package/dist/hooks/useMemo.js +30 -0
- package/dist/hooks/useMemo.js.map +1 -0
- package/dist/hooks/useReducer.d.ts +7 -0
- package/dist/hooks/useReducer.d.ts.map +1 -0
- package/dist/hooks/useReducer.js +44 -0
- package/dist/hooks/useReducer.js.map +1 -0
- package/dist/hooks/useRef.d.ts +10 -0
- package/dist/hooks/useRef.d.ts.map +1 -0
- package/dist/hooks/useRef.js +28 -0
- package/dist/hooks/useRef.js.map +1 -0
- package/dist/hooks/useState.d.ts +7 -0
- package/dist/hooks/useState.d.ts.map +1 -0
- package/dist/hooks/useState.js +54 -0
- package/dist/hooks/useState.js.map +1 -0
- package/dist/hooks/useSyncExternalStore.d.ts +8 -0
- package/dist/hooks/useSyncExternalStore.d.ts.map +1 -0
- package/dist/hooks/useSyncExternalStore.js +50 -0
- package/dist/hooks/useSyncExternalStore.js.map +1 -0
- package/dist/hooks/useViewTransition.d.ts +10 -0
- package/dist/hooks/useViewTransition.d.ts.map +1 -0
- package/dist/hooks/useViewTransition.js +28 -0
- package/dist/hooks/useViewTransition.js.map +1 -0
- package/dist/hooks/utils.d.ts +69 -0
- package/dist/hooks/utils.d.ts.map +1 -0
- package/dist/hooks/utils.js +163 -0
- package/dist/hooks/utils.js.map +1 -0
- package/dist/hydration.d.ts +17 -0
- package/dist/hydration.d.ts.map +1 -0
- package/dist/hydration.js +59 -0
- package/dist/hydration.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/jsx.d.ts +6 -0
- package/dist/jsx.d.ts.map +1 -0
- package/dist/jsx.js +8 -0
- package/dist/jsx.js.map +1 -0
- package/dist/lazy.d.ts +11 -0
- package/dist/lazy.d.ts.map +1 -0
- package/dist/lazy.js +177 -0
- package/dist/lazy.js.map +1 -0
- package/dist/memo.d.ts +9 -0
- package/dist/memo.d.ts.map +1 -0
- package/dist/memo.js +25 -0
- package/dist/memo.js.map +1 -0
- package/dist/portal.d.ts +10 -0
- package/dist/portal.d.ts.map +1 -0
- package/dist/portal.js +34 -0
- package/dist/portal.js.map +1 -0
- package/dist/profiling.d.ts +26 -0
- package/dist/profiling.d.ts.map +1 -0
- package/dist/profiling.js +83 -0
- package/dist/profiling.js.map +1 -0
- package/dist/props.d.ts +4 -0
- package/dist/props.d.ts.map +1 -0
- package/dist/props.js +27 -0
- package/dist/props.js.map +1 -0
- package/dist/reconciler.d.ts +4 -0
- package/dist/reconciler.d.ts.map +1 -0
- package/dist/reconciler.js +466 -0
- package/dist/reconciler.js.map +1 -0
- package/dist/renderToString.d.ts +2 -0
- package/dist/renderToString.d.ts.map +1 -0
- package/dist/renderToString.js +74 -0
- package/dist/renderToString.js.map +1 -0
- package/dist/router/index.d.ts +3 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +3 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/route.d.ts +46 -0
- package/dist/router/route.d.ts.map +1 -0
- package/dist/router/route.js +8 -0
- package/dist/router/route.js.map +1 -0
- package/dist/router/router.d.ts +62 -0
- package/dist/router/router.d.ts.map +1 -0
- package/dist/router/router.js +178 -0
- package/dist/router/router.js.map +1 -0
- package/dist/router/routerUtils.d.ts +5 -0
- package/dist/router/routerUtils.d.ts.map +1 -0
- package/dist/router/routerUtils.js +39 -0
- package/dist/router/routerUtils.js.map +1 -0
- package/dist/scheduler.d.ts +14 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +457 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/signals/base.d.ts +36 -0
- package/dist/signals/base.d.ts.map +1 -0
- package/dist/signals/base.js +205 -0
- package/dist/signals/base.js.map +1 -0
- package/dist/signals/computed.d.ts +16 -0
- package/dist/signals/computed.d.ts.map +1 -0
- package/dist/signals/computed.js +116 -0
- package/dist/signals/computed.js.map +1 -0
- package/dist/signals/effect.d.ts +18 -0
- package/dist/signals/effect.d.ts.map +1 -0
- package/dist/signals/effect.js +43 -0
- package/dist/signals/effect.js.map +1 -0
- package/dist/signals/globals.d.ts +9 -0
- package/dist/signals/globals.d.ts.map +1 -0
- package/dist/signals/globals.js +9 -0
- package/dist/signals/globals.js.map +1 -0
- package/dist/signals/index.d.ts +12 -0
- package/dist/signals/index.d.ts.map +1 -0
- package/dist/signals/index.js +12 -0
- package/dist/signals/index.js.map +1 -0
- package/dist/signals/jsx.d.ts +16 -0
- package/dist/signals/jsx.d.ts.map +1 -0
- package/dist/signals/jsx.js +11 -0
- package/dist/signals/jsx.js.map +1 -0
- package/dist/signals/types.d.ts +9 -0
- package/dist/signals/types.d.ts.map +1 -0
- package/dist/signals/types.js +2 -0
- package/dist/signals/types.js.map +1 -0
- package/dist/signals/utils.d.ts +4 -0
- package/dist/signals/utils.d.ts.map +1 -0
- package/dist/signals/utils.js +12 -0
- package/dist/signals/utils.js.map +1 -0
- package/dist/signals/watch.d.ts +24 -0
- package/dist/signals/watch.d.ts.map +1 -0
- package/dist/signals/watch.js +104 -0
- package/dist/signals/watch.js.map +1 -0
- package/dist/ssr/client.d.ts +4 -0
- package/dist/ssr/client.d.ts.map +1 -0
- package/dist/ssr/client.js +12 -0
- package/dist/ssr/client.js.map +1 -0
- package/dist/ssr/hydrationBoundary.d.ts +27 -0
- package/dist/ssr/hydrationBoundary.d.ts.map +1 -0
- package/dist/ssr/hydrationBoundary.js +30 -0
- package/dist/ssr/hydrationBoundary.js.map +1 -0
- package/dist/ssr/index.d.ts +2 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/index.js +2 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/ssr/server.d.ts +3 -0
- package/dist/ssr/server.d.ts.map +1 -0
- package/dist/ssr/server.js +101 -0
- package/dist/ssr/server.js.map +1 -0
- package/dist/store.d.ts +28 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +166 -0
- package/dist/store.js.map +1 -0
- package/dist/swr.d.ts +74 -0
- package/dist/swr.d.ts.map +1 -0
- package/dist/swr.js +228 -0
- package/dist/swr.js.map +1 -0
- package/dist/transition.d.ts +18 -0
- package/dist/transition.d.ts.map +1 -0
- package/dist/transition.js +48 -0
- package/dist/transition.js.map +1 -0
- package/dist/types.d.ts +143 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.dom.d.ts +920 -0
- package/dist/types.dom.d.ts.map +1 -0
- package/dist/types.dom.js +2 -0
- package/dist/types.dom.js.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/types.utils.d.ts +41 -0
- package/dist/types.utils.d.ts.map +1 -0
- package/dist/types.utils.js +2 -0
- package/dist/types.utils.js.map +1 -0
- package/dist/utils.d.ts +61 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +478 -0
- package/dist/utils.js.map +1 -0
- package/dist/warning.d.ts +2 -0
- package/dist/warning.d.ts.map +1 -0
- package/dist/warning.js +4 -0
- package/dist/warning.js.map +1 -0
- package/package.json +2 -2
- package/src/appContext.ts +7 -7
- package/src/cloneVNode.ts +1 -1
- package/src/constants.ts +9 -9
- package/src/context.ts +7 -7
- package/src/dom.ts +13 -15
- package/src/element.ts +4 -4
- package/src/error.ts +11 -13
- package/src/globalContext.ts +6 -10
- package/src/globals.ts +3 -3
- package/src/hmr.ts +4 -4
- package/src/hooks/useAsync.ts +2 -2
- package/src/hooks/useCallback.ts +1 -1
- package/src/hooks/useContext.ts +6 -6
- package/src/hooks/useEffect.ts +2 -2
- package/src/hooks/useEffectEvent.ts +1 -1
- package/src/hooks/useId.ts +2 -2
- package/src/hooks/useLayoutEffect.ts +2 -2
- package/src/hooks/useMemo.ts +2 -2
- package/src/hooks/useReducer.ts +2 -2
- package/src/hooks/useRef.ts +5 -5
- package/src/hooks/useState.ts +5 -5
- package/src/hooks/useSyncExternalStore.ts +3 -3
- package/src/hooks/useViewTransition.ts +1 -1
- package/src/hooks/utils.ts +7 -9
- package/src/index.ts +4 -4
- package/src/jsx.ts +2 -2
- package/src/lazy.ts +15 -17
- package/src/memo.ts +2 -2
- package/src/portal.ts +4 -4
- package/src/props.ts +5 -7
- package/src/reconciler.ts +6 -6
- package/src/renderToString.ts +1 -1
- package/src/router/route.ts +1 -1
- package/src/router/router.ts +6 -6
- package/src/scheduler.ts +16 -16
- package/src/signals/base.ts +1 -1
- package/src/signals/types.ts +1 -1
- package/src/signals/watch.ts +2 -2
- package/src/ssr/hydrationBoundary.ts +1 -1
- package/src/ssr/server.ts +1 -1
- package/src/store.ts +7 -7
- package/src/swr.ts +2 -2
- package/src/types.dom.ts +1 -1
- package/src/types.ts +13 -13
- package/src/types.utils.ts +5 -5
- package/src/utils.ts +9 -12
- package/src/warning.ts +1 -1
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
var _a;
|
|
2
|
+
import { $HMR_ACCEPT, $SIGNAL } from "../constants.js";
|
|
3
|
+
import { __DEV__ } from "../env.js";
|
|
4
|
+
import { getVNodeAppContext, latest, safeStringify, sideEffectsEnabled, } from "../utils.js";
|
|
5
|
+
import { tracking, signalSubsMap } from "./globals.js";
|
|
6
|
+
import { node } from "../globals.js";
|
|
7
|
+
import { useHook } from "../hooks/utils.js";
|
|
8
|
+
import { generateRandomID } from "../generateId.js";
|
|
9
|
+
export class Signal {
|
|
10
|
+
constructor(initial, displayName) {
|
|
11
|
+
this[_a] = true;
|
|
12
|
+
this.$id = generateRandomID();
|
|
13
|
+
signalSubsMap.set(this.$id, new Set());
|
|
14
|
+
this.$value = initial;
|
|
15
|
+
if (displayName)
|
|
16
|
+
this.displayName = displayName;
|
|
17
|
+
if (__DEV__) {
|
|
18
|
+
this.$initialValue = safeStringify(initial);
|
|
19
|
+
this[$HMR_ACCEPT] = {
|
|
20
|
+
provide: () => {
|
|
21
|
+
return this;
|
|
22
|
+
},
|
|
23
|
+
inject: (prev) => {
|
|
24
|
+
if (this.$initialValue === prev.$initialValue) {
|
|
25
|
+
this.$value = prev.$value;
|
|
26
|
+
}
|
|
27
|
+
signalSubsMap.get(this.$id)?.clear?.();
|
|
28
|
+
signalSubsMap.delete(this.$id);
|
|
29
|
+
this.$id = prev.$id;
|
|
30
|
+
// @ts-ignore - this handles scenarios where a reference to the prev has been encapsulated
|
|
31
|
+
// and we need to be able to refer to the latest version of the signal.
|
|
32
|
+
prev.__next = this;
|
|
33
|
+
},
|
|
34
|
+
destroy: () => { },
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
get value() {
|
|
39
|
+
this.onBeforeRead?.();
|
|
40
|
+
if (__DEV__) {
|
|
41
|
+
const tgt = latest(this);
|
|
42
|
+
Signal.entangle(tgt);
|
|
43
|
+
return tgt.$value;
|
|
44
|
+
}
|
|
45
|
+
Signal.entangle(this);
|
|
46
|
+
return this.$value;
|
|
47
|
+
}
|
|
48
|
+
set value(next) {
|
|
49
|
+
if (__DEV__) {
|
|
50
|
+
const tgt = latest(this);
|
|
51
|
+
if (Object.is(tgt.$value, next))
|
|
52
|
+
return;
|
|
53
|
+
tgt.$value = next;
|
|
54
|
+
tgt.notify();
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (Object.is(this.$value, next))
|
|
58
|
+
return;
|
|
59
|
+
this.$value = next;
|
|
60
|
+
this.notify();
|
|
61
|
+
}
|
|
62
|
+
peek() {
|
|
63
|
+
this.onBeforeRead?.();
|
|
64
|
+
if (__DEV__) {
|
|
65
|
+
return latest(this).$value;
|
|
66
|
+
}
|
|
67
|
+
return this.$value;
|
|
68
|
+
}
|
|
69
|
+
sneak(newValue) {
|
|
70
|
+
if (__DEV__) {
|
|
71
|
+
const tgt = latest(this);
|
|
72
|
+
tgt.$value = newValue;
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
this.$value = newValue;
|
|
76
|
+
}
|
|
77
|
+
toString() {
|
|
78
|
+
this.onBeforeRead?.();
|
|
79
|
+
if (__DEV__) {
|
|
80
|
+
const tgt = latest(this);
|
|
81
|
+
Signal.entangle(tgt);
|
|
82
|
+
return `${tgt.$value}`;
|
|
83
|
+
}
|
|
84
|
+
Signal.entangle(this);
|
|
85
|
+
return `${this.$value}`;
|
|
86
|
+
}
|
|
87
|
+
subscribe(cb) {
|
|
88
|
+
const subs = signalSubsMap.get(this.$id);
|
|
89
|
+
subs.add(cb);
|
|
90
|
+
return () => signalSubsMap.get(this.$id)?.delete(cb);
|
|
91
|
+
}
|
|
92
|
+
notify(options) {
|
|
93
|
+
signalSubsMap.get(this.$id)?.forEach((sub) => {
|
|
94
|
+
if (options?.filter && !options.filter(sub))
|
|
95
|
+
return;
|
|
96
|
+
if (typeof sub === "function") {
|
|
97
|
+
if (__DEV__) {
|
|
98
|
+
const value = latest(this).$value;
|
|
99
|
+
return sub(value);
|
|
100
|
+
}
|
|
101
|
+
return sub(this.$value);
|
|
102
|
+
}
|
|
103
|
+
getVNodeAppContext(sub).requestUpdate(sub);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
static isSignal(x) {
|
|
107
|
+
return typeof x === "object" && !!x && $SIGNAL in x;
|
|
108
|
+
}
|
|
109
|
+
static unsubscribe(sub, id) {
|
|
110
|
+
signalSubsMap.get(id)?.delete(sub);
|
|
111
|
+
}
|
|
112
|
+
static subscribers(signal) {
|
|
113
|
+
return signalSubsMap.get(signal.$id);
|
|
114
|
+
}
|
|
115
|
+
static makeReadonly(signal) {
|
|
116
|
+
const desc = Object.getOwnPropertyDescriptor(signal, "value");
|
|
117
|
+
if (desc && !desc.writable)
|
|
118
|
+
return signal;
|
|
119
|
+
return Object.defineProperty(signal, "value", {
|
|
120
|
+
get: function () {
|
|
121
|
+
Signal.entangle(this);
|
|
122
|
+
return this.$value;
|
|
123
|
+
},
|
|
124
|
+
configurable: true,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
static makeWritable(signal) {
|
|
128
|
+
const desc = Object.getOwnPropertyDescriptor(signal, "value");
|
|
129
|
+
if (desc && desc.writable)
|
|
130
|
+
return signal;
|
|
131
|
+
return Object.defineProperty(signal, "value", {
|
|
132
|
+
get: function () {
|
|
133
|
+
Signal.entangle(this);
|
|
134
|
+
return this.$value;
|
|
135
|
+
},
|
|
136
|
+
set: function (value) {
|
|
137
|
+
this.$value = value;
|
|
138
|
+
this.notify();
|
|
139
|
+
},
|
|
140
|
+
configurable: true,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
static getId(signal) {
|
|
144
|
+
return signal.$id;
|
|
145
|
+
}
|
|
146
|
+
static entangle(signal) {
|
|
147
|
+
const vNode = node.current;
|
|
148
|
+
const trackedSignalObservations = tracking.current();
|
|
149
|
+
if (trackedSignalObservations) {
|
|
150
|
+
if (!vNode || (vNode && sideEffectsEnabled())) {
|
|
151
|
+
trackedSignalObservations.set(signal.$id, signal);
|
|
152
|
+
}
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
if (!vNode || !sideEffectsEnabled())
|
|
156
|
+
return;
|
|
157
|
+
(vNode.subs ?? (vNode.subs = new Set())).add(signal.$id);
|
|
158
|
+
Signal.subscribers(signal).add(vNode);
|
|
159
|
+
}
|
|
160
|
+
static configure(signal, onBeforeRead) {
|
|
161
|
+
signal.onBeforeRead = onBeforeRead;
|
|
162
|
+
}
|
|
163
|
+
static dispose(signal) {
|
|
164
|
+
signal.$isDisposed = true;
|
|
165
|
+
signalSubsMap.delete(signal.$id);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
_a = $SIGNAL;
|
|
169
|
+
export const signal = (initial, displayName) => {
|
|
170
|
+
return new Signal(initial, displayName);
|
|
171
|
+
};
|
|
172
|
+
export const useSignal = (initial, displayName) => {
|
|
173
|
+
return useHook("useSignal", { signal: null }, ({ hook, isInit, isHMR }) => {
|
|
174
|
+
if (__DEV__) {
|
|
175
|
+
if (isInit) {
|
|
176
|
+
hook.dev = {
|
|
177
|
+
devtools: {
|
|
178
|
+
get: () => ({
|
|
179
|
+
displayName: hook.signal.displayName,
|
|
180
|
+
value: hook.signal.peek(),
|
|
181
|
+
}),
|
|
182
|
+
set: ({ value }) => {
|
|
183
|
+
hook.signal.value = value;
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
initialArgs: [initial, displayName],
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
if (isHMR) {
|
|
190
|
+
const [v, name] = hook.dev.initialArgs;
|
|
191
|
+
if (v !== initial || name !== displayName) {
|
|
192
|
+
hook.cleanup?.();
|
|
193
|
+
isInit = true;
|
|
194
|
+
hook.dev.initialArgs = [initial, displayName];
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
if (isInit) {
|
|
199
|
+
hook.cleanup = () => Signal.dispose(hook.signal);
|
|
200
|
+
hook.signal = new Signal(initial, displayName);
|
|
201
|
+
}
|
|
202
|
+
return hook.signal;
|
|
203
|
+
});
|
|
204
|
+
};
|
|
205
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/signals/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Signal } from "./base.js";
|
|
2
|
+
export declare class ComputedSignal<T> extends Signal<T> {
|
|
3
|
+
protected $getter: (prev?: T) => T;
|
|
4
|
+
protected $unsubs: Map<string, Function>;
|
|
5
|
+
protected $isDirty: boolean;
|
|
6
|
+
constructor(getter: (prev?: T) => T, displayName?: string);
|
|
7
|
+
get value(): T;
|
|
8
|
+
set value(next: T);
|
|
9
|
+
subscribe(cb: (state: T) => void): () => void;
|
|
10
|
+
static dispose(signal: ComputedSignal<any>): void;
|
|
11
|
+
private static stop;
|
|
12
|
+
private static run;
|
|
13
|
+
}
|
|
14
|
+
export declare const computed: <T>(getter: (prev?: T) => T, displayName?: string) => ComputedSignal<T>;
|
|
15
|
+
export declare const useComputed: <T>(getter: (prev?: T) => T, displayName?: string) => ComputedSignal<T>;
|
|
16
|
+
//# sourceMappingURL=computed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computed.d.ts","sourceRoot":"","sources":["../../src/signals/computed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAQlC,qBAAa,cAAc,CAAC,CAAC,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IAC9C,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;IAClC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACxC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAA;gBACf,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,EAAE,MAAM;IAuCzD,IAAI,KAAK,IAKO,CAAC,CAHhB;IAGD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,EAAI;IAErB,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IAO7C,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI;IAKjD,OAAO,CAAC,MAAM,CAAC,IAAI;IASnB,OAAO,CAAC,MAAM,CAAC,GAAG;CAkBnB;AAED,eAAO,MAAM,QAAQ,GAAI,CAAC,EACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EACvB,cAAc,MAAM,KACnB,cAAc,CAAC,CAAC,CAElB,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,CAAC,EAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EACvB,cAAc,MAAM,sBA6BrB,CAAA"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { __DEV__ } from "../env.js";
|
|
2
|
+
import { Signal } from "./base.js";
|
|
3
|
+
import { effectQueue, signalSubsMap } from "./globals.js";
|
|
4
|
+
import { $HMR_ACCEPT } from "../constants.js";
|
|
5
|
+
import { useHook } from "../hooks/utils.js";
|
|
6
|
+
import { executeWithTracking } from "./effect.js";
|
|
7
|
+
import { latest } from "../utils.js";
|
|
8
|
+
export class ComputedSignal extends Signal {
|
|
9
|
+
constructor(getter, displayName) {
|
|
10
|
+
super(void 0, displayName);
|
|
11
|
+
this.$getter = getter;
|
|
12
|
+
this.$unsubs = new Map();
|
|
13
|
+
this.$isDirty = true;
|
|
14
|
+
if (__DEV__) {
|
|
15
|
+
const inject = this[$HMR_ACCEPT].inject;
|
|
16
|
+
// @ts-expect-error this is fine 😅
|
|
17
|
+
this[$HMR_ACCEPT] = {
|
|
18
|
+
provide: () => {
|
|
19
|
+
return this;
|
|
20
|
+
},
|
|
21
|
+
inject: (prev) => {
|
|
22
|
+
inject(prev);
|
|
23
|
+
ComputedSignal.stop(prev);
|
|
24
|
+
this.$isDirty = prev.$isDirty;
|
|
25
|
+
},
|
|
26
|
+
destroy: () => { },
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
Signal.configure(this, () => {
|
|
30
|
+
if (!this.$isDirty)
|
|
31
|
+
return;
|
|
32
|
+
if (__DEV__) {
|
|
33
|
+
/**
|
|
34
|
+
* This is a safeguard for dev-mode only, where a 'read' on an
|
|
35
|
+
* already-disposed signal during HMR update => `dom.setSignalProp`
|
|
36
|
+
* would throw due to invalid subs-map access.
|
|
37
|
+
*
|
|
38
|
+
* Perhaps in future we could handle this better by carrying over
|
|
39
|
+
* the previous signal's ID and not disposing it / deleting the
|
|
40
|
+
* map entry.
|
|
41
|
+
*/
|
|
42
|
+
if (this.$isDisposed)
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
ComputedSignal.run(this);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
get value() {
|
|
49
|
+
return super.value;
|
|
50
|
+
}
|
|
51
|
+
// @ts-expect-error
|
|
52
|
+
set value(next) { }
|
|
53
|
+
subscribe(cb) {
|
|
54
|
+
if (this.$isDirty) {
|
|
55
|
+
ComputedSignal.run(this);
|
|
56
|
+
}
|
|
57
|
+
return super.subscribe(cb);
|
|
58
|
+
}
|
|
59
|
+
static dispose(signal) {
|
|
60
|
+
ComputedSignal.stop(signal);
|
|
61
|
+
Signal.dispose(signal);
|
|
62
|
+
}
|
|
63
|
+
static stop(computed) {
|
|
64
|
+
const { $id, $unsubs } = latest(computed);
|
|
65
|
+
effectQueue.delete($id);
|
|
66
|
+
$unsubs.forEach((unsub) => unsub());
|
|
67
|
+
$unsubs.clear();
|
|
68
|
+
computed.$isDirty = true;
|
|
69
|
+
}
|
|
70
|
+
static run(computed) {
|
|
71
|
+
const $computed = latest(computed);
|
|
72
|
+
const { $id: id, $getter, $unsubs: subs } = $computed;
|
|
73
|
+
const value = executeWithTracking({
|
|
74
|
+
id,
|
|
75
|
+
subs,
|
|
76
|
+
fn: () => $getter($computed.$value),
|
|
77
|
+
onDepChanged: () => {
|
|
78
|
+
$computed.$isDirty = true;
|
|
79
|
+
if (!signalSubsMap?.get(id)?.size)
|
|
80
|
+
return;
|
|
81
|
+
ComputedSignal.run($computed);
|
|
82
|
+
$computed.notify();
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
$computed.sneak(value);
|
|
86
|
+
$computed.$isDirty = false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
export const computed = (getter, displayName) => {
|
|
90
|
+
return new ComputedSignal(getter, displayName);
|
|
91
|
+
};
|
|
92
|
+
export const useComputed = (getter, displayName) => {
|
|
93
|
+
return useHook("useComputedSignal", { signal: null }, ({ hook, isInit, isHMR }) => {
|
|
94
|
+
if (__DEV__) {
|
|
95
|
+
hook.dev = {
|
|
96
|
+
devtools: {
|
|
97
|
+
get: () => ({
|
|
98
|
+
displayName: hook.signal.displayName,
|
|
99
|
+
value: hook.signal.peek(),
|
|
100
|
+
}),
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
if (isHMR) {
|
|
104
|
+
// useComputed is always considered side-effecty, so we need to re-run
|
|
105
|
+
hook.cleanup?.();
|
|
106
|
+
isInit = true;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (isInit) {
|
|
110
|
+
hook.cleanup = () => ComputedSignal.dispose(hook.signal);
|
|
111
|
+
hook.signal = computed(getter, displayName);
|
|
112
|
+
}
|
|
113
|
+
return hook.signal;
|
|
114
|
+
});
|
|
115
|
+
};
|
|
116
|
+
//# sourceMappingURL=computed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computed.js","sourceRoot":"","sources":["../../src/signals/computed.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Signal } from "./base.js";
|
|
2
|
+
import type { SignalValues } from "./types.js";
|
|
3
|
+
type TrackedExecutionContext<T, Deps extends readonly Signal<unknown>[]> = {
|
|
4
|
+
id: string;
|
|
5
|
+
subs: Map<string, Function>;
|
|
6
|
+
fn: (...values: SignalValues<Deps>) => T;
|
|
7
|
+
deps?: Deps;
|
|
8
|
+
onDepChanged: () => void;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Executes an effect function with dependency tracking enabled, and manages
|
|
12
|
+
* the effect's subscriptions.
|
|
13
|
+
* @param ctx - The execution context
|
|
14
|
+
* @returns The result of the effect function
|
|
15
|
+
*/
|
|
16
|
+
export declare function executeWithTracking<T, Deps extends readonly Signal<unknown>[]>(ctx: TrackedExecutionContext<T, Deps>): T;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=effect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect.d.ts","sourceRoot":"","sources":["../../src/signals/effect.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,KAAK,uBAAuB,CAAC,CAAC,EAAE,IAAI,SAAS,SAAS,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI;IACzE,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC3B,EAAE,EAAE,CAAC,GAAG,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACxC,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,YAAY,EAAE,MAAM,IAAI,CAAA;CACzB,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,IAAI,SAAS,SAAS,MAAM,CAAC,OAAO,CAAC,EAAE,EAC5E,GAAG,EAAE,uBAAuB,CAAC,CAAC,EAAE,IAAI,CAAC,GACpC,CAAC,CAqCH"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { node } from "../globals.js";
|
|
2
|
+
import { sideEffectsEnabled } from "../utils.js";
|
|
3
|
+
import { tracking, effectQueue } from "./globals.js";
|
|
4
|
+
/**
|
|
5
|
+
* Executes an effect function with dependency tracking enabled, and manages
|
|
6
|
+
* the effect's subscriptions.
|
|
7
|
+
* @param ctx - The execution context
|
|
8
|
+
* @returns The result of the effect function
|
|
9
|
+
*/
|
|
10
|
+
export function executeWithTracking(ctx) {
|
|
11
|
+
const { id, subs, fn, deps = [], onDepChanged } = ctx;
|
|
12
|
+
let observations;
|
|
13
|
+
effectQueue.delete(id);
|
|
14
|
+
const isServer = !!node.current && !sideEffectsEnabled();
|
|
15
|
+
if (!isServer) {
|
|
16
|
+
observations = new Map();
|
|
17
|
+
tracking.stack.push(observations);
|
|
18
|
+
}
|
|
19
|
+
const result = fn(...deps.map((s) => s.value));
|
|
20
|
+
if (!isServer) {
|
|
21
|
+
for (const [id, unsub] of subs) {
|
|
22
|
+
if (observations.has(id))
|
|
23
|
+
continue;
|
|
24
|
+
unsub();
|
|
25
|
+
subs.delete(id);
|
|
26
|
+
}
|
|
27
|
+
const effect = () => {
|
|
28
|
+
if (!effectQueue.has(id)) {
|
|
29
|
+
queueMicrotask(() => effectQueue.get(id)?.());
|
|
30
|
+
}
|
|
31
|
+
effectQueue.set(id, onDepChanged);
|
|
32
|
+
};
|
|
33
|
+
for (const [id, sig] of observations) {
|
|
34
|
+
if (subs.has(id))
|
|
35
|
+
continue;
|
|
36
|
+
const unsub = sig.subscribe(effect);
|
|
37
|
+
subs.set(id, unsub);
|
|
38
|
+
}
|
|
39
|
+
tracking.stack.pop();
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=effect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect.js","sourceRoot":"","sources":["../../src/signals/effect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAYpD;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAAqC;IAErC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,YAAY,EAAE,GAAG,GAAG,CAAA;IACrD,IAAI,YAAsD,CAAA;IAE1D,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACtB,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAA;IAExD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,YAAY,GAAG,IAAI,GAAG,EAA2B,CAAA;QACjD,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACnC,CAAC;IAED,MAAM,MAAM,GAAG,EAAE,CAAC,GAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAwB,CAAC,CAAA;IAEtE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;YAC/B,IAAI,YAAa,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAQ;YACnC,KAAK,EAAE,CAAA;YACP,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACjB,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACzB,cAAc,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;YAC/C,CAAC;YACD,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,CAAA;QACnC,CAAC,CAAA;QAED,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,YAAa,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAQ;YAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;YACnC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACrB,CAAC;QACD,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;IACtB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Signal } from "./base.js";
|
|
2
|
+
import type { SignalSubscriber } from "./types.js";
|
|
3
|
+
export declare const tracking: {
|
|
4
|
+
stack: Map<string, Signal<unknown>>[];
|
|
5
|
+
current: () => Map<string, Signal<unknown>> | undefined;
|
|
6
|
+
};
|
|
7
|
+
export declare const effectQueue: Map<string, Function>;
|
|
8
|
+
export declare const signalSubsMap: Map<string, Set<SignalSubscriber>>;
|
|
9
|
+
//# sourceMappingURL=globals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globals.d.ts","sourceRoot":"","sources":["../../src/signals/globals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,eAAO,MAAM,QAAQ;;mBAEG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS;CAG/D,CAAA;AACD,eAAO,MAAM,WAAW,uBAA8B,CAAA;AACtD,eAAO,MAAM,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAa,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globals.js","sourceRoot":"","sources":["../../src/signals/globals.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,KAAK,EAAE,IAAI,KAAK,EAAgC;IAChD,OAAO,EAAE;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC1C,CAAC;CACF,CAAA;AACD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAA;AACtD,MAAM,CAAC,MAAM,aAAa,GAAuC,IAAI,GAAG,EAAE,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ISSUES:
|
|
3
|
+
* 1. signal subscription when mixing local and global signals get reversed in hmr for ONLY the first update after HMR is dom
|
|
4
|
+
* 2. global computed will lose its vNode subscription on HMR
|
|
5
|
+
* */
|
|
6
|
+
export { Signal, signal, useSignal } from "./base.js";
|
|
7
|
+
export { ComputedSignal, computed, useComputed } from "./computed.js";
|
|
8
|
+
export { WatchEffect, watch, useWatch } from "./watch.js";
|
|
9
|
+
export { unwrap, tick } from "./utils.js";
|
|
10
|
+
export * from "./jsx.js";
|
|
11
|
+
export * from "./types.js";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signals/index.ts"],"names":[],"mappings":"AAAA;;;;KAIK;AAEL,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACzC,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ISSUES:
|
|
3
|
+
* 1. signal subscription when mixing local and global signals get reversed in hmr for ONLY the first update after HMR is dom
|
|
4
|
+
* 2. global computed will lose its vNode subscription on HMR
|
|
5
|
+
* */
|
|
6
|
+
export { Signal, signal, useSignal } from "./base.js";
|
|
7
|
+
export { ComputedSignal, computed, useComputed } from "./computed.js";
|
|
8
|
+
export { WatchEffect, watch, useWatch } from "./watch.js";
|
|
9
|
+
export { unwrap, tick } from "./utils.js";
|
|
10
|
+
export * from "./jsx.js";
|
|
11
|
+
export * from "./types.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signals/index.ts"],"names":[],"mappings":"AAAA;;;;KAIK;AAEL,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACzC,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Signal } from "./base.js";
|
|
2
|
+
import type { SignalValues } from "./types.js";
|
|
3
|
+
type ForProps<T extends Signal<any[]>> = {
|
|
4
|
+
each: T;
|
|
5
|
+
fallback?: JSX.Element;
|
|
6
|
+
children: (value: T extends Signal<infer U> ? U extends Array<infer V> ? V : never : never, index: number) => JSX.Element;
|
|
7
|
+
};
|
|
8
|
+
export declare function For<T extends Signal<any[]>>({ each, fallback, children, }: ForProps<T>): JSX.Element;
|
|
9
|
+
type DeriveChildrenArgs<T extends Signal<any> | Signal<any>[]> = T extends Signal<any>[] ? SignalValues<T> : [T extends Signal<infer V> ? V : never];
|
|
10
|
+
export type DeriveProps<T extends Signal<any> | Signal<any>[]> = {
|
|
11
|
+
from: T;
|
|
12
|
+
children: (...values: DeriveChildrenArgs<T>) => JSX.Children;
|
|
13
|
+
};
|
|
14
|
+
export declare function Derive<const T extends Signal<any> | Signal<any>[]>({ from, children, }: DeriveProps<T>): JSX.Children;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=jsx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx.d.ts","sourceRoot":"","sources":["../../src/signals/jsx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,KAAK,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI;IACvC,IAAI,EAAE,CAAC,CAAA;IACP,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACtB,QAAQ,EAAE,CACR,KAAK,EAAE,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,CAAC,GAC5B,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GACtB,CAAC,GACD,KAAK,GACP,KAAK,EACT,KAAK,EAAE,MAAM,KACV,GAAG,CAAC,OAAO,CAAA;CACjB,CAAA;AAED,wBAAgB,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,EAC3C,IAAI,EACJ,QAAQ,EACR,QAAQ,GACT,EAAE,QAAQ,CAAC,CAAC,CAAC,eAIb;AAED,KAAK,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,IAC3D,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,EAAE,GACnB,YAAY,CAAC,CAAC,CAAC,GACf,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAA;AAE7C,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI;IAC/D,IAAI,EAAE,CAAC,CAAA;IACP,QAAQ,EAAE,CAAC,GAAG,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAA;CAC7D,CAAA;AAED,wBAAgB,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,EAClE,IAAI,EACJ,QAAQ,GACT,EAAE,WAAW,CAAC,CAAC,CAAC,gBAKhB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function For({ each, fallback, children, }) {
|
|
2
|
+
const items = each.value;
|
|
3
|
+
if (items.length === 0)
|
|
4
|
+
return fallback;
|
|
5
|
+
return items.map((v, i) => children(v, i));
|
|
6
|
+
}
|
|
7
|
+
export function Derive({ from, children, }) {
|
|
8
|
+
const args = (Array.isArray(from) ? from : [from]).map((s) => s.value);
|
|
9
|
+
return children(...args);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=jsx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx.js","sourceRoot":"","sources":["../../src/signals/jsx.ts"],"names":[],"mappings":"AAgBA,MAAM,UAAU,GAAG,CAA0B,EAC3C,IAAI,EACJ,QAAQ,EACR,QAAQ,GACI;IACZ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IACxB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAA;IACvC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAC5C,CAAC;AAYD,MAAM,UAAU,MAAM,CAA8C,EAClE,IAAI,EACJ,QAAQ,GACO;IACf,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CACpD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CACU,CAAA;IAC1B,OAAO,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAA;AAC1B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Signal } from "./base";
|
|
2
|
+
export type ReadonlySignal<T> = Signal<T> & {
|
|
3
|
+
readonly value: T;
|
|
4
|
+
};
|
|
5
|
+
export type SignalSubscriber = Kiru.VNode | Function;
|
|
6
|
+
export type SignalValues<T extends readonly Signal<unknown>[]> = {
|
|
7
|
+
[I in keyof T]: T[I] extends Signal<infer V> ? V : never;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/signals/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpC,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG;IAC1C,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAClB,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAA;AAEpD,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,SAAS,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI;KAC9D,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CACzD,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/signals/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/signals/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAGlC,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,UAAQ,GAAG,CAAC,CAGnE;AAED,eAAO,MAAM,IAAI,YAGhB,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Signal } from "./base.js";
|
|
2
|
+
import { effectQueue } from "./globals.js";
|
|
3
|
+
export function unwrap(value, reactive = false) {
|
|
4
|
+
if (!Signal.isSignal(value))
|
|
5
|
+
return value;
|
|
6
|
+
return reactive ? value.value : value.peek();
|
|
7
|
+
}
|
|
8
|
+
export const tick = () => {
|
|
9
|
+
effectQueue.forEach((fn) => fn());
|
|
10
|
+
effectQueue.clear();
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/signals/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,MAAM,UAAU,MAAM,CAAI,KAAoB,EAAE,QAAQ,GAAG,KAAK;IAC9D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACzC,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;AAC9C,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,EAAE;IACvB,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;IACjC,WAAW,CAAC,KAAK,EAAE,CAAA;AACrB,CAAC,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { HMRAccept } from "../hmr.js";
|
|
2
|
+
import { $HMR_ACCEPT } from "../constants.js";
|
|
3
|
+
import type { Signal } from "./base.js";
|
|
4
|
+
import type { SignalValues } from "./types.js";
|
|
5
|
+
type WatchCallbackReturn = (() => void) | void;
|
|
6
|
+
export declare class WatchEffect<const Deps extends readonly Signal<unknown>[] = []> {
|
|
7
|
+
protected id: string;
|
|
8
|
+
protected getter: (...values: SignalValues<Deps>) => WatchCallbackReturn;
|
|
9
|
+
protected deps?: Deps;
|
|
10
|
+
protected unsubs: Map<string, Function>;
|
|
11
|
+
protected cleanup: (() => void) | null;
|
|
12
|
+
protected isRunning?: boolean;
|
|
13
|
+
protected [$HMR_ACCEPT]?: HMRAccept<WatchEffect<Deps>>;
|
|
14
|
+
constructor(getter: (...values: SignalValues<Deps>) => WatchCallbackReturn, deps?: Deps);
|
|
15
|
+
start(): void;
|
|
16
|
+
stop(): void;
|
|
17
|
+
private static run;
|
|
18
|
+
}
|
|
19
|
+
export declare function watch(getter: () => WatchCallbackReturn): WatchEffect;
|
|
20
|
+
export declare function watch<const Deps extends readonly Signal<unknown>[]>(dependencies: Deps, getter: (...values: SignalValues<Deps>) => WatchCallbackReturn): WatchEffect<Deps>;
|
|
21
|
+
export declare function useWatch(getter: () => WatchCallbackReturn): WatchEffect;
|
|
22
|
+
export declare function useWatch<const Deps extends readonly Signal<unknown>[]>(dependencies: Deps, getter: (...values: SignalValues<Deps>) => WatchCallbackReturn): WatchEffect<Deps> | undefined;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/signals/watch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAM7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,KAAK,mBAAmB,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAA;AAE9C,qBAAa,WAAW,CAAC,KAAK,CAAC,IAAI,SAAS,SAAS,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE;IACzE,SAAS,CAAC,EAAE,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,KAAK,mBAAmB,CAAA;IACxE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,CAAA;IACrB,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACvC,SAAS,CAAC,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAA;IACtC,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC7B,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;gBAGpD,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,KAAK,mBAAmB,EAC9D,IAAI,CAAC,EAAE,IAAI;IA6Bb,KAAK;IAuBL,IAAI;IASJ,OAAO,CAAC,MAAM,CAAC,GAAG;CAgBnB;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,mBAAmB,GAAG,WAAW,CAAA;AACrE,wBAAgB,KAAK,CAAC,KAAK,CAAC,IAAI,SAAS,SAAS,MAAM,CAAC,OAAO,CAAC,EAAE,EACjE,YAAY,EAAE,IAAI,EAClB,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,KAAK,mBAAmB,GAC7D,WAAW,CAAC,IAAI,CAAC,CAAA;AAapB,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,mBAAmB,GAAG,WAAW,CAAA;AACxE,wBAAgB,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,SAAS,MAAM,CAAC,OAAO,CAAC,EAAE,EACpE,YAAY,EAAE,IAAI,EAClB,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,KAAK,mBAAmB,GAC7D,WAAW,CAAC,IAAI,CAAC,GAAG,SAAS,CAAA"}
|