opfs-worker 2.1.0 → 2.1.1
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/README.md +40 -27
- package/dist/{BaseOPFS-Cylz6ijk.js → BaseOPFS-BusBkyJX.js} +436 -358
- package/dist/BaseOPFS-BusBkyJX.js.map +1 -0
- package/dist/{BaseOPFS-BPw9AIQ-.cjs → BaseOPFS-CYwrD7-q.cjs} +4 -4
- package/dist/BaseOPFS-CYwrD7-q.cjs.map +1 -0
- package/dist/{OPFSAsync-s2P7y3sw.cjs → OPFSAsync-B2dR-2VR.cjs} +2 -2
- package/dist/{OPFSAsync-s2P7y3sw.cjs.map → OPFSAsync-B2dR-2VR.cjs.map} +1 -1
- package/dist/{OPFSAsync-BKSAJJeh.js → OPFSAsync-CO44W23e.js} +2 -2
- package/dist/{OPFSAsync-BKSAJJeh.js.map → OPFSAsync-CO44W23e.js.map} +1 -1
- package/dist/OPFSFacade-CEaSqTut.js +308 -0
- package/dist/OPFSFacade-CEaSqTut.js.map +1 -0
- package/dist/OPFSFacade-hrNXCn6w.cjs +2 -0
- package/dist/OPFSFacade-hrNXCn6w.cjs.map +1 -0
- package/dist/{OPFSSync-C7KBepe_.cjs → OPFSSync-BPrNtvFS.cjs} +2 -2
- package/dist/{OPFSSync-C7KBepe_.cjs.map → OPFSSync-BPrNtvFS.cjs.map} +1 -1
- package/dist/{OPFSSync-CsSQkpk5.js → OPFSSync-D7obTsl3.js} +2 -2
- package/dist/{OPFSSync-CsSQkpk5.js.map → OPFSSync-D7obTsl3.js.map} +1 -1
- package/dist/assets/dedicated.worker-DW6UqFo0.js.map +1 -0
- package/dist/core/BaseOPFS.d.ts +38 -7
- package/dist/core/BaseOPFS.d.ts.map +1 -1
- package/dist/createOPFSAsync-DdhJYoC0.js +10 -0
- package/dist/{createOPFSAsync-Y4Mg6qte.js.map → createOPFSAsync-DdhJYoC0.js.map} +1 -1
- package/dist/createOPFSAsync-DyWpvmL-.cjs +2 -0
- package/dist/{createOPFSAsync-BwKDmHsy.cjs.map → createOPFSAsync-DyWpvmL-.cjs.map} +1 -1
- package/dist/{createOPFSDedicated-CsnV6MLP.js → createOPFSDedicated-BwTc0NV5.js} +289 -215
- package/dist/{createOPFSDedicated-CsnV6MLP.js.map → createOPFSDedicated-BwTc0NV5.js.map} +1 -1
- package/dist/{createOPFSDedicated-pKTRWLdz.cjs → createOPFSDedicated-CEeRexom.cjs} +286 -212
- package/dist/{createOPFSDedicated-pKTRWLdz.cjs.map → createOPFSDedicated-CEeRexom.cjs.map} +1 -1
- package/dist/{createOPFSShared-CGdd__PH.js → createOPFSShared-BSFWsoLe.js} +2 -2
- package/dist/{createOPFSShared-CGdd__PH.js.map → createOPFSShared-BSFWsoLe.js.map} +1 -1
- package/dist/{createOPFSShared-CskROt7U.cjs → createOPFSShared-BoCft_BS.cjs} +2 -2
- package/dist/{createOPFSShared-CskROt7U.cjs.map → createOPFSShared-BoCft_BS.cjs.map} +1 -1
- package/dist/dedicated.worker.js +282 -208
- package/dist/dedicated.worker.js.map +1 -1
- package/dist/facade/OPFSFacade.d.ts +21 -3
- package/dist/facade/OPFSFacade.d.ts.map +1 -1
- package/dist/index.async.cjs +1 -1
- package/dist/index.async.js +4 -4
- package/dist/index.cjs +1 -1
- package/dist/index.js +7 -7
- package/dist/index.pure.cjs +1 -1
- package/dist/index.pure.js +3 -3
- package/dist/index.sharedworker.cjs +1 -1
- package/dist/index.sharedworker.js +4 -4
- package/dist/index.sync.cjs +1 -1
- package/dist/index.sync.js +4 -4
- package/dist/shared.worker.js +430 -356
- package/dist/shared.worker.js.map +1 -1
- package/dist/types.d.ts +33 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/api/backend.md +3 -3
- package/docs/api/create.md +1 -1
- package/docs/api/facade.md +28 -27
- package/docs/choosing-a-mode.md +6 -6
- package/docs/file-descriptors.md +46 -604
- package/docs/guides/async.md +2 -2
- package/docs/guides/dedicated.md +5 -5
- package/docs/guides/hashing.md +2 -2
- package/docs/guides/pure.md +3 -3
- package/docs/guides/sharedworker.md +1 -1
- package/docs/guides/streaming.md +145 -11
- package/docs/guides/watching.md +3 -3
- package/docs/migration.md +3 -3
- package/docs/types.md +92 -154
- package/package.json +12 -2
- package/src/core/BaseOPFS.ts +148 -25
- package/src/facade/OPFSFacade.ts +51 -4
- package/src/types.ts +37 -0
- package/dist/BaseOPFS-BPw9AIQ-.cjs.map +0 -1
- package/dist/BaseOPFS-Cylz6ijk.js.map +0 -1
- package/dist/OPFSFacade-DePnNRgt.cjs +0 -2
- package/dist/OPFSFacade-DePnNRgt.cjs.map +0 -1
- package/dist/OPFSFacade-XohWlHuu.js +0 -281
- package/dist/OPFSFacade-XohWlHuu.js.map +0 -1
- package/dist/assets/dedicated.worker-nY3tK4zi.js.map +0 -1
- package/dist/createOPFSAsync-BwKDmHsy.cjs +0 -2
- package/dist/createOPFSAsync-Y4Mg6qte.js +0 -10
- package/docs/README.md +0 -30
package/README.md
CHANGED
|
@@ -1,23 +1,33 @@
|
|
|
1
1
|
# OPFS Worker
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
<a href="https://www.npmjs.com/package/opfs-worker" target="_blank" rel="noreferrer"><img src="https://img.shields.io/npm/v/opfs-worker.svg" alt="npm"></a>
|
|
4
|
+
<a href="https://kachurun.github.io/opfs-worker/" target="_blank" rel="noreferrer"><img src="https://img.shields.io/badge/demo-live-brightgreen" alt="demo"></a>
|
|
5
5
|
|
|
6
6
|
## What is OPFS?
|
|
7
7
|
|
|
8
|
-
OPFS ([Origin Private File System](https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Origin_private_file_system)) is a
|
|
8
|
+
OPFS ([Origin Private File System](https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Origin_private_file_system)) is a browser filesystem scoped to your origin. It sits under the usual site quota; clearing site data wipes it. The browser does not show a file picker or ask for access.
|
|
9
9
|
|
|
10
|
-
This
|
|
10
|
+
This package puts a Node-like API on top of it.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
12
|
+
→ **File API** — `readFile`, `writeFile`, `mkdir`, `stat`, `rename`, `copy`, `readDir`; encodings, extension-based detection, `string | URL` paths. [Docs](docs/api/facade.md)
|
|
13
|
+
|
|
14
|
+
→ **File descriptors** — `open` / `read` / `write` at an offset, plus `ftruncate` and `fsync`. [Docs](docs/file-descriptors.md)
|
|
15
|
+
|
|
16
|
+
→ **Concurrent access** — operations on the same path are serialized, so parallel reads and writes do not fail because another sync access handle is open.
|
|
17
|
+
|
|
18
|
+
→ **Dedicated worker (default)** — `createOPFS()` sets up the worker for you. Fastest path, supports FDs, writes work in older Safari too. [Docs](docs/guides/dedicated.md)
|
|
19
|
+
|
|
20
|
+
→ **Async** — same API on the main thread, no worker. No FDs. Writes need Safari 26+ (Safari 18 and older can only read). [Docs](docs/guides/async.md)
|
|
21
|
+
|
|
22
|
+
→ **SharedWorker** — one instance shared across tabs. Same limits as async (no FDs, Safari 26+ for writes). [Docs](docs/guides/sharedworker.md)
|
|
23
|
+
|
|
24
|
+
→ **Bring your own worker** — use it directly in a worker you already run, or load a prebuilt worker script. [Docs](docs/choosing-a-mode.md)
|
|
25
|
+
|
|
26
|
+
→ **Large files & uploads** — stream a `ReadableStream`, `Blob`, or `File` in chunks with progress, or bulk-import whole folders from a file picker / drag-and-drop via `importFiles`. [Docs](docs/guides/streaming.md)
|
|
27
|
+
|
|
28
|
+
→ **Watch** — change events over `BroadcastChannel` across tabs / workers. [Docs](docs/guides/watching.md)
|
|
29
|
+
|
|
30
|
+
→ **Hashing** — `stat()` can include an etag or a SHA hash (SHA skipped above a size cap). [Docs](docs/guides/hashing.md)
|
|
21
31
|
|
|
22
32
|
## Installation
|
|
23
33
|
|
|
@@ -30,6 +40,7 @@ npm install opfs-worker
|
|
|
30
40
|
```typescript
|
|
31
41
|
import { createOPFS } from 'opfs-worker';
|
|
32
42
|
|
|
43
|
+
// Starts a dedicated worker and returns a Node-like fs API
|
|
33
44
|
const fs = createOPFS({
|
|
34
45
|
root: '/my-app',
|
|
35
46
|
hashAlgorithm: 'SHA-256'
|
|
@@ -41,6 +52,9 @@ await fs.rename('/project/hello.txt', '/project/readme.txt');
|
|
|
41
52
|
|
|
42
53
|
const files = await fs.readDir('/project');
|
|
43
54
|
const text = await fs.readFile('/project/readme.txt'); // 'Hello, OPFS!'
|
|
55
|
+
|
|
56
|
+
// Tear down watches, close the backend, and terminate the worker
|
|
57
|
+
fs.dispose();
|
|
44
58
|
```
|
|
45
59
|
|
|
46
60
|
## Choose a mode
|
|
@@ -56,8 +70,13 @@ Trade-offs (FDs, Safari, size, CSP): [Choosing a mode](docs/choosing-a-mode.md).
|
|
|
56
70
|
|
|
57
71
|
## Docs
|
|
58
72
|
|
|
59
|
-
- [Docs index](docs/README.md)
|
|
60
73
|
- [Choosing a mode](docs/choosing-a-mode.md)
|
|
74
|
+
- API
|
|
75
|
+
- [Create helpers & options](docs/api/create.md)
|
|
76
|
+
- [Facade](docs/api/facade.md)
|
|
77
|
+
- [Backend](docs/api/backend.md)
|
|
78
|
+
- [File descriptors](docs/file-descriptors.md)
|
|
79
|
+
- [Types](docs/types.md)
|
|
61
80
|
- Guides
|
|
62
81
|
- [Dedicated worker](docs/guides/dedicated.md)
|
|
63
82
|
- [Async](docs/guides/async.md)
|
|
@@ -66,31 +85,25 @@ Trade-offs (FDs, Safari, size, CSP): [Choosing a mode](docs/choosing-a-mode.md).
|
|
|
66
85
|
- [Streaming](docs/guides/streaming.md)
|
|
67
86
|
- [Watching](docs/guides/watching.md)
|
|
68
87
|
- [Hashing](docs/guides/hashing.md)
|
|
69
|
-
- API
|
|
70
|
-
- [Create helpers & options](docs/api/create.md)
|
|
71
|
-
- [Facade](docs/api/facade.md)
|
|
72
|
-
- [Backend](docs/api/backend.md)
|
|
73
|
-
- [File descriptors](docs/file-descriptors.md)
|
|
74
|
-
- [Types](docs/types.md)
|
|
75
88
|
- [Migration from 1.x](docs/migration.md)
|
|
76
89
|
|
|
77
90
|
## Development
|
|
78
91
|
|
|
79
92
|
```bash
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
93
|
+
npm install
|
|
94
|
+
npm run build
|
|
95
|
+
npm run test
|
|
96
|
+
npm run lint
|
|
97
|
+
npm run type-check
|
|
85
98
|
```
|
|
86
99
|
|
|
87
|
-
Demo
|
|
100
|
+
Demo: `npm run dev:demo` / `npm run build:demo` / `npm run preview`.
|
|
88
101
|
|
|
89
102
|
## License
|
|
90
103
|
|
|
91
104
|
MIT
|
|
92
105
|
|
|
93
|
-
##
|
|
106
|
+
## Maintainer
|
|
94
107
|
|
|
95
108
|
<img src="https://github.com/kachurun.png" width="100" height="100" alt="@kachurun's avatar">
|
|
96
109
|
|