@wcstack/state 1.3.12 → 1.3.14
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 +7 -3
- package/README.md +7 -3
- package/dist/apply/applyChange.d.ts.map +1 -1
- package/dist/apply/applyChange.js +11 -0
- package/dist/apply/applyChange.js.map +1 -1
- package/dist/apply/applyChangeFromBindings.d.ts +4 -0
- package/dist/apply/applyChangeFromBindings.d.ts.map +1 -1
- package/dist/apply/applyChangeFromBindings.js +13 -1
- package/dist/apply/applyChangeFromBindings.js.map +1 -1
- package/dist/apply/types.d.ts +5 -0
- package/dist/apply/types.d.ts.map +1 -1
- package/dist/bindings/getSubscriberNodes.d.ts +1 -1
- package/dist/bindings/getSubscriberNodes.js +1 -1
- package/dist/index.esm.js +24 -2
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +1 -1
- package/dist/index.esm.min.js.map +1 -1
- package/package.json +4 -4
package/README.ja.md
CHANGED
|
@@ -148,11 +148,15 @@ Web Components のための宣言的リアクティブ状態管理。
|
|
|
148
148
|
|
|
149
149
|
### プリミティブ・オブジェクトプロパティ
|
|
150
150
|
|
|
151
|
-
|
|
151
|
+
代入は**ドットパス記法**(ブラケット構文)を使用する必要があります。リアクティブ Proxy はトップレベルの `set` トラップのみを捕捉するため、通常のネストされたプロパティアクセスでは変更が検知されません:
|
|
152
152
|
|
|
153
153
|
```javascript
|
|
154
|
-
|
|
155
|
-
this.
|
|
154
|
+
// ✅ パス代入 — 変更が検知される
|
|
155
|
+
this.count = 10;
|
|
156
|
+
this["user.name"] = "Bob";
|
|
157
|
+
|
|
158
|
+
// ❌ 直接のネストアクセス — 変更が検知されない
|
|
159
|
+
this.user.name = "Bob"; // Proxy の set トラップをバイパスする
|
|
156
160
|
```
|
|
157
161
|
|
|
158
162
|
### 配列
|
package/README.md
CHANGED
|
@@ -148,11 +148,15 @@ State changes are detected through **property assignment** (the Proxy `set` trap
|
|
|
148
148
|
|
|
149
149
|
### Primitive and Object Properties
|
|
150
150
|
|
|
151
|
-
|
|
151
|
+
Assignment must use **dot-path notation** (bracket syntax). The reactive proxy intercepts only top-level `set` traps, so standard nested property access bypasses change detection:
|
|
152
152
|
|
|
153
153
|
```javascript
|
|
154
|
-
|
|
155
|
-
this.
|
|
154
|
+
// ✅ Path assignment — change detected
|
|
155
|
+
this.count = 10;
|
|
156
|
+
this["user.name"] = "Bob";
|
|
157
|
+
|
|
158
|
+
// ❌ Direct nested access — change NOT detected
|
|
159
|
+
this.user.name = "Bob"; // bypasses the Proxy set trap
|
|
156
160
|
```
|
|
157
161
|
|
|
158
162
|
### Arrays
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applyChange.d.ts","sourceRoot":"","sources":["../../src/apply/applyChange.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAe3C,OAAO,EAAiB,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"applyChange.d.ts","sourceRoot":"","sources":["../../src/apply/applyChange.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAe3C,OAAO,EAAiB,aAAa,EAAE,MAAM,YAAY,CAAC;AA+C1D,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAoD/E"}
|
|
@@ -46,6 +46,16 @@ function _applyChange(binding, context) {
|
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
+
if (fn === applyChangeToProperty) {
|
|
50
|
+
const element = binding.node;
|
|
51
|
+
if (element.tagName === 'SELECT') {
|
|
52
|
+
const propName = binding.propSegments[0];
|
|
53
|
+
if (propName === 'value' || propName === 'selectedIndex') {
|
|
54
|
+
context.deferredSelectBindings.push({ binding, value: filteredValue });
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
49
59
|
fn(binding, context, filteredValue);
|
|
50
60
|
}
|
|
51
61
|
export function applyChange(binding, context) {
|
|
@@ -94,6 +104,7 @@ export function applyChange(binding, context) {
|
|
|
94
104
|
appliedBindingSet: context.appliedBindingSet,
|
|
95
105
|
newListValueByAbsAddress: context.newListValueByAbsAddress,
|
|
96
106
|
updatedAbsAddressSetByStateElement: context.updatedAbsAddressSetByStateElement,
|
|
107
|
+
deferredSelectBindings: context.deferredSelectBindings,
|
|
97
108
|
};
|
|
98
109
|
_applyChange(binding, newContext);
|
|
99
110
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applyChange.js","sourceRoot":"","sources":["../../src/apply/applyChange.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"applyChange.js","sourceRoot":"","sources":["../../src/apply/applyChange.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,10 @@ import { IBindingInfo } from "../types";
|
|
|
2
2
|
/**
|
|
3
3
|
* バインディング情報の配列を処理し、各バインディングに対して状態の変更を適用する。
|
|
4
4
|
*
|
|
5
|
+
* 2フェーズで処理:
|
|
6
|
+
* Phase 1: 構造的更新(for/if) + 値更新(select以外) — select.value/selectedIndex は遅延収集
|
|
7
|
+
* Phase 2: 遅延されたselect.value/selectedIndex を適用(option要素の生成後)
|
|
8
|
+
*
|
|
5
9
|
* 最適化のため、以下のグループ化を行う:
|
|
6
10
|
* 同じ stateNameとrootNode を持つバインディングをグループ化 → createState の呼び出しを削減
|
|
7
11
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applyChangeFromBindings.d.ts","sourceRoot":"","sources":["../../src/apply/applyChangeFromBindings.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"applyChangeFromBindings.d.ts","sourceRoot":"","sources":["../../src/apply/applyChangeFromBindings.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAMxC;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAqEtE"}
|
|
@@ -4,10 +4,15 @@ import { updatedCallbackSymbol } from "../proxy/symbols";
|
|
|
4
4
|
import { raiseError } from "../raiseError";
|
|
5
5
|
import { getStateElementByName } from "../stateElementByName";
|
|
6
6
|
import { applyChange } from "./applyChange";
|
|
7
|
+
import { applyChangeToProperty } from "./applyChangeToProperty";
|
|
7
8
|
import { getRootNodeByFragment } from "./rootNodeByFragment";
|
|
8
9
|
/**
|
|
9
10
|
* バインディング情報の配列を処理し、各バインディングに対して状態の変更を適用する。
|
|
10
11
|
*
|
|
12
|
+
* 2フェーズで処理:
|
|
13
|
+
* Phase 1: 構造的更新(for/if) + 値更新(select以外) — select.value/selectedIndex は遅延収集
|
|
14
|
+
* Phase 2: 遅延されたselect.value/selectedIndex を適用(option要素の生成後)
|
|
15
|
+
*
|
|
11
16
|
* 最適化のため、以下のグループ化を行う:
|
|
12
17
|
* 同じ stateNameとrootNode を持つバインディングをグループ化 → createState の呼び出しを削減
|
|
13
18
|
*/
|
|
@@ -16,7 +21,8 @@ export function applyChangeFromBindings(bindings) {
|
|
|
16
21
|
const appliedBindingSet = new Set();
|
|
17
22
|
const newListValueByAbsAddress = new Map();
|
|
18
23
|
const updatedAbsAddressSetByStateElement = new Map();
|
|
19
|
-
|
|
24
|
+
const deferredSelectBindings = [];
|
|
25
|
+
// Phase 1: 構造的更新 + 値更新(select.value/selectedIndex は遅延)
|
|
20
26
|
while (bindingIndex < bindings.length) {
|
|
21
27
|
let binding = bindings[bindingIndex];
|
|
22
28
|
const stateName = binding.stateName;
|
|
@@ -48,6 +54,7 @@ export function applyChangeFromBindings(bindings) {
|
|
|
48
54
|
appliedBindingSet: appliedBindingSet,
|
|
49
55
|
newListValueByAbsAddress: newListValueByAbsAddress,
|
|
50
56
|
updatedAbsAddressSetByStateElement: updatedAbsAddressSetByStateElement,
|
|
57
|
+
deferredSelectBindings: deferredSelectBindings,
|
|
51
58
|
};
|
|
52
59
|
do {
|
|
53
60
|
applyChange(binding, context);
|
|
@@ -62,6 +69,11 @@ export function applyChangeFromBindings(bindings) {
|
|
|
62
69
|
} while (true); // eslint-disable-line no-constant-condition
|
|
63
70
|
});
|
|
64
71
|
}
|
|
72
|
+
// Phase 2: 遅延されたselect.value/selectedIndex を適用
|
|
73
|
+
// applyChangeToProperty は context を参照しないため null を渡す
|
|
74
|
+
for (const { binding, value } of deferredSelectBindings) {
|
|
75
|
+
applyChangeToProperty(binding, null, value);
|
|
76
|
+
}
|
|
65
77
|
for (const [absAddress, newListValue] of newListValueByAbsAddress.entries()) {
|
|
66
78
|
setLastListValueByAbsoluteStateAddress(absAddress, newListValue);
|
|
67
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applyChangeFromBindings.js","sourceRoot":"","sources":["../../src/apply/applyChangeFromBindings.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,sCAAsC,EAAE,MAAM,6CAA6C,CAAC;AACrG,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAG7D
|
|
1
|
+
{"version":3,"file":"applyChangeFromBindings.js","sourceRoot":"","sources":["../../src/apply/applyChangeFromBindings.ts"],"names":[],"mappings":"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"}
|
package/dist/apply/types.d.ts
CHANGED
|
@@ -2,6 +2,10 @@ import { IStateElement } from "../components/types";
|
|
|
2
2
|
import { IStateProxy } from "../proxy/types";
|
|
3
3
|
import { IBindingInfo } from "../binding/types";
|
|
4
4
|
import { IAbsoluteStateAddress } from "../address/types";
|
|
5
|
+
export interface IDeferredSelectBinding {
|
|
6
|
+
readonly binding: IBindingInfo;
|
|
7
|
+
readonly value: unknown;
|
|
8
|
+
}
|
|
5
9
|
export interface IApplyContext {
|
|
6
10
|
readonly rootNode: Node;
|
|
7
11
|
readonly stateName: string;
|
|
@@ -10,6 +14,7 @@ export interface IApplyContext {
|
|
|
10
14
|
appliedBindingSet: Set<IBindingInfo>;
|
|
11
15
|
newListValueByAbsAddress: Map<IAbsoluteStateAddress, readonly unknown[]>;
|
|
12
16
|
updatedAbsAddressSetByStateElement: Map<IStateElement, Set<IAbsoluteStateAddress>>;
|
|
17
|
+
deferredSelectBindings: IDeferredSelectBinding[];
|
|
13
18
|
}
|
|
14
19
|
export type ApplyChangeFn = (binding: IBindingInfo, context: IApplyContext, newValue: unknown) => void;
|
|
15
20
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/apply/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,iBAAiB,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IACrC,wBAAwB,EAAE,GAAG,CAAC,qBAAqB,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC;IACzE,kCAAkC,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/apply/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,iBAAiB,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IACrC,wBAAwB,EAAE,GAAG,CAAC,qBAAqB,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC;IACzE,kCAAkC,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACnF,sBAAsB,EAAE,sBAAsB,EAAE,CAAC;CAClD;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC"}
|
package/dist/index.esm.js
CHANGED
|
@@ -1465,7 +1465,7 @@ function getParseBindTextResults(node) {
|
|
|
1465
1465
|
}
|
|
1466
1466
|
|
|
1467
1467
|
/**
|
|
1468
|
-
* data-
|
|
1468
|
+
* data-wcs 属性または埋め込みノード<!--{{}}-->を持つノードをすべて取得する
|
|
1469
1469
|
* @param root
|
|
1470
1470
|
* @returns
|
|
1471
1471
|
*/
|
|
@@ -2937,6 +2937,16 @@ function _applyChange(binding, context) {
|
|
|
2937
2937
|
}
|
|
2938
2938
|
}
|
|
2939
2939
|
}
|
|
2940
|
+
if (fn === applyChangeToProperty) {
|
|
2941
|
+
const element = binding.node;
|
|
2942
|
+
if (element.tagName === 'SELECT') {
|
|
2943
|
+
const propName = binding.propSegments[0];
|
|
2944
|
+
if (propName === 'value' || propName === 'selectedIndex') {
|
|
2945
|
+
context.deferredSelectBindings.push({ binding, value: filteredValue });
|
|
2946
|
+
return;
|
|
2947
|
+
}
|
|
2948
|
+
}
|
|
2949
|
+
}
|
|
2940
2950
|
fn(binding, context, filteredValue);
|
|
2941
2951
|
}
|
|
2942
2952
|
function applyChange(binding, context) {
|
|
@@ -2985,6 +2995,7 @@ function applyChange(binding, context) {
|
|
|
2985
2995
|
appliedBindingSet: context.appliedBindingSet,
|
|
2986
2996
|
newListValueByAbsAddress: context.newListValueByAbsAddress,
|
|
2987
2997
|
updatedAbsAddressSetByStateElement: context.updatedAbsAddressSetByStateElement,
|
|
2998
|
+
deferredSelectBindings: context.deferredSelectBindings,
|
|
2988
2999
|
};
|
|
2989
3000
|
_applyChange(binding, newContext);
|
|
2990
3001
|
});
|
|
@@ -2997,6 +3008,10 @@ function applyChange(binding, context) {
|
|
|
2997
3008
|
/**
|
|
2998
3009
|
* バインディング情報の配列を処理し、各バインディングに対して状態の変更を適用する。
|
|
2999
3010
|
*
|
|
3011
|
+
* 2フェーズで処理:
|
|
3012
|
+
* Phase 1: 構造的更新(for/if) + 値更新(select以外) — select.value/selectedIndex は遅延収集
|
|
3013
|
+
* Phase 2: 遅延されたselect.value/selectedIndex を適用(option要素の生成後)
|
|
3014
|
+
*
|
|
3000
3015
|
* 最適化のため、以下のグループ化を行う:
|
|
3001
3016
|
* 同じ stateNameとrootNode を持つバインディングをグループ化 → createState の呼び出しを削減
|
|
3002
3017
|
*/
|
|
@@ -3005,7 +3020,8 @@ function applyChangeFromBindings(bindings) {
|
|
|
3005
3020
|
const appliedBindingSet = new Set();
|
|
3006
3021
|
const newListValueByAbsAddress = new Map();
|
|
3007
3022
|
const updatedAbsAddressSetByStateElement = new Map();
|
|
3008
|
-
|
|
3023
|
+
const deferredSelectBindings = [];
|
|
3024
|
+
// Phase 1: 構造的更新 + 値更新(select.value/selectedIndex は遅延)
|
|
3009
3025
|
while (bindingIndex < bindings.length) {
|
|
3010
3026
|
let binding = bindings[bindingIndex];
|
|
3011
3027
|
const stateName = binding.stateName;
|
|
@@ -3037,6 +3053,7 @@ function applyChangeFromBindings(bindings) {
|
|
|
3037
3053
|
appliedBindingSet: appliedBindingSet,
|
|
3038
3054
|
newListValueByAbsAddress: newListValueByAbsAddress,
|
|
3039
3055
|
updatedAbsAddressSetByStateElement: updatedAbsAddressSetByStateElement,
|
|
3056
|
+
deferredSelectBindings: deferredSelectBindings,
|
|
3040
3057
|
};
|
|
3041
3058
|
do {
|
|
3042
3059
|
applyChange(binding, context);
|
|
@@ -3051,6 +3068,11 @@ function applyChangeFromBindings(bindings) {
|
|
|
3051
3068
|
} while (true); // eslint-disable-line no-constant-condition
|
|
3052
3069
|
});
|
|
3053
3070
|
}
|
|
3071
|
+
// Phase 2: 遅延されたselect.value/selectedIndex を適用
|
|
3072
|
+
// applyChangeToProperty は context を参照しないため null を渡す
|
|
3073
|
+
for (const { binding, value } of deferredSelectBindings) {
|
|
3074
|
+
applyChangeToProperty(binding, null, value);
|
|
3075
|
+
}
|
|
3054
3076
|
for (const [absAddress, newListValue] of newListValueByAbsAddress.entries()) {
|
|
3055
3077
|
setLastListValueByAbsoluteStateAddress(absAddress, newListValue);
|
|
3056
3078
|
}
|