@solidjs/signals 0.13.12 → 0.13.13
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/dev.js +98 -41
- package/dist/node.cjs +366 -330
- package/dist/prod.js +263 -227
- package/package.json +1 -1
package/dist/dev.js
CHANGED
|
@@ -1081,6 +1081,7 @@ function handleAsync(el, result, setter) {
|
|
|
1081
1081
|
if (el._inFlight !== result) return;
|
|
1082
1082
|
if (el._flags & (REACTIVE_DIRTY | REACTIVE_OPTIMISTIC_DIRTY)) return;
|
|
1083
1083
|
globalQueue.initTransition(resolveTransition(el));
|
|
1084
|
+
const wasUninitialized = !!(el._statusFlags & STATUS_UNINITIALIZED);
|
|
1084
1085
|
clearStatus(el);
|
|
1085
1086
|
const lane = resolveLane(el);
|
|
1086
1087
|
if (lane) lane._pendingAsync.delete(el);
|
|
@@ -1094,9 +1095,10 @@ function handleAsync(el, result, setter) {
|
|
|
1094
1095
|
}
|
|
1095
1096
|
el._time = clock;
|
|
1096
1097
|
} else if (lane) {
|
|
1098
|
+
const isEffect = el._type;
|
|
1097
1099
|
const prevValue = el._value;
|
|
1098
1100
|
const equals = el._equals;
|
|
1099
|
-
if (!equals || !equals(value, prevValue)) {
|
|
1101
|
+
if ((!isEffect && wasUninitialized) || !equals || !equals(value, prevValue)) {
|
|
1100
1102
|
el._value = value;
|
|
1101
1103
|
el._time = clock;
|
|
1102
1104
|
if (el._latestValueComputed) {
|
|
@@ -1359,6 +1361,7 @@ function recompute(el, create = false) {
|
|
|
1359
1361
|
const isOptimisticDirty = !!(el._flags & REACTIVE_OPTIMISTIC_DIRTY);
|
|
1360
1362
|
const hasOverride = el._overrideValue !== undefined && el._overrideValue !== NOT_PENDING;
|
|
1361
1363
|
const wasPending = !!(el._statusFlags & STATUS_PENDING);
|
|
1364
|
+
const wasUninitialized = !!(el._statusFlags & STATUS_UNINITIALIZED);
|
|
1362
1365
|
const oldcontext = context;
|
|
1363
1366
|
context = el;
|
|
1364
1367
|
el._depsTail = null;
|
|
@@ -1424,7 +1427,8 @@ function recompute(el, create = false) {
|
|
|
1424
1427
|
: el._pendingValue === NOT_PENDING
|
|
1425
1428
|
? el._value
|
|
1426
1429
|
: el._pendingValue;
|
|
1427
|
-
const valueChanged =
|
|
1430
|
+
const valueChanged =
|
|
1431
|
+
(!isEffect && wasUninitialized) || !el._equals || !el._equals(compareValue, value);
|
|
1428
1432
|
if (valueChanged) {
|
|
1429
1433
|
const prevVisible = hasOverride ? el._overrideValue : undefined;
|
|
1430
1434
|
if (create || (isEffect && activeTransition !== el._transition) || isOptimisticDirty) {
|
|
@@ -2690,12 +2694,55 @@ function getKeys(source, override, enumerable = true) {
|
|
|
2690
2694
|
return Array.from(keys);
|
|
2691
2695
|
}
|
|
2692
2696
|
function getPropertyDescriptor(source, override, property) {
|
|
2693
|
-
let value = source;
|
|
2694
2697
|
if (override && property in override) {
|
|
2695
|
-
if (
|
|
2696
|
-
|
|
2698
|
+
if (override[property] === $DELETED) return void 0;
|
|
2699
|
+
const overrideDesc = Reflect.getOwnPropertyDescriptor(override, property);
|
|
2700
|
+
if (overrideDesc?.get || overrideDesc?.set || !(property in source)) return overrideDesc;
|
|
2697
2701
|
}
|
|
2698
|
-
return Reflect.getOwnPropertyDescriptor(
|
|
2702
|
+
return Reflect.getOwnPropertyDescriptor(source, property);
|
|
2703
|
+
}
|
|
2704
|
+
function prepareStoreWrite(target, store, property) {
|
|
2705
|
+
if (target[STORE_OPTIMISTIC]) {
|
|
2706
|
+
const firewall = target[STORE_FIREWALL];
|
|
2707
|
+
if (firewall?._transition) {
|
|
2708
|
+
globalQueue.initTransition(firewall._transition);
|
|
2709
|
+
}
|
|
2710
|
+
}
|
|
2711
|
+
const state = target[STORE_VALUE];
|
|
2712
|
+
const base = state[property];
|
|
2713
|
+
if (
|
|
2714
|
+
snapshotCaptureActive &&
|
|
2715
|
+
typeof property !== "symbol" &&
|
|
2716
|
+
!((target[STORE_FIREWALL]?._statusFlags ?? 0) & STATUS_PENDING)
|
|
2717
|
+
) {
|
|
2718
|
+
if (!target[STORE_SNAPSHOT_PROPS]) {
|
|
2719
|
+
target[STORE_SNAPSHOT_PROPS] = Object.create(null);
|
|
2720
|
+
snapshotSources?.add(target);
|
|
2721
|
+
}
|
|
2722
|
+
if (!(property in target[STORE_SNAPSHOT_PROPS])) {
|
|
2723
|
+
target[STORE_SNAPSHOT_PROPS][property] = base;
|
|
2724
|
+
}
|
|
2725
|
+
}
|
|
2726
|
+
const useOptimistic = target[STORE_OPTIMISTIC] && !projectionWriteActive;
|
|
2727
|
+
const overrideKey = useOptimistic ? STORE_OPTIMISTIC_OVERRIDE : STORE_OVERRIDE;
|
|
2728
|
+
if (useOptimistic) trackOptimisticStore(store);
|
|
2729
|
+
return { base: base, overrideKey: overrideKey, state: state };
|
|
2730
|
+
}
|
|
2731
|
+
function notifyStoreProperty(target, property, mode, value) {
|
|
2732
|
+
if (target[STORE_HAS]?.[property]) setSignal(target[STORE_HAS][property], mode !== "delete");
|
|
2733
|
+
const nodes = getNodes(target, STORE_NODE);
|
|
2734
|
+
if (mode === "set") {
|
|
2735
|
+
nodes[property] &&
|
|
2736
|
+
setSignal(nodes[property], () => (isWrappable(value) ? wrap(value, target) : value));
|
|
2737
|
+
} else if (mode === "invalidate") {
|
|
2738
|
+
if (nodes[property]) {
|
|
2739
|
+
setSignal(nodes[property], {});
|
|
2740
|
+
delete nodes[property];
|
|
2741
|
+
}
|
|
2742
|
+
} else {
|
|
2743
|
+
nodes[property] && setSignal(nodes[property], undefined);
|
|
2744
|
+
}
|
|
2745
|
+
nodes[$TRACK] && setSignal(nodes[$TRACK], undefined);
|
|
2699
2746
|
}
|
|
2700
2747
|
let Writing = null;
|
|
2701
2748
|
const storeTraps = {
|
|
@@ -2808,31 +2855,12 @@ const storeTraps = {
|
|
|
2808
2855
|
set(target, property, rawValue) {
|
|
2809
2856
|
const store = target[$PROXY];
|
|
2810
2857
|
if (writeOnly(store)) {
|
|
2811
|
-
if (target[STORE_OPTIMISTIC]) {
|
|
2812
|
-
const firewall = target[STORE_FIREWALL];
|
|
2813
|
-
if (firewall?._transition) {
|
|
2814
|
-
globalQueue.initTransition(firewall._transition);
|
|
2815
|
-
}
|
|
2816
|
-
}
|
|
2817
2858
|
untrack(() => {
|
|
2818
|
-
const
|
|
2819
|
-
|
|
2820
|
-
|
|
2821
|
-
|
|
2822
|
-
|
|
2823
|
-
!((target[STORE_FIREWALL]?._statusFlags ?? 0) & STATUS_PENDING)
|
|
2824
|
-
) {
|
|
2825
|
-
if (!target[STORE_SNAPSHOT_PROPS]) {
|
|
2826
|
-
target[STORE_SNAPSHOT_PROPS] = Object.create(null);
|
|
2827
|
-
snapshotSources?.add(target);
|
|
2828
|
-
}
|
|
2829
|
-
if (!(property in target[STORE_SNAPSHOT_PROPS])) {
|
|
2830
|
-
target[STORE_SNAPSHOT_PROPS][property] = base;
|
|
2831
|
-
}
|
|
2832
|
-
}
|
|
2833
|
-
const useOptimistic = target[STORE_OPTIMISTIC] && !projectionWriteActive;
|
|
2834
|
-
const overrideKey = useOptimistic ? STORE_OPTIMISTIC_OVERRIDE : STORE_OVERRIDE;
|
|
2835
|
-
if (useOptimistic) trackOptimisticStore(store);
|
|
2859
|
+
const {
|
|
2860
|
+
base: base,
|
|
2861
|
+
overrideKey: overrideKey,
|
|
2862
|
+
state: state
|
|
2863
|
+
} = prepareStoreWrite(target, store, property);
|
|
2836
2864
|
const prev =
|
|
2837
2865
|
target[STORE_OPTIMISTIC_OVERRIDE] && property in target[STORE_OPTIMISTIC_OVERRIDE]
|
|
2838
2866
|
? target[STORE_OPTIMISTIC_OVERRIDE][property]
|
|
@@ -2858,21 +2886,46 @@ const storeTraps = {
|
|
|
2858
2886
|
override[property] = value;
|
|
2859
2887
|
if (nextLength !== undefined) override.length = nextLength;
|
|
2860
2888
|
}
|
|
2861
|
-
|
|
2862
|
-
target[STORE_HAS]?.[property] && setSignal(target[STORE_HAS][property], true);
|
|
2863
|
-
const nodes = getNodes(target, STORE_NODE);
|
|
2864
|
-
nodes[property] &&
|
|
2865
|
-
setSignal(nodes[property], () => (wrappable ? wrap(value, target) : value));
|
|
2889
|
+
notifyStoreProperty(target, property, "set", value);
|
|
2866
2890
|
if (Array.isArray(state)) {
|
|
2891
|
+
const nodes = getNodes(target, STORE_NODE);
|
|
2867
2892
|
const lengthValue = property === "length" ? value : nextLength;
|
|
2868
2893
|
lengthValue !== undefined && nodes.length && setSignal(nodes.length, lengthValue);
|
|
2869
2894
|
}
|
|
2870
|
-
nodes[$TRACK] && setSignal(nodes[$TRACK], undefined);
|
|
2871
2895
|
if (true) DEV$1.hooks.onStoreNodeUpdate?.(target[$PROXY], property, value, prev);
|
|
2872
2896
|
});
|
|
2873
2897
|
}
|
|
2874
2898
|
return true;
|
|
2875
2899
|
},
|
|
2900
|
+
defineProperty(target, property, descriptor) {
|
|
2901
|
+
const store = target[$PROXY];
|
|
2902
|
+
if (writeOnly(store)) {
|
|
2903
|
+
untrack(() => {
|
|
2904
|
+
const { base: base, overrideKey: overrideKey } = prepareStoreWrite(target, store, property);
|
|
2905
|
+
const normalizedDescriptor =
|
|
2906
|
+
"value" in descriptor
|
|
2907
|
+
? {
|
|
2908
|
+
...descriptor,
|
|
2909
|
+
value: descriptor.value?.[$TARGET]?.[STORE_VALUE] ?? descriptor.value
|
|
2910
|
+
}
|
|
2911
|
+
: descriptor;
|
|
2912
|
+
Object.defineProperty(
|
|
2913
|
+
target[overrideKey] || (target[overrideKey] = Object.create(null)),
|
|
2914
|
+
property,
|
|
2915
|
+
normalizedDescriptor
|
|
2916
|
+
);
|
|
2917
|
+
notifyStoreProperty(target, property, "invalidate");
|
|
2918
|
+
if (true) {
|
|
2919
|
+
const next =
|
|
2920
|
+
"value" in normalizedDescriptor
|
|
2921
|
+
? normalizedDescriptor.value
|
|
2922
|
+
: normalizedDescriptor.get?.call(store);
|
|
2923
|
+
DEV$1.hooks.onStoreNodeUpdate?.(target[$PROXY], property, next, base);
|
|
2924
|
+
}
|
|
2925
|
+
});
|
|
2926
|
+
}
|
|
2927
|
+
return true;
|
|
2928
|
+
},
|
|
2876
2929
|
deleteProperty(target, property) {
|
|
2877
2930
|
const optDeleted = target[STORE_OPTIMISTIC_OVERRIDE]?.[property] === $DELETED;
|
|
2878
2931
|
const regDeleted = target[STORE_OVERRIDE]?.[property] === $DELETED;
|
|
@@ -2895,10 +2948,7 @@ const storeTraps = {
|
|
|
2895
2948
|
} else if (target[overrideKey] && property in target[overrideKey]) {
|
|
2896
2949
|
delete target[overrideKey][property];
|
|
2897
2950
|
} else return true;
|
|
2898
|
-
|
|
2899
|
-
const nodes = getNodes(target, STORE_NODE);
|
|
2900
|
-
nodes[property] && setSignal(nodes[property], undefined);
|
|
2901
|
-
nodes[$TRACK] && setSignal(nodes[$TRACK], undefined);
|
|
2951
|
+
notifyStoreProperty(target, property, "delete");
|
|
2902
2952
|
});
|
|
2903
2953
|
}
|
|
2904
2954
|
return true;
|
|
@@ -2920,6 +2970,8 @@ const storeTraps = {
|
|
|
2920
2970
|
if (property === $PROXY) return { value: target[$PROXY], writable: true, configurable: true };
|
|
2921
2971
|
if (target[STORE_OPTIMISTIC_OVERRIDE] && property in target[STORE_OPTIMISTIC_OVERRIDE]) {
|
|
2922
2972
|
if (target[STORE_OPTIMISTIC_OVERRIDE][property] === $DELETED) return undefined;
|
|
2973
|
+
const optDesc = Reflect.getOwnPropertyDescriptor(target[STORE_OPTIMISTIC_OVERRIDE], property);
|
|
2974
|
+
if (optDesc?.get || optDesc?.set || !(property in target[STORE_VALUE])) return optDesc;
|
|
2923
2975
|
const baseDesc = getPropertyDescriptor(target[STORE_VALUE], target[STORE_OVERRIDE], property);
|
|
2924
2976
|
if (baseDesc) {
|
|
2925
2977
|
return { ...baseDesc, value: target[STORE_OPTIMISTIC_OVERRIDE][property] };
|
|
@@ -3113,7 +3165,12 @@ function updatePath(current, args, i = 0) {
|
|
|
3113
3165
|
) {
|
|
3114
3166
|
const target = part !== undefined ? current[part] : current;
|
|
3115
3167
|
const keys = Object.keys(value);
|
|
3116
|
-
for (let i = 0; i < keys.length; i++)
|
|
3168
|
+
for (let i = 0; i < keys.length; i++) {
|
|
3169
|
+
const key = keys[i];
|
|
3170
|
+
const desc = Object.getOwnPropertyDescriptor(value, key);
|
|
3171
|
+
if (desc.get || desc.set) Object.defineProperty(target, key, desc);
|
|
3172
|
+
else target[key] = desc.value;
|
|
3173
|
+
}
|
|
3117
3174
|
} else {
|
|
3118
3175
|
current[part] = value;
|
|
3119
3176
|
}
|