@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.
- package/dist/.tsbuildinfo +1 -0
- package/dist/NoopTracer.d.ts +7 -8
- package/dist/NoopTracer.d.ts.map +1 -1
- package/dist/NoopTracer.js +13 -15
- package/dist/NoopTracer.js.map +1 -1
- package/dist/NoopTracer.test.d.ts +2 -0
- package/dist/NoopTracer.test.d.ts.map +1 -0
- package/dist/NoopTracer.test.js +17 -0
- package/dist/NoopTracer.test.js.map +1 -0
- package/dist/binary.js +1 -1
- package/dist/binary.js.map +1 -1
- package/dist/browser/Opfs/Opfs.d.ts +201 -0
- package/dist/browser/Opfs/Opfs.d.ts.map +1 -0
- package/dist/browser/Opfs/Opfs.js +170 -0
- package/dist/browser/Opfs/Opfs.js.map +1 -0
- package/dist/browser/Opfs/debug-utils.d.ts +20 -0
- package/dist/browser/Opfs/debug-utils.d.ts.map +1 -0
- package/dist/browser/Opfs/debug-utils.js +95 -0
- package/dist/browser/Opfs/debug-utils.js.map +1 -0
- package/dist/browser/Opfs/mod.d.ts +4 -0
- package/dist/browser/Opfs/mod.d.ts.map +1 -0
- package/dist/browser/Opfs/mod.js +4 -0
- package/dist/browser/Opfs/mod.js.map +1 -0
- package/dist/browser/Opfs/utils.d.ts +71 -0
- package/dist/browser/Opfs/utils.d.ts.map +1 -0
- package/dist/browser/Opfs/utils.js +227 -0
- package/dist/browser/Opfs/utils.js.map +1 -0
- package/dist/browser/QuotaExceededError.d.ts +60 -0
- package/dist/browser/QuotaExceededError.d.ts.map +1 -0
- package/dist/browser/QuotaExceededError.js +2 -0
- package/dist/browser/QuotaExceededError.js.map +1 -0
- package/dist/browser/WebChannelBrowser.d.ts +22 -0
- package/dist/browser/WebChannelBrowser.d.ts.map +1 -0
- package/dist/browser/WebChannelBrowser.js +87 -0
- package/dist/browser/WebChannelBrowser.js.map +1 -0
- package/dist/browser/WebError.d.ts +389 -0
- package/dist/browser/WebError.d.ts.map +1 -0
- package/dist/browser/WebError.js +423 -0
- package/dist/browser/WebError.js.map +1 -0
- package/dist/browser/WebError.test.d.ts +2 -0
- package/dist/browser/WebError.test.d.ts.map +1 -0
- package/dist/browser/WebError.test.js +46 -0
- package/dist/browser/WebError.test.js.map +1 -0
- package/dist/browser/WebLock.d.ts.map +1 -0
- package/dist/{effect → browser}/WebLock.js +21 -21
- package/dist/browser/WebLock.js.map +1 -0
- package/dist/{browser.d.ts → browser/detect.d.ts} +1 -1
- package/dist/browser/detect.d.ts.map +1 -0
- package/dist/{browser.js → browser/detect.js} +7 -7
- package/dist/browser/detect.js.map +1 -0
- package/dist/browser/mod.d.ts +8 -0
- package/dist/browser/mod.d.ts.map +1 -0
- package/dist/browser/mod.js +8 -0
- package/dist/browser/mod.js.map +1 -0
- package/dist/cuid/cuid.browser.js +1 -1
- package/dist/cuid/cuid.browser.js.map +1 -1
- package/dist/cuid/cuid.node.js +1 -1
- package/dist/cuid/cuid.node.js.map +1 -1
- package/dist/effect/Debug.d.ts +38 -0
- package/dist/effect/Debug.d.ts.map +1 -0
- package/dist/effect/Debug.js +350 -0
- package/dist/effect/Debug.js.map +1 -0
- package/dist/effect/Effect.d.ts +91 -22
- package/dist/effect/Effect.d.ts.map +1 -1
- package/dist/effect/Effect.js +126 -38
- package/dist/effect/Effect.js.map +1 -1
- package/dist/effect/Effect.test.d.ts +2 -0
- package/dist/effect/Effect.test.d.ts.map +1 -0
- package/dist/effect/Effect.test.js +72 -0
- package/dist/effect/Effect.test.js.map +1 -0
- package/dist/effect/Error.d.ts +4 -6
- package/dist/effect/Error.d.ts.map +1 -1
- package/dist/effect/Error.js +1 -1
- package/dist/effect/Error.js.map +1 -1
- package/dist/effect/Logger.d.ts +0 -6
- package/dist/effect/Logger.d.ts.map +1 -1
- package/dist/effect/Logger.js +0 -32
- package/dist/effect/Logger.js.map +1 -1
- package/dist/effect/OtelTracer.d.ts +1 -1
- package/dist/effect/OtelTracer.d.ts.map +1 -1
- package/dist/effect/OtelTracer.js +2 -3
- package/dist/effect/OtelTracer.js.map +1 -1
- package/dist/effect/RpcClient.d.ts +7 -7
- package/dist/effect/RpcClient.d.ts.map +1 -1
- package/dist/effect/RpcClient.js +74 -54
- package/dist/effect/RpcClient.js.map +1 -1
- package/dist/effect/Schedule.d.ts +1 -1
- package/dist/effect/Schedule.d.ts.map +1 -1
- package/dist/effect/Schedule.js +2 -2
- package/dist/effect/Schedule.js.map +1 -1
- package/dist/effect/Schema/debug-diff.d.ts +1 -1
- package/dist/effect/Schema/debug-diff.d.ts.map +1 -1
- package/dist/effect/Schema/debug-diff.js +9 -10
- package/dist/effect/Schema/debug-diff.js.map +1 -1
- package/dist/effect/Schema/debug-diff.test.js +7 -4
- package/dist/effect/Schema/debug-diff.test.js.map +1 -1
- package/dist/effect/Schema/index.d.ts +28 -18
- package/dist/effect/Schema/index.d.ts.map +1 -1
- package/dist/effect/Schema/index.js +55 -28
- package/dist/effect/Schema/index.js.map +1 -1
- package/dist/effect/Stream.d.ts +13 -5
- package/dist/effect/Stream.d.ts.map +1 -1
- package/dist/effect/Stream.js +19 -12
- package/dist/effect/Stream.js.map +1 -1
- package/dist/effect/Stream.test.js +12 -12
- package/dist/effect/Stream.test.js.map +1 -1
- package/dist/effect/Subscribable.d.ts +9 -3
- package/dist/effect/Subscribable.d.ts.map +1 -1
- package/dist/effect/Subscribable.js +20 -35
- package/dist/effect/Subscribable.js.map +1 -1
- package/dist/effect/SubscriptionRef.d.ts +5 -6
- package/dist/effect/SubscriptionRef.d.ts.map +1 -1
- package/dist/effect/SubscriptionRef.js +2 -3
- package/dist/effect/SubscriptionRef.js.map +1 -1
- package/dist/effect/TaskTracing.d.ts +1 -1
- package/dist/effect/TaskTracing.d.ts.map +1 -1
- package/dist/effect/TaskTracing.js +12 -16
- package/dist/effect/TaskTracing.js.map +1 -1
- package/dist/effect/WebChannel/WebChannel.d.ts +11 -30
- package/dist/effect/WebChannel/WebChannel.d.ts.map +1 -1
- package/dist/effect/WebChannel/WebChannel.js +70 -125
- package/dist/effect/WebChannel/WebChannel.js.map +1 -1
- package/dist/effect/WebChannel/WebChannel.test.js +16 -16
- package/dist/effect/WebChannel/WebChannel.test.js.map +1 -1
- package/dist/effect/WebChannel/broadcastChannelWithAck.d.ts.map +1 -1
- package/dist/effect/WebChannel/broadcastChannelWithAck.js +20 -13
- package/dist/effect/WebChannel/broadcastChannelWithAck.js.map +1 -1
- package/dist/effect/WebChannel/common.d.ts +17 -18
- package/dist/effect/WebChannel/common.d.ts.map +1 -1
- package/dist/effect/WebChannel/common.js +7 -7
- package/dist/effect/WebChannel/common.js.map +1 -1
- package/dist/effect/WebSocket.d.ts +4 -6
- package/dist/effect/WebSocket.d.ts.map +1 -1
- package/dist/effect/WebSocket.js +17 -17
- package/dist/effect/WebSocket.js.map +1 -1
- package/dist/effect/WebSocket.test.js +2 -2
- package/dist/effect/WebSocket.test.js.map +1 -1
- package/dist/effect/mod.browser-build.test.d.ts +2 -0
- package/dist/effect/mod.browser-build.test.d.ts.map +1 -0
- package/dist/effect/mod.browser-build.test.js +18 -0
- package/dist/effect/mod.browser-build.test.js.map +1 -0
- package/dist/effect/mod.d.ts +30 -0
- package/dist/effect/mod.d.ts.map +1 -0
- package/dist/effect/mod.js +30 -0
- package/dist/effect/mod.js.map +1 -0
- package/dist/effect/spanEvent.d.ts +12 -0
- package/dist/effect/spanEvent.d.ts.map +1 -0
- package/dist/effect/spanEvent.js +12 -0
- package/dist/effect/spanEvent.js.map +1 -0
- package/dist/effect/spanEvent.test.d.ts +2 -0
- package/dist/effect/spanEvent.test.d.ts.map +1 -0
- package/dist/effect/spanEvent.test.js +79 -0
- package/dist/effect/spanEvent.test.js.map +1 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +1 -1
- package/dist/env.js.map +1 -1
- package/dist/fast-deep-equal.d.ts.map +1 -1
- package/dist/fast-deep-equal.js +9 -10
- package/dist/fast-deep-equal.js.map +1 -1
- package/dist/global.d.ts +3 -0
- package/dist/global.d.ts.map +1 -1
- package/dist/global.js.map +1 -1
- package/dist/misc.d.ts +9 -1
- package/dist/misc.d.ts.map +1 -1
- package/dist/misc.js +12 -4
- package/dist/misc.js.map +1 -1
- package/dist/mod.d.ts +177 -20
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +159 -22
- package/dist/mod.js.map +1 -1
- package/dist/node/mod.d.ts +45 -6
- package/dist/node/mod.d.ts.map +1 -1
- package/dist/node/mod.js +51 -9
- package/dist/node/mod.js.map +1 -1
- package/dist/object/index.d.ts +0 -9
- package/dist/object/index.d.ts.map +1 -1
- package/dist/object/index.js +0 -9
- package/dist/object/index.js.map +1 -1
- package/dist/object/stringify-object.js +2 -2
- package/dist/object/stringify-object.js.map +1 -1
- package/dist/object/stringify-object.test.js.map +1 -1
- package/dist/qr.d.ts +38 -0
- package/dist/qr.d.ts.map +1 -0
- package/dist/qr.js +109 -0
- package/dist/qr.js.map +1 -0
- package/dist/set.js +1 -1
- package/dist/set.js.map +1 -1
- package/dist/string.d.ts +0 -2
- package/dist/string.d.ts.map +1 -1
- package/dist/string.js +0 -2
- package/dist/string.js.map +1 -1
- package/package.json +61 -55
- package/src/NoopTracer.test.ts +20 -0
- package/src/NoopTracer.ts +28 -37
- package/src/binary.ts +1 -1
- package/src/browser/Opfs/Opfs.ts +463 -0
- package/src/browser/Opfs/debug-utils.ts +154 -0
- package/src/browser/Opfs/mod.ts +3 -0
- package/src/browser/Opfs/utils.ts +297 -0
- package/src/browser/QuotaExceededError.ts +60 -0
- package/src/browser/WebChannelBrowser.ts +145 -0
- package/src/browser/WebError.test.ts +66 -0
- package/src/browser/WebError.ts +587 -0
- package/src/{effect → browser}/WebLock.ts +27 -28
- package/src/{browser.ts → browser/detect.ts} +6 -6
- package/src/browser/mod.ts +8 -0
- package/src/cuid/cuid.browser.ts +1 -1
- package/src/cuid/cuid.node.ts +1 -1
- package/src/effect/Debug.ts +477 -0
- package/src/effect/Effect.test.ts +117 -0
- package/src/effect/Effect.ts +174 -79
- package/src/effect/Error.ts +1 -1
- package/src/effect/Logger.ts +0 -48
- package/src/effect/OtelTracer.ts +2 -3
- package/src/effect/RpcClient.ts +85 -65
- package/src/effect/Schedule.ts +4 -5
- package/src/effect/Schema/debug-diff.test.ts +7 -7
- package/src/effect/Schema/debug-diff.ts +11 -12
- package/src/effect/Schema/index.ts +121 -57
- package/src/effect/Stream.test.ts +14 -13
- package/src/effect/Stream.ts +23 -16
- package/src/effect/Subscribable.ts +31 -42
- package/src/effect/SubscriptionRef.ts +9 -13
- package/src/effect/TaskTracing.ts +13 -16
- package/src/effect/WebChannel/WebChannel.test.ts +24 -24
- package/src/effect/WebChannel/WebChannel.ts +102 -192
- package/src/effect/WebChannel/broadcastChannelWithAck.ts +25 -15
- package/src/effect/WebChannel/common.ts +16 -17
- package/src/effect/WebSocket.test.ts +2 -2
- package/src/effect/WebSocket.ts +20 -16
- package/src/effect/mod.browser-build.test.ts +19 -0
- package/src/effect/{index.ts → mod.ts} +43 -69
- package/src/effect/spanEvent.test.ts +92 -0
- package/src/effect/spanEvent.ts +17 -0
- package/src/env.ts +2 -1
- package/src/fast-deep-equal.ts +9 -10
- package/src/global.ts +4 -2
- package/src/misc.ts +13 -5
- package/src/mod.ts +188 -32
- package/src/node/mod.ts +57 -12
- package/src/object/index.ts +0 -24
- package/src/object/stringify-object.test.ts +1 -0
- package/src/object/stringify-object.ts +2 -2
- package/src/qr.ts +125 -0
- package/src/set.ts +1 -1
- package/src/string.ts +0 -3
- package/dist/.tsbuildinfo.json +0 -1
- package/dist/browser.d.ts.map +0 -1
- package/dist/browser.js.map +0 -1
- package/dist/effect/BucketQueue.d.ts +0 -20
- package/dist/effect/BucketQueue.d.ts.map +0 -1
- package/dist/effect/BucketQueue.js +0 -34
- package/dist/effect/BucketQueue.js.map +0 -1
- package/dist/effect/Scheduler.d.ts +0 -4
- package/dist/effect/Scheduler.d.ts.map +0 -1
- package/dist/effect/Scheduler.js +0 -9
- package/dist/effect/Scheduler.js.map +0 -1
- package/dist/effect/ServiceContext.d.ts +0 -37
- package/dist/effect/ServiceContext.d.ts.map +0 -1
- package/dist/effect/ServiceContext.js +0 -55
- package/dist/effect/ServiceContext.js.map +0 -1
- package/dist/effect/WebLock.d.ts.map +0 -1
- package/dist/effect/WebLock.js.map +0 -1
- package/dist/effect/index.d.ts +0 -32
- package/dist/effect/index.d.ts.map +0 -1
- package/dist/effect/index.js +0 -35
- package/dist/effect/index.js.map +0 -1
- package/dist/guards.d.ts +0 -6
- package/dist/guards.d.ts.map +0 -1
- package/dist/guards.js +0 -6
- package/dist/guards.js.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunner.d.ts +0 -4
- package/dist/node/ChildProcessRunner/ChildProcessRunner.d.ts.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunner.js +0 -122
- package/dist/node/ChildProcessRunner/ChildProcessRunner.js.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.d.ts +0 -2
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.d.ts.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.js +0 -218
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.js.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.d.ts +0 -84
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.d.ts.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.js +0 -68
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.js.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.d.ts +0 -2
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.d.ts.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.js +0 -52
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.js.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessWorker.d.ts +0 -23
- package/dist/node/ChildProcessRunner/ChildProcessWorker.d.ts.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessWorker.js +0 -138
- package/dist/node/ChildProcessRunner/ChildProcessWorker.js.map +0 -1
- package/dist/object/omit.d.ts +0 -3
- package/dist/object/omit.d.ts.map +0 -1
- package/dist/object/omit.js +0 -14
- package/dist/object/omit.js.map +0 -1
- package/dist/object/pick.d.ts +0 -14
- package/dist/object/pick.d.ts.map +0 -1
- package/dist/object/pick.js +0 -17
- package/dist/object/pick.js.map +0 -1
- package/dist/time.d.ts +0 -12
- package/dist/time.d.ts.map +0 -1
- package/dist/time.js +0 -22
- package/dist/time.js.map +0 -1
- package/src/effect/BucketQueue.ts +0 -49
- package/src/effect/Scheduler.ts +0 -13
- package/src/effect/ServiceContext.ts +0 -108
- package/src/guards.ts +0 -8
- package/src/node/ChildProcessRunner/ChildProcessRunner.ts +0 -135
- package/src/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.ts +0 -302
- package/src/node/ChildProcessRunner/ChildProcessRunnerTest/schema.ts +0 -78
- package/src/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.ts +0 -66
- package/src/node/ChildProcessRunner/ChildProcessWorker.ts +0 -168
- package/src/object/omit.ts +0 -17
- package/src/object/pick.ts +0 -27
- package/src/time.ts +0 -25
- /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 @@
|
|
|
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":"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"}
|
|
@@ -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
|
|
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
|
|
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
|
|
15
|
-
if (
|
|
16
|
-
return
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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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"}
|
|
@@ -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"}
|