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
package/src/trace.ts DELETED
@@ -1,454 +0,0 @@
1
- import { scheduleTracer } from './internals/scheduling.js';
2
- import { DerivedSignal, SignalId } from './internals/derived.js';
3
- import { Signal } from './types.js';
4
-
5
- export let TRACER: TracerProxy | undefined;
6
-
7
- export interface VisualizerLink {
8
- connected: boolean;
9
- version: number;
10
- node: VisualizerNode;
11
- }
12
-
13
- export interface TracerMeta {
14
- id: string | number;
15
- desc: string;
16
- params: string;
17
- tracer?: Tracer;
18
- }
19
-
20
- export enum TracerEventType {
21
- StartUpdate = 'StartUpdate',
22
- EndUpdate = 'EndUpdate',
23
- StartLoading = 'StartLoading',
24
- EndLoading = 'EndLoading',
25
-
26
- Connected = 'Connected',
27
- Disconnected = 'Disconnected',
28
-
29
- ConsumeState = 'ConsumeState',
30
- }
31
-
32
- type StartUpdateEvent = {
33
- type: TracerEventType.StartUpdate;
34
- id: string | number;
35
- };
36
-
37
- type EndUpdateEvent = {
38
- type: TracerEventType.EndUpdate;
39
- id: string | number;
40
- value: unknown;
41
- preserveChildren?: boolean;
42
- };
43
-
44
- type StartLoadingEvent = {
45
- type: TracerEventType.StartLoading;
46
- id: string | number;
47
- };
48
-
49
- type EndLoadingEvent = {
50
- type: TracerEventType.EndLoading;
51
- id: string | number;
52
- value: unknown;
53
- };
54
-
55
- type ConnectedEvent = {
56
- type: TracerEventType.Connected;
57
- id: string | number;
58
- childId: string | number;
59
- nodeType: SignalType;
60
- name?: string;
61
- params?: string;
62
- };
63
-
64
- type DisconnectedEvent = {
65
- type: TracerEventType.Disconnected;
66
- id: string | number;
67
- childId: string | number;
68
- };
69
-
70
- type ConsumeStateEvent = {
71
- type: TracerEventType.ConsumeState;
72
- id: string | number;
73
- childId: string | number;
74
- value: unknown;
75
- setValue: (value: unknown) => void;
76
- };
77
-
78
- type TracerEvent =
79
- | StartUpdateEvent
80
- | EndUpdateEvent
81
- | StartLoadingEvent
82
- | EndLoadingEvent
83
- | ConnectedEvent
84
- | DisconnectedEvent
85
- | ConsumeStateEvent;
86
-
87
- export enum SignalType {
88
- State = 'state',
89
- Reactive = 'reactive',
90
- Watcher = 'watcher',
91
- }
92
-
93
- export class VisualizerNode {
94
- private subscribers: (() => void)[] = [];
95
-
96
- private nextStateChildren: VisualizerNode[] = [];
97
-
98
- public stateChildren: VisualizerNode[] = [];
99
- public children: VisualizerLink[] = [];
100
- public updating = true;
101
- public loading = false;
102
- public version = 0;
103
-
104
- private updatingVersion = 0;
105
- private didConnect = false;
106
-
107
- constructor(
108
- private tracer: Tracer,
109
- public depth: number,
110
- public type: SignalType,
111
- public id: string | number,
112
- public value: unknown,
113
- public name?: string,
114
- public params?: string,
115
- private _setValue?: (value: unknown) => void,
116
- ) {
117
- this.tracer.maxDepth = Math.max(this.tracer.maxDepth, this.depth);
118
- }
119
-
120
- get showParams() {
121
- return this.tracer.showParams;
122
- }
123
-
124
- get showValue() {
125
- return this.tracer.showValue;
126
- }
127
-
128
- get interactive() {
129
- return this.tracer.interactive;
130
- }
131
-
132
- setValue(value: unknown) {
133
- if (this.type !== SignalType.State) {
134
- throw new Error('setValue is only allowed on state nodes');
135
- }
136
-
137
- this._setValue?.(value);
138
- this.notify();
139
- scheduleTracer(this.tracer);
140
- }
141
-
142
- connectChild(child: VisualizerNode): boolean {
143
- let childLink = this.children.find(
144
- link => link.node.id === child.id || (link.node.name === child.name && link.version !== this.updatingVersion),
145
- );
146
-
147
- let shouldSkip = false;
148
-
149
- if (childLink) {
150
- if (!child.didConnect) {
151
- child.value = childLink.node.value;
152
- child.children = childLink.node.children.map(link => ({
153
- ...link,
154
- version: child.version,
155
- }));
156
- }
157
-
158
- childLink.node = child;
159
- childLink.connected = true;
160
- childLink.version = this.updatingVersion;
161
- shouldSkip = true;
162
- } else {
163
- this.children.push({
164
- connected: true,
165
- node: child,
166
- version: this.updatingVersion,
167
- });
168
- }
169
-
170
- child.didConnect = true;
171
- this.notify();
172
-
173
- return shouldSkip;
174
- }
175
-
176
- disconnectChild(childId: string | number) {
177
- const childLink = this.children.find(link => link.node.id === childId);
178
-
179
- if (!childLink) {
180
- return;
181
- }
182
-
183
- childLink.connected = false;
184
-
185
- this.notify();
186
- }
187
-
188
- startUpdate() {
189
- this.updating = true;
190
- this.updatingVersion++;
191
-
192
- this.notify();
193
- }
194
-
195
- endUpdate(value: unknown, preserveChildren = false) {
196
- this.updating = false;
197
- this.value = value;
198
- if (!preserveChildren) {
199
- this.stateChildren = this.nextStateChildren;
200
- }
201
- this.nextStateChildren = [];
202
- this.notify();
203
- }
204
-
205
- startLoading() {
206
- this.loading = true;
207
- this.notify();
208
- }
209
-
210
- endLoading(value: unknown) {
211
- this.loading = false;
212
- this.value = value;
213
- this.notify();
214
- }
215
-
216
- consumeState(id: string | number, value: unknown, setValue: (value: unknown) => void) {
217
- const existing = this.stateChildren.find(child => child.id === id);
218
-
219
- if (existing) {
220
- existing.value = value;
221
- this.nextStateChildren.push(existing);
222
- existing.notify();
223
- } else {
224
- const node = new VisualizerNode(
225
- this.tracer,
226
- this.depth + 1,
227
- SignalType.State,
228
- id,
229
- value,
230
- undefined,
231
- undefined,
232
- setValue,
233
- );
234
- node.updating = false;
235
- this.nextStateChildren.push(node);
236
- }
237
- }
238
-
239
- notify() {
240
- this.version++;
241
- for (const subscriber of this.subscribers) {
242
- subscriber();
243
- }
244
- }
245
-
246
- subscribe(subscriber: () => void) {
247
- this.subscribers.push(subscriber);
248
-
249
- return () => {
250
- this.subscribers = this.subscribers.filter(s => s !== subscriber);
251
- };
252
- }
253
- }
254
-
255
- let ID = 0;
256
-
257
- class TraceFlush {
258
- private forceComplete = false;
259
- public promise: Promise<void>;
260
- public id = ID++;
261
- constructor(tracer: Tracer, queue: TracerEvent[], previousFlush?: TraceFlush) {
262
- this.promise = this.runFlush(tracer, queue, previousFlush);
263
- }
264
-
265
- complete() {
266
- this.forceComplete = true;
267
- return this.promise;
268
- }
269
-
270
- private async runFlush(tracer: Tracer, queue: TracerEvent[], previousFlush?: TraceFlush) {
271
- if (previousFlush) {
272
- await previousFlush.complete();
273
- }
274
-
275
- for (let i = 0; i < queue.length; i++) {
276
- const event = queue[i];
277
- const nextEvent = queue[i + 1];
278
-
279
- const skipDelay = tracer.handleEvent(event, nextEvent);
280
-
281
- if (!this.forceComplete && !skipDelay && tracer.delay > 0 && !document.hidden) {
282
- await new Promise(resolve => setTimeout(resolve, tracer.delay));
283
- }
284
- }
285
- }
286
- }
287
-
288
- export class Tracer {
289
- private nodeMap = new Map<string | number, VisualizerNode>();
290
-
291
- delay = 200;
292
- maxDepth = 0;
293
-
294
- private initialized = false;
295
-
296
- constructor(
297
- id: string | number,
298
- immediate = false,
299
- public showParams = true,
300
- public showValue = true,
301
- public interactive = true,
302
- ) {
303
- // If it's immediate, we should run the first flush immediately, skipping animations
304
- this.initialized = !immediate;
305
-
306
- const node = new VisualizerNode(this, 0, SignalType.Watcher, id, '');
307
-
308
- this.rootNode = node;
309
- this.nodeMap.set(id, node);
310
- }
311
-
312
- public rootNode: VisualizerNode;
313
-
314
- private eventQueue: TracerEvent[] = [];
315
- private currentFlush: TraceFlush | undefined;
316
-
317
- emit(event: TracerEvent) {
318
- if (event.type === TracerEventType.Connected || event.type === TracerEventType.ConsumeState) {
319
- const node = this.nodeMap.get(event.id);
320
-
321
- if (!node || (event.type === TracerEventType.Connected && !event.name)) {
322
- return;
323
- }
324
-
325
- if (!this.nodeMap.has(event.childId)) {
326
- const name = event.type === TracerEventType.Connected ? event.name : undefined;
327
- const params = event.type === TracerEventType.Connected ? event.params : undefined;
328
- const nodeType = event.type === TracerEventType.Connected ? event.nodeType : SignalType.State;
329
-
330
- this.nodeMap.set(
331
- event.childId,
332
- new VisualizerNode(this, node.depth + 1, nodeType, event.childId, '', name, params),
333
- );
334
- }
335
- }
336
-
337
- if (this.initialized) {
338
- this.eventQueue.push(event);
339
- } else {
340
- this.handleEvent(event);
341
- }
342
- }
343
-
344
- handleEvent(event: TracerEvent, nextEvent?: TracerEvent) {
345
- const node = this.nodeMap.get(event.id);
346
-
347
- if (!node) {
348
- return true;
349
- }
350
-
351
- let skipDelay = nextEvent?.type === TracerEventType.StartLoading;
352
-
353
- if (event.type === TracerEventType.Connected) {
354
- let child = this.nodeMap.get(event.childId);
355
-
356
- if (!child) {
357
- throw new Error(`Child node ${event.childId} not found`);
358
- }
359
-
360
- skipDelay = node.connectChild(child);
361
- } else if (event.type === TracerEventType.Disconnected) {
362
- node.disconnectChild(event.childId);
363
- } else if (event.type === TracerEventType.StartUpdate) {
364
- node.startUpdate();
365
- if (
366
- nextEvent &&
367
- nextEvent.id === event.id &&
368
- (nextEvent.type === TracerEventType.EndUpdate || nextEvent.type === TracerEventType.StartLoading)
369
- ) {
370
- skipDelay = true;
371
- }
372
- } else if (event.type === TracerEventType.EndUpdate) {
373
- node.endUpdate(event.value, event.preserveChildren);
374
- } else if (event.type === TracerEventType.StartLoading) {
375
- node.startLoading();
376
- skipDelay = true;
377
- } else if (event.type === TracerEventType.EndLoading) {
378
- node.endLoading(event.value);
379
- } else if (event.type === TracerEventType.ConsumeState) {
380
- node.consumeState(event.childId, event.value, event.setValue);
381
- }
382
-
383
- return skipDelay;
384
- }
385
-
386
- async flush() {
387
- if (this.eventQueue.length === 0) {
388
- return;
389
- }
390
-
391
- this.currentFlush = new TraceFlush(this, this.eventQueue, this.currentFlush);
392
- this.eventQueue = [];
393
- }
394
-
395
- addListener(listener: () => void) {
396
- this.initialized = true;
397
- return this.rootNode.subscribe(listener);
398
- }
399
- }
400
-
401
- class TracerProxy {
402
- private tracers: Tracer[] = [];
403
-
404
- constructor() {}
405
-
406
- emit(event: TracerEvent) {
407
- this.tracers.forEach(tracer => tracer.emit(event));
408
- }
409
-
410
- createTracer(id: string | number, immediate = false): Tracer {
411
- const tracer = new Tracer(id, immediate);
412
-
413
- this.tracers.push(tracer);
414
-
415
- return tracer;
416
- }
417
-
418
- removeTracer(tracer: Tracer) {
419
- this.tracers = this.tracers.filter(t => t !== tracer);
420
- }
421
-
422
- flush() {
423
- this.tracers.forEach(tracer => tracer.flush());
424
- }
425
- }
426
-
427
- export function setTracing(enabled: boolean) {
428
- if (enabled) {
429
- TRACER = new TracerProxy();
430
- } else {
431
- TRACER = undefined;
432
- }
433
- }
434
-
435
- export function createTracer(_signal: Signal<unknown>, immediate = false) {
436
- const signal = _signal as unknown as DerivedSignal<unknown, unknown[]>;
437
- return createTracerFromId(signal.tracerMeta!.id, immediate);
438
- }
439
-
440
- export function createTracerFromId(id: string | number, immediate = false) {
441
- if (!TRACER) {
442
- throw new Error('Tracing is not enabled');
443
- }
444
-
445
- return TRACER.createTracer(id, immediate);
446
- }
447
-
448
- export function removeTracer(tracer: Tracer) {
449
- if (!TRACER) {
450
- throw new Error('Tracing is not enabled');
451
- }
452
-
453
- TRACER.removeTracer(tracer);
454
- }
package/src/transform.ts DELETED
@@ -1,113 +0,0 @@
1
- import type { NodePath, PluginObj, types as t } from '@babel/core';
2
-
3
- export interface SignaliumAsyncTransformOptions {
4
- transformedImports: [string, string | RegExp][];
5
- }
6
-
7
- export function signaliumAsyncTransform(opts?: SignaliumAsyncTransformOptions): (api: any) => PluginObj {
8
- const transformedImports: Record<string, [string | RegExp]> = {
9
- callback: ['signalium'],
10
- reactive: ['signalium'],
11
- subscription: ['signalium'],
12
- task: ['signalium'],
13
- };
14
-
15
- for (const [name, path] of opts?.transformedImports ?? []) {
16
- const existing = transformedImports[name];
17
-
18
- if (existing) {
19
- existing.push(path);
20
- } else {
21
- transformedImports[name] = [path];
22
- }
23
- }
24
-
25
- return api => {
26
- const t = api.types;
27
-
28
- const isReactiveCall = (path: any) => {
29
- if (!t.isCallExpression(path.node)) return false;
30
- const callee = path.node.callee;
31
-
32
- const importPath = transformedImports[callee.name];
33
-
34
- if (!importPath) return false;
35
-
36
- // Check if reactive is imported from signalium
37
- const binding = path.scope.getBinding(callee.name);
38
- if (!binding || !t.isImportSpecifier(binding.path.node)) return false;
39
-
40
- const importDecl = binding.path.parent;
41
-
42
- if (!t.isImportDeclaration(importDecl)) return false;
43
-
44
- return importPath.some(p =>
45
- typeof p === 'string' ? importDecl.source.value === p : p.test(importDecl.source.value),
46
- );
47
- };
48
-
49
- function convertReactiveToGenerator(path: NodePath<t.FunctionExpression | t.ArrowFunctionExpression>) {
50
- // Only transform if parent is a reactive() call
51
- const parentPath = path.parentPath;
52
- if (!isReactiveCall(parentPath)) return;
53
- if (!path.node.async) return;
54
-
55
- // Transform all await expressions to yields
56
- path.traverse({
57
- AwaitExpression(awaitPath) {
58
- const funcParent = awaitPath.getFunctionParent();
59
- if (funcParent?.node !== path.node) return;
60
-
61
- awaitPath.replaceWith(t.yieldExpression(awaitPath.node.argument));
62
- },
63
- });
64
-
65
- // Remove async keyword
66
- path.node.async = false;
67
-
68
- if (t.isArrowFunctionExpression(path.node)) {
69
- // Convert arrow function to regular function expression
70
- let hasThis = false;
71
-
72
- // Scan for this keywords
73
- path.traverse({
74
- ThisExpression() {
75
- hasThis = true;
76
- },
77
- });
78
-
79
- const functionBody = t.isBlockStatement(path.node.body)
80
- ? path.node.body
81
- : t.blockStatement([t.returnStatement(path.node.body)]);
82
-
83
- const newFunction = t.functionExpression(
84
- null,
85
- path.node.params,
86
- functionBody,
87
- true, // generator
88
- false, // async
89
- );
90
-
91
- // If we found 'this' usage, wrap in bind call
92
- if (hasThis) {
93
- path.replaceWith(
94
- t.callExpression(t.memberExpression(newFunction, t.identifier('bind')), [t.thisExpression()]),
95
- );
96
- } else {
97
- path.replaceWith(newFunction);
98
- }
99
- } else {
100
- // Regular function - just set generator flag
101
- path.node.generator = true;
102
- }
103
- }
104
-
105
- return {
106
- name: 'transform-reactive-async',
107
- visitor: {
108
- FunctionExpression: convertReactiveToGenerator,
109
- ArrowFunctionExpression: convertReactiveToGenerator,
110
- },
111
- };
112
- };
113
- }
package/src/types.ts DELETED
@@ -1,115 +0,0 @@
1
- import { SignalScope } from './internals/contexts.js';
2
-
3
- export interface Signal<T = unknown> {
4
- get(): T;
5
- addListener(listener: SignalListener): () => void;
6
- }
7
-
8
- export interface StateSignal<T> extends Signal<T> {
9
- set(value: T): void;
10
- peek(): T;
11
- update(updater: (value: T) => T): void;
12
- }
13
-
14
- /**
15
- * @deprecated Use `StateSignal` instead.
16
- */
17
- export type WriteableSignal<T> = StateSignal<T>;
18
-
19
- export type SignalEquals<T> = (prev: T, next: T) => boolean;
20
-
21
- export type SignalListener = () => void;
22
-
23
- export type SignalSubscription = {
24
- update?(): void;
25
- unsubscribe?(): void;
26
- };
27
-
28
- export interface SubscriptionState<T> {
29
- get: () => T | undefined;
30
- set: (value: T | Promise<T>) => void;
31
- setError: (error: unknown) => void;
32
- }
33
-
34
- export type SignalSubscribe<T> = (
35
- state: SubscriptionState<T>,
36
- ) => SignalSubscription | (() => unknown) | undefined | void;
37
-
38
- export interface SignalOptions<T, Args extends unknown[]> {
39
- equals?: SignalEquals<T> | false;
40
- id?: string;
41
- desc?: string;
42
- scope?: SignalScope;
43
- paramKey?: (...args: Args) => string;
44
-
45
- /**
46
- * Called when signal's watchCount reaches 0.
47
- * Return `true` to allow GC, `false` to prevent it.
48
- * If not provided, defaults to always allowing GC.
49
- */
50
- shouldGC?: (signal: object, value: T, args: Args) => boolean;
51
- }
52
-
53
- export interface SignalOptionsWithInit<T, Args extends unknown[]> extends SignalOptions<T, Args> {
54
- initValue: T extends Promise<infer U> ? U : T extends Generator<any, infer U, any> ? U : T;
55
- }
56
-
57
- export interface Thenable<T> {
58
- then(onfulfilled?: (value: T) => void, onrejected?: (reason: unknown) => void): void;
59
- finally: any;
60
- catch: any;
61
- [Symbol.toStringTag]: string;
62
- }
63
-
64
- export interface BaseReactivePromise<T> extends Promise<T> {
65
- value: T | undefined;
66
- error: unknown;
67
-
68
- isPending: boolean;
69
- isRejected: boolean;
70
- isResolved: boolean;
71
- isSettled: boolean;
72
- isReady: boolean;
73
-
74
- rerun(): void;
75
- }
76
-
77
- export interface PendingReactivePromise<T> extends BaseReactivePromise<T> {
78
- value: undefined;
79
- isReady: false;
80
- }
81
-
82
- export interface ReadyReactivePromise<T> extends BaseReactivePromise<T> {
83
- value: T;
84
- isReady: true;
85
- }
86
-
87
- export type ReactivePromise<T> = PendingReactivePromise<T> | ReadyReactivePromise<T>;
88
-
89
- export type ReactiveTask<T, Args extends unknown[]> = Omit<ReactivePromise<T>, 'notify'> & {
90
- run(...args: Args): ReactivePromise<T>;
91
- };
92
-
93
- export type ReactiveSubscription<T> = Omit<ReactivePromise<T>, 'rerun'>;
94
-
95
- export type ReactiveValue<T> =
96
- // We have to first check if T is a ReactiveTask, because it will also match Promise<T>
97
- T extends ReactiveTask<infer U, infer Args>
98
- ? ReactiveTask<U, Args>
99
- : T extends Promise<infer U>
100
- ? ReactivePromise<U>
101
- : T extends Generator<any, infer U>
102
- ? ReactivePromise<U>
103
- : T;
104
-
105
- // This type is used when initial values are provided to async functions and
106
- // subscriptions. It allows us to skip checking `isReady` when there is always
107
- // a guaranteed value to return.
108
- export type ReadyReactiveValue<T> =
109
- T extends ReactiveTask<infer U, infer Args>
110
- ? ReactiveTask<U, Args>
111
- : T extends Promise<infer U>
112
- ? ReadyReactivePromise<U>
113
- : T extends Generator<any, infer U>
114
- ? ReadyReactivePromise<U>
115
- : T;
package/src/weakref.ts DELETED
@@ -1,9 +0,0 @@
1
- class WeakRefPolyfill<T extends WeakKey> {
2
- constructor(private value: T) {}
3
-
4
- deref(): T {
5
- return this.value;
6
- }
7
- }
8
-
9
- export default typeof WeakRef === 'function' ? WeakRef : (WeakRefPolyfill as unknown as WeakRefConstructor);
package/tsconfig.json DELETED
@@ -1,13 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
- "compilerOptions": {
4
- "outDir": "dist/esm",
5
- "rootDir": "src",
6
- "declaration": true,
7
- "declarationMap": true,
8
- "sourceMap": true,
9
- "jsx": "react-jsx"
10
- },
11
- "include": ["src"],
12
- "exclude": ["**/__tests__"]
13
- }