voodoojs 0.12.4 → 0.13.0

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.
Files changed (45) hide show
  1. package/README.md +1 -1
  2. package/dist/{chunk-XGZ7SXD3.js → chunk-2LGAXVD7.js} +4 -4
  3. package/dist/{chunk-XIMSOXWF.js → chunk-4IJE5BWY.js} +5 -5
  4. package/dist/{chunk-FAWOJTRM.js → chunk-FMDHZ5GI.js} +139 -9
  5. package/dist/{chunk-OHISQWSW.js → chunk-GE4JWATC.js} +5 -5
  6. package/dist/{chunk-2GSZT3CX.js → chunk-H2NGDLMD.js} +363 -76
  7. package/dist/{chunk-AR6WDY7K.js → chunk-IBIZ6OUI.js} +4 -4
  8. package/dist/{chunk-7XRFOONN.js → chunk-IJQ2PFXU.js} +3 -3
  9. package/dist/{chunk-ELIX2DRQ.js → chunk-JBUNTP7F.js} +19 -7
  10. package/dist/{chunk-NKQGUWVF.js → chunk-MV73OSCS.js} +4 -4
  11. package/dist/{chunk-3MPIJH5X.js → chunk-OIH4BR2H.js} +6 -6
  12. package/dist/{chunk-FNTYILLW.js → chunk-TEVCUTTC.js} +3 -3
  13. package/dist/essential.cjs +508 -74
  14. package/dist/essential.d.cts +1 -1
  15. package/dist/essential.d.ts +1 -1
  16. package/dist/essential.js +10 -10
  17. package/dist/gpu.cjs +7 -1
  18. package/dist/gpu.js +10 -10
  19. package/dist/http.cjs +1 -1
  20. package/dist/http.js +5 -5
  21. package/dist/index.cjs +556 -122
  22. package/dist/index.d.cts +2 -2
  23. package/dist/index.d.ts +2 -2
  24. package/dist/index.js +20 -20
  25. package/dist/reactivity.cjs +138 -5
  26. package/dist/reactivity.d.cts +32 -1
  27. package/dist/reactivity.d.ts +32 -1
  28. package/dist/reactivity.js +2 -2
  29. package/dist/socket.cjs +115 -5
  30. package/dist/socket.d.cts +1 -1
  31. package/dist/socket.d.ts +1 -1
  32. package/dist/socket.js +9 -9
  33. package/dist/style-E22XVZ33.js +5 -0
  34. package/dist/utils.cjs +1 -1
  35. package/dist/utils.js +2 -2
  36. package/dist/voodoo.core.js +572 -72
  37. package/dist/voodoo.core.min.js +17 -17
  38. package/dist/voodoo.full.js +621 -121
  39. package/dist/voodoo.full.min.js +62 -62
  40. package/dist/voodoo.js +575 -75
  41. package/dist/voodoo.min.js +26 -26
  42. package/package.json +1 -1
  43. package/dist/style-DA6RFLKO.js +0 -5
  44. package/dist/{query-XooOh4vB.d.cts → query-D_BGQw8m.d.cts} +28 -28
  45. package/dist/{query-DzHfm8Kg.d.ts → query-Dl6Urlwd.d.ts} +28 -28
package/README.md CHANGED
@@ -22,7 +22,7 @@ npm install voodoojs
22
22
  Or drop it into a page, with nothing else:
23
23
 
24
24
  ```html
25
- <script src="https://cdn.jsdelivr.net/npm/voodoojs@0.12.4/dist/voodoo.full.min.js" defer></script>
25
+ <script src="https://cdn.jsdelivr.net/npm/voodoojs@0.13.0/dist/voodoo.full.min.js" defer></script>
26
26
 
27
27
  <div v-data="{ count: 0 }">
28
28
  <button @click="count++">Clicked { count } times</button>
@@ -1,7 +1,7 @@
1
- import { __export } from './chunk-7XRFOONN.js';
1
+ import { __export } from './chunk-IJQ2PFXU.js';
2
2
 
3
3
  /**
4
- * Voodoo.js v0.12.4
4
+ * Voodoo.js v0.13.0
5
5
  * JavaScript feels like magic.
6
6
  * (c) 2026 Voodoo.js contributors. MIT License.
7
7
  */
@@ -397,5 +397,5 @@ var device = {
397
397
  };
398
398
 
399
399
  export { capitalize, chunk, clone, debounce, device, escapeHtml, formatCurrency, formatDate, formatFileSize, formatNumber, formatPercent, get, groupBy, isBrowser, matchesMedia, memoize, merge, once, parseDuration, random, relativeTime, sample, set, setFormatDefaults, sleep, slugify, sortBy, stripTags, throttle, titleCase, truncate, uid, unique, utils_exports, uuid };
400
- //# sourceMappingURL=chunk-XGZ7SXD3.js.map
401
- //# sourceMappingURL=chunk-XGZ7SXD3.js.map
400
+ //# sourceMappingURL=chunk-2LGAXVD7.js.map
401
+ //# sourceMappingURL=chunk-2LGAXVD7.js.map
@@ -1,8 +1,8 @@
1
- import { reactive } from './chunk-FAWOJTRM.js';
2
- import { warnOnce } from './chunk-AR6WDY7K.js';
1
+ import { reactive } from './chunk-FMDHZ5GI.js';
2
+ import { warnOnce } from './chunk-IBIZ6OUI.js';
3
3
 
4
4
  /**
5
- * Voodoo.js v0.12.4
5
+ * Voodoo.js v0.13.0
6
6
  * JavaScript feels like magic.
7
7
  * (c) 2026 Voodoo.js contributors. MIT License.
8
8
  */
@@ -942,5 +942,5 @@ Object.defineProperty(factory, "open", {
942
942
  var socket = factory;
943
943
 
944
944
  export { ENGINE, SIO, createSocket, decodeEngine, decodeSocketIo, devtoolsBus, encodeSocketIo, engineURL, resolveSocketURL, socket, socketSupported };
945
- //# sourceMappingURL=chunk-XIMSOXWF.js.map
946
- //# sourceMappingURL=chunk-XIMSOXWF.js.map
945
+ //# sourceMappingURL=chunk-4IJE5BWY.js.map
946
+ //# sourceMappingURL=chunk-4IJE5BWY.js.map
@@ -1,7 +1,7 @@
1
- import { __publicField } from './chunk-7XRFOONN.js';
1
+ import { __publicField } from './chunk-IJQ2PFXU.js';
2
2
 
3
3
  /**
4
- * Voodoo.js v0.12.4
4
+ * Voodoo.js v0.13.0
5
5
  * JavaScript feels like magic.
6
6
  * (c) 2026 Voodoo.js contributors. MIT License.
7
7
  */
@@ -277,7 +277,9 @@ function trigger(target, type, key, _newValue) {
277
277
  if (!isArr) add(depsMap.get(ITERATE_KEY));
278
278
  else if (isIntegerKey(key)) add(depsMap.get("length"));
279
279
  } else if (type === "delete" /* DELETE */) {
280
- if (!isArr) add(depsMap.get(ITERATE_KEY));
280
+ add(depsMap.get(ITERATE_KEY));
281
+ } else if (isArr && isIntegerKey(key)) {
282
+ add(depsMap.get(ITERATE_KEY));
281
283
  } else if (isArr && key === "length") {
282
284
  const newLen = Number(_newValue);
283
285
  depsMap.forEach((dep, k) => {
@@ -290,6 +292,59 @@ function trigger(target, type, key, _newValue) {
290
292
  else queueJob(e);
291
293
  }
292
294
  }
295
+ function triggerArrayRange(target, from) {
296
+ const depsMap = targetMap.get(target);
297
+ if (!depsMap) return;
298
+ const effects = /* @__PURE__ */ new Set();
299
+ const add = (dep) => {
300
+ if (!dep) return;
301
+ for (const e of dep) if (e !== activeEffect) effects.add(e);
302
+ };
303
+ add(depsMap.get("length"));
304
+ add(depsMap.get(ITERATE_KEY));
305
+ if (from >= 0) {
306
+ depsMap.forEach((dep, k) => {
307
+ if (typeof k === "string" && isIntegerKey(k) && Number(k) >= from) add(dep);
308
+ });
309
+ }
310
+ for (const e of effects) {
311
+ if (e.scheduler) e.scheduler();
312
+ else queueJob(e);
313
+ }
314
+ }
315
+ var ArrayOp = /* @__PURE__ */ ((ArrayOp2) => {
316
+ ArrayOp2[ArrayOp2["SPLICE"] = 1] = "SPLICE";
317
+ ArrayOp2[ArrayOp2["SET"] = 2] = "SET";
318
+ ArrayOp2[ArrayOp2["RESET"] = 3] = "RESET";
319
+ return ArrayOp2;
320
+ })(ArrayOp || {});
321
+ var LOG_LIMIT = 32;
322
+ var mutationLogs = /* @__PURE__ */ new WeakMap();
323
+ function record(target, type, index, removed, added) {
324
+ let log = mutationLogs.get(target);
325
+ if (!log) mutationLogs.set(target, log = { version: 0, ops: [] });
326
+ log.version++;
327
+ if (type === 3 /* RESET */) {
328
+ log.ops.length = 0;
329
+ return;
330
+ }
331
+ log.ops.push({ type, index, removed, added });
332
+ if (log.ops.length > LOG_LIMIT) log.ops.shift();
333
+ }
334
+ var NO_MUTATIONS = [];
335
+ function arrayVersion(target) {
336
+ const log = mutationLogs.get(target);
337
+ return log ? log.version : 0;
338
+ }
339
+ function mutationsSince(target, since) {
340
+ const log = mutationLogs.get(target);
341
+ if (!log) return since === 0 ? NO_MUTATIONS : null;
342
+ if (since > log.version) return null;
343
+ const missing = log.version - since;
344
+ if (missing === 0) return NO_MUTATIONS;
345
+ if (missing > log.ops.length) return null;
346
+ return log.ops.slice(log.ops.length - missing);
347
+ }
293
348
  function isIntegerKey(key) {
294
349
  return typeof key === "string" && key !== "NaN" && key[0] !== "-" && String(parseInt(key, 10)) === key;
295
350
  }
@@ -310,14 +365,61 @@ var arrayInstrumentations = /* @__PURE__ */ (() => {
310
365
  return res;
311
366
  };
312
367
  }
313
- for (const key of ["push", "pop", "shift", "unshift", "splice"]) {
368
+ for (const key of ["push", "pop", "shift", "unshift", "splice", "reverse", "sort"]) {
314
369
  inst[key] = function(...args) {
370
+ const raw = toRaw(this);
371
+ const before = raw.length;
372
+ for (let i = 0; i < args.length; i++) args[i] = toRaw(args[i]);
315
373
  pauseTracking();
374
+ let result;
316
375
  try {
317
- return toRaw(this)[key].apply(this, args);
376
+ result = raw[key].apply(raw, args);
318
377
  } finally {
319
378
  resetTracking();
320
379
  }
380
+ const after = raw.length;
381
+ let from = -1;
382
+ if (key === "push") {
383
+ if (args.length) {
384
+ record(raw, 1 /* SPLICE */, before, 0, args.length);
385
+ from = before;
386
+ }
387
+ } else if (key === "unshift") {
388
+ if (args.length) {
389
+ record(raw, 1 /* SPLICE */, 0, 0, args.length);
390
+ from = 0;
391
+ }
392
+ } else if (key === "pop") {
393
+ if (before > 0) {
394
+ record(raw, 1 /* SPLICE */, after, 1, 0);
395
+ from = after;
396
+ }
397
+ } else if (key === "shift") {
398
+ if (before > 0) {
399
+ record(raw, 1 /* SPLICE */, 0, 1, 0);
400
+ from = 0;
401
+ }
402
+ } else if (key === "splice") {
403
+ const removed = result.length;
404
+ const added = args.length > 2 ? args.length - 2 : 0;
405
+ if (removed || added) {
406
+ record(raw, 1 /* SPLICE */, spliceStart(args[0], before), removed, added);
407
+ from = spliceStart(args[0], before);
408
+ }
409
+ } else {
410
+ if (before > 1) {
411
+ record(raw, 3 /* RESET */, 0, before, after);
412
+ from = 0;
413
+ }
414
+ }
415
+ if (from >= 0) triggerArrayRange(raw, from);
416
+ if (key === "pop" || key === "shift") return isObject(result) ? reactive(result) : result;
417
+ if (key === "splice") {
418
+ const out = result;
419
+ for (let i = 0; i < out.length; i++) if (isObject(out[i])) out[i] = reactive(out[i]);
420
+ return out;
421
+ }
422
+ return key === "reverse" || key === "sort" ? this : result;
321
423
  };
322
424
  }
323
425
  return inst;
@@ -325,6 +427,11 @@ var arrayInstrumentations = /* @__PURE__ */ (() => {
325
427
  function isObject(val) {
326
428
  return val !== null && typeof val === "object";
327
429
  }
430
+ function spliceStart(raw, length) {
431
+ const n = Math.trunc(Number(raw)) || 0;
432
+ if (n < 0) return Math.max(length + n, 0);
433
+ return Math.min(n, length);
434
+ }
328
435
  var NON_REACTIVE = /* @__PURE__ */ new Set([
329
436
  "Date",
330
437
  "RegExp",
@@ -348,6 +455,23 @@ function canObserve(value) {
348
455
  if (NON_REACTIVE.has(tag)) return false;
349
456
  return tag === "Object" || tag === "Array" || tag === "Map" || tag === "Set";
350
457
  }
458
+ function recordDirectWrite(target, key, lengthBefore, hadKey, oldValue, value) {
459
+ if (key === "length") {
460
+ const next = target.length;
461
+ if (next < lengthBefore) record(target, 1 /* SPLICE */, next, lengthBefore - next, 0);
462
+ else if (next > lengthBefore) record(target, 3 /* RESET */, 0, 0, 0);
463
+ return;
464
+ }
465
+ if (!isIntegerKey(key)) return;
466
+ const index = Number(key);
467
+ if (hadKey) {
468
+ if (hasChanged(value, oldValue)) record(target, 2 /* SET */, index, 1, 1);
469
+ } else if (index === lengthBefore) {
470
+ record(target, 1 /* SPLICE */, index, 0, 1);
471
+ } else {
472
+ record(target, 3 /* RESET */, 0, 0, 0);
473
+ }
474
+ }
351
475
  function markRaw(value) {
352
476
  Object.defineProperty(value, SKIP, { value: true, enumerable: false, configurable: true });
353
477
  return value;
@@ -396,8 +520,11 @@ var baseHandlers = {
396
520
  return true;
397
521
  }
398
522
  const hadKey = Array.isArray(target) && isIntegerKey(key) ? Number(key) < target.length : Object.prototype.hasOwnProperty.call(target, key);
523
+ const isArr = Array.isArray(target);
524
+ const arrayLength = isArr ? target.length : 0;
399
525
  const result = Reflect.set(target, key, value, receiver);
400
526
  if (target === toRaw(receiver)) {
527
+ if (isArr) recordDirectWrite(target, key, arrayLength, hadKey, oldValue, value);
401
528
  if (!hadKey) trigger(target, "add" /* ADD */, key, value);
402
529
  else if (hasChanged(value, oldValue)) trigger(target, "set" /* SET */, key, value);
403
530
  }
@@ -406,7 +533,10 @@ var baseHandlers = {
406
533
  deleteProperty(target, key) {
407
534
  const hadKey = Object.prototype.hasOwnProperty.call(target, key);
408
535
  const result = Reflect.deleteProperty(target, key);
409
- if (result && hadKey) trigger(target, "delete" /* DELETE */, key);
536
+ if (result && hadKey) {
537
+ if (Array.isArray(target)) record(target, 3 /* RESET */, 0, 0, 0);
538
+ trigger(target, "delete" /* DELETE */, key);
539
+ }
410
540
  return result;
411
541
  },
412
542
  has(target, key) {
@@ -636,6 +766,6 @@ function traverse(value, seen = /* @__PURE__ */ new Set()) {
636
766
  return value;
637
767
  }
638
768
 
639
- export { EffectScope, ITERATE_KEY, ReactiveEffect, TriggerType, computed, effect, effectScope, enableTracking, flushSync, getActiveEffect, getActiveScope, handleError, hasChanged, isReactive, isRef, markRaw, nextTick, pauseTracking, queueJob, queuePostFlush, reactive, ref, resetTracking, setErrorHandler, shallowRef, stop, toRaw, track, trigger, unref, warn, watch, watchEffect };
640
- //# sourceMappingURL=chunk-FAWOJTRM.js.map
641
- //# sourceMappingURL=chunk-FAWOJTRM.js.map
769
+ export { ArrayOp, EffectScope, ITERATE_KEY, ReactiveEffect, TriggerType, arrayVersion, computed, effect, effectScope, enableTracking, flushSync, getActiveEffect, getActiveScope, handleError, hasChanged, isReactive, isRef, markRaw, mutationsSince, nextTick, pauseTracking, queueJob, queuePostFlush, reactive, ref, resetTracking, setErrorHandler, shallowRef, stop, toRaw, track, trigger, unref, warn, watch, watchEffect };
770
+ //# sourceMappingURL=chunk-FMDHZ5GI.js.map
771
+ //# sourceMappingURL=chunk-FMDHZ5GI.js.map
@@ -1,8 +1,8 @@
1
- import { handleError } from './chunk-FAWOJTRM.js';
2
- import { warn } from './chunk-AR6WDY7K.js';
1
+ import { handleError } from './chunk-FMDHZ5GI.js';
2
+ import { warn } from './chunk-IBIZ6OUI.js';
3
3
 
4
4
  /**
5
- * Voodoo.js v0.12.4
5
+ * Voodoo.js v0.13.0
6
6
  * JavaScript feels like magic.
7
7
  * (c) 2026 Voodoo.js contributors. MIT License.
8
8
  */
@@ -1192,5 +1192,5 @@ var gpu = {
1192
1192
  };
1193
1193
 
1194
1194
  export { clock, compute, describeWgslType, destroy, effect, findEntry, flattenValue, frame, frameLoop, gpu, inferStruct, init, packStruct, reflectBindings, reflectEntries, reflectStructs, reflectWgsl, resetShared, shared, splitTopLevel, stripWgslComments, supported, surface, target, uniforms, writeField, writeStruct };
1195
- //# sourceMappingURL=chunk-OHISQWSW.js.map
1196
- //# sourceMappingURL=chunk-OHISQWSW.js.map
1195
+ //# sourceMappingURL=chunk-GE4JWATC.js.map
1196
+ //# sourceMappingURL=chunk-GE4JWATC.js.map