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,548 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { state } from 'signalium';
3
- import { reactive } from './utils/instrumented-hooks.js';
4
- import { nextTick } from './utils/async.js';
5
-
6
- describe('async computeds', () => {
7
- test('Basic async computed works', async () => {
8
- const getC = reactive(async (a: number, b: number) => {
9
- return a + b;
10
- });
11
-
12
- const result1 = getC(1, 2);
13
- expect(result1.isPending).toBe(true);
14
- expect(result1.value).toBe(undefined);
15
- await nextTick();
16
- expect(result1.isResolved).toBe(true);
17
- expect(result1.value).toBe(3);
18
-
19
- const result2 = getC(2, 2);
20
- expect(result2.isPending).toBe(true);
21
- expect(result2.value).toBe(undefined);
22
- await nextTick();
23
- expect(result2.isResolved).toBe(true);
24
- expect(result2.value).toBe(4);
25
- });
26
-
27
- test('Async computed is not recomputed when the same arguments are passed', async () => {
28
- let computeCount = 0;
29
- const getC = reactive(async (a: number, b: number) => {
30
- computeCount++;
31
- return a + b;
32
- });
33
-
34
- const result1 = getC(1, 2);
35
- await nextTick();
36
- expect(result1.value).toBe(3);
37
- expect(computeCount).toBe(1);
38
-
39
- const result2 = getC(1, 2);
40
- await nextTick();
41
- expect(result2.value).toBe(3);
42
- expect(computeCount).toBe(1);
43
- });
44
-
45
- test('Async computed is recomputed when the arguments change', async () => {
46
- let computeCount = 0;
47
- const getC = reactive(async (a: number, b: number) => {
48
- computeCount++;
49
- return a + b;
50
- });
51
-
52
- const result1 = getC(1, 2);
53
- await nextTick();
54
- expect(result1.value).toBe(3);
55
- expect(computeCount).toBe(1);
56
-
57
- const result2 = getC(2, 2);
58
- await nextTick();
59
- expect(result2.value).toBe(4);
60
- expect(computeCount).toBe(2);
61
- });
62
-
63
- test('Async computed is recomputed when state changes', async () => {
64
- let computeCount = 0;
65
- const stateValue = state(1);
66
-
67
- const getC = reactive(async (a: number) => {
68
- computeCount++;
69
- return a + stateValue.get();
70
- });
71
-
72
- const result1 = getC(1);
73
- await nextTick();
74
- expect(result1.value).toBe(2);
75
- expect(computeCount).toBe(1);
76
-
77
- stateValue.set(2);
78
- const result2 = getC(1);
79
- expect(result2.isPending).toBe(true);
80
- await nextTick();
81
- expect(result2.value).toBe(3);
82
- expect(computeCount).toBe(2);
83
- });
84
-
85
- test('Async computed handles errors', async () => {
86
- const getC = reactive(async (shouldError: boolean) => {
87
- if (shouldError) {
88
- throw new Error('Test error');
89
- }
90
- return 'success';
91
- });
92
-
93
- const result1 = getC(false);
94
- await nextTick();
95
- expect(result1.isResolved).toBe(true);
96
- expect(result1.value).toBe('success');
97
-
98
- const result2 = getC(true);
99
- await nextTick();
100
- expect(result2.isRejected).toBe(true);
101
- expect(result2.error as Error).toBeInstanceOf(Error);
102
- expect((result2.error as Error).message).toBe('Test error');
103
- });
104
-
105
- test('Async computed with init value starts ready', () => {
106
- const getC = reactive(async () => 'updated', { initValue: 'initial' });
107
-
108
- const result = getC();
109
- expect(result.isReady).toBe(true);
110
- expect(result.value).toBe('initial');
111
- expect(result.isPending).toBe(true);
112
- });
113
-
114
- test('Nested async computeds work correctly', async () => {
115
- let innerCount = 0;
116
- let outerCount = 0;
117
-
118
- const inner = reactive(async (x: number) => {
119
- innerCount++;
120
- await nextTick();
121
- return x * 2;
122
- });
123
-
124
- const outer = reactive(async (x: number) => {
125
- outerCount++;
126
- const innerResult = inner(x);
127
- const result = await innerResult;
128
- return result + 1;
129
- });
130
-
131
- const result1 = outer(2);
132
- expect(result1.value).toBe(undefined);
133
- expect(innerCount).toBe(1);
134
- expect(outerCount).toBe(1);
135
-
136
- await new Promise(resolve => setTimeout(resolve, 10));
137
- const result2 = outer(2);
138
- expect(result2.value).toBe(5);
139
- expect(innerCount).toBe(1);
140
- expect(outerCount).toBe(1);
141
- });
142
-
143
- test('Nested async computeds handle errors correctly', async () => {
144
- const inner = reactive(async (shouldError: boolean) => {
145
- if (shouldError) throw new Error('Inner error');
146
- await nextTick();
147
- return 'inner success';
148
- });
149
-
150
- const outer = reactive(async (shouldError: boolean) => {
151
- const innerResult = inner(shouldError);
152
- await innerResult;
153
- return 'outer: ' + innerResult.value;
154
- });
155
-
156
- // Test success case
157
- const successResult = outer(false);
158
- await new Promise(resolve => setTimeout(resolve, 10));
159
- expect(successResult.isResolved).toBe(true);
160
- expect(successResult.value).toBe('outer: inner success');
161
-
162
- // Test error case
163
- const errorResult = outer(true);
164
- await new Promise(resolve => setTimeout(resolve, 10));
165
- expect(errorResult.isRejected).toBe(true);
166
- expect(errorResult.error).toBeInstanceOf(Error);
167
- expect((errorResult.error as Error).message).toBe('Inner error');
168
- });
169
-
170
- test('Nested async computeds with init values work correctly', async () => {
171
- const inner = reactive(async (x: number) => x * 2, { initValue: 0 });
172
-
173
- const outer = reactive(
174
- async (x: number) => {
175
- const innerResult = inner(x);
176
- await innerResult;
177
- return innerResult.value! + 1;
178
- },
179
- { initValue: -1 },
180
- );
181
-
182
- const result = outer(2);
183
- expect(result.isReady).toBe(true);
184
- expect(result.value).toBe(-1); // Initial value
185
- expect(result.isPending).toBe(true);
186
-
187
- await new Promise(resolve => setTimeout(resolve, 10));
188
- expect(result.value).toBe(5); // (2 * 2) + 1
189
- expect(result.isPending).toBe(false);
190
- expect(result.isResolved).toBe(true);
191
- });
192
-
193
- test('Nested generator functions with subsequent dependencies track past the first yield', async () => {
194
- let inner1Count = 0;
195
- let inner2Count = 0;
196
- let outerCount = 0;
197
-
198
- const state1Value = state(1);
199
- const state2Value = state(2);
200
-
201
- const inner1 = reactive(
202
- async (x: number) => {
203
- inner1Count++;
204
- const state1 = state1Value.get();
205
- await nextTick();
206
- return x * state1;
207
- },
208
- {
209
- desc: 'inner1',
210
- },
211
- );
212
-
213
- const inner2 = reactive(
214
- async (x: number) => {
215
- inner2Count++;
216
- const state2 = state2Value.get();
217
- await nextTick();
218
- return x * state2;
219
- },
220
- {
221
- desc: 'inner2',
222
- },
223
- );
224
-
225
- const outer = reactive(
226
- async (x: number) => {
227
- outerCount++;
228
- const result1 = await inner1(x);
229
- const result2 = await inner2(x);
230
- return result1 + result2;
231
- },
232
- {
233
- desc: 'outer',
234
- },
235
- );
236
-
237
- const result1 = outer(2);
238
- expect(result1.value).toBe(undefined);
239
- expect(result1.isPending).toBe(true);
240
- expect(inner1Count).toBe(1);
241
- expect(inner2Count).toBe(0);
242
- expect(outerCount).toBe(1);
243
-
244
- await new Promise(resolve => setTimeout(resolve, 10));
245
- expect(result1.value).toBe(6);
246
- expect(result1.isPending).toBe(false);
247
- expect(result1.isResolved).toBe(true);
248
- expect(inner1Count).toBe(1);
249
- expect(inner2Count).toBe(1);
250
- expect(outerCount).toBe(1);
251
-
252
- state1Value.set(2);
253
- const result2 = outer(2);
254
- expect(result2.isPending).toBe(true);
255
- expect(result2.value).toBe(6);
256
- expect(inner1Count).toBe(2);
257
- expect(inner2Count).toBe(1);
258
- expect(outerCount).toBe(1);
259
-
260
- await new Promise(resolve => setTimeout(resolve, 10));
261
- expect(result2.value).toBe(8);
262
- expect(result2.isPending).toBe(false);
263
- expect(result2.isResolved).toBe(true);
264
- expect(inner1Count).toBe(2);
265
- expect(inner2Count).toBe(1);
266
- expect(outerCount).toBe(2);
267
-
268
- state2Value.set(3);
269
- const result3 = outer(2);
270
- expect(result3.isPending).toBe(true);
271
- expect(result3.value).toBe(8);
272
- expect(inner1Count).toBe(2);
273
- expect(inner2Count).toBe(2);
274
- expect(outerCount).toBe(2);
275
-
276
- await new Promise(resolve => setTimeout(resolve, 10));
277
- expect(result3.value).toBe(10);
278
- expect(result3.isPending).toBe(false);
279
- expect(result3.isResolved).toBe(true);
280
- expect(inner1Count).toBe(2);
281
- expect(inner2Count).toBe(2);
282
- expect(outerCount).toBe(3);
283
- });
284
-
285
- test('Nested generator functions with subsequent dependencies halt properly when a dependency is pending', async () => {
286
- let inner1Count = 0;
287
- let inner2Count = 0;
288
- let outerCount = 0;
289
-
290
- const state1Value = state(1);
291
- const state2Value = state(2);
292
- const state3Value = state(3);
293
-
294
- const inner1 = reactive(
295
- function* foo(x: number) {
296
- inner1Count++;
297
- const state = state1Value.get() + state2Value.get();
298
- yield nextTick();
299
- return x * state;
300
- },
301
- {
302
- desc: 'inner1',
303
- },
304
- );
305
-
306
- const inner2 = reactive(
307
- function* (x: number) {
308
- inner2Count++;
309
- const state = state2Value.get() + state3Value.get();
310
- yield nextTick();
311
- return x * state;
312
- },
313
- {
314
- desc: 'inner2',
315
- },
316
- );
317
-
318
- const outer = reactive(
319
- function* (x: number) {
320
- outerCount++;
321
- const result1 = (yield inner1(x)) as any;
322
- const result2 = (yield inner2(x)) as any;
323
- return result1 + result2;
324
- },
325
- {
326
- desc: 'outer',
327
- },
328
- );
329
-
330
- const result1 = outer(2);
331
- expect(result1.value).toBe(undefined);
332
- expect(result1.isPending).toBe(true);
333
- expect(inner1Count).toBe(1);
334
- expect(inner2Count).toBe(0);
335
- expect(outerCount).toBe(1);
336
-
337
- await new Promise(resolve => setTimeout(resolve, 10));
338
- expect(result1.value).toBe(16);
339
- expect(result1.isPending).toBe(false);
340
- expect(result1.isResolved).toBe(true);
341
- expect(inner1Count).toBe(1);
342
- expect(inner2Count).toBe(1);
343
- expect(outerCount).toBe(1);
344
-
345
- state1Value.set(2);
346
- state2Value.set(1);
347
- const result2 = outer(2);
348
- expect(result2.isPending).toBe(true);
349
- expect(result2.value).toBe(16);
350
- expect(inner1Count).toBe(2);
351
- expect(inner2Count).toBe(1);
352
- expect(outerCount).toBe(1);
353
-
354
- await new Promise(resolve => setTimeout(resolve, 10));
355
- expect(result2.value).toBe(14);
356
- expect(result2.isPending).toBe(false);
357
- expect(result2.isResolved).toBe(true);
358
- expect(inner1Count).toBe(2);
359
- expect(inner2Count).toBe(2);
360
- expect(outerCount).toBe(2);
361
-
362
- state3Value.set(2);
363
- const result3 = outer(2);
364
- expect(result3.isPending).toBe(true);
365
- expect(result3.value).toBe(14);
366
- expect(inner1Count).toBe(2);
367
- expect(inner2Count).toBe(3);
368
- expect(outerCount).toBe(2);
369
-
370
- await new Promise(resolve => setTimeout(resolve, 10));
371
- expect(result3.value).toBe(12);
372
- expect(result3.isPending).toBe(false);
373
- expect(result3.isResolved).toBe(true);
374
- expect(inner1Count).toBe(2);
375
- expect(inner2Count).toBe(3);
376
- expect(outerCount).toBe(3);
377
- });
378
-
379
- test('it re-dirties pending computeds when a dependency is updated and its ord is BEFORE the current halt', async () => {
380
- let inner1Count = 0;
381
- let inner2Count = 0;
382
- let outerCount = 0;
383
-
384
- const state1Value = state(1);
385
- const state2Value = state(2);
386
- const state3Value = state(3);
387
-
388
- const inner1 = reactive(
389
- function* foo(x: number) {
390
- inner1Count++;
391
- const state = state1Value.get() + state2Value.get();
392
- yield nextTick();
393
- return x * state;
394
- },
395
- {
396
- desc: 'inner1',
397
- },
398
- );
399
-
400
- const inner2 = reactive(
401
- function* (x: number) {
402
- inner2Count++;
403
- const state = state2Value.get() + state3Value.get();
404
- yield nextTick();
405
- return x * state;
406
- },
407
- {
408
- desc: 'inner2',
409
- },
410
- );
411
-
412
- const outer = reactive(
413
- function* (x: number) {
414
- outerCount++;
415
- const result1 = (yield inner1(x)) as any;
416
- const result2 = (yield inner2(x)) as any;
417
- return result1 + result2;
418
- },
419
- {
420
- desc: 'outer',
421
- },
422
- );
423
-
424
- const result1 = outer(2);
425
- expect(result1.value).toBe(undefined);
426
- expect(result1.isPending).toBe(true);
427
- expect(inner1Count).toBe(1);
428
- expect(inner2Count).toBe(0);
429
- expect(outerCount).toBe(1);
430
-
431
- await new Promise(resolve => setTimeout(resolve, 10));
432
- expect(result1.value).toBe(16);
433
- expect(result1.isPending).toBe(false);
434
- expect(result1.isResolved).toBe(true);
435
- expect(inner1Count).toBe(1);
436
- expect(inner2Count).toBe(1);
437
- expect(outerCount).toBe(1);
438
-
439
- state3Value.set(2);
440
- const result2 = outer(2);
441
- expect(result2.isPending).toBe(true);
442
- expect(result2.value).toBe(16);
443
- expect(inner1Count).toBe(1);
444
- expect(inner2Count).toBe(2);
445
- expect(outerCount).toBe(1);
446
-
447
- state1Value.set(2);
448
- const result3 = outer(2);
449
- expect(result3.isPending).toBe(true);
450
- expect(result3.value).toBe(16);
451
- expect(inner1Count).toBe(2);
452
- expect(inner2Count).toBe(2);
453
- expect(outerCount).toBe(1);
454
-
455
- await new Promise(resolve => setTimeout(resolve, 10));
456
- expect(result3.value).toBe(16);
457
- expect(result3.isPending).toBe(false);
458
- expect(result3.isResolved).toBe(true);
459
- expect(inner1Count).toBe(2);
460
- expect(inner2Count).toBe(2);
461
- expect(outerCount).toBe(2);
462
- });
463
-
464
- test('it does NOT redirty pending computeds when a dependency is updated and its ord is AFTER the current halt', async () => {
465
- let inner1Count = 0;
466
- let inner2Count = 0;
467
- let outerCount = 0;
468
-
469
- const state1Value = state(1);
470
- const state2Value = state(2);
471
- const state3Value = state(3);
472
-
473
- const inner1 = reactive(
474
- function* foo(x: number) {
475
- inner1Count++;
476
- const state = state1Value.get() + state2Value.get();
477
- yield nextTick();
478
- return x * state;
479
- },
480
- {
481
- desc: 'inner1',
482
- },
483
- );
484
-
485
- const inner2 = reactive(
486
- function* (x: number) {
487
- inner2Count++;
488
- const state = state2Value.get() + state3Value.get();
489
- yield nextTick();
490
- return x * state;
491
- },
492
- {
493
- desc: 'inner2',
494
- },
495
- );
496
-
497
- const outer = reactive(
498
- function* (x: number) {
499
- outerCount++;
500
- const result1 = (yield inner1(x)) as any;
501
- const result2 = (yield inner2(x)) as any;
502
- return result1 + result2;
503
- },
504
- {
505
- desc: 'outer',
506
- },
507
- );
508
-
509
- const result1 = outer(2);
510
- expect(result1.value).toBe(undefined);
511
- expect(result1.isPending).toBe(true);
512
- expect(inner1Count).toBe(1);
513
- expect(inner2Count).toBe(0);
514
- expect(outerCount).toBe(1);
515
-
516
- await new Promise(resolve => setTimeout(resolve, 10));
517
- expect(result1.value).toBe(16);
518
- expect(result1.isPending).toBe(false);
519
- expect(result1.isResolved).toBe(true);
520
- expect(inner1Count).toBe(1);
521
- expect(inner2Count).toBe(1);
522
- expect(outerCount).toBe(1);
523
-
524
- state1Value.set(2);
525
- const result2 = outer(2);
526
- expect(result2.isPending).toBe(true);
527
- expect(result2.value).toBe(16);
528
- expect(inner1Count).toBe(2);
529
- expect(inner2Count).toBe(1);
530
- expect(outerCount).toBe(1);
531
-
532
- state3Value.set(2);
533
- const result3 = outer(2);
534
- expect(result3.isPending).toBe(true);
535
- expect(result3.value).toBe(16);
536
- expect(inner1Count).toBe(2);
537
- expect(inner2Count).toBe(1);
538
- expect(outerCount).toBe(1);
539
-
540
- await new Promise(resolve => setTimeout(resolve, 10));
541
- expect(result3.value).toBe(16);
542
- expect(result3.isPending).toBe(false);
543
- expect(result3.isResolved).toBe(true);
544
- expect(inner1Count).toBe(2);
545
- expect(inner2Count).toBe(2);
546
- expect(outerCount).toBe(2);
547
- });
548
- });
@@ -1,130 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { state } from '../index.js';
3
- import { reactive } from './utils/instrumented-hooks.js';
4
-
5
- describe('reactive (sync)', () => {
6
- test('Basic computed works', () => {
7
- const getC = reactive((a: number, b: number) => {
8
- return a + b;
9
- });
10
-
11
- expect(getC.withParams(1, 2)).toHaveValueAndCounts(3, { compute: 1, get: 1 });
12
- expect(getC.withParams(1, 2)).toHaveValueAndCounts(3, { compute: 1, get: 2 });
13
- expect(getC.withParams(2, 2)).toHaveValueAndCounts(4, { compute: 1, get: 1 });
14
- expect(getC.withParams(2, 2)).toHaveValueAndCounts(4, { compute: 1, get: 2 });
15
- });
16
-
17
- test('Computed can throw errors', () => {
18
- const getC = reactive((a: number) => {
19
- if (a < 0) throw new Error('negative number');
20
- return a * 2;
21
- });
22
-
23
- expect(getC.withParams(2)).toHaveValueAndCounts(4, { compute: 1, get: 1 });
24
- expect(() => getC(-1)).toThrow('negative number');
25
- });
26
-
27
- describe('nesting behavior', () => {
28
- test('Nested computeds work', () => {
29
- const getInner = reactive((a: number, b: number) => {
30
- return a + b;
31
- });
32
-
33
- const getOuter = reactive((x: number) => {
34
- return getInner(x, 2) * 2;
35
- });
36
-
37
- expect(getOuter.withParams(1)).toHaveValueAndCounts(6, { compute: 1, get: 1 });
38
- expect(getOuter.withParams(1)).toHaveValueAndCounts(6, { compute: 1, get: 2 });
39
- expect(getOuter.withParams(2)).toHaveValueAndCounts(8, { compute: 1, get: 1 });
40
- expect(getOuter.withParams(2)).toHaveValueAndCounts(8, { compute: 1, get: 2 });
41
- });
42
-
43
- test('Nested computeds with shared state', () => {
44
- const sharedState = state(1);
45
-
46
- const getInner = reactive((a: number) => {
47
- return a + sharedState.get();
48
- });
49
-
50
- const getOuter = reactive((x: number) => {
51
- return getInner(x) * 2;
52
- });
53
-
54
- expect(getOuter.withParams(1)).toHaveValueAndCounts(4, { compute: 1, get: 1 });
55
- sharedState.set(2);
56
- expect(getOuter.withParams(1)).toHaveValueAndCounts(6, { compute: 2, get: 2 });
57
- });
58
-
59
- test('Deeply nested computeds maintain independence', () => {
60
- const getA = reactive((x: number) => {
61
- return x + 1;
62
- });
63
-
64
- const getB = reactive((x: number) => {
65
- return getA(x) * 2 + getA(x * 2);
66
- });
67
-
68
- const getC = reactive((x: number) => {
69
- return getB(x) + getA(x);
70
- });
71
-
72
- expect(getC.withParams(1)).toHaveValueAndCounts(9, { compute: 1, get: 1 });
73
- expect(getC.withParams(1)).toHaveValueAndCounts(9, { compute: 1, get: 2 });
74
- expect(getC.withParams(2)).toHaveValueAndCounts(14, { compute: 1, get: 1 });
75
- expect(getC.withParams(2)).toHaveValueAndCounts(14, { compute: 1, get: 2 });
76
- });
77
-
78
- test('Nested computeds work with state signals', () => {
79
- const stateA = state(1);
80
- const stateB = state(2);
81
-
82
- const getInner = reactive((x: number) => {
83
- return x + stateA.get();
84
- });
85
-
86
- const getOuter = reactive((x: number) => {
87
- return getInner(x) * stateB.get();
88
- });
89
-
90
- expect(getOuter.withParams(3)).toHaveValueAndCounts(8, { compute: 1, get: 1 });
91
-
92
- stateA.set(2);
93
- expect(getOuter.withParams(3)).toHaveValueAndCounts(10, { compute: 2, get: 2 });
94
-
95
- stateB.set(3);
96
- expect(getOuter.withParams(3)).toHaveValueAndCounts(15, { compute: 3, get: 3 });
97
-
98
- expect(getOuter.withParams(3)).toHaveValueAndCounts(15, { compute: 3, get: 4 });
99
- });
100
-
101
- test('Nested computeds work with both state and arguments', () => {
102
- const stateA = state(1);
103
- const stateB = state(2);
104
-
105
- const getInner = reactive((x: number, y: number) => {
106
- return x + y + stateA.get();
107
- });
108
-
109
- const getMiddle = reactive((x: number) => {
110
- return getInner(x, stateB.get()) * 2;
111
- });
112
-
113
- const getOuter = reactive((x: number, y: number) => {
114
- return getMiddle(x) + y;
115
- });
116
-
117
- expect(getOuter.withParams(1, 3)).toHaveValueAndCounts(11, { compute: 1, get: 1 });
118
-
119
- stateB.set(3);
120
- expect(getOuter.withParams(1, 3)).toHaveValueAndCounts(13, { compute: 2, get: 2 });
121
-
122
- stateA.set(2);
123
- expect(getOuter.withParams(1, 3)).toHaveValueAndCounts(15, { compute: 3, get: 3 });
124
-
125
- expect(getOuter.withParams(1, 4)).toHaveValueAndCounts(16, { compute: 1, get: 1 });
126
-
127
- expect(getOuter.withParams(1, 4)).toHaveValueAndCounts(16, { compute: 1, get: 2 });
128
- });
129
- });
130
- });