synstate 3.0.0 → 3.0.1

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 (137) hide show
  1. package/dist/core/base/create-child-observable.mjs +164 -140
  2. package/dist/core/base/create-child-observable.mjs.map +1 -1
  3. package/dist/core/base/create-observable-base.mjs +148 -152
  4. package/dist/core/base/create-observable-base.mjs.map +1 -1
  5. package/dist/core/base/create-root-observable.mjs +48 -34
  6. package/dist/core/base/create-root-observable.mjs.map +1 -1
  7. package/dist/core/base/index.mjs +3 -3
  8. package/dist/core/base/index.mjs.map +1 -1
  9. package/dist/core/combine/combine.mjs +129 -37
  10. package/dist/core/combine/combine.mjs.map +1 -1
  11. package/dist/core/combine/index.mjs +4 -4
  12. package/dist/core/combine/index.mjs.map +1 -1
  13. package/dist/core/combine/merge.mjs +75 -24
  14. package/dist/core/combine/merge.mjs.map +1 -1
  15. package/dist/core/combine/zip.mjs +120 -39
  16. package/dist/core/combine/zip.mjs.map +1 -1
  17. package/dist/core/create/counter.mjs +81 -45
  18. package/dist/core/create/counter.mjs.map +1 -1
  19. package/dist/core/create/from-abortable-promise.mjs +63 -38
  20. package/dist/core/create/from-abortable-promise.mjs.map +1 -1
  21. package/dist/core/create/from-promise.mjs +67 -25
  22. package/dist/core/create/from-promise.mjs.map +1 -1
  23. package/dist/core/create/from-subscribable.mjs +70 -26
  24. package/dist/core/create/from-subscribable.mjs.map +1 -1
  25. package/dist/core/create/index.mjs +8 -8
  26. package/dist/core/create/index.mjs.map +1 -1
  27. package/dist/core/create/just.mjs +36 -13
  28. package/dist/core/create/just.mjs.map +1 -1
  29. package/dist/core/create/source.mjs +15 -19
  30. package/dist/core/create/source.mjs.map +1 -1
  31. package/dist/core/create/timer.mjs +66 -37
  32. package/dist/core/create/timer.mjs.map +1 -1
  33. package/dist/core/index.mjs +6 -41
  34. package/dist/core/index.mjs.map +1 -1
  35. package/dist/core/operators/audit.mjs +126 -39
  36. package/dist/core/operators/audit.mjs.map +1 -1
  37. package/dist/core/operators/debounce.mjs +114 -37
  38. package/dist/core/operators/debounce.mjs.map +1 -1
  39. package/dist/core/operators/filter.mjs +39 -24
  40. package/dist/core/operators/filter.mjs.map +1 -1
  41. package/dist/core/operators/index.mjs +18 -18
  42. package/dist/core/operators/index.mjs.map +1 -1
  43. package/dist/core/operators/map.mjs +74 -26
  44. package/dist/core/operators/map.mjs.map +1 -1
  45. package/dist/core/operators/merge-map.mjs +128 -35
  46. package/dist/core/operators/merge-map.mjs.map +1 -1
  47. package/dist/core/operators/pairwise.mjs +73 -23
  48. package/dist/core/operators/pairwise.mjs.map +1 -1
  49. package/dist/core/operators/scan.mjs +59 -15
  50. package/dist/core/operators/scan.mjs.map +1 -1
  51. package/dist/core/operators/skip-if-no-change.mjs +89 -31
  52. package/dist/core/operators/skip-if-no-change.mjs.map +1 -1
  53. package/dist/core/operators/skip-until.mjs +71 -29
  54. package/dist/core/operators/skip-until.mjs.map +1 -1
  55. package/dist/core/operators/skip-while.mjs +79 -27
  56. package/dist/core/operators/skip-while.mjs.map +1 -1
  57. package/dist/core/operators/switch-map.mjs +118 -31
  58. package/dist/core/operators/switch-map.mjs.map +1 -1
  59. package/dist/core/operators/take-until.mjs +70 -35
  60. package/dist/core/operators/take-until.mjs.map +1 -1
  61. package/dist/core/operators/take-while.mjs +97 -25
  62. package/dist/core/operators/take-while.mjs.map +1 -1
  63. package/dist/core/operators/throttle.mjs +108 -38
  64. package/dist/core/operators/throttle.mjs.map +1 -1
  65. package/dist/core/operators/with-buffered-from.mjs +94 -47
  66. package/dist/core/operators/with-buffered-from.mjs.map +1 -1
  67. package/dist/core/operators/with-current-value-from.mjs +78 -23
  68. package/dist/core/operators/with-current-value-from.mjs.map +1 -1
  69. package/dist/core/operators/with-initial-value.mjs +64 -14
  70. package/dist/core/operators/with-initial-value.mjs.map +1 -1
  71. package/dist/core/predefined/index.mjs +2 -12
  72. package/dist/core/predefined/index.mjs.map +1 -1
  73. package/dist/core/predefined/operators/attach-index.mjs +55 -7
  74. package/dist/core/predefined/operators/attach-index.mjs.map +1 -1
  75. package/dist/core/predefined/operators/index.mjs +12 -12
  76. package/dist/core/predefined/operators/index.mjs.map +1 -1
  77. package/dist/core/predefined/operators/map-optional.mjs +48 -5
  78. package/dist/core/predefined/operators/map-optional.mjs.map +1 -1
  79. package/dist/core/predefined/operators/map-result-err.mjs +48 -5
  80. package/dist/core/predefined/operators/map-result-err.mjs.map +1 -1
  81. package/dist/core/predefined/operators/map-result-ok.mjs +48 -5
  82. package/dist/core/predefined/operators/map-result-ok.mjs.map +1 -1
  83. package/dist/core/predefined/operators/map-to.mjs +41 -6
  84. package/dist/core/predefined/operators/map-to.mjs.map +1 -1
  85. package/dist/core/predefined/operators/pluck.mjs +45 -7
  86. package/dist/core/predefined/operators/pluck.mjs.map +1 -1
  87. package/dist/core/predefined/operators/skip.mjs +49 -6
  88. package/dist/core/predefined/operators/skip.mjs.map +1 -1
  89. package/dist/core/predefined/operators/take.mjs +42 -6
  90. package/dist/core/predefined/operators/take.mjs.map +1 -1
  91. package/dist/core/predefined/operators/unwrap-optional.mjs +43 -8
  92. package/dist/core/predefined/operators/unwrap-optional.mjs.map +1 -1
  93. package/dist/core/predefined/operators/unwrap-result-err.mjs +41 -5
  94. package/dist/core/predefined/operators/unwrap-result-err.mjs.map +1 -1
  95. package/dist/core/predefined/operators/unwrap-result-ok.mjs +43 -8
  96. package/dist/core/predefined/operators/unwrap-result-ok.mjs.map +1 -1
  97. package/dist/core/types/id.mjs +2 -2
  98. package/dist/core/types/id.mjs.map +1 -1
  99. package/dist/core/types/index.mjs +7 -3
  100. package/dist/core/types/index.mjs.map +1 -1
  101. package/dist/core/types/observable-family.mjs +14 -2
  102. package/dist/core/types/observable-family.mjs.map +1 -1
  103. package/dist/core/types/observable-kind.mjs +2 -2
  104. package/dist/core/types/observable-kind.mjs.map +1 -1
  105. package/dist/core/types/observable.mjs +14 -6
  106. package/dist/core/types/observable.mjs.map +1 -1
  107. package/dist/core/types/timer.mjs +2 -2
  108. package/dist/core/types/timer.mjs.map +1 -1
  109. package/dist/core/types/types.mjs +9 -2
  110. package/dist/core/types/types.mjs.map +1 -1
  111. package/dist/core/utils/id-maker.mjs +10 -11
  112. package/dist/core/utils/id-maker.mjs.map +1 -1
  113. package/dist/core/utils/index.mjs +5 -5
  114. package/dist/core/utils/index.mjs.map +1 -1
  115. package/dist/core/utils/max-depth.mjs +7 -4
  116. package/dist/core/utils/max-depth.mjs.map +1 -1
  117. package/dist/core/utils/observable-utils.mjs +4 -7
  118. package/dist/core/utils/observable-utils.mjs.map +1 -1
  119. package/dist/core/utils/utils.mjs +32 -28
  120. package/dist/core/utils/utils.mjs.map +1 -1
  121. package/dist/entry-point.mjs +2 -46
  122. package/dist/entry-point.mjs.map +1 -1
  123. package/dist/index.mjs +3 -46
  124. package/dist/index.mjs.map +1 -1
  125. package/dist/utils/collect-to-array.mjs +8 -13
  126. package/dist/utils/collect-to-array.mjs.map +1 -1
  127. package/dist/utils/create-boolean-state.mjs +47 -22
  128. package/dist/utils/create-boolean-state.mjs.map +1 -1
  129. package/dist/utils/create-event-emitter.mjs +67 -19
  130. package/dist/utils/create-event-emitter.mjs.map +1 -1
  131. package/dist/utils/create-reducer.mjs +54 -16
  132. package/dist/utils/create-reducer.mjs.map +1 -1
  133. package/dist/utils/create-state.mjs +54 -27
  134. package/dist/utils/create-state.mjs.map +1 -1
  135. package/dist/utils/index.mjs +6 -6
  136. package/dist/utils/index.mjs.map +1 -1
  137. package/package.json +11 -12
@@ -1,2 +1,9 @@
1
- import 'ts-data-forge';
2
- //# sourceMappingURL=types.mjs.map
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+ //# sourceMappingURL=types.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.mjs","sourceRoot":"","sources":["../../../src/core/types/types.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAc,MAAM,eAAe,CAAC;AA0BvD,aAAa;AAEb,UAAU,CAGR,GAAG,CAAC,CAAC;AAEP,0BAA0B;AAC1B,UAAU,CAAoC,IAAI,CAAC,CAAC;AAEpD,UAAU,CAAoC,KAAK,CAAC,CAAC;AAErD,UAAU,CAAsC,KAAK,CAAC,CAAC;AAEvD,UAAU,CAAsC,KAAK,CAAC,CAAC"}
@@ -1,16 +1,15 @@
1
1
  function* idMaker() {
2
- let mut_i = 0;
3
- while (true) {
4
- yield Symbol(mut_i.toString());
5
- mut_i += 1;
6
- }
2
+ let mut_i = 0;
3
+ while (true) {
4
+
5
+ yield Symbol(mut_i.toString());
6
+ mut_i += 1;
7
+ }
7
8
  }
8
9
  const observableIdMaker = idMaker();
9
10
  const subscriberIdMaker = idMaker();
10
11
  const updateTokenMaker = idMaker();
11
- const issueObservableId = () => observableIdMaker.next().value;
12
- const issueSubscriberId = () => subscriberIdMaker.next().value;
13
- const issueUpdateToken = () => updateTokenMaker.next().value;
14
-
15
- export { issueObservableId, issueSubscriberId, issueUpdateToken };
16
- //# sourceMappingURL=id-maker.mjs.map
12
+ export const issueObservableId = () => observableIdMaker.next().value;
13
+ export const issueSubscriberId = () => subscriberIdMaker.next().value;
14
+ export const issueUpdateToken = () => updateTokenMaker.next().value;
15
+ //# sourceMappingURL=id-maker.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"id-maker.mjs","sources":["../../../src/core/utils/id-maker.mts"],"sourcesContent":["import {\n type ObservableId,\n type SubscriberId,\n type UpdateToken,\n} from '../types/index.mjs';\n\nfunction* idMaker<T extends symbol>(): Generator<T, T, T> {\n let mut_i = 0;\n\n while (true) {\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n yield Symbol(mut_i.toString()) as T;\n\n mut_i += 1;\n }\n}\n\nconst observableIdMaker = idMaker<ObservableId>();\n\nconst subscriberIdMaker = idMaker<SubscriberId>();\n\nconst updateTokenMaker = idMaker<UpdateToken>();\n\nexport const issueObservableId = (): ObservableId =>\n observableIdMaker.next().value;\n\nexport const issueSubscriberId = (): SubscriberId =>\n subscriberIdMaker.next().value;\n\nexport const issueUpdateToken = (): UpdateToken =>\n updateTokenMaker.next().value;\n"],"names":[],"mappings":"AAMA,UAAU,OAAA,GAAgD;AACxD,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,OAAO,IAAA,EAAM;AAEX,IAAA,MAAM,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,CAAA;AAE7B,IAAA,KAAA,IAAS,CAAA;AAAA,EACX;AACF;AAEA,MAAM,oBAAoB,OAAA,EAAsB;AAEhD,MAAM,oBAAoB,OAAA,EAAsB;AAEhD,MAAM,mBAAmB,OAAA,EAAqB;AAEvC,MAAM,iBAAA,GAAoB,MAC/B,iBAAA,CAAkB,IAAA,EAAK,CAAE;AAEpB,MAAM,iBAAA,GAAoB,MAC/B,iBAAA,CAAkB,IAAA,EAAK,CAAE;AAEpB,MAAM,gBAAA,GAAmB,MAC9B,gBAAA,CAAiB,IAAA,EAAK,CAAE;;;;"}
1
+ {"version":3,"file":"id-maker.mjs","sourceRoot":"","sources":["../../../src/core/utils/id-maker.mts"],"names":[],"mappings":"AAMA,QAAQ,CAAC,CAAC,OAAO;IACf,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,OAAO,IAAI,EAAE,CAAC;QACZ,oEAAoE;QACpE,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAM,CAAC;QAEpC,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,iBAAiB,GAAG,OAAO,EAAgB,CAAC;AAElD,MAAM,iBAAiB,GAAG,OAAO,EAAgB,CAAC;AAElD,MAAM,gBAAgB,GAAG,OAAO,EAAe,CAAC;AAEhD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAiB,EAAE,CAClD,iBAAiB,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;AAEjC,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAiB,EAAE,CAClD,iBAAiB,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;AAEjC,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAgB,EAAE,CAChD,gBAAgB,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC"}
@@ -1,5 +1,5 @@
1
- export { issueObservableId, issueSubscriberId, issueUpdateToken } from './id-maker.mjs';
2
- export { maxDepth } from './max-depth.mjs';
3
- export { toSubscriber } from './observable-utils.mjs';
4
- export { binarySearch, halfInt } from './utils.mjs';
5
- //# sourceMappingURL=index.mjs.map
1
+ export * from './id-maker.mjs';
2
+ export * from './max-depth.mjs';
3
+ export * from './observable-utils.mjs';
4
+ export * from './utils.mjs';
5
+ //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../src/core/utils/index.mts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC"}
@@ -1,6 +1,9 @@
1
- import { pipe, Arr, Optional } from 'ts-data-forge';
1
+ import { Arr, Optional, pipe } from 'ts-data-forge';
2
+ export const maxDepth = (parents) => pipe(Arr.maxBy(parents, (p) => p.depth))
2
3
 
3
- const maxDepth = (parents) => pipe(Arr.maxBy(parents, (p) => p.depth)).mapOptional((o) => o.depth).map(Optional.unwrapOr(0)).value;
4
4
 
5
- export { maxDepth };
6
- //# sourceMappingURL=max-depth.mjs.map
5
+
6
+
7
+ .mapOptional((o) => o.depth)
8
+ .map(Optional.unwrapOr(0)).value;
9
+ //# sourceMappingURL=max-depth.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"max-depth.mjs","sources":["../../../src/core/utils/max-depth.mts"],"sourcesContent":["import { Arr, Optional, pipe } from 'ts-data-forge';\nimport { type Observable } from '../types/index.mjs';\n\nexport const maxDepth = (parents: readonly Observable<unknown>[]): number =>\n pipe(Arr.maxBy(parents, (p) => p.depth))\n // Explicit return type + non-curried `Optional.unwrapOr` call: TypeScript\n // 7 (native)'s inference for this chained generic call resolves to\n // `unknown` without them, even though TypeScript <= 6.0's checker\n // resolves this fine.\n .mapOptional((o): number => o.depth)\n .map(Optional.unwrapOr(0)).value;\n"],"names":[],"mappings":";;AAGO,MAAM,QAAA,GAAW,CAAC,OAAA,KACvB,IAAA,CAAK,GAAA,CAAI,MAAM,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAC,EAKpC,WAAA,CAAY,CAAC,CAAA,KAAc,CAAA,CAAE,KAAK,CAAA,CAClC,IAAI,QAAA,CAAS,QAAA,CAAS,CAAC,CAAC,CAAA,CAAE;;;;"}
1
+ {"version":3,"file":"max-depth.mjs","sourceRoot":"","sources":["../../../src/core/utils/max-depth.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAGpD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAuC,EAAU,EAAE,CAC1E,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACtC,0EAA0E;IAC1E,mEAAmE;IACnE,kEAAkE;IAClE,sBAAsB;KACrB,WAAW,CAAC,CAAC,CAAC,EAAU,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;KACnC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC"}
@@ -1,8 +1,5 @@
1
- const toSubscriber = (onNext, onComplete) => ({
2
- onNext,
3
- onComplete: onComplete ?? (() => {
4
- })
1
+ export const toSubscriber = (onNext, onComplete) => ({
2
+ onNext,
3
+ onComplete: onComplete ?? (() => { }),
5
4
  });
6
-
7
- export { toSubscriber };
8
- //# sourceMappingURL=observable-utils.mjs.map
5
+ //# sourceMappingURL=observable-utils.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"observable-utils.mjs","sources":["../../../src/core/utils/observable-utils.mts"],"sourcesContent":["import { type Subscriber } from '../types/index.mjs';\n\nexport const toSubscriber = <A,>(\n onNext: (v: A) => void,\n onComplete?: () => void,\n): Subscriber<A> =>\n ({\n onNext,\n onComplete: onComplete ?? (() => {}),\n }) as const;\n"],"names":[],"mappings":"AAEO,MAAM,YAAA,GAAe,CAC1B,MAAA,EACA,UAAA,MAEC;AAAA,EACC,MAAA;AAAA,EACA,UAAA,EAAY,eAAe,MAAM;AAAA,EAAC,CAAA;AACpC,CAAA;;;;"}
1
+ {"version":3,"file":"observable-utils.mjs","sourceRoot":"","sources":["../../../src/core/utils/observable-utils.mts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,MAAsB,EACtB,UAAuB,EACR,EAAE,CACjB,CAAC;IACC,MAAM;IACN,UAAU,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;CACrC,CAAU,CAAC"}
@@ -1,31 +1,35 @@
1
- import { asUint32, Arr, asSafeInt, SafeInt } from 'ts-data-forge';
1
+ import { Arr, asSafeInt, asUint32, SafeInt } from 'ts-data-forge';
2
+ export const halfInt = (x) => x % 2 === 0
3
+ ? SafeInt.div(x, 2)
4
+ : x > 0
5
+ ? SafeInt.div(SafeInt.sub(x, 1), 2)
6
+ : SafeInt.div(SafeInt.add(x, 1), 2);
2
7
 
3
- const halfInt = (x) => x % 2 === 0 ? SafeInt.div(x, 2) : x > 0 ? SafeInt.div(SafeInt.sub(x, 1), 2) : SafeInt.div(SafeInt.add(x, 1), 2);
4
- const binarySearch = (sortedArray, x) => {
5
- const uint32Result = asUint32(0);
6
- if (Arr.isEmpty(sortedArray)) {
7
- return uint32Result;
8
- }
9
- const left0 = asSafeInt(0);
10
- let mut_left = left0;
11
- let mut_right = SafeInt.sub(Arr.length(sortedArray), 1);
12
- let mut_mid = SafeInt.add(
13
- mut_left,
14
- halfInt(SafeInt.sub(mut_right, mut_left))
15
- );
16
- while (mut_left <= mut_right) {
17
- const curr = sortedArray[mut_mid];
18
- if (x === curr) break;
19
- if (curr === void 0) break;
20
- if (curr > x) {
21
- mut_right = SafeInt.sub(mut_mid, 1);
22
- } else {
23
- mut_left = SafeInt.add(mut_mid, 1);
8
+ export const binarySearch = (sortedArray, x) => {
9
+ const uint32Result = asUint32(0);
10
+ if (Arr.isEmpty(sortedArray)) {
11
+ return uint32Result;
12
+ }
13
+ const left0 = asSafeInt(0);
14
+ let mut_left = left0;
15
+ let mut_right = SafeInt.sub(Arr.length(sortedArray), 1);
16
+ let mut_mid = SafeInt.add(mut_left, halfInt(SafeInt.sub(mut_right, mut_left)));
17
+
18
+ while (mut_left <= mut_right) {
19
+ const curr = sortedArray[mut_mid];
20
+ if (x === curr)
21
+ break;
22
+ if (curr === undefined)
23
+ break;
24
+ if (curr > x) {
25
+ mut_right = SafeInt.sub(mut_mid, 1);
26
+ }
27
+ else {
28
+ mut_left = SafeInt.add(mut_mid, 1);
29
+ }
30
+ mut_mid = SafeInt.add(mut_left, halfInt(SafeInt.sub(mut_right, mut_left)));
24
31
  }
25
- mut_mid = SafeInt.add(mut_left, halfInt(SafeInt.sub(mut_right, mut_left)));
26
- }
27
- return mut_mid;
28
- };
29
32
 
30
- export { binarySearch, halfInt };
31
- //# sourceMappingURL=utils.mjs.map
33
+ return mut_mid;
34
+ };
35
+ //# sourceMappingURL=utils.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","sources":["../../../src/core/utils/utils.mts"],"sourcesContent":["import { Arr, asSafeInt, asUint32, SafeInt } from 'ts-data-forge';\nimport { type NegativeInt32, type Uint32 } from 'ts-type-forge';\n\nexport const halfInt = (x: SafeInt): SafeInt =>\n x % 2 === 0\n ? SafeInt.div(x, 2)\n : x > 0\n ? SafeInt.div(SafeInt.sub(x, 1), 2) // (x-1) / 2. e.g. 3 -> 1, 5 -> 2\n : SafeInt.div(SafeInt.add(x, 1), 2); // (x+1) / 2. e.g. -3 -> -1, -5 -> -2\n\n/** Returns the position where x should be inserted in a sorted array. */\nexport const binarySearch = <N extends number>(\n sortedArray: readonly N[],\n x: N,\n): NegativeInt32 | Uint32 => {\n const uint32Result = asUint32(0);\n\n if (Arr.isEmpty(sortedArray)) {\n return uint32Result;\n }\n\n const left0 = asSafeInt(0);\n\n let mut_left: SafeInt = left0;\n\n let mut_right: SafeInt = SafeInt.sub(Arr.length(sortedArray), 1);\n\n let mut_mid: SafeInt = SafeInt.add(\n mut_left,\n halfInt(SafeInt.sub(mut_right, mut_left)),\n );\n\n // loop while x is in the range of [left, right)\n while (mut_left <= mut_right) {\n const curr = sortedArray[mut_mid];\n\n if (x === curr) break;\n\n if (curr === undefined) break;\n\n if (curr > x) {\n mut_right = SafeInt.sub(mut_mid, 1);\n } else {\n mut_left = SafeInt.add(mut_mid, 1);\n }\n\n mut_mid = SafeInt.add(mut_left, halfInt(SafeInt.sub(mut_right, mut_left)));\n }\n\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n return mut_mid as NegativeInt32 | Uint32;\n};\n"],"names":[],"mappings":";;AAGO,MAAM,OAAA,GAAU,CAAC,CAAA,KACtB,CAAA,GAAI,CAAA,KAAM,CAAA,GACN,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA,GAChB,CAAA,GAAI,CAAA,GACF,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,CAAA,GAChC,OAAA,CAAQ,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,CAAC,GAAG,CAAC;AAGjC,MAAM,YAAA,GAAe,CAC1B,WAAA,EACA,CAAA,KAC2B;AAC3B,EAAA,MAAM,YAAA,GAAe,SAAS,CAAC,CAAA;AAE/B,EAAA,IAAI,GAAA,CAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC5B,IAAA,OAAO,YAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,UAAU,CAAC,CAAA;AAEzB,EAAA,IAAI,QAAA,GAAoB,KAAA;AAExB,EAAA,IAAI,YAAqB,OAAA,CAAQ,GAAA,CAAI,IAAI,MAAA,CAAO,WAAW,GAAG,CAAC,CAAA;AAE/D,EAAA,IAAI,UAAmB,OAAA,CAAQ,GAAA;AAAA,IAC7B,QAAA;AAAA,IACA,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,SAAA,EAAW,QAAQ,CAAC;AAAA,GAC1C;AAGA,EAAA,OAAO,YAAY,SAAA,EAAW;AAC5B,IAAA,MAAM,IAAA,GAAO,YAAY,OAAO,CAAA;AAEhC,IAAA,IAAI,MAAM,IAAA,EAAM;AAEhB,IAAA,IAAI,SAAS,MAAA,EAAW;AAExB,IAAA,IAAI,OAAO,CAAA,EAAG;AACZ,MAAA,SAAA,GAAY,OAAA,CAAQ,GAAA,CAAI,OAAA,EAAS,CAAC,CAAA;AAAA,IACpC,CAAA,MAAO;AACL,MAAA,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,OAAA,EAAS,CAAC,CAAA;AAAA,IACnC;AAEA,IAAA,OAAA,GAAU,OAAA,CAAQ,IAAI,QAAA,EAAU,OAAA,CAAQ,QAAQ,GAAA,CAAI,SAAA,EAAW,QAAQ,CAAC,CAAC,CAAA;AAAA,EAC3E;AAGA,EAAA,OAAO,OAAA;AACT;;;;"}
1
+ {"version":3,"file":"utils.mjs","sourceRoot":"","sources":["../../../src/core/utils/utils.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGlE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAU,EAAW,EAAE,CAC7C,CAAC,GAAG,CAAC,KAAK,CAAC;IACT,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC,GAAG,CAAC;QACL,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iCAAiC;QACrE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,qCAAqC;AAEhF,yEAAyE;AACzE,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,WAAyB,EACzB,CAAI,EACoB,EAAE;IAC1B,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEjC,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAE3B,IAAI,QAAQ,GAAY,KAAK,CAAC;IAE9B,IAAI,SAAS,GAAY,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IAEjE,IAAI,OAAO,GAAY,OAAO,CAAC,GAAG,CAChC,QAAQ,EACR,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAC1C,CAAC;IAEF,gDAAgD;IAChD,OAAO,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAElC,IAAI,CAAC,KAAK,IAAI;YAAE,MAAM;QAEtB,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM;QAE9B,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACb,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,oEAAoE;IACpE,OAAO,OAAiC,CAAC;AAC3C,CAAC,CAAC"}
@@ -1,46 +1,2 @@
1
- export { combine, combineLatest } from './core/combine/combine.mjs';
2
- export { merge } from './core/combine/merge.mjs';
3
- export { zip } from './core/combine/zip.mjs';
4
- export { counter } from './core/create/counter.mjs';
5
- export { fromAbortablePromise } from './core/create/from-abortable-promise.mjs';
6
- export { fromPromise } from './core/create/from-promise.mjs';
7
- export { fromSubscribable } from './core/create/from-subscribable.mjs';
8
- export { just } from './core/create/just.mjs';
9
- export { source } from './core/create/source.mjs';
10
- export { timer } from './core/create/timer.mjs';
11
- export { audit } from './core/operators/audit.mjs';
12
- export { debounce } from './core/operators/debounce.mjs';
13
- export { filter } from './core/operators/filter.mjs';
14
- export { map } from './core/operators/map.mjs';
15
- export { flatMap, mergeMap } from './core/operators/merge-map.mjs';
16
- export { pairwise } from './core/operators/pairwise.mjs';
17
- export { scan } from './core/operators/scan.mjs';
18
- export { distinctUntilChanged, skipIfNoChange } from './core/operators/skip-if-no-change.mjs';
19
- export { skipUntil } from './core/operators/skip-until.mjs';
20
- export { skipWhile } from './core/operators/skip-while.mjs';
21
- export { switchMap } from './core/operators/switch-map.mjs';
22
- export { takeUntil } from './core/operators/take-until.mjs';
23
- export { takeWhile } from './core/operators/take-while.mjs';
24
- export { throttle } from './core/operators/throttle.mjs';
25
- export { withBuffered, withBufferedFrom } from './core/operators/with-buffered-from.mjs';
26
- export { withCurrentValueFrom, withLatestFrom } from './core/operators/with-current-value-from.mjs';
27
- export { withInitialValue } from './core/operators/with-initial-value.mjs';
28
- export { attachIndex, withIndex } from './core/predefined/operators/attach-index.mjs';
29
- export { mapOptional } from './core/predefined/operators/map-optional.mjs';
30
- export { mapResultErr } from './core/predefined/operators/map-result-err.mjs';
31
- export { mapResultOk } from './core/predefined/operators/map-result-ok.mjs';
32
- export { mapTo } from './core/predefined/operators/map-to.mjs';
33
- export { getKey, pluck } from './core/predefined/operators/pluck.mjs';
34
- export { skip } from './core/predefined/operators/skip.mjs';
35
- export { take } from './core/predefined/operators/take.mjs';
36
- export { unwrapOptional } from './core/predefined/operators/unwrap-optional.mjs';
37
- export { unwrapResultErr } from './core/predefined/operators/unwrap-result-err.mjs';
38
- export { unwrapResultOk } from './core/predefined/operators/unwrap-result-ok.mjs';
39
- import 'ts-data-forge';
40
- export { isChildObservable, isManagerObservable, isRootObservable } from './core/types/observable.mjs';
41
- export { collectToArray } from './utils/collect-to-array.mjs';
42
- export { createBooleanState } from './utils/create-boolean-state.mjs';
43
- export { createEventEmitter, createValueEmitter } from './utils/create-event-emitter.mjs';
44
- export { createReducer } from './utils/create-reducer.mjs';
45
- export { createState } from './utils/create-state.mjs';
46
- //# sourceMappingURL=entry-point.mjs.map
1
+ export * from './index.mjs';
2
+ //# sourceMappingURL=entry-point.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"entry-point.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"entry-point.mjs","sourceRoot":"","sources":["../src/entry-point.mts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
package/dist/index.mjs CHANGED
@@ -1,46 +1,3 @@
1
- export { combine, combineLatest } from './core/combine/combine.mjs';
2
- export { merge } from './core/combine/merge.mjs';
3
- export { zip } from './core/combine/zip.mjs';
4
- export { counter } from './core/create/counter.mjs';
5
- export { fromAbortablePromise } from './core/create/from-abortable-promise.mjs';
6
- export { fromPromise } from './core/create/from-promise.mjs';
7
- export { fromSubscribable } from './core/create/from-subscribable.mjs';
8
- export { just } from './core/create/just.mjs';
9
- export { source } from './core/create/source.mjs';
10
- export { timer } from './core/create/timer.mjs';
11
- export { audit } from './core/operators/audit.mjs';
12
- export { debounce } from './core/operators/debounce.mjs';
13
- export { filter } from './core/operators/filter.mjs';
14
- export { map } from './core/operators/map.mjs';
15
- export { flatMap, mergeMap } from './core/operators/merge-map.mjs';
16
- export { pairwise } from './core/operators/pairwise.mjs';
17
- export { scan } from './core/operators/scan.mjs';
18
- export { distinctUntilChanged, skipIfNoChange } from './core/operators/skip-if-no-change.mjs';
19
- export { skipUntil } from './core/operators/skip-until.mjs';
20
- export { skipWhile } from './core/operators/skip-while.mjs';
21
- export { switchMap } from './core/operators/switch-map.mjs';
22
- export { takeUntil } from './core/operators/take-until.mjs';
23
- export { takeWhile } from './core/operators/take-while.mjs';
24
- export { throttle } from './core/operators/throttle.mjs';
25
- export { withBuffered, withBufferedFrom } from './core/operators/with-buffered-from.mjs';
26
- export { withCurrentValueFrom, withLatestFrom } from './core/operators/with-current-value-from.mjs';
27
- export { withInitialValue } from './core/operators/with-initial-value.mjs';
28
- export { attachIndex, withIndex } from './core/predefined/operators/attach-index.mjs';
29
- export { mapOptional } from './core/predefined/operators/map-optional.mjs';
30
- export { mapResultErr } from './core/predefined/operators/map-result-err.mjs';
31
- export { mapResultOk } from './core/predefined/operators/map-result-ok.mjs';
32
- export { mapTo } from './core/predefined/operators/map-to.mjs';
33
- export { getKey, pluck } from './core/predefined/operators/pluck.mjs';
34
- export { skip } from './core/predefined/operators/skip.mjs';
35
- export { take } from './core/predefined/operators/take.mjs';
36
- export { unwrapOptional } from './core/predefined/operators/unwrap-optional.mjs';
37
- export { unwrapResultErr } from './core/predefined/operators/unwrap-result-err.mjs';
38
- export { unwrapResultOk } from './core/predefined/operators/unwrap-result-ok.mjs';
39
- import 'ts-data-forge';
40
- export { isChildObservable, isManagerObservable, isRootObservable } from './core/types/observable.mjs';
41
- export { collectToArray } from './utils/collect-to-array.mjs';
42
- export { createBooleanState } from './utils/create-boolean-state.mjs';
43
- export { createEventEmitter, createValueEmitter } from './utils/create-event-emitter.mjs';
44
- export { createReducer } from './utils/create-reducer.mjs';
45
- export { createState } from './utils/create-state.mjs';
46
- //# sourceMappingURL=index.mjs.map
1
+ export * from './core/index.mjs';
2
+ export * from './utils/index.mjs';
3
+ //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.mts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
@@ -1,14 +1,9 @@
1
- const collectToArray = (observable) => new Promise((resolve) => {
2
- const mut_buffer = [];
3
- observable.subscribe(
4
- (value) => {
5
- mut_buffer.push(value);
6
- },
7
- () => {
8
- resolve(mut_buffer);
9
- }
10
- );
1
+ export const collectToArray = (observable) => new Promise((resolve) => {
2
+ const mut_buffer = [];
3
+ observable.subscribe((value) => {
4
+ mut_buffer.push(value);
5
+ }, () => {
6
+ resolve(mut_buffer);
7
+ });
11
8
  });
12
-
13
- export { collectToArray };
14
- //# sourceMappingURL=collect-to-array.mjs.map
9
+ //# sourceMappingURL=collect-to-array.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"collect-to-array.mjs","sources":["../../src/utils/collect-to-array.mts"],"sourcesContent":["import { type Observable } from '../core/index.mjs';\n\nexport const collectToArray = <A,>(\n observable: Observable<A>,\n): Promise<readonly A[]> =>\n new Promise<readonly A[]>((resolve) => {\n const mut_buffer: A[] = [];\n\n observable.subscribe(\n (value) => {\n mut_buffer.push(value);\n },\n () => {\n resolve(mut_buffer);\n },\n );\n });\n"],"names":[],"mappings":"AAEO,MAAM,iBAAiB,CAC5B,UAAA,KAEA,IAAI,OAAA,CAAsB,CAAC,OAAA,KAAY;AACrC,EAAA,MAAM,aAAkB,EAAC;AAEzB,EAAA,UAAA,CAAW,SAAA;AAAA,IACT,CAAC,KAAA,KAAU;AACT,MAAA,UAAA,CAAW,KAAK,KAAK,CAAA;AAAA,IACvB,CAAA;AAAA,IACA,MAAM;AACJ,MAAA,OAAA,CAAQ,UAAU,CAAA;AAAA,IACpB;AAAA,GACF;AACF,CAAC;;;;"}
1
+ {"version":3,"file":"collect-to-array.mjs","sourceRoot":"","sources":["../../src/utils/collect-to-array.mts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,UAAyB,EACF,EAAE,CACzB,IAAI,OAAO,CAAe,CAAC,OAAO,EAAE,EAAE;IACpC,MAAM,UAAU,GAAQ,EAAE,CAAC;IAE3B,UAAU,CAAC,SAAS,CAClB,CAAC,KAAK,EAAE,EAAE;QACR,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,EACD,GAAG,EAAE;QACH,OAAO,CAAC,UAAU,CAAC,CAAC;IACtB,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -1,25 +1,50 @@
1
1
  import { createState } from './create-state.mjs';
2
2
 
3
- const createBooleanState = (initialState) => {
4
- const [state, setState, { updateState, resetState, getSnapshot }] = createState(initialState);
5
- return [
6
- state,
7
- {
8
- setTrue: () => {
9
- setState(true);
10
- },
11
- setFalse: () => {
12
- setState(false);
13
- },
14
- toggle: () => updateState((s) => !s),
15
- setState,
16
- updateState,
17
- resetState,
18
- getSnapshot,
19
- initialState
20
- }
21
- ];
22
- };
23
3
 
24
- export { createBooleanState };
25
- //# sourceMappingURL=create-boolean-state.mjs.map
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+ export const createBooleanState = (initialState) => {
31
+ const [state, setState, { updateState, resetState, getSnapshot }] = createState(initialState);
32
+ return [
33
+ state,
34
+ {
35
+ setTrue: () => {
36
+ setState(true);
37
+ },
38
+ setFalse: () => {
39
+ setState(false);
40
+ },
41
+ toggle: () => updateState((s) => !s),
42
+ setState,
43
+ updateState,
44
+ resetState,
45
+ getSnapshot,
46
+ initialState,
47
+ },
48
+ ];
49
+ };
50
+ //# sourceMappingURL=create-boolean-state.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-boolean-state.mjs","sources":["../../src/utils/create-boolean-state.mts"],"sourcesContent":["import { type InitializedObservable } from '../core/index.mjs';\nimport { createState } from './create-state.mjs';\n\n/**\n * Creates a reactive boolean state with convenient methods for boolean operations.\n * Extends `createState` with boolean-specific helpers like `toggle`, `setTrue`, and `setFalse`.\n *\n * @param initialState - The initial boolean value\n * @returns A 2-element tuple: `[state, { setTrue, setFalse, toggle, setState, updateState, resetState, getSnapshot, initialState }]`\n *\n * @example\n * ```ts\n * import type * as React from 'react';\n * import { createBooleanState } from 'synstate';\n * import { useObservableValue } from 'synstate-react-hooks';\n *\n * // Menu drawer open/close state.\n * // setTrue and setFalse can be passed directly as callbacks\n * // — no need to create wrapper functions like `() => setState(true)`.\n * const [menuOpen$, { setTrue: openMenu, setFalse: closeMenu }] =\n * createBooleanState(false);\n *\n * const SampleComponent = (): React.JSX.Element => (\n * <MenuDrawer\n * open={useObservableValue(menuOpen$)}\n * onClose={closeMenu}\n * onOpen={openMenu}\n * />\n * );\n * ```\n */\n\nexport const createBooleanState = (\n initialState: boolean,\n): readonly [\n state: InitializedObservable<boolean>,\n utils: Readonly<{\n setTrue: () => void;\n setFalse: () => void;\n setState: (next: boolean) => boolean;\n toggle: () => boolean;\n updateState: (updateFn: (prev: boolean) => boolean) => boolean;\n resetState: () => boolean;\n getSnapshot: () => boolean;\n initialState: boolean;\n }>,\n] => {\n const [state, setState, { updateState, resetState, getSnapshot }] =\n createState(initialState);\n\n return [\n state,\n {\n setTrue: () => {\n setState(true);\n },\n setFalse: () => {\n setState(false);\n },\n toggle: () => updateState((s) => !s),\n setState,\n updateState,\n resetState,\n getSnapshot,\n initialState,\n },\n ] as const;\n};\n"],"names":[],"mappings":";;AAgCO,MAAM,kBAAA,GAAqB,CAChC,YAAA,KAaG;AACH,EAAA,MAAM,CAAC,KAAA,EAAO,QAAA,EAAU,EAAE,WAAA,EAAa,YAAY,WAAA,EAAa,CAAA,GAC9D,WAAA,CAAY,YAAY,CAAA;AAE1B,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA;AAAA,MACE,SAAS,MAAM;AACb,QAAA,QAAA,CAAS,IAAI,CAAA;AAAA,MACf,CAAA;AAAA,MACA,UAAU,MAAM;AACd,QAAA,QAAA,CAAS,KAAK,CAAA;AAAA,MAChB,CAAA;AAAA,MACA,QAAQ,MAAM,WAAA,CAAY,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,MACnC,QAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA;AACF,GACF;AACF;;;;"}
1
+ {"version":3,"file":"create-boolean-state.mjs","sourceRoot":"","sources":["../../src/utils/create-boolean-state.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,YAAqB,EAarB,EAAE;IACF,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,GAC/D,WAAW,CAAC,YAAY,CAAC,CAAC;IAE5B,OAAO;QACL,KAAK;QACL;YACE,OAAO,EAAE,GAAG,EAAE;gBACZ,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;YACD,QAAQ,EAAE,GAAG,EAAE;gBACb,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YACpC,QAAQ;YACR,WAAW;YACX,UAAU;YACV,WAAW;YACX,YAAY;SACb;KACO,CAAC;AACb,CAAC,CAAC"}
@@ -1,21 +1,69 @@
1
- import 'ts-data-forge';
2
- import '../core/utils/id-maker.mjs';
3
- import { source } from '../core/create/source.mjs';
4
-
5
- const createEventEmitter = () => {
6
- const src$ = source();
7
- const emitter = () => {
8
- src$.next(void 0);
9
- };
10
- return [src$, emitter];
11
- };
12
- const createValueEmitter = () => {
13
- const src$ = source();
14
- const emitter = (value) => {
15
- src$.next(value);
16
- };
17
- return [src$, emitter];
1
+ import { source } from '../core/index.mjs';
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+ export const createEventEmitter = () => {
30
+ const src$ = source();
31
+ const emitter = () => {
32
+ src$.next(undefined);
33
+ };
34
+ return [src$, emitter];
18
35
  };
19
36
 
20
- export { createEventEmitter, createValueEmitter };
21
- //# sourceMappingURL=create-event-emitter.mjs.map
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+ export const createValueEmitter = () => {
63
+ const src$ = source();
64
+ const emitter = (value) => {
65
+ src$.next(value);
66
+ };
67
+ return [src$, emitter];
68
+ };
69
+ //# sourceMappingURL=create-event-emitter.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-event-emitter.mjs","sources":["../../src/utils/create-event-emitter.mts"],"sourcesContent":["import { source, type Observable } from '../core/index.mjs';\n\n/**\n * Creates an event emitter for void events (events without payload).\n * Returns a tuple of [observable, emitter function].\n *\n * @returns A tuple containing the observable and the emitter function\n *\n * @example\n * ```ts\n * const [click$, emitClick] = createEventEmitter();\n *\n * const mut_clickCount = { value: 0 };\n *\n * click$.subscribe(() => {\n * mut_clickCount.value += 1;\n * });\n *\n * emitClick(); // logs: Clicked!\n *\n * assert.deepStrictEqual(mut_clickCount.value, 1);\n *\n * emitClick();\n *\n * emitClick();\n *\n * assert.deepStrictEqual(mut_clickCount.value, 3);\n * ```\n */\nexport const createEventEmitter = (): readonly [\n Observable<void>,\n () => void,\n] => {\n const src$ = source<undefined>();\n\n const emitter = (): void => {\n src$.next(undefined);\n };\n\n return [src$, emitter];\n};\n\n/**\n * Creates an event emitter with typed payload.\n * Returns a tuple of [observable, emitter function].\n *\n * @template A - The type of the event payload\n * @returns A tuple containing the observable and the emitter function\n *\n * @example\n * ```ts\n * const [message$, emitMessage] = createValueEmitter<string>();\n *\n * const messageHistory: string[] = [];\n *\n * message$.subscribe((msg) => {\n * messageHistory.push(msg);\n * });\n *\n * emitMessage('Hello'); // logs: Hello\n *\n * assert.deepStrictEqual(messageHistory, ['Hello']);\n *\n * emitMessage('World');\n *\n * assert.deepStrictEqual(messageHistory, ['Hello', 'World']);\n * ```\n */\nexport const createValueEmitter = <A,>(): readonly [\n Observable<A>,\n (value: A) => void,\n] => {\n const src$ = source<A>();\n\n const emitter = (value: A): void => {\n src$.next(value);\n };\n\n return [src$, emitter];\n};\n"],"names":[],"mappings":";;;;AA6BO,MAAM,qBAAqB,MAG7B;AACH,EAAA,MAAM,OAAO,MAAA,EAAkB;AAE/B,EAAA,MAAM,UAAU,MAAY;AAC1B,IAAA,IAAA,CAAK,KAAK,MAAS,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,OAAO,CAAC,MAAM,OAAO,CAAA;AACvB;AA4BO,MAAM,qBAAqB,MAG7B;AACH,EAAA,MAAM,OAAO,MAAA,EAAU;AAEvB,EAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAAmB;AAClC,IAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,OAAO,CAAC,MAAM,OAAO,CAAA;AACvB;;;;"}
1
+ {"version":3,"file":"create-event-emitter.mjs","sourceRoot":"","sources":["../../src/utils/create-event-emitter.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAmB,MAAM,mBAAmB,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAGhC,EAAE;IACF,MAAM,IAAI,GAAG,MAAM,EAAa,CAAC;IAEjC,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACzB,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAGhC,EAAE;IACF,MAAM,IAAI,GAAG,MAAM,EAAK,CAAC;IAEzB,MAAM,OAAO,GAAG,CAAC,KAAQ,EAAQ,EAAE;QACjC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACzB,CAAC,CAAC"}
@@ -1,17 +1,55 @@
1
- import 'ts-data-forge';
2
- import '../core/utils/id-maker.mjs';
3
- import { source } from '../core/create/source.mjs';
4
-
5
- const createReducer = (reducer, initialState) => {
6
- const state = source(initialState);
7
- const dispatch = (action) => {
8
- const nextState = reducer(state.getSnapshot().value, action);
9
- state.next(nextState);
10
- return nextState;
11
- };
12
- const getSnapshot = () => state.getSnapshot().value;
13
- return [state, dispatch, { getSnapshot, initialState }];
14
- };
1
+ import { source } from '../core/index.mjs';
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
15
23
 
16
- export { createReducer };
17
- //# sourceMappingURL=create-reducer.mjs.map
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+ export const createReducer = (reducer, initialState) => {
46
+ const state = source(initialState);
47
+ const dispatch = (action) => {
48
+ const nextState = reducer(state.getSnapshot().value, action);
49
+ state.next(nextState);
50
+ return nextState;
51
+ };
52
+ const getSnapshot = () => state.getSnapshot().value;
53
+ return [state, dispatch, { getSnapshot, initialState }];
54
+ };
55
+ //# sourceMappingURL=create-reducer.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-reducer.mjs","sources":["../../src/utils/create-reducer.mts"],"sourcesContent":["import { type Reducer } from 'ts-type-forge';\nimport { source, type InitializedObservable } from '../core/index.mjs';\n\n/**\n * Creates a reducer-based state management container following the Redux pattern.\n * Actions are dispatched to update the state according to the reducer function.\n *\n * @template S - The type of the state\n * @template A - The type of actions\n * @param reducer - A pure function that takes current state and action, returns new state\n * @param initialState - The initial value of the state\n * @returns A 3-element tuple: `[state, dispatch, { getSnapshot, initialState }]`\n *\n * @example\n * ```ts\n * const [state, dispatch] = createReducer(\n * (s, action: Readonly<{ type: 'increment' } | { type: 'decrement' }>) => {\n * switch (action.type) {\n * case 'increment':\n * return s + 1;\n * case 'decrement':\n * return s - 1;\n * }\n * },\n * 0,\n * );\n *\n * const stateHistory: number[] = [];\n *\n * state.subscribe((value: number) => {\n * stateHistory.push(value);\n * });\n *\n * assert.deepStrictEqual(stateHistory, [0]);\n *\n * dispatch({ type: 'increment' }); // logs: 1\n *\n * assert.deepStrictEqual(stateHistory, [0, 1]);\n *\n * dispatch({ type: 'increment' });\n *\n * dispatch({ type: 'decrement' });\n *\n * assert.deepStrictEqual(stateHistory, [0, 1, 2, 1]);\n * ```\n */\nexport const createReducer = <S, A>(\n reducer: Reducer<S, A>,\n initialState: S,\n): readonly [\n state: InitializedObservable<S>,\n dispatch: (action: A) => S,\n utils: Readonly<{\n getSnapshot: () => S;\n initialState: S;\n }>,\n] => {\n const state = source<S>(initialState);\n\n const dispatch = (action: A): S => {\n const nextState = reducer(state.getSnapshot().value, action);\n\n state.next(nextState);\n\n return nextState;\n };\n\n const getSnapshot = (): S => state.getSnapshot().value;\n\n return [state, dispatch, { getSnapshot, initialState }] as const;\n};\n"],"names":[],"mappings":";;;;AA8CO,MAAM,aAAA,GAAgB,CAC3B,OAAA,EACA,YAAA,KAQG;AACH,EAAA,MAAM,KAAA,GAAQ,OAAU,YAAY,CAAA;AAEpC,EAAA,MAAM,QAAA,GAAW,CAAC,MAAA,KAAiB;AACjC,IAAA,MAAM,YAAY,OAAA,CAAQ,KAAA,CAAM,WAAA,EAAY,CAAE,OAAO,MAAM,CAAA;AAE3D,IAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AAEpB,IAAA,OAAO,SAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,MAAS,KAAA,CAAM,WAAA,EAAY,CAAE,KAAA;AAEjD,EAAA,OAAO,CAAC,KAAA,EAAO,QAAA,EAAU,EAAE,WAAA,EAAa,cAAc,CAAA;AACxD;;;;"}
1
+ {"version":3,"file":"create-reducer.mjs","sourceRoot":"","sources":["../../src/utils/create-reducer.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAA8B,MAAM,mBAAmB,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAAsB,EACtB,YAAe,EAQf,EAAE;IACF,MAAM,KAAK,GAAG,MAAM,CAAI,YAAY,CAAC,CAAC;IAEtC,MAAM,QAAQ,GAAG,CAAC,MAAS,EAAK,EAAE;QAChC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAE7D,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEtB,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;IAEvD,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAU,CAAC;AACnE,CAAC,CAAC"}