@wcstack/state 2.1.0 → 2.1.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/README.ja.md +85 -17
- package/README.md +88 -19
- package/dist/auto.min.js +1 -1
- package/dist/auto.min.js.map +1 -1
- package/dist/index.esm.js +31 -13
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -9182,7 +9182,7 @@ async function buildBindings(root) {
|
|
|
9182
9182
|
}
|
|
9183
9183
|
}
|
|
9184
9184
|
|
|
9185
|
-
var version = "2.1.
|
|
9185
|
+
var version = "2.1.1";
|
|
9186
9186
|
var pkg = {
|
|
9187
9187
|
version: version};
|
|
9188
9188
|
|
|
@@ -14675,6 +14675,34 @@ function notifyWrite(address, absAddress, receiver, handler, keyedMergePath) {
|
|
|
14675
14675
|
// $postUpdate の手動リフレッシュは従来通り全行展開のまま)
|
|
14676
14676
|
{ listExpansion: "diff", keyedMergePath });
|
|
14677
14677
|
}
|
|
14678
|
+
/**
|
|
14679
|
+
* 書き込み完了後のキャッシュ整合(Issue #234)。
|
|
14680
|
+
*
|
|
14681
|
+
* ワイルドカードのデータパス(リスト行)は代入値がそのまま格納値なので、
|
|
14682
|
+
* 代入値を dirty:false で載せて次回の読みを省く。
|
|
14683
|
+
*
|
|
14684
|
+
* アクセサペア(getterPaths に載るパス)は getter が正本であり、setter は
|
|
14685
|
+
* 命令的な代入に過ぎない。代入値を getter の評価結果として固定すると
|
|
14686
|
+
* - setter が正規化・分配した結果と読みが食い違う
|
|
14687
|
+
* - getter が一度も評価されず動的依存が張られない → 依存先を書いても
|
|
14688
|
+
* walkDependency がこのキャッシュを dirty にできず、永続的に stale になる
|
|
14689
|
+
* (プリミティブ代入は同値ガードの旧値読みで偶然 getter が走るが、
|
|
14690
|
+
* オブジェクト代入は同値ガードを素通りするため救済がない)
|
|
14691
|
+
* ため、キャッシュを dirty にして次回の読みで getter を再評価させる。
|
|
14692
|
+
*/
|
|
14693
|
+
function commitWriteCache(stateElement, path, absAddress, value, cacheable) {
|
|
14694
|
+
if (!cacheable) {
|
|
14695
|
+
return;
|
|
14696
|
+
}
|
|
14697
|
+
if (stateElement.getterPaths.has(path)) {
|
|
14698
|
+
dirtyCacheEntryByAbsoluteStateAddress(absAddress);
|
|
14699
|
+
return;
|
|
14700
|
+
}
|
|
14701
|
+
setCacheEntryByAbsoluteStateAddress(absAddress, {
|
|
14702
|
+
value: value,
|
|
14703
|
+
dirty: false
|
|
14704
|
+
});
|
|
14705
|
+
}
|
|
14678
14706
|
function _setByAddress(target, address, absAddress, value, receiver, handler, keyedMergePath) {
|
|
14679
14707
|
try {
|
|
14680
14708
|
if (address.pathInfo.path in target) {
|
|
@@ -14896,12 +14924,7 @@ function setByAddressCore(target, address, value, receiver, handler, keyedMergeP
|
|
|
14896
14924
|
}
|
|
14897
14925
|
finally {
|
|
14898
14926
|
notifyWrite(address, absAddress, receiver, handler, keyedMergePath);
|
|
14899
|
-
|
|
14900
|
-
setCacheEntryByAbsoluteStateAddress(absAddress, {
|
|
14901
|
-
value: value,
|
|
14902
|
-
dirty: false
|
|
14903
|
-
});
|
|
14904
|
-
}
|
|
14927
|
+
commitWriteCache(stateElement, path, absAddress, value, cacheable);
|
|
14905
14928
|
// DCC bindable イベントディスパッチ(完全一致 + サブパス → 先頭セグメント、§2.1)
|
|
14906
14929
|
dispatchBindableEvent(stateElement, address.pathInfo, { value });
|
|
14907
14930
|
}
|
|
@@ -14948,12 +14971,7 @@ function setByAddressCore(target, address, value, receiver, handler, keyedMergeP
|
|
|
14948
14971
|
}
|
|
14949
14972
|
}
|
|
14950
14973
|
finally {
|
|
14951
|
-
|
|
14952
|
-
setCacheEntryByAbsoluteStateAddress(absAddress, {
|
|
14953
|
-
value: value,
|
|
14954
|
-
dirty: false
|
|
14955
|
-
});
|
|
14956
|
-
}
|
|
14974
|
+
commitWriteCache(stateElement, path, absAddress, value, cacheable);
|
|
14957
14975
|
// DCC bindable イベントディスパッチ(完全一致 + サブパス → 先頭セグメント、§2.1)
|
|
14958
14976
|
dispatchBindableEvent(stateElement, address.pathInfo, { value });
|
|
14959
14977
|
}
|