@fluixi/reactive 1.0.0-alpha.82 → 1.0.0-alpha.84

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 (169) hide show
  1. package/README.md +4 -0
  2. package/dist/cdn/reactive.cjs +2673 -1
  3. package/dist/cdn/reactive.global.js +2 -1
  4. package/dist/cdn/reactive.mjs +2657 -1
  5. package/dist/cdn/signal.cjs +299 -1
  6. package/dist/cdn/signal.d.ts +1 -1
  7. package/dist/cdn/signal.global.js +2 -1
  8. package/dist/cdn/signal.js +1 -1
  9. package/dist/cdn/signal.mjs +276 -1
  10. package/dist/index.cjs +2673 -1
  11. package/dist/index.mjs +2657 -1
  12. package/dist/lib/index.cjs +2674 -1
  13. package/dist/lib/index.js +1 -1
  14. package/dist/lib/index.mjs +2659 -1
  15. package/dist/lib/observable/index.cjs +386 -1
  16. package/dist/lib/observable/index.mjs +364 -1
  17. package/dist/lib/observable/observable.cjs +384 -1
  18. package/dist/lib/observable/observable.d.ts +0 -137
  19. package/dist/lib/observable/observable.d.ts.map +1 -1
  20. package/dist/lib/observable/observable.js +0 -71
  21. package/dist/lib/observable/observable.mjs +361 -1
  22. package/dist/lib/observable/subscription.cjs +180 -1
  23. package/dist/lib/observable/subscription.d.ts +0 -12
  24. package/dist/lib/observable/subscription.d.ts.map +1 -1
  25. package/dist/lib/observable/subscription.js +0 -12
  26. package/dist/lib/observable/subscription.mjs +157 -1
  27. package/dist/lib/observable/types.cjs +18 -1
  28. package/dist/lib/observable/types.d.ts.map +1 -1
  29. package/dist/lib/predicates.cjs +44 -1
  30. package/dist/lib/predicates.d.ts +2 -2
  31. package/dist/lib/predicates.js +2 -2
  32. package/dist/lib/predicates.mjs +23 -1
  33. package/dist/lib/signal/api.cjs +571 -1
  34. package/dist/lib/signal/api.d.ts +211 -1
  35. package/dist/lib/signal/api.d.ts.map +1 -1
  36. package/dist/lib/signal/api.js +207 -12
  37. package/dist/lib/signal/api.mjs +548 -1
  38. package/dist/lib/signal/cached-resource.cjs +672 -1
  39. package/dist/lib/signal/cached-resource.d.ts +28 -16
  40. package/dist/lib/signal/cached-resource.d.ts.map +1 -1
  41. package/dist/lib/signal/cached-resource.js +35 -29
  42. package/dist/lib/signal/cached-resource.mjs +650 -1
  43. package/dist/lib/signal/graph/children.cjs +325 -1
  44. package/dist/lib/signal/graph/children.js +1 -1
  45. package/dist/lib/signal/graph/children.mjs +302 -1
  46. package/dist/lib/signal/graph/compat.cjs +578 -1
  47. package/dist/lib/signal/graph/compat.d.ts +13 -13
  48. package/dist/lib/signal/graph/compat.d.ts.map +1 -1
  49. package/dist/lib/signal/graph/compat.js +51 -32
  50. package/dist/lib/signal/graph/compat.mjs +556 -1
  51. package/dist/lib/signal/graph/core.cjs +295 -1
  52. package/dist/lib/signal/graph/core.d.ts +28 -24
  53. package/dist/lib/signal/graph/core.d.ts.map +1 -1
  54. package/dist/lib/signal/graph/core.js +45 -31
  55. package/dist/lib/signal/graph/core.mjs +273 -1
  56. package/dist/lib/signal/graph/debounced.cjs +668 -1
  57. package/dist/lib/signal/graph/debounced.d.ts +5 -5
  58. package/dist/lib/signal/graph/debounced.d.ts.map +1 -1
  59. package/dist/lib/signal/graph/debounced.js +5 -5
  60. package/dist/lib/signal/graph/debounced.mjs +645 -1
  61. package/dist/lib/signal/graph/derived.cjs +496 -1
  62. package/dist/lib/signal/graph/derived.d.ts +1 -1
  63. package/dist/lib/signal/graph/derived.js +1 -1
  64. package/dist/lib/signal/graph/derived.mjs +473 -1
  65. package/dist/lib/signal/graph/detect.cjs +66 -1
  66. package/dist/lib/signal/graph/detect.mjs +45 -1
  67. package/dist/lib/signal/graph/error-boundary.cjs +301 -1
  68. package/dist/lib/signal/graph/error-boundary.js +3 -3
  69. package/dist/lib/signal/graph/error-boundary.mjs +278 -1
  70. package/dist/lib/signal/graph/index.cjs +305 -1
  71. package/dist/lib/signal/graph/index.d.ts +7 -6
  72. package/dist/lib/signal/graph/index.d.ts.map +1 -1
  73. package/dist/lib/signal/graph/index.js +7 -6
  74. package/dist/lib/signal/graph/index.mjs +283 -1
  75. package/dist/lib/signal/graph/observe.cjs +163 -0
  76. package/dist/lib/signal/graph/observe.d.ts +141 -0
  77. package/dist/lib/signal/graph/observe.d.ts.map +1 -0
  78. package/dist/lib/signal/graph/observe.js +149 -0
  79. package/dist/lib/signal/graph/observe.mjs +140 -0
  80. package/dist/lib/signal/graph/resource.cjs +620 -1
  81. package/dist/lib/signal/graph/resource.d.ts +1 -1
  82. package/dist/lib/signal/graph/resource.js +7 -8
  83. package/dist/lib/signal/graph/resource.mjs +597 -1
  84. package/dist/lib/signal/graph/runtime.cjs +501 -1
  85. package/dist/lib/signal/graph/runtime.d.ts +9 -9
  86. package/dist/lib/signal/graph/runtime.d.ts.map +1 -1
  87. package/dist/lib/signal/graph/runtime.js +56 -37
  88. package/dist/lib/signal/graph/runtime.mjs +478 -1
  89. package/dist/lib/signal/graph/signal-next.cjs +1208 -1
  90. package/dist/lib/signal/graph/signal-next.d.ts +5 -5
  91. package/dist/lib/signal/graph/signal-next.d.ts.map +1 -1
  92. package/dist/lib/signal/graph/signal-next.js +14 -12
  93. package/dist/lib/signal/graph/signal-next.mjs +1186 -1
  94. package/dist/lib/signal/graph/ssr-hooks.cjs +60 -1
  95. package/dist/lib/signal/graph/ssr-hooks.d.ts +6 -7
  96. package/dist/lib/signal/graph/ssr-hooks.d.ts.map +1 -1
  97. package/dist/lib/signal/graph/ssr-hooks.js +6 -7
  98. package/dist/lib/signal/graph/ssr-hooks.mjs +39 -1
  99. package/dist/lib/signal/graph/state.cjs +72 -1
  100. package/dist/lib/signal/graph/state.d.ts +43 -10
  101. package/dist/lib/signal/graph/state.d.ts.map +1 -1
  102. package/dist/lib/signal/graph/state.js +83 -21
  103. package/dist/lib/signal/graph/state.mjs +49 -1
  104. package/dist/lib/signal/graph/suspense.cjs +301 -1
  105. package/dist/lib/signal/graph/suspense.js +4 -4
  106. package/dist/lib/signal/graph/suspense.mjs +278 -1
  107. package/dist/lib/signal/index-legacy.cjs +2540 -1
  108. package/dist/lib/signal/index-legacy.d.ts +1 -1
  109. package/dist/lib/signal/index-legacy.js +1 -1
  110. package/dist/lib/signal/index-legacy.mjs +2518 -1
  111. package/dist/lib/signal/index.cjs +1275 -1
  112. package/dist/lib/signal/index.d.ts +5 -2
  113. package/dist/lib/signal/index.d.ts.map +1 -1
  114. package/dist/lib/signal/index.js +8 -3
  115. package/dist/lib/signal/index.mjs +1253 -1
  116. package/dist/lib/signal/list.cjs +549 -1
  117. package/dist/lib/signal/list.d.ts +5 -5
  118. package/dist/lib/signal/list.js +10 -10
  119. package/dist/lib/signal/list.mjs +526 -1
  120. package/dist/lib/signal/resource-api.cjs +626 -1
  121. package/dist/lib/signal/resource-api.d.ts +5 -5
  122. package/dist/lib/signal/resource-api.js +5 -5
  123. package/dist/lib/signal/resource-api.mjs +603 -1
  124. package/dist/lib/signal/signal.cjs +2023 -1
  125. package/dist/lib/signal/signal.d.ts +4 -4
  126. package/dist/lib/signal/signal.d.ts.map +1 -1
  127. package/dist/lib/signal/signal.js +22 -23
  128. package/dist/lib/signal/signal.mjs +2000 -1
  129. package/dist/lib/signal/types.cjs +38 -1
  130. package/dist/lib/signal/types.d.ts.map +1 -1
  131. package/dist/lib/signal/types.js +2 -2
  132. package/dist/lib/signal/types.mjs +17 -1
  133. package/dist/lib/signal/utilities.cjs +1012 -1
  134. package/dist/lib/signal/utilities.d.ts +0 -108
  135. package/dist/lib/signal/utilities.d.ts.map +1 -1
  136. package/dist/lib/signal/utilities.js +0 -158
  137. package/dist/lib/signal/utilities.mjs +990 -1
  138. package/dist/lib/store/api.cjs +612 -1
  139. package/dist/lib/store/api.d.ts +33 -0
  140. package/dist/lib/store/api.d.ts.map +1 -1
  141. package/dist/lib/store/api.js +41 -8
  142. package/dist/lib/store/api.mjs +596 -1
  143. package/dist/lib/store/index.cjs +691 -1
  144. package/dist/lib/store/index.js +1 -1
  145. package/dist/lib/store/index.mjs +676 -1
  146. package/dist/lib/store/setter.types.cjs +18 -1
  147. package/dist/lib/store/setter.types.d.ts +43 -3
  148. package/dist/lib/store/setter.types.d.ts.map +1 -1
  149. package/dist/lib/store/store.cjs +658 -1
  150. package/dist/lib/store/store.d.ts +72 -0
  151. package/dist/lib/store/store.d.ts.map +1 -1
  152. package/dist/lib/store/store.js +294 -11
  153. package/dist/lib/store/store.mjs +644 -1
  154. package/dist/lib/store/types.cjs +18 -1
  155. package/dist/lib/store/types.d.ts +1 -1
  156. package/dist/lib/store/types.d.ts.map +1 -1
  157. package/dist/lib/store/utils.cjs +43 -1
  158. package/dist/lib/store/utils.d.ts +1 -1
  159. package/dist/lib/store/utils.js +1 -1
  160. package/dist/lib/store/utils.mjs +22 -1
  161. package/dist/lib/subject.cjs +450 -1
  162. package/dist/lib/subject.js +3 -91
  163. package/dist/lib/subject.mjs +427 -1
  164. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  165. package/dist/version.generated.cjs +27 -1
  166. package/dist/version.generated.d.ts +1 -1
  167. package/dist/version.generated.js +2 -2
  168. package/dist/version.generated.mjs +7 -1
  169. package/package.json +5 -4
@@ -1,9 +1,21 @@
1
1
  /**
2
- * createCachedResource reactive resource with TTL-based caching.
2
+ * createCachedResource: a reactive resource with TTL-based caching.
3
3
  *
4
4
  * Fetches once and returns the cached result for subsequent reads within the
5
5
  * TTL window. After the TTL expires the next read triggers a re-fetch.
6
6
  *
7
+ * It runs on the live graph, as of this change. It used to build on `./signal.js`,
8
+ * which tracks its current consumer in a module-level `Listener` while everything on
9
+ * the default entry tracks through `G.consumer`. The two never saw each other, so
10
+ * `createEffect(() => data())` subscribed to nothing and a binding kept whatever it
11
+ * first rendered, which on an initial load is the loading state. `cross-graph.spec.ts`
12
+ * holds the general shape of that hazard; this file is no longer an instance of it.
13
+ *
14
+ * Suspense needs no bookkeeping here. The accessor throws the pending promise and the
15
+ * runtime's suspend handler finds the nearest boundary from the effect that was
16
+ * reading, which is what `graph/resource.ts` relies on too. The manual increment and
17
+ * decrement against a lazily-resolved context went with the port.
18
+ *
7
19
  * Two forms (mirrors createResource):
8
20
  *
9
21
  * // 1. no reactive source
@@ -20,27 +32,27 @@
20
32
  * );
21
33
  *
22
34
  * Options:
23
- * ttl cache lifetime in ms. Default: Infinity (manual invalidate only)
24
- * name cache namespace. If omitted, each call-site gets its own isolated cache.
25
- * staleWhileRevalidate when true (default), show stale data while background-fetching.
35
+ * ttl: cache lifetime in ms. Default: Infinity (manual invalidate only)
36
+ * name: cache namespace. If omitted, each call-site gets its own isolated cache.
37
+ * staleWhileRevalidate, when true (default), show stale data while background-fetching.
26
38
  * When false, show a loading state during revalidation.
27
39
  *
28
40
  * Resource shape (same as createResource):
29
- * data() current value (throws pending promise during initial load for Suspense)
30
- * data.loading true during initial load
31
- * data.latest value without throwing
32
- * data.error last error
33
- * data.stale true when showing stale data during background revalidation
41
+ * data(): current value (throws pending promise during initial load for Suspense)
42
+ * data.loading: true during initial load
43
+ * data.latest: value without throwing
44
+ * data.error: last error
45
+ * data.stale: true when showing stale data during background revalidation
34
46
  *
35
47
  * Actions:
36
- * refetch() force re-fetch regardless of TTL, keeps showing current value while loading
37
- * invalidate() delete cache entry and re-fetch (shows loading on next read)
48
+ * refetch(): force re-fetch regardless of TTL, keeps showing current value while loading
49
+ * invalidate(): delete cache entry and re-fetch (shows loading on next read)
38
50
  */
39
- import { type Setter, type Resource } from './signal.js';
51
+ import type { Setter, Resource } from './signal.js';
40
52
  export interface CachedResourceOptions {
41
53
  /**
42
54
  * Cache lifetime in milliseconds.
43
- * Default: `Infinity` data lives until `invalidate()` is called.
55
+ * Default: `Infinity`, data lives until `invalidate()` is called.
44
56
  */
45
57
  ttl?: number;
46
58
  /**
@@ -52,7 +64,7 @@ export interface CachedResourceOptions {
52
64
  /**
53
65
  * When `true` (default), stale data is returned immediately while a
54
66
  * background re-fetch runs. The resource stays in `state='ready'` and
55
- * `stale=true` during revalidation no loading skeleton.
67
+ * `stale=true` during revalidation, no loading skeleton.
56
68
  *
57
69
  * When `false`, a foreground re-fetch is triggered that sets
58
70
  * `state='refreshing'` (data is still visible but `loading=true`).
@@ -74,11 +86,11 @@ export type CachedResourceReturn<T> = [
74
86
  }
75
87
  ];
76
88
  /**
77
- * No-source overload fetch is not keyed by any reactive value.
89
+ * No-source overload: fetch is not keyed by any reactive value.
78
90
  */
79
91
  export declare function createCachedResource<T>(fetcher: () => Promise<T> | T, options?: CachedResourceOptions): CachedResourceReturn<T>;
80
92
  /**
81
- * With-source overload fetch re-runs whenever the source accessor returns a
93
+ * With-source overload: fetch re-runs whenever the source accessor returns a
82
94
  * new value (falsy source suspends the fetch, same as `createResource`).
83
95
  */
84
96
  export declare function createCachedResource<T, S>(source: () => S | false | null | undefined, fetcher: (key: S) => Promise<T> | T, options?: CachedResourceOptions): CachedResourceReturn<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"cached-resource.d.ts","sourceRoot":"","sources":["../../../src/lib/signal/cached-resource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EASL,KAAK,MAAM,EACX,KAAK,QAAQ,EAEd,MAAM,aAAa,CAAC;AAgBrB,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG;IAC5C,oEAAoE;IACpE,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI;IACpC,cAAc,CAAC,CAAC,CAAC;IACjB;QACE,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QAC9B,kEAAkE;QAClE,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,4EAA4E;QAC5E,UAAU,EAAE,MAAM,IAAI,CAAC;KACxB;CACF,CAAC;AAQF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAC7B,OAAO,CAAC,EAAE,qBAAqB,GAC9B,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAE3B;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,CAAC,EACvC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,EAC1C,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EACnC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAoP3B;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAK/D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAG9C"}
1
+ {"version":3,"file":"cached-resource.d.ts","sourceRoot":"","sources":["../../../src/lib/signal/cached-resource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAYH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAiB,MAAM,aAAa,CAAC;AAgBnE,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG;IAC5C,oEAAoE;IACpE,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI;IACpC,cAAc,CAAC,CAAC,CAAC;IACjB;QACE,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QAC9B,kEAAkE;QAClE,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,4EAA4E;QAC5E,UAAU,EAAE,MAAM,IAAI,CAAC;KACxB;CACF,CAAC;AAUF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAC7B,OAAO,CAAC,EAAE,qBAAqB,GAC9B,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAE3B;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,CAAC,EACvC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,EAC1C,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EACnC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAwO3B;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAK/D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAG9C"}
@@ -1,9 +1,21 @@
1
1
  /**
2
- * createCachedResource reactive resource with TTL-based caching.
2
+ * createCachedResource: a reactive resource with TTL-based caching.
3
3
  *
4
4
  * Fetches once and returns the cached result for subsequent reads within the
5
5
  * TTL window. After the TTL expires the next read triggers a re-fetch.
6
6
  *
7
+ * It runs on the live graph, as of this change. It used to build on `./signal.js`,
8
+ * which tracks its current consumer in a module-level `Listener` while everything on
9
+ * the default entry tracks through `G.consumer`. The two never saw each other, so
10
+ * `createEffect(() => data())` subscribed to nothing and a binding kept whatever it
11
+ * first rendered, which on an initial load is the loading state. `cross-graph.spec.ts`
12
+ * holds the general shape of that hazard; this file is no longer an instance of it.
13
+ *
14
+ * Suspense needs no bookkeeping here. The accessor throws the pending promise and the
15
+ * runtime's suspend handler finds the nearest boundary from the effect that was
16
+ * reading, which is what `graph/resource.ts` relies on too. The manual increment and
17
+ * decrement against a lazily-resolved context went with the port.
18
+ *
7
19
  * Two forms (mirrors createResource):
8
20
  *
9
21
  * // 1. no reactive source
@@ -20,27 +32,31 @@
20
32
  * );
21
33
  *
22
34
  * Options:
23
- * ttl cache lifetime in ms. Default: Infinity (manual invalidate only)
24
- * name cache namespace. If omitted, each call-site gets its own isolated cache.
25
- * staleWhileRevalidate when true (default), show stale data while background-fetching.
35
+ * ttl: cache lifetime in ms. Default: Infinity (manual invalidate only)
36
+ * name: cache namespace. If omitted, each call-site gets its own isolated cache.
37
+ * staleWhileRevalidate, when true (default), show stale data while background-fetching.
26
38
  * When false, show a loading state during revalidation.
27
39
  *
28
40
  * Resource shape (same as createResource):
29
- * data() current value (throws pending promise during initial load for Suspense)
30
- * data.loading true during initial load
31
- * data.latest value without throwing
32
- * data.error last error
33
- * data.stale true when showing stale data during background revalidation
41
+ * data(): current value (throws pending promise during initial load for Suspense)
42
+ * data.loading: true during initial load
43
+ * data.latest: value without throwing
44
+ * data.error: last error
45
+ * data.stale: true when showing stale data during background revalidation
34
46
  *
35
47
  * Actions:
36
- * refetch() force re-fetch regardless of TTL, keeps showing current value while loading
37
- * invalidate() delete cache entry and re-fetch (shows loading on next read)
48
+ * refetch(): force re-fetch regardless of TTL, keeps showing current value while loading
49
+ * invalidate(): delete cache entry and re-fetch (shows loading on next read)
38
50
  */
39
- import { createSignal, createEffect, onCleanup, batch, untrack, useContext, getSuspenseContext, trackResourcePromise, } from './signal.js';
51
+ import { createSignal, createEffect, onCleanup, batch, untrack, } from './graph/compat.js';
52
+ // Graph-agnostic SSR hooks, the same ones graph/resource.ts uses.
53
+ import { trackResourcePromise } from './graph/ssr-hooks.js';
40
54
  const ttlCache = new Map();
41
55
  const inflight = new Map();
42
56
  let _autoId = 0;
43
- // ── Symbol constants (must match signal.ts) ───────────────────────────────────
57
+ // ── Brand symbols ─────────────────────────────────────────────────────────────
58
+ // Registry symbols, so every copy of every graph agrees on them without importing
59
+ // anything. graph/resource.ts stamps a resource with the same two.
44
60
  const $SIGNAL = Symbol.for('signal');
45
61
  const $RESOURCE = Symbol.for('resource');
46
62
  export function createCachedResource(sourceOrFetcher, fetcherOrOptions, opts = {}) {
@@ -54,7 +70,7 @@ export function createCachedResource(sourceOrFetcher, fetcherOrOptions, opts = {
54
70
  options = opts;
55
71
  }
56
72
  else {
57
- // No source treat the first arg as fetcher, source = () => true
73
+ // No source: treat the first arg as fetcher, source = () => true
58
74
  sourceFn = () => true;
59
75
  fetchFn = sourceOrFetcher;
60
76
  options = fetcherOrOptions ?? opts;
@@ -97,12 +113,9 @@ export function createCachedResource(sourceOrFetcher, fetcherOrOptions, opts = {
97
113
  if (!background) {
98
114
  trackResourcePromise(promise); // server async SSR: collect & await
99
115
  setPendingP(promise);
100
- // Register with nearest Suspense boundary for initial loads.
101
- const suspCtx = _SuspenseContext && useContext(_SuspenseContext);
102
- if (suspCtx) {
103
- suspCtx.increment();
104
- promise.finally(() => suspCtx.decrement());
105
- }
116
+ // No boundary bookkeeping here. The accessor throws the pending promise, and
117
+ // the runtime's suspend handler finds the nearest boundary from the effect that
118
+ // was reading. graph/resource.ts leaves it to the same path.
106
119
  }
107
120
  promise.then((v) => { if (!isCancelled())
108
121
  settle(v, background); }, (e) => { if (!isCancelled() && !background)
@@ -124,15 +137,8 @@ export function createCachedResource(sourceOrFetcher, fetcherOrOptions, opts = {
124
137
  setPendingP(undefined);
125
138
  });
126
139
  }
127
- // ── Suspense context (lazy, avoid module-init order issues) ───────────────
128
- let _SuspenseContext;
129
140
  // ── Main effect ───────────────────────────────────────────────────────────
130
141
  createEffect(() => {
131
- // Lazily grab the suspense context the first time the effect runs,
132
- // so it's looked up in the correct component Owner scope.
133
- if (_SuspenseContext === undefined) {
134
- _SuspenseContext = getSuspenseContext();
135
- }
136
142
  const key = sourceFn();
137
143
  tick(); // track manual triggers
138
144
  // Suspend fetch when source is falsy (mirrors createResource)
@@ -160,7 +166,7 @@ export function createCachedResource(sourceOrFetcher, fetcherOrOptions, opts = {
160
166
  const cached = ttlCache.get(ck);
161
167
  // ── Cache HIT (fresh) ─────────────────────────────────────────────────
162
168
  if (cached && isFresh(cached) && !doRefetch && !doInvalidate) {
163
- // Serve synchronously no loading state, no fetch.
169
+ // Serve synchronously, no loading state, no fetch.
164
170
  const cur = untrack(resourceState);
165
171
  if (cur !== 'ready' || untrack(value) !== cached.value) {
166
172
  batch(() => {
@@ -197,7 +203,7 @@ export function createCachedResource(sourceOrFetcher, fetcherOrOptions, opts = {
197
203
  doFetch(key, ck, false /* foreground */, () => cancelled);
198
204
  });
199
205
  // ── Resource accessor ─────────────────────────────────────────────────────
200
- // During 'pending': throw the pending promise Suspense shows skeleton.
206
+ // During 'pending': throw the pending promise -> Suspense shows skeleton.
201
207
  // During 'refreshing': return stale value (no Suspense regression).
202
208
  // During 'ready'/'errored': return value or throw error.
203
209
  const resource = (() => {