@rlabs-inc/signals 1.2.0 → 1.3.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.
@@ -1 +1 @@
1
- {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/collections/map.ts"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,WAAW,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;;gBAUlC,OAAO,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI;IA4BtD,IAAI,IAAI,IAAI,MAAM,CAGjB;IAMD,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAwBpB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IA0B1B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAsC3B,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAwBvB,KAAK,IAAI,IAAI;IAmBb,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;IAKtB,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC;IAKxB,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAK9B,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;IAKxF,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAGzC"}
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/collections/map.ts"],"names":[],"mappings":"AA0CA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,WAAW,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;;gBAUlC,OAAO,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI;IAmCtD,IAAI,IAAI,IAAI,MAAM,CAGjB;IAMD,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAwBpB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IA0B1B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAsC3B,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAwBvB,KAAK,IAAI,IAAI;IAmBb,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;IAKtB,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC;IAKxB,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAK9B,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;IAKxF,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAGzC"}
@@ -1 +1 @@
1
- {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../src/collections/set.ts"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,WAAW,CAAC,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,CAAC;;gBAU5B,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI;IA4BvC,IAAI,IAAI,IAAI,MAAM,CAGjB;IAMD,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;IA0BrB,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAmBlB,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;IAuBxB,KAAK,IAAI,IAAI;IAmBb,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;IAKtB,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC;IAKxB,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAK9B,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;IAKxF,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC;CAGpC"}
1
+ {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../src/collections/set.ts"],"names":[],"mappings":"AA0CA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,WAAW,CAAC,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,CAAC;;gBAU5B,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI;IAmCvC,IAAI,IAAI,IAAI,MAAM,CAGjB;IAMD,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;IA0BrB,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAmBlB,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO;IAuBxB,KAAK,IAAI,IAAI;IAmBb,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;IAKtB,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC;IAKxB,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAK9B,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;IAKxF,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC;CAGpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/deep/proxy.ts"],"names":[],"mappings":"AAoDA;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CA2PnD;AAMD;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAKpC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAElD"}
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/deep/proxy.ts"],"names":[],"mappings":"AA8EA;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CA8PnD;AAMD;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAKpC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAElD"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { signal, source, mutableSource, state, stateRaw } from './primitives/signal.js';
2
2
  export { derived, createDerived, disconnectDerived } from './primitives/derived.js';
3
3
  export { effect, createEffect, updateEffect, destroyEffect } from './primitives/effect.js';
4
- export { bind, bindReadonly, isBinding, unwrap } from './primitives/bind.js';
4
+ export { bind, bindReadonly, isBinding, unwrap, signals } from './primitives/bind.js';
5
5
  export { proxy, toRaw, isReactive } from './deep/proxy.js';
6
6
  export { batch, untrack, peek } from './reactivity/batching.js';
7
7
  export { flushSync, tick } from './reactivity/scheduling.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACvF,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AACnF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC1F,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAM5E,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAM1D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AAM5D,OAAO,EACL,MAAM,EACN,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,GACb,MAAM,0BAA0B,CAAA;AAMjC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAMpD,OAAO,EACL,GAAG,EACH,GAAG,EACH,OAAO,EACP,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,GAChB,MAAM,0BAA0B,CAAA;AAMjC,OAAO,EAEL,OAAO,EACP,MAAM,EACN,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,EACX,YAAY,EAGZ,KAAK,EACL,KAAK,EACL,WAAW,EACX,oBAAoB,EACpB,SAAS,EACT,KAAK,EACL,UAAU,EACV,gBAAgB,EAGhB,OAAO,EACP,YAAY,EAGZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,eAAe,GAChB,MAAM,qBAAqB,CAAA;AAM5B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EAGV,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EAGnB,cAAc,EACd,eAAe,EACf,aAAa,GACd,MAAM,mBAAmB,CAAA;AAM1B,YAAY,EAEV,MAAM,EACN,MAAM,EACN,QAAQ,EACR,OAAO,EACP,MAAM,EACN,KAAK,EAGL,cAAc,EACd,cAAc,EACd,aAAa,EACb,SAAS,EACT,SAAS,EACT,QAAQ,EAGR,MAAM,EACN,aAAa,GACd,MAAM,iBAAiB,CAAA;AAExB,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACvF,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AACnF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC1F,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAMrF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAM1D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AAM5D,OAAO,EACL,MAAM,EACN,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,GACb,MAAM,0BAA0B,CAAA;AAMjC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAMpD,OAAO,EACL,GAAG,EACH,GAAG,EACH,OAAO,EACP,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,GAChB,MAAM,0BAA0B,CAAA;AAMjC,OAAO,EAEL,OAAO,EACP,MAAM,EACN,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,EACX,YAAY,EAGZ,KAAK,EACL,KAAK,EACL,WAAW,EACX,oBAAoB,EACpB,SAAS,EACT,KAAK,EACL,UAAU,EACV,gBAAgB,EAGhB,OAAO,EACP,YAAY,EAGZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,eAAe,GAChB,MAAM,qBAAqB,CAAA;AAM5B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EAGV,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EAGnB,cAAc,EACd,eAAe,EACf,aAAa,GACd,MAAM,mBAAmB,CAAA;AAM1B,YAAY,EAEV,MAAM,EACN,MAAM,EACN,QAAQ,EACR,OAAO,EACP,MAAM,EACN,KAAK,EAGL,cAAc,EACd,cAAc,EACd,aAAa,EACb,SAAS,EACT,SAAS,EACT,QAAQ,EAGR,MAAM,EACN,aAAa,GACd,MAAM,iBAAiB,CAAA;AAExB,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
package/dist/index.js CHANGED
@@ -40,6 +40,7 @@ __export(exports_src, {
40
40
  stateRaw: () => stateRaw,
41
41
  state: () => state,
42
42
  source: () => source,
43
+ signals: () => signals,
43
44
  signal: () => signal,
44
45
  shallowEquals: () => shallowEquals,
45
46
  setUntracking: () => setUntracking,
@@ -564,6 +565,7 @@ function updateReaction(reaction) {
564
565
  }
565
566
 
566
567
  // src/primitives/signal.ts
568
+ var SOURCE_SYMBOL = Symbol("signal.source");
567
569
  function source(initialValue, options) {
568
570
  return {
569
571
  f: 0,
@@ -577,9 +579,13 @@ function source(initialValue, options) {
577
579
  function mutableSource(initialValue) {
578
580
  return source(initialValue, { equals: safeEquals });
579
581
  }
582
+ var signalCleanup = new FinalizationRegistry((src) => {
583
+ src.reactions = null;
584
+ });
580
585
  function signal(initialValue, options) {
581
586
  const src = source(initialValue, options);
582
- return {
587
+ const sig = {
588
+ [SOURCE_SYMBOL]: src,
583
589
  get value() {
584
590
  return get(src);
585
591
  },
@@ -587,6 +593,11 @@ function signal(initialValue, options) {
587
593
  set(src, newValue);
588
594
  }
589
595
  };
596
+ signalCleanup.register(sig, src);
597
+ return sig;
598
+ }
599
+ function getSource(sig) {
600
+ return sig[SOURCE_SYMBOL];
590
601
  }
591
602
  var proxyFn = null;
592
603
  function setProxyFn(fn) {
@@ -603,6 +614,13 @@ function stateRaw(initialValue) {
603
614
  }
604
615
 
605
616
  // src/deep/proxy.ts
617
+ var proxyCleanup = new FinalizationRegistry((data) => {
618
+ data.version.reactions = null;
619
+ for (const src of data.sources.values()) {
620
+ src.reactions = null;
621
+ }
622
+ data.sources.clear();
623
+ });
606
624
  function shouldProxy(value) {
607
625
  if (value === null || typeof value !== "object") {
608
626
  return false;
@@ -640,7 +658,7 @@ function proxy(value) {
640
658
  setActiveReaction(prevReaction);
641
659
  }
642
660
  };
643
- const getSource = (prop, initialValue) => {
661
+ const getSource2 = (prop, initialValue) => {
644
662
  let s = sources.get(prop);
645
663
  if (s === undefined) {
646
664
  s = withParent(() => {
@@ -663,7 +681,7 @@ function proxy(value) {
663
681
  return currentValue.bind(proxyObj);
664
682
  }
665
683
  if (exists || isWritable(target, prop)) {
666
- const s = getSource(prop, currentValue);
684
+ const s = getSource2(prop, currentValue);
667
685
  const val = get(s);
668
686
  if (val === UNINITIALIZED) {
669
687
  return;
@@ -763,6 +781,7 @@ function proxy(value) {
763
781
  return Reflect.getOwnPropertyDescriptor(target, prop);
764
782
  }
765
783
  });
784
+ proxyCleanup.register(proxyObj, { sources, version });
766
785
  return proxyObj;
767
786
  }
768
787
  function toRaw(value) {
@@ -775,6 +794,18 @@ function isReactive(value) {
775
794
  return isProxy(value);
776
795
  }
777
796
  // src/primitives/derived.ts
797
+ var derivedCleanup = new FinalizationRegistry((d) => {
798
+ removeReactions(d, 0);
799
+ d.deps = null;
800
+ d.reactions = null;
801
+ const effects = d.effects;
802
+ if (effects !== null) {
803
+ d.effects = null;
804
+ for (let i = 0;i < effects.length; i++) {
805
+ destroyEffectImpl(effects[i]);
806
+ }
807
+ }
808
+ });
778
809
  function createDerived(fn, options) {
779
810
  let flags = DERIVED | DIRTY;
780
811
  const parentDerived = activeReaction !== null && (activeReaction.f & DERIVED) !== 0 ? activeReaction : null;
@@ -825,11 +856,13 @@ function destroyDerivedEffects(derived) {
825
856
  }
826
857
  function derived(fn, options) {
827
858
  const d = createDerived(fn, options);
828
- return {
859
+ const wrapper = {
829
860
  get value() {
830
861
  return get(d);
831
862
  }
832
863
  };
864
+ derivedCleanup.register(wrapper, d);
865
+ return wrapper;
833
866
  }
834
867
  derived.by = derived;
835
868
  function disconnectDerived(derived2) {
@@ -962,20 +995,49 @@ effect.tracking = function effectTracking() {
962
995
  return activeEffect !== null;
963
996
  };
964
997
  // src/primitives/bind.ts
998
+ var bindingCleanup = new FinalizationRegistry((internalSource) => {
999
+ internalSource.reactions = null;
1000
+ });
965
1001
  var BINDING_SYMBOL = Symbol("binding");
966
1002
  function isBinding(value) {
967
1003
  return value !== null && typeof value === "object" && BINDING_SYMBOL in value;
968
1004
  }
1005
+ function isSignal(value) {
1006
+ return value !== null && typeof value === "object" && "value" in value;
1007
+ }
1008
+ function isGetter(value) {
1009
+ return typeof value === "function";
1010
+ }
969
1011
  function bind(source2) {
1012
+ if (isGetter(source2)) {
1013
+ return {
1014
+ [BINDING_SYMBOL]: true,
1015
+ get value() {
1016
+ return source2();
1017
+ }
1018
+ };
1019
+ }
1020
+ let actualSource;
1021
+ let internalSource = null;
1022
+ if (isBinding(source2) || isSignal(source2)) {
1023
+ actualSource = source2;
1024
+ } else {
1025
+ const sig = signal(source2);
1026
+ actualSource = sig;
1027
+ internalSource = getSource(sig) ?? null;
1028
+ }
970
1029
  const binding = {
971
1030
  [BINDING_SYMBOL]: true,
972
1031
  get value() {
973
- return source2.value;
1032
+ return actualSource.value;
974
1033
  },
975
1034
  set value(v) {
976
- source2.value = v;
1035
+ actualSource.value = v;
977
1036
  }
978
1037
  };
1038
+ if (internalSource !== null) {
1039
+ bindingCleanup.register(binding, internalSource);
1040
+ }
979
1041
  return binding;
980
1042
  }
981
1043
  function bindReadonly(source2) {
@@ -992,6 +1054,15 @@ function unwrap(value) {
992
1054
  }
993
1055
  return value;
994
1056
  }
1057
+ function signals(initial) {
1058
+ const result = {};
1059
+ for (const key in initial) {
1060
+ if (Object.prototype.hasOwnProperty.call(initial, key)) {
1061
+ result[key] = signal(initial[key]);
1062
+ }
1063
+ }
1064
+ return result;
1065
+ }
995
1066
  // src/reactivity/batching.ts
996
1067
  function batch(fn) {
997
1068
  incrementBatchDepth();
@@ -1014,6 +1085,15 @@ function untrack(fn) {
1014
1085
  }
1015
1086
  var peek = untrack;
1016
1087
  // src/collections/map.ts
1088
+ var mapCleanup = new FinalizationRegistry((data) => {
1089
+ data.version.reactions = null;
1090
+ data.size.reactions = null;
1091
+ for (const sig of data.keySignals.values()) {
1092
+ sig.reactions = null;
1093
+ }
1094
+ data.keySignals.clear();
1095
+ });
1096
+
1017
1097
  class ReactiveMap extends Map {
1018
1098
  #keySignals = new Map;
1019
1099
  #version = source(0);
@@ -1021,6 +1101,11 @@ class ReactiveMap extends Map {
1021
1101
  constructor(entries) {
1022
1102
  super(entries);
1023
1103
  this.#size = source(super.size);
1104
+ mapCleanup.register(this, {
1105
+ keySignals: this.#keySignals,
1106
+ version: this.#version,
1107
+ size: this.#size
1108
+ });
1024
1109
  }
1025
1110
  #getKeySignal(key) {
1026
1111
  let sig = this.#keySignals.get(key);
@@ -1131,6 +1216,15 @@ class ReactiveMap extends Map {
1131
1216
  }
1132
1217
  }
1133
1218
  // src/collections/set.ts
1219
+ var setCleanup = new FinalizationRegistry((data) => {
1220
+ data.version.reactions = null;
1221
+ data.size.reactions = null;
1222
+ for (const sig of data.itemSignals.values()) {
1223
+ sig.reactions = null;
1224
+ }
1225
+ data.itemSignals.clear();
1226
+ });
1227
+
1134
1228
  class ReactiveSet extends Set {
1135
1229
  #itemSignals = new Map;
1136
1230
  #version = source(0);
@@ -1138,6 +1232,11 @@ class ReactiveSet extends Set {
1138
1232
  constructor(values) {
1139
1233
  super(values);
1140
1234
  this.#size = source(super.size);
1235
+ setCleanup.register(this, {
1236
+ itemSignals: this.#itemSignals,
1237
+ version: this.#version,
1238
+ size: this.#size
1239
+ });
1141
1240
  }
1142
1241
  #getItemSignal(item) {
1143
1242
  let sig = this.#itemSignals.get(item);
package/dist/index.mjs CHANGED
@@ -452,6 +452,7 @@ function updateReaction(reaction) {
452
452
  }
453
453
 
454
454
  // src/primitives/signal.ts
455
+ var SOURCE_SYMBOL = Symbol("signal.source");
455
456
  function source(initialValue, options) {
456
457
  return {
457
458
  f: 0,
@@ -465,9 +466,13 @@ function source(initialValue, options) {
465
466
  function mutableSource(initialValue) {
466
467
  return source(initialValue, { equals: safeEquals });
467
468
  }
469
+ var signalCleanup = new FinalizationRegistry((src) => {
470
+ src.reactions = null;
471
+ });
468
472
  function signal(initialValue, options) {
469
473
  const src = source(initialValue, options);
470
- return {
474
+ const sig = {
475
+ [SOURCE_SYMBOL]: src,
471
476
  get value() {
472
477
  return get(src);
473
478
  },
@@ -475,6 +480,11 @@ function signal(initialValue, options) {
475
480
  set(src, newValue);
476
481
  }
477
482
  };
483
+ signalCleanup.register(sig, src);
484
+ return sig;
485
+ }
486
+ function getSource(sig) {
487
+ return sig[SOURCE_SYMBOL];
478
488
  }
479
489
  var proxyFn = null;
480
490
  function setProxyFn(fn) {
@@ -491,6 +501,13 @@ function stateRaw(initialValue) {
491
501
  }
492
502
 
493
503
  // src/deep/proxy.ts
504
+ var proxyCleanup = new FinalizationRegistry((data) => {
505
+ data.version.reactions = null;
506
+ for (const src of data.sources.values()) {
507
+ src.reactions = null;
508
+ }
509
+ data.sources.clear();
510
+ });
494
511
  function shouldProxy(value) {
495
512
  if (value === null || typeof value !== "object") {
496
513
  return false;
@@ -528,7 +545,7 @@ function proxy(value) {
528
545
  setActiveReaction(prevReaction);
529
546
  }
530
547
  };
531
- const getSource = (prop, initialValue) => {
548
+ const getSource2 = (prop, initialValue) => {
532
549
  let s = sources.get(prop);
533
550
  if (s === undefined) {
534
551
  s = withParent(() => {
@@ -551,7 +568,7 @@ function proxy(value) {
551
568
  return currentValue.bind(proxyObj);
552
569
  }
553
570
  if (exists || isWritable(target, prop)) {
554
- const s = getSource(prop, currentValue);
571
+ const s = getSource2(prop, currentValue);
555
572
  const val = get(s);
556
573
  if (val === UNINITIALIZED) {
557
574
  return;
@@ -651,6 +668,7 @@ function proxy(value) {
651
668
  return Reflect.getOwnPropertyDescriptor(target, prop);
652
669
  }
653
670
  });
671
+ proxyCleanup.register(proxyObj, { sources, version });
654
672
  return proxyObj;
655
673
  }
656
674
  function toRaw(value) {
@@ -663,6 +681,18 @@ function isReactive(value) {
663
681
  return isProxy(value);
664
682
  }
665
683
  // src/primitives/derived.ts
684
+ var derivedCleanup = new FinalizationRegistry((d) => {
685
+ removeReactions(d, 0);
686
+ d.deps = null;
687
+ d.reactions = null;
688
+ const effects = d.effects;
689
+ if (effects !== null) {
690
+ d.effects = null;
691
+ for (let i = 0;i < effects.length; i++) {
692
+ destroyEffectImpl(effects[i]);
693
+ }
694
+ }
695
+ });
666
696
  function createDerived(fn, options) {
667
697
  let flags = DERIVED | DIRTY;
668
698
  const parentDerived = activeReaction !== null && (activeReaction.f & DERIVED) !== 0 ? activeReaction : null;
@@ -713,11 +743,13 @@ function destroyDerivedEffects(derived) {
713
743
  }
714
744
  function derived(fn, options) {
715
745
  const d = createDerived(fn, options);
716
- return {
746
+ const wrapper = {
717
747
  get value() {
718
748
  return get(d);
719
749
  }
720
750
  };
751
+ derivedCleanup.register(wrapper, d);
752
+ return wrapper;
721
753
  }
722
754
  derived.by = derived;
723
755
  function disconnectDerived(derived2) {
@@ -850,20 +882,49 @@ effect.tracking = function effectTracking() {
850
882
  return activeEffect !== null;
851
883
  };
852
884
  // src/primitives/bind.ts
885
+ var bindingCleanup = new FinalizationRegistry((internalSource) => {
886
+ internalSource.reactions = null;
887
+ });
853
888
  var BINDING_SYMBOL = Symbol("binding");
854
889
  function isBinding(value) {
855
890
  return value !== null && typeof value === "object" && BINDING_SYMBOL in value;
856
891
  }
892
+ function isSignal(value) {
893
+ return value !== null && typeof value === "object" && "value" in value;
894
+ }
895
+ function isGetter(value) {
896
+ return typeof value === "function";
897
+ }
857
898
  function bind(source2) {
899
+ if (isGetter(source2)) {
900
+ return {
901
+ [BINDING_SYMBOL]: true,
902
+ get value() {
903
+ return source2();
904
+ }
905
+ };
906
+ }
907
+ let actualSource;
908
+ let internalSource = null;
909
+ if (isBinding(source2) || isSignal(source2)) {
910
+ actualSource = source2;
911
+ } else {
912
+ const sig = signal(source2);
913
+ actualSource = sig;
914
+ internalSource = getSource(sig) ?? null;
915
+ }
858
916
  const binding = {
859
917
  [BINDING_SYMBOL]: true,
860
918
  get value() {
861
- return source2.value;
919
+ return actualSource.value;
862
920
  },
863
921
  set value(v) {
864
- source2.value = v;
922
+ actualSource.value = v;
865
923
  }
866
924
  };
925
+ if (internalSource !== null) {
926
+ bindingCleanup.register(binding, internalSource);
927
+ }
867
928
  return binding;
868
929
  }
869
930
  function bindReadonly(source2) {
@@ -880,6 +941,15 @@ function unwrap(value) {
880
941
  }
881
942
  return value;
882
943
  }
944
+ function signals(initial) {
945
+ const result = {};
946
+ for (const key in initial) {
947
+ if (Object.prototype.hasOwnProperty.call(initial, key)) {
948
+ result[key] = signal(initial[key]);
949
+ }
950
+ }
951
+ return result;
952
+ }
883
953
  // src/reactivity/batching.ts
884
954
  function batch(fn) {
885
955
  incrementBatchDepth();
@@ -902,6 +972,15 @@ function untrack(fn) {
902
972
  }
903
973
  var peek = untrack;
904
974
  // src/collections/map.ts
975
+ var mapCleanup = new FinalizationRegistry((data) => {
976
+ data.version.reactions = null;
977
+ data.size.reactions = null;
978
+ for (const sig of data.keySignals.values()) {
979
+ sig.reactions = null;
980
+ }
981
+ data.keySignals.clear();
982
+ });
983
+
905
984
  class ReactiveMap extends Map {
906
985
  #keySignals = new Map;
907
986
  #version = source(0);
@@ -909,6 +988,11 @@ class ReactiveMap extends Map {
909
988
  constructor(entries) {
910
989
  super(entries);
911
990
  this.#size = source(super.size);
991
+ mapCleanup.register(this, {
992
+ keySignals: this.#keySignals,
993
+ version: this.#version,
994
+ size: this.#size
995
+ });
912
996
  }
913
997
  #getKeySignal(key) {
914
998
  let sig = this.#keySignals.get(key);
@@ -1019,6 +1103,15 @@ class ReactiveMap extends Map {
1019
1103
  }
1020
1104
  }
1021
1105
  // src/collections/set.ts
1106
+ var setCleanup = new FinalizationRegistry((data) => {
1107
+ data.version.reactions = null;
1108
+ data.size.reactions = null;
1109
+ for (const sig of data.itemSignals.values()) {
1110
+ sig.reactions = null;
1111
+ }
1112
+ data.itemSignals.clear();
1113
+ });
1114
+
1022
1115
  class ReactiveSet extends Set {
1023
1116
  #itemSignals = new Map;
1024
1117
  #version = source(0);
@@ -1026,6 +1119,11 @@ class ReactiveSet extends Set {
1026
1119
  constructor(values) {
1027
1120
  super(values);
1028
1121
  this.#size = source(super.size);
1122
+ setCleanup.register(this, {
1123
+ itemSignals: this.#itemSignals,
1124
+ version: this.#version,
1125
+ size: this.#size
1126
+ });
1029
1127
  }
1030
1128
  #getItemSignal(item) {
1031
1129
  let sig = this.#itemSignals.get(item);
@@ -1369,6 +1467,7 @@ export {
1369
1467
  stateRaw,
1370
1468
  state,
1371
1469
  source,
1470
+ signals,
1372
1471
  signal,
1373
1472
  shallowEquals,
1374
1473
  setUntracking,
@@ -18,48 +18,12 @@ export interface ReadonlyBinding<T> {
18
18
  * Check if a value is a binding created by bind()
19
19
  */
20
20
  export declare function isBinding(value: unknown): value is Binding<unknown>;
21
- /**
22
- * Create a reactive binding to a signal or another binding.
23
- *
24
- * A binding is a "reactive pointer" - it forwards reads and writes to the source.
25
- * This enables connecting user's reactive state to internal component state.
26
- *
27
- * @example
28
- * ```ts
29
- * const source = signal(0)
30
- * const binding = bind(source)
31
- *
32
- * // Reading through binding reads from source (creates dependency)
33
- * console.log(binding.value) // → 0
34
- *
35
- * // Writing through binding writes to source (triggers reactivity)
36
- * binding.value = 42
37
- * console.log(source.value) // → 42
38
- * ```
39
- *
40
- * @example Two-way binding for inputs
41
- * ```ts
42
- * const username = signal('')
43
- * const inputBinding = bind(username)
44
- *
45
- * // When user types:
46
- * inputBinding.value = 'alice' // Updates username signal!
47
- * ```
48
- *
49
- * @example Chaining bindings
50
- * ```ts
51
- * const source = signal(0)
52
- * const b1 = bind(source)
53
- * const b2 = bind(b1) // Points to same source
54
- *
55
- * b2.value = 99
56
- * console.log(source.value) // → 99
57
- * ```
58
- */
59
21
  export declare function bind<T>(source: WritableSignal<T>): Binding<T>;
60
22
  export declare function bind<T>(source: ReadableSignal<T>): ReadonlyBinding<T>;
61
23
  export declare function bind<T>(source: Binding<T>): Binding<T>;
62
24
  export declare function bind<T>(source: ReadonlyBinding<T>): ReadonlyBinding<T>;
25
+ export declare function bind<T>(source: () => T): ReadonlyBinding<T>;
26
+ export declare function bind<T>(source: T): Binding<T>;
63
27
  /**
64
28
  * Create an explicitly read-only binding.
65
29
  * Attempting to write will throw an error at runtime.
@@ -92,4 +56,31 @@ export declare function bindReadonly<T>(source: ReadableSignal<T> | Binding<T>):
92
56
  * ```
93
57
  */
94
58
  export declare function unwrap<T>(value: T | Binding<T> | ReadonlyBinding<T>): T;
59
+ /**
60
+ * Create multiple signals from an object.
61
+ * Returns an object with the same keys, where each value is a signal.
62
+ *
63
+ * This is a convenience helper for creating reactive props without
64
+ * declaring each signal individually.
65
+ *
66
+ * @example
67
+ * ```ts
68
+ * // Instead of:
69
+ * const content = signal('hello')
70
+ * const width = signal(40)
71
+ * const visible = signal(true)
72
+ *
73
+ * // Do this:
74
+ * const ui = signals({ content: 'hello', width: 40, visible: true })
75
+ *
76
+ * // Pass to components:
77
+ * text({ content: ui.content }) // ui.content IS a Signal<string>
78
+ *
79
+ * // Update:
80
+ * ui.content.value = 'updated' // Works!
81
+ * ```
82
+ */
83
+ export declare function signals<T extends Record<string, unknown>>(initial: T): {
84
+ [K in keyof T]: WritableSignal<T[K]>;
85
+ };
95
86
  //# sourceMappingURL=bind.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bind.d.ts","sourceRoot":"","sources":["../../src/primitives/bind.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAMtE;;;GAGG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,IAAI,KAAK,IAAI,CAAC,CAAA;IACd,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAClB;AAQD;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAEnE;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AAC9D,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;AACtE,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AACvD,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;AA6BvE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAQ1F;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAKvE"}
1
+ {"version":3,"file":"bind.d.ts","sourceRoot":"","sources":["../../src/primitives/bind.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAU,MAAM,kBAAkB,CAAA;AAqB9E;;;GAGG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,IAAI,KAAK,IAAI,CAAC,CAAA;IACd,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAClB;AAQD;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAEnE;AA0DD,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AAC9D,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;AACtE,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AACvD,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;AACvE,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;AAC5D,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AA2D9C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAQ1F;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAKvE;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvD,OAAO,EAAE,CAAC,GACT;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAU1C"}
@@ -1 +1 @@
1
- {"version":3,"file":"derived.d.ts","sourceRoot":"","sources":["../../src/primitives/derived.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAuB9E,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;CACnB;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA4BrF;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAQxD;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAc1D;AAYD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAEzE;AAmBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAQrF;yBARe,OAAO;;;AAoBvB;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAKxD"}
1
+ {"version":3,"file":"derived.d.ts","sourceRoot":"","sources":["../../src/primitives/derived.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AA+C9E,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;CACnB;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA4BrF;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAQxD;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAc1D;AAYD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAEzE;AAmBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAarF;yBAbe,OAAO;;;AAyBvB;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAKxD"}
@@ -27,6 +27,11 @@ export interface SignalOptions<T> {
27
27
  * ```
28
28
  */
29
29
  export declare function signal<T>(initialValue: T, options?: SignalOptions<T>): WritableSignal<T>;
30
+ /**
31
+ * Get the internal Source from a signal wrapper.
32
+ * Used internally for cleanup registration.
33
+ */
34
+ export declare function getSource<T>(sig: WritableSignal<T>): Source<T> | undefined;
30
35
  export declare function setProxyFn(fn: <T extends object>(value: T) => T): void;
31
36
  /**
32
37
  * Create a deeply reactive state object
@@ -1 +1 @@
1
- {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/primitives/signal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAQtE,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;CACnB;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAShF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAE3D;AAMD,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAWxF;AASD,wBAAgB,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAEtE;AAED;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAK1D;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAE9D"}
1
+ {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/primitives/signal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAetE,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;CACnB;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAShF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAE3D;AAMD,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;CACnB;AAeD;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAiBxF;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAE1E;AASD,wBAAgB,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAEtE;AAED;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAK1D;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAE9D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rlabs-inc/signals",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Production-grade fine-grained reactivity for TypeScript. A complete standalone mirror of Svelte 5's reactivity system - signals, effects, derived values, deep reactivity, reactive collections, and reactive bindings.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",