signalium 1.2.2 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. package/CHANGELOG.md +37 -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 +14 -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 +14 -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,619 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { createContext, useContext, withContexts, state, setRootContexts } from '../index.js';
3
- import { permute } from './utils/permute.js';
4
- import { nextTick } from './utils/async.js';
5
- import { reactive } from './utils/instrumented-hooks.js';
6
-
7
- describe('contexts', () => {
8
- test('throws when useContext is used outside of a signal', () => {
9
- expect(() => {
10
- useContext(createContext('test'));
11
- }).toThrow('useContext must be used within a signal hook');
12
- });
13
-
14
- test('setRootContexts sets contexts at the root level', () => {
15
- const value = state('Hello');
16
- const context = createContext(value);
17
- const override = state('Hey');
18
-
19
- // Create a reactive function that uses the context
20
- const derived = reactive(() => `${useContext(context).get()}, World`);
21
-
22
- // Initially should use default value
23
- expect(derived()).toBe('Hello, World');
24
-
25
- // Set root contexts
26
- setRootContexts([[context, override]]);
27
-
28
- // Should now use the override value
29
- expect(derived()).toBe('Hey, World');
30
-
31
- // Changes to override should be reflected
32
- override.set('Hi');
33
- expect(derived()).toBe('Hi, World');
34
- });
35
-
36
- test('setRootContexts with multiple contexts', () => {
37
- const value1 = state('Hello');
38
- const value2 = state('World');
39
- const context1 = createContext(value1);
40
- const context2 = createContext(value2);
41
- const override1 = state('Hey');
42
- const override2 = state('There');
43
-
44
- const derived = reactive(() => `${useContext(context1).get()}, ${useContext(context2).get()}`);
45
-
46
- // Initially should use default values
47
- expect(derived()).toBe('Hello, World');
48
-
49
- // Set multiple root contexts
50
- setRootContexts([
51
- [context1, override1],
52
- [context2, override2],
53
- ]);
54
-
55
- expect(derived()).toBe('Hey, There');
56
-
57
- // Changes to overrides should be reflected
58
- override1.set('Hi');
59
- override2.set('Everyone');
60
- expect(derived()).toBe('Hi, Everyone');
61
-
62
- // Changes to original values should not affect the result
63
- value1.set('Bye');
64
- value2.set('Earth');
65
- expect(derived()).toBe('Hi, Everyone');
66
- });
67
-
68
- test('withContexts inherits from root scope', () => {
69
- const defaultValue1 = state('default1');
70
- const defaultValue2 = state('default2');
71
- const ctx1 = createContext(defaultValue1);
72
- const ctx2 = createContext(defaultValue2);
73
- const rootOverride1 = state('root1');
74
- const rootOverride2 = state('root2');
75
-
76
- // Set root contexts
77
- setRootContexts([
78
- [ctx1, rootOverride1],
79
- [ctx2, rootOverride2],
80
- ]);
81
-
82
- // Create a reactive function that uses both contexts
83
- const derived = reactive(() => `${useContext(ctx1).get()}-${useContext(ctx2).get()}`);
84
-
85
- // Should inherit from root scope when no local overrides
86
- const result1 = withContexts([], () => derived());
87
- expect(result1).toBe('root1-root2');
88
-
89
- // Should inherit from root scope for unoverridden contexts
90
- const localOverride1 = state('local1');
91
- const result2 = withContexts([[ctx1, localOverride1]], () => derived());
92
- expect(result2).toBe('local1-root2');
93
-
94
- // Should use local overrides when provided
95
- const localOverride2 = state('local2');
96
- const result3 = withContexts(
97
- [
98
- [ctx1, localOverride1],
99
- [ctx2, localOverride2],
100
- ],
101
- () => derived(),
102
- );
103
- expect(result3).toBe('local1-local2');
104
-
105
- // Changes to root contexts should be reflected in inherited contexts
106
- rootOverride1.set('updated-root1');
107
- rootOverride2.set('updated-root2');
108
-
109
- const result4 = withContexts([], () => derived());
110
- expect(result4).toBe('updated-root1-updated-root2');
111
-
112
- const result5 = withContexts([[ctx1, localOverride1]], () => derived());
113
- expect(result5).toBe('local1-updated-root2');
114
- });
115
-
116
- test('async computed maintains context ownership across await boundaries', async () => {
117
- const ctx = createContext('default');
118
-
119
- const inner = reactive(async () => {
120
- await Promise.resolve();
121
- return 'inner-value';
122
- });
123
-
124
- const outer = reactive(async () => {
125
- const result = await inner();
126
-
127
- // Use context after awaiting inner result
128
- const contextValue = useContext(ctx);
129
- return result + '-' + contextValue;
130
- });
131
-
132
- // Test in parent scope
133
- expect(outer).toHaveValueAndCounts(undefined, { compute: 1 });
134
-
135
- // Wait for async computation to complete
136
- await nextTick();
137
- await nextTick();
138
- expect(outer).toHaveValueAndCounts('inner-value-default', { compute: 1 });
139
-
140
- // Test in child scope
141
- expect(outer.withContexts([ctx, 'child'])).toHaveValueAndCounts(undefined, { compute: 1 });
142
-
143
- // Verify parent scope maintains separate computed
144
- await nextTick();
145
- await nextTick();
146
-
147
- expect(outer.withContexts([ctx, 'child'])).toHaveValueAndCounts('inner-value-child', { compute: 1 });
148
- expect(outer).toHaveValueAndCounts('inner-value-default', { compute: 1 });
149
- });
150
-
151
- test('async task maintains context ownership across await boundaries', async () => {
152
- const ctx = createContext('default');
153
-
154
- const task = reactive(async () => {
155
- await Promise.resolve();
156
- });
157
- });
158
-
159
- permute(1, create => {
160
- test('computed signals are cached per context scope', async () => {
161
- const ctx = createContext('default');
162
- const value = state(0);
163
-
164
- const computed = create(
165
- () => {
166
- return useContext(ctx) + value.get();
167
- },
168
- {
169
- desc: 'subscription',
170
- },
171
- );
172
-
173
- computed();
174
-
175
- await nextTick();
176
-
177
- // Same scope should reuse computation
178
- expect(computed).toHaveSignalValue('default0').toMatchSnapshot();
179
- expect(computed).toHaveSignalValue('default0').toMatchSnapshot();
180
-
181
- const result = withContexts([[ctx, 'other']], () => {
182
- // Different scope should compute again
183
- return computed();
184
- });
185
-
186
- await nextTick();
187
-
188
- expect(computed.withContexts([ctx, 'other']))
189
- .toHaveSignalValue('other0')
190
- .toMatchSnapshot();
191
- expect(computed.withContexts([ctx, 'other']))
192
- .toHaveSignalValue('other0')
193
- .toMatchSnapshot();
194
-
195
- expect(computed).toHaveSignalValue('default0').toMatchSnapshot();
196
- });
197
-
198
- // test.skip('computed forks when accessing forked context after being shared', async () => {
199
- // const ctx = createContext('default');
200
- // const value = state(0);
201
-
202
- // const computed = create(() => {
203
- // // Initially only depends on value, not context
204
- // const v = value.get();
205
- // if (v > 0) {
206
- // // After value changes, depends on context
207
- // return useContext(ctx);
208
- // }
209
- // return 'default';
210
- // });
211
-
212
- // // Initially computed is shared between scopes since it doesn't use context
213
- // expect(computed).withContexts([ctx, 'scope1']).toHaveValueAndCounts('default', { compute: 1 });
214
- // expect(computed).withContexts([ctx, 'scope2']).toHaveValueAndCounts('default', { compute: 1 });
215
-
216
- // // Change value to make computed use context
217
- // value.set(1);
218
-
219
- // await nextTick();
220
-
221
- // // Now computed should fork and use the different context values
222
- // expect(computed).withContexts([ctx, 'scope1']).toHaveValueAndCounts('scope1', { compute: 3 });
223
- // expect(computed).withContexts([ctx, 'scope2']).toHaveValueAndCounts('scope2', { compute: 3 });
224
-
225
- // // Ensure that computed is cached correctly
226
- // expect(computed).withContexts([ctx, 'scope1']).toHaveValueAndCounts('scope1', { compute: 3 });
227
- // expect(computed).withContexts([ctx, 'scope2']).toHaveValueAndCounts('scope2', { compute: 3 });
228
- // });
229
-
230
- // test.skip('computed forks correctly regardless of access order', () => {
231
- // const ctx = createContext('default');
232
- // const value = state(0);
233
-
234
- // const computed = create(() => {
235
- // // Initially only depends on value, not context
236
- // const v = value.get();
237
- // if (v > 0) {
238
- // // After value changes, depends on context
239
- // return useContext(ctx);
240
- // }
241
- // return v;
242
- // });
243
-
244
- // // Create two scopes with different context values, but access in reverse order
245
- // expect(computed).withContexts([ctx, 'scope1']).toHaveValueAndCounts(0, { compute: 1 });
246
-
247
- // expect(computed).withContexts([ctx, 'scope2']).toHaveValueAndCounts(0, { compute: 1 }); // Still shared since no context dependency
248
-
249
- // // Change value to make computed use context
250
- // value.set(1);
251
-
252
- // // Now computed should fork and use the different context values
253
- // // Access in reverse order compared to first test
254
- // expect(computed).withContexts([ctx, 'scope2']).toHaveValueAndCounts('scope2', { compute: 2 });
255
-
256
- // expect(computed).withContexts([ctx, 'scope1']).toHaveValueAndCounts('scope1', { compute: 3 });
257
-
258
- // // Ensure that computed is cached correctly
259
- // expect(computed).withContexts([ctx, 'scope1']).toHaveValueAndCounts('scope1', { compute: 3 });
260
-
261
- // expect(computed).withContexts([ctx, 'scope2']).toHaveValueAndCounts('scope2', { compute: 3 });
262
- // });
263
-
264
- // test.skip('computed ownership transfers correctly between parent and child scopes', () => {
265
- // const ctx = createContext('default');
266
- // const value = state(0);
267
-
268
- // const computed = create(() => {
269
- // // Initially only depends on value, not context
270
- // const v = value.get();
271
- // if (v > 0) {
272
- // // After value changes, depends on context
273
- // return useContext(ctx) + v;
274
- // }
275
- // return v;
276
- // });
277
-
278
- // // Initially access in parent scope
279
- // expect(computed).toHaveValueAndCounts(0, { compute: 1 });
280
-
281
- // // Child scope reuses original computed instance since no context dependency
282
- // expect(computed).withContexts([ctx, 'child']).toHaveValueAndCounts(0, { compute: 1 });
283
-
284
- // // Change value to make computed use context
285
- // value.set(1);
286
-
287
- // // Child scope takes ownership of parent instance
288
- // expect(computed).withContexts([ctx, 'child']).toHaveValueAndCounts('child1', { compute: 2 });
289
-
290
- // // Parent scope gets its own computed instance
291
- // expect(computed).toHaveValueAndCounts('default1', { compute: 3 });
292
-
293
- // // Third scope gets its own computed instance
294
- // expect(computed).withContexts([ctx, 'third']).toHaveValueAndCounts('third1', { compute: 4 });
295
-
296
- // // Ensure computeds are cached correctly
297
- // expect(computed).withContexts([ctx, 'child']).toHaveValueAndCounts('child1', { compute: 4 });
298
-
299
- // expect(computed).toHaveValueAndCounts('default1', { compute: 4 });
300
-
301
- // // Verify all scopes maintain their separate computeds
302
- // value.set(2);
303
-
304
- // expect(computed).withContexts([ctx, 'child']).toHaveValueAndCounts('child2', { compute: 5 });
305
-
306
- // expect(computed).toHaveValueAndCounts('default2', { compute: 6 });
307
-
308
- // expect(computed).withContexts([ctx, 'third']).toHaveValueAndCounts('third2', { compute: 7 });
309
- // });
310
- });
311
-
312
- permute(2, (create1, create2) => {
313
- test('contexts are properly scoped', async () => {
314
- const ctx = createContext('default');
315
-
316
- const computed1 = create1(() => {
317
- return useContext(ctx);
318
- });
319
-
320
- computed1.watch();
321
-
322
- await nextTick();
323
-
324
- expect(computed1).toHaveSignalValue('default').toMatchSnapshot();
325
-
326
- const computed2 = create2(() => {
327
- return withContexts([[ctx, 'override']], () => {
328
- return computed1();
329
- });
330
- });
331
-
332
- computed2.watch();
333
-
334
- await nextTick();
335
-
336
- expect(computed2).toHaveSignalValue('override').toMatchSnapshot();
337
- // expect(computed1).toHaveSignalValue('default').toMatchSnapshot();
338
- });
339
-
340
- // test.skip('context dependencies are tracked correctly', () => {
341
- // const ctx1 = createContext('default1');
342
- // const ctx2 = createContext('default2');
343
-
344
- // const computed1 = create1(() => {
345
- // // Only depends on ctx1
346
- // return useContext(ctx1);
347
- // });
348
-
349
- // const computed2 = create2(() => {
350
- // // Depends on both contexts
351
- // return computed1() + useContext(ctx2);
352
- // });
353
-
354
- // expect(computed2).toHaveValueAndCounts('default1default2', { compute: 1 });
355
- // expect(computed1).toHaveCounts({ compute: 1 });
356
-
357
- // expect(computed2).withContexts([ctx1, 'override1']).toHaveValueAndCounts('override1default2', { compute: 2 });
358
- // expect(computed1).toHaveCounts({ compute: 2 });
359
-
360
- // expect(computed2).withContexts([ctx2, 'override2']).toHaveValueAndCounts('default1override2', { compute: 3 });
361
- // expect(computed1).toHaveCounts({ compute: 2 });
362
-
363
- // expect(computed2)
364
- // .withContexts([ctx1, 'override1'], [ctx2, 'override2'])
365
- // .toHaveValueAndCounts('override1override2', { compute: 4 });
366
- // expect(computed1).toHaveCounts({ compute: 3 });
367
-
368
- // // Should reuse cached value since ctx2 didn't change
369
- // expect(computed1).withContexts([ctx2, 'override1']).toHaveValueAndCounts('default1', { compute: 3 });
370
- // });
371
-
372
- test('context scopes inherit from parent scope when nested in computeds', async () => {
373
- const ctx1 = createContext('default1');
374
- const ctx2 = createContext('default2');
375
-
376
- const computed1 = create1(() => {
377
- return useContext(ctx1) + useContext(ctx2);
378
- });
379
-
380
- const computed2 = create2(() => {
381
- return (
382
- useContext(ctx2) +
383
- withContexts([[ctx2, ':inner-override2']], () => {
384
- return computed1();
385
- })
386
- );
387
- });
388
-
389
- computed2.watch();
390
- computed2.withContexts([ctx1, 'override1']).watch();
391
- computed2.withContexts([ctx2, 'override2']).watch();
392
- computed2.withContexts([ctx1, 'override1'], [ctx2, 'override2']).watch();
393
-
394
- await nextTick();
395
-
396
- expect(computed2).toHaveSignalValue('default2default1:inner-override2').toMatchSnapshot();
397
- expect(computed1).toMatchSnapshot();
398
-
399
- expect(computed2.withContexts([ctx1, 'override1']))
400
- .toHaveSignalValue('default2override1:inner-override2')
401
- .toMatchSnapshot();
402
- expect(computed1).toMatchSnapshot();
403
-
404
- await nextTick();
405
-
406
- expect(computed2.withContexts([ctx1, 'override1'], [ctx2, 'override2']))
407
- .toHaveSignalValue('override2override1:inner-override2')
408
- .toMatchSnapshot();
409
- expect(computed1).toMatchSnapshot();
410
-
411
- expect(computed2.withContexts([ctx2, 'override2']))
412
- .toHaveSignalValue('override2default1:inner-override2')
413
- .toMatchSnapshot();
414
- expect(computed1).toMatchSnapshot();
415
- });
416
- });
417
-
418
- // permute(3, (create1, create2, create3) => {
419
- // test.skip('the gauntlet (params + state + context)', async () => {
420
- // const ctx = createContext('ctxdefault');
421
- // const value = state('value');
422
-
423
- // const inner1 = create1((a: number) => {
424
- // if (a === 3) {
425
- // return ['inner1', useContext(ctx)];
426
- // } else if (a === 4) {
427
- // return ['inner1', value.get()];
428
- // }
429
-
430
- // return ['inner1'];
431
- // });
432
-
433
- // const inner2 = create2((a: number) => {
434
- // if (a === 3) {
435
- // return value.get() === 'value' ? ['inner2'] : ['inner2', useContext(ctx)];
436
- // } else if (a === 4) {
437
- // return withContexts([[ctx, 'ctxinneroverride']], () => {
438
- // return ['inner2', inner1(3), value.get()];
439
- // });
440
- // }
441
-
442
- // return ['inner2', inner1(a)];
443
- // });
444
-
445
- // const outer = create3((a: number) => {
446
- // if (a === 1) {
447
- // return [inner1(1), inner2(2)];
448
- // } else if (a === 2) {
449
- // return [inner1(2), inner2(3)];
450
- // } else if (a === 3) {
451
- // return [inner1(3), inner2(4)];
452
- // } else if (a === 4) {
453
- // return [useContext(ctx), inner2(4)];
454
- // } else if (a === 5) {
455
- // return [inner1(5), value.get()];
456
- // }
457
- // });
458
-
459
- // // a === 1
460
- // expect(outer)
461
- // .withParams(1)
462
- // .toHaveValueAndCounts([['inner1'], ['inner2', ['inner1']]], { compute: 1 });
463
- // expect(inner1).toHaveCounts({ compute: 2 });
464
- // expect(inner2).toHaveCounts({ compute: 1 });
465
-
466
- // expect(outer)
467
- // .withContexts([ctx, 'ctxoverride'])
468
- // .withParams(1)
469
- // .toHaveValueAndCounts([['inner1'], ['inner2', ['inner1']]], { compute: 1 });
470
- // expect(inner1).toHaveCounts({ compute: 2 });
471
- // expect(inner2).toHaveCounts({ compute: 1 });
472
-
473
- // // a === 2
474
- // expect(outer)
475
- // .withParams(2)
476
- // .toHaveValueAndCounts([['inner1'], ['inner2']], {
477
- // compute: 2,
478
- // });
479
- // expect(inner1).toHaveCounts({ compute: 2 });
480
- // expect(inner2).toHaveCounts({ compute: 2 });
481
-
482
- // expect(outer)
483
- // .withParams(2)
484
- // .withContexts([ctx, 'ctxoverride'])
485
- // .toHaveValueAndCounts([['inner1'], ['inner2']], {
486
- // compute: 2,
487
- // });
488
- // expect(inner1).toHaveCounts({ compute: 2 });
489
- // expect(inner2).toHaveCounts({ compute: 2 });
490
-
491
- // // a === 3
492
- // expect(outer)
493
- // .withParams(3)
494
- // .toHaveValueAndCounts(
495
- // [
496
- // ['inner1', 'ctxdefault'],
497
- // ['inner2', ['inner1', 'ctxinneroverride'], 'value'],
498
- // ],
499
- // {
500
- // compute: 3,
501
- // },
502
- // );
503
- // expect(inner1).toHaveCounts({ compute: 4 });
504
- // expect(inner2).toHaveCounts({ compute: 3 });
505
-
506
- // expect(outer)
507
- // .withParams(3)
508
- // .withContexts([ctx, 'ctxoverride'])
509
- // .toHaveValueAndCounts(
510
- // [
511
- // ['inner1', 'ctxoverride'],
512
- // ['inner2', ['inner1', 'ctxinneroverride'], 'value'],
513
- // ],
514
- // {
515
- // compute: 4,
516
- // },
517
- // );
518
- // expect(inner1).toHaveCounts({ compute: 6 });
519
- // expect(inner2).toHaveCounts({ compute: 4 });
520
-
521
- // // a === 4
522
- // expect(outer)
523
- // .withParams(4)
524
- // .toHaveValueAndCounts(['ctxdefault', ['inner2', ['inner1', 'ctxinneroverride'], 'value']], {
525
- // compute: 5,
526
- // });
527
- // expect(inner1).toHaveCounts({ compute: 6 });
528
- // expect(inner2).toHaveCounts({ compute: 4 });
529
-
530
- // expect(outer)
531
- // .withParams(4)
532
- // .withContexts([ctx, 'ctxoverride'])
533
- // .toHaveValueAndCounts(['ctxoverride', ['inner2', ['inner1', 'ctxinneroverride'], 'value']], {
534
- // compute: 6,
535
- // });
536
- // expect(inner1).toHaveCounts({ compute: 6 });
537
- // expect(inner2).toHaveCounts({ compute: 4 });
538
-
539
- // // a === 5
540
- // expect(outer)
541
- // .withParams(5)
542
- // .toHaveValueAndCounts([['inner1'], 'value'], {
543
- // compute: 7,
544
- // });
545
- // expect(inner1).toHaveCounts({ compute: 7 });
546
- // expect(inner2).toHaveCounts({ compute: 4 });
547
-
548
- // expect(outer)
549
- // .withParams(5)
550
- // .withContexts([ctx, 'ctxoverride'])
551
- // .toHaveValueAndCounts([['inner1'], 'value'], {
552
- // compute: 8,
553
- // });
554
- // expect(inner1).toHaveCounts({ compute: 8 });
555
- // expect(inner2).toHaveCounts({ compute: 4 });
556
-
557
- // value.set('value2');
558
- // await nextTick();
559
-
560
- // // a === 1
561
- // expect(outer)
562
- // .withParams(1)
563
- // .toHaveSignalValue([['inner1'], ['inner2', ['inner1']]]);
564
-
565
- // expect(outer)
566
- // .withContexts([ctx, 'ctxoverride'])
567
- // .withParams(1)
568
- // .toHaveSignalValue([['inner1'], ['inner2', ['inner1']]]);
569
-
570
- // // a === 2
571
- // expect(outer)
572
- // .withParams(2)
573
- // .toHaveSignalValue([['inner1'], ['inner2', 'ctxdefault']]);
574
-
575
- // expect(outer)
576
- // .withParams(2)
577
- // .withContexts([ctx, 'ctxoverride'])
578
- // .toHaveSignalValue([['inner1'], ['inner2', 'ctxoverride']]);
579
-
580
- // // a === 3
581
- // expect(outer)
582
- // .withParams(3)
583
- // .toHaveSignalValue([
584
- // ['inner1', 'ctxdefault'],
585
- // ['inner2', ['inner1', 'ctxinneroverride'], 'value2'],
586
- // ]);
587
-
588
- // expect(outer)
589
- // .withParams(3)
590
- // .withContexts([ctx, 'ctxoverride'])
591
- // .toHaveSignalValue([
592
- // ['inner1', 'ctxoverride'],
593
- // ['inner2', ['inner1', 'ctxinneroverride'], 'value2'],
594
- // ]);
595
-
596
- // // a === 4
597
- // expect(outer)
598
- // .withParams(4)
599
- // .toHaveSignalValue(['ctxdefault', ['inner2', ['inner1', 'ctxinneroverride'], 'value2']]);
600
-
601
- // expect(outer)
602
- // .withParams(4)
603
- // .withContexts([ctx, 'ctxoverride'])
604
- // .toHaveSignalValue(['ctxoverride', ['inner2', ['inner1', 'ctxinneroverride'], 'value2']]);
605
-
606
- // // a === 5
607
- // expect(outer)
608
- // .withParams(5)
609
- // .toHaveSignalValue([['inner1'], 'value2']);
610
- // expect(outer)
611
- // .withParams(5)
612
- // .withContexts([ctx, 'ctxoverride'])
613
- // .toHaveSignalValue([['inner1'], 'value2']);
614
-
615
- // expect(inner1).toHaveCounts({ compute: 10 });
616
- // expect(inner2).toHaveCounts({ compute: 9 });
617
- // });
618
- // });
619
- });