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,298 +0,0 @@
1
- import { scheduleListeners, scheduleTracer, scheduleUnwatch, setResolved } from './scheduling.js';
2
- import { SignalType, TRACER as TRACER, TracerEventType } from '../trace.js';
3
- import { DerivedSignal, SignalFlags, SignalState } from './derived.js';
4
- import { createEdge, Edge, EdgeType } from './edge.js';
5
- import { watchSignal } from './connect.js';
6
- import { ReactivePromise } from './async.js';
7
- import { ReactiveValue } from '../types.js';
8
- import { isGeneratorResult, isPromise, isReactivePromise } from './utils/type-utils.js';
9
-
10
- export let CURRENT_CONSUMER: DerivedSignal<any, any> | undefined;
11
-
12
- export function getSignal<T, Args extends unknown[]>(signal: DerivedSignal<T, Args>): ReactiveValue<T> {
13
- if (CURRENT_CONSUMER !== undefined) {
14
- const { ref, computedCount, deps } = CURRENT_CONSUMER;
15
- const prevEdge = deps.get(signal);
16
-
17
- const prevConsumedAt = prevEdge?.consumedAt;
18
-
19
- if (prevConsumedAt !== computedCount) {
20
- if (prevEdge === undefined) {
21
- TRACER?.emit({
22
- type: TracerEventType.Connected,
23
- id: CURRENT_CONSUMER.tracerMeta!.id,
24
- childId: signal.tracerMeta!.id,
25
- name: signal.tracerMeta!.desc,
26
- params: signal.tracerMeta!.params,
27
- nodeType: SignalType.Reactive,
28
- });
29
-
30
- if (CURRENT_CONSUMER.watchCount > 0) {
31
- watchSignal(signal);
32
- }
33
- }
34
-
35
- const updatedAt = checkSignal(signal);
36
- const newEdge = createEdge(prevEdge, EdgeType.Signal, signal, updatedAt, computedCount);
37
-
38
- signal.subs.set(ref, newEdge);
39
- deps.set(signal, newEdge);
40
- }
41
- } else {
42
- checkSignal(signal);
43
- }
44
-
45
- return signal.value as ReactiveValue<T>;
46
- }
47
-
48
- export function checkSignal(signal: DerivedSignal<any, any>): number {
49
- let { ref, _state: state } = signal;
50
-
51
- if (state < SignalState.Dirty) {
52
- return signal.updatedCount;
53
- }
54
-
55
- if (state === SignalState.MaybeDirty) {
56
- let edge: Edge | undefined = signal.dirtyHead;
57
-
58
- while (edge !== undefined) {
59
- if (edge.type === EdgeType.Promise) {
60
- const dep = edge.dep;
61
-
62
- // If the dependency is pending, then we need to propagate the pending state to the
63
- // parent signal, and we halt the computation here.
64
- if (dep.isPending) {
65
- const value = signal.value;
66
-
67
- if (value instanceof ReactivePromise) {
68
- // Propagate the pending state to the parent signal
69
- value._setPending();
70
- }
71
-
72
- // Add the signal to the awaitSubs map to be notified when the promise is resolved
73
- dep._awaitSubs.set(ref, edge);
74
-
75
- state = SignalState.Pending;
76
- signal.dirtyHead = edge;
77
-
78
- // Early return to prevent the signal from being computed and to preserve the dirty state
79
- return signal.updatedCount;
80
- }
81
-
82
- edge = edge.nextDirty;
83
- continue;
84
- }
85
-
86
- const dep = edge.dep;
87
- const updatedAt = checkSignal(dep);
88
-
89
- dep.subs.set(ref, edge);
90
-
91
- if (edge.updatedAt !== updatedAt) {
92
- signal.dirtyHead = edge.nextDirty;
93
- state = SignalState.Dirty;
94
- break;
95
- }
96
-
97
- edge = edge.nextDirty;
98
- }
99
- }
100
-
101
- if (state === SignalState.Dirty) {
102
- runSignal(signal);
103
- }
104
-
105
- signal._state = SignalState.Clean;
106
- signal.dirtyHead = undefined;
107
-
108
- if (TRACER !== undefined && signal.tracerMeta?.tracer) {
109
- scheduleTracer(signal.tracerMeta.tracer);
110
- }
111
-
112
- return signal.updatedCount;
113
- }
114
-
115
- export function runSignal(signal: DerivedSignal<any, any[]>) {
116
- TRACER?.emit({
117
- type: TracerEventType.StartUpdate,
118
- id: signal.tracerMeta!.id,
119
- });
120
-
121
- const prevConsumer = CURRENT_CONSUMER;
122
-
123
- const updatedCount = signal.updatedCount;
124
- const computedCount = ++signal.computedCount;
125
-
126
- try {
127
- CURRENT_CONSUMER = signal;
128
-
129
- const initialized = updatedCount !== 0;
130
- const prevValue = signal.value;
131
- let nextValue = signal.def.compute(...signal.args);
132
- let valueIsPromise = false;
133
-
134
- if (nextValue !== null && typeof nextValue === 'object') {
135
- if (isGeneratorResult(nextValue)) {
136
- nextValue = generatorResultToPromise(nextValue, signal);
137
- valueIsPromise = true;
138
- } else if (isPromise(nextValue)) {
139
- valueIsPromise = true;
140
- }
141
- }
142
-
143
- if (valueIsPromise) {
144
- if (TRACER !== undefined) {
145
- TRACER.emit({
146
- type: TracerEventType.StartLoading,
147
- id: signal.tracerMeta!.id,
148
- });
149
-
150
- nextValue.finally(() => {
151
- TRACER!.emit({
152
- type: TracerEventType.EndLoading,
153
- id: signal.tracerMeta!.id,
154
- value: signal.value,
155
- });
156
- });
157
- }
158
-
159
- TRACER?.emit({
160
- type: TracerEventType.StartLoading,
161
- id: signal.tracerMeta!.id,
162
- });
163
-
164
- if (prevValue !== null && typeof prevValue === 'object' && isReactivePromise(prevValue)) {
165
- // Update the ReactivePromise with the new promise. Since the value
166
- // returned from the function is the same ReactivePromise instance,
167
- // we don't need to increment the updatedCount, because the returned
168
- // value is the same. _setPromise will update the nested values on the
169
- // ReactivePromise instance, and consumers of those values will be notified
170
- // of the change through that.
171
- prevValue._setPromise(nextValue);
172
- } else {
173
- // If the signal has not been computed yet, we then the initValue was assigned
174
- // in the constructor. Otherwise, we don't know what the initial value was, so
175
- // we don't pass it to the ReactivePromise constructor.
176
- const initValue = !initialized ? prevValue : undefined;
177
- signal.value = ReactivePromise.createPromise(nextValue, signal, initValue);
178
- signal.updatedCount = updatedCount + 1;
179
- }
180
- } else if (!initialized || !signal.def.equals(prevValue!, nextValue)) {
181
- signal.value = nextValue;
182
- signal.updatedCount = updatedCount + 1;
183
- }
184
- } finally {
185
- CURRENT_CONSUMER = prevConsumer;
186
-
187
- TRACER?.emit({
188
- type: TracerEventType.EndUpdate,
189
- id: signal.tracerMeta!.id,
190
- value: signal.value,
191
- });
192
-
193
- const { ref, deps } = signal;
194
-
195
- for (const [dep, edge] of deps) {
196
- if (edge.consumedAt !== computedCount) {
197
- scheduleUnwatch(dep);
198
- dep.subs.delete(ref);
199
- deps.delete(dep);
200
-
201
- TRACER?.emit({
202
- type: TracerEventType.Disconnected,
203
- id: signal.tracerMeta!.id,
204
- childId: dep.tracerMeta!.id,
205
- });
206
- }
207
- }
208
- }
209
- }
210
-
211
- export function checkAndRunListeners(signal: DerivedSignal<any, any>, willWatch = false) {
212
- const listeners = signal.listeners;
213
-
214
- if (willWatch && (listeners === null || listeners.current.size === 0)) {
215
- signal.watchCount++;
216
- signal['flags'] |= SignalFlags.isListener;
217
- }
218
-
219
- let updatedCount = checkSignal(signal);
220
-
221
- if (listeners !== null && listeners.updatedAt !== updatedCount) {
222
- listeners.updatedAt = updatedCount;
223
-
224
- scheduleListeners(signal);
225
- }
226
-
227
- return updatedCount;
228
- }
229
-
230
- export function callback<T, Args extends unknown[]>(fn: (...args: Args) => T): (...args: Args) => T {
231
- const savedConsumer = CURRENT_CONSUMER;
232
-
233
- return (...args) => {
234
- const prevConsumer = CURRENT_CONSUMER;
235
- CURRENT_CONSUMER = savedConsumer;
236
-
237
- try {
238
- const result = fn(...args);
239
-
240
- if (result !== null && typeof result === 'object' && isGeneratorResult(result)) {
241
- return generatorResultToPromise(result, savedConsumer) as T;
242
- }
243
-
244
- return result;
245
- } finally {
246
- CURRENT_CONSUMER = prevConsumer;
247
- }
248
- };
249
- }
250
-
251
- export function generatorResultToPromise<T, Args extends unknown[]>(
252
- generator: Generator<any, T>,
253
- savedConsumer: DerivedSignal<any, any> | undefined,
254
- ): Promise<T> {
255
- function adopt(value: any) {
256
- return typeof value === 'object' && value !== null && (isPromise(value) || isReactivePromise(value))
257
- ? value
258
- : Promise.resolve(value);
259
- }
260
-
261
- return new Promise((resolve, reject) => {
262
- function step(result: any) {
263
- if (result.done) {
264
- resolve(result.value);
265
- } else {
266
- adopt(result.value).then(fulfilled, rejected);
267
- }
268
- }
269
-
270
- function fulfilled(value: any) {
271
- const prevConsumer = CURRENT_CONSUMER;
272
-
273
- try {
274
- CURRENT_CONSUMER = savedConsumer;
275
- step(generator.next(value));
276
- } catch (e) {
277
- reject(e);
278
- } finally {
279
- CURRENT_CONSUMER = prevConsumer;
280
- }
281
- }
282
-
283
- function rejected(value: any) {
284
- const prevConsumer = CURRENT_CONSUMER;
285
-
286
- try {
287
- CURRENT_CONSUMER = savedConsumer;
288
- step(generator['throw'](value));
289
- } catch (e) {
290
- reject(e);
291
- } finally {
292
- CURRENT_CONSUMER = prevConsumer;
293
- }
294
- }
295
-
296
- step(generator.next());
297
- });
298
- }
@@ -1,160 +0,0 @@
1
- import { scheduleFlush as _scheduleFlush, runBatch } from '../config.js';
2
- import { DerivedSignal } from './derived.js';
3
- import { checkAndRunListeners, checkSignal } from './get.js';
4
- import { runListeners as runDerivedListeners } from './derived.js';
5
- import { runListeners as runStateListeners } from './state.js';
6
- import { Tracer } from '../trace.js';
7
- import { unwatchSignal } from './connect.js';
8
- import { StateSignal } from './state.js';
9
- import { ROOT_SCOPE, SignalScope } from './contexts.js';
10
-
11
- // Determine once at startup which scheduling function to use for GC
12
- const scheduleIdleCallback =
13
- typeof requestIdleCallback === 'function' ? requestIdleCallback : (cb: () => void) => _scheduleFlush(cb);
14
-
15
- let PROMISE_WAS_RESOLVED = false;
16
-
17
- let PENDING_PULLS: DerivedSignal<any, any>[] = [];
18
- let PENDING_ASYNC_PULLS: DerivedSignal<any, any>[] = [];
19
- let PENDING_UNWATCH = new Map<DerivedSignal<any, any>, number>();
20
- let PENDING_LISTENERS: (DerivedSignal<any, any> | StateSignal<any>)[] = [];
21
- let PENDING_TRACERS: Tracer[] = [];
22
- let PENDING_GC = new Set<SignalScope>();
23
-
24
- const microtask = () => Promise.resolve();
25
-
26
- let currentFlush: { promise: Promise<void>; resolve: () => void } | null = null;
27
-
28
- const scheduleFlush = (fn: () => void) => {
29
- if (currentFlush) return;
30
-
31
- let resolve: () => void;
32
- const promise = new Promise<void>(r => (resolve = r));
33
-
34
- currentFlush = { promise, resolve: resolve! };
35
-
36
- _scheduleFlush(flushWatchers);
37
- };
38
-
39
- export const setResolved = () => {
40
- PROMISE_WAS_RESOLVED = true;
41
- };
42
-
43
- export const schedulePull = (signal: DerivedSignal<any, any>) => {
44
- PENDING_PULLS.push(signal);
45
- scheduleFlush(flushWatchers);
46
- };
47
-
48
- export const scheduleAsyncPull = (signal: DerivedSignal<any, any>) => {
49
- PENDING_ASYNC_PULLS.push(signal);
50
- scheduleFlush(flushWatchers);
51
- };
52
-
53
- export const scheduleUnwatch = (unwatch: DerivedSignal<any, any>) => {
54
- const current = PENDING_UNWATCH.get(unwatch) ?? 0;
55
-
56
- PENDING_UNWATCH.set(unwatch, current + 1);
57
-
58
- scheduleFlush(flushWatchers);
59
- };
60
-
61
- export const scheduleListeners = (signal: DerivedSignal<any, any> | StateSignal<any>) => {
62
- PENDING_LISTENERS.push(signal);
63
- scheduleFlush(flushWatchers);
64
- };
65
-
66
- export const scheduleTracer = (tracer: Tracer) => {
67
- PENDING_TRACERS.push(tracer);
68
- scheduleFlush(flushWatchers);
69
- };
70
-
71
- export const scheduleGcSweep = (scope: SignalScope) => {
72
- PENDING_GC.add(scope);
73
-
74
- if (PENDING_GC.size > 1) return;
75
-
76
- scheduleIdleCallback(() => {
77
- for (const scope of PENDING_GC) {
78
- scope.sweepGc();
79
- }
80
-
81
- PENDING_GC.clear();
82
- });
83
- };
84
-
85
- const flushWatchers = async () => {
86
- const flush = currentFlush!;
87
-
88
- // Flush all auto-pulled signals recursively, clearing
89
- // the microtask queue until they are all settled
90
- while (PROMISE_WAS_RESOLVED || PENDING_ASYNC_PULLS.length > 0 || PENDING_PULLS.length > 0) {
91
- PROMISE_WAS_RESOLVED = false;
92
- const asyncPulls = PENDING_ASYNC_PULLS;
93
-
94
- PENDING_ASYNC_PULLS = [];
95
-
96
- for (const pull of asyncPulls) {
97
- checkSignal(pull);
98
- }
99
-
100
- const pulls = PENDING_PULLS;
101
-
102
- PENDING_PULLS = [];
103
-
104
- for (const pull of pulls) {
105
- checkAndRunListeners(pull);
106
- }
107
-
108
- // This is used to tell the scheduler to wait if any async values have been resolved
109
- // since the last tick. If they have, we wait an extra microtask to ensure that the
110
- // async values have recursivey flushed before moving on to pulling watchers.
111
-
112
- await microtask();
113
- }
114
-
115
- // Clear the flush so that if any more watchers are scheduled,
116
- // they will be flushed in the next tick
117
- currentFlush = null;
118
-
119
- runBatch(() => {
120
- for (const [signal, count] of PENDING_UNWATCH) {
121
- unwatchSignal(signal, count);
122
- }
123
-
124
- for (const signal of PENDING_LISTENERS) {
125
- if (signal instanceof DerivedSignal) {
126
- runDerivedListeners(signal as any);
127
- } else {
128
- runStateListeners(signal as any);
129
- }
130
- }
131
-
132
- for (const tracer of PENDING_TRACERS) {
133
- tracer.flush();
134
- }
135
-
136
- PENDING_UNWATCH.clear();
137
- PENDING_LISTENERS = [];
138
- PENDING_TRACERS = [];
139
- });
140
-
141
- // resolve the flush promise
142
- flush.resolve();
143
- };
144
-
145
- export const settled = async () => {
146
- while (currentFlush) {
147
- await currentFlush.promise;
148
- }
149
- };
150
-
151
- export const batch = (fn: () => void) => {
152
- let resolve: () => void;
153
- const promise = new Promise<void>(r => (resolve = r));
154
-
155
- currentFlush = { promise, resolve: resolve! };
156
-
157
- fn();
158
- flushWatchers();
159
- // flushDisconnects();
160
- };
@@ -1,111 +0,0 @@
1
- import { TRACER as TRACER, TracerEventType } from '../trace.js';
2
- import { SignalEquals, SignalListener, SignalOptions, StateSignal as IStateSignal } from '../types.js';
3
- import { DerivedSignal } from './derived.js';
4
- import { dirtySignal } from './dirty.js';
5
- import { CURRENT_CONSUMER } from './get.js';
6
- import { useStateSignal } from '../config.js';
7
- import { scheduleListeners } from './scheduling.js';
8
-
9
- let STATE_ID = 0;
10
-
11
- export class StateSignal<T> implements IStateSignal<T> {
12
- private _value: T;
13
- private _equals: SignalEquals<T>;
14
- private _subs = new Map<WeakRef<DerivedSignal<unknown, unknown[]>>, number>();
15
- _desc: string;
16
- _id: number;
17
-
18
- private _listeners: Set<SignalListener> | null = null;
19
-
20
- constructor(value: T, equals: SignalEquals<T> = (a, b) => a === b, desc: string = 'state') {
21
- this._value = value;
22
- this._equals = equals;
23
- this._id = STATE_ID++;
24
- this._desc = `${desc}${this._id}`;
25
- }
26
-
27
- get(): T {
28
- if (CURRENT_CONSUMER !== undefined) {
29
- TRACER?.emit({
30
- type: TracerEventType.ConsumeState,
31
- id: CURRENT_CONSUMER.tracerMeta!.id,
32
- childId: this._id,
33
- value: this._value,
34
- setValue: (value: unknown) => {
35
- this.set(value as T);
36
- },
37
- });
38
- this._subs.set(CURRENT_CONSUMER.ref, CURRENT_CONSUMER.computedCount);
39
- return this._value!;
40
- }
41
-
42
- // eslint-disable-next-line react-hooks/rules-of-hooks
43
- return useStateSignal(this);
44
- }
45
-
46
- update(fn: (value: T) => T) {
47
- this.set(fn(this._value));
48
- }
49
-
50
- peek(): T {
51
- return this._value;
52
- }
53
-
54
- set(value: T) {
55
- if (this._equals(value, this._value)) {
56
- return;
57
- }
58
-
59
- this._value = value;
60
- const { _subs: subs, _listeners: listeners } = this;
61
-
62
- for (const [subRef, consumedAt] of subs.entries()) {
63
- const sub = subRef.deref();
64
-
65
- if (sub === undefined || consumedAt !== sub.computedCount) {
66
- continue;
67
- }
68
-
69
- dirtySignal(sub);
70
- }
71
-
72
- this._subs = new Map();
73
-
74
- scheduleListeners(this);
75
- }
76
-
77
- addListener(listener: SignalListener): () => void {
78
- let listeners = this._listeners;
79
-
80
- if (listeners === null) {
81
- this._listeners = listeners = new Set();
82
- }
83
-
84
- listeners.add(listener);
85
-
86
- return () => listeners.delete(listener);
87
- }
88
- }
89
-
90
- export function runListeners(signal: StateSignal<any>) {
91
- const listeners = signal['_listeners'];
92
-
93
- if (listeners === null) {
94
- return;
95
- }
96
-
97
- for (const listener of listeners) {
98
- listener();
99
- }
100
- }
101
-
102
- const FALSE_EQUALS: SignalEquals<unknown> = () => false;
103
-
104
- export function createStateSignal<T>(
105
- initialValue: T,
106
- opts?: Omit<SignalOptions<T, unknown[]>, 'paramKey'>,
107
- ): StateSignal<T> {
108
- const equals = opts?.equals === false ? FALSE_EQUALS : (opts?.equals ?? ((a, b) => a === b));
109
-
110
- return new StateSignal(initialValue, equals, opts?.desc);
111
- }
@@ -1,14 +0,0 @@
1
- let UNKNOWN_SIGNAL_ID = 0;
2
- const UNKNOWN_SIGNAL_NAMES = new Map<object, string>();
3
-
4
- export function getUnknownSignalFnName(fn: object) {
5
- let name = UNKNOWN_SIGNAL_NAMES.get(fn);
6
-
7
- if (name === undefined) {
8
- name = `unknownSignal${UNKNOWN_SIGNAL_ID++}`;
9
-
10
- UNKNOWN_SIGNAL_NAMES.set(fn, name);
11
- }
12
-
13
- return name;
14
- }
@@ -1,12 +0,0 @@
1
- import { SignalEquals } from '../../types.js';
2
-
3
- export const DEFAULT_EQUALS: SignalEquals<unknown> = (a, b) => a === b;
4
- export const FALSE_EQUALS: SignalEquals<unknown> = () => false;
5
-
6
- export const equalsFrom = <T>(equals: SignalEquals<T> | false | undefined): SignalEquals<T> => {
7
- if (equals === false) {
8
- return FALSE_EQUALS;
9
- }
10
-
11
- return equals ?? DEFAULT_EQUALS;
12
- };