@livestore/utils 0.4.0 → 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 -1
- package/dist/NoopTracer.d.ts +7 -8
- package/dist/NoopTracer.d.ts.map +1 -1
- package/dist/NoopTracer.js +3 -18
- 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/browser/Opfs/Opfs.d.ts +179 -29
- package/dist/browser/Opfs/Opfs.d.ts.map +1 -1
- package/dist/browser/Opfs/Opfs.js +132 -307
- package/dist/browser/Opfs/Opfs.js.map +1 -1
- package/dist/browser/Opfs/debug-utils.d.ts.map +1 -1
- package/dist/browser/Opfs/debug-utils.js +5 -4
- package/dist/browser/Opfs/debug-utils.js.map +1 -1
- package/dist/browser/Opfs/utils.d.ts +8 -8
- package/dist/browser/Opfs/utils.d.ts.map +1 -1
- package/dist/browser/Opfs/utils.js +35 -26
- package/dist/browser/Opfs/utils.js.map +1 -1
- package/dist/browser/QuotaExceededError.d.ts +10 -9
- package/dist/browser/QuotaExceededError.d.ts.map +1 -1
- package/dist/browser/WebChannelBrowser.d.ts.map +1 -1
- package/dist/browser/WebChannelBrowser.js +21 -10
- package/dist/browser/WebChannelBrowser.js.map +1 -1
- package/dist/browser/WebError.d.ts +54 -86
- package/dist/browser/WebError.d.ts.map +1 -1
- package/dist/browser/WebError.js +91 -84
- package/dist/browser/WebError.js.map +1 -1
- package/dist/browser/WebError.test.js +6 -6
- package/dist/browser/WebError.test.js.map +1 -1
- package/dist/browser/WebLock.d.ts.map +1 -1
- package/dist/browser/WebLock.js +13 -13
- package/dist/browser/WebLock.js.map +1 -1
- package/dist/effect/Debug.d.ts +4 -7
- package/dist/effect/Debug.d.ts.map +1 -1
- package/dist/effect/Debug.js +32 -36
- package/dist/effect/Debug.js.map +1 -1
- package/dist/effect/Effect.d.ts +31 -22
- package/dist/effect/Effect.d.ts.map +1 -1
- package/dist/effect/Effect.js +51 -47
- 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/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 +72 -52
- 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 +5 -7
- 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 -20
- 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 +9 -9
- 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 +7 -7
- package/dist/effect/WebChannel/WebChannel.d.ts.map +1 -1
- package/dist/effect/WebChannel/WebChannel.js +64 -43
- package/dist/effect/WebChannel/WebChannel.js.map +1 -1
- package/dist/effect/WebChannel/WebChannel.test.js +15 -15
- 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 +16 -9
- package/dist/effect/WebChannel/broadcastChannelWithAck.js.map +1 -1
- package/dist/effect/WebChannel/common.d.ts +16 -17
- package/dist/effect/WebChannel/common.d.ts.map +1 -1
- package/dist/effect/WebChannel/common.js +6 -6
- 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 +4 -4
- 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 +13 -15
- package/dist/effect/mod.d.ts.map +1 -1
- package/dist/effect/mod.js +13 -18
- package/dist/effect/mod.js.map +1 -1
- package/dist/effect/spanEvent.d.ts.map +1 -1
- package/dist/effect/spanEvent.js +2 -2
- package/dist/effect/spanEvent.js.map +1 -1
- package/dist/effect/spanEvent.test.js +10 -13
- package/dist/effect/spanEvent.test.js.map +1 -1
- package/dist/fast-deep-equal.d.ts.map +1 -1
- package/dist/fast-deep-equal.js +1 -2
- package/dist/fast-deep-equal.js.map +1 -1
- package/dist/misc.js +2 -2
- package/dist/misc.js.map +1 -1
- package/dist/mod.d.ts +0 -35
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +0 -8
- package/dist/mod.js.map +1 -1
- package/dist/node/mod.d.ts +17 -11
- package/dist/node/mod.d.ts.map +1 -1
- package/dist/node/mod.js +23 -16
- 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/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 +18 -36
- package/src/NoopTracer.test.ts +20 -0
- package/src/NoopTracer.ts +18 -41
- package/src/browser/Opfs/Opfs.ts +304 -277
- package/src/browser/Opfs/debug-utils.ts +7 -6
- package/src/browser/Opfs/utils.ts +36 -26
- package/src/browser/QuotaExceededError.ts +13 -10
- package/src/browser/WebChannelBrowser.ts +25 -11
- package/src/browser/WebError.test.ts +6 -6
- package/src/browser/WebError.ts +107 -133
- package/src/browser/WebLock.ts +13 -14
- package/src/effect/Debug.ts +66 -59
- package/src/effect/Effect.test.ts +117 -0
- package/src/effect/Effect.ts +84 -71
- package/src/effect/Logger.ts +0 -48
- package/src/effect/OtelTracer.ts +2 -3
- package/src/effect/RpcClient.ts +80 -61
- package/src/effect/Schedule.ts +4 -5
- package/src/effect/Schema/debug-diff.test.ts +6 -6
- package/src/effect/Schema/debug-diff.ts +6 -8
- package/src/effect/Schema/index.ts +122 -61
- package/src/effect/Stream.test.ts +9 -9
- package/src/effect/Stream.ts +23 -16
- package/src/effect/Subscribable.ts +31 -42
- package/src/effect/SubscriptionRef.ts +8 -12
- package/src/effect/TaskTracing.ts +13 -16
- package/src/effect/WebChannel/WebChannel.test.ts +23 -23
- package/src/effect/WebChannel/WebChannel.ts +87 -55
- package/src/effect/WebChannel/broadcastChannelWithAck.ts +21 -11
- package/src/effect/WebChannel/common.ts +14 -15
- package/src/effect/WebSocket.test.ts +2 -2
- package/src/effect/WebSocket.ts +9 -6
- package/src/effect/mod.browser-build.test.ts +19 -0
- package/src/effect/mod.ts +35 -69
- package/src/effect/spanEvent.test.ts +10 -13
- package/src/effect/spanEvent.ts +5 -3
- package/src/fast-deep-equal.ts +1 -2
- package/src/misc.ts +2 -2
- package/src/mod.ts +0 -36
- package/src/node/mod.ts +26 -20
- package/src/object/index.ts +0 -24
- package/src/string.ts +0 -3
- 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/guards.d.ts +0 -20
- package/dist/guards.d.ts.map +0 -1
- package/dist/guards.js +0 -20
- 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 -128
- package/dist/node/ChildProcessRunner/ChildProcessRunner.js.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.d.ts +0 -10
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.d.ts.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.js +0 -217
- 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 -23
- package/src/node/ChildProcessRunner/ChildProcessRunner.ts +0 -148
- package/src/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.ts +0 -311
- package/src/node/ChildProcessRunner/ChildProcessRunnerTest/schema.ts +0 -78
- package/src/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.ts +0 -65
- package/src/node/ChildProcessRunner/ChildProcessWorker.ts +0 -169
- package/src/object/omit.ts +0 -17
- package/src/object/pick.ts +0 -27
- package/src/time.ts +0 -25
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effect } from 'effect';
|
|
2
|
-
import
|
|
2
|
+
import * as Opfs from './Opfs.ts';
|
|
3
3
|
/**
|
|
4
4
|
* Resolve a directory handle using a slash-delimited OPFS path.
|
|
5
5
|
*
|
|
@@ -7,7 +7,7 @@ import { Opfs, OpfsError } from './Opfs.ts';
|
|
|
7
7
|
* @param options - Options forwarded to `getDirectoryHandle` when traversing segments.
|
|
8
8
|
* @returns Directory handle for the final segment.
|
|
9
9
|
*/
|
|
10
|
-
export declare const getDirectoryHandleByPath: (path: string, options?: FileSystemGetDirectoryOptions | undefined) => Effect.Effect<FileSystemDirectoryHandle, import("../WebError.ts").
|
|
10
|
+
export declare const getDirectoryHandleByPath: (path: string, options?: FileSystemGetDirectoryOptions | undefined) => Effect.Effect<FileSystemDirectoryHandle, import("../WebError.ts").WebError | Opfs.OpfsError, Opfs.Opfs>;
|
|
11
11
|
/**
|
|
12
12
|
* Remove a file or directory identified by an OPFS path.
|
|
13
13
|
*
|
|
@@ -16,14 +16,14 @@ export declare const getDirectoryHandleByPath: (path: string, options?: FileSyst
|
|
|
16
16
|
*/
|
|
17
17
|
export declare const remove: (path: string, options?: {
|
|
18
18
|
readonly recursive?: boolean;
|
|
19
|
-
} | undefined) => Effect.Effect<void, import("../WebError.ts").
|
|
19
|
+
} | undefined) => Effect.Effect<void, import("../WebError.ts").WebError | Opfs.OpfsError, Opfs.Opfs>;
|
|
20
20
|
/**
|
|
21
21
|
* Determine whether a file or directory exists at the given OPFS path.
|
|
22
22
|
*
|
|
23
23
|
* @param path - Slash-delimited path to inspect.
|
|
24
24
|
* @returns `true` if the path resolves to a file or directory, otherwise `false`.
|
|
25
25
|
*/
|
|
26
|
-
export declare const exists: (path: string) => Effect.Effect<boolean, import("../WebError.ts").TypeError | import("../WebError.ts").NotAllowedError | import("../WebError.ts").TypeMismatchError | import("../WebError.ts").SecurityError | import("../WebError.ts").UnknownError | OpfsError, Opfs>;
|
|
26
|
+
export declare const exists: (path: string) => Effect.Effect<boolean, import("../WebError.ts").EvalError | import("../WebError.ts").RangeError | import("../WebError.ts").ReferenceError | import("../WebError.ts").TypeError | import("../WebError.ts").URIError | import("../WebError.ts").NoModificationAllowedError | import("../WebError.ts").NotAllowedError | import("../WebError.ts").TypeMismatchError | import("../WebError.ts").InvalidStateError | import("../WebError.ts").AbortError | import("../WebError.ts").InvalidModificationError | import("../WebError.ts").SecurityError | import("../WebError.ts").DataCloneError | import("../WebError.ts").QuotaExceededError | import("../WebError.ts").UnknownError | Opfs.OpfsError, Opfs.Opfs>;
|
|
27
27
|
/**
|
|
28
28
|
* Create a directory at the provided path, optionally creating parents recursively.
|
|
29
29
|
*
|
|
@@ -32,7 +32,7 @@ export declare const exists: (path: string) => Effect.Effect<boolean, import("..
|
|
|
32
32
|
*/
|
|
33
33
|
export declare const makeDirectory: (path: string, options?: {
|
|
34
34
|
readonly recursive?: boolean;
|
|
35
|
-
} | undefined) => Effect.Effect<void, import("../WebError.ts").
|
|
35
|
+
} | undefined) => Effect.Effect<void, import("../WebError.ts").WebError | Opfs.OpfsError, Opfs.Opfs>;
|
|
36
36
|
/**
|
|
37
37
|
* Extract basic metadata for a given file handle.
|
|
38
38
|
*
|
|
@@ -44,7 +44,7 @@ export declare const getMetadata: (handle: FileSystemFileHandle) => Effect.Effec
|
|
|
44
44
|
size: number;
|
|
45
45
|
type: string;
|
|
46
46
|
lastModified: number;
|
|
47
|
-
}, import("../WebError.ts").
|
|
47
|
+
}, import("../WebError.ts").WebError, Opfs.Opfs>;
|
|
48
48
|
/**
|
|
49
49
|
* Write bytes to an OPFS path, creating or replacing the target file.
|
|
50
50
|
*
|
|
@@ -54,7 +54,7 @@ export declare const getMetadata: (handle: FileSystemFileHandle) => Effect.Effec
|
|
|
54
54
|
* @remarks
|
|
55
55
|
* - Only available in Safari 26 or higher (as of Dec 2025, not yet widely available).
|
|
56
56
|
*/
|
|
57
|
-
export declare const writeFile: (path: string, data: Uint8Array<ArrayBufferLike>) => Effect.Effect<void, import("../WebError.ts").
|
|
57
|
+
export declare const writeFile: (path: string, data: Uint8Array<ArrayBufferLike>) => Effect.Effect<void, import("../WebError.ts").WebError | Opfs.OpfsError, Opfs.Opfs>;
|
|
58
58
|
/**
|
|
59
59
|
* Synchronously write bytes to an OPFS path, creating or replacing the target file.
|
|
60
60
|
*
|
|
@@ -67,5 +67,5 @@ export declare const writeFile: (path: string, data: Uint8Array<ArrayBufferLike>
|
|
|
67
67
|
* - Crash safety: not atomic. A crash mid-write can leave the file truncated or partially written.
|
|
68
68
|
* For atomic replacement, prefer `writeFile` or a temp-file pattern with two prepared handles.
|
|
69
69
|
*/
|
|
70
|
-
export declare const syncWriteFile: (path: string, data: Uint8Array<ArrayBufferLike>) => Effect.Effect<undefined, import("../WebError.ts").WebError | OpfsError, Opfs>;
|
|
70
|
+
export declare const syncWriteFile: (path: string, data: Uint8Array<ArrayBufferLike>) => Effect.Effect<undefined, import("../WebError.ts").WebError | Opfs.OpfsError, Opfs.Opfs>;
|
|
71
71
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/browser/Opfs/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AAEvC,OAAO,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/browser/Opfs/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AAEvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAsGjC;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,gLAWnC,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,MAAM;yBAEgB,OAAO;oGAmBxC,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,MAAM,isBAkBjB,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa;yBAES,OAAO;oGASxC,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW;;;;;gDAUtB,CAAA;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,yIAqBpB,CAAA;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,8IAoCxB,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effect, Stream } from 'effect';
|
|
2
|
-
import
|
|
2
|
+
import * as Opfs from "./Opfs.js";
|
|
3
3
|
/**
|
|
4
4
|
* Set of path segments that are forbidden by the File System specification.
|
|
5
5
|
*
|
|
@@ -20,13 +20,13 @@ const DISALLOWED_SEGMENTS = new Set(['.', '..']);
|
|
|
20
20
|
const parsePathSegments = (path) => Effect.gen(function* () {
|
|
21
21
|
const segments = path.split('/').filter((segment) => segment.length > 0);
|
|
22
22
|
if (segments.length === 0) {
|
|
23
|
-
return yield* new OpfsError({
|
|
23
|
+
return yield* new Opfs.OpfsError({
|
|
24
24
|
message: `Invalid OPFS path '${path}': path must contain at least one non-empty segment`,
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
27
|
for (const segment of segments) {
|
|
28
28
|
if (DISALLOWED_SEGMENTS.has(segment) === true) {
|
|
29
|
-
return yield* new OpfsError({
|
|
29
|
+
return yield* new Opfs.OpfsError({
|
|
30
30
|
message: `Invalid OPFS path '${path}': segment '${segment}' is not supported`,
|
|
31
31
|
});
|
|
32
32
|
}
|
|
@@ -54,10 +54,11 @@ const splitPathSegments = (segments) => ({
|
|
|
54
54
|
* @param options - Options forwarded to each `getDirectoryHandle` call.
|
|
55
55
|
*/
|
|
56
56
|
const traverseDirectoryPath = (segments, options) => Effect.gen(function* () {
|
|
57
|
-
|
|
57
|
+
const opfs = yield* Opfs.Opfs;
|
|
58
|
+
let currentDirHandle = yield* opfs.getRootDirectoryHandle;
|
|
58
59
|
for (let index = 0; index < segments.length; index++) {
|
|
59
60
|
const segment = segments[index];
|
|
60
|
-
currentDirHandle = yield*
|
|
61
|
+
currentDirHandle = yield* opfs.getDirectoryHandle(currentDirHandle, segment, options);
|
|
61
62
|
}
|
|
62
63
|
return currentDirHandle;
|
|
63
64
|
});
|
|
@@ -68,12 +69,13 @@ const traverseDirectoryPath = (segments, options) => Effect.gen(function* () {
|
|
|
68
69
|
* @param options.recursive - When `true`, create every missing segment. Otherwise only the leaf is created.
|
|
69
70
|
*/
|
|
70
71
|
const ensureDirectoryPath = (segments, options) => Effect.gen(function* () {
|
|
71
|
-
|
|
72
|
+
const opfs = yield* Opfs.Opfs;
|
|
73
|
+
let currentDirHandle = yield* opfs.getRootDirectoryHandle;
|
|
72
74
|
for (let index = 0; index < segments.length; index++) {
|
|
73
75
|
const segment = segments[index];
|
|
74
76
|
const isLast = index === segments.length - 1;
|
|
75
77
|
const shouldCreate = options.recursive || isLast;
|
|
76
|
-
currentDirHandle = yield*
|
|
78
|
+
currentDirHandle = yield* opfs.getDirectoryHandle(currentDirHandle, segment, shouldCreate === true ? { create: true } : undefined);
|
|
77
79
|
}
|
|
78
80
|
return currentDirHandle;
|
|
79
81
|
});
|
|
@@ -85,8 +87,10 @@ const ensureDirectoryPath = (segments, options) => Effect.gen(function* () {
|
|
|
85
87
|
* @returns Directory handle for the final segment.
|
|
86
88
|
*/
|
|
87
89
|
export const getDirectoryHandleByPath = Effect.fn('@livestore/utils:Opfs.getDirectoryHandleByPath')(function* (path, options) {
|
|
88
|
-
if (isRootPath(path) === true)
|
|
89
|
-
|
|
90
|
+
if (isRootPath(path) === true) {
|
|
91
|
+
const opfs = yield* Opfs.Opfs;
|
|
92
|
+
return yield* opfs.getRootDirectoryHandle;
|
|
93
|
+
}
|
|
90
94
|
const pathSegments = yield* parsePathSegments(path);
|
|
91
95
|
return yield* traverseDirectoryPath(pathSegments, options);
|
|
92
96
|
});
|
|
@@ -98,16 +102,17 @@ export const getDirectoryHandleByPath = Effect.fn('@livestore/utils:Opfs.getDire
|
|
|
98
102
|
*/
|
|
99
103
|
export const remove = Effect.fn('@livestore/utils:Opfs.remove')(function* (path, options) {
|
|
100
104
|
const recursive = options?.recursive ?? false;
|
|
105
|
+
const opfs = yield* Opfs.Opfs;
|
|
101
106
|
if (isRootPath(path) === true) {
|
|
102
|
-
const rootHandle = yield*
|
|
103
|
-
const handlesStream =
|
|
104
|
-
yield* handlesStream.pipe(Stream.runForEach((handle) =>
|
|
107
|
+
const rootHandle = yield* opfs.getRootDirectoryHandle;
|
|
108
|
+
const handlesStream = opfs.values(rootHandle);
|
|
109
|
+
yield* handlesStream.pipe(Stream.runForEach((handle) => opfs.removeEntry(rootHandle, handle.name, { recursive: true })));
|
|
105
110
|
return;
|
|
106
111
|
}
|
|
107
112
|
const pathSegments = yield* parsePathSegments(path);
|
|
108
113
|
const { parentSegments, leafSegment: targetName } = splitPathSegments(pathSegments);
|
|
109
114
|
const parentDirHandle = yield* traverseDirectoryPath(parentSegments);
|
|
110
|
-
yield*
|
|
115
|
+
yield* opfs.removeEntry(parentDirHandle, targetName, { recursive });
|
|
111
116
|
});
|
|
112
117
|
/**
|
|
113
118
|
* Determine whether a file or directory exists at the given OPFS path.
|
|
@@ -120,10 +125,11 @@ export const exists = Effect.fn('@livestore/utils:Opfs.exists')(function* (path)
|
|
|
120
125
|
return true;
|
|
121
126
|
const pathSegments = yield* parsePathSegments(path);
|
|
122
127
|
const { parentSegments, leafSegment: targetName } = splitPathSegments(pathSegments);
|
|
123
|
-
const parentDirHandle = yield* traverseDirectoryPath(parentSegments, { create: false }).pipe(Effect.catchTag('NotFoundError', () => Effect.
|
|
128
|
+
const parentDirHandle = yield* traverseDirectoryPath(parentSegments, { create: false }).pipe(Effect.catchTag('NotFoundError', () => Effect.void));
|
|
124
129
|
if (parentDirHandle === undefined)
|
|
125
130
|
return false;
|
|
126
|
-
|
|
131
|
+
const opfs = yield* Opfs.Opfs;
|
|
132
|
+
return yield* opfs.getFileHandle(parentDirHandle, targetName).pipe(Effect.catch(() => opfs.getDirectoryHandle(parentDirHandle, targetName, { create: false })), Effect.as(true), Effect.catchTag('NotFoundError', () => Effect.succeed(false)));
|
|
127
133
|
});
|
|
128
134
|
/**
|
|
129
135
|
* Create a directory at the provided path, optionally creating parents recursively.
|
|
@@ -145,7 +151,8 @@ export const makeDirectory = Effect.fn('@livestore/utils:Opfs.makeDirectory')(fu
|
|
|
145
151
|
* @returns Object containing name, size, MIME type, and last modification timestamp.
|
|
146
152
|
*/
|
|
147
153
|
export const getMetadata = Effect.fn('@livestore/utils:Opfs.getMetadata')(function* (handle) {
|
|
148
|
-
|
|
154
|
+
const opfs = yield* Opfs.Opfs;
|
|
155
|
+
return yield* opfs.getFile(handle).pipe(Effect.map((file) => ({
|
|
149
156
|
name: file.name,
|
|
150
157
|
size: file.size,
|
|
151
158
|
type: file.type,
|
|
@@ -163,7 +170,7 @@ export const getMetadata = Effect.fn('@livestore/utils:Opfs.getMetadata')(functi
|
|
|
163
170
|
*/
|
|
164
171
|
export const writeFile = Effect.fn('@livestore/utils:Opfs.writeFile')(function* (path, data) {
|
|
165
172
|
if (isRootPath(path) === true) {
|
|
166
|
-
return yield* new OpfsError({
|
|
173
|
+
return yield* new Opfs.OpfsError({
|
|
167
174
|
message: `Invalid OPFS path '${path}': cannot write file directly to the OPFS root`,
|
|
168
175
|
});
|
|
169
176
|
}
|
|
@@ -171,8 +178,9 @@ export const writeFile = Effect.fn('@livestore/utils:Opfs.writeFile')(function*
|
|
|
171
178
|
const { parentSegments, leafSegment: fileName } = splitPathSegments(pathSegments);
|
|
172
179
|
return yield* Effect.scoped(Effect.gen(function* () {
|
|
173
180
|
const parentDirHandle = yield* traverseDirectoryPath(parentSegments);
|
|
174
|
-
const
|
|
175
|
-
yield*
|
|
181
|
+
const opfs = yield* Opfs.Opfs;
|
|
182
|
+
const fileHandle = yield* opfs.getFileHandle(parentDirHandle, fileName, { create: true });
|
|
183
|
+
yield* opfs.writeFile(fileHandle, new Uint8Array(data), {
|
|
176
184
|
keepExistingData: false,
|
|
177
185
|
});
|
|
178
186
|
}));
|
|
@@ -191,7 +199,7 @@ export const writeFile = Effect.fn('@livestore/utils:Opfs.writeFile')(function*
|
|
|
191
199
|
*/
|
|
192
200
|
export const syncWriteFile = Effect.fn('@livestore/utils:Opfs.syncWriteFile')(function* (path, data) {
|
|
193
201
|
if (isRootPath(path) === true) {
|
|
194
|
-
return yield* new OpfsError({
|
|
202
|
+
return yield* new Opfs.OpfsError({
|
|
195
203
|
message: `Invalid OPFS path '${path}': cannot write file directly to the OPFS root`,
|
|
196
204
|
});
|
|
197
205
|
}
|
|
@@ -199,20 +207,21 @@ export const syncWriteFile = Effect.fn('@livestore/utils:Opfs.syncWriteFile')(fu
|
|
|
199
207
|
const { parentSegments, leafSegment: fileName } = splitPathSegments(pathSegments);
|
|
200
208
|
return yield* Effect.scoped(Effect.gen(function* () {
|
|
201
209
|
const parentDirHandle = yield* traverseDirectoryPath(parentSegments);
|
|
202
|
-
const
|
|
203
|
-
const
|
|
204
|
-
yield*
|
|
210
|
+
const opfs = yield* Opfs.Opfs;
|
|
211
|
+
const fileHandle = yield* opfs.getFileHandle(parentDirHandle, fileName, { create: true });
|
|
212
|
+
const syncHandle = yield* opfs.createSyncAccessHandle(fileHandle);
|
|
213
|
+
yield* opfs.syncTruncate(syncHandle, 0);
|
|
205
214
|
let offset = 0;
|
|
206
215
|
while (offset < data.byteLength) {
|
|
207
|
-
const wrote = yield*
|
|
216
|
+
const wrote = yield* opfs.syncWrite(syncHandle, data.subarray(offset), { at: offset });
|
|
208
217
|
if (wrote === 0) {
|
|
209
|
-
return yield* new OpfsError({
|
|
218
|
+
return yield* new Opfs.OpfsError({
|
|
210
219
|
message: `Short write: wrote ${offset} of ${data.byteLength} bytes.`,
|
|
211
220
|
});
|
|
212
221
|
}
|
|
213
222
|
offset += Number(wrote);
|
|
214
223
|
}
|
|
215
|
-
yield*
|
|
224
|
+
yield* opfs.syncFlush(syncHandle);
|
|
216
225
|
}));
|
|
217
226
|
});
|
|
218
227
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/browser/Opfs/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEvC,OAAO,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/browser/Opfs/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,17 +26,21 @@ declare global {
|
|
|
26
26
|
*/
|
|
27
27
|
readonly message: string;
|
|
28
28
|
/**
|
|
29
|
-
* A number representing the quota limit in bytes, or
|
|
29
|
+
* A number representing the quota limit in bytes, or null.
|
|
30
30
|
*
|
|
31
31
|
* [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/QuotaExceededError/quota)
|
|
32
32
|
*/
|
|
33
|
-
readonly quota
|
|
33
|
+
readonly quota: number | null;
|
|
34
34
|
/**
|
|
35
|
-
* A number representing the requested amount of storage in bytes, or
|
|
35
|
+
* A number representing the requested amount of storage in bytes, or null.
|
|
36
36
|
*
|
|
37
37
|
* [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/QuotaExceededError/requested)
|
|
38
38
|
*/
|
|
39
|
-
readonly requested
|
|
39
|
+
readonly requested: number | null;
|
|
40
|
+
}
|
|
41
|
+
interface QuotaExceededErrorOptions {
|
|
42
|
+
quota?: number;
|
|
43
|
+
requested?: number;
|
|
40
44
|
}
|
|
41
45
|
/**
|
|
42
46
|
* The **`QuotaExceededError`** represents an error when a requested operation would exceed a system-imposed storage quota.
|
|
@@ -49,11 +53,8 @@ declare global {
|
|
|
49
53
|
*/
|
|
50
54
|
var QuotaExceededError: {
|
|
51
55
|
prototype: QuotaExceededError;
|
|
52
|
-
new (message?: string, options?:
|
|
53
|
-
|
|
54
|
-
requested: number;
|
|
55
|
-
}): QuotaExceededError;
|
|
56
|
-
} | undefined;
|
|
56
|
+
new (message?: string, options?: QuotaExceededErrorOptions): QuotaExceededError;
|
|
57
|
+
};
|
|
57
58
|
}
|
|
58
59
|
export {};
|
|
59
60
|
//# sourceMappingURL=QuotaExceededError.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuotaExceededError.d.ts","sourceRoot":"","sources":["../../src/browser/QuotaExceededError.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,kBAAmB,SAAQ,YAAY;QAC/C;;;;WAIG;QACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB;;;;WAIG;QACH,QAAQ,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"QuotaExceededError.d.ts","sourceRoot":"","sources":["../../src/browser/QuotaExceededError.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,kBAAmB,SAAQ,YAAY;QAC/C;;;;WAIG;QACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB;;;;WAIG;QACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;QAC7B;;;;WAIG;QACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;KAClC;IAED,UAAU,yBAAyB;QACjC,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB;IAED;;;;;;;;OAQG;IACH,IAAI,kBAAkB,EAAE;QACtB,SAAS,EAAE,kBAAkB,CAAA;QAC7B,KAAK,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,yBAAyB,GAAG,kBAAkB,CAAA;KAChF,CAAA;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebChannelBrowser.d.ts","sourceRoot":"","sources":["../../src/browser/WebChannelBrowser.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"WebChannelBrowser.d.ts","sourceRoot":"","sources":["../../src/browser/WebChannelBrowser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,EAAE,MAAM,QAAQ,CAAA;AAE5D,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAG7C,OAAO,EACL,KAAK,WAAW,EAGhB,KAAK,UAAU,EAEhB,MAAM,gCAAgC,CAAA;AAEvC,iDAAiD;AACjD,eAAO,MAAM,gBAAgB,GAAI,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,uCAGpF;IACD,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAA;CAC1E,KAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAuCjE,CAAA;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,uEAMjF;IACD,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACnC,MAAM,EAAE,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAA;CAC1E,KAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAoEjE,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Deferred, Exit, Scope } from 'effect';
|
|
1
|
+
import { Cause, Deferred, Exit, Queue, Scope } from 'effect';
|
|
2
2
|
import * as Effect from "../effect/Effect.js";
|
|
3
3
|
import * as Schema from "../effect/Schema/index.js";
|
|
4
4
|
import * as Stream from "../effect/Stream.js";
|
|
@@ -7,14 +7,17 @@ import { listenToDebugPing, mapSchema, WebChannelSymbol, } from "../effect/WebCh
|
|
|
7
7
|
export const broadcastChannel = ({ channelName, schema: inputSchema, }) => Effect.scopeWithCloseable((scope) => Effect.gen(function* () {
|
|
8
8
|
const schema = mapSchema(inputSchema);
|
|
9
9
|
const channel = new BroadcastChannel(channelName);
|
|
10
|
-
yield* Effect.addFinalizer(() => Effect.try(
|
|
10
|
+
yield* Effect.addFinalizer(() => Effect.try({
|
|
11
|
+
try: () => channel.close(),
|
|
12
|
+
catch: (cause) => new Cause.UnknownError(cause),
|
|
13
|
+
}).pipe(Effect.ignore));
|
|
11
14
|
const send = (message) => Effect.gen(function* () {
|
|
12
|
-
const messageEncoded = yield* Schema.
|
|
15
|
+
const messageEncoded = yield* Schema.encodeEffect(schema.send)(message);
|
|
13
16
|
channel.postMessage(messageEncoded);
|
|
14
17
|
});
|
|
15
18
|
// TODO also listen to `messageerror` in parallel
|
|
16
|
-
const listen = Stream.fromEventListener(channel, 'message').pipe(Stream.map((_) => Schema.
|
|
17
|
-
const closedDeferred = yield* Deferred.make()
|
|
19
|
+
const listen = Stream.fromEventListener(channel, 'message').pipe(Stream.map((_) => Schema.decodeResult(schema.listen)(_.data)), listenToDebugPing(channelName));
|
|
20
|
+
const closedDeferred = yield* Effect.acquireRelease(Deferred.make(), Deferred.done(Exit.void));
|
|
18
21
|
const supportsTransferables = false;
|
|
19
22
|
return {
|
|
20
23
|
[WebChannelSymbol]: WebChannelSymbol,
|
|
@@ -41,12 +44,20 @@ export const windowChannel = ({ listenWindow, sendWindow, targetOrigin = '*', id
|
|
|
41
44
|
message: schema.listen,
|
|
42
45
|
from: Schema.Literal(ids.other),
|
|
43
46
|
to: Schema.Literal(ids.own),
|
|
44
|
-
}).
|
|
47
|
+
}).annotate({ title: 'webmesh.WindowMessageListen' });
|
|
45
48
|
const WindowMessageSend = Schema.Struct({
|
|
46
49
|
message: schema.send,
|
|
47
50
|
from: Schema.Literal(ids.own),
|
|
48
51
|
to: Schema.Literal(ids.other),
|
|
49
|
-
}).
|
|
52
|
+
}).annotate({ title: 'webmesh.WindowMessageSend' });
|
|
53
|
+
// `window.postMessage` can fire before a lazily-started stream has installed its listener.
|
|
54
|
+
// Buffer events from channel construction time so Effect v4 scheduling cannot drop them.
|
|
55
|
+
const messageQueue = yield* Effect.acquireRelease(Queue.unbounded(), Queue.shutdown);
|
|
56
|
+
const handler = (event) => {
|
|
57
|
+
Queue.offerUnsafe(messageQueue, event);
|
|
58
|
+
};
|
|
59
|
+
listenWindow.addEventListener('message', handler);
|
|
60
|
+
yield* Effect.addFinalizer(() => Effect.sync(() => listenWindow.removeEventListener('message', handler)));
|
|
50
61
|
const send = (message) => Effect.gen(function* () {
|
|
51
62
|
debugInfo.sendTotal++;
|
|
52
63
|
const [messageEncoded, transferables] = yield* Schema.encodeWithTransferables(WindowMessageSend)({
|
|
@@ -56,11 +67,11 @@ export const windowChannel = ({ listenWindow, sendWindow, targetOrigin = '*', id
|
|
|
56
67
|
});
|
|
57
68
|
sendWindow.postMessage(messageEncoded, targetOrigin, transferables);
|
|
58
69
|
});
|
|
59
|
-
const listen = Stream.
|
|
70
|
+
const listen = Stream.fromQueue(messageQueue).pipe(Stream.filter((_) => Schema.is(Schema.toEncoded(WindowMessageListen))(_.data)), Stream.map((_) => {
|
|
60
71
|
debugInfo.listenTotal++;
|
|
61
|
-
return Schema.
|
|
72
|
+
return Schema.decodeResult(schema.listen)(_.data.message);
|
|
62
73
|
}), listenToDebugPing('window'));
|
|
63
|
-
const closedDeferred = yield* Deferred.make()
|
|
74
|
+
const closedDeferred = yield* Effect.acquireRelease(Deferred.make(), Deferred.done(Exit.void));
|
|
64
75
|
const supportsTransferables = true;
|
|
65
76
|
return {
|
|
66
77
|
[WebChannelSymbol]: WebChannelSymbol,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebChannelBrowser.js","sourceRoot":"","sources":["../../src/browser/WebChannelBrowser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"WebChannelBrowser.js","sourceRoot":"","sources":["../../src/browser/WebChannelBrowser.ts"],"names":[],"mappings":"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"}
|