@bquery/bquery 1.2.0 → 1.4.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 (309) hide show
  1. package/README.md +127 -27
  2. package/dist/batch-x7b2eZST.js +13 -0
  3. package/dist/batch-x7b2eZST.js.map +1 -0
  4. package/dist/component/component.d.ts +69 -0
  5. package/dist/component/component.d.ts.map +1 -0
  6. package/dist/component/html.d.ts +35 -0
  7. package/dist/component/html.d.ts.map +1 -0
  8. package/dist/component/index.d.ts +3 -126
  9. package/dist/component/index.d.ts.map +1 -1
  10. package/dist/component/props.d.ts +18 -0
  11. package/dist/component/props.d.ts.map +1 -0
  12. package/dist/component/types.d.ts +77 -0
  13. package/dist/component/types.d.ts.map +1 -0
  14. package/dist/component.es.mjs +90 -59
  15. package/dist/component.es.mjs.map +1 -1
  16. package/dist/core/collection.d.ts +55 -3
  17. package/dist/core/collection.d.ts.map +1 -1
  18. package/dist/core/dom.d.ts +6 -0
  19. package/dist/core/dom.d.ts.map +1 -0
  20. package/dist/core/element.d.ts +31 -4
  21. package/dist/core/element.d.ts.map +1 -1
  22. package/dist/core/index.d.ts +2 -0
  23. package/dist/core/index.d.ts.map +1 -1
  24. package/dist/core/utils/array.d.ts +74 -0
  25. package/dist/core/utils/array.d.ts.map +1 -0
  26. package/dist/core/utils/function.d.ts +87 -0
  27. package/dist/core/utils/function.d.ts.map +1 -0
  28. package/dist/core/utils/index.d.ts +70 -0
  29. package/dist/core/utils/index.d.ts.map +1 -0
  30. package/dist/core/utils/misc.d.ts +63 -0
  31. package/dist/core/utils/misc.d.ts.map +1 -0
  32. package/dist/core/utils/number.d.ts +65 -0
  33. package/dist/core/utils/number.d.ts.map +1 -0
  34. package/dist/core/utils/object.d.ts +133 -0
  35. package/dist/core/utils/object.d.ts.map +1 -0
  36. package/dist/core/utils/string.d.ts +80 -0
  37. package/dist/core/utils/string.d.ts.map +1 -0
  38. package/dist/core/utils/type-guards.d.ts +79 -0
  39. package/dist/core/utils/type-guards.d.ts.map +1 -0
  40. package/dist/core-BhpuvPhy.js +170 -0
  41. package/dist/core-BhpuvPhy.js.map +1 -0
  42. package/dist/core.es.mjs +495 -489
  43. package/dist/core.es.mjs.map +1 -1
  44. package/dist/full.d.ts +2 -2
  45. package/dist/full.d.ts.map +1 -1
  46. package/dist/full.es.mjs +87 -64
  47. package/dist/full.es.mjs.map +1 -1
  48. package/dist/full.iife.js +2 -2
  49. package/dist/full.iife.js.map +1 -1
  50. package/dist/full.umd.js +2 -2
  51. package/dist/full.umd.js.map +1 -1
  52. package/dist/index.es.mjs +138 -68
  53. package/dist/index.es.mjs.map +1 -1
  54. package/dist/motion/animate.d.ts +25 -0
  55. package/dist/motion/animate.d.ts.map +1 -0
  56. package/dist/motion/easing.d.ts +30 -0
  57. package/dist/motion/easing.d.ts.map +1 -0
  58. package/dist/motion/flip.d.ts +55 -0
  59. package/dist/motion/flip.d.ts.map +1 -0
  60. package/dist/motion/index.d.ts +11 -138
  61. package/dist/motion/index.d.ts.map +1 -1
  62. package/dist/motion/keyframes.d.ts +21 -0
  63. package/dist/motion/keyframes.d.ts.map +1 -0
  64. package/dist/motion/reduced-motion.d.ts +12 -0
  65. package/dist/motion/reduced-motion.d.ts.map +1 -0
  66. package/dist/motion/scroll.d.ts +15 -0
  67. package/dist/motion/scroll.d.ts.map +1 -0
  68. package/dist/motion/spring.d.ts +42 -0
  69. package/dist/motion/spring.d.ts.map +1 -0
  70. package/dist/motion/stagger.d.ts +22 -0
  71. package/dist/motion/stagger.d.ts.map +1 -0
  72. package/dist/motion/timeline.d.ts +21 -0
  73. package/dist/motion/timeline.d.ts.map +1 -0
  74. package/dist/motion/transition.d.ts +22 -0
  75. package/dist/motion/transition.d.ts.map +1 -0
  76. package/dist/motion/types.d.ts +182 -0
  77. package/dist/motion/types.d.ts.map +1 -0
  78. package/dist/motion.es.mjs +320 -61
  79. package/dist/motion.es.mjs.map +1 -1
  80. package/dist/persisted-DHoi3uEs.js +278 -0
  81. package/dist/persisted-DHoi3uEs.js.map +1 -0
  82. package/dist/platform/storage.d.ts.map +1 -1
  83. package/dist/platform.es.mjs +12 -7
  84. package/dist/platform.es.mjs.map +1 -1
  85. package/dist/reactive/batch.d.ts +13 -0
  86. package/dist/reactive/batch.d.ts.map +1 -0
  87. package/dist/reactive/computed.d.ts +50 -0
  88. package/dist/reactive/computed.d.ts.map +1 -0
  89. package/dist/reactive/core.d.ts +72 -0
  90. package/dist/reactive/core.d.ts.map +1 -0
  91. package/dist/reactive/effect.d.ts +15 -0
  92. package/dist/reactive/effect.d.ts.map +1 -0
  93. package/dist/reactive/index.d.ts +2 -2
  94. package/dist/reactive/index.d.ts.map +1 -1
  95. package/dist/reactive/internals.d.ts +42 -0
  96. package/dist/reactive/internals.d.ts.map +1 -0
  97. package/dist/reactive/linked.d.ts +36 -0
  98. package/dist/reactive/linked.d.ts.map +1 -0
  99. package/dist/reactive/persisted.d.ts +14 -0
  100. package/dist/reactive/persisted.d.ts.map +1 -0
  101. package/dist/reactive/readonly.d.ts +26 -0
  102. package/dist/reactive/readonly.d.ts.map +1 -0
  103. package/dist/reactive/signal.d.ts +13 -312
  104. package/dist/reactive/signal.d.ts.map +1 -1
  105. package/dist/reactive/type-guards.d.ts +20 -0
  106. package/dist/reactive/type-guards.d.ts.map +1 -0
  107. package/dist/reactive/untrack.d.ts +29 -0
  108. package/dist/reactive/untrack.d.ts.map +1 -0
  109. package/dist/reactive/watch.d.ts +42 -0
  110. package/dist/reactive/watch.d.ts.map +1 -0
  111. package/dist/reactive.es.mjs +30 -163
  112. package/dist/reactive.es.mjs.map +1 -1
  113. package/dist/router/index.d.ts +6 -252
  114. package/dist/router/index.d.ts.map +1 -1
  115. package/dist/router/links.d.ts +44 -0
  116. package/dist/router/links.d.ts.map +1 -0
  117. package/dist/router/match.d.ts +20 -0
  118. package/dist/router/match.d.ts.map +1 -0
  119. package/dist/router/navigation.d.ts +45 -0
  120. package/dist/router/navigation.d.ts.map +1 -0
  121. package/dist/router/query.d.ts +16 -0
  122. package/dist/router/query.d.ts.map +1 -0
  123. package/dist/router/router.d.ts +34 -0
  124. package/dist/router/router.d.ts.map +1 -0
  125. package/dist/router/state.d.ts +27 -0
  126. package/dist/router/state.d.ts.map +1 -0
  127. package/dist/router/types.d.ts +88 -0
  128. package/dist/router/types.d.ts.map +1 -0
  129. package/dist/router/utils.d.ts +65 -0
  130. package/dist/router/utils.d.ts.map +1 -0
  131. package/dist/router.es.mjs +168 -132
  132. package/dist/router.es.mjs.map +1 -1
  133. package/dist/sanitize-Cxvxa-DX.js +283 -0
  134. package/dist/sanitize-Cxvxa-DX.js.map +1 -0
  135. package/dist/security/constants.d.ts +42 -0
  136. package/dist/security/constants.d.ts.map +1 -0
  137. package/dist/security/csp.d.ts +24 -0
  138. package/dist/security/csp.d.ts.map +1 -0
  139. package/dist/security/index.d.ts +4 -2
  140. package/dist/security/index.d.ts.map +1 -1
  141. package/dist/security/sanitize-core.d.ts +13 -0
  142. package/dist/security/sanitize-core.d.ts.map +1 -0
  143. package/dist/security/sanitize.d.ts +5 -57
  144. package/dist/security/sanitize.d.ts.map +1 -1
  145. package/dist/security/trusted-types.d.ts +25 -0
  146. package/dist/security/trusted-types.d.ts.map +1 -0
  147. package/dist/security/types.d.ts +36 -0
  148. package/dist/security/types.d.ts.map +1 -0
  149. package/dist/security.es.mjs +50 -277
  150. package/dist/security.es.mjs.map +1 -1
  151. package/dist/store/create-store.d.ts +15 -0
  152. package/dist/store/create-store.d.ts.map +1 -0
  153. package/dist/store/define-store.d.ts +28 -0
  154. package/dist/store/define-store.d.ts.map +1 -0
  155. package/dist/store/devtools.d.ts +22 -0
  156. package/dist/store/devtools.d.ts.map +1 -0
  157. package/dist/store/index.d.ts +10 -286
  158. package/dist/store/index.d.ts.map +1 -1
  159. package/dist/store/mapping.d.ts +28 -0
  160. package/dist/store/mapping.d.ts.map +1 -0
  161. package/dist/store/persisted.d.ts +13 -0
  162. package/dist/store/persisted.d.ts.map +1 -0
  163. package/dist/store/plugins.d.ts +13 -0
  164. package/dist/store/plugins.d.ts.map +1 -0
  165. package/dist/store/registry.d.ts +28 -0
  166. package/dist/store/registry.d.ts.map +1 -0
  167. package/dist/store/types.d.ts +71 -0
  168. package/dist/store/types.d.ts.map +1 -0
  169. package/dist/store/utils.d.ts +28 -0
  170. package/dist/store/utils.d.ts.map +1 -0
  171. package/dist/store/watch.d.ts +23 -0
  172. package/dist/store/watch.d.ts.map +1 -0
  173. package/dist/store.es.mjs +22 -224
  174. package/dist/store.es.mjs.map +1 -1
  175. package/dist/type-guards-BdKlYYlS.js +32 -0
  176. package/dist/type-guards-BdKlYYlS.js.map +1 -0
  177. package/dist/untrack-DNnnqdlR.js +6 -0
  178. package/dist/untrack-DNnnqdlR.js.map +1 -0
  179. package/dist/view/directives/bind.d.ts +7 -0
  180. package/dist/view/directives/bind.d.ts.map +1 -0
  181. package/dist/view/directives/class.d.ts +8 -0
  182. package/dist/view/directives/class.d.ts.map +1 -0
  183. package/dist/view/directives/for.d.ts +23 -0
  184. package/dist/view/directives/for.d.ts.map +1 -0
  185. package/dist/view/directives/html.d.ts +7 -0
  186. package/dist/view/directives/html.d.ts.map +1 -0
  187. package/dist/view/directives/if.d.ts +7 -0
  188. package/dist/view/directives/if.d.ts.map +1 -0
  189. package/dist/view/directives/index.d.ts +12 -0
  190. package/dist/view/directives/index.d.ts.map +1 -0
  191. package/dist/view/directives/model.d.ts +7 -0
  192. package/dist/view/directives/model.d.ts.map +1 -0
  193. package/dist/view/directives/on.d.ts +7 -0
  194. package/dist/view/directives/on.d.ts.map +1 -0
  195. package/dist/view/directives/ref.d.ts +7 -0
  196. package/dist/view/directives/ref.d.ts.map +1 -0
  197. package/dist/view/directives/show.d.ts +7 -0
  198. package/dist/view/directives/show.d.ts.map +1 -0
  199. package/dist/view/directives/style.d.ts +7 -0
  200. package/dist/view/directives/style.d.ts.map +1 -0
  201. package/dist/view/directives/text.d.ts +7 -0
  202. package/dist/view/directives/text.d.ts.map +1 -0
  203. package/dist/view/evaluate.d.ts +43 -0
  204. package/dist/view/evaluate.d.ts.map +1 -0
  205. package/dist/view/index.d.ts +3 -93
  206. package/dist/view/index.d.ts.map +1 -1
  207. package/dist/view/mount.d.ts +69 -0
  208. package/dist/view/mount.d.ts.map +1 -0
  209. package/dist/view/process.d.ts +26 -0
  210. package/dist/view/process.d.ts.map +1 -0
  211. package/dist/view/types.d.ts +36 -0
  212. package/dist/view/types.d.ts.map +1 -0
  213. package/dist/view.es.mjs +358 -251
  214. package/dist/view.es.mjs.map +1 -1
  215. package/dist/watch-DXXv3iAI.js +58 -0
  216. package/dist/watch-DXXv3iAI.js.map +1 -0
  217. package/package.json +14 -14
  218. package/src/component/component.ts +289 -0
  219. package/src/component/html.ts +53 -0
  220. package/src/component/index.ts +40 -414
  221. package/src/component/props.ts +116 -0
  222. package/src/component/types.ts +85 -0
  223. package/src/core/collection.ts +181 -7
  224. package/src/core/dom.ts +38 -0
  225. package/src/core/element.ts +59 -25
  226. package/src/core/index.ts +48 -4
  227. package/src/core/utils/array.ts +102 -0
  228. package/src/core/utils/function.ts +151 -0
  229. package/src/core/utils/index.ts +83 -0
  230. package/src/core/utils/misc.ts +82 -0
  231. package/src/core/utils/number.ts +78 -0
  232. package/src/core/utils/object.ts +206 -0
  233. package/src/core/utils/string.ts +112 -0
  234. package/src/core/utils/type-guards.ts +112 -0
  235. package/src/full.ts +187 -150
  236. package/src/index.ts +36 -36
  237. package/src/motion/animate.ts +113 -0
  238. package/src/motion/easing.ts +40 -0
  239. package/src/motion/flip.ts +176 -0
  240. package/src/motion/index.ts +41 -358
  241. package/src/motion/keyframes.ts +46 -0
  242. package/src/motion/reduced-motion.ts +17 -0
  243. package/src/motion/scroll.ts +57 -0
  244. package/src/motion/spring.ts +150 -0
  245. package/src/motion/stagger.ts +43 -0
  246. package/src/motion/timeline.ts +246 -0
  247. package/src/motion/transition.ts +51 -0
  248. package/src/motion/types.ts +198 -0
  249. package/src/platform/storage.ts +215 -208
  250. package/src/reactive/batch.ts +22 -0
  251. package/src/reactive/computed.ts +92 -0
  252. package/src/reactive/core.ts +114 -0
  253. package/src/reactive/effect.ts +54 -0
  254. package/src/reactive/index.ts +23 -22
  255. package/src/reactive/internals.ts +122 -0
  256. package/src/reactive/linked.ts +56 -0
  257. package/src/reactive/persisted.ts +74 -0
  258. package/src/reactive/readonly.ts +35 -0
  259. package/src/reactive/signal.ts +20 -520
  260. package/src/reactive/type-guards.ts +22 -0
  261. package/src/reactive/untrack.ts +31 -0
  262. package/src/reactive/watch.ts +73 -0
  263. package/src/router/index.ts +41 -718
  264. package/src/router/links.ts +130 -0
  265. package/src/router/match.ts +106 -0
  266. package/src/router/navigation.ts +71 -0
  267. package/src/router/query.ts +35 -0
  268. package/src/router/router.ts +211 -0
  269. package/src/router/state.ts +46 -0
  270. package/src/router/types.ts +93 -0
  271. package/src/router/utils.ts +116 -0
  272. package/src/security/constants.ts +209 -0
  273. package/src/security/csp.ts +77 -0
  274. package/src/security/index.ts +4 -12
  275. package/src/security/sanitize-core.ts +364 -0
  276. package/src/security/sanitize.ts +66 -625
  277. package/src/security/trusted-types.ts +69 -0
  278. package/src/security/types.ts +40 -0
  279. package/src/store/create-store.ts +329 -0
  280. package/src/store/define-store.ts +48 -0
  281. package/src/store/devtools.ts +45 -0
  282. package/src/store/index.ts +22 -848
  283. package/src/store/mapping.ts +73 -0
  284. package/src/store/persisted.ts +61 -0
  285. package/src/store/plugins.ts +32 -0
  286. package/src/store/registry.ts +51 -0
  287. package/src/store/types.ts +94 -0
  288. package/src/store/utils.ts +141 -0
  289. package/src/store/watch.ts +52 -0
  290. package/src/view/directives/bind.ts +23 -0
  291. package/src/view/directives/class.ts +70 -0
  292. package/src/view/directives/for.ts +275 -0
  293. package/src/view/directives/html.ts +19 -0
  294. package/src/view/directives/if.ts +30 -0
  295. package/src/view/directives/index.ts +11 -0
  296. package/src/view/directives/model.ts +56 -0
  297. package/src/view/directives/on.ts +41 -0
  298. package/src/view/directives/ref.ts +41 -0
  299. package/src/view/directives/show.ts +26 -0
  300. package/src/view/directives/style.ts +47 -0
  301. package/src/view/directives/text.ts +15 -0
  302. package/src/view/evaluate.ts +290 -0
  303. package/src/view/index.ts +112 -1041
  304. package/src/view/mount.ts +200 -0
  305. package/src/view/process.ts +92 -0
  306. package/src/view/types.ts +44 -0
  307. package/dist/core/utils.d.ts +0 -313
  308. package/dist/core/utils.d.ts.map +0 -1
  309. package/src/core/utils.ts +0 -444
@@ -0,0 +1,170 @@
1
+ const r = [];
2
+ let i = 0;
3
+ const u = /* @__PURE__ */ new Set(), c = /* @__PURE__ */ new WeakMap(), a = (e, s) => {
4
+ r.push(e);
5
+ try {
6
+ return s();
7
+ } finally {
8
+ r.pop();
9
+ }
10
+ }, h = () => r[r.length - 1], v = (e) => {
11
+ r.push(void 0);
12
+ try {
13
+ return e();
14
+ } finally {
15
+ r.pop();
16
+ }
17
+ }, b = (e) => {
18
+ if (i > 0) {
19
+ u.add(e);
20
+ return;
21
+ }
22
+ e();
23
+ }, l = () => {
24
+ for (const e of Array.from(u)) {
25
+ u.delete(e);
26
+ try {
27
+ e();
28
+ } catch (s) {
29
+ console.error("bQuery reactive: Error in observer during batch flush", s);
30
+ }
31
+ }
32
+ }, m = () => {
33
+ i += 1;
34
+ }, g = () => {
35
+ i <= 0 || (i -= 1, i === 0 && l());
36
+ }, d = (e, s) => {
37
+ let t = c.get(e);
38
+ t || (t = /* @__PURE__ */ new Set(), c.set(e, t)), t.add(s);
39
+ }, f = (e, s) => {
40
+ const t = c.get(e);
41
+ t && t.delete(s);
42
+ }, o = (e) => {
43
+ const s = c.get(e);
44
+ if (s) {
45
+ for (const t of s)
46
+ t.unsubscribe(e);
47
+ s.clear();
48
+ }
49
+ };
50
+ class p {
51
+ /**
52
+ * Creates a new computed value.
53
+ * @param compute - Function that computes the value
54
+ */
55
+ constructor(s) {
56
+ this.compute = s, this.dirty = !0, this.subscribers = /* @__PURE__ */ new Set(), this.markDirty = () => {
57
+ this.dirty = !0;
58
+ const t = Array.from(this.subscribers);
59
+ for (const n of t)
60
+ b(n);
61
+ };
62
+ }
63
+ /**
64
+ * Gets the computed value, recomputing if dependencies changed.
65
+ * During untrack calls, getCurrentObserver returns undefined, preventing dependency tracking.
66
+ */
67
+ get value() {
68
+ const s = h();
69
+ return s && (this.subscribers.add(s), d(s, this)), this.dirty && (this.dirty = !1, o(this.markDirty), this.cachedValue = a(this.markDirty, this.compute)), this.cachedValue;
70
+ }
71
+ /**
72
+ * Reads the current computed value without tracking.
73
+ * Useful when you need the value but don't want to create a dependency.
74
+ *
75
+ * @returns The current cached value (recomputes if dirty)
76
+ */
77
+ peek() {
78
+ return this.dirty && (this.dirty = !1, o(this.markDirty), this.cachedValue = a(this.markDirty, this.compute)), this.cachedValue;
79
+ }
80
+ /**
81
+ * Removes an observer from this computed's subscriber set.
82
+ * @internal
83
+ */
84
+ unsubscribe(s) {
85
+ this.subscribers.delete(s);
86
+ }
87
+ }
88
+ const k = (e) => new p(e);
89
+ class y {
90
+ /**
91
+ * Creates a new signal with an initial value.
92
+ * @param _value - The initial value
93
+ */
94
+ constructor(s) {
95
+ this._value = s, this.subscribers = /* @__PURE__ */ new Set();
96
+ }
97
+ /**
98
+ * Gets the current value and tracks the read if inside an observer.
99
+ * During untrack calls, getCurrentObserver returns undefined, preventing dependency tracking.
100
+ */
101
+ get value() {
102
+ const s = h();
103
+ return s && (this.subscribers.add(s), d(s, this)), this._value;
104
+ }
105
+ /**
106
+ * Sets a new value and notifies all subscribers if the value changed.
107
+ * Uses Object.is for equality comparison.
108
+ */
109
+ set value(s) {
110
+ if (Object.is(this._value, s)) return;
111
+ this._value = s;
112
+ const t = Array.from(this.subscribers);
113
+ for (const n of t)
114
+ b(n);
115
+ }
116
+ /**
117
+ * Reads the current value without tracking.
118
+ * Useful when you need the value but don't want to create a dependency.
119
+ *
120
+ * @returns The current value
121
+ */
122
+ peek() {
123
+ return this._value;
124
+ }
125
+ /**
126
+ * Updates the value using a function.
127
+ * Useful for updates based on the current value.
128
+ *
129
+ * @param updater - Function that receives current value and returns new value
130
+ */
131
+ update(s) {
132
+ this.value = s(this._value);
133
+ }
134
+ /**
135
+ * Removes all subscribers from this signal.
136
+ * Use this when a signal is no longer needed to prevent memory leaks.
137
+ *
138
+ * @example
139
+ * ```ts
140
+ * const count = signal(0);
141
+ * effect(() => console.log(count.value));
142
+ * count.dispose(); // All subscribers removed
143
+ * ```
144
+ */
145
+ dispose() {
146
+ for (const s of this.subscribers)
147
+ f(s, this);
148
+ this.subscribers.clear();
149
+ }
150
+ /**
151
+ * Removes an observer from this signal's subscriber set.
152
+ * @internal
153
+ */
154
+ unsubscribe(s) {
155
+ this.subscribers.delete(s);
156
+ }
157
+ }
158
+ const D = (e) => new y(e);
159
+ export {
160
+ p as C,
161
+ y as S,
162
+ o as a,
163
+ m as b,
164
+ k as c,
165
+ g as e,
166
+ D as s,
167
+ a as t,
168
+ v as w
169
+ };
170
+ //# sourceMappingURL=core-BhpuvPhy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-BhpuvPhy.js","sources":["../src/reactive/internals.ts","../src/reactive/computed.ts","../src/reactive/core.ts"],"sourcesContent":["/**\r\n * Internal reactive plumbing shared across primitives.\r\n * @internal\r\n */\r\n\r\nexport type Observer = () => void;\r\nexport type CleanupFn = () => void;\r\n\r\n/**\r\n * Interface for reactive sources (Signals, Computed) that can unsubscribe observers.\r\n * @internal\r\n */\r\nexport interface ReactiveSource {\r\n unsubscribe(observer: Observer): void;\r\n}\r\n\r\nconst observerStack: Observer[] = [];\r\nlet batchDepth = 0;\r\nconst pendingObservers = new Set<Observer>();\r\n\r\n// Track dependencies for each observer to enable cleanup\r\nconst observerDependencies = new WeakMap<Observer, Set<ReactiveSource>>();\r\n\r\nexport const track = <T>(observer: Observer, fn: () => T): T => {\r\n observerStack.push(observer);\r\n try {\r\n return fn();\r\n } finally {\r\n observerStack.pop();\r\n }\r\n};\r\n\r\nexport const getCurrentObserver = (): Observer | undefined =>\r\n observerStack[observerStack.length - 1];\r\n\r\n/**\r\n * Executes a function without exposing the current observer to dependencies.\r\n * Unlike disabling tracking globally, this still allows nested reactive internals\r\n * (e.g., computed recomputation) to track their own dependencies.\r\n * @internal\r\n */\r\nexport const withoutCurrentObserver = <T>(fn: () => T): T => {\r\n // Push undefined to temporarily \"hide\" the current observer\r\n // This way, Signal.value reads won't link to the previous observer,\r\n // but nested track() calls (e.g., computed recompute) still work normally.\r\n observerStack.push(undefined as unknown as Observer);\r\n try {\r\n return fn();\r\n } finally {\r\n observerStack.pop();\r\n }\r\n};\r\n\r\nexport const scheduleObserver = (observer: Observer): void => {\r\n if (batchDepth > 0) {\r\n pendingObservers.add(observer);\r\n return;\r\n }\r\n observer();\r\n};\r\n\r\nconst flushObservers = (): void => {\r\n for (const observer of Array.from(pendingObservers)) {\r\n pendingObservers.delete(observer);\r\n try {\r\n observer();\r\n } catch (error) {\r\n console.error('bQuery reactive: Error in observer during batch flush', error);\r\n }\r\n }\r\n};\r\n\r\nexport const beginBatch = (): void => {\r\n batchDepth += 1;\r\n};\r\n\r\nexport const endBatch = (): void => {\r\n if (batchDepth <= 0) return;\r\n batchDepth -= 1;\r\n if (batchDepth === 0) {\r\n flushObservers();\r\n }\r\n};\r\n\r\n/**\r\n * Registers a dependency between an observer and a reactive source.\r\n * @internal\r\n */\r\nexport const registerDependency = (observer: Observer, source: ReactiveSource): void => {\r\n let deps = observerDependencies.get(observer);\r\n if (!deps) {\r\n deps = new Set();\r\n observerDependencies.set(observer, deps);\r\n }\r\n deps.add(source);\r\n};\r\n\r\n/**\r\n * Removes a specific source from an observer's dependency set.\r\n * Used when a source (e.g. Signal) is disposed to prevent stale references.\r\n * @internal\r\n */\r\nexport const removeDependency = (observer: Observer, source: ReactiveSource): void => {\r\n const deps = observerDependencies.get(observer);\r\n if (deps) {\r\n deps.delete(source);\r\n }\r\n};\r\n\r\n/**\r\n * Clears all dependencies for an observer, unsubscribing from all sources.\r\n * @internal\r\n */\r\nexport const clearDependencies = (observer: Observer): void => {\r\n const deps = observerDependencies.get(observer);\r\n if (deps) {\r\n for (const source of deps) {\r\n source.unsubscribe(observer);\r\n }\r\n deps.clear();\r\n }\r\n};\r\n","/**\n * Computed reactive values.\n */\n\nimport {\n clearDependencies,\n getCurrentObserver,\n registerDependency,\n scheduleObserver,\n track,\n type ReactiveSource,\n} from './internals';\n\n/**\n * A computed value that derives from other reactive sources.\n *\n * Computed values are lazily evaluated and cached. They only\n * recompute when their dependencies change.\n *\n * @template T - The type of the computed value\n */\nexport class Computed<T> implements ReactiveSource {\n private cachedValue!: T;\n private dirty = true;\n private subscribers = new Set<() => void>();\n private readonly markDirty = () => {\n this.dirty = true;\n // Create snapshot to avoid issues with subscribers modifying the set during iteration\n const subscribersSnapshot = Array.from(this.subscribers);\n for (const subscriber of subscribersSnapshot) {\n scheduleObserver(subscriber);\n }\n };\n\n /**\n * Creates a new computed value.\n * @param compute - Function that computes the value\n */\n constructor(private readonly compute: () => T) {}\n\n /**\n * Gets the computed value, recomputing if dependencies changed.\n * During untrack calls, getCurrentObserver returns undefined, preventing dependency tracking.\n */\n get value(): T {\n const current = getCurrentObserver();\n if (current) {\n this.subscribers.add(current);\n registerDependency(current, this);\n }\n if (this.dirty) {\n this.dirty = false;\n // Clear old dependencies before recomputing\n clearDependencies(this.markDirty);\n this.cachedValue = track(this.markDirty, this.compute);\n }\n return this.cachedValue;\n }\n\n /**\n * Reads the current computed value without tracking.\n * Useful when you need the value but don't want to create a dependency.\n *\n * @returns The current cached value (recomputes if dirty)\n */\n peek(): T {\n if (this.dirty) {\n this.dirty = false;\n // Clear old dependencies before recomputing\n clearDependencies(this.markDirty);\n this.cachedValue = track(this.markDirty, this.compute);\n }\n return this.cachedValue;\n }\n\n /**\n * Removes an observer from this computed's subscriber set.\n * @internal\n */\n unsubscribe(observer: () => void): void {\n this.subscribers.delete(observer);\n }\n}\n\n/**\n * Creates a new computed value.\n *\n * @template T - The type of the computed value\n * @param fn - Function that computes the value from reactive sources\n * @returns A new Computed instance\n */\nexport const computed = <T>(fn: () => T): Computed<T> => new Computed(fn);\n","/**\r\n * Core reactive signals.\r\n */\r\n\r\nimport {\r\n getCurrentObserver,\r\n registerDependency,\r\n removeDependency,\r\n scheduleObserver,\r\n type ReactiveSource,\r\n} from './internals';\r\n\r\n/**\r\n * A reactive value container that notifies subscribers on change.\r\n *\r\n * Signals are the foundational primitive of the reactive system.\r\n * Reading a signal's value inside an effect or computed automatically\r\n * establishes a reactive dependency.\r\n *\r\n * @template T - The type of the stored value\r\n */\r\nexport class Signal<T> implements ReactiveSource {\r\n private subscribers = new Set<() => void>();\r\n\r\n /**\r\n * Creates a new signal with an initial value.\r\n * @param _value - The initial value\r\n */\r\n constructor(private _value: T) {}\r\n\r\n /**\r\n * Gets the current value and tracks the read if inside an observer.\r\n * During untrack calls, getCurrentObserver returns undefined, preventing dependency tracking.\r\n */\r\n get value(): T {\r\n const current = getCurrentObserver();\r\n if (current) {\r\n this.subscribers.add(current);\r\n registerDependency(current, this);\r\n }\r\n return this._value;\r\n }\r\n\r\n /**\r\n * Sets a new value and notifies all subscribers if the value changed.\r\n * Uses Object.is for equality comparison.\r\n */\r\n set value(next: T) {\r\n if (Object.is(this._value, next)) return;\r\n this._value = next;\r\n // Create snapshot to avoid issues with subscribers modifying the set during iteration\r\n const subscribersSnapshot = Array.from(this.subscribers);\r\n for (const subscriber of subscribersSnapshot) {\r\n scheduleObserver(subscriber);\r\n }\r\n }\r\n\r\n /**\r\n * Reads the current value without tracking.\r\n * Useful when you need the value but don't want to create a dependency.\r\n *\r\n * @returns The current value\r\n */\r\n peek(): T {\r\n return this._value;\r\n }\r\n\r\n /**\r\n * Updates the value using a function.\r\n * Useful for updates based on the current value.\r\n *\r\n * @param updater - Function that receives current value and returns new value\r\n */\r\n update(updater: (current: T) => T): void {\r\n this.value = updater(this._value);\r\n }\r\n\r\n /**\r\n * Removes all subscribers from this signal.\r\n * Use this when a signal is no longer needed to prevent memory leaks.\r\n *\r\n * @example\r\n * ```ts\r\n * const count = signal(0);\r\n * effect(() => console.log(count.value));\r\n * count.dispose(); // All subscribers removed\r\n * ```\r\n */\r\n dispose(): void {\r\n // Remove this signal from each subscriber's dependency set\r\n // so the observer no longer holds a strong reference to it\r\n for (const subscriber of this.subscribers) {\r\n removeDependency(subscriber, this);\r\n }\r\n this.subscribers.clear();\r\n }\r\n\r\n /**\r\n * Removes an observer from this signal's subscriber set.\r\n * @internal\r\n */\r\n unsubscribe(observer: () => void): void {\r\n this.subscribers.delete(observer);\r\n }\r\n}\r\n\r\n/**\r\n * Creates a new reactive signal.\r\n *\r\n * @template T - The type of the signal value\r\n * @param value - The initial value\r\n * @returns A new Signal instance\r\n */\r\nexport const signal = <T>(value: T): Signal<T> => new Signal(value);\r\n"],"names":["observerStack","batchDepth","pendingObservers","observerDependencies","track","observer","fn","getCurrentObserver","withoutCurrentObserver","scheduleObserver","flushObservers","error","beginBatch","endBatch","registerDependency","source","deps","removeDependency","clearDependencies","Computed","compute","subscribersSnapshot","subscriber","current","computed","Signal","_value","next","updater","signal","value"],"mappings":"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"}