synstate 0.1.2 → 1.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 (323) hide show
  1. package/README.md +200 -147
  2. package/assets/old/synstate-icon-square.png +0 -0
  3. package/assets/synstate-logo.png +0 -0
  4. package/dist/core/class/child-observable-class.d.mts +2 -0
  5. package/dist/core/class/child-observable-class.d.mts.map +1 -1
  6. package/dist/core/class/child-observable-class.mjs +44 -13
  7. package/dist/core/class/child-observable-class.mjs.map +1 -1
  8. package/dist/core/class/observable-base-class.d.mts +4 -4
  9. package/dist/core/class/observable-base-class.d.mts.map +1 -1
  10. package/dist/core/class/observable-base-class.mjs +8 -8
  11. package/dist/core/class/observable-base-class.mjs.map +1 -1
  12. package/dist/core/class/root-observable-class.d.mts +3 -1
  13. package/dist/core/class/root-observable-class.d.mts.map +1 -1
  14. package/dist/core/class/root-observable-class.mjs +9 -9
  15. package/dist/core/class/root-observable-class.mjs.map +1 -1
  16. package/dist/core/combine/combine.d.mts +7 -6
  17. package/dist/core/combine/combine.d.mts.map +1 -1
  18. package/dist/core/combine/combine.mjs +11 -12
  19. package/dist/core/combine/combine.mjs.map +1 -1
  20. package/dist/core/combine/merge.d.mts +7 -6
  21. package/dist/core/combine/merge.d.mts.map +1 -1
  22. package/dist/core/combine/merge.mjs +9 -9
  23. package/dist/core/combine/merge.mjs.map +1 -1
  24. package/dist/core/combine/zip.d.mts +21 -19
  25. package/dist/core/combine/zip.d.mts.map +1 -1
  26. package/dist/core/combine/zip.mjs +22 -21
  27. package/dist/core/combine/zip.mjs.map +1 -1
  28. package/dist/core/create/{interval.d.mts → counter.d.mts} +14 -12
  29. package/dist/core/create/counter.d.mts.map +1 -0
  30. package/dist/core/create/{interval.mjs → counter.mjs} +21 -23
  31. package/dist/core/create/counter.mjs.map +1 -0
  32. package/dist/core/create/from-abortable-promise.d.mts +29 -0
  33. package/dist/core/create/from-abortable-promise.d.mts.map +1 -0
  34. package/dist/core/create/from-abortable-promise.mjs +70 -0
  35. package/dist/core/create/from-abortable-promise.mjs.map +1 -0
  36. package/dist/core/create/from-promise.d.mts +9 -6
  37. package/dist/core/create/from-promise.d.mts.map +1 -1
  38. package/dist/core/create/from-promise.mjs +8 -5
  39. package/dist/core/create/from-promise.mjs.map +1 -1
  40. package/dist/core/create/from-subscribable.d.mts +4 -4
  41. package/dist/core/create/from-subscribable.mjs +4 -4
  42. package/dist/core/create/index.d.mts +3 -3
  43. package/dist/core/create/index.d.mts.map +1 -1
  44. package/dist/core/create/index.mjs +4 -4
  45. package/dist/core/create/just.d.mts +32 -0
  46. package/dist/core/create/just.d.mts.map +1 -0
  47. package/dist/core/create/just.mjs +44 -0
  48. package/dist/core/create/just.mjs.map +1 -0
  49. package/dist/core/create/source.d.mts +7 -12
  50. package/dist/core/create/source.d.mts.map +1 -1
  51. package/dist/core/create/source.mjs +1 -6
  52. package/dist/core/create/source.mjs.map +1 -1
  53. package/dist/core/create/timer.d.mts +6 -4
  54. package/dist/core/create/timer.d.mts.map +1 -1
  55. package/dist/core/create/timer.mjs +6 -7
  56. package/dist/core/create/timer.mjs.map +1 -1
  57. package/dist/core/index.d.mts +0 -1
  58. package/dist/core/index.d.mts.map +1 -1
  59. package/dist/core/index.mjs +8 -13
  60. package/dist/core/index.mjs.map +1 -1
  61. package/dist/core/operators/audit.d.mts +97 -0
  62. package/dist/core/operators/audit.d.mts.map +1 -0
  63. package/dist/core/operators/audit.mjs +144 -0
  64. package/dist/core/operators/audit.mjs.map +1 -0
  65. package/dist/core/operators/debounce.d.mts +88 -0
  66. package/dist/core/operators/debounce.d.mts.map +1 -0
  67. package/dist/core/operators/debounce.mjs +130 -0
  68. package/dist/core/operators/debounce.mjs.map +1 -0
  69. package/dist/core/operators/filter.d.mts +6 -5
  70. package/dist/core/operators/filter.d.mts.map +1 -1
  71. package/dist/core/operators/filter.mjs +3 -3
  72. package/dist/core/operators/filter.mjs.map +1 -1
  73. package/dist/core/operators/index.d.mts +4 -4
  74. package/dist/core/operators/index.d.mts.map +1 -1
  75. package/dist/core/operators/index.mjs +4 -4
  76. package/dist/core/operators/{map-with-index.d.mts → map.d.mts} +12 -11
  77. package/dist/core/operators/map.d.mts.map +1 -0
  78. package/dist/core/operators/{map-with-index.mjs → map.mjs} +17 -17
  79. package/dist/core/operators/map.mjs.map +1 -0
  80. package/dist/core/operators/merge-map.d.mts +56 -29
  81. package/dist/core/operators/merge-map.d.mts.map +1 -1
  82. package/dist/core/operators/merge-map.mjs +58 -31
  83. package/dist/core/operators/merge-map.mjs.map +1 -1
  84. package/dist/core/operators/pairwise.d.mts +6 -6
  85. package/dist/core/operators/pairwise.mjs +9 -9
  86. package/dist/core/operators/pairwise.mjs.map +1 -1
  87. package/dist/core/operators/scan.d.mts +6 -6
  88. package/dist/core/operators/scan.mjs +9 -9
  89. package/dist/core/operators/scan.mjs.map +1 -1
  90. package/dist/core/operators/skip-if-no-change.d.mts +20 -8
  91. package/dist/core/operators/skip-if-no-change.d.mts.map +1 -1
  92. package/dist/core/operators/skip-if-no-change.mjs +23 -11
  93. package/dist/core/operators/skip-if-no-change.mjs.map +1 -1
  94. package/dist/core/operators/skip-until.d.mts +5 -5
  95. package/dist/core/operators/skip-until.mjs +8 -8
  96. package/dist/core/operators/skip-until.mjs.map +1 -1
  97. package/dist/core/operators/skip-while.d.mts +19 -8
  98. package/dist/core/operators/skip-while.d.mts.map +1 -1
  99. package/dist/core/operators/skip-while.mjs +26 -11
  100. package/dist/core/operators/skip-while.mjs.map +1 -1
  101. package/dist/core/operators/switch-map.d.mts +57 -26
  102. package/dist/core/operators/switch-map.d.mts.map +1 -1
  103. package/dist/core/operators/switch-map.mjs +59 -28
  104. package/dist/core/operators/switch-map.mjs.map +1 -1
  105. package/dist/core/operators/take-until.d.mts +5 -5
  106. package/dist/core/operators/take-until.mjs +8 -8
  107. package/dist/core/operators/take-until.mjs.map +1 -1
  108. package/dist/core/operators/take-while.d.mts +16 -7
  109. package/dist/core/operators/take-while.d.mts.map +1 -1
  110. package/dist/core/operators/take-while.mjs +18 -10
  111. package/dist/core/operators/take-while.mjs.map +1 -1
  112. package/dist/core/operators/throttle.d.mts +81 -0
  113. package/dist/core/operators/throttle.d.mts.map +1 -0
  114. package/dist/core/operators/throttle.mjs +126 -0
  115. package/dist/core/operators/throttle.mjs.map +1 -0
  116. package/dist/core/operators/with-buffered-from.d.mts +9 -9
  117. package/dist/core/operators/with-buffered-from.mjs +12 -12
  118. package/dist/core/operators/with-buffered-from.mjs.map +1 -1
  119. package/dist/core/operators/with-current-value-from.d.mts +10 -9
  120. package/dist/core/operators/with-current-value-from.d.mts.map +1 -1
  121. package/dist/core/operators/with-current-value-from.mjs +13 -12
  122. package/dist/core/operators/with-current-value-from.mjs.map +1 -1
  123. package/dist/core/operators/with-initial-value.d.mts +5 -5
  124. package/dist/core/operators/with-initial-value.mjs +8 -8
  125. package/dist/core/operators/with-initial-value.mjs.map +1 -1
  126. package/dist/core/predefined/index.mjs +0 -1
  127. package/dist/core/predefined/index.mjs.map +1 -1
  128. package/dist/core/predefined/operators/attach-index.d.mts +50 -0
  129. package/dist/core/predefined/operators/attach-index.d.mts.map +1 -1
  130. package/dist/core/predefined/operators/attach-index.mjs +51 -2
  131. package/dist/core/predefined/operators/attach-index.mjs.map +1 -1
  132. package/dist/core/predefined/operators/index.d.mts +0 -1
  133. package/dist/core/predefined/operators/index.d.mts.map +1 -1
  134. package/dist/core/predefined/operators/index.mjs +0 -1
  135. package/dist/core/predefined/operators/index.mjs.map +1 -1
  136. package/dist/core/predefined/operators/map-optional.d.mts +48 -1
  137. package/dist/core/predefined/operators/map-optional.d.mts.map +1 -1
  138. package/dist/core/predefined/operators/map-optional.mjs +49 -1
  139. package/dist/core/predefined/operators/map-optional.mjs.map +1 -1
  140. package/dist/core/predefined/operators/map-result-err.d.mts +48 -1
  141. package/dist/core/predefined/operators/map-result-err.d.mts.map +1 -1
  142. package/dist/core/predefined/operators/map-result-err.mjs +49 -1
  143. package/dist/core/predefined/operators/map-result-err.mjs.map +1 -1
  144. package/dist/core/predefined/operators/map-result-ok.d.mts +48 -1
  145. package/dist/core/predefined/operators/map-result-ok.d.mts.map +1 -1
  146. package/dist/core/predefined/operators/map-result-ok.mjs +49 -1
  147. package/dist/core/predefined/operators/map-result-ok.mjs.map +1 -1
  148. package/dist/core/predefined/operators/map-to.d.mts +40 -0
  149. package/dist/core/predefined/operators/map-to.d.mts.map +1 -1
  150. package/dist/core/predefined/operators/map-to.mjs +43 -1
  151. package/dist/core/predefined/operators/map-to.mjs.map +1 -1
  152. package/dist/core/predefined/operators/pluck.d.mts +39 -0
  153. package/dist/core/predefined/operators/pluck.d.mts.map +1 -1
  154. package/dist/core/predefined/operators/pluck.mjs +42 -1
  155. package/dist/core/predefined/operators/pluck.mjs.map +1 -1
  156. package/dist/core/predefined/operators/skip.d.mts +48 -0
  157. package/dist/core/predefined/operators/skip.d.mts.map +1 -1
  158. package/dist/core/predefined/operators/skip.mjs +47 -0
  159. package/dist/core/predefined/operators/skip.mjs.map +1 -1
  160. package/dist/core/predefined/operators/take.d.mts +42 -0
  161. package/dist/core/predefined/operators/take.d.mts.map +1 -1
  162. package/dist/core/predefined/operators/take.mjs +41 -0
  163. package/dist/core/predefined/operators/take.mjs.map +1 -1
  164. package/dist/core/predefined/operators/unwrap-optional.d.mts +41 -1
  165. package/dist/core/predefined/operators/unwrap-optional.d.mts.map +1 -1
  166. package/dist/core/predefined/operators/unwrap-optional.mjs +42 -1
  167. package/dist/core/predefined/operators/unwrap-optional.mjs.map +1 -1
  168. package/dist/core/predefined/operators/unwrap-result-err.d.mts +41 -1
  169. package/dist/core/predefined/operators/unwrap-result-err.d.mts.map +1 -1
  170. package/dist/core/predefined/operators/unwrap-result-err.mjs +42 -1
  171. package/dist/core/predefined/operators/unwrap-result-err.mjs.map +1 -1
  172. package/dist/core/predefined/operators/unwrap-result-ok.d.mts +41 -1
  173. package/dist/core/predefined/operators/unwrap-result-ok.d.mts.map +1 -1
  174. package/dist/core/predefined/operators/unwrap-result-ok.mjs +42 -1
  175. package/dist/core/predefined/operators/unwrap-result-ok.mjs.map +1 -1
  176. package/dist/core/types/id.d.mts +2 -1
  177. package/dist/core/types/id.d.mts.map +1 -1
  178. package/dist/core/types/index.d.mts +1 -0
  179. package/dist/core/types/index.d.mts.map +1 -1
  180. package/dist/core/types/observable-family.d.mts +10 -14
  181. package/dist/core/types/observable-family.d.mts.map +1 -1
  182. package/dist/core/types/observable-kind.d.mts +1 -0
  183. package/dist/core/types/observable-kind.d.mts.map +1 -1
  184. package/dist/core/types/observable.d.mts +5 -3
  185. package/dist/core/types/observable.d.mts.map +1 -1
  186. package/dist/core/types/observable.mjs.map +1 -1
  187. package/dist/core/types/timer.d.mts +2 -0
  188. package/dist/core/types/timer.d.mts.map +1 -0
  189. package/dist/core/types/timer.mjs +2 -0
  190. package/dist/core/types/timer.mjs.map +1 -0
  191. package/dist/core/utils/id-maker.d.mts +2 -2
  192. package/dist/core/utils/id-maker.d.mts.map +1 -1
  193. package/dist/core/utils/id-maker.mjs +3 -3
  194. package/dist/core/utils/id-maker.mjs.map +1 -1
  195. package/dist/core/utils/index.mjs +1 -1
  196. package/dist/core/utils/utils.d.mts +2 -0
  197. package/dist/core/utils/utils.d.mts.map +1 -1
  198. package/dist/core/utils/utils.mjs.map +1 -1
  199. package/dist/entry-point.mjs +11 -14
  200. package/dist/entry-point.mjs.map +1 -1
  201. package/dist/index.mjs +11 -14
  202. package/dist/index.mjs.map +1 -1
  203. package/dist/types.d.mts +1 -2
  204. package/dist/utils/collect-to-array.d.mts +3 -0
  205. package/dist/utils/collect-to-array.d.mts.map +1 -0
  206. package/dist/utils/collect-to-array.mjs +11 -0
  207. package/dist/utils/collect-to-array.mjs.map +1 -0
  208. package/dist/utils/create-boolean-state.d.mts +40 -0
  209. package/dist/utils/create-boolean-state.d.mts.map +1 -0
  210. package/dist/utils/create-boolean-state.mjs +53 -0
  211. package/dist/utils/create-boolean-state.mjs.map +1 -0
  212. package/dist/utils/create-event-emitter.d.mts +4 -4
  213. package/dist/utils/create-event-emitter.mjs +4 -4
  214. package/dist/utils/create-reducer.d.mts +11 -7
  215. package/dist/utils/create-reducer.d.mts.map +1 -1
  216. package/dist/utils/create-reducer.mjs +7 -7
  217. package/dist/utils/create-reducer.mjs.map +1 -1
  218. package/dist/utils/create-state.d.mts +8 -48
  219. package/dist/utils/create-state.d.mts.map +1 -1
  220. package/dist/utils/create-state.mjs +10 -60
  221. package/dist/utils/create-state.mjs.map +1 -1
  222. package/dist/utils/index.d.mts +2 -0
  223. package/dist/utils/index.d.mts.map +1 -1
  224. package/dist/utils/index.mjs +3 -1
  225. package/dist/utils/index.mjs.map +1 -1
  226. package/package.json +21 -14
  227. package/src/core/class/child-observable-class.mts +68 -14
  228. package/src/core/class/circular-dependency-comparison.test.mts +142 -0
  229. package/src/core/class/circular-dependency.test.mts +251 -0
  230. package/src/core/class/observable-base-class.mts +10 -9
  231. package/src/core/class/root-observable-class.mts +15 -10
  232. package/src/core/combine/combine.mts +14 -13
  233. package/src/core/combine/merge.mts +14 -14
  234. package/src/core/combine/zip.mts +27 -25
  235. package/src/core/create/{interval.mts → counter.mts} +32 -30
  236. package/src/core/create/from-abortable-promise.mts +83 -0
  237. package/src/core/create/from-promise.mts +10 -7
  238. package/src/core/create/from-subscribable.mts +4 -4
  239. package/src/core/create/index.mts +3 -3
  240. package/src/core/create/just.mts +43 -0
  241. package/src/core/create/source.mts +10 -14
  242. package/src/core/create/timer.mts +12 -11
  243. package/src/core/index.mts +0 -1
  244. package/src/core/operators/audit.mts +172 -0
  245. package/src/core/operators/debounce.mts +154 -0
  246. package/src/core/operators/filter.mts +9 -9
  247. package/src/core/operators/index.mts +4 -4
  248. package/src/core/operators/{map-with-index.mts → map.mts} +20 -20
  249. package/src/core/operators/merge-map.mts +59 -32
  250. package/src/core/operators/pairwise.mts +10 -10
  251. package/src/core/operators/scan.mts +10 -10
  252. package/src/core/operators/skip-if-no-change.mts +24 -12
  253. package/src/core/operators/skip-until.mts +9 -9
  254. package/src/core/operators/skip-while.mts +29 -12
  255. package/src/core/operators/switch-map.mts +60 -29
  256. package/src/core/operators/take-until.mts +9 -9
  257. package/src/core/operators/take-while.mts +19 -11
  258. package/src/core/operators/{throttle-time.mts → throttle.mts} +58 -38
  259. package/src/core/operators/with-buffered-from.mts +13 -13
  260. package/src/core/operators/with-current-value-from.mts +14 -13
  261. package/src/core/operators/with-initial-value.mts +9 -9
  262. package/src/core/predefined/operators/attach-index.mts +52 -2
  263. package/src/core/predefined/operators/index.mts +0 -1
  264. package/src/core/predefined/operators/map-optional.mts +49 -2
  265. package/src/core/predefined/operators/map-result-err.mts +49 -2
  266. package/src/core/predefined/operators/map-result-ok.mts +49 -2
  267. package/src/core/predefined/operators/map-to.mts +41 -1
  268. package/src/core/predefined/operators/pluck.mts +40 -1
  269. package/src/core/predefined/operators/skip.mts +48 -0
  270. package/src/core/predefined/operators/take.mts +42 -0
  271. package/src/core/predefined/operators/unwrap-optional.mts +43 -2
  272. package/src/core/predefined/operators/unwrap-result-err.mts +43 -2
  273. package/src/core/predefined/operators/unwrap-result-ok.mts +43 -2
  274. package/src/core/types/id.mts +3 -1
  275. package/src/core/types/index.mts +1 -0
  276. package/src/core/types/observable-family.mts +13 -24
  277. package/src/core/types/observable-kind.mts +2 -0
  278. package/src/core/types/observable.mts +5 -4
  279. package/src/core/types/timer.mts +2 -0
  280. package/src/core/utils/id-maker.mts +4 -4
  281. package/src/core/utils/utils.mts +1 -0
  282. package/src/utils/collect-to-array.mts +17 -0
  283. package/src/utils/create-boolean-state.mts +68 -0
  284. package/src/utils/create-event-emitter.mts +4 -4
  285. package/src/utils/create-reducer.mts +12 -8
  286. package/src/utils/create-state.mts +10 -75
  287. package/src/utils/index.mts +2 -0
  288. package/dist/core/create/from-array.d.mts +0 -39
  289. package/dist/core/create/from-array.d.mts.map +0 -1
  290. package/dist/core/create/from-array.mjs +0 -65
  291. package/dist/core/create/from-array.mjs.map +0 -1
  292. package/dist/core/create/interval.d.mts.map +0 -1
  293. package/dist/core/create/interval.mjs.map +0 -1
  294. package/dist/core/create/of.d.mts +0 -39
  295. package/dist/core/create/of.d.mts.map +0 -1
  296. package/dist/core/create/of.mjs +0 -63
  297. package/dist/core/create/of.mjs.map +0 -1
  298. package/dist/core/operators/audit-time.d.mts +0 -62
  299. package/dist/core/operators/audit-time.d.mts.map +0 -1
  300. package/dist/core/operators/audit-time.mjs +0 -109
  301. package/dist/core/operators/audit-time.mjs.map +0 -1
  302. package/dist/core/operators/debounce-time.d.mts +0 -51
  303. package/dist/core/operators/debounce-time.d.mts.map +0 -1
  304. package/dist/core/operators/debounce-time.mjs +0 -93
  305. package/dist/core/operators/debounce-time.mjs.map +0 -1
  306. package/dist/core/operators/map-with-index.d.mts.map +0 -1
  307. package/dist/core/operators/map-with-index.mjs.map +0 -1
  308. package/dist/core/operators/throttle-time.d.mts +0 -62
  309. package/dist/core/operators/throttle-time.d.mts.map +0 -1
  310. package/dist/core/operators/throttle-time.mjs +0 -107
  311. package/dist/core/operators/throttle-time.mjs.map +0 -1
  312. package/dist/core/predefined/operators/map.d.mts +0 -3
  313. package/dist/core/predefined/operators/map.d.mts.map +0 -1
  314. package/dist/core/predefined/operators/map.mjs +0 -8
  315. package/dist/core/predefined/operators/map.mjs.map +0 -1
  316. package/dist/globals.d.mts +0 -4
  317. package/src/core/create/from-array.mts +0 -76
  318. package/src/core/create/of.mts +0 -73
  319. package/src/core/operators/audit-time.mts +0 -136
  320. package/src/core/operators/debounce-time.mts +0 -116
  321. package/src/core/predefined/operators/map.mts +0 -5
  322. package/src/globals.d.mts +0 -4
  323. /package/assets/{synstate-icon.png → old/synstate-icon.png} +0 -0
@@ -0,0 +1,3 @@
1
+ import { type Observable } from '../core/index.mjs';
2
+ export declare const collectToArray: <A>(observable: Observable<A>) => Promise<readonly A[]>;
3
+ //# sourceMappingURL=collect-to-array.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collect-to-array.d.mts","sourceRoot":"","sources":["../../src/utils/collect-to-array.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,eAAO,MAAM,cAAc,GAAI,CAAC,EAC9B,YAAY,UAAU,CAAC,CAAC,CAAC,KACxB,OAAO,CAAC,SAAS,CAAC,EAAE,CAYnB,CAAC"}
@@ -0,0 +1,11 @@
1
+ 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
+ });
8
+ });
9
+
10
+ export { collectToArray };
11
+ //# sourceMappingURL=collect-to-array.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collect-to-array.mjs","sources":["../../src/utils/collect-to-array.mts"],"sourcesContent":[null],"names":[],"mappings":"AAEO,MAAM,cAAc,GAAG,CAC5B,UAAyB,KAEzB,IAAI,OAAO,CAAe,CAAC,OAAO,KAAI;IACpC,MAAM,UAAU,GAAQ,EAAE;AAE1B,IAAA,UAAU,CAAC,SAAS,CAClB,CAAC,KAAK,KAAI;AACR,QAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IACxB,CAAC,EACD,MAAK;QACH,OAAO,CAAC,UAAU,CAAC;AACrB,IAAA,CAAC,CACF;AACH,CAAC;;;;"}
@@ -0,0 +1,40 @@
1
+ import { type InitializedObservable } from '../core/index.mjs';
2
+ /**
3
+ * Creates a reactive boolean state with convenient methods for boolean operations.
4
+ * Extends `createState` with boolean-specific helpers like `toggle`, `setTrue`, and `setFalse`.
5
+ *
6
+ * @param initialState - The initial boolean value
7
+ * @returns A 2-element tuple: `[state, { setTrue, setFalse, toggle, setState, updateState, resetState, getSnapshot, initialState }]`
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import type * as React from 'react';
12
+ * import { createBooleanState } from 'synstate';
13
+ * import { useObservableValue } from 'synstate-react-hooks';
14
+ *
15
+ * // Menu drawer open/close state.
16
+ * // setTrue and setFalse can be passed directly as callbacks
17
+ * // — no need to create wrapper functions like `() => setState(true)`.
18
+ * const [menuOpen$, { setTrue: openMenu, setFalse: closeMenu }] =
19
+ * createBooleanState(false);
20
+ *
21
+ * const SampleComponent = (): React.JSX.Element => (
22
+ * <MenuDrawer
23
+ * open={useObservableValue(menuOpen$)}
24
+ * onClose={closeMenu}
25
+ * onOpen={openMenu}
26
+ * />
27
+ * );
28
+ * ```
29
+ */
30
+ export declare const createBooleanState: (initialState: boolean) => readonly [state: InitializedObservable<boolean>, Readonly<{
31
+ setTrue: () => void;
32
+ setFalse: () => void;
33
+ setState: (next: boolean) => boolean;
34
+ toggle: () => boolean;
35
+ updateState: (updateFn: (prev: boolean) => boolean) => boolean;
36
+ resetState: () => boolean;
37
+ getSnapshot: () => boolean;
38
+ initialState: boolean;
39
+ }>];
40
+ //# sourceMappingURL=create-boolean-state.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-boolean-state.d.mts","sourceRoot":"","sources":["../../src/utils/create-boolean-state.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAG/D;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,eAAO,MAAM,kBAAkB,GAC7B,cAAc,OAAO,KACpB,SAAS,CACV,KAAK,EAAE,qBAAqB,CAAC,OAAO,CAAC,EACrC,QAAQ,CAAC;IACP,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;IACrC,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,KAAK,OAAO,CAAC;IAC/D,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,WAAW,EAAE,MAAM,OAAO,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC,CAsBH,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { createState } from './create-state.mjs';
2
+
3
+ /**
4
+ * Creates a reactive boolean state with convenient methods for boolean operations.
5
+ * Extends `createState` with boolean-specific helpers like `toggle`, `setTrue`, and `setFalse`.
6
+ *
7
+ * @param initialState - The initial boolean value
8
+ * @returns A 2-element tuple: `[state, { setTrue, setFalse, toggle, setState, updateState, resetState, getSnapshot, initialState }]`
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import type * as React from 'react';
13
+ * import { createBooleanState } from 'synstate';
14
+ * import { useObservableValue } from 'synstate-react-hooks';
15
+ *
16
+ * // Menu drawer open/close state.
17
+ * // setTrue and setFalse can be passed directly as callbacks
18
+ * // — no need to create wrapper functions like `() => setState(true)`.
19
+ * const [menuOpen$, { setTrue: openMenu, setFalse: closeMenu }] =
20
+ * createBooleanState(false);
21
+ *
22
+ * const SampleComponent = (): React.JSX.Element => (
23
+ * <MenuDrawer
24
+ * open={useObservableValue(menuOpen$)}
25
+ * onClose={closeMenu}
26
+ * onOpen={openMenu}
27
+ * />
28
+ * );
29
+ * ```
30
+ */
31
+ const createBooleanState = (initialState) => {
32
+ const [state, setState, { updateState, resetState, getSnapshot }] = createState(initialState);
33
+ return [
34
+ state,
35
+ {
36
+ setTrue: () => {
37
+ setState(true);
38
+ },
39
+ setFalse: () => {
40
+ setState(false);
41
+ },
42
+ toggle: () => updateState((s) => !s),
43
+ setState,
44
+ updateState,
45
+ resetState,
46
+ getSnapshot,
47
+ initialState,
48
+ },
49
+ ];
50
+ };
51
+
52
+ export { createBooleanState };
53
+ //# sourceMappingURL=create-boolean-state.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-boolean-state.mjs","sources":["../../src/utils/create-boolean-state.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;AAEI,MAAM,kBAAkB,GAAG,CAChC,YAAqB,KAanB;AACF,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,GAC/D,WAAW,CAAC,YAAY,CAAC;IAE3B,OAAO;QACL,KAAK;AACL,QAAA;YACE,OAAO,EAAE,MAAK;gBACZ,QAAQ,CAAC,IAAI,CAAC;YAChB,CAAC;YACD,QAAQ,EAAE,MAAK;gBACb,QAAQ,CAAC,KAAK,CAAC;YACjB,CAAC;AACD,YAAA,MAAM,EAAE,MAAM,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACpC,QAAQ;YACR,WAAW;YACX,UAAU;YACV,WAAW;YACX,YAAY;AACb,SAAA;KACO;AACZ;;;;"}
@@ -38,19 +38,19 @@ export declare const createEventEmitter: () => readonly [Observable<void>, () =>
38
38
  * ```ts
39
39
  * const [message$, emitMessage] = createValueEmitter<string>();
40
40
  *
41
- * const mut_history: string[] = [];
41
+ * const messageHistory: string[] = [];
42
42
  *
43
43
  * message$.subscribe((msg) => {
44
- * mut_history.push(msg);
44
+ * messageHistory.push(msg);
45
45
  * });
46
46
  *
47
47
  * emitMessage('Hello'); // logs: Hello
48
48
  *
49
- * assert.deepStrictEqual(mut_history, ['Hello']);
49
+ * assert.deepStrictEqual(messageHistory, ['Hello']);
50
50
  *
51
51
  * emitMessage('World');
52
52
  *
53
- * assert.deepStrictEqual(mut_history, ['Hello', 'World']);
53
+ * assert.deepStrictEqual(messageHistory, ['Hello', 'World']);
54
54
  * ```
55
55
  */
56
56
  export declare const createValueEmitter: <A>() => readonly [Observable<A>, (value: A) => void];
@@ -48,19 +48,19 @@ const createEventEmitter = () => {
48
48
  * ```ts
49
49
  * const [message$, emitMessage] = createValueEmitter<string>();
50
50
  *
51
- * const mut_history: string[] = [];
51
+ * const messageHistory: string[] = [];
52
52
  *
53
53
  * message$.subscribe((msg) => {
54
- * mut_history.push(msg);
54
+ * messageHistory.push(msg);
55
55
  * });
56
56
  *
57
57
  * emitMessage('Hello'); // logs: Hello
58
58
  *
59
- * assert.deepStrictEqual(mut_history, ['Hello']);
59
+ * assert.deepStrictEqual(messageHistory, ['Hello']);
60
60
  *
61
61
  * emitMessage('World');
62
62
  *
63
- * assert.deepStrictEqual(mut_history, ['Hello', 'World']);
63
+ * assert.deepStrictEqual(messageHistory, ['Hello', 'World']);
64
64
  * ```
65
65
  */
66
66
  const createValueEmitter = () => {
@@ -1,3 +1,4 @@
1
+ import { type Reducer } from 'ts-type-forge';
1
2
  import { type InitializedObservable } from '../core/index.mjs';
2
3
  /**
3
4
  * Creates a reducer-based state management container following the Redux pattern.
@@ -7,7 +8,7 @@ import { type InitializedObservable } from '../core/index.mjs';
7
8
  * @template A - The type of actions
8
9
  * @param reducer - A pure function that takes current state and action, returns new state
9
10
  * @param initialState - The initial value of the state
10
- * @returns An object containing the state observable, dispatch function, and snapshot getter
11
+ * @returns A 3-element tuple: `[state, dispatch, { getSnapshot, initialState }]`
11
12
  *
12
13
  * @example
13
14
  * ```ts
@@ -23,24 +24,27 @@ import { type InitializedObservable } from '../core/index.mjs';
23
24
  * 0,
24
25
  * );
25
26
  *
26
- * const mut_history: number[] = [];
27
+ * const stateHistory: number[] = [];
27
28
  *
28
29
  * state.subscribe((value: number) => {
29
- * mut_history.push(value);
30
+ * stateHistory.push(value);
30
31
  * });
31
32
  *
32
- * assert.deepStrictEqual(mut_history, [0]);
33
+ * assert.deepStrictEqual(stateHistory, [0]);
33
34
  *
34
35
  * dispatch({ type: 'increment' }); // logs: 1
35
36
  *
36
- * assert.deepStrictEqual(mut_history, [0, 1]);
37
+ * assert.deepStrictEqual(stateHistory, [0, 1]);
37
38
  *
38
39
  * dispatch({ type: 'increment' });
39
40
  *
40
41
  * dispatch({ type: 'decrement' });
41
42
  *
42
- * assert.deepStrictEqual(mut_history, [0, 1, 2, 1]);
43
+ * assert.deepStrictEqual(stateHistory, [0, 1, 2, 1]);
43
44
  * ```
44
45
  */
45
- export declare const createReducer: <S, A>(reducer: Reducer<S, A>, initialState: S) => readonly [state: InitializedObservable<S>, dispatch: (action: A) => S, getSnapshot: () => S];
46
+ export declare const createReducer: <S, A>(reducer: Reducer<S, A>, initialState: S) => readonly [state: InitializedObservable<S>, dispatch: (action: A) => S, Readonly<{
47
+ getSnapshot: () => S;
48
+ initialState: S;
49
+ }>];
46
50
  //# sourceMappingURL=create-reducer.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-reducer.d.mts","sourceRoot":"","sources":["../../src/utils/create-reducer.mts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,CAAC,EAChC,SAAS,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EACtB,cAAc,CAAC,KACd,SAAS,CACV,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAC/B,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,EAC1B,WAAW,EAAE,MAAM,CAAC,CAerB,CAAC"}
1
+ {"version":3,"file":"create-reducer.d.mts","sourceRoot":"","sources":["../../src/utils/create-reducer.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAU,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,CAAC,EAChC,SAAS,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EACtB,cAAc,CAAC,KACd,SAAS,CACV,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAC/B,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,EAC1B,QAAQ,CAAC;IACP,WAAW,EAAE,MAAM,CAAC,CAAC;IACrB,YAAY,EAAE,CAAC,CAAC;CACjB,CAAC,CAeH,CAAC"}
@@ -11,7 +11,7 @@ import { source } from '../core/create/source.mjs';
11
11
  * @template A - The type of actions
12
12
  * @param reducer - A pure function that takes current state and action, returns new state
13
13
  * @param initialState - The initial value of the state
14
- * @returns An object containing the state observable, dispatch function, and snapshot getter
14
+ * @returns A 3-element tuple: `[state, dispatch, { getSnapshot, initialState }]`
15
15
  *
16
16
  * @example
17
17
  * ```ts
@@ -27,23 +27,23 @@ import { source } from '../core/create/source.mjs';
27
27
  * 0,
28
28
  * );
29
29
  *
30
- * const mut_history: number[] = [];
30
+ * const stateHistory: number[] = [];
31
31
  *
32
32
  * state.subscribe((value: number) => {
33
- * mut_history.push(value);
33
+ * stateHistory.push(value);
34
34
  * });
35
35
  *
36
- * assert.deepStrictEqual(mut_history, [0]);
36
+ * assert.deepStrictEqual(stateHistory, [0]);
37
37
  *
38
38
  * dispatch({ type: 'increment' }); // logs: 1
39
39
  *
40
- * assert.deepStrictEqual(mut_history, [0, 1]);
40
+ * assert.deepStrictEqual(stateHistory, [0, 1]);
41
41
  *
42
42
  * dispatch({ type: 'increment' });
43
43
  *
44
44
  * dispatch({ type: 'decrement' });
45
45
  *
46
- * assert.deepStrictEqual(mut_history, [0, 1, 2, 1]);
46
+ * assert.deepStrictEqual(stateHistory, [0, 1, 2, 1]);
47
47
  * ```
48
48
  */
49
49
  const createReducer = (reducer, initialState) => {
@@ -54,7 +54,7 @@ const createReducer = (reducer, initialState) => {
54
54
  return nextState;
55
55
  };
56
56
  const getSnapshot = () => state.getSnapshot().value;
57
- return [state, dispatch, getSnapshot];
57
+ return [state, dispatch, { getSnapshot, initialState }];
58
58
  };
59
59
 
60
60
  export { createReducer };
@@ -1 +1 @@
1
- {"version":3,"file":"create-reducer.mjs","sources":["../../src/utils/create-reducer.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CG;MACU,aAAa,GAAG,CAC3B,OAAsB,EACtB,YAAe,KAKb;AACF,IAAA,MAAM,KAAK,GAAG,MAAM,CAAI,YAAY,CAAC;AAErC,IAAA,MAAM,QAAQ,GAAG,CAAC,MAAS,KAAO;AAChC,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;AAE5D,QAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AAErB,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC;IAED,MAAM,WAAW,GAAG,MAAS,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK;AAEtD,IAAA,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAU;AAChD;;;;"}
1
+ {"version":3,"file":"create-reducer.mjs","sources":["../../src/utils/create-reducer.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CG;MACU,aAAa,GAAG,CAC3B,OAAsB,EACtB,YAAe,KAQb;AACF,IAAA,MAAM,KAAK,GAAG,MAAM,CAAI,YAAY,CAAC;AAErC,IAAA,MAAM,QAAQ,GAAG,CAAC,MAAS,KAAO;AAChC,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;AAE5D,QAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AAErB,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC;IAED,MAAM,WAAW,GAAG,MAAS,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK;IAEtD,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAU;AAClE;;;;"}
@@ -5,77 +5,37 @@ import { type InitializedObservable } from '../core/index.mjs';
5
5
  *
6
6
  * @template S - The type of the state
7
7
  * @param initialState - The initial value of the state
8
- * @returns An object containing the state observable and methods to manipulate it
8
+ * @returns A 3-element tuple: `[state, setState, { updateState, resetState, getSnapshot, initialState }]`
9
9
  *
10
10
  * @example
11
11
  * ```ts
12
12
  * const [state, setState, { updateState, resetState }] = createState(0);
13
13
  *
14
- * const mut_history: number[] = [];
14
+ * const stateHistory: number[] = [];
15
15
  *
16
16
  * state.subscribe((value: number) => {
17
- * mut_history.push(value);
17
+ * stateHistory.push(value);
18
18
  * });
19
19
  *
20
- * assert.deepStrictEqual(mut_history, [0]);
20
+ * assert.deepStrictEqual(stateHistory, [0]);
21
21
  *
22
22
  * setState(10); // logs: 10
23
23
  *
24
- * assert.deepStrictEqual(mut_history, [0, 10]);
24
+ * assert.deepStrictEqual(stateHistory, [0, 10]);
25
25
  *
26
26
  * updateState((prev: number) => prev + 1); // logs: 11
27
27
  *
28
- * assert.deepStrictEqual(mut_history, [0, 10, 11]);
28
+ * assert.deepStrictEqual(stateHistory, [0, 10, 11]);
29
29
  *
30
30
  * resetState(); // logs: 0
31
31
  *
32
- * assert.deepStrictEqual(mut_history, [0, 10, 11, 0]);
32
+ * assert.deepStrictEqual(stateHistory, [0, 10, 11, 0]);
33
33
  * ```
34
34
  */
35
35
  export declare const createState: <S>(initialState: S) => readonly [state: InitializedObservable<S>, setState: (v: S) => S, Readonly<{
36
36
  updateState: (updateFn: (prev: S) => S) => S;
37
37
  resetState: () => S;
38
38
  getSnapshot: () => S;
39
- }>];
40
- /**
41
- * Creates a reactive boolean state with convenient methods for boolean operations.
42
- * Extends `createState` with boolean-specific helpers like `toggle`, `setTrue`, and `setFalse`.
43
- *
44
- * @param initialState - The initial boolean value
45
- * @returns An object with the state observable and boolean-specific methods
46
- *
47
- * @example
48
- * ```ts
49
- * const [state, { setTrue, toggle }] = createBooleanState(false);
50
- *
51
- * const mut_history: boolean[] = [];
52
- *
53
- * state.subscribe((value: boolean) => {
54
- * mut_history.push(value);
55
- * });
56
- *
57
- * assert.deepStrictEqual(mut_history, [false]);
58
- *
59
- * setTrue(); // logs: true
60
- *
61
- * assert.deepStrictEqual(mut_history, [false, true]);
62
- *
63
- * toggle(); // logs: false
64
- *
65
- * assert.deepStrictEqual(mut_history, [false, true, false]);
66
- *
67
- * toggle(); // logs: true
68
- *
69
- * assert.deepStrictEqual(mut_history, [false, true, false, true]);
70
- * ```
71
- */
72
- export declare const createBooleanState: (initialState: boolean) => readonly [state: InitializedObservable<boolean>, Readonly<{
73
- setTrue: () => void;
74
- setFalse: () => void;
75
- setState: (next: boolean) => boolean;
76
- toggle: () => boolean;
77
- updateState: (updateFn: (prev: boolean) => boolean) => boolean;
78
- resetState: () => boolean;
79
- getSnapshot: () => boolean;
39
+ initialState: S;
80
40
  }>];
81
41
  //# sourceMappingURL=create-state.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-state.d.mts","sourceRoot":"","sources":["../../src/utils/create-state.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAwB/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAC3B,cAAc,CAAC,KACd,SAAS,CACV,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAC/B,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EACrB,QAAQ,CAAC;IACP,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,CAAC;CACtB,CAAC,CAwBH,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,kBAAkB,GAC7B,cAAc,OAAO,KACpB,SAAS,CACV,KAAK,EAAE,qBAAqB,CAAC,OAAO,CAAC,EACrC,QAAQ,CAAC;IACP,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;IACrC,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,KAAK,OAAO,CAAC;IAC/D,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,WAAW,EAAE,MAAM,OAAO,CAAC;CAC5B,CAAC,CAqBH,CAAC"}
1
+ {"version":3,"file":"create-state.d.mts","sourceRoot":"","sources":["../../src/utils/create-state.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAwB/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAC3B,cAAc,CAAC,KACd,SAAS,CACV,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAC/B,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EACrB,QAAQ,CAAC;IACP,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,CAAC;IACrB,YAAY,EAAE,CAAC,CAAC;CACjB,CAAC,CAyBH,CAAC"}
@@ -14,35 +14,35 @@ const reducer = (state, action) => {
14
14
  *
15
15
  * @template S - The type of the state
16
16
  * @param initialState - The initial value of the state
17
- * @returns An object containing the state observable and methods to manipulate it
17
+ * @returns A 3-element tuple: `[state, setState, { updateState, resetState, getSnapshot, initialState }]`
18
18
  *
19
19
  * @example
20
20
  * ```ts
21
21
  * const [state, setState, { updateState, resetState }] = createState(0);
22
22
  *
23
- * const mut_history: number[] = [];
23
+ * const stateHistory: number[] = [];
24
24
  *
25
25
  * state.subscribe((value: number) => {
26
- * mut_history.push(value);
26
+ * stateHistory.push(value);
27
27
  * });
28
28
  *
29
- * assert.deepStrictEqual(mut_history, [0]);
29
+ * assert.deepStrictEqual(stateHistory, [0]);
30
30
  *
31
31
  * setState(10); // logs: 10
32
32
  *
33
- * assert.deepStrictEqual(mut_history, [0, 10]);
33
+ * assert.deepStrictEqual(stateHistory, [0, 10]);
34
34
  *
35
35
  * updateState((prev: number) => prev + 1); // logs: 11
36
36
  *
37
- * assert.deepStrictEqual(mut_history, [0, 10, 11]);
37
+ * assert.deepStrictEqual(stateHistory, [0, 10, 11]);
38
38
  *
39
39
  * resetState(); // logs: 0
40
40
  *
41
- * assert.deepStrictEqual(mut_history, [0, 10, 11, 0]);
41
+ * assert.deepStrictEqual(stateHistory, [0, 10, 11, 0]);
42
42
  * ```
43
43
  */
44
44
  const createState = (initialState) => {
45
- const [state, dispatch, getSnapshot] = createReducer(reducer, initialState);
45
+ const [state, dispatch, { getSnapshot }] = createReducer(reducer, initialState);
46
46
  const updateState = (updateFn) => dispatch({ type: 'update', updateFn });
47
47
  const setState = (nextState) => dispatch({ type: 'set', nextState });
48
48
  const resetState = () => dispatch({ type: 'set', nextState: initialState });
@@ -53,60 +53,10 @@ const createState = (initialState) => {
53
53
  updateState,
54
54
  resetState,
55
55
  getSnapshot,
56
- },
57
- ];
58
- };
59
- /**
60
- * Creates a reactive boolean state with convenient methods for boolean operations.
61
- * Extends `createState` with boolean-specific helpers like `toggle`, `setTrue`, and `setFalse`.
62
- *
63
- * @param initialState - The initial boolean value
64
- * @returns An object with the state observable and boolean-specific methods
65
- *
66
- * @example
67
- * ```ts
68
- * const [state, { setTrue, toggle }] = createBooleanState(false);
69
- *
70
- * const mut_history: boolean[] = [];
71
- *
72
- * state.subscribe((value: boolean) => {
73
- * mut_history.push(value);
74
- * });
75
- *
76
- * assert.deepStrictEqual(mut_history, [false]);
77
- *
78
- * setTrue(); // logs: true
79
- *
80
- * assert.deepStrictEqual(mut_history, [false, true]);
81
- *
82
- * toggle(); // logs: false
83
- *
84
- * assert.deepStrictEqual(mut_history, [false, true, false]);
85
- *
86
- * toggle(); // logs: true
87
- *
88
- * assert.deepStrictEqual(mut_history, [false, true, false, true]);
89
- * ```
90
- */
91
- const createBooleanState = (initialState) => {
92
- const [state, setState, { updateState, resetState, getSnapshot }] = createState(initialState);
93
- return [
94
- state,
95
- {
96
- setTrue: () => {
97
- setState(true);
98
- },
99
- setFalse: () => {
100
- setState(false);
101
- },
102
- toggle: () => updateState((s) => !s),
103
- setState,
104
- updateState,
105
- resetState,
106
- getSnapshot,
56
+ initialState,
107
57
  },
108
58
  ];
109
59
  };
110
60
 
111
- export { createBooleanState, createState };
61
+ export { createState };
112
62
  //# sourceMappingURL=create-state.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-state.mjs","sources":["../../src/utils/create-state.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAcA,MAAM,OAAO,GAAG,CAAK,KAAQ,EAAE,MAAiB,KAAO;AACrD,IAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,QAAA,KAAK,KAAK;YACR,OAAO,MAAM,CAAC,SAAS;AAEzB,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAEnC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCG;AACI,MAAM,WAAW,GAAG,CACzB,YAAe,KASb;AACF,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,GAAG,aAAa,CAClD,OAAO,EACP,YAAY,CACb;AAED,IAAA,MAAM,WAAW,GAAG,CAAC,QAAwB,KAC3C,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAExC,IAAA,MAAM,QAAQ,GAAG,CAAC,SAAY,KAAQ,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAE1E,IAAA,MAAM,UAAU,GAAG,MACjB,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;IAEpD,OAAO;QACL,KAAK;QACL,QAAQ;AACR,QAAA;YACE,WAAW;YACX,UAAU;YACV,WAAW;AACZ,SAAA;KACO;AACZ;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BG;AACI,MAAM,kBAAkB,GAAG,CAChC,YAAqB,KAYnB;AACF,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,GAC/D,WAAW,CAAC,YAAY,CAAC;IAE3B,OAAO;QACL,KAAK;AACL,QAAA;YACE,OAAO,EAAE,MAAK;gBACZ,QAAQ,CAAC,IAAI,CAAC;YAChB,CAAC;YACD,QAAQ,EAAE,MAAK;gBACb,QAAQ,CAAC,KAAK,CAAC;YACjB,CAAC;AACD,YAAA,MAAM,EAAE,MAAM,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACpC,QAAQ;YACR,WAAW;YACX,UAAU;YACV,WAAW;AACZ,SAAA;KACO;AACZ;;;;"}
1
+ {"version":3,"file":"create-state.mjs","sources":["../../src/utils/create-state.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAcA,MAAM,OAAO,GAAG,CAAK,KAAQ,EAAE,MAAiB,KAAO;AACrD,IAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,QAAA,KAAK,KAAK;YACR,OAAO,MAAM,CAAC,SAAS;AAEzB,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAEnC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCG;AACI,MAAM,WAAW,GAAG,CACzB,YAAe,KAUb;AACF,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,GAAG,aAAa,CACtD,OAAO,EACP,YAAY,CACb;AAED,IAAA,MAAM,WAAW,GAAG,CAAC,QAAwB,KAC3C,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAExC,IAAA,MAAM,QAAQ,GAAG,CAAC,SAAY,KAAQ,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAE1E,IAAA,MAAM,UAAU,GAAG,MACjB,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;IAEpD,OAAO;QACL,KAAK;QACL,QAAQ;AACR,QAAA;YACE,WAAW;YACX,UAAU;YACV,WAAW;YACX,YAAY;AACb,SAAA;KACO;AACZ;;;;"}
@@ -1,3 +1,5 @@
1
+ export * from './collect-to-array.mjs';
2
+ export * from './create-boolean-state.mjs';
1
3
  export * from './create-event-emitter.mjs';
2
4
  export * from './create-reducer.mjs';
3
5
  export * from './create-state.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/utils/index.mts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/utils/index.mts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC"}
@@ -1,4 +1,6 @@
1
+ export { collectToArray } from './collect-to-array.mjs';
2
+ export { createBooleanState } from './create-boolean-state.mjs';
1
3
  export { createEventEmitter, createValueEmitter } from './create-event-emitter.mjs';
2
4
  export { createReducer } from './create-reducer.mjs';
3
- export { createBooleanState, createState } from './create-state.mjs';
5
+ export { createState } from './create-state.mjs';
4
6
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "synstate",
3
- "version": "0.1.2",
3
+ "version": "1.0.1",
4
4
  "description": "Type-safe State Management Library for TypeScript/JavaScript",
5
5
  "repository": {
6
6
  "type": "git",
@@ -28,36 +28,43 @@
28
28
  "LICENSE"
29
29
  ],
30
30
  "dependencies": {
31
- "ts-data-forge": "^6.5.0"
31
+ "ts-data-forge": "6.9.4",
32
+ "ts-type-forge": "3.0.0"
32
33
  },
33
34
  "devDependencies": {
34
- "@types/argparse": "^2.0.17",
35
- "@types/react": "^19.2.14",
36
- "argparse": "^2.0.1",
37
- "react": "^19.2.4"
35
+ "@reduxjs/toolkit": "2.11.2",
36
+ "@types/argparse": "2.0.17",
37
+ "@types/react": "19.2.14",
38
+ "argparse": "2.0.1",
39
+ "jotai": "2.19.1",
40
+ "mobx": "6.15.0",
41
+ "react": "19.2.5",
42
+ "rxjs": "7.8.2",
43
+ "valtio": "2.3.1",
44
+ "zustand": "5.0.12"
38
45
  },
39
46
  "scripts": {
47
+ "benchmark": "tsx ./scripts/cmd/run-benchmark.mts",
48
+ "benchmark:cascaded-diamond": "tsx ./scripts/cmd/run-benchmark-cascaded-diamond.mts",
49
+ "benchmark:deep-chain": "tsx ./scripts/cmd/run-benchmark-deep-chain.mts",
40
50
  "build": "tsx ./scripts/cmd/build.mts",
41
51
  "build:min": "tsx ./scripts/cmd/build.mts --skip-check",
42
52
  "check:ext": "tsx ./scripts/cmd/check-ext.mts",
43
53
  "check-all": "tsx ./scripts/cmd/check-all.mts",
44
- "codemod": "convert-to-readonly '{src,samples,test}/**/*.{mts,tsx}'",
45
- "doc": "tsx ./scripts/cmd/gen-docs.mts",
54
+ "doc": "run-s doc:embed doc:embed:jsdoc doc:gen-sample-diffs fmt",
46
55
  "doc:embed": "tsx ./scripts/cmd/embed-examples.mts",
47
56
  "doc:embed:jsdoc": "tsx ./scripts/cmd/embed-examples-in-jsdoc.mts",
48
- "doc:preview": "vite preview --config ./configs/vite.doc.config.ts",
49
- "doc:watch": "typedoc --options ./configs/typedoc.config.mjs --watch",
50
- "fmt": "pnpm run z:prettier .",
57
+ "doc:gen-sample-diffs": "tsx ./scripts/cmd/generate-sample-diffs.mts",
58
+ "fmt": "format-uncommitted",
59
+ "fmt:full": "pnpm run z:prettier .",
51
60
  "gi": "run-s gi:src fmt",
52
- "gi:src": "gen-index-ts ./src --index-ext .mts --export-ext .mjs --target-ext .mts --target-ext .tsx --exclude entry-point.mts",
61
+ "gi:src": "gen-index-ts ./src --index-ext .mts --export-ext .mjs --target-ext .mts --target-ext .tsx --exclude entry-point.mts --exclude \"core/utils/**\"",
53
62
  "lint": "eslint .",
54
63
  "lint:fix": "eslint . --fix",
55
64
  "test": "pnpm run z:vitest:node run",
56
- "test:all": "run-p test test:stream",
57
65
  "test:browser": "pnpm run z:vitest --project='Browser' run",
58
66
  "test:cov": "pnpm run z:vitest:node run --coverage",
59
67
  "test:cov:ui": "vite preview --outDir ./coverage",
60
- "test:stream": "pnpm run z:vitest:stream run",
61
68
  "test:ui": "pnpm run z:vitest:node --ui",
62
69
  "testw": "pnpm run z:vitest:node watch",
63
70
  "tsc": "tsc --noEmit",