@typed/fx 1.18.4 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (423) hide show
  1. package/AsyncData/package.json +6 -0
  2. package/Emitter/package.json +6 -0
  3. package/Form/package.json +6 -0
  4. package/FormEntry/package.json +6 -0
  5. package/Fx/package.json +6 -0
  6. package/Guard/package.json +6 -0
  7. package/Idle/package.json +6 -0
  8. package/Match/package.json +6 -0
  9. package/Pull/package.json +6 -0
  10. package/Push/package.json +6 -0
  11. package/RefArray/package.json +6 -0
  12. package/RefChunk/package.json +6 -0
  13. package/RefHashMap/package.json +6 -0
  14. package/RefHashSet/package.json +6 -0
  15. package/RefSubject/package.json +6 -0
  16. package/Sink/package.json +6 -0
  17. package/Stream/package.json +6 -0
  18. package/Subject/package.json +6 -0
  19. package/TypeId/package.json +6 -0
  20. package/Typeclass/package.json +6 -0
  21. package/Versioned/package.json +6 -0
  22. package/dist/cjs/AsyncData.js +177 -0
  23. package/dist/cjs/AsyncData.js.map +1 -0
  24. package/dist/cjs/Emitter.js +24 -21
  25. package/dist/cjs/Emitter.js.map +1 -1
  26. package/dist/cjs/Form.js +78 -21
  27. package/dist/cjs/Form.js.map +1 -1
  28. package/dist/cjs/FormEntry.js +75 -48
  29. package/dist/cjs/FormEntry.js.map +1 -1
  30. package/dist/cjs/Fx.js +517 -872
  31. package/dist/cjs/Fx.js.map +1 -1
  32. package/dist/cjs/Guard.js +21 -13
  33. package/dist/cjs/Guard.js.map +1 -1
  34. package/dist/cjs/Idle.js +49 -37
  35. package/dist/cjs/Idle.js.map +1 -1
  36. package/dist/cjs/Match.js +99 -61
  37. package/dist/cjs/Match.js.map +1 -1
  38. package/dist/cjs/Pull.js.map +1 -1
  39. package/dist/cjs/Push.js +168 -0
  40. package/dist/cjs/Push.js.map +1 -0
  41. package/dist/cjs/RefArray.js +32 -30
  42. package/dist/cjs/RefArray.js.map +1 -1
  43. package/dist/cjs/RefChunk.js +26 -24
  44. package/dist/cjs/RefChunk.js.map +1 -1
  45. package/dist/cjs/RefHashMap.js +20 -20
  46. package/dist/cjs/RefHashMap.js.map +1 -1
  47. package/dist/cjs/RefHashSet.js +11 -8
  48. package/dist/cjs/RefHashSet.js.map +1 -1
  49. package/dist/cjs/RefSubject.js +899 -158
  50. package/dist/cjs/RefSubject.js.map +1 -1
  51. package/dist/cjs/Sink.js +588 -62
  52. package/dist/cjs/Sink.js.map +1 -1
  53. package/dist/cjs/Stream.js +15 -10
  54. package/dist/cjs/Stream.js.map +1 -1
  55. package/dist/cjs/Subject.js +153 -55
  56. package/dist/cjs/Subject.js.map +1 -1
  57. package/dist/cjs/TypeId.js +10 -5
  58. package/dist/cjs/TypeId.js.map +1 -1
  59. package/dist/cjs/Typeclass.js +28 -31
  60. package/dist/cjs/Typeclass.js.map +1 -1
  61. package/dist/cjs/Versioned.js +118 -57
  62. package/dist/cjs/Versioned.js.map +1 -1
  63. package/dist/cjs/index.js +44 -8
  64. package/dist/cjs/index.js.map +1 -1
  65. package/dist/cjs/internal/{deferred-ref.js → DeferredRef.js} +45 -13
  66. package/dist/cjs/internal/DeferredRef.js.map +1 -0
  67. package/dist/cjs/internal/UnionToTuple.js +6 -0
  68. package/dist/cjs/internal/UnionToTuple.js.map +1 -0
  69. package/dist/cjs/internal/core.js +1590 -779
  70. package/dist/cjs/internal/core.js.map +1 -1
  71. package/dist/cjs/internal/diff.js +114 -0
  72. package/dist/cjs/internal/diff.js.map +1 -0
  73. package/dist/cjs/internal/effect-loop-operator.js +288 -0
  74. package/dist/cjs/internal/effect-loop-operator.js.map +1 -0
  75. package/dist/cjs/internal/effect-operator.js +46 -37
  76. package/dist/cjs/internal/effect-operator.js.map +1 -1
  77. package/dist/cjs/internal/effect-producer.js +74 -0
  78. package/dist/cjs/internal/effect-producer.js.map +1 -0
  79. package/dist/cjs/internal/helpers.js +158 -128
  80. package/dist/cjs/internal/helpers.js.map +1 -1
  81. package/dist/cjs/internal/keyed.js +136 -173
  82. package/dist/cjs/internal/keyed.js.map +1 -1
  83. package/dist/cjs/internal/loop-operator.js +213 -0
  84. package/dist/cjs/internal/loop-operator.js.map +1 -0
  85. package/dist/cjs/internal/operator.js +79 -0
  86. package/dist/cjs/internal/operator.js.map +1 -0
  87. package/dist/cjs/internal/protos.js +19 -81
  88. package/dist/cjs/internal/protos.js.map +1 -1
  89. package/dist/cjs/internal/provide.js +47 -25
  90. package/dist/cjs/internal/provide.js.map +1 -1
  91. package/dist/cjs/internal/requestIdleCallback.js +5 -5
  92. package/dist/cjs/internal/requestIdleCallback.js.map +1 -1
  93. package/dist/cjs/internal/share.js +12 -15
  94. package/dist/cjs/internal/share.js.map +1 -1
  95. package/dist/cjs/internal/sync-operator.js +50 -22
  96. package/dist/cjs/internal/sync-operator.js.map +1 -1
  97. package/dist/cjs/internal/sync-producer.js +114 -0
  98. package/dist/cjs/internal/sync-producer.js.map +1 -0
  99. package/dist/cjs/internal/withKey.js +45 -51
  100. package/dist/cjs/internal/withKey.js.map +1 -1
  101. package/dist/dts/AsyncData.d.ts +185 -0
  102. package/dist/dts/AsyncData.d.ts.map +1 -0
  103. package/dist/dts/Emitter.d.ts +13 -20
  104. package/dist/dts/Emitter.d.ts.map +1 -1
  105. package/dist/dts/Form.d.ts +45 -28
  106. package/dist/dts/Form.d.ts.map +1 -1
  107. package/dist/dts/FormEntry.d.ts +25 -13
  108. package/dist/dts/FormEntry.d.ts.map +1 -1
  109. package/dist/dts/Fx.d.ts +983 -1387
  110. package/dist/dts/Fx.d.ts.map +1 -1
  111. package/dist/dts/Guard.d.ts +8 -1
  112. package/dist/dts/Guard.d.ts.map +1 -1
  113. package/dist/dts/Idle.d.ts +3 -3
  114. package/dist/dts/Idle.d.ts.map +1 -1
  115. package/dist/dts/Match.d.ts +8 -8
  116. package/dist/dts/Match.d.ts.map +1 -1
  117. package/dist/dts/Pull.d.ts +5 -5
  118. package/dist/dts/Pull.d.ts.map +1 -1
  119. package/dist/dts/Push.d.ts +170 -0
  120. package/dist/dts/Push.d.ts.map +1 -0
  121. package/dist/dts/RefArray.d.ts +21 -23
  122. package/dist/dts/RefArray.d.ts.map +1 -1
  123. package/dist/dts/RefChunk.d.ts +17 -19
  124. package/dist/dts/RefChunk.d.ts.map +1 -1
  125. package/dist/dts/RefHashMap.d.ts +19 -20
  126. package/dist/dts/RefHashMap.d.ts.map +1 -1
  127. package/dist/dts/RefHashSet.d.ts +12 -16
  128. package/dist/dts/RefHashSet.d.ts.map +1 -1
  129. package/dist/dts/RefSubject.d.ts +396 -187
  130. package/dist/dts/RefSubject.d.ts.map +1 -1
  131. package/dist/dts/Sink.d.ts +193 -93
  132. package/dist/dts/Sink.d.ts.map +1 -1
  133. package/dist/dts/Stream.d.ts +7 -1
  134. package/dist/dts/Stream.d.ts.map +1 -1
  135. package/dist/dts/Subject.d.ts +27 -36
  136. package/dist/dts/Subject.d.ts.map +1 -1
  137. package/dist/dts/TypeId.d.ts +10 -0
  138. package/dist/dts/TypeId.d.ts.map +1 -1
  139. package/dist/dts/Typeclass.d.ts +2 -2
  140. package/dist/dts/Typeclass.d.ts.map +1 -1
  141. package/dist/dts/Versioned.d.ts +50 -78
  142. package/dist/dts/Versioned.d.ts.map +1 -1
  143. package/dist/dts/index.d.ts +66 -6
  144. package/dist/dts/index.d.ts.map +1 -1
  145. package/dist/dts/internal/DeferredRef.d.ts +20 -0
  146. package/dist/dts/internal/DeferredRef.d.ts.map +1 -0
  147. package/dist/dts/internal/UnionToTuple.d.ts +6 -0
  148. package/dist/dts/internal/UnionToTuple.d.ts.map +1 -0
  149. package/dist/dts/internal/core.d.ts +218 -450
  150. package/dist/dts/internal/core.d.ts.map +1 -1
  151. package/dist/dts/internal/diff.d.ts +38 -0
  152. package/dist/dts/internal/diff.d.ts.map +1 -0
  153. package/dist/dts/internal/effect-loop-operator.d.ts +34 -0
  154. package/dist/dts/internal/effect-loop-operator.d.ts.map +1 -0
  155. package/dist/dts/internal/effect-operator.d.ts +8 -5
  156. package/dist/dts/internal/effect-operator.d.ts.map +1 -1
  157. package/dist/dts/internal/effect-producer.d.ts +25 -0
  158. package/dist/dts/internal/effect-producer.d.ts.map +1 -0
  159. package/dist/dts/internal/helpers.d.ts +33 -24
  160. package/dist/dts/internal/helpers.d.ts.map +1 -1
  161. package/dist/dts/internal/keyed.d.ts +3 -3
  162. package/dist/dts/internal/keyed.d.ts.map +1 -1
  163. package/dist/dts/internal/loop-operator.d.ts +40 -0
  164. package/dist/dts/internal/loop-operator.d.ts.map +1 -0
  165. package/dist/dts/internal/operator.d.ts +16 -0
  166. package/dist/dts/internal/operator.d.ts.map +1 -0
  167. package/dist/dts/internal/protos.d.ts +16 -43
  168. package/dist/dts/internal/protos.d.ts.map +1 -1
  169. package/dist/dts/internal/provide.d.ts +7 -1
  170. package/dist/dts/internal/provide.d.ts.map +1 -1
  171. package/dist/dts/internal/share.d.ts +12 -9
  172. package/dist/dts/internal/share.d.ts.map +1 -1
  173. package/dist/dts/internal/sync-operator.d.ts +7 -3
  174. package/dist/dts/internal/sync-operator.d.ts.map +1 -1
  175. package/dist/dts/internal/sync-producer.d.ts +36 -0
  176. package/dist/dts/internal/sync-producer.d.ts.map +1 -0
  177. package/dist/dts/internal/withKey.d.ts +3 -3
  178. package/dist/dts/internal/withKey.d.ts.map +1 -1
  179. package/dist/esm/AsyncData.js +151 -0
  180. package/dist/esm/AsyncData.js.map +1 -0
  181. package/dist/esm/Emitter.js +24 -21
  182. package/dist/esm/Emitter.js.map +1 -1
  183. package/dist/esm/Form.js +69 -14
  184. package/dist/esm/Form.js.map +1 -1
  185. package/dist/esm/FormEntry.js +77 -52
  186. package/dist/esm/FormEntry.js.map +1 -1
  187. package/dist/esm/Fx.js +509 -874
  188. package/dist/esm/Fx.js.map +1 -1
  189. package/dist/esm/Guard.js +5 -1
  190. package/dist/esm/Guard.js.map +1 -1
  191. package/dist/esm/Idle.js +49 -39
  192. package/dist/esm/Idle.js.map +1 -1
  193. package/dist/esm/Match.js +103 -63
  194. package/dist/esm/Match.js.map +1 -1
  195. package/dist/esm/Pull.js.map +1 -1
  196. package/dist/esm/Push.js +159 -0
  197. package/dist/esm/Push.js.map +1 -0
  198. package/dist/esm/RefArray.js +32 -30
  199. package/dist/esm/RefArray.js.map +1 -1
  200. package/dist/esm/RefChunk.js +26 -24
  201. package/dist/esm/RefChunk.js.map +1 -1
  202. package/dist/esm/RefHashMap.js +20 -20
  203. package/dist/esm/RefHashMap.js.map +1 -1
  204. package/dist/esm/RefHashSet.js +11 -8
  205. package/dist/esm/RefHashSet.js.map +1 -1
  206. package/dist/esm/RefSubject.js +873 -150
  207. package/dist/esm/RefSubject.js.map +1 -1
  208. package/dist/esm/Sink.js +608 -57
  209. package/dist/esm/Sink.js.map +1 -1
  210. package/dist/esm/Stream.js +13 -9
  211. package/dist/esm/Stream.js.map +1 -1
  212. package/dist/esm/Subject.js +151 -56
  213. package/dist/esm/Subject.js.map +1 -1
  214. package/dist/esm/TypeId.js +9 -4
  215. package/dist/esm/TypeId.js.map +1 -1
  216. package/dist/esm/Typeclass.js +29 -29
  217. package/dist/esm/Typeclass.js.map +1 -1
  218. package/dist/esm/Versioned.js +110 -53
  219. package/dist/esm/Versioned.js.map +1 -1
  220. package/dist/esm/index.js +66 -6
  221. package/dist/esm/index.js.map +1 -1
  222. package/dist/esm/internal/DeferredRef.js +54 -0
  223. package/dist/esm/internal/DeferredRef.js.map +1 -0
  224. package/dist/esm/internal/UnionToTuple.js +2 -0
  225. package/dist/esm/internal/UnionToTuple.js.map +1 -0
  226. package/dist/esm/internal/core.js +1439 -719
  227. package/dist/esm/internal/core.js.map +1 -1
  228. package/dist/esm/internal/diff.js +82 -0
  229. package/dist/esm/internal/diff.js.map +1 -0
  230. package/dist/esm/internal/effect-loop-operator.js +269 -0
  231. package/dist/esm/internal/effect-loop-operator.js.map +1 -0
  232. package/dist/esm/internal/effect-operator.js +44 -37
  233. package/dist/esm/internal/effect-operator.js.map +1 -1
  234. package/dist/esm/internal/effect-producer.js +47 -0
  235. package/dist/esm/internal/effect-producer.js.map +1 -0
  236. package/dist/esm/internal/helpers.js +157 -129
  237. package/dist/esm/internal/helpers.js.map +1 -1
  238. package/dist/esm/internal/keyed.js +128 -139
  239. package/dist/esm/internal/keyed.js.map +1 -1
  240. package/dist/esm/internal/loop-operator.js +186 -0
  241. package/dist/esm/internal/loop-operator.js.map +1 -0
  242. package/dist/esm/internal/operator.js +68 -0
  243. package/dist/esm/internal/operator.js.map +1 -0
  244. package/dist/esm/internal/protos.js +16 -75
  245. package/dist/esm/internal/protos.js.map +1 -1
  246. package/dist/esm/internal/provide.js +33 -25
  247. package/dist/esm/internal/provide.js.map +1 -1
  248. package/dist/esm/internal/requestIdleCallback.js +5 -5
  249. package/dist/esm/internal/requestIdleCallback.js.map +1 -1
  250. package/dist/esm/internal/share.js +12 -12
  251. package/dist/esm/internal/share.js.map +1 -1
  252. package/dist/esm/internal/sync-operator.js +49 -21
  253. package/dist/esm/internal/sync-operator.js.map +1 -1
  254. package/dist/esm/internal/sync-producer.js +88 -0
  255. package/dist/esm/internal/sync-producer.js.map +1 -0
  256. package/dist/esm/internal/withKey.js +46 -47
  257. package/dist/esm/internal/withKey.js.map +1 -1
  258. package/package.json +22 -62
  259. package/src/AsyncData.ts +447 -0
  260. package/src/Emitter.ts +47 -38
  261. package/src/Form.ts +185 -65
  262. package/src/FormEntry.ts +142 -109
  263. package/src/Fx.ts +1685 -1851
  264. package/src/Guard.ts +12 -1
  265. package/src/Idle.ts +76 -62
  266. package/src/Match.ts +149 -93
  267. package/src/Pull.ts +8 -8
  268. package/src/Push.ts +472 -0
  269. package/src/RefArray.ts +53 -51
  270. package/src/RefChunk.ts +44 -41
  271. package/src/RefHashMap.ts +57 -43
  272. package/src/RefHashSet.ts +21 -31
  273. package/src/RefSubject.ts +1984 -457
  274. package/src/Sink.ts +922 -171
  275. package/src/Stream.ts +32 -20
  276. package/src/Subject.ts +230 -87
  277. package/src/TypeId.ts +16 -4
  278. package/src/Typeclass.ts +31 -32
  279. package/src/Versioned.ts +220 -168
  280. package/src/index.ts +78 -6
  281. package/src/internal/DeferredRef.ts +62 -0
  282. package/src/internal/UnionToTuple.ts +11 -0
  283. package/src/internal/core.ts +2491 -1950
  284. package/src/internal/diff.ts +157 -0
  285. package/src/internal/effect-loop-operator.ts +466 -0
  286. package/src/internal/effect-operator.ts +89 -54
  287. package/src/internal/effect-producer.ts +125 -0
  288. package/src/internal/helpers.ts +275 -205
  289. package/src/internal/keyed.ts +192 -241
  290. package/src/internal/loop-operator.ts +266 -0
  291. package/src/internal/operator.ts +87 -0
  292. package/src/internal/protos.ts +29 -104
  293. package/src/internal/provide.ts +48 -40
  294. package/src/internal/requestIdleCallback.ts +5 -6
  295. package/src/internal/share.ts +26 -24
  296. package/src/internal/sync-operator.ts +68 -27
  297. package/src/internal/sync-producer.ts +146 -0
  298. package/src/internal/withKey.ts +64 -74
  299. package/dist/cjs/Computed.js +0 -115
  300. package/dist/cjs/Computed.js.map +0 -1
  301. package/dist/cjs/Filtered.js +0 -95
  302. package/dist/cjs/Filtered.js.map +0 -1
  303. package/dist/cjs/Model.js +0 -119
  304. package/dist/cjs/Model.js.map +0 -1
  305. package/dist/cjs/RefAsyncData.js +0 -187
  306. package/dist/cjs/RefAsyncData.js.map +0 -1
  307. package/dist/cjs/RefAsyncDataArray.js +0 -38
  308. package/dist/cjs/RefAsyncDataArray.js.map +0 -1
  309. package/dist/cjs/RefBoolean.js +0 -45
  310. package/dist/cjs/RefBoolean.js.map +0 -1
  311. package/dist/cjs/RefNumber.js +0 -49
  312. package/dist/cjs/RefNumber.js.map +0 -1
  313. package/dist/cjs/internal/core-ref-subject.js +0 -254
  314. package/dist/cjs/internal/core-ref-subject.js.map +0 -1
  315. package/dist/cjs/internal/core-subject.js +0 -108
  316. package/dist/cjs/internal/core-subject.js.map +0 -1
  317. package/dist/cjs/internal/deferred-ref.js.map +0 -1
  318. package/dist/cjs/internal/effect-primitive.js +0 -47
  319. package/dist/cjs/internal/effect-primitive.js.map +0 -1
  320. package/dist/cjs/internal/fx-effect-proto.js +0 -58
  321. package/dist/cjs/internal/fx-effect-proto.js.map +0 -1
  322. package/dist/cjs/internal/fx-primitive.js +0 -193
  323. package/dist/cjs/internal/fx-primitive.js.map +0 -1
  324. package/dist/cjs/internal/fx.js +0 -240
  325. package/dist/cjs/internal/fx.js.map +0 -1
  326. package/dist/cjs/internal/matchers.js +0 -34
  327. package/dist/cjs/internal/matchers.js.map +0 -1
  328. package/dist/cjs/internal/run.js +0 -54
  329. package/dist/cjs/internal/run.js.map +0 -1
  330. package/dist/cjs/internal/schema-ref-subject.js +0 -132
  331. package/dist/cjs/internal/schema-ref-subject.js.map +0 -1
  332. package/dist/cjs/internal/versioned-transform.js +0 -46
  333. package/dist/cjs/internal/versioned-transform.js.map +0 -1
  334. package/dist/dts/Computed.d.ts +0 -106
  335. package/dist/dts/Computed.d.ts.map +0 -1
  336. package/dist/dts/Filtered.d.ts +0 -97
  337. package/dist/dts/Filtered.d.ts.map +0 -1
  338. package/dist/dts/Model.d.ts +0 -200
  339. package/dist/dts/Model.d.ts.map +0 -1
  340. package/dist/dts/RefAsyncData.d.ts +0 -236
  341. package/dist/dts/RefAsyncData.d.ts.map +0 -1
  342. package/dist/dts/RefAsyncDataArray.d.ts +0 -56
  343. package/dist/dts/RefAsyncDataArray.d.ts.map +0 -1
  344. package/dist/dts/RefBoolean.d.ts +0 -47
  345. package/dist/dts/RefBoolean.d.ts.map +0 -1
  346. package/dist/dts/RefNumber.d.ts +0 -48
  347. package/dist/dts/RefNumber.d.ts.map +0 -1
  348. package/dist/dts/internal/core-ref-subject.d.ts +0 -100
  349. package/dist/dts/internal/core-ref-subject.d.ts.map +0 -1
  350. package/dist/dts/internal/core-subject.d.ts +0 -5
  351. package/dist/dts/internal/core-subject.d.ts.map +0 -1
  352. package/dist/dts/internal/deferred-ref.d.ts +0 -12
  353. package/dist/dts/internal/deferred-ref.d.ts.map +0 -1
  354. package/dist/dts/internal/effect-primitive.d.ts +0 -6
  355. package/dist/dts/internal/effect-primitive.d.ts.map +0 -1
  356. package/dist/dts/internal/fx-effect-proto.d.ts +0 -30
  357. package/dist/dts/internal/fx-effect-proto.d.ts.map +0 -1
  358. package/dist/dts/internal/fx-primitive.d.ts +0 -109
  359. package/dist/dts/internal/fx-primitive.d.ts.map +0 -1
  360. package/dist/dts/internal/fx.d.ts +0 -245
  361. package/dist/dts/internal/fx.d.ts.map +0 -1
  362. package/dist/dts/internal/matchers.d.ts +0 -33
  363. package/dist/dts/internal/matchers.d.ts.map +0 -1
  364. package/dist/dts/internal/run.d.ts +0 -8
  365. package/dist/dts/internal/run.d.ts.map +0 -1
  366. package/dist/dts/internal/schema-ref-subject.d.ts +0 -5
  367. package/dist/dts/internal/schema-ref-subject.d.ts.map +0 -1
  368. package/dist/dts/internal/versioned-transform.d.ts +0 -17
  369. package/dist/dts/internal/versioned-transform.d.ts.map +0 -1
  370. package/dist/esm/Computed.js +0 -103
  371. package/dist/esm/Computed.js.map +0 -1
  372. package/dist/esm/Filtered.js +0 -83
  373. package/dist/esm/Filtered.js.map +0 -1
  374. package/dist/esm/Model.js +0 -100
  375. package/dist/esm/Model.js.map +0 -1
  376. package/dist/esm/RefAsyncData.js +0 -163
  377. package/dist/esm/RefAsyncData.js.map +0 -1
  378. package/dist/esm/RefAsyncDataArray.js +0 -27
  379. package/dist/esm/RefAsyncDataArray.js.map +0 -1
  380. package/dist/esm/RefBoolean.js +0 -31
  381. package/dist/esm/RefBoolean.js.map +0 -1
  382. package/dist/esm/RefNumber.js +0 -35
  383. package/dist/esm/RefNumber.js.map +0 -1
  384. package/dist/esm/internal/core-ref-subject.js +0 -242
  385. package/dist/esm/internal/core-ref-subject.js.map +0 -1
  386. package/dist/esm/internal/core-subject.js +0 -90
  387. package/dist/esm/internal/core-subject.js.map +0 -1
  388. package/dist/esm/internal/deferred-ref.js +0 -23
  389. package/dist/esm/internal/deferred-ref.js.map +0 -1
  390. package/dist/esm/internal/effect-primitive.js +0 -41
  391. package/dist/esm/internal/effect-primitive.js.map +0 -1
  392. package/dist/esm/internal/fx-effect-proto.js +0 -43
  393. package/dist/esm/internal/fx-effect-proto.js.map +0 -1
  394. package/dist/esm/internal/fx-primitive.js +0 -175
  395. package/dist/esm/internal/fx-primitive.js.map +0 -1
  396. package/dist/esm/internal/fx.js +0 -216
  397. package/dist/esm/internal/fx.js.map +0 -1
  398. package/dist/esm/internal/matchers.js +0 -38
  399. package/dist/esm/internal/matchers.js.map +0 -1
  400. package/dist/esm/internal/run.js +0 -32
  401. package/dist/esm/internal/run.js.map +0 -1
  402. package/dist/esm/internal/schema-ref-subject.js +0 -121
  403. package/dist/esm/internal/schema-ref-subject.js.map +0 -1
  404. package/dist/esm/internal/versioned-transform.js +0 -37
  405. package/dist/esm/internal/versioned-transform.js.map +0 -1
  406. package/src/Computed.ts +0 -289
  407. package/src/Filtered.ts +0 -274
  408. package/src/Model.ts +0 -483
  409. package/src/RefAsyncData.ts +0 -547
  410. package/src/RefAsyncDataArray.ts +0 -135
  411. package/src/RefBoolean.ts +0 -71
  412. package/src/RefNumber.ts +0 -77
  413. package/src/internal/core-ref-subject.ts +0 -528
  414. package/src/internal/core-subject.ts +0 -143
  415. package/src/internal/deferred-ref.ts +0 -26
  416. package/src/internal/effect-primitive.ts +0 -230
  417. package/src/internal/fx-effect-proto.ts +0 -56
  418. package/src/internal/fx-primitive.ts +0 -223
  419. package/src/internal/fx.ts +0 -619
  420. package/src/internal/matchers.ts +0 -83
  421. package/src/internal/run.ts +0 -51
  422. package/src/internal/schema-ref-subject.ts +0 -163
  423. package/src/internal/versioned-transform.ts +0 -48
@@ -3,237 +3,978 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.compact = void 0;
7
- exports.deriveFromSchema = deriveFromSchema;
8
- exports.deriveToSchema = deriveToSchema;
6
+ exports.compact = exports.asTrue = exports.asFalse = void 0;
7
+ exports.computedFromTag = computedFromTag;
8
+ exports.filterMapEffect = exports.filterMap = exports.filterEffect = exports.filter = exports.drop = exports.decrement = void 0;
9
+ exports.filteredFromTag = filteredFromTag;
9
10
  exports.fromEffect = fromEffect;
10
- exports.fromSubscriptionRef = fromSubscriptionRef;
11
- exports.make = make;
12
- exports.makeWithExtension = makeWithExtension;
11
+ exports.fromFx = fromFx;
12
+ exports.fromRefSubject = fromRefSubject;
13
+ exports.fromTag = fromTag;
14
+ exports.increment = void 0;
15
+ exports.isComputed = isComputed;
16
+ exports.isDerived = isDerived;
17
+ exports.isFiltered = isFiltered;
18
+ exports.isRefSubject = isRefSubject;
19
+ exports.modifyEffect = exports.modify = exports.mapEffect = exports.map = exports.make = void 0;
13
20
  exports.of = of;
14
- exports.struct = exports.split = void 0;
15
- exports.sync = sync;
21
+ exports.provide = void 0;
22
+ exports.delete = exports.reset = reset;
23
+ exports.set = exports.runUpdates = void 0;
24
+ exports.skipRepeats = skipRepeats;
25
+ exports.slice = exports.skipRepeatsWith = void 0;
26
+ exports.struct = struct;
16
27
  exports.tagged = tagged;
17
- exports.unsafeMake = exports.tuple = exports.transform = void 0;
28
+ exports.toggle = exports.take = void 0;
29
+ exports.transform = transform;
30
+ exports.transformOrFail = transformOrFail;
31
+ exports.tuple = tuple;
32
+ exports.unsafeMake = unsafeMake;
33
+ exports.updateEffect = exports.update = void 0;
18
34
  var C = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@typed/context"));
19
35
  var _effect = /*#__PURE__*/require("effect");
36
+ var Boolean = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Boolean"));
37
+ var Cause = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Cause"));
20
38
  var Effect = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Effect"));
21
- var _Equal = /*#__PURE__*/require("effect/Equal");
39
+ var Equal = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Equal"));
40
+ var ExecutionStrategy = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/ExecutionStrategy"));
41
+ var Exit = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Exit"));
22
42
  var _Function = /*#__PURE__*/require("effect/Function");
43
+ var Layer = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Layer"));
44
+ var _Number = /*#__PURE__*/require("effect/Number");
23
45
  var Option = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Option"));
24
- var _Computed = /*#__PURE__*/require("./Computed.js");
25
- var _Filtered = /*#__PURE__*/require("./Filtered.js");
26
- var coreRefSubject = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./internal/core-ref-subject.js"));
27
- var _core = /*#__PURE__*/require("./internal/core.js");
28
- var _fx = /*#__PURE__*/require("./internal/fx.js");
46
+ var ReadonlyArray = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/ReadonlyArray"));
47
+ var Scope = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Scope"));
48
+ var core = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./internal/core.js"));
49
+ var DeferredRef = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./internal/DeferredRef.js"));
50
+ var _helpers = /*#__PURE__*/require("./internal/helpers.js");
29
51
  var _protos = /*#__PURE__*/require("./internal/protos.js");
30
- var _schemaRefSubject = /*#__PURE__*/require("./internal/schema-ref-subject.js");
52
+ var _provide = /*#__PURE__*/require("./internal/provide.js");
53
+ var share = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./internal/share.js"));
54
+ var Sink = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./Sink.js"));
55
+ var Subject = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./Subject.js"));
31
56
  var _TypeId = /*#__PURE__*/require("./TypeId.js");
32
57
  var Versioned = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./Versioned.js"));
33
58
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
34
59
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
35
60
  /**
36
- * A RefSubject is the core abstraction for keeping state and subscribing to its
37
- * changes over time.
38
- *
39
- * @since 1.18.0
61
+ * A RefSubject is a Subject that can be used to read and write a value.
62
+ * @since 1.20.0
40
63
  */
41
64
 
65
+ const UNBOUNDED = {
66
+ concurrency: "unbounded"
67
+ };
42
68
  /**
43
- * Construct a RefSubject with a lazily initialized value.
44
- * @since 1.18.0
45
- * @category constructors
69
+ * @since 1.20.0
46
70
  */
47
- function fromEffect(initial, eq) {
48
- return coreRefSubject.fromEffect(initial, eq);
71
+ function fromEffect(effect, options) {
72
+ return Effect.map(makeCore(effect, options), core => new RefSubjectImpl(core));
49
73
  }
50
74
  /**
51
- * Construct a RefSubject from a synchronous value.
52
- * @since 1.18.0
53
- * @category constructors
75
+ * @since 1.20.0
54
76
  */
55
- function of(initial, eq) {
56
- return fromEffect(Effect.succeed(initial), eq);
77
+ function fromFx(fx, options) {
78
+ return DeferredRef.make((0, _helpers.getExitEquivalence)(options?.eq ?? Equal.equals)).pipe(Effect.bindTo("deferredRef"), Effect.bind("core", ({
79
+ deferredRef
80
+ }) => makeCore(deferredRef, options)), Effect.tap(({
81
+ core,
82
+ deferredRef
83
+ }) => Effect.forkIn(fx.run(Sink.make(cause => Effect.flatMap(Effect.sync(() => deferredRef.done(Exit.failCause(cause))), () => core.subject.onFailure(cause)), value => Effect.flatMap(Effect.sync(() => deferredRef.done(Exit.succeed(value))), () => setCore(core, value)))), core.scope)), Effect.map(({
84
+ core
85
+ }) => new RefSubjectImpl(core)));
57
86
  }
58
87
  /**
59
- * Construct a RefSubject from a synchronous value.
60
- * @since 1.18.0
61
- * @category constructors
88
+ * @since 1.20.0
89
+ */
90
+ function fromRefSubject(ref, options) {
91
+ return DeferredRef.make((0, _helpers.getExitEquivalence)(options?.eq ?? Equal.equals)).pipe(Effect.bindTo("deferredRef"), Effect.bind("core", ({
92
+ deferredRef
93
+ }) => makeCore(deferredRef, options)), Effect.tap(({
94
+ core,
95
+ deferredRef
96
+ }) => Effect.forkIn(ref.run(Sink.make(cause => Effect.sync(() => deferredRef.done(Exit.failCause(cause))), value => Effect.sync(() => deferredRef.done(Exit.succeed(value))))), core.scope)), Effect.map(({
97
+ core
98
+ }) => new DerivedImpl(core, persistCore(ref, core))));
99
+ }
100
+ function persistCore(ref, core) {
101
+ // Log any errors that fail to persist, but don't fail the consumer
102
+ return Effect.ignoreLogged(Effect.provide(Effect.flatMap(core.deferredRef, value => set(ref, value)), core.context));
103
+ }
104
+ /**
105
+ * @since 1.20.0
106
+ */
107
+ const make = exports.make = function make(fxOrEffect, options) {
108
+ if (_TypeId.RefSubjectTypeId in fxOrEffect) return fromRefSubject(fxOrEffect, options);else if (_TypeId.TypeId in fxOrEffect) return fromFx(fxOrEffect, options);else return fromEffect(fxOrEffect, options);
109
+ };
110
+ /**
111
+ * @since 1.20.0
62
112
  */
63
- function sync(initial, eq) {
64
- return fromEffect(Effect.sync(initial), eq);
113
+ function of(a, options) {
114
+ return Effect.acquireRelease(withScopeAndFiberId((scope, id) => unsafeMake({
115
+ id,
116
+ initial: Effect.succeed(a),
117
+ initialValue: a,
118
+ options,
119
+ scope
120
+ }), options?.executionStrategy ?? ExecutionStrategy.sequential), ref => ref.interrupt);
65
121
  }
66
- function make(fx, eq) {
67
- return coreRefSubject.make(fx, eq);
122
+ const withScopeAndFiberId = (f, strategy) => Effect.fiberIdWith(id => (0, _helpers.withScope)(scope => f(scope, id), strategy));
123
+ const emptyContext = /*#__PURE__*/C.empty();
124
+ /**
125
+ * @since 1.20.0
126
+ */
127
+ function unsafeMake(params) {
128
+ const {
129
+ id,
130
+ initial,
131
+ options,
132
+ scope
133
+ } = params;
134
+ return Effect.suspend(() => {
135
+ const core = unsafeMakeCore(initial, id, emptyContext, scope, options);
136
+ // Sometimes we might be instantiating directly from a known value
137
+ // Here we seed the value and ensure the subject has it as well for re-broadcasting
138
+ if ("initialValue" in params) {
139
+ core.deferredRef.done(Exit.succeed(params.initialValue));
140
+ return Effect.map(core.subject.onSuccess(params.initialValue), () => new RefSubjectImpl(core));
141
+ }
142
+ return Effect.succeed(new RefSubjectImpl(core));
143
+ });
68
144
  }
69
- function tagged(defaultEq) {
70
- function makeTagged(identifier) {
71
- return new ContextImpl(C.Tagged(identifier), defaultEq);
145
+ class RefSubjectImpl extends _protos.FxEffectBase {
146
+ core;
147
+ [_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
148
+ [_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
149
+ version;
150
+ interrupt;
151
+ subscriberCount;
152
+ getSetDelete;
153
+ constructor(core) {
154
+ super();
155
+ this.core = core;
156
+ this.version = Effect.sync(() => core.deferredRef.version);
157
+ this.interrupt = interruptCore(core);
158
+ this.subscriberCount = Effect.provide(core.subject.subscriberCount, core.context);
159
+ this.getSetDelete = getSetDelete(core);
160
+ this.runUpdates = this.runUpdates.bind(this);
161
+ this.onSuccess = this.onSuccess.bind(this);
162
+ this.onFailure = this.onFailure.bind(this);
163
+ }
164
+ run(sink) {
165
+ return Effect.matchCauseEffect(this.toEffect(), {
166
+ onFailure: cause => sink.onFailure(cause),
167
+ onSuccess: () => Effect.provide(this.core.subject.run(sink), this.core.context)
168
+ });
169
+ }
170
+ runUpdates(run, lock = true) {
171
+ return lock ? this.core.semaphore.withPermits(1)(run(this.getSetDelete)) : run(this.getSetDelete);
172
+ }
173
+ onSuccess(value) {
174
+ return setCore(this.core, value);
175
+ }
176
+ onFailure(cause) {
177
+ return onFailureCore(this.core, cause);
178
+ }
179
+ toEffect() {
180
+ return getOrInitializeCore(this.core, true);
72
181
  }
73
- return makeTagged;
74
182
  }
75
- class ContextImpl extends _protos.FxEffectBase {
76
- tag;
77
- defaultEq;
183
+ class DerivedImpl extends RefSubjectImpl {
184
+ persist;
185
+ constructor(core, persist) {
186
+ super(core);
187
+ this.persist = persist;
188
+ }
189
+ }
190
+ /**
191
+ * @since 1.20.0
192
+ */
193
+ const set = exports.set = /*#__PURE__*/(0, _Function.dual)(2, function set(ref, a) {
194
+ return ref.runUpdates(ref => ref.set(a));
195
+ });
196
+ /**
197
+ * @since 1.20.0
198
+ */
199
+ function reset(ref) {
200
+ return ref.runUpdates(ref => ref.delete);
201
+ }
202
+ /**
203
+ * @since 1.20.0
204
+ */
205
+
206
+ function getSetDelete(ref) {
207
+ return {
208
+ get: getOrInitializeCore(ref, false),
209
+ set: a => setCore(ref, a),
210
+ delete: deleteCore(ref)
211
+ };
212
+ }
213
+ /**
214
+ * @since 1.20.0
215
+ */
216
+ const updateEffect = exports.updateEffect = /*#__PURE__*/(0, _Function.dual)(2, function updateEffect(ref, f) {
217
+ return ref.runUpdates(ref => Effect.flatMap(Effect.flatMap(ref.get, f), ref.set));
218
+ });
219
+ /**
220
+ * @since 1.20.0
221
+ */
222
+ const update = exports.update = /*#__PURE__*/(0, _Function.dual)(2, function update(ref, f) {
223
+ return updateEffect(ref, value => Effect.succeed(f(value)));
224
+ });
225
+ /**
226
+ * @since 1.20.0
227
+ */
228
+ const modifyEffect = exports.modifyEffect = /*#__PURE__*/(0, _Function.dual)(2, function modifyEffect(ref, f) {
229
+ return ref.runUpdates(ref => Effect.flatMap(ref.get, value => Effect.flatMap(f(value), ([b, a]) => Effect.flatMap(ref.set(a), () => Effect.succeed(b)))));
230
+ });
231
+ /**
232
+ * @since 1.20.0
233
+ */
234
+ const modify = exports.modify = /*#__PURE__*/(0, _Function.dual)(2, function modify(ref, f) {
235
+ return modifyEffect(ref, value => Effect.succeed(f(value)));
236
+ });
237
+ const isRefSubjectDataFirst = args => isRefSubject(args[0]);
238
+ /**
239
+ * @since 1.20.0
240
+ */
241
+ const runUpdates = exports.runUpdates = /*#__PURE__*/(0, _Function.dual)(isRefSubjectDataFirst, function runUpdates(ref, f, options) {
242
+ if (!options) {
243
+ return ref.runUpdates(f);
244
+ } else if (options.value === "initial") {
245
+ return ref.runUpdates(ref => Effect.uninterruptibleMask(restore => Effect.flatMap(ref.get, initial => f(ref).pipe(restore, Effect.tapErrorCause(Effect.unifiedFn(cause => Cause.isInterruptedOnly(cause) ? options.onInterrupt(initial) : Effect.unit))))));
246
+ } else {
247
+ return ref.runUpdates(ref => Effect.uninterruptibleMask(restore => f(ref).pipe(restore, Effect.tapErrorCause(Effect.unifiedFn(cause => Cause.isInterruptedOnly(cause) ? Effect.flatMap(ref.get, options.onInterrupt) : Effect.unit)))));
248
+ }
249
+ });
250
+ class RefSubjectCore {
251
+ initial;
252
+ subject;
253
+ context;
254
+ scope;
255
+ deferredRef;
256
+ semaphore;
257
+ constructor(initial, subject, context, scope, deferredRef, semaphore) {
258
+ this.initial = initial;
259
+ this.subject = subject;
260
+ this.context = context;
261
+ this.scope = scope;
262
+ this.deferredRef = deferredRef;
263
+ this.semaphore = semaphore;
264
+ }
265
+ _fiber = undefined;
266
+ }
267
+ function makeCore(initial, options) {
268
+ return Effect.context().pipe(Effect.bindTo("ctx"), Effect.let("executionStrategy", () => options?.executionStrategy ?? ExecutionStrategy.parallel), Effect.bind("scope", ({
269
+ ctx,
270
+ executionStrategy
271
+ }) => Scope.fork(C.get(ctx, Scope.Scope), executionStrategy)), Effect.bind("deferredRef", () => DeferredRef.make((0, _helpers.getExitEquivalence)(options?.eq ?? Equal.equals))), Effect.let("subject", () => Subject.unsafeMake(Math.max(1, options?.replay ?? 1))), Effect.tap(({
272
+ scope,
273
+ subject
274
+ }) => Scope.addFinalizer(scope, subject.interrupt)), Effect.map(({
275
+ ctx,
276
+ deferredRef,
277
+ scope,
278
+ subject
279
+ }) => new RefSubjectCore(initial, subject, ctx, scope, deferredRef, Effect.unsafeMakeSemaphore(1))));
280
+ }
281
+ function unsafeMakeCore(initial, id, ctx, scope, options) {
282
+ return new RefSubjectCore(initial, Subject.unsafeMake(Math.max(1, options?.replay ?? 1)), ctx, scope, DeferredRef.unsafeMake(id, (0, _helpers.getExitEquivalence)(options?.eq ?? Equal.equals)), Effect.unsafeMakeSemaphore(1));
283
+ }
284
+ function getOrInitializeCore(core, lockInitialize) {
285
+ return Effect.suspend(() => {
286
+ if (core._fiber === undefined && Option.isNone(core.deferredRef.current)) {
287
+ return initializeCoreAndTap(core, lockInitialize);
288
+ } else {
289
+ return core.deferredRef;
290
+ }
291
+ });
292
+ }
293
+ function initializeCoreEffect(core, lock) {
294
+ const initialize = Effect.onExit(Effect.provide(core.initial, core.context), exit => {
295
+ core._fiber = undefined;
296
+ core.deferredRef.done(exit);
297
+ return Effect.unit;
298
+ });
299
+ return Effect.flatMap(Effect.forkIn(lock && core.semaphore ? core.semaphore.withPermits(1)(initialize) : initialize, core.scope), fiber => Effect.sync(() => core._fiber = fiber));
300
+ }
301
+ function initializeCore(core, lock) {
302
+ const onSuccess = a => {
303
+ core.deferredRef.done(Exit.succeed(a));
304
+ return Effect.succeed(_effect.Fiber.succeed(a));
305
+ };
306
+ const onCause = cause => {
307
+ core.deferredRef.done(Exit.failCause(cause));
308
+ return Effect.succeed(_effect.Fiber.failCause(cause));
309
+ };
310
+ const onError = e => onCause(Cause.fail(e));
311
+ return (0, _helpers.matchEffectPrimitive)(core.initial, {
312
+ Success: onSuccess,
313
+ Failure: onCause,
314
+ Some: onSuccess,
315
+ None: onError,
316
+ Left: onError,
317
+ Right: onSuccess,
318
+ Sync: f => onSuccess(f()),
319
+ Otherwise: () => initializeCoreEffect(core, lock)
320
+ });
321
+ }
322
+ function initializeCoreAndTap(core, lock) {
323
+ return Effect.zipRight(initializeCore(core, lock), tapEventCore(core, core.deferredRef));
324
+ }
325
+ function setCore(core, a) {
326
+ const exit = Exit.succeed(a);
327
+ return Effect.suspend(() => {
328
+ if (core.deferredRef.done(exit)) {
329
+ // If the value changed, send an event
330
+ return Effect.as(sendEvent(core, exit), a);
331
+ } else {
332
+ // Otherwise, just return the current value
333
+ return Effect.succeed(a);
334
+ }
335
+ });
336
+ }
337
+ function onFailureCore(core, cause) {
338
+ const exit = Exit.failCause(cause);
339
+ return Effect.suspend(() => {
340
+ if (core.deferredRef.done(exit)) {
341
+ return sendEvent(core, exit);
342
+ } else {
343
+ return Effect.unit;
344
+ }
345
+ });
346
+ }
347
+ function interruptCore(core) {
348
+ return Effect.fiberIdWith(id => {
349
+ core.deferredRef.reset();
350
+ return Scope.close(core.scope, Exit.interrupt(id));
351
+ });
352
+ }
353
+ function deleteCore(core) {
354
+ return Effect.suspend(() => {
355
+ const current = core.deferredRef.current;
356
+ core.deferredRef.reset();
357
+ if (Option.isNone(current)) {
358
+ return Effect.succeed(Option.none());
359
+ }
360
+ return core.subject.subscriberCount.pipe(Effect.provide(core.context), Effect.flatMap(count => count > 0 && !core._fiber ? initializeCore(core, false) : Effect.unit), Effect.zipRight(Effect.asSome(current.value)));
361
+ });
362
+ }
363
+ function tapEventCore(core, effect) {
364
+ return effect.pipe(Effect.exit, Effect.tap(exit => sendEvent(core, exit)), Effect.flatten);
365
+ }
366
+ function sendEvent(core, exit) {
367
+ if (Exit.isSuccess(exit)) {
368
+ return Effect.provide(core.subject.onSuccess(exit.value), core.context);
369
+ } else {
370
+ return Effect.provide(core.subject.onFailure(exit.cause), core.context);
371
+ }
372
+ }
373
+ /**
374
+ * @since 1.20.0
375
+ */
376
+ const mapEffect = exports.mapEffect = /*#__PURE__*/(0, _Function.dual)(2, function mapEffect(versioned, f) {
377
+ return _TypeId.FilteredTypeId in versioned ? FilteredImpl.make(versioned, a => Effect.asSome(f(a))) : ComputedImpl.make(versioned, f);
378
+ });
379
+ /**
380
+ * @since 1.20.0
381
+ */
382
+ const map = exports.map = /*#__PURE__*/(0, _Function.dual)(2, function map(versioned, f) {
383
+ return mapEffect(versioned, a => Effect.succeed(f(a)));
384
+ });
385
+ /**
386
+ * @since 1.20.0
387
+ */
388
+ const filterMapEffect = exports.filterMapEffect = /*#__PURE__*/(0, _Function.dual)(2, function filterMapEffect(versioned, f) {
389
+ return FilteredImpl.make(versioned, f);
390
+ });
391
+ /**
392
+ * @since 1.20.0
393
+ */
394
+ const filterMap = exports.filterMap = /*#__PURE__*/(0, _Function.dual)(2, function filterMap(versioned, f) {
395
+ return FilteredImpl.make(versioned, a => Effect.succeed(f(a)));
396
+ });
397
+ /**
398
+ * @since 1.20.0
399
+ */
400
+ const compact = versioned => filterMap(versioned, _Function.identity);
401
+ /**
402
+ * @since 1.20.0
403
+ */
404
+ exports.compact = compact;
405
+ const filterEffect = exports.filterEffect = /*#__PURE__*/(0, _Function.dual)(2, function filterEffect(versioned, f) {
406
+ return FilteredImpl.make(versioned, a => Effect.map(f(a), b => b ? Option.some(a) : Option.none()));
407
+ });
408
+ /**
409
+ * @since 1.20.0
410
+ */
411
+ const filter = exports.filter = /*#__PURE__*/(0, _Function.dual)(2, function filter(versioned, f) {
412
+ return FilteredImpl.make(versioned, a => Effect.succeed(f(a) ? Option.some(a) : Option.none()));
413
+ });
414
+ class ComputedImpl extends Versioned.VersionedTransform {
415
+ input;
416
+ f;
417
+ [_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
418
+ constructor(input, f) {
419
+ super(input, fx => share.hold(core.mapEffect(fx, f)), Effect.flatMap(f));
420
+ this.input = input;
421
+ this.f = f;
422
+ }
423
+ static make(input, f) {
424
+ return new ComputedImpl(input, f);
425
+ }
426
+ }
427
+ class FilteredImpl extends Versioned.VersionedTransform {
428
+ input;
429
+ f;
430
+ [_TypeId.FilteredTypeId] = _TypeId.FilteredTypeId;
431
+ constructor(input, f) {
432
+ super(input, fx => share.hold(core.filterMapEffect(fx, f)), effect => Effect.flatten(Effect.flatMap(effect, f)));
433
+ this.input = input;
434
+ this.f = f;
435
+ }
436
+ static make(input, f) {
437
+ return new FilteredImpl(input, f);
438
+ }
439
+ asComputed() {
440
+ return ComputedImpl.make(this.input, this.f);
441
+ }
442
+ }
443
+ /**
444
+ * @since 1.20.0
445
+ */
446
+ const skipRepeatsWith = exports.skipRepeatsWith = /*#__PURE__*/(0, _Function.dual)(2, function skipRepeatsWith(ref, eq) {
447
+ const versioned = Versioned.transform(ref, fx => core.skipRepeatsWith(fx, eq), _Function.identity);
448
+ if (_TypeId.FilteredTypeId in ref) {
449
+ return FilteredImpl.make(versioned, Effect.succeedSome);
450
+ } else {
451
+ return ComputedImpl.make(versioned, Effect.succeed);
452
+ }
453
+ });
454
+ function skipRepeats(ref) {
455
+ return skipRepeatsWith(ref, Equal.equals);
456
+ }
457
+ /**
458
+ * @since 1.20.0
459
+ */
460
+ function transform(ref, from, to) {
461
+ return new RefSubjectTransform(ref, from, to);
462
+ }
463
+ /**
464
+ * @since 1.20.0
465
+ */
466
+ function transformOrFail(ref, from, to) {
467
+ return new RefSubjectTransformEffect(ref, from, to);
468
+ }
469
+ class RefSubjectTransform extends _protos.FxEffectBase {
470
+ ref;
471
+ from;
472
+ to;
473
+ [_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
78
474
  [_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
475
+ version;
476
+ interrupt;
477
+ subscriberCount;
478
+ constructor(ref, from, to) {
479
+ super();
480
+ this.ref = ref;
481
+ this.from = from;
482
+ this.to = to;
483
+ this.version = ref.version;
484
+ this.interrupt = ref.interrupt;
485
+ this.subscriberCount = ref.subscriberCount;
486
+ }
487
+ run(sink) {
488
+ return this.ref.run(Sink.map(sink, this.from));
489
+ }
490
+ runUpdates(run) {
491
+ return this.ref.runUpdates(ref => run({
492
+ get: Effect.map(ref.get, this.from),
493
+ set: b => Effect.map(ref.set(this.to(b)), this.from),
494
+ delete: Effect.map(ref.delete, Option.map(this.from))
495
+ }));
496
+ }
497
+ onFailure(cause) {
498
+ return this.ref.onFailure(cause);
499
+ }
500
+ onSuccess(value) {
501
+ return this.ref.onSuccess(this.to(value));
502
+ }
503
+ toEffect() {
504
+ return Effect.map(this.ref, this.from);
505
+ }
506
+ }
507
+ class RefSubjectTransformEffect extends _protos.FxEffectBase {
508
+ ref;
509
+ from;
510
+ to;
79
511
  [_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
512
+ [_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
80
513
  version;
514
+ interrupt;
81
515
  subscriberCount;
82
- get;
83
- delete;
516
+ subject;
517
+ constructor(ref, from, to) {
518
+ super();
519
+ this.ref = ref;
520
+ this.from = from;
521
+ this.to = to;
522
+ this.version = ref.version;
523
+ this.interrupt = ref.interrupt;
524
+ this.subscriberCount = ref.subscriberCount;
525
+ this.subject = Subject.unsafeMake();
526
+ }
527
+ run(sink) {
528
+ return core.merge(core.mapEffect(this.ref, this.from), this.subject).run(sink);
529
+ }
530
+ runUpdates(run) {
531
+ return this.ref.runUpdates(ref => run({
532
+ get: Effect.flatMap(ref.get, this.from),
533
+ set: b => Effect.matchCauseEffect(Effect.flatMap(this.to(b), ref.set), {
534
+ onFailure: cause => Effect.as(this.subject.onFailure(cause), b),
535
+ onSuccess: () => Effect.as(this.subject.onSuccess(b), b)
536
+ }),
537
+ delete: Effect.flatMap(ref.delete, Option.match({
538
+ onNone: () => Effect.succeedNone,
539
+ onSome: b => Effect.asSome(this.from(b))
540
+ }))
541
+ }));
542
+ }
543
+ onFailure(cause) {
544
+ return this.subject.onFailure(cause);
545
+ }
546
+ onSuccess(value) {
547
+ return Effect.matchCauseEffect(this.to(value), {
548
+ onFailure: cause => this.subject.onFailure(cause),
549
+ onSuccess: a => this.ref.onSuccess(a)
550
+ });
551
+ }
552
+ toEffect() {
553
+ return Effect.flatMap(this.ref, this.from);
554
+ }
555
+ }
556
+ /**
557
+ * @since 1.20.0
558
+ */
559
+ function tuple(refs) {
560
+ const kind = getRefKind(refs);
561
+ switch (kind) {
562
+ case "r":
563
+ return makeTupleRef(refs);
564
+ case "c":
565
+ return makeTupleComputed(refs);
566
+ case "f":
567
+ return makeTupleFiltered(refs);
568
+ }
569
+ }
570
+ const join = (a, b) => {
571
+ if (a === "r") return b;
572
+ if (b === "r") return a;
573
+ if (a === "f") return a;
574
+ if (b === "f") return b;
575
+ return "c";
576
+ };
577
+ function getRefKind(refs) {
578
+ let kind = "r";
579
+ for (const ref of refs) {
580
+ if (_TypeId.FilteredTypeId in ref) {
581
+ kind = "f";
582
+ break;
583
+ } else if (!(_TypeId.RefSubjectTypeId in ref)) {
584
+ kind = join(kind, "c");
585
+ }
586
+ }
587
+ return kind;
588
+ }
589
+ function makeTupleRef(refs) {
590
+ return new RefSubjectTuple(refs);
591
+ }
592
+ class RefSubjectTuple extends _protos.FxEffectBase {
593
+ refs;
594
+ [_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
595
+ [_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
596
+ version;
597
+ interrupt;
598
+ subscriberCount;
599
+ versioned;
600
+ getSetDelete;
601
+ constructor(refs) {
602
+ super();
603
+ this.refs = refs;
604
+ this.versioned = Versioned.tuple(refs);
605
+ this.version = this.versioned.version;
606
+ this.interrupt = Effect.all(refs.map(r => r.interrupt), UNBOUNDED);
607
+ this.subscriberCount = Effect.map(Effect.all(refs.map(r => r.subscriberCount), UNBOUNDED), ReadonlyArray.reduce(0, _Number.sum));
608
+ this.getSetDelete = {
609
+ get: this.versioned,
610
+ set: a => Effect.all(refs.map((r, i) => set(r, a[i])), UNBOUNDED),
611
+ delete: Effect.map(Effect.all(refs.map(r => reset(r)), UNBOUNDED), Option.all)
612
+ };
613
+ this.runUpdates = this.runUpdates.bind(this);
614
+ this.onFailure = this.onFailure.bind(this);
615
+ this.onSuccess = this.onSuccess.bind(this);
616
+ }
617
+ run(sink) {
618
+ return this.versioned.run(sink);
619
+ }
620
+ toEffect() {
621
+ return this.versioned;
622
+ }
623
+ runUpdates(run) {
624
+ return run(this.getSetDelete);
625
+ }
626
+ onFailure(cause) {
627
+ return Effect.all(this.refs.map(ref => ref.onFailure(cause)));
628
+ }
629
+ onSuccess(value) {
630
+ return Effect.catchAllCause(this.getSetDelete.set(value), c => this.onFailure(c));
631
+ }
632
+ }
633
+ function makeTupleComputed(refs) {
634
+ return new ComputedImpl(Versioned.tuple(refs), Effect.succeed);
635
+ }
636
+ function makeTupleFiltered(refs) {
637
+ return new FilteredImpl(Versioned.tuple(refs), Effect.succeedSome);
638
+ }
639
+ /**
640
+ * @since 1.20.0
641
+ */
642
+ function struct(refs) {
643
+ const kind = getRefKind(Object.values(refs));
644
+ switch (kind) {
645
+ case "r":
646
+ return makeStructRef(refs);
647
+ case "c":
648
+ return makeStructComputed(refs);
649
+ case "f":
650
+ return makeStructFiltered(refs);
651
+ }
652
+ }
653
+ function makeStructRef(refs) {
654
+ return new RefSubjectStruct(refs);
655
+ }
656
+ class RefSubjectStruct extends _protos.FxEffectBase {
657
+ refs;
658
+ [_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
659
+ [_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
660
+ version;
661
+ interrupt;
662
+ subscriberCount;
663
+ versioned;
664
+ getSetDelete;
665
+ constructor(refs) {
666
+ super();
667
+ this.refs = refs;
668
+ this.versioned = Versioned.struct(refs);
669
+ this.version = this.versioned.version;
670
+ this.interrupt = Effect.all(Object.values(refs).map(r => r.interrupt), UNBOUNDED);
671
+ this.subscriberCount = Effect.map(Effect.all(Object.values(refs).map(r => r.subscriberCount), UNBOUNDED), ReadonlyArray.reduce(0, _Number.sum));
672
+ this.getSetDelete = {
673
+ get: this.versioned,
674
+ set: a => Effect.all(Object.keys(refs).map(k => set(refs[k], a[k])), UNBOUNDED),
675
+ delete: Effect.map(Effect.all(Object.values(refs).map(r => reset(r)), UNBOUNDED), Option.all)
676
+ };
677
+ this.runUpdates = this.runUpdates.bind(this);
678
+ this.onFailure = this.onFailure.bind(this);
679
+ this.onSuccess = this.onSuccess.bind(this);
680
+ }
681
+ run(sink) {
682
+ return this.versioned.run(sink);
683
+ }
684
+ toEffect() {
685
+ return this.versioned;
686
+ }
687
+ runUpdates(run) {
688
+ return run(this.getSetDelete);
689
+ }
690
+ onFailure(cause) {
691
+ return Effect.all(Object.values(this.refs).map(ref => ref.onFailure(cause)));
692
+ }
693
+ onSuccess(value) {
694
+ return Effect.catchAllCause(this.getSetDelete.set(value), c => this.onFailure(c));
695
+ }
696
+ }
697
+ function makeStructComputed(refs) {
698
+ return new ComputedImpl(Versioned.struct(refs), Effect.succeed);
699
+ }
700
+ function makeStructFiltered(refs) {
701
+ return new FilteredImpl(Versioned.struct(refs), Effect.succeedSome);
702
+ }
703
+ /**
704
+ * @since 1.20.0
705
+ */
706
+ function tagged(replay) {
707
+ return identifier => new RefSubjectTagged(C.Tagged(identifier), replay);
708
+ }
709
+ class RefSubjectTagged extends _protos.FxEffectBase {
710
+ tag;
711
+ replay;
712
+ [_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
713
+ [_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
714
+ version;
84
715
  interrupt;
85
- constructor(tag, defaultEq) {
716
+ subscriberCount;
717
+ constructor(tag, replay = 0) {
86
718
  super();
87
719
  this.tag = tag;
88
- this.defaultEq = defaultEq;
720
+ this.replay = replay;
89
721
  this.version = tag.withEffect(ref => ref.version);
722
+ this.interrupt = tag.withEffect(ref => ref.interrupt);
90
723
  this.subscriberCount = tag.withEffect(ref => ref.subscriberCount);
91
- this.get = tag.withEffect(ref => ref.get);
92
- this.delete = tag.withEffect(ref => ref.delete);
93
- this.interrupt = tag.withEffect(r => r.interrupt);
724
+ this.runUpdates = this.runUpdates.bind(this);
725
+ this.onFailure = this.onFailure.bind(this);
726
+ this.onSuccess = this.onSuccess.bind(this);
94
727
  }
95
- toFx() {
96
- return (0, _fx.fromFxEffect)(this.tag);
728
+ run(sink) {
729
+ return this.tag.withEffect(ref => ref.run(sink));
97
730
  }
98
731
  toEffect() {
99
- return this.get;
100
- }
101
- runUpdate = (f, onInterrupt) => this.tag.withEffect(ref => ref.runUpdate(f, onInterrupt));
102
- modifyEffect = f => this.tag.withEffect(ref => ref.modifyEffect(f));
103
- modify = f => this.tag.withEffect(ref => ref.modify(f));
104
- updateEffect = f => this.tag.withEffect(ref => ref.updateEffect(f));
105
- update = f => this.tag.withEffect(ref => ref.update(f));
106
- set = a => this.tag.withEffect(ref => ref.set(a));
107
- mapEffect = f => (0, _Computed.Computed)(this, f);
108
- map = f => (0, _Computed.Computed)(this, a => Effect.sync(() => f(a)));
109
- filterMapEffect = f => (0, _Filtered.Filtered)(this, f);
110
- filterMap = f => (0, _Filtered.Filtered)(this, a => Effect.sync(() => f(a)));
111
- filter = f => this.filterMap(a => f(a) ? Option.some(a) : Option.none());
112
- filterEffect = f => this.filterMapEffect(a => Effect.map(f(a), b => b ? Option.some(a) : Option.none()));
113
- skipRepeats = (eq = _Equal.equals) => (0, _Computed.fromTag)(this.tag, s => s.skipRepeats(eq));
114
- onFailure = cause => this.tag.withEffect(ref => ref.onFailure(cause));
115
- onSuccess = a => this.tag.withEffect(ref => ref.onSuccess(a));
116
- make = (fx, eq) => this.tag.scoped(make(fx, eq || this.defaultEq));
117
- of = (value, eq) => this.tag.scoped(of(value, eq));
118
- provide = (fx, eq) => Effect.provide(this.make(fx, eq || this.defaultEq));
119
- provideFx = (fx, eq) => (0, _core.provide)(this.make(fx, eq || this.defaultEq));
120
- }
121
- function makeWithExtension(fx, f, eq) {
122
- return coreRefSubject.makeWithExtension(fx, f, eq);
123
- }
124
- /**
125
- * Construct a RefSubject with an initial value and the specified subject.
126
- * @since 1.18.0
127
- * @category constructors
732
+ return this.tag.withEffect(ref => ref);
733
+ }
734
+ runUpdates(run) {
735
+ return this.tag.withEffect(ref => ref.runUpdates(run));
736
+ }
737
+ onFailure(cause) {
738
+ return this.tag.withEffect(ref => ref.onFailure(cause));
739
+ }
740
+ onSuccess(value) {
741
+ return this.tag.withEffect(ref => ref.onSuccess(value));
742
+ }
743
+ make = fxOrEffect => this.tag.scoped(make(fxOrEffect));
744
+ }
745
+ /**
746
+ * @since 1.20.0
128
747
  */
129
- const unsafeMake = exports.unsafeMake = coreRefSubject.unsafeMake;
748
+ function fromTag(tag, f) {
749
+ return new RefSubjectFromTag(tag, f);
750
+ }
751
+ class RefSubjectFromTag extends _protos.FxEffectBase {
752
+ tag;
753
+ f;
754
+ [_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
755
+ [_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
756
+ version;
757
+ interrupt;
758
+ subscriberCount;
759
+ _get;
760
+ _fx;
761
+ constructor(tag, f) {
762
+ super();
763
+ this.tag = tag;
764
+ this.f = f;
765
+ this._get = Effect.map(tag, f);
766
+ this._fx = core.fromFxEffect(this._get);
767
+ this.version = Effect.flatMap(this._get, ref => ref.version);
768
+ this.interrupt = Effect.flatMap(this._get, ref => ref.interrupt);
769
+ this.subscriberCount = Effect.flatMap(this._get, ref => ref.subscriberCount);
770
+ }
771
+ run(sink) {
772
+ return this._fx.run(sink);
773
+ }
774
+ toEffect() {
775
+ return Effect.flatten(this._get);
776
+ }
777
+ runUpdates(run) {
778
+ return Effect.flatMap(this._get, ref => ref.runUpdates(run));
779
+ }
780
+ onFailure(cause) {
781
+ return Effect.flatMap(this._get, ref => ref.onFailure(cause));
782
+ }
783
+ onSuccess(value) {
784
+ return Effect.flatMap(this._get, ref => ref.onSuccess(value));
785
+ }
786
+ }
787
+ function isRefSubject(u) {
788
+ return isObjectLike(u) && _TypeId.RefSubjectTypeId in u;
789
+ }
790
+ function isComputed(u) {
791
+ return isObjectLike(u) && _TypeId.ComputedTypeId in u;
792
+ }
793
+ function isFiltered(u) {
794
+ return isObjectLike(u) && _TypeId.FilteredTypeId in u;
795
+ }
796
+ function isDerived(u) {
797
+ return isRefSubject(u) && "persist" in u;
798
+ }
799
+ function isObjectLike(u) {
800
+ if (u == null) return false;
801
+ const type = typeof u;
802
+ return type === "object" && !Array.isArray(u) || type === "function";
803
+ }
130
804
  /**
131
- * Flatten an RefSubject of an Option into a Filtered.
132
- * @since 1.18.0
133
- * @category combinators
805
+ * @since 1.20.0
134
806
  */
135
- const compact = refSubject => refSubject.filterMap(_effect.identity);
807
+ function computedFromTag(tag, f) {
808
+ return new ComputedFromTag(tag, f);
809
+ }
810
+ class ComputedFromTag extends _protos.FxEffectBase {
811
+ tag;
812
+ f;
813
+ [_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
814
+ version;
815
+ _get;
816
+ constructor(tag, f) {
817
+ super();
818
+ this.tag = tag;
819
+ this.f = f;
820
+ this._get = Effect.map(tag, f);
821
+ this.version = Effect.flatMap(this._get, ref => ref.version);
822
+ }
823
+ run(sink) {
824
+ return Effect.flatMap(this._get, ref => ref.run(sink));
825
+ }
826
+ toEffect() {
827
+ return Effect.flatten(this._get);
828
+ }
829
+ }
136
830
  /**
137
- * Split a RefSubject's into 2 Filtered values that track its errors and
138
- * success values separately.
139
- * @since 1.18.0
140
- * @category combinators
831
+ * @since 1.20.0
141
832
  */
142
- exports.compact = compact;
143
- const split = refSubject => {
144
- const versioned = Versioned.transform(refSubject, _fx.exit, Effect.exit);
145
- const left = (0, _Filtered.Filtered)(versioned, getLeft);
146
- const right = (0, _Filtered.Filtered)(versioned, getRight);
147
- return [left, right];
148
- };
149
- exports.split = split;
150
- const getLeft = exit => Effect.succeed(_effect.Exit.match(exit, {
151
- onFailure: cause => _effect.Cause.failureOption(cause),
152
- onSuccess: () => Option.none()
153
- }));
154
- const getRight = exit => Effect.succeed(_effect.Exit.match(exit, {
155
- onFailure: Option.none,
156
- onSuccess: Option.some
157
- }));
158
- /**
159
- * Derive a RefSubjectSchema using the "from" or "encoded" value represented by a Schema.
160
- * @since 1.18.0
833
+ function filteredFromTag(tag, f) {
834
+ return new FilteredFromTag(tag, f);
835
+ }
836
+ class FilteredFromTag extends _protos.FxEffectBase {
837
+ tag;
838
+ f;
839
+ [_TypeId.FilteredTypeId] = _TypeId.FilteredTypeId;
840
+ version;
841
+ _get;
842
+ constructor(tag, f) {
843
+ super();
844
+ this.tag = tag;
845
+ this.f = f;
846
+ this._get = Effect.map(tag, f);
847
+ this.version = Effect.flatMap(this._get, ref => ref.version);
848
+ }
849
+ run(sink) {
850
+ return Effect.flatMap(this._get, ref => ref.run(sink));
851
+ }
852
+ toEffect() {
853
+ return Effect.flatten(this._get);
854
+ }
855
+ asComputed() {
856
+ return new ComputedFromTag(this.tag, s => this.f(s).asComputed());
857
+ }
858
+ }
859
+ /**
860
+ * @since 1.20.0
161
861
  */
162
- function deriveFromSchema(schema) {
163
- return (0, _schemaRefSubject.fromRefSubject)(schema);
862
+ const provide = exports.provide = /*#__PURE__*/(0, _Function.dual)(2, function provide(ref, providing) {
863
+ const layer = Layer.isLayer(providing) ? providing : C.isContext(providing) ? Layer.succeedContext(providing) : (0, _provide.runtimeToLayer)(providing);
864
+ if (isComputed(ref)) {
865
+ return ComputedImpl.make(Versioned.provide(ref, layer), Effect.succeed);
866
+ } else if (isFiltered(ref)) {
867
+ return FilteredImpl.make(Versioned.provide(ref, layer), Effect.succeedSome);
868
+ } else {
869
+ return new RefSubjectProvide(ref, layer);
870
+ }
871
+ });
872
+ class RefSubjectProvide extends _protos.FxEffectBase {
873
+ ref;
874
+ layer;
875
+ [_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
876
+ [_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
877
+ interrupt;
878
+ subscriberCount;
879
+ constructor(ref, layer) {
880
+ super();
881
+ this.ref = ref;
882
+ this.layer = layer;
883
+ this.interrupt = Effect.provide(ref.interrupt, layer);
884
+ this.subscriberCount = Effect.provide(ref.subscriberCount, layer);
885
+ }
886
+ run(sink) {
887
+ return Effect.provide(this.ref.run(sink), this.layer);
888
+ }
889
+ toEffect() {
890
+ return Effect.provide(this.ref, this.layer);
891
+ }
164
892
  }
165
893
  /**
166
- * Derive a RefSubjectSchema using the "to" or "decoded" value represented by a Schema.
894
+ * Set the value to true
167
895
  * @since 1.18.0
168
896
  */
169
- function deriveToSchema(schema) {
170
- return (0, _schemaRefSubject.toRefSubject)(schema);
171
- }
897
+ const asTrue = ref => set(ref, true);
172
898
  /**
899
+ * Set the value to false
173
900
  * @since 1.18.0
174
901
  */
175
- const tuple = exports.tuple = coreRefSubject.tuple;
902
+ exports.asTrue = asTrue;
903
+ const asFalse = ref => set(ref, false);
176
904
  /**
905
+ * Toggle the boolean value between true and false
177
906
  * @since 1.18.0
178
907
  */
179
- const struct = exports.struct = coreRefSubject.struct;
908
+ exports.asFalse = asFalse;
909
+ const toggle = ref => update(ref, Boolean.not);
910
+ exports.toggle = toggle;
911
+ const add = x => x + 1;
180
912
  /**
913
+ * Set the value to true
181
914
  * @since 1.18.0
182
915
  */
183
- function fromSubscriptionRef(subscriptionRef) {
184
- return coreRefSubject.make((0, _core.fromStream)(subscriptionRef.changes));
185
- }
916
+ const increment = ref => update(ref, add);
917
+ exports.increment = increment;
918
+ const sub = x => x - 1;
186
919
  /**
920
+ * Set the value to false
187
921
  * @since 1.18.0
188
922
  */
189
- const transform = exports.transform = /*#__PURE__*/(0, _Function.dual)(3, function transform(ref, from, to) {
190
- return new TransformImpl(ref, from, to);
923
+ const decrement = ref => update(ref, sub);
924
+ /**
925
+ * @since 1.20.0
926
+ */
927
+ exports.decrement = decrement;
928
+ const slice = exports.slice = /*#__PURE__*/(0, _Function.dual)(3, function slice(ref, drop, take) {
929
+ return new RefSubjectSlice(ref, drop, take);
930
+ });
931
+ /**
932
+ * @since 1.20.0
933
+ */
934
+ const drop = exports.drop = /*#__PURE__*/(0, _Function.dual)(2, function drop(ref, drop) {
935
+ return slice(ref, drop, Infinity);
191
936
  });
192
- class TransformImpl extends _protos.FxEffectBase {
937
+ /**
938
+ * @since 1.20.0
939
+ */
940
+ const take = exports.take = /*#__PURE__*/(0, _Function.dual)(2, function take(ref, take) {
941
+ return slice(ref, 0, take);
942
+ });
943
+ class RefSubjectSlice extends _protos.FxEffectBase {
193
944
  ref;
194
- from;
195
- to;
196
- [_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
945
+ drop;
946
+ take;
197
947
  [_TypeId.ComputedTypeId] = _TypeId.ComputedTypeId;
948
+ [_TypeId.RefSubjectTypeId] = _TypeId.RefSubjectTypeId;
198
949
  version;
199
- subscriberCount;
200
- get;
201
- delete;
202
950
  interrupt;
203
- constructor(ref, from, to) {
951
+ subscriberCount;
952
+ _fx;
953
+ constructor(ref, drop, take) {
204
954
  super();
205
955
  this.ref = ref;
206
- this.from = from;
207
- this.to = to;
956
+ this.drop = drop;
957
+ this.take = take;
208
958
  this.version = ref.version;
209
- this.subscriberCount = ref.subscriberCount;
210
- this.get = Effect.map(ref.get, from);
211
- this.delete = Effect.map(ref.delete, Option.map(from));
212
959
  this.interrupt = ref.interrupt;
960
+ this.subscriberCount = ref.subscriberCount;
961
+ this._fx = share.hold(core.slice(ref, drop, take));
962
+ this._effect = ref;
213
963
  }
214
- toFx() {
215
- return this.ref.map(this.from);
964
+ run(sink) {
965
+ return this._fx.run(sink);
216
966
  }
217
967
  toEffect() {
218
- return this.ref.map(this.from);
219
- }
220
- set = b => Effect.map(this.ref.set(this.to(b)), this.from);
221
- update = f => Effect.map(this.ref.update(a => this.to(f(this.from(a)))), this.from);
222
- updateEffect = f => Effect.map(this.ref.updateEffect(a => Effect.map(f(this.from(a)), this.to)), this.from);
223
- modifyEffect = f => this.ref.modifyEffect(a => Effect.map(f(this.from(a)), ([c, b]) => [c, this.to(b)]));
224
- modify = f => this.ref.modify(a => {
225
- const [c, b] = f(this.from(a));
226
- return [c, this.to(b)];
227
- });
228
- runUpdate = f => this.ref.runUpdate((get, set) => f(Effect.map(get, this.from), b => Effect.map(set(this.to(b)), this.from)));
229
- mapEffect = f => (0, _Computed.Computed)(this, f);
230
- map = f => this.mapEffect(b => Effect.sync(() => f(b)));
231
- filterMapEffect = f => (0, _Filtered.Filtered)(this, f);
232
- filterMap = f => (0, _Filtered.Filtered)(this, a => Effect.sync(() => f(a)));
233
- filter = f => this.filterMap(a => f(a) ? Option.some(a) : Option.none());
234
- filterEffect = f => this.filterMapEffect(a => Effect.map(f(a), b => b ? Option.some(a) : Option.none()));
235
- onSuccess = b => this.ref.onSuccess(this.to(b));
236
- onFailure = b => this.ref.onFailure(b);
237
- skipRepeats = (eq = _Equal.equals) => (0, _Computed.Computed)(Versioned.transformFx(this, (0, _core.skipRepeatsWith)(eq)), Effect.succeed);
968
+ return this.ref;
969
+ }
970
+ runUpdates(run) {
971
+ return this.ref.runUpdates(run);
972
+ }
973
+ onFailure(cause) {
974
+ return this.ref.onFailure(cause);
975
+ }
976
+ onSuccess(value) {
977
+ return this.ref.onSuccess(value);
978
+ }
238
979
  }
239
980
  //# sourceMappingURL=RefSubject.js.map