signalium 1.2.2 → 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 +28 -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 -23
  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 +15 -14
  32. package/dist/cjs/internals/contexts.d.ts.map +1 -1
  33. package/dist/cjs/internals/contexts.js +52 -52
  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 +15 -14
  164. package/dist/esm/internals/contexts.d.ts.map +1 -1
  165. package/dist/esm/internals/contexts.js +46 -46
  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 -21
  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 -177
  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,256 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
- import { reactive, createContext, withContexts, watcher, state } from '../index.js';
3
- import { SignalScope, ROOT_SCOPE, forceGc, clearRootContexts } from '../internals/contexts.js';
4
- import { nextTick, sleep } from './utils/async.js';
5
-
6
- // Helper to access private properties for testing
7
- const getSignalsMap = (scope: SignalScope) => {
8
- return (scope as any).signals as Map<number, any>;
9
- };
10
-
11
- const getGCCandidates = (scope: SignalScope) => {
12
- return (scope as any).gcCandidates as Set<any>;
13
- };
14
-
15
- describe('Garbage Collection', () => {
16
- beforeEach(() => {
17
- clearRootContexts();
18
- });
19
-
20
- it('should automatically garbage collect unwatched signals', async () => {
21
- const testSignal = reactive(() => 42);
22
-
23
- const w = watcher(() => testSignal());
24
-
25
- // Watch the signal
26
- const unwatch = w.addListener(() => {
27
- testSignal();
28
- });
29
-
30
- await nextTick();
31
-
32
- // Signal should be in the scope
33
- expect(getSignalsMap(ROOT_SCOPE).size).toBe(1);
34
-
35
- // Unwatch the signal
36
- unwatch();
37
-
38
- await sleep(50);
39
-
40
- // Signal should be garbage collected
41
- expect(getSignalsMap(ROOT_SCOPE).size).toBe(0);
42
- });
43
-
44
- it('should not garbage collect signals with shouldGC returning false', async () => {
45
- // Create a signal that should not be garbage collected
46
- const persistentSignal = reactive(() => 'persist', {
47
- shouldGC: () => false,
48
- });
49
-
50
- const w = watcher(() => persistentSignal());
51
-
52
- // Watch the signal
53
- const unwatch = w.addListener(() => {
54
- persistentSignal();
55
- });
56
-
57
- await nextTick();
58
-
59
- // Signal should be in the scope
60
- expect(getSignalsMap(ROOT_SCOPE).size).toBe(1);
61
-
62
- // Unwatch the signal
63
- unwatch();
64
-
65
- await sleep(50);
66
-
67
- // Signal should still be in the scope
68
- expect(getSignalsMap(ROOT_SCOPE).size).toBe(1);
69
- });
70
-
71
- it('should support conditional GC based on signal state', async () => {
72
- // Create a signal with conditional GC
73
- const shouldAllowGC = state(false);
74
-
75
- const conditionalSignal = reactive(() => shouldAllowGC.get(), {
76
- shouldGC: (signal, value) => {
77
- // console.log('shouldGC', signal, value);
78
- return value;
79
- },
80
- });
81
-
82
- const w = watcher(() => conditionalSignal());
83
-
84
- // Watch the signal
85
- const unwatch = w.addListener(() => {
86
- conditionalSignal();
87
- });
88
-
89
- await nextTick();
90
-
91
- // Signal should be in the scope
92
- expect(getSignalsMap(ROOT_SCOPE).size).toBe(1);
93
-
94
- // Unwatch the signal
95
- unwatch();
96
-
97
- await sleep(50);
98
-
99
- // Signal should still be in the scope because shouldGC returns false
100
- expect(getSignalsMap(ROOT_SCOPE).size).toBe(1);
101
-
102
- // Now allow GC
103
- shouldAllowGC.set(true);
104
-
105
- // Watch the signal
106
- const unwatch2 = w.addListener(() => {
107
- conditionalSignal();
108
- });
109
-
110
- await nextTick();
111
-
112
- // Signal should be in GC candidates
113
- expect(getSignalsMap(ROOT_SCOPE).size).toBe(1);
114
-
115
- unwatch2();
116
-
117
- await sleep(50);
118
-
119
- // Signal should be garbage collected
120
- expect(getSignalsMap(ROOT_SCOPE).size).toBe(0);
121
- });
122
-
123
- it('should support manual garbage collection', async () => {
124
- let signalObj: object;
125
-
126
- // Create multiple signals
127
- const signal1 = reactive(() => 'signal1');
128
- const signal2 = reactive(() => 'signal2', {
129
- shouldGC: signal => {
130
- signalObj = signal;
131
- return false;
132
- },
133
- });
134
-
135
- const w1 = watcher(() => signal1());
136
- const w2 = watcher(() => signal2());
137
-
138
- // Watch both signals
139
- const unwatch1 = w1.addListener(() => {
140
- signal1();
141
- });
142
- const unwatch2 = w2.addListener(() => {
143
- signal2();
144
- });
145
-
146
- await nextTick();
147
-
148
- // Both signals should be in the scope
149
- expect(getSignalsMap(ROOT_SCOPE).size).toBe(2);
150
-
151
- // Unwatch both signals
152
- unwatch1();
153
- unwatch2();
154
-
155
- await sleep(50);
156
-
157
- // Only signal1 should be garbage collected
158
- expect(getSignalsMap(ROOT_SCOPE).size).toBe(1);
159
-
160
- // The remaining signal should be signal2
161
- const remainingSignal = Array.from(getSignalsMap(ROOT_SCOPE).values())[0];
162
- expect(remainingSignal.get()).toBe('signal2');
163
-
164
- forceGc(signalObj!);
165
-
166
- await sleep(50);
167
-
168
- expect(getSignalsMap(ROOT_SCOPE).size).toBe(0);
169
- });
170
-
171
- it('should not garbage collect signals that are still being watched', async () => {
172
- // Create a signal
173
- const watchedSignal = reactive(() => 'watched');
174
-
175
- const w = watcher(() => watchedSignal());
176
-
177
- // Watch the signal but don't unwatch
178
- w.addListener(() => {
179
- watchedSignal();
180
- });
181
-
182
- await nextTick();
183
-
184
- // Signal should be in the scope
185
- expect(getSignalsMap(ROOT_SCOPE).size).toBe(1);
186
-
187
- await sleep(50);
188
-
189
- // Signal should still be in the scope because it's being watched
190
- expect(getSignalsMap(ROOT_SCOPE).size).toBe(1);
191
- });
192
-
193
- it('should handle context-scoped signals correctly', async () => {
194
- // Create a context
195
- const TestContext = createContext('test');
196
-
197
- // Create signals in context
198
- let contextSignal: any;
199
-
200
- withContexts([[TestContext, 'value']], () => {
201
- contextSignal = reactive(() => 'context-scoped');
202
-
203
- const w = watcher(() => contextSignal());
204
-
205
- // Watch and unwatch
206
- const unwatch = w.addListener(() => {
207
- contextSignal();
208
- });
209
-
210
- unwatch();
211
- });
212
-
213
- await nextTick();
214
-
215
- // Get the context scope (this is a bit hacky for testing)
216
- const contextScope = (ROOT_SCOPE as any).children.values().next().value;
217
-
218
- await sleep(50);
219
-
220
- // Signal should be garbage collected from the context scope
221
- expect(getSignalsMap(contextScope).size).toBe(0);
222
- });
223
-
224
- it('should remove signal from GC candidates if watched again', async () => {
225
- // Create a signal
226
- const signal = reactive(() => 'rewatch');
227
-
228
- const w = watcher(() => signal());
229
-
230
- // Watch and unwatch
231
- const unwatch = w.addListener(() => {
232
- signal();
233
- });
234
-
235
- await nextTick();
236
-
237
- // Signal should be in the scope
238
- expect(getSignalsMap(ROOT_SCOPE).size).toBe(1);
239
-
240
- unwatch();
241
- await nextTick();
242
-
243
- // Signal should be in GC candidates
244
- expect(getGCCandidates(ROOT_SCOPE).size).toBe(1);
245
-
246
- // Watch again
247
- w.addListener(() => {
248
- signal();
249
- });
250
-
251
- await nextTick();
252
-
253
- // Signal should be removed from GC candidates
254
- expect(getGCCandidates(ROOT_SCOPE).size).toBe(0);
255
- });
256
- });
@@ -1,298 +0,0 @@
1
- import { describe, expect, test, vi } from 'vitest';
2
- import { state } from '../index.js';
3
- import { nextTick } from './utils/async.js';
4
- import { permute } from './utils/permute.js';
5
-
6
- describe('nesting', () => {
7
- permute(2, (create1, create2) => {
8
- test('simple nesting', async () => {
9
- const inner = create2(
10
- (a: number, b: number) => {
11
- return a + b;
12
- },
13
- {
14
- desc: 'inner',
15
- },
16
- );
17
-
18
- const outer = create1(
19
- (a: number) => {
20
- return inner(a, 2);
21
- },
22
- {
23
- desc: 'outer',
24
- },
25
- );
26
-
27
- outer.withParams(1).watch();
28
- outer.withParams(2).watch();
29
-
30
- await nextTick();
31
-
32
- expect(outer.withParams(1)).toHaveSignalValue(3).toMatchSnapshot();
33
- expect(outer.withParams(2)).toHaveSignalValue(4).toMatchSnapshot();
34
-
35
- expect(outer.withParams(1)).toHaveSignalValue(3).toMatchSnapshot();
36
- expect(outer.withParams(2)).toHaveSignalValue(4).toMatchSnapshot();
37
- });
38
-
39
- test('outer state + params', async () => {
40
- const val = state(1);
41
-
42
- const inner = create2((a: number, b: number) => {
43
- return a + b;
44
- });
45
-
46
- const outer = create1((a: number) => {
47
- if (a > 1) {
48
- return inner(a, 2)! + val.get();
49
- }
50
-
51
- return inner(a, 2);
52
- });
53
-
54
- outer.withParams(1).watch();
55
- outer.withParams(2).watch();
56
-
57
- await nextTick();
58
-
59
- expect(outer.withParams(1)).toHaveSignalValue(3).toMatchSnapshot();
60
- expect(outer.withParams(2)).toHaveSignalValue(5).toMatchSnapshot();
61
-
62
- val.set(2);
63
- await nextTick();
64
-
65
- expect(outer.withParams(1)).toHaveSignalValue(3).toMatchSnapshot();
66
- expect(outer.withParams(2)).toHaveSignalValue(6).toMatchSnapshot();
67
- });
68
-
69
- test('inner state + params', async () => {
70
- const val = state(1);
71
-
72
- const inner = create2((a: number, b: number) => {
73
- if (a > 1) {
74
- return a + b + val.get();
75
- }
76
-
77
- return a + b;
78
- });
79
-
80
- const outer = create1((a: number) => {
81
- return inner(a, 2);
82
- });
83
-
84
- outer.withParams(1).watch();
85
- outer.withParams(2).watch();
86
-
87
- await nextTick();
88
-
89
- expect(outer.withParams(1)).toHaveSignalValue(3).toMatchSnapshot();
90
- expect(outer.withParams(2)).toHaveSignalValue(5).toMatchSnapshot();
91
-
92
- val.set(2);
93
-
94
- await nextTick();
95
-
96
- expect(outer.withParams(1)).toHaveSignalValue(3).toMatchSnapshot();
97
- expect(outer.withParams(2)).toHaveSignalValue(6).toMatchSnapshot();
98
- });
99
- });
100
-
101
- permute(3, (create1, create2, create3) => {
102
- test('simple nesting', async () => {
103
- const inner = create3((a: number, b: number, c: number) => {
104
- return a + b + c;
105
- });
106
-
107
- const middle = create2((a: number, b: number) => {
108
- return inner(a, b, 3);
109
- });
110
-
111
- const outer = create1((a: number) => {
112
- return middle(a, 2);
113
- });
114
-
115
- outer.withParams(1).watch();
116
-
117
- await nextTick();
118
-
119
- expect(outer.withParams(1)).toHaveSignalValue(6).toMatchSnapshot();
120
- });
121
-
122
- test('state + params one level deep', async () => {
123
- const val = state(1);
124
-
125
- const inner = create3((a: number, b: number, c: number) => {
126
- return a + b + c;
127
- });
128
-
129
- const middle = create2((a: number, b: number) => {
130
- if (a > 1) {
131
- return inner(a, b, 3)! + val.get();
132
- }
133
-
134
- return inner(a, b, 3);
135
- });
136
-
137
- const outer = create1((a: number) => {
138
- return middle(a, 2);
139
- });
140
-
141
- outer.withParams(1).watch();
142
- outer.withParams(2).watch();
143
-
144
- await nextTick();
145
-
146
- expect(outer.withParams(1)).toHaveSignalValue(6).toMatchSnapshot();
147
- expect(outer.withParams(2)).toHaveSignalValue(8).toMatchSnapshot();
148
-
149
- val.set(2);
150
- await nextTick();
151
-
152
- expect(outer.withParams(1)).toHaveSignalValue(6).toMatchSnapshot();
153
- expect(outer.withParams(2)).toHaveSignalValue(9).toMatchSnapshot();
154
- });
155
-
156
- test('state + params two levels deep', async () => {
157
- const val = state(1);
158
-
159
- const inner = create3((a: number, b: number, c: number) => {
160
- if (a > 1) {
161
- return a + b + c + val.get();
162
- }
163
-
164
- return a + b + c;
165
- });
166
-
167
- const middle = create2((a: number, b: number) => {
168
- return inner(a, b, 3);
169
- });
170
-
171
- const outer = create1((a: number) => {
172
- return middle(a, 2);
173
- });
174
-
175
- outer.withParams(1).watch();
176
- outer.withParams(2).watch();
177
-
178
- await nextTick();
179
-
180
- expect(outer.withParams(1)).toHaveSignalValue(6).toMatchSnapshot();
181
- expect(outer.withParams(2)).toHaveSignalValue(8).toMatchSnapshot();
182
-
183
- val.set(2);
184
-
185
- await nextTick();
186
-
187
- expect(outer.withParams(1)).toHaveSignalValue(6).toMatchSnapshot();
188
- expect(outer.withParams(2)).toHaveSignalValue(9).toMatchSnapshot();
189
- });
190
-
191
- test('params + multiple children', async () => {
192
- const inner1 = create3((a: number, b: number, c: number) => {
193
- return a + b + c;
194
- });
195
-
196
- const inner2 = create2((a: number, b: number) => {
197
- return a + b + inner1(a, b, 3)!;
198
- });
199
-
200
- const outer = create1((a: number, b: number) => {
201
- return inner1(a, 2, 3)! + inner2(b, 2)!;
202
- });
203
-
204
- outer.withParams(1, 2).watch();
205
- outer.withParams(2, 2).watch();
206
- outer.withParams(2, 3).watch();
207
-
208
- await nextTick();
209
- await nextTick();
210
-
211
- expect(outer.withParams(1, 2)).toHaveSignalValue(17).toMatchSnapshot();
212
- expect(outer.withParams(2, 2)).toHaveSignalValue(18).toMatchSnapshot();
213
- expect(outer.withParams(2, 3)).toHaveSignalValue(20).toMatchSnapshot();
214
- });
215
-
216
- test('params + state + multiple children', async () => {
217
- const val = state(1);
218
-
219
- const inner1 = create3((a: number, b: number, c: number) => {
220
- return a + b + c;
221
- });
222
-
223
- const inner2 = create2((a: number, b: number) => {
224
- if (a > 1) {
225
- return a + b + inner1(a, b, 3)! + val.get();
226
- }
227
-
228
- return a + b + inner1(a, b, 3)!;
229
- });
230
-
231
- const outer = create1((a: number, b: number) => {
232
- return inner1(a, 2, 3)! + inner2(b, 2)!;
233
- });
234
-
235
- outer.withParams(1, 2).watch();
236
- outer.withParams(2, 2).watch();
237
- outer.withParams(2, 3).watch();
238
- outer.withParams(3, 3).watch();
239
-
240
- await nextTick();
241
-
242
- expect(outer.withParams(1, 2)).toHaveSignalValue(18).toMatchSnapshot();
243
- expect(outer.withParams(2, 2)).toHaveSignalValue(19).toMatchSnapshot();
244
- expect(outer.withParams(2, 3)).toHaveSignalValue(21).toMatchSnapshot();
245
- expect(outer.withParams(3, 3)).toHaveSignalValue(22).toMatchSnapshot();
246
-
247
- val.set(2);
248
-
249
- // Wait for async with subscriptions
250
- await nextTick();
251
-
252
- expect(outer.withParams(1, 2)).toHaveSignalValue(19).toMatchSnapshot();
253
- expect(outer.withParams(2, 2)).toHaveSignalValue(20).toMatchSnapshot();
254
- expect(outer.withParams(2, 3)).toHaveSignalValue(22).toMatchSnapshot();
255
- expect(outer.withParams(3, 3)).toHaveSignalValue(23).toMatchSnapshot();
256
- });
257
-
258
- test('passing state as params + multiple children', async () => {
259
- const stateA = state(1);
260
- const stateB = state(2);
261
-
262
- const inner1 = create2((a: number, s: typeof stateA) => {
263
- return a + s.get();
264
- });
265
-
266
- const inner2 = create3((b: number, s: typeof stateB) => {
267
- return b * s.get();
268
- });
269
-
270
- const outer = create1((x: number) => {
271
- if (x > 2) {
272
- return inner1(x, stateA)! + inner2(x, stateB)!;
273
- }
274
- return inner1(x, stateA);
275
- });
276
-
277
- outer.withParams(1).watch();
278
- outer.withParams(3).watch();
279
-
280
- await nextTick();
281
-
282
- expect(outer.withParams(1)).toHaveSignalValue(2).toMatchSnapshot();
283
- expect(outer.withParams(3)).toHaveSignalValue(10).toMatchSnapshot();
284
-
285
- stateA.set(2);
286
- await nextTick();
287
-
288
- expect(outer.withParams(1)).toHaveSignalValue(3).toMatchSnapshot();
289
- expect(outer.withParams(3)).toHaveSignalValue(11).toMatchSnapshot();
290
-
291
- stateB.set(3);
292
-
293
- await nextTick();
294
- expect(outer.withParams(1)).toHaveSignalValue(3).toMatchSnapshot();
295
- expect(outer.withParams(3)).toHaveSignalValue(14).toMatchSnapshot();
296
- });
297
- });
298
- });