signalium 1.2.1 → 2.0.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 (388) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/{build/transform.js → config.js} +1 -5
  3. package/{build/react.js → debug.js} +1 -5
  4. package/dist/cjs/config.d.ts +1 -21
  5. package/dist/cjs/config.d.ts.map +1 -1
  6. package/dist/cjs/config.js +3 -36
  7. package/dist/cjs/config.js.map +1 -1
  8. package/dist/cjs/debug.d.ts +1 -1
  9. package/dist/cjs/debug.d.ts.map +1 -1
  10. package/dist/cjs/debug.js +1 -1
  11. package/dist/cjs/debug.js.map +1 -1
  12. package/dist/cjs/index.d.ts +5 -6
  13. package/dist/cjs/index.d.ts.map +1 -1
  14. package/dist/cjs/index.js +17 -22
  15. package/dist/cjs/index.js.map +1 -1
  16. package/dist/cjs/internals/async.d.ts +24 -19
  17. package/dist/cjs/internals/async.d.ts.map +1 -1
  18. package/dist/cjs/internals/async.js +264 -137
  19. package/dist/cjs/internals/async.js.map +1 -1
  20. package/dist/cjs/internals/callback.d.ts +13 -0
  21. package/dist/cjs/internals/callback.d.ts.map +1 -0
  22. package/dist/cjs/internals/callback.js +73 -0
  23. package/dist/cjs/internals/callback.js.map +1 -0
  24. package/dist/cjs/internals/config.d.ts +7 -0
  25. package/dist/cjs/internals/config.d.ts.map +1 -0
  26. package/dist/cjs/internals/config.js +17 -0
  27. package/dist/cjs/internals/config.js.map +1 -0
  28. package/dist/cjs/internals/consumer.d.ts +3 -3
  29. package/dist/cjs/internals/consumer.d.ts.map +1 -1
  30. package/dist/cjs/internals/consumer.js.map +1 -1
  31. package/dist/cjs/internals/contexts.d.ts +16 -15
  32. package/dist/cjs/internals/contexts.d.ts.map +1 -1
  33. package/dist/cjs/internals/contexts.js +58 -56
  34. package/dist/cjs/internals/contexts.js.map +1 -1
  35. package/dist/cjs/internals/core-api.d.ts +15 -0
  36. package/dist/cjs/internals/core-api.d.ts.map +1 -0
  37. package/dist/cjs/internals/core-api.js +83 -0
  38. package/dist/cjs/internals/core-api.js.map +1 -0
  39. package/dist/cjs/internals/dirty.d.ts +3 -3
  40. package/dist/cjs/internals/dirty.d.ts.map +1 -1
  41. package/dist/cjs/internals/dirty.js +13 -13
  42. package/dist/cjs/internals/dirty.js.map +1 -1
  43. package/dist/cjs/internals/edge.d.ts +5 -5
  44. package/dist/cjs/internals/edge.d.ts.map +1 -1
  45. package/dist/cjs/internals/edge.js.map +1 -1
  46. package/dist/cjs/internals/generators.d.ts +5 -0
  47. package/dist/cjs/internals/generators.d.ts.map +1 -0
  48. package/dist/cjs/internals/generators.js +83 -0
  49. package/dist/cjs/internals/generators.js.map +1 -0
  50. package/dist/cjs/internals/get.d.ts +5 -8
  51. package/dist/cjs/internals/get.d.ts.map +1 -1
  52. package/dist/cjs/internals/get.js +48 -107
  53. package/dist/cjs/internals/get.js.map +1 -1
  54. package/dist/cjs/internals/reactive.d.ts +77 -0
  55. package/dist/cjs/internals/reactive.d.ts.map +1 -0
  56. package/dist/cjs/internals/{derived.js → reactive.js} +45 -33
  57. package/dist/cjs/internals/reactive.js.map +1 -0
  58. package/dist/cjs/internals/scheduling.d.ts +7 -7
  59. package/dist/cjs/internals/scheduling.d.ts.map +1 -1
  60. package/dist/cjs/internals/scheduling.js +9 -9
  61. package/dist/cjs/internals/scheduling.js.map +1 -1
  62. package/dist/cjs/internals/signal.d.ts +20 -0
  63. package/dist/cjs/internals/signal.d.ts.map +1 -0
  64. package/dist/cjs/internals/{state.js → signal.js} +31 -27
  65. package/dist/cjs/internals/signal.js.map +1 -0
  66. package/dist/{esm → cjs/internals}/trace.d.ts +1 -1
  67. package/dist/cjs/internals/trace.d.ts.map +1 -0
  68. package/dist/cjs/{trace.js → internals/trace.js} +1 -1
  69. package/dist/cjs/internals/trace.js.map +1 -0
  70. package/dist/cjs/internals/utils/equals.d.ts +4 -4
  71. package/dist/cjs/internals/utils/equals.d.ts.map +1 -1
  72. package/dist/cjs/internals/utils/equals.js.map +1 -1
  73. package/dist/cjs/internals/utils/type-utils.d.ts +0 -2
  74. package/dist/cjs/internals/utils/type-utils.d.ts.map +1 -1
  75. package/dist/cjs/internals/utils/type-utils.js +0 -5
  76. package/dist/cjs/internals/utils/type-utils.js.map +1 -1
  77. package/dist/cjs/internals/watch.d.ts +4 -0
  78. package/dist/cjs/internals/watch.d.ts.map +1 -0
  79. package/dist/cjs/internals/{connect.js → watch.js} +7 -7
  80. package/dist/cjs/internals/watch.js.map +1 -0
  81. package/dist/cjs/internals/weakref.d.ts.map +1 -0
  82. package/dist/cjs/internals/weakref.js.map +1 -0
  83. package/dist/cjs/react/component.d.ts +2 -0
  84. package/dist/cjs/react/component.d.ts.map +1 -0
  85. package/dist/cjs/react/component.js +40 -0
  86. package/dist/cjs/react/component.js.map +1 -0
  87. package/dist/cjs/react/context.d.ts +2 -1
  88. package/dist/cjs/react/context.d.ts.map +1 -1
  89. package/dist/cjs/react/context.js +10 -5
  90. package/dist/cjs/react/context.js.map +1 -1
  91. package/dist/cjs/react/index.d.ts +4 -4
  92. package/dist/cjs/react/index.d.ts.map +1 -1
  93. package/dist/cjs/react/index.js +11 -8
  94. package/dist/cjs/react/index.js.map +1 -1
  95. package/dist/cjs/react/provider.d.ts.map +1 -1
  96. package/dist/cjs/react/provider.js +1 -1
  97. package/dist/cjs/react/provider.js.map +1 -1
  98. package/dist/cjs/react/rendering.d.ts +0 -6
  99. package/dist/cjs/react/rendering.d.ts.map +1 -1
  100. package/dist/cjs/react/rendering.js +1 -19
  101. package/dist/cjs/react/rendering.js.map +1 -1
  102. package/dist/cjs/react/use-reactive.d.ts +7 -0
  103. package/dist/cjs/react/use-reactive.d.ts.map +1 -0
  104. package/dist/cjs/react/use-reactive.js +67 -0
  105. package/dist/cjs/react/use-reactive.js.map +1 -0
  106. package/dist/cjs/react/use-signal.d.ts +3 -0
  107. package/dist/cjs/react/use-signal.d.ts.map +1 -0
  108. package/dist/cjs/react/{state.js → use-signal.js} +5 -5
  109. package/dist/cjs/react/use-signal.js.map +1 -0
  110. package/dist/cjs/{transform.d.ts → transform/async.d.ts} +1 -1
  111. package/dist/cjs/transform/async.d.ts.map +1 -0
  112. package/dist/cjs/{transform.js → transform/async.js} +22 -9
  113. package/dist/cjs/transform/async.js.map +1 -0
  114. package/dist/cjs/transform/callback.d.ts +6 -0
  115. package/dist/cjs/transform/callback.d.ts.map +1 -0
  116. package/dist/cjs/transform/callback.js +259 -0
  117. package/dist/cjs/transform/callback.js.map +1 -0
  118. package/dist/cjs/transform/index.d.ts +5 -0
  119. package/dist/cjs/transform/index.d.ts.map +1 -0
  120. package/dist/cjs/transform/index.js +12 -0
  121. package/dist/cjs/transform/index.js.map +1 -0
  122. package/dist/cjs/transform/preset.d.ts +7 -0
  123. package/dist/cjs/transform/preset.d.ts.map +1 -0
  124. package/dist/cjs/transform/preset.js +20 -0
  125. package/dist/cjs/transform/preset.js.map +1 -0
  126. package/dist/cjs/transform/promise.d.ts +6 -0
  127. package/dist/cjs/transform/promise.d.ts.map +1 -0
  128. package/dist/cjs/transform/promise.js +129 -0
  129. package/dist/cjs/transform/promise.js.map +1 -0
  130. package/dist/cjs/types.d.ts +44 -63
  131. package/dist/cjs/types.d.ts.map +1 -1
  132. package/dist/cjs/utils.d.ts +2 -0
  133. package/dist/cjs/utils.d.ts.map +1 -0
  134. package/dist/cjs/utils.js +7 -0
  135. package/dist/cjs/utils.js.map +1 -0
  136. package/dist/esm/config.d.ts +1 -21
  137. package/dist/esm/config.d.ts.map +1 -1
  138. package/dist/esm/config.js +1 -29
  139. package/dist/esm/config.js.map +1 -1
  140. package/dist/esm/debug.d.ts +1 -1
  141. package/dist/esm/debug.d.ts.map +1 -1
  142. package/dist/esm/debug.js +1 -1
  143. package/dist/esm/debug.js.map +1 -1
  144. package/dist/esm/index.d.ts +5 -6
  145. package/dist/esm/index.d.ts.map +1 -1
  146. package/dist/esm/index.js +5 -6
  147. package/dist/esm/index.js.map +1 -1
  148. package/dist/esm/internals/async.d.ts +24 -19
  149. package/dist/esm/internals/async.d.ts.map +1 -1
  150. package/dist/esm/internals/async.js +253 -128
  151. package/dist/esm/internals/async.js.map +1 -1
  152. package/dist/esm/internals/callback.d.ts +13 -0
  153. package/dist/esm/internals/callback.d.ts.map +1 -0
  154. package/dist/esm/internals/callback.js +67 -0
  155. package/dist/esm/internals/callback.js.map +1 -0
  156. package/dist/esm/internals/config.d.ts +7 -0
  157. package/dist/esm/internals/config.d.ts.map +1 -0
  158. package/dist/esm/internals/config.js +11 -0
  159. package/dist/esm/internals/config.js.map +1 -0
  160. package/dist/esm/internals/consumer.d.ts +3 -3
  161. package/dist/esm/internals/consumer.d.ts.map +1 -1
  162. package/dist/esm/internals/consumer.js.map +1 -1
  163. package/dist/esm/internals/contexts.d.ts +16 -15
  164. package/dist/esm/internals/contexts.d.ts.map +1 -1
  165. package/dist/esm/internals/contexts.js +52 -50
  166. package/dist/esm/internals/contexts.js.map +1 -1
  167. package/dist/esm/internals/core-api.d.ts +15 -0
  168. package/dist/esm/internals/core-api.d.ts.map +1 -0
  169. package/dist/esm/internals/core-api.js +74 -0
  170. package/dist/esm/internals/core-api.js.map +1 -0
  171. package/dist/esm/internals/dirty.d.ts +3 -3
  172. package/dist/esm/internals/dirty.d.ts.map +1 -1
  173. package/dist/esm/internals/dirty.js +12 -12
  174. package/dist/esm/internals/dirty.js.map +1 -1
  175. package/dist/esm/internals/edge.d.ts +5 -5
  176. package/dist/esm/internals/edge.d.ts.map +1 -1
  177. package/dist/esm/internals/edge.js.map +1 -1
  178. package/dist/esm/internals/generators.d.ts +5 -0
  179. package/dist/esm/internals/generators.d.ts.map +1 -0
  180. package/dist/esm/internals/generators.js +79 -0
  181. package/dist/esm/internals/generators.js.map +1 -0
  182. package/dist/esm/internals/get.d.ts +5 -8
  183. package/dist/esm/internals/get.d.ts.map +1 -1
  184. package/dist/esm/internals/get.js +43 -100
  185. package/dist/esm/internals/get.js.map +1 -1
  186. package/dist/esm/internals/reactive.d.ts +77 -0
  187. package/dist/esm/internals/reactive.d.ts.map +1 -0
  188. package/dist/esm/internals/{derived.js → reactive.js} +41 -29
  189. package/dist/esm/internals/reactive.js.map +1 -0
  190. package/dist/esm/internals/scheduling.d.ts +7 -7
  191. package/dist/esm/internals/scheduling.d.ts.map +1 -1
  192. package/dist/esm/internals/scheduling.js +6 -6
  193. package/dist/esm/internals/scheduling.js.map +1 -1
  194. package/dist/esm/internals/signal.d.ts +20 -0
  195. package/dist/esm/internals/signal.d.ts.map +1 -0
  196. package/dist/esm/internals/{state.js → signal.js} +25 -22
  197. package/dist/esm/internals/signal.js.map +1 -0
  198. package/dist/{cjs → esm/internals}/trace.d.ts +1 -1
  199. package/dist/esm/internals/trace.d.ts.map +1 -0
  200. package/dist/esm/{trace.js → internals/trace.js} +1 -1
  201. package/dist/esm/internals/trace.js.map +1 -0
  202. package/dist/esm/internals/utils/equals.d.ts +4 -4
  203. package/dist/esm/internals/utils/equals.d.ts.map +1 -1
  204. package/dist/esm/internals/utils/equals.js.map +1 -1
  205. package/dist/esm/internals/utils/type-utils.d.ts +0 -2
  206. package/dist/esm/internals/utils/type-utils.d.ts.map +1 -1
  207. package/dist/esm/internals/utils/type-utils.js +0 -4
  208. package/dist/esm/internals/utils/type-utils.js.map +1 -1
  209. package/dist/esm/internals/watch.d.ts +4 -0
  210. package/dist/esm/internals/watch.d.ts.map +1 -0
  211. package/dist/esm/internals/{connect.js → watch.js} +7 -7
  212. package/dist/esm/internals/watch.js.map +1 -0
  213. package/dist/esm/internals/weakref.d.ts.map +1 -0
  214. package/dist/esm/internals/weakref.js.map +1 -0
  215. package/dist/esm/react/component.d.ts +2 -0
  216. package/dist/esm/react/component.d.ts.map +1 -0
  217. package/dist/esm/react/component.js +37 -0
  218. package/dist/esm/react/component.js.map +1 -0
  219. package/dist/esm/react/context.d.ts +2 -1
  220. package/dist/esm/react/context.d.ts.map +1 -1
  221. package/dist/esm/react/context.js +10 -6
  222. package/dist/esm/react/context.js.map +1 -1
  223. package/dist/esm/react/index.d.ts +4 -4
  224. package/dist/esm/react/index.d.ts.map +1 -1
  225. package/dist/esm/react/index.js +4 -4
  226. package/dist/esm/react/index.js.map +1 -1
  227. package/dist/esm/react/provider.d.ts.map +1 -1
  228. package/dist/esm/react/provider.js +2 -2
  229. package/dist/esm/react/provider.js.map +1 -1
  230. package/dist/esm/react/rendering.d.ts +0 -6
  231. package/dist/esm/react/rendering.d.ts.map +1 -1
  232. package/dist/esm/react/rendering.js +1 -17
  233. package/dist/esm/react/rendering.js.map +1 -1
  234. package/dist/esm/react/use-reactive.d.ts +7 -0
  235. package/dist/esm/react/use-reactive.d.ts.map +1 -0
  236. package/dist/esm/react/use-reactive.js +64 -0
  237. package/dist/esm/react/use-reactive.js.map +1 -0
  238. package/dist/esm/react/use-signal.d.ts +3 -0
  239. package/dist/esm/react/use-signal.d.ts.map +1 -0
  240. package/dist/esm/react/use-signal.js +10 -0
  241. package/dist/esm/react/use-signal.js.map +1 -0
  242. package/dist/esm/{transform.d.ts → transform/async.d.ts} +1 -1
  243. package/dist/esm/transform/async.d.ts.map +1 -0
  244. package/dist/esm/{transform.js → transform/async.js} +22 -9
  245. package/dist/esm/transform/async.js.map +1 -0
  246. package/dist/esm/transform/callback.d.ts +6 -0
  247. package/dist/esm/transform/callback.d.ts.map +1 -0
  248. package/dist/esm/transform/callback.js +256 -0
  249. package/dist/esm/transform/callback.js.map +1 -0
  250. package/dist/esm/transform/index.d.ts +5 -0
  251. package/dist/esm/transform/index.d.ts.map +1 -0
  252. package/dist/esm/transform/index.js +5 -0
  253. package/dist/esm/transform/index.js.map +1 -0
  254. package/dist/esm/transform/preset.d.ts +7 -0
  255. package/dist/esm/transform/preset.d.ts.map +1 -0
  256. package/dist/esm/transform/preset.js +17 -0
  257. package/dist/esm/transform/preset.js.map +1 -0
  258. package/dist/esm/transform/promise.d.ts +6 -0
  259. package/dist/esm/transform/promise.d.ts.map +1 -0
  260. package/dist/esm/transform/promise.js +126 -0
  261. package/dist/esm/transform/promise.js.map +1 -0
  262. package/dist/esm/types.d.ts +44 -63
  263. package/dist/esm/types.d.ts.map +1 -1
  264. package/dist/esm/utils.d.ts +2 -0
  265. package/dist/esm/utils.d.ts.map +1 -0
  266. package/dist/esm/utils.js +2 -0
  267. package/dist/esm/utils.js.map +1 -0
  268. package/package.json +56 -58
  269. package/react.js +0 -4
  270. package/transform.js +1 -5
  271. package/utils.js +15 -0
  272. package/.turbo/turbo-build.log +0 -12
  273. package/dist/cjs/hooks.d.ts +0 -16
  274. package/dist/cjs/hooks.d.ts.map +0 -1
  275. package/dist/cjs/hooks.js +0 -44
  276. package/dist/cjs/hooks.js.map +0 -1
  277. package/dist/cjs/internals/connect.d.ts +0 -4
  278. package/dist/cjs/internals/connect.d.ts.map +0 -1
  279. package/dist/cjs/internals/connect.js.map +0 -1
  280. package/dist/cjs/internals/derived.d.ts +0 -76
  281. package/dist/cjs/internals/derived.d.ts.map +0 -1
  282. package/dist/cjs/internals/derived.js.map +0 -1
  283. package/dist/cjs/internals/state.d.ts +0 -18
  284. package/dist/cjs/internals/state.d.ts.map +0 -1
  285. package/dist/cjs/internals/state.js.map +0 -1
  286. package/dist/cjs/react/setup.d.ts +0 -2
  287. package/dist/cjs/react/setup.d.ts.map +0 -1
  288. package/dist/cjs/react/setup.js +0 -14
  289. package/dist/cjs/react/setup.js.map +0 -1
  290. package/dist/cjs/react/signal-value.d.ts +0 -6
  291. package/dist/cjs/react/signal-value.d.ts.map +0 -1
  292. package/dist/cjs/react/signal-value.js +0 -37
  293. package/dist/cjs/react/signal-value.js.map +0 -1
  294. package/dist/cjs/react/state.d.ts +0 -3
  295. package/dist/cjs/react/state.d.ts.map +0 -1
  296. package/dist/cjs/react/state.js.map +0 -1
  297. package/dist/cjs/trace.d.ts.map +0 -1
  298. package/dist/cjs/trace.js.map +0 -1
  299. package/dist/cjs/transform.d.ts.map +0 -1
  300. package/dist/cjs/transform.js.map +0 -1
  301. package/dist/cjs/weakref.d.ts.map +0 -1
  302. package/dist/cjs/weakref.js.map +0 -1
  303. package/dist/esm/hooks.d.ts +0 -16
  304. package/dist/esm/hooks.d.ts.map +0 -1
  305. package/dist/esm/hooks.js +0 -37
  306. package/dist/esm/hooks.js.map +0 -1
  307. package/dist/esm/internals/connect.d.ts +0 -4
  308. package/dist/esm/internals/connect.d.ts.map +0 -1
  309. package/dist/esm/internals/connect.js.map +0 -1
  310. package/dist/esm/internals/derived.d.ts +0 -76
  311. package/dist/esm/internals/derived.d.ts.map +0 -1
  312. package/dist/esm/internals/derived.js.map +0 -1
  313. package/dist/esm/internals/state.d.ts +0 -18
  314. package/dist/esm/internals/state.d.ts.map +0 -1
  315. package/dist/esm/internals/state.js.map +0 -1
  316. package/dist/esm/react/setup.d.ts +0 -2
  317. package/dist/esm/react/setup.d.ts.map +0 -1
  318. package/dist/esm/react/setup.js +0 -11
  319. package/dist/esm/react/setup.js.map +0 -1
  320. package/dist/esm/react/signal-value.d.ts +0 -6
  321. package/dist/esm/react/signal-value.d.ts.map +0 -1
  322. package/dist/esm/react/signal-value.js +0 -33
  323. package/dist/esm/react/signal-value.js.map +0 -1
  324. package/dist/esm/react/state.d.ts +0 -3
  325. package/dist/esm/react/state.d.ts.map +0 -1
  326. package/dist/esm/react/state.js +0 -10
  327. package/dist/esm/react/state.js.map +0 -1
  328. package/dist/esm/trace.d.ts.map +0 -1
  329. package/dist/esm/trace.js.map +0 -1
  330. package/dist/esm/transform.d.ts.map +0 -1
  331. package/dist/esm/transform.js.map +0 -1
  332. package/dist/esm/weakref.d.ts.map +0 -1
  333. package/dist/esm/weakref.js.map +0 -1
  334. package/src/__tests__/__snapshots__/context.test.ts.snap +0 -2101
  335. package/src/__tests__/__snapshots__/nesting.test.ts.snap +0 -16201
  336. package/src/__tests__/__snapshots__/params-and-state.test.ts.snap +0 -1879
  337. package/src/__tests__/async-task.test.ts +0 -327
  338. package/src/__tests__/context.test.ts +0 -619
  339. package/src/__tests__/gc.test.ts +0 -256
  340. package/src/__tests__/nesting.test.ts +0 -298
  341. package/src/__tests__/params-and-state.test.ts +0 -230
  342. package/src/__tests__/reactive-async.test.ts +0 -548
  343. package/src/__tests__/reactive-sync.test.ts +0 -130
  344. package/src/__tests__/subscription.test.ts +0 -510
  345. package/src/__tests__/utils/async.ts +0 -6
  346. package/src/__tests__/utils/instrumented-hooks.ts +0 -410
  347. package/src/__tests__/utils/permute.ts +0 -85
  348. package/src/config.ts +0 -54
  349. package/src/debug.ts +0 -14
  350. package/src/hooks.ts +0 -82
  351. package/src/index.ts +0 -20
  352. package/src/internals/async.ts +0 -563
  353. package/src/internals/connect.ts +0 -49
  354. package/src/internals/consumer.ts +0 -13
  355. package/src/internals/contexts.ts +0 -173
  356. package/src/internals/derived.ts +0 -217
  357. package/src/internals/dirty.ts +0 -91
  358. package/src/internals/edge.ts +0 -109
  359. package/src/internals/get.ts +0 -298
  360. package/src/internals/scheduling.ts +0 -160
  361. package/src/internals/state.ts +0 -111
  362. package/src/internals/utils/debug-name.ts +0 -14
  363. package/src/internals/utils/equals.ts +0 -12
  364. package/src/internals/utils/hash.ts +0 -221
  365. package/src/internals/utils/stringify.ts +0 -57
  366. package/src/internals/utils/type-utils.ts +0 -19
  367. package/src/react/__tests__/async.test.tsx +0 -704
  368. package/src/react/__tests__/basic.test.tsx +0 -95
  369. package/src/react/__tests__/contexts.test.tsx +0 -181
  370. package/src/react/__tests__/subscriptions.test.tsx +0 -49
  371. package/src/react/__tests__/utils.tsx +0 -40
  372. package/src/react/context.ts +0 -14
  373. package/src/react/index.ts +0 -6
  374. package/src/react/provider.tsx +0 -18
  375. package/src/react/rendering.ts +0 -43
  376. package/src/react/setup.ts +0 -11
  377. package/src/react/signal-value.ts +0 -50
  378. package/src/react/state.ts +0 -13
  379. package/src/trace.ts +0 -454
  380. package/src/transform.ts +0 -113
  381. package/src/types.ts +0 -115
  382. package/src/weakref.ts +0 -9
  383. package/tsconfig.json +0 -13
  384. package/vitest.workspace.ts +0 -61
  385. /package/dist/cjs/{weakref.d.ts → internals/weakref.d.ts} +0 -0
  386. /package/dist/cjs/{weakref.js → internals/weakref.js} +0 -0
  387. /package/dist/esm/{weakref.d.ts → internals/weakref.d.ts} +0 -0
  388. /package/dist/esm/{weakref.js → internals/weakref.js} +0 -0
@@ -1,510 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { state } from '../index.js';
3
- import { reactive, subscription } from './utils/instrumented-hooks.js';
4
- import { nextTick } from './utils/async.js';
5
-
6
- describe('subscriptions', () => {
7
- test('Subscription can set initial value', () => {
8
- const sub = subscription(({ set }) => {
9
- set(1);
10
- });
11
-
12
- expect(sub).toHaveValueAndCounts(undefined, { compute: 0, internalSet: 0 });
13
-
14
- const computed = reactive(() => {
15
- return sub.value;
16
- });
17
-
18
- expect(computed).toHaveValueAndCounts(1, { compute: 1 });
19
- expect(sub).toHaveValueAndCounts(1, { compute: 1, internalSet: 1 });
20
- });
21
-
22
- test('Subscription can update value', async () => {
23
- const value = state(1);
24
- const sub = subscription(({ set }) => {
25
- set(value.get());
26
-
27
- return {
28
- update: () => {
29
- set(value.get());
30
- },
31
- };
32
- });
33
-
34
- const computed = reactive(
35
- () => {
36
- return sub.value;
37
- },
38
- {
39
- desc: 'computed',
40
- },
41
- );
42
-
43
- expect(computed).toHaveValueAndCounts(1, { compute: 1 });
44
- expect(sub).toHaveValueAndCounts(1, { compute: 1, internalSet: 1 });
45
-
46
- value.set(2);
47
-
48
- await nextTick();
49
-
50
- expect(computed).toHaveValueAndCounts(2, { compute: 2 });
51
- expect(sub).toHaveValueAndCounts(2, { compute: 2, internalSet: 2 });
52
- });
53
-
54
- test('Subscription can set multiple times', () => {
55
- const sub = subscription(({ set }) => {
56
- set(1);
57
- set(2);
58
- set(3);
59
- });
60
-
61
- const computed = reactive(() => {
62
- return sub.value;
63
- });
64
-
65
- expect(computed).toHaveValueAndCounts(3, { compute: 1 });
66
- expect(sub).toHaveValueAndCounts(3, { compute: 1, internalSet: 3 });
67
- });
68
-
69
- test('Can create a subscription within a reactive function context', async () => {
70
- const value = state(1);
71
-
72
- const computed = reactive(() => {
73
- return subscription(({ set }) => {
74
- set(value.get());
75
-
76
- return {
77
- update: () => {
78
- set(value.get());
79
- },
80
- };
81
- });
82
- });
83
-
84
- const sub = computed();
85
-
86
- expect(computed).toHaveCounts({ compute: 1 });
87
- expect(sub).toHaveValueAndCounts(undefined, { compute: 0, internalSet: 0 });
88
-
89
- const computed2 = reactive(() => {
90
- return computed().value;
91
- });
92
-
93
- expect(computed2).toHaveValueAndCounts(1, { compute: 1 });
94
- expect(sub).toHaveValueAndCounts(1, { compute: 1, internalSet: 1 });
95
-
96
- value.set(2);
97
-
98
- await nextTick();
99
-
100
- expect(sub).toHaveValueAndCounts(2, { compute: 2, internalSet: 2 });
101
- });
102
-
103
- test('Can create multiple subscriptions based on arguments within a reactive function context, with full lifecycle', async () => {
104
- const externalValue = state(1);
105
-
106
- const computed = reactive(
107
- (initValue: number) => {
108
- return subscription(
109
- ({ set }) => {
110
- set(initValue + externalValue.get());
111
-
112
- return {
113
- update: () => {
114
- set(initValue + externalValue.get());
115
- },
116
- unsubscribe: () => {},
117
- };
118
- },
119
- {
120
- desc: 'subscription',
121
- },
122
- );
123
- },
124
- {
125
- desc: 'computed',
126
- },
127
- );
128
-
129
- const sub1 = computed(1);
130
- const sub2 = computed(2);
131
-
132
- expect(computed.withParams(1)).toHaveCounts({ compute: 1 });
133
- expect(computed.withParams(2)).toHaveCounts({ compute: 1 });
134
- expect(sub1).toHaveValueAndCounts(undefined, { compute: 0, subscribe: 0, internalSet: 0 });
135
- expect(sub2).toHaveValueAndCounts(undefined, { compute: 0, subscribe: 0, internalSet: 0 });
136
-
137
- const initValue = state(1);
138
-
139
- const consumer = reactive(() => {
140
- return computed(initValue.get()).value;
141
- });
142
-
143
- expect(consumer).toHaveValueAndCounts(2, { compute: 1 });
144
- expect(sub1).toHaveValueAndCounts(2, { compute: 1, subscribe: 1, internalSet: 1 });
145
- expect(sub2).toHaveValueAndCounts(undefined, { compute: 0, subscribe: 0, internalSet: 0 });
146
-
147
- externalValue.set(2);
148
-
149
- await nextTick();
150
-
151
- expect(consumer).toHaveValueAndCounts(3, { compute: 2 });
152
- expect(sub1).toHaveValueAndCounts(3, { compute: 2, subscribe: 1, internalSet: 2 });
153
- expect(sub2).toHaveValueAndCounts(undefined, { compute: 0, internalSet: 0 });
154
-
155
- initValue.set(2);
156
-
157
- expect(consumer).toHaveValueAndCounts(4, { compute: 3 });
158
- expect(sub1).toHaveValueAndCounts(3, { compute: 2, internalSet: 2, unsubscribe: 0 });
159
- expect(sub2).toHaveValueAndCounts(4, { compute: 1, subscribe: 1, internalSet: 1 });
160
-
161
- await nextTick();
162
-
163
- expect(sub1).toHaveValueAndCounts(3, { compute: 2, internalSet: 2, unsubscribe: 1 });
164
- });
165
-
166
- test('Can switch between external subscriptions reactively', async () => {
167
- const externalValue = state(1);
168
-
169
- const makeSub = (initValue: number) => {
170
- return subscription(({ set }) => {
171
- set(initValue + externalValue.get());
172
-
173
- return {
174
- update: () => {
175
- set(initValue + externalValue.get());
176
- },
177
- unsubscribe: () => {},
178
- };
179
- });
180
- };
181
-
182
- const sub1 = makeSub(1);
183
- const sub2 = makeSub(2);
184
-
185
- expect(sub1).toHaveValueAndCounts(undefined, { compute: 0, subscribe: 0, internalSet: 0 });
186
- expect(sub2).toHaveValueAndCounts(undefined, { compute: 0, subscribe: 0, internalSet: 0 });
187
-
188
- const initValue = state(1);
189
-
190
- const consumer = reactive(() => {
191
- return initValue.get() === 1 ? sub1.value : sub2.value;
192
- });
193
-
194
- expect(consumer).toHaveValueAndCounts(2, { compute: 1 });
195
- expect(sub1).toHaveValueAndCounts(2, { compute: 1, subscribe: 1, internalSet: 1 });
196
- expect(sub2).toHaveValueAndCounts(undefined, { compute: 0, subscribe: 0, internalSet: 0 });
197
-
198
- externalValue.set(2);
199
-
200
- await nextTick();
201
-
202
- expect(consumer).toHaveValueAndCounts(3, { compute: 2 });
203
- expect(sub1).toHaveValueAndCounts(3, { compute: 2, subscribe: 1, internalSet: 2 });
204
- expect(sub2).toHaveValueAndCounts(undefined, { compute: 0, internalSet: 0 });
205
-
206
- initValue.set(2);
207
-
208
- expect(consumer).toHaveValueAndCounts(4, { compute: 3 });
209
- expect(sub1).toHaveValueAndCounts(3, { compute: 2, internalSet: 2, unsubscribe: 0 });
210
- expect(sub2).toHaveValueAndCounts(4, { compute: 1, subscribe: 1, internalSet: 1 });
211
-
212
- await nextTick();
213
-
214
- expect(sub1).toHaveValueAndCounts(3, { compute: 2, internalSet: 2, unsubscribe: 1 });
215
- });
216
-
217
- test('Lifecycle works properly with multiple consumers', async () => {
218
- const externalValue = state(1);
219
-
220
- const sub = subscription(
221
- ({ set }) => {
222
- set(1 + externalValue.get());
223
-
224
- return {
225
- update: () => {
226
- set(1 + externalValue.get());
227
- },
228
- unsubscribe: () => {},
229
- };
230
- },
231
- {
232
- initValue: 0,
233
- },
234
- );
235
-
236
- const useSub1 = state(true);
237
-
238
- const consumer1 = reactive(() => {
239
- return useSub1.get() ? sub.value : 0;
240
- });
241
-
242
- const useSub2 = state(true);
243
- const consumer2 = reactive(() => {
244
- return useSub2.get() ? sub.value : 0;
245
- });
246
-
247
- expect(sub).toHaveValueAndCounts(0, { compute: 0, subscribe: 0, internalSet: 0 });
248
-
249
- const root = reactive(
250
- () => {
251
- return consumer1() + consumer2();
252
- },
253
- {
254
- desc: 'root',
255
- },
256
- );
257
-
258
- expect(root).toHaveValueAndCounts(4, { compute: 1 });
259
- expect(sub).toHaveValueAndCounts(2, { compute: 1, subscribe: 1, internalSet: 1 });
260
-
261
- externalValue.set(2);
262
-
263
- await nextTick();
264
-
265
- expect(root).toHaveValueAndCounts(6, { compute: 2 });
266
- expect(sub).toHaveValueAndCounts(3, { compute: 2, subscribe: 1, internalSet: 2 });
267
-
268
- useSub1.set(false);
269
-
270
- await nextTick();
271
-
272
- expect(root).toHaveValueAndCounts(3, { compute: 3 });
273
- expect(sub).toHaveValueAndCounts(3, { compute: 2, subscribe: 1, internalSet: 2, unsubscribe: 0 });
274
-
275
- useSub2.set(false);
276
-
277
- await nextTick();
278
-
279
- expect(root).toHaveValueAndCounts(0, { compute: 4 });
280
- expect(sub).toHaveValueAndCounts(3, { compute: 2, subscribe: 1, internalSet: 2, unsubscribe: 1 });
281
-
282
- externalValue.set(3);
283
-
284
- await nextTick();
285
-
286
- expect(root).toHaveValueAndCounts(0, { compute: 4 });
287
- expect(sub).toHaveValueAndCounts(3, { compute: 2, subscribe: 1, update: 1, internalSet: 2, unsubscribe: 1 });
288
-
289
- useSub2.set(true);
290
-
291
- expect(root).toHaveValueAndCounts(4, { compute: 5 });
292
- expect(sub).toHaveValueAndCounts(4, { compute: 3, subscribe: 2, update: 1, internalSet: 3, unsubscribe: 1 });
293
- });
294
-
295
- test('Lifecycle works with nested subscriptions', async () => {
296
- const externalValue = state(1);
297
-
298
- const sub1 = subscription(
299
- ({ set }) => {
300
- set(1 + externalValue.get());
301
-
302
- return {
303
- update: () => {
304
- set(1 + externalValue.get());
305
- },
306
- unsubscribe: () => {},
307
- };
308
- },
309
- {
310
- initValue: 0,
311
- desc: 'sub1',
312
- },
313
- );
314
-
315
- const sub2 = subscription(
316
- ({ set }) => {
317
- set(sub1.value + 1);
318
-
319
- return {
320
- update: () => {
321
- set(sub1.value + 1);
322
- },
323
- unsubscribe: () => {},
324
- };
325
- },
326
- {
327
- initValue: 0,
328
- desc: 'sub2',
329
- },
330
- );
331
-
332
- const useSub1 = state(true);
333
- const consumer1 = reactive(
334
- () => {
335
- return useSub1.get() ? sub1.value : 0;
336
- },
337
- {
338
- desc: 'consumer1',
339
- },
340
- );
341
-
342
- const useSub2 = state(true);
343
- const consumer2 = reactive(
344
- () => {
345
- return useSub2.get() ? sub2.value : 0;
346
- },
347
- {
348
- desc: 'consumer2',
349
- },
350
- );
351
-
352
- expect(sub1).toHaveValueAndCounts(0, { compute: 0, subscribe: 0, internalSet: 0 });
353
- expect(sub2).toHaveValueAndCounts(0, { compute: 0, subscribe: 0, internalSet: 0 });
354
-
355
- const root = reactive(
356
- () => {
357
- return consumer1() + consumer2();
358
- },
359
- {
360
- desc: 'root',
361
- },
362
- );
363
-
364
- expect(root).toHaveValueAndCounts(5, { compute: 1 });
365
- expect(sub1).toHaveValueAndCounts(2, { compute: 1, subscribe: 1, internalSet: 1 });
366
- expect(sub2).toHaveValueAndCounts(3, { compute: 1, subscribe: 1, internalSet: 1 });
367
-
368
- externalValue.set(2);
369
-
370
- expect(root).toHaveValueAndCounts(5, { compute: 1 });
371
- expect(sub1).toHaveValueAndCounts(2, { compute: 1, subscribe: 1, internalSet: 1 });
372
- expect(sub2).toHaveValueAndCounts(3, { compute: 1, subscribe: 1, internalSet: 1 });
373
-
374
- await nextTick();
375
-
376
- expect(root).toHaveValueAndCounts(7, { compute: 3 });
377
- expect(sub1).toHaveValueAndCounts(3, { compute: 2, subscribe: 1, internalSet: 2 });
378
- expect(sub2).toHaveValueAndCounts(4, { compute: 2, subscribe: 1, internalSet: 2 });
379
-
380
- useSub1.set(false);
381
-
382
- await nextTick();
383
-
384
- expect(root).toHaveValueAndCounts(4, { compute: 4 });
385
- expect(sub1).toHaveValueAndCounts(3, { compute: 2, subscribe: 1, internalSet: 2, unsubscribe: 0 });
386
- expect(sub2).toHaveValueAndCounts(4, { compute: 2, subscribe: 1, internalSet: 2, unsubscribe: 0 });
387
-
388
- useSub2.set(false);
389
-
390
- await nextTick();
391
-
392
- expect(root).toHaveValueAndCounts(0, { compute: 5 });
393
- expect(sub1).toHaveValueAndCounts(3, { compute: 2, subscribe: 1, internalSet: 2, unsubscribe: 1 });
394
- expect(sub2).toHaveValueAndCounts(4, { compute: 2, subscribe: 1, internalSet: 2, unsubscribe: 1 });
395
-
396
- externalValue.set(3);
397
-
398
- await nextTick();
399
-
400
- expect(root).toHaveValueAndCounts(0, { compute: 5 });
401
- expect(sub1).toHaveValueAndCounts(3, { compute: 2, subscribe: 1, update: 1, internalSet: 2, unsubscribe: 1 });
402
- expect(sub2).toHaveValueAndCounts(4, { compute: 2, subscribe: 1, update: 1, internalSet: 2, unsubscribe: 1 });
403
-
404
- useSub2.set(true);
405
-
406
- expect(root).toHaveValueAndCounts(5, { compute: 6 });
407
- expect(sub1).toHaveValueAndCounts(4, { compute: 3, subscribe: 2, update: 1, internalSet: 3, unsubscribe: 1 });
408
- expect(sub2).toHaveValueAndCounts(5, { compute: 3, subscribe: 2, update: 1, internalSet: 3, unsubscribe: 1 });
409
-
410
- useSub2.set(false);
411
-
412
- await nextTick();
413
-
414
- expect(root).toHaveValueAndCounts(0, { compute: 7 });
415
- expect(sub1).toHaveValueAndCounts(4, { compute: 3, subscribe: 2, update: 1, internalSet: 3, unsubscribe: 2 });
416
- expect(sub2).toHaveValueAndCounts(5, { compute: 3, subscribe: 2, update: 1, internalSet: 3, unsubscribe: 2 });
417
-
418
- useSub1.set(true);
419
-
420
- expect(root).toHaveValueAndCounts(4, { compute: 8 });
421
- expect(sub1).toHaveValueAndCounts(4, { compute: 4, subscribe: 3, update: 1, internalSet: 4, unsubscribe: 2 });
422
- expect(sub2).toHaveValueAndCounts(5, { compute: 3, subscribe: 2, update: 1, internalSet: 3, unsubscribe: 2 });
423
- });
424
-
425
- test('Subscriptions can be awaited', async () => {
426
- const externalValue = state(1);
427
-
428
- const sub = subscription(({ set }) => {
429
- const value = externalValue.get();
430
-
431
- setTimeout(() => {
432
- set(value);
433
- });
434
-
435
- return {
436
- update: () => {
437
- const value = externalValue.get();
438
-
439
- set(value);
440
- },
441
- };
442
- });
443
-
444
- const inner1 = reactive(
445
- async (x: number) => {
446
- const state1 = externalValue.get();
447
- await nextTick();
448
- return x * state1;
449
- },
450
- {
451
- desc: 'inner1',
452
- },
453
- );
454
-
455
- const inner2 = reactive(
456
- async (x: number) => {
457
- const state2 = (await sub) as any;
458
- await nextTick();
459
- return x * state2;
460
- },
461
- {
462
- desc: 'inner2',
463
- },
464
- );
465
-
466
- const outer = reactive(
467
- async (x: number) => {
468
- const result1 = (await inner1(x)) as any;
469
- const result2 = (await inner2(x)) as any;
470
- return result1 + result2;
471
- },
472
- {
473
- desc: 'outer',
474
- },
475
- );
476
-
477
- const result1 = outer(2);
478
- expect(outer.withParams(2)).toHaveSignalValue(undefined);
479
- expect(result1.value).toBe(undefined);
480
- expect(result1.isPending).toBe(true);
481
- expect(sub).toHaveCounts({ compute: 0, subscribe: 0, internalSet: 0 });
482
- expect(inner1.withParams(2)).toHaveCounts({ compute: 1 });
483
- expect(inner2.withParams(2)).toHaveCounts({ compute: 0 });
484
- expect(outer.withParams(2)).toHaveCounts({ compute: 1 });
485
-
486
- await new Promise(resolve => setTimeout(resolve, 10));
487
- expect(result1.value).toBe(4);
488
- expect(result1.isPending).toBe(false);
489
- expect(result1.isResolved).toBe(true);
490
- expect(inner1.withParams(2)).toHaveCounts({ compute: 1 });
491
- expect(inner2.withParams(2)).toHaveCounts({ compute: 1 });
492
- expect(outer.withParams(2)).toHaveCounts({ compute: 1 });
493
-
494
- externalValue.set(2);
495
- const result2 = outer(2);
496
- expect(result2.isPending).toBe(true);
497
- expect(result2.value).toBe(4);
498
- expect(inner1.withParams(2)).toHaveCounts({ compute: 2 });
499
- expect(inner2.withParams(2)).toHaveCounts({ compute: 1 });
500
- expect(outer.withParams(2)).toHaveCounts({ compute: 1 });
501
-
502
- await new Promise(resolve => setTimeout(resolve, 10));
503
- expect(result2.value).toBe(8);
504
- expect(result2.isPending).toBe(false);
505
- expect(result2.isResolved).toBe(true);
506
- expect(inner1.withParams(2)).toHaveCounts({ compute: 2 });
507
- expect(inner2.withParams(2)).toHaveCounts({ compute: 2 });
508
- expect(outer.withParams(2)).toHaveCounts({ compute: 2 });
509
- });
510
- });
@@ -1,6 +0,0 @@
1
- import { settled } from '../../internals/scheduling.js';
2
-
3
- export const sleep = (ms = 0) => new Promise(r => setTimeout(r, ms));
4
- export const nextTick = async () => {
5
- await settled();
6
- };