@livestore/utils 0.4.0-dev.9 → 0.5.0-dev.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 (316) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/NoopTracer.d.ts +7 -8
  3. package/dist/NoopTracer.d.ts.map +1 -1
  4. package/dist/NoopTracer.js +13 -15
  5. package/dist/NoopTracer.js.map +1 -1
  6. package/dist/NoopTracer.test.d.ts +2 -0
  7. package/dist/NoopTracer.test.d.ts.map +1 -0
  8. package/dist/NoopTracer.test.js +17 -0
  9. package/dist/NoopTracer.test.js.map +1 -0
  10. package/dist/binary.js +1 -1
  11. package/dist/binary.js.map +1 -1
  12. package/dist/browser/Opfs/Opfs.d.ts +201 -0
  13. package/dist/browser/Opfs/Opfs.d.ts.map +1 -0
  14. package/dist/browser/Opfs/Opfs.js +170 -0
  15. package/dist/browser/Opfs/Opfs.js.map +1 -0
  16. package/dist/browser/Opfs/debug-utils.d.ts +20 -0
  17. package/dist/browser/Opfs/debug-utils.d.ts.map +1 -0
  18. package/dist/browser/Opfs/debug-utils.js +95 -0
  19. package/dist/browser/Opfs/debug-utils.js.map +1 -0
  20. package/dist/browser/Opfs/mod.d.ts +4 -0
  21. package/dist/browser/Opfs/mod.d.ts.map +1 -0
  22. package/dist/browser/Opfs/mod.js +4 -0
  23. package/dist/browser/Opfs/mod.js.map +1 -0
  24. package/dist/browser/Opfs/utils.d.ts +71 -0
  25. package/dist/browser/Opfs/utils.d.ts.map +1 -0
  26. package/dist/browser/Opfs/utils.js +227 -0
  27. package/dist/browser/Opfs/utils.js.map +1 -0
  28. package/dist/browser/QuotaExceededError.d.ts +60 -0
  29. package/dist/browser/QuotaExceededError.d.ts.map +1 -0
  30. package/dist/browser/QuotaExceededError.js +2 -0
  31. package/dist/browser/QuotaExceededError.js.map +1 -0
  32. package/dist/browser/WebChannelBrowser.d.ts +22 -0
  33. package/dist/browser/WebChannelBrowser.d.ts.map +1 -0
  34. package/dist/browser/WebChannelBrowser.js +87 -0
  35. package/dist/browser/WebChannelBrowser.js.map +1 -0
  36. package/dist/browser/WebError.d.ts +389 -0
  37. package/dist/browser/WebError.d.ts.map +1 -0
  38. package/dist/browser/WebError.js +423 -0
  39. package/dist/browser/WebError.js.map +1 -0
  40. package/dist/browser/WebError.test.d.ts +2 -0
  41. package/dist/browser/WebError.test.d.ts.map +1 -0
  42. package/dist/browser/WebError.test.js +46 -0
  43. package/dist/browser/WebError.test.js.map +1 -0
  44. package/dist/browser/WebLock.d.ts.map +1 -0
  45. package/dist/{effect → browser}/WebLock.js +21 -21
  46. package/dist/browser/WebLock.js.map +1 -0
  47. package/dist/{browser.d.ts → browser/detect.d.ts} +1 -1
  48. package/dist/browser/detect.d.ts.map +1 -0
  49. package/dist/{browser.js → browser/detect.js} +7 -7
  50. package/dist/browser/detect.js.map +1 -0
  51. package/dist/browser/mod.d.ts +8 -0
  52. package/dist/browser/mod.d.ts.map +1 -0
  53. package/dist/browser/mod.js +8 -0
  54. package/dist/browser/mod.js.map +1 -0
  55. package/dist/cuid/cuid.browser.js +1 -1
  56. package/dist/cuid/cuid.browser.js.map +1 -1
  57. package/dist/cuid/cuid.node.js +1 -1
  58. package/dist/cuid/cuid.node.js.map +1 -1
  59. package/dist/effect/Debug.d.ts +38 -0
  60. package/dist/effect/Debug.d.ts.map +1 -0
  61. package/dist/effect/Debug.js +350 -0
  62. package/dist/effect/Debug.js.map +1 -0
  63. package/dist/effect/Effect.d.ts +91 -22
  64. package/dist/effect/Effect.d.ts.map +1 -1
  65. package/dist/effect/Effect.js +126 -38
  66. package/dist/effect/Effect.js.map +1 -1
  67. package/dist/effect/Effect.test.d.ts +2 -0
  68. package/dist/effect/Effect.test.d.ts.map +1 -0
  69. package/dist/effect/Effect.test.js +72 -0
  70. package/dist/effect/Effect.test.js.map +1 -0
  71. package/dist/effect/Error.d.ts +4 -6
  72. package/dist/effect/Error.d.ts.map +1 -1
  73. package/dist/effect/Error.js +1 -1
  74. package/dist/effect/Error.js.map +1 -1
  75. package/dist/effect/Logger.d.ts +0 -6
  76. package/dist/effect/Logger.d.ts.map +1 -1
  77. package/dist/effect/Logger.js +0 -32
  78. package/dist/effect/Logger.js.map +1 -1
  79. package/dist/effect/OtelTracer.d.ts +1 -1
  80. package/dist/effect/OtelTracer.d.ts.map +1 -1
  81. package/dist/effect/OtelTracer.js +2 -3
  82. package/dist/effect/OtelTracer.js.map +1 -1
  83. package/dist/effect/RpcClient.d.ts +7 -7
  84. package/dist/effect/RpcClient.d.ts.map +1 -1
  85. package/dist/effect/RpcClient.js +74 -54
  86. package/dist/effect/RpcClient.js.map +1 -1
  87. package/dist/effect/Schedule.d.ts +1 -1
  88. package/dist/effect/Schedule.d.ts.map +1 -1
  89. package/dist/effect/Schedule.js +2 -2
  90. package/dist/effect/Schedule.js.map +1 -1
  91. package/dist/effect/Schema/debug-diff.d.ts +1 -1
  92. package/dist/effect/Schema/debug-diff.d.ts.map +1 -1
  93. package/dist/effect/Schema/debug-diff.js +9 -10
  94. package/dist/effect/Schema/debug-diff.js.map +1 -1
  95. package/dist/effect/Schema/debug-diff.test.js +7 -4
  96. package/dist/effect/Schema/debug-diff.test.js.map +1 -1
  97. package/dist/effect/Schema/index.d.ts +28 -18
  98. package/dist/effect/Schema/index.d.ts.map +1 -1
  99. package/dist/effect/Schema/index.js +55 -28
  100. package/dist/effect/Schema/index.js.map +1 -1
  101. package/dist/effect/Stream.d.ts +13 -5
  102. package/dist/effect/Stream.d.ts.map +1 -1
  103. package/dist/effect/Stream.js +19 -12
  104. package/dist/effect/Stream.js.map +1 -1
  105. package/dist/effect/Stream.test.js +12 -12
  106. package/dist/effect/Stream.test.js.map +1 -1
  107. package/dist/effect/Subscribable.d.ts +9 -3
  108. package/dist/effect/Subscribable.d.ts.map +1 -1
  109. package/dist/effect/Subscribable.js +20 -35
  110. package/dist/effect/Subscribable.js.map +1 -1
  111. package/dist/effect/SubscriptionRef.d.ts +5 -6
  112. package/dist/effect/SubscriptionRef.d.ts.map +1 -1
  113. package/dist/effect/SubscriptionRef.js +2 -3
  114. package/dist/effect/SubscriptionRef.js.map +1 -1
  115. package/dist/effect/TaskTracing.d.ts +1 -1
  116. package/dist/effect/TaskTracing.d.ts.map +1 -1
  117. package/dist/effect/TaskTracing.js +12 -16
  118. package/dist/effect/TaskTracing.js.map +1 -1
  119. package/dist/effect/WebChannel/WebChannel.d.ts +11 -30
  120. package/dist/effect/WebChannel/WebChannel.d.ts.map +1 -1
  121. package/dist/effect/WebChannel/WebChannel.js +70 -125
  122. package/dist/effect/WebChannel/WebChannel.js.map +1 -1
  123. package/dist/effect/WebChannel/WebChannel.test.js +16 -16
  124. package/dist/effect/WebChannel/WebChannel.test.js.map +1 -1
  125. package/dist/effect/WebChannel/broadcastChannelWithAck.d.ts.map +1 -1
  126. package/dist/effect/WebChannel/broadcastChannelWithAck.js +20 -13
  127. package/dist/effect/WebChannel/broadcastChannelWithAck.js.map +1 -1
  128. package/dist/effect/WebChannel/common.d.ts +17 -18
  129. package/dist/effect/WebChannel/common.d.ts.map +1 -1
  130. package/dist/effect/WebChannel/common.js +7 -7
  131. package/dist/effect/WebChannel/common.js.map +1 -1
  132. package/dist/effect/WebSocket.d.ts +4 -6
  133. package/dist/effect/WebSocket.d.ts.map +1 -1
  134. package/dist/effect/WebSocket.js +17 -17
  135. package/dist/effect/WebSocket.js.map +1 -1
  136. package/dist/effect/WebSocket.test.js +2 -2
  137. package/dist/effect/WebSocket.test.js.map +1 -1
  138. package/dist/effect/mod.browser-build.test.d.ts +2 -0
  139. package/dist/effect/mod.browser-build.test.d.ts.map +1 -0
  140. package/dist/effect/mod.browser-build.test.js +18 -0
  141. package/dist/effect/mod.browser-build.test.js.map +1 -0
  142. package/dist/effect/mod.d.ts +30 -0
  143. package/dist/effect/mod.d.ts.map +1 -0
  144. package/dist/effect/mod.js +30 -0
  145. package/dist/effect/mod.js.map +1 -0
  146. package/dist/effect/spanEvent.d.ts +12 -0
  147. package/dist/effect/spanEvent.d.ts.map +1 -0
  148. package/dist/effect/spanEvent.js +12 -0
  149. package/dist/effect/spanEvent.js.map +1 -0
  150. package/dist/effect/spanEvent.test.d.ts +2 -0
  151. package/dist/effect/spanEvent.test.d.ts.map +1 -0
  152. package/dist/effect/spanEvent.test.js +79 -0
  153. package/dist/effect/spanEvent.test.js.map +1 -0
  154. package/dist/env.d.ts.map +1 -1
  155. package/dist/env.js +1 -1
  156. package/dist/env.js.map +1 -1
  157. package/dist/fast-deep-equal.d.ts.map +1 -1
  158. package/dist/fast-deep-equal.js +9 -10
  159. package/dist/fast-deep-equal.js.map +1 -1
  160. package/dist/global.d.ts +3 -0
  161. package/dist/global.d.ts.map +1 -1
  162. package/dist/global.js.map +1 -1
  163. package/dist/misc.d.ts +9 -1
  164. package/dist/misc.d.ts.map +1 -1
  165. package/dist/misc.js +12 -4
  166. package/dist/misc.js.map +1 -1
  167. package/dist/mod.d.ts +177 -20
  168. package/dist/mod.d.ts.map +1 -1
  169. package/dist/mod.js +159 -22
  170. package/dist/mod.js.map +1 -1
  171. package/dist/node/mod.d.ts +45 -6
  172. package/dist/node/mod.d.ts.map +1 -1
  173. package/dist/node/mod.js +51 -9
  174. package/dist/node/mod.js.map +1 -1
  175. package/dist/object/index.d.ts +0 -9
  176. package/dist/object/index.d.ts.map +1 -1
  177. package/dist/object/index.js +0 -9
  178. package/dist/object/index.js.map +1 -1
  179. package/dist/object/stringify-object.js +2 -2
  180. package/dist/object/stringify-object.js.map +1 -1
  181. package/dist/object/stringify-object.test.js.map +1 -1
  182. package/dist/qr.d.ts +38 -0
  183. package/dist/qr.d.ts.map +1 -0
  184. package/dist/qr.js +109 -0
  185. package/dist/qr.js.map +1 -0
  186. package/dist/set.js +1 -1
  187. package/dist/set.js.map +1 -1
  188. package/dist/string.d.ts +0 -2
  189. package/dist/string.d.ts.map +1 -1
  190. package/dist/string.js +0 -2
  191. package/dist/string.js.map +1 -1
  192. package/package.json +61 -55
  193. package/src/NoopTracer.test.ts +20 -0
  194. package/src/NoopTracer.ts +28 -37
  195. package/src/binary.ts +1 -1
  196. package/src/browser/Opfs/Opfs.ts +463 -0
  197. package/src/browser/Opfs/debug-utils.ts +154 -0
  198. package/src/browser/Opfs/mod.ts +3 -0
  199. package/src/browser/Opfs/utils.ts +297 -0
  200. package/src/browser/QuotaExceededError.ts +60 -0
  201. package/src/browser/WebChannelBrowser.ts +145 -0
  202. package/src/browser/WebError.test.ts +66 -0
  203. package/src/browser/WebError.ts +587 -0
  204. package/src/{effect → browser}/WebLock.ts +27 -28
  205. package/src/{browser.ts → browser/detect.ts} +6 -6
  206. package/src/browser/mod.ts +8 -0
  207. package/src/cuid/cuid.browser.ts +1 -1
  208. package/src/cuid/cuid.node.ts +1 -1
  209. package/src/effect/Debug.ts +477 -0
  210. package/src/effect/Effect.test.ts +117 -0
  211. package/src/effect/Effect.ts +174 -79
  212. package/src/effect/Error.ts +1 -1
  213. package/src/effect/Logger.ts +0 -48
  214. package/src/effect/OtelTracer.ts +2 -3
  215. package/src/effect/RpcClient.ts +85 -65
  216. package/src/effect/Schedule.ts +4 -5
  217. package/src/effect/Schema/debug-diff.test.ts +7 -7
  218. package/src/effect/Schema/debug-diff.ts +11 -12
  219. package/src/effect/Schema/index.ts +121 -57
  220. package/src/effect/Stream.test.ts +14 -13
  221. package/src/effect/Stream.ts +23 -16
  222. package/src/effect/Subscribable.ts +31 -42
  223. package/src/effect/SubscriptionRef.ts +9 -13
  224. package/src/effect/TaskTracing.ts +13 -16
  225. package/src/effect/WebChannel/WebChannel.test.ts +24 -24
  226. package/src/effect/WebChannel/WebChannel.ts +102 -192
  227. package/src/effect/WebChannel/broadcastChannelWithAck.ts +25 -15
  228. package/src/effect/WebChannel/common.ts +16 -17
  229. package/src/effect/WebSocket.test.ts +2 -2
  230. package/src/effect/WebSocket.ts +20 -16
  231. package/src/effect/mod.browser-build.test.ts +19 -0
  232. package/src/effect/{index.ts → mod.ts} +43 -69
  233. package/src/effect/spanEvent.test.ts +92 -0
  234. package/src/effect/spanEvent.ts +17 -0
  235. package/src/env.ts +2 -1
  236. package/src/fast-deep-equal.ts +9 -10
  237. package/src/global.ts +4 -2
  238. package/src/misc.ts +13 -5
  239. package/src/mod.ts +188 -32
  240. package/src/node/mod.ts +57 -12
  241. package/src/object/index.ts +0 -24
  242. package/src/object/stringify-object.test.ts +1 -0
  243. package/src/object/stringify-object.ts +2 -2
  244. package/src/qr.ts +125 -0
  245. package/src/set.ts +1 -1
  246. package/src/string.ts +0 -3
  247. package/dist/.tsbuildinfo.json +0 -1
  248. package/dist/browser.d.ts.map +0 -1
  249. package/dist/browser.js.map +0 -1
  250. package/dist/effect/BucketQueue.d.ts +0 -20
  251. package/dist/effect/BucketQueue.d.ts.map +0 -1
  252. package/dist/effect/BucketQueue.js +0 -34
  253. package/dist/effect/BucketQueue.js.map +0 -1
  254. package/dist/effect/Scheduler.d.ts +0 -4
  255. package/dist/effect/Scheduler.d.ts.map +0 -1
  256. package/dist/effect/Scheduler.js +0 -9
  257. package/dist/effect/Scheduler.js.map +0 -1
  258. package/dist/effect/ServiceContext.d.ts +0 -37
  259. package/dist/effect/ServiceContext.d.ts.map +0 -1
  260. package/dist/effect/ServiceContext.js +0 -55
  261. package/dist/effect/ServiceContext.js.map +0 -1
  262. package/dist/effect/WebLock.d.ts.map +0 -1
  263. package/dist/effect/WebLock.js.map +0 -1
  264. package/dist/effect/index.d.ts +0 -32
  265. package/dist/effect/index.d.ts.map +0 -1
  266. package/dist/effect/index.js +0 -35
  267. package/dist/effect/index.js.map +0 -1
  268. package/dist/guards.d.ts +0 -6
  269. package/dist/guards.d.ts.map +0 -1
  270. package/dist/guards.js +0 -6
  271. package/dist/guards.js.map +0 -1
  272. package/dist/node/ChildProcessRunner/ChildProcessRunner.d.ts +0 -4
  273. package/dist/node/ChildProcessRunner/ChildProcessRunner.d.ts.map +0 -1
  274. package/dist/node/ChildProcessRunner/ChildProcessRunner.js +0 -122
  275. package/dist/node/ChildProcessRunner/ChildProcessRunner.js.map +0 -1
  276. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.d.ts +0 -2
  277. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.d.ts.map +0 -1
  278. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.js +0 -218
  279. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.js.map +0 -1
  280. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.d.ts +0 -84
  281. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.d.ts.map +0 -1
  282. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.js +0 -68
  283. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.js.map +0 -1
  284. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.d.ts +0 -2
  285. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.d.ts.map +0 -1
  286. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.js +0 -52
  287. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.js.map +0 -1
  288. package/dist/node/ChildProcessRunner/ChildProcessWorker.d.ts +0 -23
  289. package/dist/node/ChildProcessRunner/ChildProcessWorker.d.ts.map +0 -1
  290. package/dist/node/ChildProcessRunner/ChildProcessWorker.js +0 -138
  291. package/dist/node/ChildProcessRunner/ChildProcessWorker.js.map +0 -1
  292. package/dist/object/omit.d.ts +0 -3
  293. package/dist/object/omit.d.ts.map +0 -1
  294. package/dist/object/omit.js +0 -14
  295. package/dist/object/omit.js.map +0 -1
  296. package/dist/object/pick.d.ts +0 -14
  297. package/dist/object/pick.d.ts.map +0 -1
  298. package/dist/object/pick.js +0 -17
  299. package/dist/object/pick.js.map +0 -1
  300. package/dist/time.d.ts +0 -12
  301. package/dist/time.d.ts.map +0 -1
  302. package/dist/time.js +0 -22
  303. package/dist/time.js.map +0 -1
  304. package/src/effect/BucketQueue.ts +0 -49
  305. package/src/effect/Scheduler.ts +0 -13
  306. package/src/effect/ServiceContext.ts +0 -108
  307. package/src/guards.ts +0 -8
  308. package/src/node/ChildProcessRunner/ChildProcessRunner.ts +0 -135
  309. package/src/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.ts +0 -302
  310. package/src/node/ChildProcessRunner/ChildProcessRunnerTest/schema.ts +0 -78
  311. package/src/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.ts +0 -66
  312. package/src/node/ChildProcessRunner/ChildProcessWorker.ts +0 -168
  313. package/src/object/omit.ts +0 -17
  314. package/src/object/pick.ts +0 -27
  315. package/src/time.ts +0 -25
  316. /package/dist/{effect → browser}/WebLock.d.ts +0 -0
@@ -0,0 +1,423 @@
1
+ import "./QuotaExceededError.js";
2
+ import { Predicate, Schema } from 'effect';
3
+ /**
4
+ * Unique identifier for web errors.
5
+ */
6
+ const TypeId = '~@livestore/utils/WebError';
7
+ /**
8
+ * Type guard to check if a value is a web error.
9
+ *
10
+ * @param u - The value to check
11
+ * @returns `true` if the value is an `WebError`, `false` otherwise
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * import { WebError } from "@livestore/utils/effect"
16
+ *
17
+ * const someError = new Error("generic error")
18
+ * const webError = new WebError.UnknownError({
19
+ * module: "Test",
20
+ * method: "example"
21
+ * })
22
+ *
23
+ * console.log(WebError.isWebError(someError)) // false
24
+ * console.log(WebError.isWebError(webError)) // true
25
+ * ```
26
+ */
27
+ export const isWebError = (u) => Predicate.hasProperty(u, TypeId);
28
+ // ============================================================================
29
+ // Simple Exception Errors
30
+ // ============================================================================
31
+ //
32
+ // [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#standard_error_types)
33
+ // [Specification](https://webidl.spec.whatwg.org/#dfn-simple-exception)
34
+ /**
35
+ * Error for the web standard "EvalError" simple exception.
36
+ *
37
+ * Thrown when the `eval` function is used in a way that violates its usage restrictions.
38
+ *
39
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Evalerror | MDN Reference}
40
+ * @see {@link https://webidl.spec.whatwg.org/#exceptiondef-evalerror | Specification}
41
+ */
42
+ export class EvalError extends Schema.TaggedError(`${TypeId}/EvalError`)('EvalError', {
43
+ cause: Schema.instanceOf(globalThis.EvalError),
44
+ }) {
45
+ [TypeId] = TypeId;
46
+ }
47
+ /**
48
+ * Error for the web standard "RangeError" simple exception.
49
+ *
50
+ * Indicates that a numeric value is outside the permitted range.
51
+ *
52
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Rangeerror | MDN Reference}
53
+ * @see {@link https://webidl.spec.whatwg.org/#exceptiondef-rangeerror | Specification}
54
+ */
55
+ export class RangeError extends Schema.TaggedError(`${TypeId}/RangeError`)('RangeError', {
56
+ cause: Schema.instanceOf(globalThis.RangeError),
57
+ }) {
58
+ [TypeId] = TypeId;
59
+ }
60
+ /**
61
+ * Error for the web standard "ReferenceError" simple exception.
62
+ *
63
+ * Raised when code references an identifier that has not been defined.
64
+ *
65
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Referenceerror | MDN Reference}
66
+ * @see {@link https://webidl.spec.whatwg.org/#exceptiondef-referenceerror | Specification}
67
+ */
68
+ export class ReferenceError extends Schema.TaggedError(`${TypeId}/ReferenceError`)('ReferenceError', {
69
+ cause: Schema.instanceOf(globalThis.ReferenceError),
70
+ }) {
71
+ [TypeId] = TypeId;
72
+ }
73
+ /**
74
+ * Error for the web standard "TypeError" simple exception.
75
+ *
76
+ * Occurs when an operation is applied to a value of an inappropriate type.
77
+ *
78
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Typeerror | MDN Reference}
79
+ * @see {@link https://webidl.spec.whatwg.org/#exceptiondef-typeerror | Specification}
80
+ */
81
+ export class TypeError extends Schema.TaggedError(`${TypeId}/TypeError`)('TypeError', {
82
+ cause: Schema.instanceOf(globalThis.TypeError),
83
+ }) {
84
+ [TypeId] = TypeId;
85
+ }
86
+ /**
87
+ * Error for the web standard "URIError" simple exception.
88
+ *
89
+ * Signals incorrect usage of global URI handling functions such as `decodeURI` or `encodeURI`.
90
+ *
91
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/URIerror | MDN Reference}
92
+ * @see {@link https://webidl.spec.whatwg.org/#exceptiondef-urierror | Specification}
93
+ */
94
+ export class URIError extends Schema.TaggedError(`${TypeId}/URIError`)('URIError', {
95
+ cause: Schema.instanceOf(globalThis.URIError),
96
+ }) {
97
+ [TypeId] = TypeId;
98
+ }
99
+ // ============================================================================
100
+ // Predefined DOMException Errors
101
+ // ============================================================================
102
+ //
103
+ // [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/DOMException)
104
+ // [Specification](https://webidl.spec.whatwg.org/#idl-DOMException-derived-predefineds)
105
+ const domExceptionWithName = (expectedName) => Schema.instanceOf(DOMException).check(Schema.makeFilter((domException) => domException.name === expectedName
106
+ ? undefined
107
+ : `Expected DOMException with name "${expectedName}", got "${domException.name}"`));
108
+ /**
109
+ * Error for the web standard "QuotaExceededError" DOMException-derived error.
110
+ *
111
+ * The quota has been exceeded.
112
+ *
113
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/QuotaExceededError | MDN Reference}
114
+ * @see {@link https://webidl.spec.whatwg.org/#quotaexceedederror | Specification}
115
+ */
116
+ export class QuotaExceededError extends Schema.TaggedError(`${TypeId}/QuotaExceededError`)('QuotaExceededError', {
117
+ cause: Schema.Union([
118
+ typeof globalThis.QuotaExceededError === 'function'
119
+ ? Schema.instanceOf(globalThis.QuotaExceededError)
120
+ : Schema.Never,
121
+ // Deprecated but still in use in some browsers
122
+ domExceptionWithName('QuotaExceededError'),
123
+ ]),
124
+ }) {
125
+ [TypeId] = TypeId;
126
+ get message() {
127
+ return this.cause.message;
128
+ }
129
+ }
130
+ // ============================================================================
131
+ // Base DOMException Errors
132
+ // ============================================================================
133
+ //
134
+ // [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/DOMException#error_names)
135
+ // [Specification](https://webidl.spec.whatwg.org/#idl-DOMException-error-names)
136
+ /**
137
+ * Error for the web standard "NoModificationAllowedError" DOMException.
138
+ *
139
+ * The object can not be modified.
140
+ *
141
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/DOMException#nomodificationallowederror | MDN Reference}
142
+ * @see {@link https://webidl.spec.whatwg.org/#nomodificationallowederror | Specification}
143
+ */
144
+ export class NoModificationAllowedError extends Schema.TaggedError(`${TypeId}/NoModificationAllowedError`)('NoModificationAllowedError', {
145
+ cause: domExceptionWithName('NoModificationAllowedError'),
146
+ }) {
147
+ [TypeId] = TypeId;
148
+ get message() {
149
+ return this.cause.message;
150
+ }
151
+ }
152
+ /**
153
+ * Error for the web standard "NotFoundError" DOMException
154
+ *
155
+ * The object can not be found here.
156
+ *
157
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/DOMException#notfounderror | MDN Reference}
158
+ * @see {@link https://webidl.spec.whatwg.org/#notfounderror | Specification}
159
+ */
160
+ export class NotFoundError extends Schema.TaggedError(`${TypeId}/NotFoundError`)('NotFoundError', {
161
+ cause: domExceptionWithName('NotFoundError'),
162
+ }) {
163
+ [TypeId] = TypeId;
164
+ get message() {
165
+ return this.cause.message;
166
+ }
167
+ }
168
+ /**
169
+ * Error for the web standard "NotAllowedError" DOMException
170
+ *
171
+ * The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission.
172
+ *
173
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/DOMException#notallowederror | MDN Reference}
174
+ * @see {@link https://webidl.spec.whatwg.org/#notallowederror | Specification}
175
+ */
176
+ export class NotAllowedError extends Schema.TaggedError(`${TypeId}/NotAllowedError`)('NotAllowedError', {
177
+ cause: domExceptionWithName('NotAllowedError'),
178
+ }) {
179
+ [TypeId] = TypeId;
180
+ get message() {
181
+ return this.cause.message;
182
+ }
183
+ }
184
+ /**
185
+ * Error for the web standard "TypeMismatchError" DOMException.
186
+ *
187
+ * The object can not be converted to the expected type.
188
+ *
189
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/DOMException#typemismatcherror | MDN Reference}
190
+ * @see {@link https://webidl.spec.whatwg.org/#typemismatcherror | Specification}
191
+ */
192
+ export class TypeMismatchError extends Schema.TaggedError(`${TypeId}/TypeMismatchError`)('TypeMismatchError', {
193
+ cause: domExceptionWithName('TypeMismatchError'),
194
+ }) {
195
+ [TypeId] = TypeId;
196
+ get message() {
197
+ return this.cause.message;
198
+ }
199
+ }
200
+ /**
201
+ * Error for the web standard "InvalidStateError" DOMException.
202
+ *
203
+ * The object is in an invalid state.
204
+ *
205
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/DOMException#invalidstateerror | MDN Reference}
206
+ * @see {@link https://webidl.spec.whatwg.org/#invalidstateerror | Specification}
207
+ */
208
+ export class InvalidStateError extends Schema.TaggedError(`${TypeId}/InvalidStateError`)('InvalidStateError', {
209
+ cause: domExceptionWithName('InvalidStateError'),
210
+ }) {
211
+ [TypeId] = TypeId;
212
+ get message() {
213
+ return this.cause.message;
214
+ }
215
+ }
216
+ /**
217
+ * Error for the web standard "AbortError" DOMException.
218
+ *
219
+ * The operation was aborted.
220
+ *
221
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/DOMException#aborterror | MDN Reference}
222
+ * @see {@link https://webidl.spec.whatwg.org/#aborterror | Specification}
223
+ */
224
+ export class AbortError extends Schema.TaggedError(`${TypeId}/AbortError`)('AbortError', {
225
+ cause: domExceptionWithName('AbortError'),
226
+ }) {
227
+ [TypeId] = TypeId;
228
+ get message() {
229
+ return this.cause.message;
230
+ }
231
+ }
232
+ /**
233
+ * Error for the web standard "InvalidModificationError" DOMException.
234
+ *
235
+ * The object can not be modified in this way.
236
+ *
237
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/DOMException#invalidmodificationerror | MDN Reference}
238
+ * @see {@link https://webidl.spec.whatwg.org/#invalidmodificationerror | Specification}
239
+ */
240
+ export class InvalidModificationError extends Schema.TaggedError(`${TypeId}/InvalidModificationError`)('InvalidModificationError', {
241
+ cause: domExceptionWithName('InvalidModificationError'),
242
+ }) {
243
+ [TypeId] = TypeId;
244
+ get message() {
245
+ return this.cause.message;
246
+ }
247
+ }
248
+ /**
249
+ * Error for the web standard "SecurityError" DOMException.
250
+ *
251
+ * The operation is insecure.
252
+ *
253
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/DOMException#securityerror | MDN Reference}
254
+ * @see {@link https://webidl.spec.whatwg.org/#securityerror | Specification}
255
+ */
256
+ export class SecurityError extends Schema.TaggedError(`${TypeId}/SecurityError`)('SecurityError', {
257
+ cause: domExceptionWithName('SecurityError'),
258
+ }) {
259
+ [TypeId] = TypeId;
260
+ get message() {
261
+ return this.cause.message;
262
+ }
263
+ }
264
+ /**
265
+ * Error for the web standard "DataCloneError" DOMException.
266
+ *
267
+ * The object can not be cloned.
268
+ *
269
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/DOMException#datacloneerror | MDN Reference}
270
+ * @see {@link https://webidl.spec.whatwg.org/#datacloneerror | Specification}
271
+ */
272
+ export class DataCloneError extends Schema.TaggedError(`${TypeId}/DataCloneError`)('DataCloneError', {
273
+ cause: domExceptionWithName('DataCloneError'),
274
+ }) {
275
+ [TypeId] = TypeId;
276
+ get message() {
277
+ return this.cause.message;
278
+ }
279
+ }
280
+ // ============================================================================
281
+ // Custom Errors
282
+ // ============================================================================
283
+ /**
284
+ * Catch-all error for unexpected runtime errors in web environments.
285
+ *
286
+ * This error is used when an unexpected exception occurs that doesn't fit
287
+ * into the other specific error categories. It provides context about where
288
+ * the error occurred and preserves the original cause for debugging.
289
+ *
290
+ * @example
291
+ * ```ts
292
+ * import { WebError } from "@livestore/utils/effect"
293
+ * import { Effect } from "effect"
294
+ *
295
+ * const riskyOperation = () => {
296
+ * try {
297
+ * // Some operation that might throw
298
+ * throw new Error("Unexpected runtime issue")
299
+ * } catch (cause) {
300
+ * return Effect.fail(new WebError.UnknownError({
301
+ * module: "JSON",
302
+ * method: "parse",
303
+ * description: "Could not parse string as JSON",
304
+ * cause
305
+ * }))
306
+ * }
307
+ * }
308
+ *
309
+ * const program = riskyOperation().pipe(
310
+ * Effect.catchTag("UnknownError", (error) => {
311
+ * console.log(error.message)
312
+ * // "JSON.parse: Could not parse string as JSON"
313
+ * return Effect.succeed("JSON parsing not possible")
314
+ * })
315
+ * )
316
+ * ```
317
+ */
318
+ export class UnknownError extends Schema.TaggedError(`${TypeId}/UnknownError`)('UnknownError', {
319
+ module: Schema.optional(Schema.String),
320
+ method: Schema.optional(Schema.String),
321
+ description: Schema.optional(Schema.String),
322
+ cause: Schema.optional(Schema.Defect()),
323
+ }) {
324
+ [TypeId] = TypeId;
325
+ get message() {
326
+ const messageEnd = Predicate.isUndefined(this.description) === true ? 'A web error occurred' : this.description;
327
+ const moduleMethod = Predicate.isString(this.module) === true && Predicate.isString(this.method) === true
328
+ ? `${this.module}.${this.method}`
329
+ : undefined;
330
+ return Predicate.isUndefined(moduleMethod) === true ? messageEnd : `${moduleMethod}: ${messageEnd}`;
331
+ }
332
+ }
333
+ /**
334
+ * Schema for validating and parsing web errors.
335
+ *
336
+ * This schema can be used to decode unknown values into properly typed web
337
+ * errors, ensuring type safety when handling errors from external sources or
338
+ * serialized data.
339
+ */
340
+ export const WebError = Schema.Union([
341
+ // Simple Exception Errors
342
+ EvalError,
343
+ RangeError,
344
+ ReferenceError,
345
+ TypeError,
346
+ URIError,
347
+ // Predefined DOMException Errors
348
+ QuotaExceededError,
349
+ // Base DOMException Errors
350
+ NoModificationAllowedError,
351
+ NotFoundError,
352
+ NotAllowedError,
353
+ TypeMismatchError,
354
+ InvalidStateError,
355
+ AbortError,
356
+ InvalidModificationError,
357
+ SecurityError,
358
+ DataCloneError,
359
+ // Custom Errors
360
+ UnknownError,
361
+ ]);
362
+ export function classifyWebError(value, expected = []) {
363
+ const parsed = parseWebError(value);
364
+ if (expected.length === 0)
365
+ return parsed;
366
+ if (expected.some((ErrorConstructor) => parsed instanceof ErrorConstructor) === true)
367
+ return parsed;
368
+ return parsed instanceof UnknownError ? parsed : new UnknownError({ cause: parsed });
369
+ }
370
+ /**
371
+ * Converts web-native exception shapes to LiveStore's `WebError`
372
+ * classes while preserving the original value as `cause`.
373
+ */
374
+ const parseWebError = (cause) => {
375
+ if (isWebError(cause) === true)
376
+ return cause;
377
+ // Simple Exception Errors
378
+ if (cause instanceof globalThis.EvalError)
379
+ return new EvalError({ cause: cause });
380
+ if (cause instanceof globalThis.RangeError)
381
+ return new RangeError({ cause: cause });
382
+ if (cause instanceof globalThis.ReferenceError)
383
+ return new ReferenceError({ cause: cause });
384
+ if (cause instanceof globalThis.TypeError)
385
+ return new TypeError({ cause: cause });
386
+ if (cause instanceof globalThis.URIError)
387
+ return new URIError({ cause: cause });
388
+ // Predefined DOMException Errors
389
+ if (typeof globalThis.QuotaExceededError === 'function' && cause instanceof globalThis.QuotaExceededError) {
390
+ return new QuotaExceededError({ cause: cause });
391
+ }
392
+ // Base DOMException Errors
393
+ if (cause instanceof DOMException) {
394
+ switch (cause.name) {
395
+ case 'QuotaExceededError':
396
+ return new QuotaExceededError({ cause: cause });
397
+ case 'NoModificationAllowedError':
398
+ return new NoModificationAllowedError({ cause: cause });
399
+ case 'NotFoundError':
400
+ return new NotFoundError({ cause: cause });
401
+ case 'NotAllowedError':
402
+ return new NotAllowedError({ cause: cause });
403
+ case 'TypeMismatchError':
404
+ return new TypeMismatchError({ cause: cause });
405
+ case 'InvalidStateError':
406
+ return new InvalidStateError({ cause: cause });
407
+ case 'AbortError':
408
+ return new AbortError({ cause: cause });
409
+ case 'InvalidModificationError':
410
+ return new InvalidModificationError({ cause: cause });
411
+ case 'SecurityError':
412
+ return new SecurityError({ cause: cause });
413
+ case 'DataCloneError':
414
+ return new DataCloneError({ cause: cause });
415
+ default:
416
+ break;
417
+ }
418
+ }
419
+ if (cause instanceof Error)
420
+ return new UnknownError({ description: cause.message, cause: cause });
421
+ return new UnknownError({ cause: cause });
422
+ };
423
+ //# sourceMappingURL=WebError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebError.js","sourceRoot":"","sources":["../../src/browser/WebError.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=WebError.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebError.test.d.ts","sourceRoot":"","sources":["../../src/browser/WebError.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ import * as Vitest from '@effect/vitest';
2
+ import * as WebError from "./WebError.js";
3
+ Vitest.describe('parseWebError', () => {
4
+ Vitest.it('returns a WebError instance unchanged when no expectations are provided', () => {
5
+ const domException = new DOMException('missing node', 'NotFoundError');
6
+ const webError = new WebError.NotFoundError({ cause: domException });
7
+ const result = WebError.classifyWebError(webError);
8
+ Vitest.expect(result).toBeInstanceOf(WebError.NotFoundError);
9
+ Vitest.expect(result.cause).toBe(domException);
10
+ });
11
+ Vitest.it('maps native errors to the corresponding WebError when expected', () => {
12
+ const nativeError = new globalThis.TypeError('unsupported type');
13
+ const result = WebError.classifyWebError(nativeError, [WebError.TypeError]);
14
+ Vitest.expect(result).toBeInstanceOf(WebError.TypeError);
15
+ Vitest.expect(result.cause).toBe(nativeError);
16
+ });
17
+ Vitest.it('wraps parsed errors that are not in the expected list in UnknownError', () => {
18
+ const nativeError = new globalThis.RangeError('value out of range');
19
+ const result = WebError.classifyWebError(nativeError, [WebError.TypeError]);
20
+ Vitest.expect(result).toBeInstanceOf(WebError.UnknownError);
21
+ Vitest.expect(result.cause).toBeInstanceOf(WebError.RangeError);
22
+ });
23
+ Vitest.it('translates DOMException names into the matching WebError variant', () => {
24
+ const domException = new DOMException('permission denied', 'NotAllowedError');
25
+ const result = WebError.classifyWebError(domException, [WebError.NotAllowedError]);
26
+ Vitest.expect(result).toBeInstanceOf(WebError.NotAllowedError);
27
+ Vitest.expect(result.cause).toBe(domException);
28
+ });
29
+ Vitest.it('produces UnknownError for non-error values with the default message', () => {
30
+ const value = { reason: 'unexpected' };
31
+ const result = WebError.classifyWebError(value);
32
+ Vitest.expect(result).toBeInstanceOf(WebError.UnknownError);
33
+ Vitest.expect(result.cause).toBeDefined();
34
+ Vitest.expect(result.message).toBe('A web error occurred');
35
+ });
36
+ Vitest.it('returns UnknownError instances without altering their payload when expectations are provided', () => {
37
+ const existing = new WebError.UnknownError({ description: 'pre-parsed' });
38
+ const result = WebError.classifyWebError(existing, [WebError.TypeError]);
39
+ Vitest.expect(result).toBeInstanceOf(WebError.UnknownError);
40
+ if (!(result instanceof WebError.UnknownError)) {
41
+ throw new Error('Expected an UnknownError instance');
42
+ }
43
+ Vitest.expect(result.description).toBe('pre-parsed');
44
+ });
45
+ });
46
+ //# sourceMappingURL=WebError.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebError.test.js","sourceRoot":"","sources":["../../src/browser/WebError.test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAA;AAExC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IACpC,MAAM,CAAC,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACxF,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,cAAc,EAAE,eAAe,CAAC,CAAA;QACtE,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAA;QAEpE,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAA;QAElD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;QAC5D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QAC/E,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;QAEhE,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;QAE3E,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QACxD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QACtF,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAA;QAEnE,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;QAE3E,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;QAC3D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IACjE,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QACjF,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAA;QAE7E,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAA;QAElF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA;QAC9D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QACpF,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA;QAEtC,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAE/C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;QAC3D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;QACzC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;IAC5D,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,EAAE,CAAC,8FAA8F,EAAE,GAAG,EAAE;QAC7G,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAA;QAEzE,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;QAExE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;QAE3D,IAAI,CAAC,CAAC,MAAM,YAAY,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;QACtD,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebLock.d.ts","sourceRoot":"","sources":["../../src/browser/WebLock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAa,MAAM,QAAQ,CAAA;AAGpD,eAAO,MAAM,QAAQ,GAClB,EAAE,EAAE,iCAIF;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACjC,OAAO,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;CACtC,MACA,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,CAiCpE,CAAA;AAEN,eAAO,MAAM,mBAAmB,GAAI,UAAU,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,MAAM,sCAqBnF,CAAA;AAEJ,eAAO,MAAM,kBAAkB,GAAI,UAAU,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,MAAM,yCAsBlF,CAAA;AAEJ,eAAO,MAAM,iBAAiB,GAAI,UAAU,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,MAAM,yCAmBjF,CAAA;AAEJ,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,sCAOxC,CAAA;AAEJ,0EAA0E;AAC1E,eAAO,MAAM,sBAAsB,GAAI,UAAU,MAAM,sCA0CnD,CAAA"}
@@ -1,25 +1,25 @@
1
- import { Deferred, Effect, Runtime } from 'effect';
1
+ import { Deferred, Effect } from 'effect';
2
2
  // See https://developer.mozilla.org/en-US/docs/Web/API/Web_Locks_API
3
3
  export const withLock = ({ lockName, onTaken, options, }) => (eff) => Effect.gen(function* () {
4
- const runtime = yield* Effect.runtime();
4
+ const services = yield* Effect.context();
5
5
  const exit = yield* Effect.tryPromise({
6
6
  try: (signal) => {
7
- if (signal.aborted)
7
+ if (signal.aborted === true)
8
8
  return 'aborted';
9
9
  // NOTE The 'signal' and 'ifAvailable' options cannot be used together.
10
10
  const requestOptions = options?.ifAvailable === true ? options : { ...options, signal };
11
11
  return navigator.locks.request(lockName, requestOptions, async (lock) => {
12
12
  if (lock === null) {
13
- if (onTaken) {
14
- const exit = await Runtime.runPromiseExit(runtime)(onTaken);
15
- if (exit._tag === 'Failure') {
16
- return exit;
13
+ if (onTaken !== undefined) {
14
+ const onTakenExit = await Effect.runPromiseExitWith(services)(onTaken);
15
+ if (onTakenExit._tag === 'Failure') {
16
+ return onTakenExit;
17
17
  }
18
18
  }
19
19
  return;
20
20
  }
21
21
  // TODO also propagate Effect interruption to the execution
22
- return Runtime.runPromiseExit(runtime)(eff);
22
+ return Effect.runPromiseExitWith(services)(eff);
23
23
  });
24
24
  },
25
25
  catch: (err) => err,
@@ -31,8 +31,8 @@ export const withLock = ({ lockName, onTaken, options, }) => (eff) => Effect.gen
31
31
  return exit.value;
32
32
  }
33
33
  });
34
- export const waitForDeferredLock = (deferred, lockName) => Effect.async((cb, signal) => {
35
- if (signal.aborted)
34
+ export const waitForDeferredLock = (deferred, lockName) => Effect.callback((cb, signal) => {
35
+ if (signal.aborted === true)
36
36
  return;
37
37
  navigator.locks
38
38
  .request(lockName, { signal, mode: 'exclusive', ifAvailable: false }, (_lock) => {
@@ -51,7 +51,7 @@ export const waitForDeferredLock = (deferred, lockName) => Effect.async((cb, sig
51
51
  }
52
52
  });
53
53
  });
54
- export const tryGetDeferredLock = (deferred, lockName) => Effect.async((cb, signal) => {
54
+ export const tryGetDeferredLock = (deferred, lockName) => Effect.callback((cb, signal) => {
55
55
  navigator.locks.request(lockName, { mode: 'exclusive', ifAvailable: true }, (lock) => {
56
56
  cb(Effect.succeed(lock !== null));
57
57
  // the code below is still running
@@ -70,7 +70,7 @@ export const tryGetDeferredLock = (deferred, lockName) => Effect.async((cb, sign
70
70
  ]);
71
71
  });
72
72
  });
73
- export const stealDeferredLock = (deferred, lockName) => Effect.async((cb, signal) => {
73
+ export const stealDeferredLock = (deferred, lockName) => Effect.callback((cb, signal) => {
74
74
  navigator.locks.request(lockName, { mode: 'exclusive', steal: true }, (lock) => {
75
75
  cb(Effect.succeed(lock !== null));
76
76
  // the code below is still running
@@ -86,22 +86,22 @@ export const stealDeferredLock = (deferred, lockName) => Effect.async((cb, signa
86
86
  // )
87
87
  });
88
88
  });
89
- export const waitForLock = (lockName) => Effect.async((cb, signal) => {
90
- if (signal.aborted)
89
+ export const waitForLock = (lockName) => Effect.callback((cb, signal) => {
90
+ if (signal.aborted === true)
91
91
  return;
92
92
  navigator.locks.request(lockName, { mode: 'shared', signal, ifAvailable: false }, (_lock) => {
93
- cb(Effect.succeed(void 0));
93
+ cb(Effect.void);
94
94
  });
95
95
  });
96
96
  /** Attempts to get the lock if available and waits for it to be stolen */
97
- export const getLockAndWaitForSteal = (lockName) => Effect.async((cb, signal) => {
98
- if (signal.aborted)
97
+ export const getLockAndWaitForSteal = (lockName) => Effect.callback((cb, signal) => {
98
+ if (signal.aborted === true)
99
99
  return;
100
100
  navigator.locks
101
101
  .request(lockName, { mode: 'exclusive', ifAvailable: true }, async (lock) => {
102
102
  if (lock === null) {
103
103
  // Lock wasn't available, resolve immediately
104
- cb(Effect.succeed(void 0));
104
+ cb(Effect.void);
105
105
  return;
106
106
  }
107
107
  // We got the lock, now wait for it to be stolen
@@ -113,9 +113,9 @@ export const getLockAndWaitForSteal = (lockName) => Effect.async((cb, signal) =>
113
113
  signal.addEventListener('abort', () => {
114
114
  resolve();
115
115
  });
116
- return Promise.race([holdLock, signal.aborted ? Promise.resolve() : holdLock]).catch(() => { });
116
+ return Promise.race([holdLock, signal.aborted === true ? Promise.resolve() : holdLock]).catch(() => { });
117
117
  }).catch(() => { });
118
- cb(Effect.succeed(void 0));
118
+ cb(Effect.void);
119
119
  })
120
120
  .catch((error) => {
121
121
  if (error.code === 20 &&
@@ -123,7 +123,7 @@ export const getLockAndWaitForSteal = (lockName) => Effect.async((cb, signal) =>
123
123
  error.message === `Lock broken by another request with the 'steal' option.`)) {
124
124
  // Given signal interruption is handled via Effect, we can ignore this case
125
125
  // or the case when the lock is stolen
126
- cb(Effect.succeed(void 0));
126
+ cb(Effect.void);
127
127
  }
128
128
  else {
129
129
  console.error('[@livestore/utils:WebLock] getLockAndWaitForSteal. error', error);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebLock.js","sourceRoot":"","sources":["../../src/browser/WebLock.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  export type DetectedBrowser = 'Something' | 'Opera' | 'Chrome' | 'Safari' | 'Firefox' | 'Edge' | 'Browser';
2
2
  export declare const detectBrowserName: () => DetectedBrowser;
3
- //# sourceMappingURL=browser.d.ts.map
3
+ //# sourceMappingURL=detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/browser/detect.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAA;AAE1G,eAAO,MAAM,iBAAiB,EAAE,MAAM,eA6BrC,CAAA"}