sprae 12.4.6 → 12.4.8

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/sprae.js CHANGED
@@ -175,10 +175,18 @@ for (let k in keys) modifier[k] = (fn, a, b) => (e) => keys[k](e) && (!a || keyM
175
175
 
176
176
  // Checks for first-level semicolons (statement vs expression)
177
177
  const hasSemi = s => {
178
- for (let d=0,i=0;i<s.length;i++) {
179
- if (s[i]=='{') d++
180
- else if (s[i]=='}') d--
181
- else if (s[i]==';' && !d) return true
178
+ let d = 0, q = '', esc = 0
179
+ for (let ch of s) {
180
+ if (q) {
181
+ if (esc) esc = 0
182
+ else if (ch === '\\') esc = 1
183
+ else if (ch === q) q = ''
184
+ continue
185
+ }
186
+ if (ch === ';' && !d) return true
187
+ if (ch === '{') d++
188
+ else if (ch === '}') d--
189
+ else if (ch === '"' || ch === "'" || ch === '`') q = ch
182
190
  }
183
191
  return false
184
192
  }
package/store.js CHANGED
@@ -62,6 +62,8 @@ export const store = (values, parent) => {
62
62
  }), {
63
63
  get: (_, k) => {
64
64
  if (k in signals) {
65
+ // raw methods (no prototype) - bind to state for consistent `this`
66
+ if (signals.hasOwnProperty(k) && typeof signals[k] === 'function' && !signals[k].prototype) return signals[k].bind(state)
65
67
  return (signals[k] ? signals[k].valueOf() : signals[k])
66
68
  }
67
69
  if (parent) {
@@ -205,12 +207,12 @@ const list = (values, parent = globalThis) => {
205
207
 
206
208
  /**
207
209
  * Creates a signal for a property value.
208
- * Skips wrapping for untracked props (underscore prefix) and existing signals.
210
+ * Skips wrapping for untracked props (underscore prefix), existing signals, and functions.
209
211
  * @param {Object} signals - Signals storage object
210
212
  * @param {string} k - Property key
211
213
  * @param {any} v - Property value
212
214
  */
213
- const create = (signals, k, v) => (signals[k] = (k[0] == '_' || v?.peek) ? v : signal(store(v)))
215
+ const create = (signals, k, v) => (signals[k] = (k[0] == '_' || v?.peek || typeof v === 'function') ? v : signal(store(v)))
214
216
 
215
217
  /**
216
218
  * Updates a signal value, handling arrays specially for efficient patching.
@@ -220,7 +222,7 @@ const create = (signals, k, v) => (signals[k] = (k[0] == '_' || v?.peek) ? v : s
220
222
  */
221
223
  const set = (signals, k, v, _s, _v) => {
222
224
  // skip unchanged (although can be handled by last condition - we skip a few checks this way)
223
- return k[0] === '_' ? (signals[k] = v) :
225
+ return k[0] === '_' || typeof signals[k] === 'function' ? (signals[k] = v) :
224
226
  (v !== (_v = (_s = signals[k]).peek?.() ?? _s)) && (
225
227
  // stashed _set for value with getter/setter
226
228
  _s[_set] ? _s[_set](v) :
@@ -1 +1 @@
1
- {"version":3,"file":"sprae.d.ts","sourceRoot":"","sources":["../sprae.js"],"names":[],"mappings":";kBAQ+H,WAAW;kBAHxH,YAAY;uBAC6B,WAAW;uBAAX,WAAW;yBAAX,WAAW;sBAAX,WAAW;0BAAX,WAAW;sBAEyD,WAAW;oBAAX,WAAW;yBAAX,WAAW;yBAAX,WAAW;AAuN1H,4BAFL,OAAO,OAEsC"}
1
+ {"version":3,"file":"sprae.d.ts","sourceRoot":"","sources":["../sprae.js"],"names":[],"mappings":";kBAQ+H,WAAW;kBAHxH,YAAY;uBAC6B,WAAW;uBAAX,WAAW;yBAAX,WAAW;sBAAX,WAAW;0BAAX,WAAW;sBAEyD,WAAW;oBAAX,WAAW;yBAAX,WAAW;yBAAX,WAAW;AA+N1H,4BAFL,OAAO,OAEsC"}
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../store.js"],"names":[],"mappings":"AAOA,oDAAoD;AACpD,qCAAyC;AAEzC,2EAA2E;AAC3E,oCAAuC;AAEvC,mDAAmD;AACnD,iCAAiC;AA0B1B,sBAVe,CAAC,0BACZ,CAAC,iBAEC,aAAa,CAAC,CAAC,CAAC,CA+F5B;;;;;0BA3GY,CAAC,IACD,CAAC,GAAG;IAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,OAAO,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;CAAE"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../store.js"],"names":[],"mappings":"AAOA,oDAAoD;AACpD,qCAAyC;AAEzC,2EAA2E;AAC3E,oCAAuC;AAEvC,mDAAmD;AACnD,iCAAiC;AA0B1B,sBAVe,CAAC,0BACZ,CAAC,iBAEC,aAAa,CAAC,CAAC,CAAC,CAiG5B;;;;;0BA7GY,CAAC,IACD,CAAC,GAAG;IAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,OAAO,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;CAAE"}