@rpgjs/common 5.0.0-alpha.23 → 5.0.0-alpha.25

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/dist/index.js CHANGED
@@ -1721,7 +1721,7 @@ var trackDependency = /* @__PURE__ */ __name$1((signal2) => {
1721
1721
  reactiveStore.currentDependencyTracker(signal2);
1722
1722
  }
1723
1723
  }, "trackDependency");
1724
- function signal(defaultValue) {
1724
+ function signal(defaultValue, options) {
1725
1725
  let subject;
1726
1726
  if (Array.isArray(defaultValue)) {
1727
1727
  subject = new ArraySubject(defaultValue);
@@ -1743,12 +1743,21 @@ function signal(defaultValue) {
1743
1743
  return getValue();
1744
1744
  }, "fn");
1745
1745
  fn.set = (value) => {
1746
- if (subject instanceof ArraySubject) {
1747
- subject.items = value;
1748
- } else if (subject instanceof ObjectSubject) {
1749
- subject.obj = value;
1746
+ const currentValue = getValue();
1747
+ let shouldEmit = true;
1748
+ if (options?.equal) {
1749
+ shouldEmit = !options.equal(currentValue, value);
1750
1750
  } else {
1751
- subject.next(value);
1751
+ shouldEmit = currentValue !== value;
1752
+ }
1753
+ if (shouldEmit) {
1754
+ if (subject instanceof ArraySubject) {
1755
+ subject.items = value;
1756
+ } else if (subject instanceof ObjectSubject) {
1757
+ subject.obj = value;
1758
+ } else {
1759
+ subject.next(value);
1760
+ }
1752
1761
  }
1753
1762
  };
1754
1763
  fn._isFrozen = false;
@@ -1805,9 +1814,18 @@ function computed(computeFunction, disposableFn) {
1805
1814
  disposableFn = lastComputedValue;
1806
1815
  }
1807
1816
  reactiveStore.currentDependencyTracker = previousTracker;
1808
- const computedObservable = combineLatest([
1817
+ const observables = [
1809
1818
  ...dependencies
1810
- ].map((signal2) => signal2.observable)).pipe(filter(() => !init), map(() => computeFunction()), finalize(() => disposableFn?.()));
1819
+ ].map((dep) => {
1820
+ if (isComputed(dep) && "dependencies" in dep) {
1821
+ const computedDep = dep;
1822
+ if (computedDep.dependencies.size === 0) {
1823
+ return new BehaviorSubject(computedDep()).asObservable();
1824
+ }
1825
+ }
1826
+ return dep.observable;
1827
+ });
1828
+ const computedObservable = combineLatest(observables).pipe(filter(() => !init), map(() => computeFunction()), finalize(() => disposableFn?.()));
1811
1829
  const fn = /* @__PURE__ */ __name$1(function() {
1812
1830
  trackDependency(fn);
1813
1831
  return lastComputedValue;
@@ -1822,6 +1840,193 @@ function computed(computeFunction, disposableFn) {
1822
1840
  return fn;
1823
1841
  }
1824
1842
  __name$1(computed, "computed");
1843
+ function linkedSignal(computationOrOptions, simpleOptions) {
1844
+ const dependencies = /* @__PURE__ */ new Set();
1845
+ let init = true;
1846
+ let lastComputedValue;
1847
+ let computeFunction;
1848
+ let sourceSignal;
1849
+ let computationFn;
1850
+ let equalFn;
1851
+ let previousValue;
1852
+ let isOverridden = false;
1853
+ let overriddenValue;
1854
+ let depVersion = 0;
1855
+ let overrideDepVersion = null;
1856
+ if (typeof computationOrOptions === "function") {
1857
+ computeFunction = computationOrOptions;
1858
+ equalFn = simpleOptions?.equal;
1859
+ } else {
1860
+ const options = computationOrOptions;
1861
+ sourceSignal = options.source;
1862
+ computationFn = options.computation;
1863
+ equalFn = options.equal;
1864
+ if (typeof sourceSignal === "function" && !isSignal(sourceSignal)) {
1865
+ const sourceFn = sourceSignal;
1866
+ computeFunction = /* @__PURE__ */ __name$1(() => {
1867
+ const sourceValue = sourceFn();
1868
+ if (computationFn.length > 1) {
1869
+ const result = computationFn(sourceValue, previousValue);
1870
+ previousValue = {
1871
+ source: sourceValue,
1872
+ value: result
1873
+ };
1874
+ return result;
1875
+ } else {
1876
+ const result = computationFn(sourceValue);
1877
+ previousValue = {
1878
+ source: sourceValue,
1879
+ value: result
1880
+ };
1881
+ return result;
1882
+ }
1883
+ }, "computeFunction");
1884
+ } else {
1885
+ const source = typeof sourceSignal === "function" ? sourceSignal : sourceSignal;
1886
+ computeFunction = /* @__PURE__ */ __name$1(() => {
1887
+ const sourceValue = source();
1888
+ if (computationFn.length > 1) {
1889
+ const result = computationFn(sourceValue, previousValue);
1890
+ previousValue = {
1891
+ source: sourceValue,
1892
+ value: result
1893
+ };
1894
+ return result;
1895
+ } else {
1896
+ const result = computationFn(sourceValue);
1897
+ previousValue = {
1898
+ source: sourceValue,
1899
+ value: result
1900
+ };
1901
+ return result;
1902
+ }
1903
+ }, "computeFunction");
1904
+ }
1905
+ }
1906
+ const previousTracker = reactiveStore.currentDependencyTracker;
1907
+ reactiveStore.currentDependencyTracker = (signal2) => {
1908
+ dependencies.add(signal2);
1909
+ };
1910
+ if (sourceSignal && typeof sourceSignal === "function" && !isSignal(sourceSignal)) {
1911
+ lastComputedValue = computeFunction();
1912
+ } else if (sourceSignal && isSignal(sourceSignal)) {
1913
+ dependencies.add(sourceSignal);
1914
+ lastComputedValue = computeFunction();
1915
+ } else {
1916
+ lastComputedValue = computeFunction();
1917
+ }
1918
+ reactiveStore.currentDependencyTracker = previousTracker;
1919
+ const subject = new BehaviorSubject(lastComputedValue);
1920
+ const observables = [
1921
+ ...dependencies
1922
+ ].map((dep) => {
1923
+ if (isComputed(dep) && "dependencies" in dep) {
1924
+ const computedDep = dep;
1925
+ if (computedDep.dependencies.size === 0) {
1926
+ return new BehaviorSubject(computedDep()).asObservable();
1927
+ }
1928
+ }
1929
+ return dep.observable;
1930
+ });
1931
+ let linkedObservable;
1932
+ if (observables.length > 0) {
1933
+ linkedObservable = combineLatest(observables).pipe(filter(() => !init), map(() => {
1934
+ const computed2 = computeFunction();
1935
+ if (equalFn) {
1936
+ if (!equalFn(lastComputedValue, computed2)) {
1937
+ lastComputedValue = computed2;
1938
+ isOverridden = false;
1939
+ }
1940
+ } else {
1941
+ if (lastComputedValue !== computed2) {
1942
+ lastComputedValue = computed2;
1943
+ isOverridden = false;
1944
+ }
1945
+ }
1946
+ return lastComputedValue;
1947
+ }));
1948
+ } else {
1949
+ linkedObservable = subject.asObservable().pipe(filter(() => !init));
1950
+ }
1951
+ const fn = /* @__PURE__ */ __name$1(function() {
1952
+ trackDependency(fn);
1953
+ if (isOverridden && dependencies.size > 0) {
1954
+ if (overrideDepVersion !== depVersion) {
1955
+ const computed2 = computeFunction();
1956
+ isOverridden = false;
1957
+ overriddenValue = void 0;
1958
+ lastComputedValue = computed2;
1959
+ overrideDepVersion = null;
1960
+ return computed2;
1961
+ }
1962
+ return overriddenValue;
1963
+ }
1964
+ if (isOverridden) {
1965
+ return overriddenValue;
1966
+ }
1967
+ if (dependencies.size === 0) {
1968
+ const computed2 = computeFunction();
1969
+ lastComputedValue = computed2;
1970
+ }
1971
+ return lastComputedValue;
1972
+ }, "fn");
1973
+ fn.observable = new Observable((observer) => {
1974
+ const depSubscription = linkedObservable.subscribe((value) => {
1975
+ if (dependencies.size > 0) {
1976
+ depVersion++;
1977
+ isOverridden = false;
1978
+ overrideDepVersion = null;
1979
+ lastComputedValue = value;
1980
+ } else {
1981
+ lastComputedValue = value;
1982
+ }
1983
+ observer.next(value);
1984
+ });
1985
+ let subjectSubscription;
1986
+ if (dependencies.size === 0) {
1987
+ subjectSubscription = subject.pipe(filter(() => !init)).subscribe((value) => {
1988
+ observer.next(value);
1989
+ });
1990
+ }
1991
+ observer.next(lastComputedValue);
1992
+ return () => {
1993
+ depSubscription.unsubscribe();
1994
+ if (subjectSubscription) {
1995
+ subjectSubscription.unsubscribe();
1996
+ }
1997
+ };
1998
+ });
1999
+ fn.subscription = fn.observable.subscribe(() => {
2000
+ });
2001
+ fn.dependencies = dependencies;
2002
+ fn._subject = subject;
2003
+ fn.set = (value) => {
2004
+ if (!isOverridden) {
2005
+ overrideDepVersion = depVersion;
2006
+ if (computationFn && sourceSignal) {
2007
+ const sourceValue = untracked(() => {
2008
+ if (typeof sourceSignal === "function") {
2009
+ const source = sourceSignal;
2010
+ return isSignal(source) ? source() : sourceSignal();
2011
+ }
2012
+ return sourceSignal();
2013
+ });
2014
+ previousValue = {
2015
+ source: sourceValue,
2016
+ value
2017
+ };
2018
+ }
2019
+ }
2020
+ isOverridden = true;
2021
+ overriddenValue = value;
2022
+ lastComputedValue = value;
2023
+ subject.next(value);
2024
+ };
2025
+ reactiveStore.currentSubscriptionsTracker?.(fn.subscription);
2026
+ init = false;
2027
+ return fn;
2028
+ }
2029
+ __name$1(linkedSignal, "linkedSignal");
1825
2030
  function untracked(fn) {
1826
2031
  const prevDepTracker = reactiveStore.currentDependencyTracker;
1827
2032
  const prevSubTracker = reactiveStore.currentSubscriptionsTracker;
@@ -2317,7 +2522,7 @@ class RpgCommonPlayer {
2317
2522
  this.hpSignal = signal(0);
2318
2523
  this.spSignal = signal(0);
2319
2524
  this._exp = signal(0);
2320
- this._level = signal(0);
2525
+ this._level = signal(1);
2321
2526
  this._class = signal({});
2322
2527
  this.items = signal([]);
2323
2528
  this.equipments = signal([]);