sprae 11.5.2 → 11.5.4
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/core.js +14 -8
- package/directive/class.js +1 -3
- package/directive/ref.js +7 -7
- package/directive/value.js +6 -5
- package/directive/with.js +9 -1
- package/dist/sprae.auto.js +42 -18
- package/dist/sprae.auto.js.map +3 -3
- package/dist/sprae.auto.min.js +2 -2
- package/dist/sprae.auto.min.js.map +3 -3
- package/dist/sprae.js +26 -16
- package/dist/sprae.js.map +3 -3
- package/dist/sprae.min.js +3 -3
- package/dist/sprae.min.js.map +3 -3
- package/dist/sprae.umd.js +43 -18
- package/dist/sprae.umd.js.map +3 -3
- package/dist/sprae.umd.min.js +2 -2
- package/dist/sprae.umd.min.js.map +3 -3
- package/package.json +1 -1
- package/readme.md +2 -2
- package/store.js +10 -7
package/store.js
CHANGED
|
@@ -16,17 +16,19 @@ export const _signals = Symbol('signals'),
|
|
|
16
16
|
// non-objects: for array redirect to list
|
|
17
17
|
if (values.constructor !== Object) return Array.isArray(values) ? list(values) : values
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
// we must inherit signals to allow dynamic extend of parent state
|
|
20
|
+
let signals = Object.create(parent?.[_signals] || {}),
|
|
21
|
+
_len = signal(Object.keys(values).length),
|
|
22
|
+
stash
|
|
22
23
|
|
|
23
24
|
// proxy conducts prop access to signals
|
|
24
|
-
|
|
25
|
-
get: (_, k) => k === _change ? _len : k === _signals ? signals : k === _stash ? stash : signals[k]?.valueOf(),
|
|
26
|
-
set: (_, k, v, s) =>
|
|
25
|
+
let state = new Proxy(signals, {
|
|
26
|
+
get: (_, k) => k === _change ? _len : k === _signals ? signals : k === _stash ? stash : k in signals ? signals[k]?.valueOf() : globalThis[k],
|
|
27
|
+
set: (_, k, v, s) => k === _stash ? (stash = v, 1) : (s = k in signals, set(signals, k, v), s || ++_len.value), // bump length for new signal
|
|
27
28
|
deleteProperty: (_, k) => (signals[k] && (signals[k][Symbol.dispose]?.(), delete signals[k], _len.value--), 1),
|
|
28
29
|
// subscribe to length when object is spread
|
|
29
30
|
ownKeys: () => (_len.value, Reflect.ownKeys(signals)),
|
|
31
|
+
has: _ => true // sandbox prevents writing to global
|
|
30
32
|
}),
|
|
31
33
|
|
|
32
34
|
// init signals for values
|
|
@@ -134,6 +136,7 @@ export const setter = (expr, set = parse(`${expr}=${_stash}`)) => (
|
|
|
134
136
|
)
|
|
135
137
|
|
|
136
138
|
// make sure state contains first element of path, eg. `a` from `a.b[c]`
|
|
137
|
-
|
|
139
|
+
// NOTE: we don't need since we force proxy sandbox
|
|
140
|
+
// export const ensure = (state, expr, name = expr.match(/^\w+(?=\s*(?:\.|\[|$))/)) => name && (state[_signals][name[0]] ??= null)
|
|
138
141
|
|
|
139
142
|
export default store
|