signalium 1.2.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/{build/transform.js → config.js} +1 -5
  3. package/{build/react.js → debug.js} +1 -5
  4. package/dist/cjs/config.d.ts +1 -21
  5. package/dist/cjs/config.d.ts.map +1 -1
  6. package/dist/cjs/config.js +3 -36
  7. package/dist/cjs/config.js.map +1 -1
  8. package/dist/cjs/debug.d.ts +1 -1
  9. package/dist/cjs/debug.d.ts.map +1 -1
  10. package/dist/cjs/debug.js +1 -1
  11. package/dist/cjs/debug.js.map +1 -1
  12. package/dist/cjs/index.d.ts +5 -6
  13. package/dist/cjs/index.d.ts.map +1 -1
  14. package/dist/cjs/index.js +17 -22
  15. package/dist/cjs/index.js.map +1 -1
  16. package/dist/cjs/internals/async.d.ts +24 -19
  17. package/dist/cjs/internals/async.d.ts.map +1 -1
  18. package/dist/cjs/internals/async.js +264 -137
  19. package/dist/cjs/internals/async.js.map +1 -1
  20. package/dist/cjs/internals/callback.d.ts +13 -0
  21. package/dist/cjs/internals/callback.d.ts.map +1 -0
  22. package/dist/cjs/internals/callback.js +73 -0
  23. package/dist/cjs/internals/callback.js.map +1 -0
  24. package/dist/cjs/internals/config.d.ts +7 -0
  25. package/dist/cjs/internals/config.d.ts.map +1 -0
  26. package/dist/cjs/internals/config.js +17 -0
  27. package/dist/cjs/internals/config.js.map +1 -0
  28. package/dist/cjs/internals/consumer.d.ts +3 -3
  29. package/dist/cjs/internals/consumer.d.ts.map +1 -1
  30. package/dist/cjs/internals/consumer.js.map +1 -1
  31. package/dist/cjs/internals/contexts.d.ts +16 -15
  32. package/dist/cjs/internals/contexts.d.ts.map +1 -1
  33. package/dist/cjs/internals/contexts.js +58 -56
  34. package/dist/cjs/internals/contexts.js.map +1 -1
  35. package/dist/cjs/internals/core-api.d.ts +15 -0
  36. package/dist/cjs/internals/core-api.d.ts.map +1 -0
  37. package/dist/cjs/internals/core-api.js +83 -0
  38. package/dist/cjs/internals/core-api.js.map +1 -0
  39. package/dist/cjs/internals/dirty.d.ts +3 -3
  40. package/dist/cjs/internals/dirty.d.ts.map +1 -1
  41. package/dist/cjs/internals/dirty.js +13 -13
  42. package/dist/cjs/internals/dirty.js.map +1 -1
  43. package/dist/cjs/internals/edge.d.ts +5 -5
  44. package/dist/cjs/internals/edge.d.ts.map +1 -1
  45. package/dist/cjs/internals/edge.js.map +1 -1
  46. package/dist/cjs/internals/generators.d.ts +5 -0
  47. package/dist/cjs/internals/generators.d.ts.map +1 -0
  48. package/dist/cjs/internals/generators.js +83 -0
  49. package/dist/cjs/internals/generators.js.map +1 -0
  50. package/dist/cjs/internals/get.d.ts +5 -8
  51. package/dist/cjs/internals/get.d.ts.map +1 -1
  52. package/dist/cjs/internals/get.js +48 -107
  53. package/dist/cjs/internals/get.js.map +1 -1
  54. package/dist/cjs/internals/reactive.d.ts +77 -0
  55. package/dist/cjs/internals/reactive.d.ts.map +1 -0
  56. package/dist/cjs/internals/{derived.js → reactive.js} +45 -33
  57. package/dist/cjs/internals/reactive.js.map +1 -0
  58. package/dist/cjs/internals/scheduling.d.ts +7 -7
  59. package/dist/cjs/internals/scheduling.d.ts.map +1 -1
  60. package/dist/cjs/internals/scheduling.js +9 -9
  61. package/dist/cjs/internals/scheduling.js.map +1 -1
  62. package/dist/cjs/internals/signal.d.ts +20 -0
  63. package/dist/cjs/internals/signal.d.ts.map +1 -0
  64. package/dist/cjs/internals/{state.js → signal.js} +31 -27
  65. package/dist/cjs/internals/signal.js.map +1 -0
  66. package/dist/{esm → cjs/internals}/trace.d.ts +1 -1
  67. package/dist/cjs/internals/trace.d.ts.map +1 -0
  68. package/dist/cjs/{trace.js → internals/trace.js} +1 -1
  69. package/dist/cjs/internals/trace.js.map +1 -0
  70. package/dist/cjs/internals/utils/equals.d.ts +4 -4
  71. package/dist/cjs/internals/utils/equals.d.ts.map +1 -1
  72. package/dist/cjs/internals/utils/equals.js.map +1 -1
  73. package/dist/cjs/internals/utils/type-utils.d.ts +0 -2
  74. package/dist/cjs/internals/utils/type-utils.d.ts.map +1 -1
  75. package/dist/cjs/internals/utils/type-utils.js +0 -5
  76. package/dist/cjs/internals/utils/type-utils.js.map +1 -1
  77. package/dist/cjs/internals/watch.d.ts +4 -0
  78. package/dist/cjs/internals/watch.d.ts.map +1 -0
  79. package/dist/cjs/internals/{connect.js → watch.js} +7 -7
  80. package/dist/cjs/internals/watch.js.map +1 -0
  81. package/dist/cjs/internals/weakref.d.ts.map +1 -0
  82. package/dist/cjs/internals/weakref.js.map +1 -0
  83. package/dist/cjs/react/component.d.ts +2 -0
  84. package/dist/cjs/react/component.d.ts.map +1 -0
  85. package/dist/cjs/react/component.js +40 -0
  86. package/dist/cjs/react/component.js.map +1 -0
  87. package/dist/cjs/react/context.d.ts +2 -1
  88. package/dist/cjs/react/context.d.ts.map +1 -1
  89. package/dist/cjs/react/context.js +10 -5
  90. package/dist/cjs/react/context.js.map +1 -1
  91. package/dist/cjs/react/index.d.ts +4 -4
  92. package/dist/cjs/react/index.d.ts.map +1 -1
  93. package/dist/cjs/react/index.js +11 -8
  94. package/dist/cjs/react/index.js.map +1 -1
  95. package/dist/cjs/react/provider.d.ts.map +1 -1
  96. package/dist/cjs/react/provider.js +1 -1
  97. package/dist/cjs/react/provider.js.map +1 -1
  98. package/dist/cjs/react/rendering.d.ts +0 -6
  99. package/dist/cjs/react/rendering.d.ts.map +1 -1
  100. package/dist/cjs/react/rendering.js +1 -19
  101. package/dist/cjs/react/rendering.js.map +1 -1
  102. package/dist/cjs/react/use-reactive.d.ts +7 -0
  103. package/dist/cjs/react/use-reactive.d.ts.map +1 -0
  104. package/dist/cjs/react/use-reactive.js +67 -0
  105. package/dist/cjs/react/use-reactive.js.map +1 -0
  106. package/dist/cjs/react/use-signal.d.ts +3 -0
  107. package/dist/cjs/react/use-signal.d.ts.map +1 -0
  108. package/dist/cjs/react/{state.js → use-signal.js} +5 -5
  109. package/dist/cjs/react/use-signal.js.map +1 -0
  110. package/dist/cjs/{transform.d.ts → transform/async.d.ts} +1 -1
  111. package/dist/cjs/transform/async.d.ts.map +1 -0
  112. package/dist/cjs/{transform.js → transform/async.js} +22 -9
  113. package/dist/cjs/transform/async.js.map +1 -0
  114. package/dist/cjs/transform/callback.d.ts +6 -0
  115. package/dist/cjs/transform/callback.d.ts.map +1 -0
  116. package/dist/cjs/transform/callback.js +259 -0
  117. package/dist/cjs/transform/callback.js.map +1 -0
  118. package/dist/cjs/transform/index.d.ts +5 -0
  119. package/dist/cjs/transform/index.d.ts.map +1 -0
  120. package/dist/cjs/transform/index.js +12 -0
  121. package/dist/cjs/transform/index.js.map +1 -0
  122. package/dist/cjs/transform/preset.d.ts +7 -0
  123. package/dist/cjs/transform/preset.d.ts.map +1 -0
  124. package/dist/cjs/transform/preset.js +20 -0
  125. package/dist/cjs/transform/preset.js.map +1 -0
  126. package/dist/cjs/transform/promise.d.ts +6 -0
  127. package/dist/cjs/transform/promise.d.ts.map +1 -0
  128. package/dist/cjs/transform/promise.js +129 -0
  129. package/dist/cjs/transform/promise.js.map +1 -0
  130. package/dist/cjs/types.d.ts +44 -63
  131. package/dist/cjs/types.d.ts.map +1 -1
  132. package/dist/cjs/utils.d.ts +2 -0
  133. package/dist/cjs/utils.d.ts.map +1 -0
  134. package/dist/cjs/utils.js +7 -0
  135. package/dist/cjs/utils.js.map +1 -0
  136. package/dist/esm/config.d.ts +1 -21
  137. package/dist/esm/config.d.ts.map +1 -1
  138. package/dist/esm/config.js +1 -29
  139. package/dist/esm/config.js.map +1 -1
  140. package/dist/esm/debug.d.ts +1 -1
  141. package/dist/esm/debug.d.ts.map +1 -1
  142. package/dist/esm/debug.js +1 -1
  143. package/dist/esm/debug.js.map +1 -1
  144. package/dist/esm/index.d.ts +5 -6
  145. package/dist/esm/index.d.ts.map +1 -1
  146. package/dist/esm/index.js +5 -6
  147. package/dist/esm/index.js.map +1 -1
  148. package/dist/esm/internals/async.d.ts +24 -19
  149. package/dist/esm/internals/async.d.ts.map +1 -1
  150. package/dist/esm/internals/async.js +253 -128
  151. package/dist/esm/internals/async.js.map +1 -1
  152. package/dist/esm/internals/callback.d.ts +13 -0
  153. package/dist/esm/internals/callback.d.ts.map +1 -0
  154. package/dist/esm/internals/callback.js +67 -0
  155. package/dist/esm/internals/callback.js.map +1 -0
  156. package/dist/esm/internals/config.d.ts +7 -0
  157. package/dist/esm/internals/config.d.ts.map +1 -0
  158. package/dist/esm/internals/config.js +11 -0
  159. package/dist/esm/internals/config.js.map +1 -0
  160. package/dist/esm/internals/consumer.d.ts +3 -3
  161. package/dist/esm/internals/consumer.d.ts.map +1 -1
  162. package/dist/esm/internals/consumer.js.map +1 -1
  163. package/dist/esm/internals/contexts.d.ts +16 -15
  164. package/dist/esm/internals/contexts.d.ts.map +1 -1
  165. package/dist/esm/internals/contexts.js +52 -50
  166. package/dist/esm/internals/contexts.js.map +1 -1
  167. package/dist/esm/internals/core-api.d.ts +15 -0
  168. package/dist/esm/internals/core-api.d.ts.map +1 -0
  169. package/dist/esm/internals/core-api.js +74 -0
  170. package/dist/esm/internals/core-api.js.map +1 -0
  171. package/dist/esm/internals/dirty.d.ts +3 -3
  172. package/dist/esm/internals/dirty.d.ts.map +1 -1
  173. package/dist/esm/internals/dirty.js +12 -12
  174. package/dist/esm/internals/dirty.js.map +1 -1
  175. package/dist/esm/internals/edge.d.ts +5 -5
  176. package/dist/esm/internals/edge.d.ts.map +1 -1
  177. package/dist/esm/internals/edge.js.map +1 -1
  178. package/dist/esm/internals/generators.d.ts +5 -0
  179. package/dist/esm/internals/generators.d.ts.map +1 -0
  180. package/dist/esm/internals/generators.js +79 -0
  181. package/dist/esm/internals/generators.js.map +1 -0
  182. package/dist/esm/internals/get.d.ts +5 -8
  183. package/dist/esm/internals/get.d.ts.map +1 -1
  184. package/dist/esm/internals/get.js +43 -100
  185. package/dist/esm/internals/get.js.map +1 -1
  186. package/dist/esm/internals/reactive.d.ts +77 -0
  187. package/dist/esm/internals/reactive.d.ts.map +1 -0
  188. package/dist/esm/internals/{derived.js → reactive.js} +41 -29
  189. package/dist/esm/internals/reactive.js.map +1 -0
  190. package/dist/esm/internals/scheduling.d.ts +7 -7
  191. package/dist/esm/internals/scheduling.d.ts.map +1 -1
  192. package/dist/esm/internals/scheduling.js +6 -6
  193. package/dist/esm/internals/scheduling.js.map +1 -1
  194. package/dist/esm/internals/signal.d.ts +20 -0
  195. package/dist/esm/internals/signal.d.ts.map +1 -0
  196. package/dist/esm/internals/{state.js → signal.js} +25 -22
  197. package/dist/esm/internals/signal.js.map +1 -0
  198. package/dist/{cjs → esm/internals}/trace.d.ts +1 -1
  199. package/dist/esm/internals/trace.d.ts.map +1 -0
  200. package/dist/esm/{trace.js → internals/trace.js} +1 -1
  201. package/dist/esm/internals/trace.js.map +1 -0
  202. package/dist/esm/internals/utils/equals.d.ts +4 -4
  203. package/dist/esm/internals/utils/equals.d.ts.map +1 -1
  204. package/dist/esm/internals/utils/equals.js.map +1 -1
  205. package/dist/esm/internals/utils/type-utils.d.ts +0 -2
  206. package/dist/esm/internals/utils/type-utils.d.ts.map +1 -1
  207. package/dist/esm/internals/utils/type-utils.js +0 -4
  208. package/dist/esm/internals/utils/type-utils.js.map +1 -1
  209. package/dist/esm/internals/watch.d.ts +4 -0
  210. package/dist/esm/internals/watch.d.ts.map +1 -0
  211. package/dist/esm/internals/{connect.js → watch.js} +7 -7
  212. package/dist/esm/internals/watch.js.map +1 -0
  213. package/dist/esm/internals/weakref.d.ts.map +1 -0
  214. package/dist/esm/internals/weakref.js.map +1 -0
  215. package/dist/esm/react/component.d.ts +2 -0
  216. package/dist/esm/react/component.d.ts.map +1 -0
  217. package/dist/esm/react/component.js +37 -0
  218. package/dist/esm/react/component.js.map +1 -0
  219. package/dist/esm/react/context.d.ts +2 -1
  220. package/dist/esm/react/context.d.ts.map +1 -1
  221. package/dist/esm/react/context.js +10 -6
  222. package/dist/esm/react/context.js.map +1 -1
  223. package/dist/esm/react/index.d.ts +4 -4
  224. package/dist/esm/react/index.d.ts.map +1 -1
  225. package/dist/esm/react/index.js +4 -4
  226. package/dist/esm/react/index.js.map +1 -1
  227. package/dist/esm/react/provider.d.ts.map +1 -1
  228. package/dist/esm/react/provider.js +2 -2
  229. package/dist/esm/react/provider.js.map +1 -1
  230. package/dist/esm/react/rendering.d.ts +0 -6
  231. package/dist/esm/react/rendering.d.ts.map +1 -1
  232. package/dist/esm/react/rendering.js +1 -17
  233. package/dist/esm/react/rendering.js.map +1 -1
  234. package/dist/esm/react/use-reactive.d.ts +7 -0
  235. package/dist/esm/react/use-reactive.d.ts.map +1 -0
  236. package/dist/esm/react/use-reactive.js +64 -0
  237. package/dist/esm/react/use-reactive.js.map +1 -0
  238. package/dist/esm/react/use-signal.d.ts +3 -0
  239. package/dist/esm/react/use-signal.d.ts.map +1 -0
  240. package/dist/esm/react/use-signal.js +10 -0
  241. package/dist/esm/react/use-signal.js.map +1 -0
  242. package/dist/esm/{transform.d.ts → transform/async.d.ts} +1 -1
  243. package/dist/esm/transform/async.d.ts.map +1 -0
  244. package/dist/esm/{transform.js → transform/async.js} +22 -9
  245. package/dist/esm/transform/async.js.map +1 -0
  246. package/dist/esm/transform/callback.d.ts +6 -0
  247. package/dist/esm/transform/callback.d.ts.map +1 -0
  248. package/dist/esm/transform/callback.js +256 -0
  249. package/dist/esm/transform/callback.js.map +1 -0
  250. package/dist/esm/transform/index.d.ts +5 -0
  251. package/dist/esm/transform/index.d.ts.map +1 -0
  252. package/dist/esm/transform/index.js +5 -0
  253. package/dist/esm/transform/index.js.map +1 -0
  254. package/dist/esm/transform/preset.d.ts +7 -0
  255. package/dist/esm/transform/preset.d.ts.map +1 -0
  256. package/dist/esm/transform/preset.js +17 -0
  257. package/dist/esm/transform/preset.js.map +1 -0
  258. package/dist/esm/transform/promise.d.ts +6 -0
  259. package/dist/esm/transform/promise.d.ts.map +1 -0
  260. package/dist/esm/transform/promise.js +126 -0
  261. package/dist/esm/transform/promise.js.map +1 -0
  262. package/dist/esm/types.d.ts +44 -63
  263. package/dist/esm/types.d.ts.map +1 -1
  264. package/dist/esm/utils.d.ts +2 -0
  265. package/dist/esm/utils.d.ts.map +1 -0
  266. package/dist/esm/utils.js +2 -0
  267. package/dist/esm/utils.js.map +1 -0
  268. package/package.json +56 -58
  269. package/react.js +0 -4
  270. package/transform.js +1 -5
  271. package/utils.js +15 -0
  272. package/.turbo/turbo-build.log +0 -12
  273. package/dist/cjs/hooks.d.ts +0 -16
  274. package/dist/cjs/hooks.d.ts.map +0 -1
  275. package/dist/cjs/hooks.js +0 -44
  276. package/dist/cjs/hooks.js.map +0 -1
  277. package/dist/cjs/internals/connect.d.ts +0 -4
  278. package/dist/cjs/internals/connect.d.ts.map +0 -1
  279. package/dist/cjs/internals/connect.js.map +0 -1
  280. package/dist/cjs/internals/derived.d.ts +0 -76
  281. package/dist/cjs/internals/derived.d.ts.map +0 -1
  282. package/dist/cjs/internals/derived.js.map +0 -1
  283. package/dist/cjs/internals/state.d.ts +0 -18
  284. package/dist/cjs/internals/state.d.ts.map +0 -1
  285. package/dist/cjs/internals/state.js.map +0 -1
  286. package/dist/cjs/react/setup.d.ts +0 -2
  287. package/dist/cjs/react/setup.d.ts.map +0 -1
  288. package/dist/cjs/react/setup.js +0 -14
  289. package/dist/cjs/react/setup.js.map +0 -1
  290. package/dist/cjs/react/signal-value.d.ts +0 -6
  291. package/dist/cjs/react/signal-value.d.ts.map +0 -1
  292. package/dist/cjs/react/signal-value.js +0 -37
  293. package/dist/cjs/react/signal-value.js.map +0 -1
  294. package/dist/cjs/react/state.d.ts +0 -3
  295. package/dist/cjs/react/state.d.ts.map +0 -1
  296. package/dist/cjs/react/state.js.map +0 -1
  297. package/dist/cjs/trace.d.ts.map +0 -1
  298. package/dist/cjs/trace.js.map +0 -1
  299. package/dist/cjs/transform.d.ts.map +0 -1
  300. package/dist/cjs/transform.js.map +0 -1
  301. package/dist/cjs/weakref.d.ts.map +0 -1
  302. package/dist/cjs/weakref.js.map +0 -1
  303. package/dist/esm/hooks.d.ts +0 -16
  304. package/dist/esm/hooks.d.ts.map +0 -1
  305. package/dist/esm/hooks.js +0 -37
  306. package/dist/esm/hooks.js.map +0 -1
  307. package/dist/esm/internals/connect.d.ts +0 -4
  308. package/dist/esm/internals/connect.d.ts.map +0 -1
  309. package/dist/esm/internals/connect.js.map +0 -1
  310. package/dist/esm/internals/derived.d.ts +0 -76
  311. package/dist/esm/internals/derived.d.ts.map +0 -1
  312. package/dist/esm/internals/derived.js.map +0 -1
  313. package/dist/esm/internals/state.d.ts +0 -18
  314. package/dist/esm/internals/state.d.ts.map +0 -1
  315. package/dist/esm/internals/state.js.map +0 -1
  316. package/dist/esm/react/setup.d.ts +0 -2
  317. package/dist/esm/react/setup.d.ts.map +0 -1
  318. package/dist/esm/react/setup.js +0 -11
  319. package/dist/esm/react/setup.js.map +0 -1
  320. package/dist/esm/react/signal-value.d.ts +0 -6
  321. package/dist/esm/react/signal-value.d.ts.map +0 -1
  322. package/dist/esm/react/signal-value.js +0 -33
  323. package/dist/esm/react/signal-value.js.map +0 -1
  324. package/dist/esm/react/state.d.ts +0 -3
  325. package/dist/esm/react/state.d.ts.map +0 -1
  326. package/dist/esm/react/state.js +0 -10
  327. package/dist/esm/react/state.js.map +0 -1
  328. package/dist/esm/trace.d.ts.map +0 -1
  329. package/dist/esm/trace.js.map +0 -1
  330. package/dist/esm/transform.d.ts.map +0 -1
  331. package/dist/esm/transform.js.map +0 -1
  332. package/dist/esm/weakref.d.ts.map +0 -1
  333. package/dist/esm/weakref.js.map +0 -1
  334. package/src/__tests__/__snapshots__/context.test.ts.snap +0 -2101
  335. package/src/__tests__/__snapshots__/nesting.test.ts.snap +0 -16201
  336. package/src/__tests__/__snapshots__/params-and-state.test.ts.snap +0 -1879
  337. package/src/__tests__/async-task.test.ts +0 -327
  338. package/src/__tests__/context.test.ts +0 -619
  339. package/src/__tests__/gc.test.ts +0 -256
  340. package/src/__tests__/nesting.test.ts +0 -298
  341. package/src/__tests__/params-and-state.test.ts +0 -230
  342. package/src/__tests__/reactive-async.test.ts +0 -548
  343. package/src/__tests__/reactive-sync.test.ts +0 -130
  344. package/src/__tests__/subscription.test.ts +0 -510
  345. package/src/__tests__/utils/async.ts +0 -6
  346. package/src/__tests__/utils/instrumented-hooks.ts +0 -410
  347. package/src/__tests__/utils/permute.ts +0 -85
  348. package/src/config.ts +0 -54
  349. package/src/debug.ts +0 -14
  350. package/src/hooks.ts +0 -82
  351. package/src/index.ts +0 -20
  352. package/src/internals/async.ts +0 -563
  353. package/src/internals/connect.ts +0 -49
  354. package/src/internals/consumer.ts +0 -13
  355. package/src/internals/contexts.ts +0 -173
  356. package/src/internals/derived.ts +0 -217
  357. package/src/internals/dirty.ts +0 -91
  358. package/src/internals/edge.ts +0 -109
  359. package/src/internals/get.ts +0 -298
  360. package/src/internals/scheduling.ts +0 -160
  361. package/src/internals/state.ts +0 -111
  362. package/src/internals/utils/debug-name.ts +0 -14
  363. package/src/internals/utils/equals.ts +0 -12
  364. package/src/internals/utils/hash.ts +0 -221
  365. package/src/internals/utils/stringify.ts +0 -57
  366. package/src/internals/utils/type-utils.ts +0 -19
  367. package/src/react/__tests__/async.test.tsx +0 -704
  368. package/src/react/__tests__/basic.test.tsx +0 -95
  369. package/src/react/__tests__/contexts.test.tsx +0 -181
  370. package/src/react/__tests__/subscriptions.test.tsx +0 -49
  371. package/src/react/__tests__/utils.tsx +0 -40
  372. package/src/react/context.ts +0 -14
  373. package/src/react/index.ts +0 -6
  374. package/src/react/provider.tsx +0 -18
  375. package/src/react/rendering.ts +0 -43
  376. package/src/react/setup.ts +0 -11
  377. package/src/react/signal-value.ts +0 -50
  378. package/src/react/state.ts +0 -13
  379. package/src/trace.ts +0 -454
  380. package/src/transform.ts +0 -113
  381. package/src/types.ts +0 -115
  382. package/src/weakref.ts +0 -9
  383. package/tsconfig.json +0 -13
  384. package/vitest.workspace.ts +0 -61
  385. /package/dist/cjs/{weakref.d.ts → internals/weakref.d.ts} +0 -0
  386. /package/dist/cjs/{weakref.js → internals/weakref.js} +0 -0
  387. /package/dist/esm/{weakref.d.ts → internals/weakref.d.ts} +0 -0
  388. /package/dist/esm/{weakref.js → internals/weakref.js} +0 -0
@@ -1,410 +0,0 @@
1
- import { afterEach, Assertion, expect } from 'vitest';
2
- import {
3
- reactive as _reactive,
4
- subscription as _subscription,
5
- SignalSubscribe,
6
- withContexts,
7
- task as _task,
8
- watcher,
9
- } from '../../index.js';
10
- import { ReactiveTask, ReactiveValue, SignalOptionsWithInit, SignalSubscription } from '../../types.js';
11
- import { Context, ContextImpl, getCurrentScope, ROOT_SCOPE, SignalScope } from '../../internals/contexts.js';
12
- import { DerivedSignal } from '../../internals/derived.js';
13
- import { ReactivePromise } from '../../internals/async.js';
14
- import { hashValue } from '../../internals/utils/hash.js';
15
-
16
- class SignalHookCounts {
17
- name: string;
18
-
19
- get = 0;
20
- set = 0;
21
- compute = 0;
22
-
23
- resolve = 0;
24
-
25
- subscribe = 0;
26
- update = 0;
27
- unsubscribe = 0;
28
- internalGet = 0;
29
- internalSet = 0;
30
- error = 0;
31
-
32
- effect = 0;
33
-
34
- constructor(name: string) {
35
- this.name = name;
36
- }
37
- }
38
-
39
- const countsKeys = Object.keys(new SignalHookCounts('')).filter(k => k !== 'name') as (keyof SignalHookCounts)[];
40
-
41
- let currentOrder: string[] | undefined = [];
42
-
43
- type ContextPair<T extends unknown[]> = {
44
- [K in keyof T]: [Context<T[K]>, NoInfer<T[K]>];
45
- };
46
-
47
- interface CustomMatchers<R = unknown> {
48
- toHaveSignalValue: (v: any) => Assertion<R>;
49
- toHaveCounts: (counts: Partial<SignalHookCounts>) => Assertion<R>;
50
- toHaveValueAndCounts: (v: any, counts: Partial<SignalHookCounts>) => Assertion<R>;
51
- toHaveComputedOrder: (order: string[]) => Assertion<R>;
52
- }
53
-
54
- declare module 'vitest' {
55
- // eslint-disable-next-line @typescript-eslint/no-empty-object-type
56
- interface Assertion<T = any> extends CustomMatchers<T> {}
57
- // eslint-disable-next-line @typescript-eslint/no-empty-object-type
58
- interface AsymmetricMatchersContaining extends CustomMatchers {}
59
- }
60
-
61
- let unsubs: (() => void)[] = [];
62
-
63
- afterEach(() => {
64
- unsubs.forEach(unsub => unsub());
65
- });
66
-
67
- let TEST_ID = 0;
68
-
69
- // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
70
- const WATCHERS = new WeakMap<Function, DerivedSignal<unknown, unknown[]>>();
71
-
72
- // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
73
- function getWatcherForHook(hook: Function) {
74
- let w = WATCHERS.get(hook);
75
-
76
- if (!w) {
77
- w = watcher(
78
- () => {
79
- let result = hook();
80
-
81
- if (result instanceof ReactivePromise) {
82
- result = result.value;
83
- }
84
-
85
- return result;
86
- },
87
- { desc: 'test' + TEST_ID++ },
88
- ) as DerivedSignal<unknown, unknown[]>;
89
-
90
- unsubs.push(w.addListener(() => {}));
91
-
92
- WATCHERS.set(hook, w);
93
- }
94
-
95
- return w;
96
- }
97
-
98
- function toHaveSignalValue(
99
- this: { equals(a: unknown, b: unknown): boolean },
100
- // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
101
- hook: Function,
102
- value: any,
103
- ) {
104
- if (hook instanceof ReactivePromise) {
105
- return {
106
- pass: this.equals(hook.value, value),
107
- message: () =>
108
- `Expected subscription value to be ${JSON.stringify(value)}, but got ${JSON.stringify(hook.value)}`,
109
- };
110
- }
111
-
112
- const signalValue = getWatcherForHook(hook).get();
113
-
114
- return {
115
- pass: this.equals(signalValue, value),
116
- message: () => `Expected signal value to be ${value}, but got ${signalValue}`,
117
- };
118
- }
119
-
120
- function toHaveCounts(hook: { [COUNTS]: SignalHookCounts }, counts: SignalHookCounts) {
121
- const signalCounts = hook[COUNTS];
122
-
123
- if (!signalCounts) {
124
- return {
125
- pass: false,
126
- message: () => 'Signal not found in counts map',
127
- };
128
- }
129
-
130
- for (const key of countsKeys) {
131
- const count = counts[key];
132
-
133
- if (count !== undefined && signalCounts[key] !== count) {
134
- return {
135
- pass: false,
136
- message: () => `Expected ${key} count to be ${count} but got ${signalCounts[key]}`,
137
- };
138
- }
139
- }
140
-
141
- return {
142
- pass: true,
143
- message: () => 'Counts match',
144
- };
145
- }
146
-
147
- expect.addSnapshotSerializer({
148
- serialize(val) {
149
- const counts = val[COUNTS];
150
- const value = getWatcherForHook(val).get();
151
-
152
- return JSON.stringify([value, counts], null, 2);
153
- },
154
- test(val) {
155
- return val[COUNTS] !== undefined;
156
- },
157
- });
158
-
159
- expect.extend({
160
- toHaveSignalValue,
161
- toHaveCounts,
162
-
163
- toHaveValueAndCounts(signal, value, counts) {
164
- const valueResult = toHaveSignalValue.call(this, signal, value);
165
- const countsResult = toHaveCounts.call(this, signal, counts);
166
-
167
- return {
168
- pass: valueResult.pass && countsResult.pass,
169
- message: () => {
170
- const messages = [
171
- !valueResult.pass && valueResult.message(),
172
- !countsResult.pass && countsResult.message(),
173
- ].filter(m => m);
174
-
175
- return messages.join('\n');
176
- },
177
- };
178
- },
179
-
180
- toHaveComputedOrder(fn: () => void, expectedOrder: string[]) {
181
- const order = (currentOrder = []);
182
-
183
- fn();
184
-
185
- currentOrder = undefined;
186
-
187
- return {
188
- pass: this.equals(order, expectedOrder),
189
- message: () => `Expected compute count to be ${expectedOrder.toString()} but got ${order.toString()}`,
190
- };
191
- },
192
- });
193
-
194
- function getContextKeys(scope: SignalScope): symbol[] {
195
- const contexts = scope['contexts'];
196
-
197
- const keys = Object.getOwnPropertySymbols(contexts);
198
-
199
- if (scope['parentScope']) {
200
- return [...getContextKeys(scope['parentScope']), ...keys];
201
- }
202
-
203
- return keys;
204
- }
205
-
206
- function getSortedContexts(scope: SignalScope) {
207
- const keys = getContextKeys(scope).sort((a, b) => a.toString().localeCompare(b.toString()));
208
-
209
- return keys.map(key => {
210
- const context = scope['contexts'][key];
211
-
212
- return [key, context];
213
- });
214
- }
215
-
216
- function getCountsFor(name: string, map: Map<number, SignalHookCounts>, scope: SignalScope, args: unknown[] = []) {
217
- const key = hashValue([args, getSortedContexts(scope)]);
218
- let countsForArgs = map.get(key);
219
-
220
- if (!countsForArgs) {
221
- countsForArgs = new SignalHookCounts(name);
222
- map.set(key, countsForArgs);
223
- }
224
-
225
- return countsForArgs;
226
- }
227
-
228
- const COUNTS = Symbol('counts');
229
-
230
- export type SubscriptionWithCounts<T> = ReactivePromise<T> & {
231
- [COUNTS]: SignalHookCounts;
232
- };
233
-
234
- export type ReactiveTaskWithCounts<T, Args extends unknown[]> = ReactiveTask<T, Args> & {
235
- [COUNTS]: SignalHookCounts;
236
- };
237
-
238
- export type ReactiveFunctionWithCounts<T, Args extends unknown[]> = ((...args: Args) => ReactiveValue<T>) & {
239
- [COUNTS]: SignalHookCounts;
240
- };
241
-
242
- export type ReactiveBuilderFunction<T, Args extends unknown[]> = ((...args: Args) => ReactiveValue<T>) & {
243
- [COUNTS]: SignalHookCounts;
244
- watch: () => () => void;
245
- withParams: (...args: Args) => ReactiveBuilderFunction<T, []>;
246
- withContexts: (...contexts: [Context<unknown>, unknown][]) => ReactiveBuilderFunction<T, Args>;
247
- };
248
-
249
- // Create a function-class hybrid for the builder pattern
250
- function createBuilderFunction<T, Args extends unknown[]>(
251
- originalFn: (...args: Args) => ReactiveValue<T>,
252
- countsMap: Map<number, SignalHookCounts>,
253
- args: Args,
254
- contexts?: [Context<unknown>, unknown][],
255
- ): ReactiveBuilderFunction<T, []>;
256
- function createBuilderFunction<T, Args extends unknown[]>(
257
- originalFn: (...args: Args) => ReactiveValue<T>,
258
- countsMap: Map<number, SignalHookCounts>,
259
- args?: undefined,
260
- contexts?: [Context<unknown>, unknown][],
261
- ): ReactiveBuilderFunction<T, Args>;
262
- function createBuilderFunction<T, Args extends unknown[]>(
263
- originalFn: (...args: Args) => ReactiveValue<T>,
264
- countsMap: Map<number, SignalHookCounts>,
265
- args?: Args,
266
- contexts?: [Context<unknown>, unknown][],
267
- ): ReactiveBuilderFunction<T, Args> {
268
- // Cast the function to include our additional properties
269
- const builderFn = ((...passedArgs: Args) => {
270
- if (args && passedArgs.length > 0) {
271
- throw new Error('reactive function already has parameters');
272
- }
273
-
274
- let usedArgs = args ?? passedArgs;
275
-
276
- const scope = getCurrentScope();
277
- const counts = getCountsFor(originalFn.name, countsMap, scope, usedArgs);
278
-
279
- // increment the get count since each time this is called, we're getting the value
280
- counts.get++;
281
-
282
- if (contexts) {
283
- return withContexts(contexts, () => originalFn(...usedArgs));
284
- }
285
-
286
- return originalFn(...usedArgs);
287
- }) as ReactiveBuilderFunction<T, Args>;
288
-
289
- // Add the builder methods
290
- builderFn.watch = (...args: Args) => {
291
- const unsub = watcher(() => builderFn(...args)).addListener(() => {});
292
- unsubs.push(unsub);
293
- return unsub;
294
- };
295
-
296
- builderFn.withParams = (...withArgs: Args) => {
297
- if (args) {
298
- throw new Error('reactive function already has parameters');
299
- }
300
-
301
- return createBuilderFunction(originalFn, countsMap, withArgs, contexts);
302
- };
303
-
304
- builderFn.withContexts = (...withContexts: [Context<unknown>, unknown][]) => {
305
- if (contexts) {
306
- throw new Error('reactive function already has contexts');
307
- }
308
-
309
- return createBuilderFunction(originalFn, countsMap, args as Args, withContexts) as ReactiveBuilderFunction<T, Args>;
310
- };
311
-
312
- const scope = contexts ? ROOT_SCOPE.getChild(contexts as [ContextImpl<unknown>, unknown][]) : ROOT_SCOPE;
313
- builderFn[COUNTS] = getCountsFor(originalFn.name, countsMap, scope, args);
314
-
315
- return builderFn;
316
- }
317
-
318
- export function reactive<T, Args extends unknown[]>(
319
- fn: (...args: Args) => T,
320
- opts?: Partial<SignalOptionsWithInit<T, Args>>,
321
- ): ReactiveBuilderFunction<T, Args> {
322
- const countsMap = new Map<number, SignalHookCounts>();
323
-
324
- return createBuilderFunction(
325
- _reactive((...args: any[]) => {
326
- const scope = getCurrentScope();
327
- const counts = getCountsFor(opts?.desc ?? 'unknownReactive', countsMap, scope, args);
328
-
329
- counts.compute++;
330
-
331
- return fn(...(args as any));
332
- }, opts) as ReactiveFunctionWithCounts<T, Args>,
333
- countsMap,
334
- );
335
- }
336
-
337
- export const task: typeof _task = (fn, opts) => {
338
- const counts = new SignalHookCounts(opts?.desc ?? 'unknownTask');
339
-
340
- const wrapper = _task((...args: any[]) => {
341
- counts.compute++;
342
-
343
- return fn(...(args as any));
344
- }, opts) as ReactiveTaskWithCounts<any, any>;
345
-
346
- wrapper[COUNTS] = counts;
347
-
348
- return wrapper;
349
- };
350
-
351
- export const subscription = <T>(
352
- fn: SignalSubscribe<T>,
353
- opts?: Partial<SignalOptionsWithInit<T, unknown[]>>,
354
- ): ReturnType<typeof _subscription<T>> => {
355
- const counts = new SignalHookCounts(opts?.desc ?? 'unknownSubscription');
356
-
357
- let wrapper = _subscription<T>(({ get, set, setError }) => {
358
- counts.subscribe++;
359
- counts.compute++;
360
-
361
- const result = fn({
362
- get: () => {
363
- counts.internalGet++;
364
- return get();
365
- },
366
- set: v => {
367
- counts.internalSet++;
368
- set(v);
369
- },
370
- setError: (error: unknown) => {
371
- counts.error++;
372
- setError(error);
373
- },
374
- });
375
-
376
- let subscriptionWrapper: SignalSubscription | (() => unknown) | undefined;
377
-
378
- if (result) {
379
- if (typeof result === 'function') {
380
- subscriptionWrapper = () => {
381
- counts.unsubscribe++;
382
- result();
383
- };
384
- } else {
385
- subscriptionWrapper = {};
386
-
387
- if (result.unsubscribe) {
388
- subscriptionWrapper.unsubscribe = () => {
389
- counts.unsubscribe++;
390
- result.unsubscribe!();
391
- };
392
- }
393
-
394
- if (result.update) {
395
- subscriptionWrapper.update = () => {
396
- counts.compute++;
397
- counts.update++;
398
- result.update!();
399
- };
400
- }
401
- }
402
- }
403
-
404
- return subscriptionWrapper;
405
- }, opts) as SubscriptionWithCounts<T>;
406
-
407
- wrapper[COUNTS] = counts;
408
-
409
- return wrapper as ReturnType<typeof _subscription<T>>;
410
- };
@@ -1,85 +0,0 @@
1
- import { describe } from 'vitest';
2
- import { ReactiveBuilderFunction, reactive, subscription } from './instrumented-hooks.js';
3
- import { SignalOptionsWithInit } from '../../types.js';
4
-
5
- const createMethods = [
6
- {
7
- name: 'createComputed',
8
- create: reactive,
9
- },
10
- {
11
- name: 'createAsyncComputed',
12
- create: <T, Args extends unknown[]>(
13
- fn: (...args: Args) => T | Promise<T>,
14
- opts?: Partial<SignalOptionsWithInit<Promise<T>, Args>>,
15
- ): ReactiveBuilderFunction<T, Args> => {
16
- const computed = reactive(async (...args: Args) => {
17
- return fn(...args);
18
- }, opts);
19
-
20
- return reactive((...args: Args) => {
21
- return computed(...args).value as T;
22
- });
23
- },
24
- },
25
- {
26
- name: 'createSubscription',
27
- create: function _createSubscription<T, Args extends unknown[]>(
28
- fn: (...args: Args) => T,
29
- opts?: Partial<SignalOptionsWithInit<T, Args>>,
30
- ): ReactiveBuilderFunction<T, Args> {
31
- const computed = reactive((...args: Args) => {
32
- return subscription(
33
- state => {
34
- state.set(fn(...args));
35
-
36
- return {
37
- update: () => {
38
- state.set(fn(...args));
39
- },
40
- };
41
- },
42
- opts as Partial<SignalOptionsWithInit<T, unknown[]>>,
43
- );
44
- });
45
-
46
- return reactive((...args: Args) => {
47
- return computed(...args).value as T;
48
- }, opts);
49
- },
50
- },
51
- ];
52
-
53
- function generatePermutations(n: number, m: number): number[][] {
54
- const results: number[][] = [];
55
-
56
- function generate(current: number[], remaining: number) {
57
- if (remaining === 0) {
58
- results.push([...current]);
59
- return;
60
- }
61
-
62
- for (let i = 0; i < n; i++) {
63
- current.push(i);
64
- generate(current, remaining - 1);
65
- current.pop();
66
- }
67
- }
68
-
69
- generate([], m);
70
- return results;
71
- }
72
-
73
- type CreateMethod = (typeof createMethods)[number]['create'];
74
-
75
- export function permute(m: number, fn: (...args: CreateMethod[]) => void) {
76
- const testCases = generatePermutations(createMethods.length, m);
77
-
78
- for (const testCase of testCases) {
79
- const testMethods = [createMethods[testCase[0]], ...testCase.slice(1).map(i => createMethods[i])];
80
-
81
- describe(`${testMethods.map(m => m.name).join(', ')}`, () => {
82
- fn(...testMethods.map(m => m.create));
83
- });
84
- }
85
- }
package/src/config.ts DELETED
@@ -1,54 +0,0 @@
1
- import { DerivedSignal } from './internals/derived.js';
2
- import { SignalScope } from './internals/contexts.js';
3
- import { ReactiveValue } from './types.js';
4
- import { StateSignal } from './internals/state.js';
5
- import { CURRENT_CONSUMER } from './internals/get.js';
6
-
7
- export type FlushCallback = () => void;
8
-
9
- export type FlushFn = (fn: FlushCallback) => void;
10
- export type BatchFn = (fn: () => void) => void;
11
-
12
- interface SignalHooksConfig {
13
- scheduleFlush: FlushFn;
14
- runBatch: BatchFn;
15
- getFrameworkScope: () => SignalScope | undefined;
16
- useStateSignal: <T>(signal: StateSignal<T>) => T;
17
- useDerivedSignal: <T, Args extends unknown[]>(signal: DerivedSignal<T, Args>) => ReactiveValue<T>;
18
- }
19
-
20
- export let scheduleFlush: FlushFn = flushWatchers => {
21
- setTimeout(() => {
22
- flushWatchers();
23
- }, 0);
24
- };
25
-
26
- export let runBatch: BatchFn = fn => fn();
27
-
28
- export let getFrameworkScope: () => SignalScope | undefined = () => undefined;
29
-
30
- let useFrameworkStateSignal: <T>(signal: StateSignal<T>) => T = signal => signal.get();
31
- let useFrameworkDerivedSignal: <T, Args extends unknown[]>(
32
- signal: DerivedSignal<T, Args>,
33
- ) => ReactiveValue<T> = signal => signal.get();
34
-
35
- export function useDerivedSignal<T, Args extends unknown[]>(signal: DerivedSignal<T, Args>): ReactiveValue<T> {
36
- if (CURRENT_CONSUMER !== undefined) {
37
- return signal.get();
38
- } else {
39
- // eslint-disable-next-line react-hooks/rules-of-hooks
40
- return useFrameworkDerivedSignal(signal);
41
- }
42
- }
43
-
44
- export function useStateSignal<T>(signal: StateSignal<T>): T {
45
- return useFrameworkStateSignal(signal);
46
- }
47
-
48
- export function setConfig(cfg: Partial<SignalHooksConfig>) {
49
- scheduleFlush = cfg.scheduleFlush ?? scheduleFlush;
50
- runBatch = cfg.runBatch ?? runBatch;
51
- getFrameworkScope = cfg.getFrameworkScope ?? getFrameworkScope;
52
- useFrameworkStateSignal = cfg.useStateSignal ?? useFrameworkStateSignal;
53
- useFrameworkDerivedSignal = cfg.useDerivedSignal ?? useFrameworkDerivedSignal;
54
- }
package/src/debug.ts DELETED
@@ -1,14 +0,0 @@
1
- export {
2
- setTracing,
3
- createTracer,
4
- createTracerFromId,
5
- removeTracer,
6
- VisualizerNode,
7
- type VisualizerLink,
8
- TracerEventType,
9
- Tracer,
10
- TRACER,
11
- SignalType,
12
- } from './trace.js';
13
-
14
- export { scheduleTracer } from './internals/scheduling.js';
package/src/hooks.ts DELETED
@@ -1,82 +0,0 @@
1
- import {
2
- ReactiveTask,
3
- ReactiveValue,
4
- ReadyReactivePromise,
5
- ReadyReactiveValue,
6
- Signal,
7
- SignalOptions,
8
- SignalSubscribe,
9
- type SignalOptionsWithInit,
10
- } from './types.js';
11
- import { useDerivedSignal } from './config.js';
12
- import { getCurrentScope, SignalScope } from './internals/contexts.js';
13
- import { createStateSignal } from './internals/state.js';
14
- import { createDerivedSignal, DerivedSignalDefinition } from './internals/derived.js';
15
- import { ReactivePromise } from './internals/async.js';
16
- import { Tracer } from './trace.js';
17
- import { equalsFrom } from './internals/utils/equals.js';
18
-
19
- export const state = createStateSignal;
20
-
21
- export function reactive<T, Args extends unknown[]>(
22
- fn: (...args: Args) => T,
23
- opts?: Partial<SignalOptionsWithInit<T, Args>>,
24
- ): (...args: Args) => ReactiveValue<T>;
25
- export function reactive<T, Args extends unknown[]>(
26
- fn: (...args: Args) => T,
27
- opts: SignalOptionsWithInit<T, Args>,
28
- ): (...args: Args) => ReadyReactiveValue<T>;
29
- export function reactive<T, Args extends unknown[]>(
30
- fn: (...args: Args) => T,
31
- opts?: Partial<SignalOptionsWithInit<T, Args>>,
32
- ): (...args: Args) => ReactiveValue<T> {
33
- const def: DerivedSignalDefinition<T, Args> = {
34
- compute: fn,
35
- equals: equalsFrom(opts?.equals),
36
- shouldGC: opts?.shouldGC,
37
- isSubscription: false,
38
- };
39
-
40
- return (...args) => {
41
- const scope = getCurrentScope();
42
- const signal = scope.get(def, args, opts);
43
-
44
- return useDerivedSignal(signal)!;
45
- };
46
- }
47
-
48
- export function subscription<T>(subscribe: SignalSubscribe<T>, opts?: SignalOptions<T, unknown[]>): ReactivePromise<T>;
49
- export function subscription<T>(
50
- subscribe: SignalSubscribe<T>,
51
- opts: SignalOptionsWithInit<T, unknown[]>,
52
- ): ReadyReactivePromise<T>;
53
- export function subscription<T>(
54
- subscribe: SignalSubscribe<T>,
55
- opts?: Partial<SignalOptionsWithInit<T, unknown[]>>,
56
- ): ReactivePromise<T> | ReadyReactivePromise<T> {
57
- const scope = getCurrentScope();
58
-
59
- return ReactivePromise.createSubscription(subscribe, scope, opts);
60
- }
61
-
62
- export const task = <T, Args extends unknown[]>(
63
- fn: (...args: Args) => Promise<T>,
64
- opts?: Partial<SignalOptionsWithInit<T, Args>>,
65
- ): ReactiveTask<T, Args> => {
66
- const scope = getCurrentScope();
67
-
68
- return ReactivePromise.createTask(fn, scope, opts);
69
- };
70
-
71
- export function watcher<T>(
72
- fn: () => T,
73
- opts?: SignalOptions<T, unknown[]> & { scope?: SignalScope; tracer?: Tracer },
74
- ): Signal<ReactiveValue<T>> {
75
- const def: DerivedSignalDefinition<T, unknown[]> = {
76
- compute: fn,
77
- equals: equalsFrom(opts?.equals),
78
- isSubscription: false,
79
- };
80
-
81
- return createDerivedSignal(def, undefined, undefined, opts?.scope, opts);
82
- }
package/src/index.ts DELETED
@@ -1,20 +0,0 @@
1
- export type * from './types.js';
2
-
3
- export { state, reactive, subscription, task, watcher } from './hooks.js';
4
-
5
- export { isReactivePromise, isReactiveTask, isReactiveSubscription } from './internals/async.js';
6
-
7
- export { callback } from './internals/get.js';
8
-
9
- export {
10
- createContext,
11
- useContext,
12
- withContexts,
13
- setRootContexts,
14
- SignalScope,
15
- CONTEXT_KEY,
16
- } from './internals/contexts.js';
17
-
18
- export { setConfig } from './config.js';
19
-
20
- export { hashValue, registerCustomHash } from './internals/utils/hash.js';