signalium 0.3.8 → 1.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 (287) hide show
  1. package/.turbo/turbo-build.log +3 -3
  2. package/CHANGELOG.md +15 -0
  3. package/build/react.js +19 -0
  4. package/build/transform.js +19 -0
  5. package/dist/cjs/config.d.ts +8 -3
  6. package/dist/cjs/config.d.ts.map +1 -1
  7. package/dist/cjs/config.js +14 -8
  8. package/dist/cjs/config.js.map +1 -1
  9. package/dist/cjs/debug.d.ts +2 -2
  10. package/dist/cjs/debug.d.ts.map +1 -1
  11. package/dist/cjs/debug.js +3 -3
  12. package/dist/cjs/debug.js.map +1 -1
  13. package/dist/cjs/hooks.d.ts +14 -42
  14. package/dist/cjs/hooks.d.ts.map +1 -1
  15. package/dist/cjs/hooks.js +19 -240
  16. package/dist/cjs/hooks.js.map +1 -1
  17. package/dist/cjs/index.d.ts +5 -3
  18. package/dist/cjs/index.d.ts.map +1 -1
  19. package/dist/cjs/index.js +18 -18
  20. package/dist/cjs/index.js.map +1 -1
  21. package/dist/cjs/internals/async.d.ts +50 -0
  22. package/dist/cjs/internals/async.d.ts.map +1 -0
  23. package/dist/cjs/internals/async.js +390 -0
  24. package/dist/cjs/internals/async.js.map +1 -0
  25. package/dist/cjs/internals/connect.d.ts +4 -0
  26. package/dist/cjs/internals/connect.d.ts.map +1 -0
  27. package/dist/cjs/internals/connect.js +37 -0
  28. package/dist/cjs/internals/connect.js.map +1 -0
  29. package/dist/cjs/internals/consumer.d.ts +6 -0
  30. package/dist/cjs/internals/consumer.d.ts.map +1 -0
  31. package/dist/cjs/internals/consumer.js +13 -0
  32. package/dist/cjs/internals/consumer.js.map +1 -0
  33. package/dist/cjs/internals/contexts.d.ts +33 -0
  34. package/dist/cjs/internals/contexts.d.ts.map +1 -0
  35. package/dist/cjs/internals/contexts.js +103 -0
  36. package/dist/cjs/internals/contexts.js.map +1 -0
  37. package/dist/cjs/internals/derived.d.ts +66 -0
  38. package/dist/cjs/internals/derived.d.ts.map +1 -0
  39. package/dist/cjs/internals/derived.js +128 -0
  40. package/dist/cjs/internals/derived.js.map +1 -0
  41. package/dist/cjs/internals/dirty.d.ts +5 -0
  42. package/dist/cjs/internals/dirty.d.ts.map +1 -0
  43. package/dist/cjs/internals/dirty.js +79 -0
  44. package/dist/cjs/internals/dirty.js.map +1 -0
  45. package/dist/cjs/internals/edge.d.ts +32 -0
  46. package/dist/cjs/internals/edge.d.ts.map +1 -0
  47. package/dist/cjs/internals/edge.js +59 -0
  48. package/dist/cjs/internals/edge.js.map +1 -0
  49. package/dist/cjs/internals/get.d.ts +10 -0
  50. package/dist/cjs/internals/get.d.ts.map +1 -0
  51. package/dist/cjs/internals/get.js +255 -0
  52. package/dist/cjs/internals/get.js.map +1 -0
  53. package/dist/cjs/internals/scheduling.d.ts +12 -0
  54. package/dist/cjs/internals/scheduling.d.ts.map +1 -0
  55. package/dist/cjs/internals/scheduling.js +117 -0
  56. package/dist/cjs/internals/scheduling.js.map +1 -0
  57. package/dist/cjs/internals/state.d.ts +18 -0
  58. package/dist/cjs/internals/state.d.ts.map +1 -0
  59. package/dist/cjs/internals/state.js +88 -0
  60. package/dist/cjs/internals/state.js.map +1 -0
  61. package/dist/cjs/internals/utils/debug-name.d.ts +2 -0
  62. package/dist/cjs/internals/utils/debug-name.d.ts.map +1 -0
  63. package/dist/cjs/internals/utils/debug-name.js +14 -0
  64. package/dist/cjs/internals/utils/debug-name.js.map +1 -0
  65. package/dist/cjs/internals/utils/equals.d.ts +3 -0
  66. package/dist/cjs/internals/utils/equals.d.ts.map +1 -0
  67. package/dist/cjs/internals/utils/equals.js +13 -0
  68. package/dist/cjs/internals/utils/equals.js.map +1 -0
  69. package/dist/cjs/internals/utils/hash.d.ts +7 -0
  70. package/dist/cjs/internals/utils/hash.d.ts.map +1 -0
  71. package/dist/cjs/internals/utils/hash.js +181 -0
  72. package/dist/cjs/internals/utils/hash.js.map +1 -0
  73. package/dist/cjs/internals/utils/stringify.d.ts +3 -0
  74. package/dist/cjs/internals/utils/stringify.d.ts.map +1 -0
  75. package/dist/cjs/{utils.js → internals/utils/stringify.js} +5 -27
  76. package/dist/cjs/internals/utils/stringify.js.map +1 -0
  77. package/dist/cjs/internals/utils/type-utils.d.ts +6 -0
  78. package/dist/cjs/internals/utils/type-utils.d.ts.map +1 -0
  79. package/dist/cjs/internals/utils/type-utils.js +22 -0
  80. package/dist/cjs/internals/utils/type-utils.js.map +1 -0
  81. package/dist/cjs/react/context.d.ts +1 -1
  82. package/dist/cjs/react/context.d.ts.map +1 -1
  83. package/dist/cjs/react/provider.d.ts +4 -3
  84. package/dist/cjs/react/provider.d.ts.map +1 -1
  85. package/dist/cjs/react/provider.js +7 -3
  86. package/dist/cjs/react/provider.js.map +1 -1
  87. package/dist/cjs/react/setup.d.ts.map +1 -1
  88. package/dist/cjs/react/setup.js +2 -1
  89. package/dist/cjs/react/setup.js.map +1 -1
  90. package/dist/cjs/react/signal-value.d.ts +5 -1
  91. package/dist/cjs/react/signal-value.d.ts.map +1 -1
  92. package/dist/cjs/react/signal-value.js +35 -45
  93. package/dist/cjs/react/signal-value.js.map +1 -1
  94. package/dist/cjs/trace.d.ts +32 -28
  95. package/dist/cjs/trace.d.ts.map +1 -1
  96. package/dist/cjs/trace.js +14 -16
  97. package/dist/cjs/trace.js.map +1 -1
  98. package/dist/cjs/transform.d.ts +6 -0
  99. package/dist/cjs/transform.d.ts.map +1 -0
  100. package/dist/cjs/transform.js +92 -0
  101. package/dist/cjs/transform.js.map +1 -0
  102. package/dist/cjs/types.d.ts +32 -40
  103. package/dist/cjs/types.d.ts.map +1 -1
  104. package/dist/esm/config.d.ts +8 -3
  105. package/dist/esm/config.d.ts.map +1 -1
  106. package/dist/esm/config.js +12 -7
  107. package/dist/esm/config.js.map +1 -1
  108. package/dist/esm/debug.d.ts +2 -2
  109. package/dist/esm/debug.d.ts.map +1 -1
  110. package/dist/esm/debug.js +2 -2
  111. package/dist/esm/debug.js.map +1 -1
  112. package/dist/esm/hooks.d.ts +14 -42
  113. package/dist/esm/hooks.d.ts.map +1 -1
  114. package/dist/esm/hooks.js +17 -226
  115. package/dist/esm/hooks.js.map +1 -1
  116. package/dist/esm/index.d.ts +5 -3
  117. package/dist/esm/index.d.ts.map +1 -1
  118. package/dist/esm/index.js +5 -3
  119. package/dist/esm/index.js.map +1 -1
  120. package/dist/esm/internals/async.d.ts +50 -0
  121. package/dist/esm/internals/async.d.ts.map +1 -0
  122. package/dist/esm/internals/async.js +383 -0
  123. package/dist/esm/internals/async.js.map +1 -0
  124. package/dist/esm/internals/connect.d.ts +4 -0
  125. package/dist/esm/internals/connect.d.ts.map +1 -0
  126. package/dist/esm/internals/connect.js +33 -0
  127. package/dist/esm/internals/connect.js.map +1 -0
  128. package/dist/esm/internals/consumer.d.ts +6 -0
  129. package/dist/esm/internals/consumer.d.ts.map +1 -0
  130. package/dist/esm/internals/consumer.js +9 -0
  131. package/dist/esm/internals/consumer.js.map +1 -0
  132. package/dist/esm/internals/contexts.d.ts +33 -0
  133. package/dist/esm/internals/contexts.d.ts.map +1 -0
  134. package/dist/esm/internals/contexts.js +92 -0
  135. package/dist/esm/internals/contexts.js.map +1 -0
  136. package/dist/esm/internals/derived.d.ts +66 -0
  137. package/dist/esm/internals/derived.d.ts.map +1 -0
  138. package/dist/esm/internals/derived.js +118 -0
  139. package/dist/esm/internals/derived.js.map +1 -0
  140. package/dist/esm/internals/dirty.d.ts +5 -0
  141. package/dist/esm/internals/dirty.d.ts.map +1 -0
  142. package/dist/esm/internals/dirty.js +75 -0
  143. package/dist/esm/internals/dirty.js.map +1 -0
  144. package/dist/esm/internals/edge.d.ts +32 -0
  145. package/dist/esm/internals/edge.d.ts.map +1 -0
  146. package/dist/esm/internals/edge.js +54 -0
  147. package/dist/esm/internals/edge.js.map +1 -0
  148. package/dist/esm/internals/get.d.ts +10 -0
  149. package/dist/esm/internals/get.d.ts.map +1 -0
  150. package/dist/esm/internals/get.js +247 -0
  151. package/dist/esm/internals/get.js.map +1 -0
  152. package/dist/esm/internals/scheduling.d.ts +12 -0
  153. package/dist/esm/internals/scheduling.d.ts.map +1 -0
  154. package/dist/esm/internals/scheduling.js +106 -0
  155. package/dist/esm/internals/scheduling.js.map +1 -0
  156. package/dist/esm/internals/state.d.ts +18 -0
  157. package/dist/esm/internals/state.d.ts.map +1 -0
  158. package/dist/esm/internals/state.js +82 -0
  159. package/dist/esm/internals/state.js.map +1 -0
  160. package/dist/esm/internals/utils/debug-name.d.ts +2 -0
  161. package/dist/esm/internals/utils/debug-name.d.ts.map +1 -0
  162. package/dist/esm/internals/utils/debug-name.js +11 -0
  163. package/dist/esm/internals/utils/debug-name.js.map +1 -0
  164. package/dist/esm/internals/utils/equals.d.ts +3 -0
  165. package/dist/esm/internals/utils/equals.d.ts.map +1 -0
  166. package/dist/esm/internals/utils/equals.js +9 -0
  167. package/dist/esm/internals/utils/equals.js.map +1 -0
  168. package/dist/esm/internals/utils/hash.d.ts +7 -0
  169. package/dist/esm/internals/utils/hash.d.ts.map +1 -0
  170. package/dist/esm/internals/utils/hash.js +174 -0
  171. package/dist/esm/internals/utils/hash.js.map +1 -0
  172. package/dist/esm/internals/utils/stringify.d.ts +3 -0
  173. package/dist/esm/internals/utils/stringify.d.ts.map +1 -0
  174. package/dist/esm/{utils.js → internals/utils/stringify.js} +4 -25
  175. package/dist/esm/internals/utils/stringify.js.map +1 -0
  176. package/dist/esm/internals/utils/type-utils.d.ts +6 -0
  177. package/dist/esm/internals/utils/type-utils.d.ts.map +1 -0
  178. package/dist/esm/internals/utils/type-utils.js +15 -0
  179. package/dist/esm/internals/utils/type-utils.js.map +1 -0
  180. package/dist/esm/react/context.d.ts +1 -1
  181. package/dist/esm/react/context.d.ts.map +1 -1
  182. package/dist/esm/react/provider.d.ts +4 -3
  183. package/dist/esm/react/provider.d.ts.map +1 -1
  184. package/dist/esm/react/provider.js +6 -2
  185. package/dist/esm/react/provider.js.map +1 -1
  186. package/dist/esm/react/setup.d.ts.map +1 -1
  187. package/dist/esm/react/setup.js +3 -2
  188. package/dist/esm/react/setup.js.map +1 -1
  189. package/dist/esm/react/signal-value.d.ts +5 -1
  190. package/dist/esm/react/signal-value.d.ts.map +1 -1
  191. package/dist/esm/react/signal-value.js +34 -45
  192. package/dist/esm/react/signal-value.js.map +1 -1
  193. package/dist/esm/trace.d.ts +32 -28
  194. package/dist/esm/trace.d.ts.map +1 -1
  195. package/dist/esm/trace.js +13 -15
  196. package/dist/esm/trace.js.map +1 -1
  197. package/dist/esm/transform.d.ts +6 -0
  198. package/dist/esm/transform.d.ts.map +1 -0
  199. package/dist/esm/transform.js +89 -0
  200. package/dist/esm/transform.js.map +1 -0
  201. package/dist/esm/types.d.ts +32 -40
  202. package/dist/esm/types.d.ts.map +1 -1
  203. package/package.json +23 -4
  204. package/src/__tests__/__snapshots__/context.test.ts.snap +2101 -0
  205. package/src/__tests__/__snapshots__/nesting.test.ts.snap +16201 -0
  206. package/src/__tests__/__snapshots__/params-and-state.test.ts.snap +1879 -0
  207. package/src/__tests__/async-task.test.ts +327 -0
  208. package/src/__tests__/context.test.ts +517 -0
  209. package/src/__tests__/nesting.test.ts +298 -0
  210. package/src/__tests__/params-and-state.test.ts +230 -0
  211. package/src/__tests__/reactive-async.test.ts +548 -0
  212. package/src/__tests__/reactive-sync.test.ts +130 -0
  213. package/src/__tests__/subscription.test.ts +510 -0
  214. package/src/__tests__/utils/async.ts +1 -1
  215. package/src/__tests__/utils/instrumented-hooks.ts +229 -124
  216. package/src/__tests__/utils/permute.ts +25 -14
  217. package/src/config.ts +19 -9
  218. package/src/debug.ts +2 -2
  219. package/src/hooks.ts +46 -380
  220. package/src/index.ts +7 -24
  221. package/src/internals/async.ts +556 -0
  222. package/src/internals/connect.ts +41 -0
  223. package/src/internals/consumer.ts +13 -0
  224. package/src/internals/contexts.ts +133 -0
  225. package/src/internals/derived.ts +208 -0
  226. package/src/internals/dirty.ts +91 -0
  227. package/src/internals/edge.ts +109 -0
  228. package/src/internals/get.ts +298 -0
  229. package/src/internals/scheduling.ts +140 -0
  230. package/src/internals/state.ts +111 -0
  231. package/src/internals/utils/debug-name.ts +14 -0
  232. package/src/internals/utils/equals.ts +12 -0
  233. package/src/internals/utils/hash.ts +221 -0
  234. package/src/{utils.ts → internals/utils/stringify.ts} +3 -29
  235. package/src/internals/utils/type-utils.ts +19 -0
  236. package/src/react/__tests__/async.test.tsx +704 -0
  237. package/src/react/__tests__/basic.test.tsx +95 -0
  238. package/src/react/__tests__/contexts.test.tsx +99 -0
  239. package/src/react/__tests__/subscriptions.test.tsx +49 -0
  240. package/src/react/__tests__/utils.tsx +40 -0
  241. package/src/react/context.ts +1 -1
  242. package/src/react/provider.tsx +12 -4
  243. package/src/react/setup.ts +3 -2
  244. package/src/react/signal-value.ts +47 -67
  245. package/src/trace.ts +43 -38
  246. package/src/transform.ts +113 -0
  247. package/src/types.ts +56 -46
  248. package/transform.js +19 -0
  249. package/vitest.workspace.ts +38 -2
  250. package/dist/cjs/scheduling.d.ts +0 -11
  251. package/dist/cjs/scheduling.d.ts.map +0 -1
  252. package/dist/cjs/scheduling.js +0 -108
  253. package/dist/cjs/scheduling.js.map +0 -1
  254. package/dist/cjs/signals.d.ts +0 -73
  255. package/dist/cjs/signals.d.ts.map +0 -1
  256. package/dist/cjs/signals.js +0 -632
  257. package/dist/cjs/signals.js.map +0 -1
  258. package/dist/cjs/utils.d.ts +0 -4
  259. package/dist/cjs/utils.d.ts.map +0 -1
  260. package/dist/cjs/utils.js.map +0 -1
  261. package/dist/esm/scheduling.d.ts +0 -11
  262. package/dist/esm/scheduling.d.ts.map +0 -1
  263. package/dist/esm/scheduling.js +0 -97
  264. package/dist/esm/scheduling.js.map +0 -1
  265. package/dist/esm/signals.d.ts +0 -73
  266. package/dist/esm/signals.d.ts.map +0 -1
  267. package/dist/esm/signals.js +0 -614
  268. package/dist/esm/signals.js.map +0 -1
  269. package/dist/esm/utils.d.ts +0 -4
  270. package/dist/esm/utils.d.ts.map +0 -1
  271. package/dist/esm/utils.js.map +0 -1
  272. package/src/__tests__/hooks/async-computed.test.ts +0 -190
  273. package/src/__tests__/hooks/async-task.test.ts +0 -334
  274. package/src/__tests__/hooks/computed.test.ts +0 -126
  275. package/src/__tests__/hooks/context.test.ts +0 -527
  276. package/src/__tests__/hooks/nesting.test.ts +0 -303
  277. package/src/__tests__/hooks/params-and-state.test.ts +0 -168
  278. package/src/__tests__/hooks/subscription.test.ts +0 -97
  279. package/src/__tests__/signals/async.test.ts +0 -416
  280. package/src/__tests__/signals/basic.test.ts +0 -399
  281. package/src/__tests__/signals/subscription.test.ts +0 -632
  282. package/src/__tests__/signals/watcher.test.ts +0 -253
  283. package/src/__tests__/utils/builders.ts +0 -22
  284. package/src/__tests__/utils/instrumented-signals.ts +0 -291
  285. package/src/react/__tests__/react.test.tsx +0 -227
  286. package/src/scheduling.ts +0 -130
  287. package/src/signals.ts +0 -824
@@ -0,0 +1,383 @@
1
+ import { createDerivedSignal } from './derived.js';
2
+ import { CURRENT_CONSUMER, generatorResultToPromise, getSignal } from './get.js';
3
+ import { dirtySignal, dirtySignalConsumers } from './dirty.js';
4
+ import { scheduleAsyncPull } from './scheduling.js';
5
+ import { createEdge, findAndRemoveDirty } from './edge.js';
6
+ import { withScope } from './contexts.js';
7
+ import { createStateSignal } from './state.js';
8
+ import { isGeneratorResult, isPromise } from './utils/type-utils.js';
9
+ import { equalsFrom } from './utils/equals.js';
10
+ export class ReactivePromise {
11
+ _value = undefined;
12
+ _error = undefined;
13
+ _flags = 0;
14
+ _signal = undefined;
15
+ _equals;
16
+ _promise;
17
+ _pending = [];
18
+ _stateSubs = new Map();
19
+ _awaitSubs = new Map();
20
+ // Version is not really needed in a pure signal world, but when integrating
21
+ // with non-signal code, it's sometimes needed to entangle changes to the promise.
22
+ // For example, in React we need to entangle each promise immediately after it
23
+ // was used because we can't dynamically call hooks.
24
+ _version = createStateSignal(0);
25
+ static createPromise(promise, signal, initValue) {
26
+ const p = new ReactivePromise();
27
+ p._signal = signal;
28
+ p._equals = signal?.equals ?? ((a, b) => a === b);
29
+ p._initFlags(1 /* AsyncFlags.Pending */, initValue);
30
+ if (promise) {
31
+ p._setPromise(promise);
32
+ }
33
+ return p;
34
+ }
35
+ static createSubscription(subscribe, scope, opts) {
36
+ const p = new ReactivePromise();
37
+ const initValue = opts?.initValue;
38
+ let active = false;
39
+ let currentSub;
40
+ const unsubscribe = () => {
41
+ if (typeof currentSub === 'function') {
42
+ currentSub();
43
+ }
44
+ else if (currentSub !== undefined) {
45
+ currentSub.unsubscribe?.();
46
+ }
47
+ const signal = p._signal;
48
+ // Reset the signal state, preparing it for next activation
49
+ signal.subs = new Map();
50
+ signal._state = 2 /* SignalState.Dirty */;
51
+ signal.watchCount = 0;
52
+ active = false;
53
+ currentSub = undefined;
54
+ };
55
+ const state = {
56
+ get: () => p._value,
57
+ set: (value) => {
58
+ if (value !== null && typeof value === 'object' && isPromise(value)) {
59
+ p._setPromise(value);
60
+ }
61
+ else {
62
+ p._setValue(value);
63
+ }
64
+ },
65
+ setError: (error) => {
66
+ p._setError(error);
67
+ },
68
+ };
69
+ p._signal = createDerivedSignal(() => {
70
+ if (active === false) {
71
+ currentSub = subscribe(state);
72
+ active = true;
73
+ }
74
+ else if (typeof currentSub === 'function' || currentSub === undefined) {
75
+ currentSub?.();
76
+ currentSub = subscribe(state);
77
+ }
78
+ else {
79
+ currentSub.update?.();
80
+ }
81
+ return unsubscribe;
82
+ }, [], undefined, scope, opts, true);
83
+ p._equals = equalsFrom(opts?.equals);
84
+ p._initFlags(128 /* AsyncFlags.isSubscription */ | 1 /* AsyncFlags.Pending */, initValue);
85
+ return p;
86
+ }
87
+ static createTask(task, scope, opts) {
88
+ const p = new ReactivePromise();
89
+ const initValue = opts?.initValue;
90
+ p._signal = (...args) => {
91
+ return withScope(scope, () => {
92
+ const result = task(...args);
93
+ return typeof result === 'object' && result !== null && isGeneratorResult(result)
94
+ ? generatorResultToPromise(result, undefined)
95
+ : result;
96
+ });
97
+ };
98
+ p._equals = equalsFrom(opts?.equals);
99
+ p._initFlags(64 /* AsyncFlags.isRunnable */, initValue);
100
+ return p;
101
+ }
102
+ _initFlags(baseFlags, initValue) {
103
+ let flags = baseFlags;
104
+ if (initValue !== undefined) {
105
+ flags |= 8 /* AsyncFlags.Ready */;
106
+ }
107
+ this._flags = flags;
108
+ this._value = initValue;
109
+ }
110
+ _consumeFlags(flags) {
111
+ if (CURRENT_CONSUMER === undefined)
112
+ return;
113
+ if ((this._flags & 128 /* AsyncFlags.isSubscription */) !== 0) {
114
+ this._connect();
115
+ }
116
+ const ref = CURRENT_CONSUMER.ref;
117
+ const subs = this._stateSubs;
118
+ const subbedFlags = subs.get(ref) ?? 0;
119
+ subs.set(ref, subbedFlags | flags);
120
+ }
121
+ _connect() {
122
+ const signal = this._signal;
123
+ if (CURRENT_CONSUMER?.watchCount === 0) {
124
+ const { ref, computedCount, deps } = CURRENT_CONSUMER;
125
+ const prevEdge = deps.get(signal);
126
+ if (prevEdge?.consumedAt !== computedCount) {
127
+ const newEdge = createEdge(prevEdge, 0 /* EdgeType.Signal */, signal, signal.updatedCount, computedCount);
128
+ signal.subs.set(ref, newEdge);
129
+ deps.set(signal, newEdge);
130
+ }
131
+ }
132
+ else {
133
+ getSignal(signal);
134
+ }
135
+ }
136
+ _setFlags(setTrue, setFalse = 0, notify = 0) {
137
+ const prevFlags = this._flags;
138
+ const nextFlags = (prevFlags & ~setFalse) | setTrue;
139
+ const allChanged = (prevFlags ^ nextFlags) | notify;
140
+ this._flags = nextFlags;
141
+ if (allChanged === 0) {
142
+ return;
143
+ }
144
+ const subs = this._stateSubs;
145
+ for (const [signalRef, subbedFlags] of subs) {
146
+ if ((subbedFlags & allChanged) !== 0) {
147
+ const signal = signalRef.deref();
148
+ if (signal) {
149
+ dirtySignal(signal);
150
+ }
151
+ subs.delete(signalRef);
152
+ }
153
+ }
154
+ this._version.update(v => v + 1);
155
+ }
156
+ _setPending() {
157
+ this._setFlags(1 /* AsyncFlags.Pending */);
158
+ }
159
+ async _setPromise(promise) {
160
+ // Store the current promise so we can check if it's the same promise in the
161
+ // then handlers. If it's not the same promise, it means that the promise has
162
+ // been recomputed and replaced, so we should not update state.
163
+ this._promise = promise;
164
+ const flags = this._flags;
165
+ let awaitSubs = this._awaitSubs;
166
+ // If we were not already pending, we need to propagate the dirty state to any
167
+ // consumers that were added since the promise was resolved last.
168
+ if ((flags & 1 /* AsyncFlags.Pending */) === 0) {
169
+ this._setPending();
170
+ dirtySignalConsumers(awaitSubs);
171
+ this._awaitSubs = awaitSubs = new Map();
172
+ }
173
+ try {
174
+ const nextValue = await promise;
175
+ if (promise !== this._promise) {
176
+ return;
177
+ }
178
+ this._setValue(nextValue, awaitSubs);
179
+ }
180
+ catch (nextError) {
181
+ if (promise !== this._promise) {
182
+ return;
183
+ }
184
+ this._setError(nextError, awaitSubs);
185
+ }
186
+ }
187
+ _setValue(nextValue, awaitSubs = this._awaitSubs) {
188
+ let flags = this._flags;
189
+ let value = this._value;
190
+ let notifyFlags = 0;
191
+ if ((flags & 8 /* AsyncFlags.Ready */) === 0 || this._equals(value, nextValue) === false) {
192
+ this._value = value = nextValue;
193
+ notifyFlags = 16 /* AsyncFlags.Value */;
194
+ }
195
+ if (flags & 2 /* AsyncFlags.Rejected */) {
196
+ notifyFlags = 32 /* AsyncFlags.Error */;
197
+ this._error = undefined;
198
+ }
199
+ this._scheduleSubs(awaitSubs, notifyFlags !== 0);
200
+ this._setFlags(4 /* AsyncFlags.Resolved */ | 8 /* AsyncFlags.Ready */, 1 /* AsyncFlags.Pending */ | 2 /* AsyncFlags.Rejected */, notifyFlags);
201
+ for (const { ref, edge, resolve } of this._pending) {
202
+ resolve?.(value);
203
+ if (ref !== undefined) {
204
+ awaitSubs.set(ref, edge);
205
+ }
206
+ }
207
+ this._pending = [];
208
+ }
209
+ _setError(nextError, awaitSubs = this._awaitSubs) {
210
+ let error = this._error;
211
+ let notifyFlags = 0;
212
+ if (error !== nextError) {
213
+ this._error = error = nextError;
214
+ notifyFlags = 32 /* AsyncFlags.Error */;
215
+ }
216
+ this._scheduleSubs(awaitSubs, notifyFlags !== 0);
217
+ this._setFlags(2 /* AsyncFlags.Rejected */, 1 /* AsyncFlags.Pending */ | 4 /* AsyncFlags.Resolved */, notifyFlags);
218
+ for (const { ref, edge, reject } of this._pending) {
219
+ reject?.(error);
220
+ if (ref !== undefined) {
221
+ awaitSubs.set(ref, edge);
222
+ }
223
+ }
224
+ this._pending = [];
225
+ }
226
+ _scheduleSubs(awaitSubs, dirty) {
227
+ // Await subscribers that have been added since the promise was set are specifically
228
+ // subscribers that were previously notified and MaybeDirty, were removed from the
229
+ // signal, and then were checked (e.g. checkSignal was called on them) and they
230
+ // halted and added themselves back as dependencies.
231
+ //
232
+ // If the value actually changed, then these consumers are Dirty and will notify and
233
+ // schedule themselves the standard way here. If the value did not change, then the
234
+ // consumers are not notified and end up back in the same state as before the promise
235
+ // was set (because nothing changed), and instead they will be scheduled to continue
236
+ // the computation from where they left off.
237
+ const newState = dirty ? 2 /* SignalState.Dirty */ : 3 /* SignalState.MaybeDirty */;
238
+ for (const ref of awaitSubs.keys()) {
239
+ const signal = ref.deref();
240
+ if (signal === undefined) {
241
+ continue;
242
+ }
243
+ signal._state = newState;
244
+ scheduleAsyncPull(signal);
245
+ }
246
+ }
247
+ get value() {
248
+ this._consumeFlags(16 /* AsyncFlags.Value */);
249
+ return this._value;
250
+ }
251
+ get error() {
252
+ this._consumeFlags(32 /* AsyncFlags.Error */);
253
+ return this._error;
254
+ }
255
+ get isPending() {
256
+ this._consumeFlags(1 /* AsyncFlags.Pending */);
257
+ return (this._flags & 1 /* AsyncFlags.Pending */) !== 0;
258
+ }
259
+ get isRejected() {
260
+ this._consumeFlags(2 /* AsyncFlags.Rejected */);
261
+ return (this._flags & 2 /* AsyncFlags.Rejected */) !== 0;
262
+ }
263
+ get isResolved() {
264
+ this._consumeFlags(4 /* AsyncFlags.Resolved */);
265
+ return (this._flags & 4 /* AsyncFlags.Resolved */) !== 0;
266
+ }
267
+ get isReady() {
268
+ this._consumeFlags(8 /* AsyncFlags.Ready */);
269
+ return (this._flags & 8 /* AsyncFlags.Ready */) !== 0;
270
+ }
271
+ get isSettled() {
272
+ this._consumeFlags(6 /* AsyncFlags.Settled */);
273
+ return (this._flags & 6 /* AsyncFlags.Settled */) !== 0;
274
+ }
275
+ // Aliases for backwards compatibility (TODO: Figure out how to do this better)
276
+ get data() {
277
+ return this.value;
278
+ }
279
+ get isFetching() {
280
+ return this.isPending;
281
+ }
282
+ get isSuccess() {
283
+ return this.isResolved;
284
+ }
285
+ get isError() {
286
+ return this.isRejected;
287
+ }
288
+ get isFetched() {
289
+ return this.isSettled;
290
+ }
291
+ run(...args) {
292
+ if ((this._flags & 64 /* AsyncFlags.isRunnable */) === 0) {
293
+ throw new Error('ReactivePromise is not runnable, make sure you used `task` to create this promise');
294
+ }
295
+ const signal = this._signal;
296
+ this._setPromise(signal(...args));
297
+ return this;
298
+ }
299
+ rerun() {
300
+ const { _signal: signal } = this;
301
+ if (!signal) {
302
+ throw new Error('ReactivePromise is not associated with a signal');
303
+ }
304
+ dirtySignal(signal);
305
+ }
306
+ then(onfulfilled, onrejected) {
307
+ const flags = this._flags;
308
+ // Create a new Promise that will be returned
309
+ return new Promise((resolve, reject) => {
310
+ let ref, edge;
311
+ if (CURRENT_CONSUMER !== undefined) {
312
+ if ((flags & 128 /* AsyncFlags.isSubscription */) !== 0) {
313
+ this._connect();
314
+ }
315
+ ref = CURRENT_CONSUMER.ref;
316
+ const prevEdge = this._awaitSubs.get(ref) ?? findAndRemoveDirty(CURRENT_CONSUMER, this);
317
+ edge = createEdge(prevEdge, 1 /* EdgeType.Promise */, this, -1, CURRENT_CONSUMER.computedCount);
318
+ }
319
+ // Create wrapper functions that will call the original callbacks and then resolve/reject the new Promise
320
+ const wrappedFulfilled = onfulfilled
321
+ ? (value) => {
322
+ try {
323
+ const result = onfulfilled(value);
324
+ resolve(result);
325
+ }
326
+ catch (error) {
327
+ reject(error);
328
+ }
329
+ }
330
+ : resolve;
331
+ const wrappedRejected = onrejected
332
+ ? (reason) => {
333
+ try {
334
+ const result = onrejected(reason);
335
+ resolve(result);
336
+ }
337
+ catch (error) {
338
+ reject(error);
339
+ }
340
+ }
341
+ : reject;
342
+ if (flags & 1 /* AsyncFlags.Pending */) {
343
+ this._pending.push({ ref, edge, resolve: wrappedFulfilled, reject: wrappedRejected });
344
+ }
345
+ else {
346
+ if (flags & 4 /* AsyncFlags.Resolved */) {
347
+ wrappedFulfilled(this._value);
348
+ }
349
+ else if (flags & 2 /* AsyncFlags.Rejected */) {
350
+ wrappedRejected(this._error);
351
+ }
352
+ if (ref) {
353
+ this._awaitSubs.set(ref, edge);
354
+ }
355
+ }
356
+ });
357
+ }
358
+ catch(onrejected) {
359
+ return this.then(null, onrejected);
360
+ }
361
+ finally(onfinally) {
362
+ return this.then(value => {
363
+ onfinally?.();
364
+ return value;
365
+ }, reason => {
366
+ onfinally?.();
367
+ throw reason;
368
+ });
369
+ }
370
+ get [Symbol.toStringTag]() {
371
+ return 'ReactivePromise';
372
+ }
373
+ }
374
+ export function isReactivePromise(obj) {
375
+ return obj instanceof ReactivePromise && (obj['_flags'] & (128 /* AsyncFlags.isSubscription */ & 64 /* AsyncFlags.isRunnable */)) === 0;
376
+ }
377
+ export function isReactiveTask(obj) {
378
+ return obj instanceof ReactivePromise && (obj['_flags'] & 64 /* AsyncFlags.isRunnable */) !== 0;
379
+ }
380
+ export function isReactiveSubscription(obj) {
381
+ return obj instanceof ReactivePromise && (obj['_flags'] & 128 /* AsyncFlags.isSubscription */) !== 0;
382
+ }
383
+ //# sourceMappingURL=async.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async.js","sourceRoot":"","sources":["../../../src/internals/async.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { DerivedSignal } from './derived.js';
2
+ export declare function watchSignal(signal: DerivedSignal<any, any>): void;
3
+ export declare function unwatchSignal(signal: DerivedSignal<any, any>, count?: number): void;
4
+ //# sourceMappingURL=connect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../../src/internals/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAkB,MAAM,cAAc,CAAC;AAG7D,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAiBjE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,SAAI,QAkBvE"}
@@ -0,0 +1,33 @@
1
+ import { isSubscription } from './derived.js';
2
+ import { checkSignal } from './get.js';
3
+ export function watchSignal(signal) {
4
+ const { watchCount } = signal;
5
+ const newWatchCount = watchCount + 1;
6
+ signal.watchCount = newWatchCount;
7
+ // If > 0, already watching, return
8
+ if (watchCount > 0)
9
+ return;
10
+ for (const dep of signal.deps.keys()) {
11
+ watchSignal(dep);
12
+ }
13
+ if (isSubscription(signal)) {
14
+ // Bootstrap the subscription
15
+ checkSignal(signal);
16
+ }
17
+ }
18
+ export function unwatchSignal(signal, count = 1) {
19
+ const { watchCount } = signal;
20
+ const newWatchCount = Math.max(watchCount - count, 0);
21
+ signal.watchCount = newWatchCount;
22
+ if (newWatchCount > 0) {
23
+ return;
24
+ }
25
+ for (const dep of signal.deps.keys()) {
26
+ unwatchSignal(dep);
27
+ }
28
+ if (isSubscription(signal)) {
29
+ // teardown the subscription
30
+ signal.value?.();
31
+ }
32
+ }
33
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/internals/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,cAAc,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,UAAU,WAAW,CAAC,MAA+B;IACzD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAC9B,MAAM,aAAa,GAAG,UAAU,GAAG,CAAC,CAAC;IAErC,MAAM,CAAC,UAAU,GAAG,aAAa,CAAC;IAElC,mCAAmC;IACnC,IAAI,UAAU,GAAG,CAAC;QAAE,OAAO;IAE3B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACrC,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,6BAA6B;QAC7B,WAAW,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAA+B,EAAE,KAAK,GAAG,CAAC;IACtE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;IAEtD,MAAM,CAAC,UAAU,GAAG,aAAa,CAAC;IAElC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACrC,aAAa,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,4BAA4B;QAC5B,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { DerivedSignal } from './derived.js';
2
+ export declare let CURRENT_CONSUMER: DerivedSignal<any, any> | undefined;
3
+ export declare let IS_WATCHING: boolean;
4
+ export declare const setIsWatching: (isWatching: boolean) => void;
5
+ export declare const setCurrentConsumer: (consumer: DerivedSignal<any, any> | undefined) => void;
6
+ //# sourceMappingURL=consumer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../../../src/internals/consumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,eAAO,IAAI,gBAAgB,EAAE,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;AAEjE,eAAO,IAAI,WAAW,SAAQ,CAAC;AAE/B,eAAO,MAAM,aAAa,eAAgB,OAAO,SAEhD,CAAC;AAEF,eAAO,MAAM,kBAAkB,aAAc,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,SAE/E,CAAC"}
@@ -0,0 +1,9 @@
1
+ export let CURRENT_CONSUMER;
2
+ export let IS_WATCHING = false;
3
+ export const setIsWatching = (isWatching) => {
4
+ IS_WATCHING = isWatching;
5
+ };
6
+ export const setCurrentConsumer = (consumer) => {
7
+ CURRENT_CONSUMER = consumer;
8
+ };
9
+ //# sourceMappingURL=consumer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consumer.js","sourceRoot":"","sources":["../../../src/internals/consumer.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,IAAI,gBAAqD,CAAC;AAEjE,MAAM,CAAC,IAAI,WAAW,GAAG,KAAK,CAAC;AAE/B,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,UAAmB,EAAE,EAAE;IACnD,WAAW,GAAG,UAAU,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAA6C,EAAE,EAAE;IAClF,gBAAgB,GAAG,QAAQ,CAAC;AAC9B,CAAC,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { SignalOptionsWithInit } from '../types.js';
2
+ import { DerivedSignal } from './derived.js';
3
+ export declare const CONTEXT_KEY: unique symbol;
4
+ export type Context<T> = {
5
+ defaultValue: T;
6
+ };
7
+ export type ContextPair<T extends unknown[]> = {
8
+ [K in keyof T]: [Context<T[K]>, NoInfer<T[K]>];
9
+ };
10
+ export declare class ContextImpl<T> {
11
+ readonly defaultValue: T;
12
+ _key: symbol;
13
+ _description: string;
14
+ constructor(defaultValue: T, desc?: string);
15
+ }
16
+ export declare const createContext: <T>(initialValue: T, description?: string) => Context<T>;
17
+ export declare class SignalScope {
18
+ constructor(contexts: [ContextImpl<unknown>, unknown][], parent?: SignalScope);
19
+ private parentScope?;
20
+ private contexts;
21
+ private children;
22
+ private signals;
23
+ getChild(contexts: [ContextImpl<unknown>, unknown][]): SignalScope;
24
+ getContext<T>(_context: Context<T>): T | undefined;
25
+ get<T, Args extends unknown[]>(fn: (...args: Args) => T, args: Args, opts?: Partial<SignalOptionsWithInit<T, Args>>): DerivedSignal<T, Args>;
26
+ }
27
+ export declare let ROOT_SCOPE: SignalScope;
28
+ export declare const clearRootScope: () => void;
29
+ export declare const getCurrentScope: () => SignalScope;
30
+ export declare function withContexts<C extends unknown[], U>(contexts: [...ContextPair<C>], fn: () => U): U;
31
+ export declare const withScope: <T>(scope: SignalScope, fn: () => T) => T;
32
+ export declare const useContext: <T>(context: Context<T>) => T;
33
+ //# sourceMappingURL=contexts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contexts.d.ts","sourceRoot":"","sources":["../../../src/internals/contexts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,aAAa,EAAuB,MAAM,cAAc,CAAC;AAIlE,eAAO,MAAM,WAAW,eAA8B,CAAC;AAEvD,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI;IACvB,YAAY,EAAE,CAAC,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI;KAC5C,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/C,CAAC;AAIF,qBAAa,WAAW,CAAC,CAAC;aAKN,YAAY,EAAE,CAAC;IAJjC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;gBAGH,YAAY,EAAE,CAAC,EAC/B,IAAI,CAAC,EAAE,MAAM;CAKhB;AAED,eAAO,MAAM,aAAa,GAAI,CAAC,gBAAgB,CAAC,gBAAgB,MAAM,KAAG,OAAO,CAAC,CAAC,CAEjF,CAAC;AAEF,qBAAa,WAAW;gBACV,QAAQ,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW;IAS7E,OAAO,CAAC,WAAW,CAAC,CAA0B;IAC9C,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,OAAO,CAAgD;IAE/D,QAAQ,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE;IAapD,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS;IAMlD,GAAG,CAAC,CAAC,EAAE,IAAI,SAAS,OAAO,EAAE,EAC3B,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,EACxB,IAAI,EAAE,IAAI,EACV,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAC7C,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC;CAY1B;AAED,eAAO,IAAI,UAAU,aAAsB,CAAC;AAE5C,eAAO,MAAM,cAAc,YAE1B,CAAC;AAIF,eAAO,MAAM,eAAe,QAAO,WAElC,CAAC;AAEF,wBAAgB,YAAY,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAUlG;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,WAAW,MAAM,MAAM,CAAC,MAS3D,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,CAAC,WAAW,OAAO,CAAC,CAAC,CAAC,KAAG,CAUnD,CAAC"}
@@ -0,0 +1,92 @@
1
+ import { getFrameworkScope } from '../config.js';
2
+ import { createDerivedSignal } from './derived.js';
3
+ import { CURRENT_CONSUMER } from './get.js';
4
+ import { hashReactiveFn, hashValue } from './utils/hash.js';
5
+ export const CONTEXT_KEY = Symbol('signalium:context');
6
+ let CONTEXT_ID = 0;
7
+ export class ContextImpl {
8
+ defaultValue;
9
+ _key;
10
+ _description;
11
+ constructor(defaultValue, desc) {
12
+ this.defaultValue = defaultValue;
13
+ this._description = desc ?? `context:${CONTEXT_ID++}`;
14
+ this._key = Symbol(this._description);
15
+ }
16
+ }
17
+ export const createContext = (initialValue, description) => {
18
+ return new ContextImpl(initialValue, description);
19
+ };
20
+ export class SignalScope {
21
+ constructor(contexts, parent) {
22
+ this.parentScope = parent;
23
+ this.contexts = Object.create(parent?.contexts || null);
24
+ for (const [context, value] of contexts) {
25
+ this.contexts[context._key] = value;
26
+ }
27
+ }
28
+ parentScope = undefined;
29
+ contexts;
30
+ children = new Map();
31
+ signals = new Map();
32
+ getChild(contexts) {
33
+ const key = hashValue(contexts);
34
+ let child = this.children.get(key);
35
+ if (child === undefined) {
36
+ child = new SignalScope(contexts, this);
37
+ this.children.set(key, child);
38
+ }
39
+ return child;
40
+ }
41
+ getContext(_context) {
42
+ const context = _context;
43
+ return this.contexts[context._key];
44
+ }
45
+ get(fn, args, opts) {
46
+ const paramKey = opts?.paramKey?.(...args);
47
+ const key = hashReactiveFn(fn, paramKey ? [paramKey] : args);
48
+ let signal = this.signals.get(key);
49
+ if (signal === undefined) {
50
+ signal = createDerivedSignal(fn, args, key, this, opts);
51
+ this.signals.set(key, signal);
52
+ }
53
+ return signal;
54
+ }
55
+ }
56
+ export let ROOT_SCOPE = new SignalScope([]);
57
+ export const clearRootScope = () => {
58
+ ROOT_SCOPE = new SignalScope([]);
59
+ };
60
+ let OVERRIDE_SCOPE;
61
+ export const getCurrentScope = () => {
62
+ return OVERRIDE_SCOPE ?? CURRENT_CONSUMER?.scope ?? getFrameworkScope() ?? ROOT_SCOPE;
63
+ };
64
+ export function withContexts(contexts, fn) {
65
+ const prevScope = OVERRIDE_SCOPE;
66
+ const currentScope = getCurrentScope();
67
+ try {
68
+ OVERRIDE_SCOPE = currentScope.getChild(contexts);
69
+ return fn();
70
+ }
71
+ finally {
72
+ OVERRIDE_SCOPE = prevScope;
73
+ }
74
+ }
75
+ export const withScope = (scope, fn) => {
76
+ const prevScope = OVERRIDE_SCOPE;
77
+ try {
78
+ OVERRIDE_SCOPE = scope;
79
+ return fn();
80
+ }
81
+ finally {
82
+ OVERRIDE_SCOPE = prevScope;
83
+ }
84
+ };
85
+ export const useContext = (context) => {
86
+ const scope = OVERRIDE_SCOPE ?? CURRENT_CONSUMER?.scope ?? getFrameworkScope();
87
+ if (scope === undefined) {
88
+ throw new Error('useContext must be used within a signal hook, a withContext, or within a framework-specific context provider.');
89
+ }
90
+ return scope.getContext(context) ?? context.defaultValue;
91
+ };
92
+ //# sourceMappingURL=contexts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contexts.js","sourceRoot":"","sources":["../../../src/internals/contexts.ts"],"names":[],"mappings":"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"}