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.
Files changed (78) hide show
  1. package/README.md +40 -27
  2. package/dist/{BaseOPFS-Cylz6ijk.js → BaseOPFS-BusBkyJX.js} +436 -358
  3. package/dist/BaseOPFS-BusBkyJX.js.map +1 -0
  4. package/dist/{BaseOPFS-BPw9AIQ-.cjs → BaseOPFS-CYwrD7-q.cjs} +4 -4
  5. package/dist/BaseOPFS-CYwrD7-q.cjs.map +1 -0
  6. package/dist/{OPFSAsync-s2P7y3sw.cjs → OPFSAsync-B2dR-2VR.cjs} +2 -2
  7. package/dist/{OPFSAsync-s2P7y3sw.cjs.map → OPFSAsync-B2dR-2VR.cjs.map} +1 -1
  8. package/dist/{OPFSAsync-BKSAJJeh.js → OPFSAsync-CO44W23e.js} +2 -2
  9. package/dist/{OPFSAsync-BKSAJJeh.js.map → OPFSAsync-CO44W23e.js.map} +1 -1
  10. package/dist/OPFSFacade-CEaSqTut.js +308 -0
  11. package/dist/OPFSFacade-CEaSqTut.js.map +1 -0
  12. package/dist/OPFSFacade-hrNXCn6w.cjs +2 -0
  13. package/dist/OPFSFacade-hrNXCn6w.cjs.map +1 -0
  14. package/dist/{OPFSSync-C7KBepe_.cjs → OPFSSync-BPrNtvFS.cjs} +2 -2
  15. package/dist/{OPFSSync-C7KBepe_.cjs.map → OPFSSync-BPrNtvFS.cjs.map} +1 -1
  16. package/dist/{OPFSSync-CsSQkpk5.js → OPFSSync-D7obTsl3.js} +2 -2
  17. package/dist/{OPFSSync-CsSQkpk5.js.map → OPFSSync-D7obTsl3.js.map} +1 -1
  18. package/dist/assets/dedicated.worker-DW6UqFo0.js.map +1 -0
  19. package/dist/core/BaseOPFS.d.ts +38 -7
  20. package/dist/core/BaseOPFS.d.ts.map +1 -1
  21. package/dist/createOPFSAsync-DdhJYoC0.js +10 -0
  22. package/dist/{createOPFSAsync-Y4Mg6qte.js.map → createOPFSAsync-DdhJYoC0.js.map} +1 -1
  23. package/dist/createOPFSAsync-DyWpvmL-.cjs +2 -0
  24. package/dist/{createOPFSAsync-BwKDmHsy.cjs.map → createOPFSAsync-DyWpvmL-.cjs.map} +1 -1
  25. package/dist/{createOPFSDedicated-CsnV6MLP.js → createOPFSDedicated-BwTc0NV5.js} +289 -215
  26. package/dist/{createOPFSDedicated-CsnV6MLP.js.map → createOPFSDedicated-BwTc0NV5.js.map} +1 -1
  27. package/dist/{createOPFSDedicated-pKTRWLdz.cjs → createOPFSDedicated-CEeRexom.cjs} +286 -212
  28. package/dist/{createOPFSDedicated-pKTRWLdz.cjs.map → createOPFSDedicated-CEeRexom.cjs.map} +1 -1
  29. package/dist/{createOPFSShared-CGdd__PH.js → createOPFSShared-BSFWsoLe.js} +2 -2
  30. package/dist/{createOPFSShared-CGdd__PH.js.map → createOPFSShared-BSFWsoLe.js.map} +1 -1
  31. package/dist/{createOPFSShared-CskROt7U.cjs → createOPFSShared-BoCft_BS.cjs} +2 -2
  32. package/dist/{createOPFSShared-CskROt7U.cjs.map → createOPFSShared-BoCft_BS.cjs.map} +1 -1
  33. package/dist/dedicated.worker.js +282 -208
  34. package/dist/dedicated.worker.js.map +1 -1
  35. package/dist/facade/OPFSFacade.d.ts +21 -3
  36. package/dist/facade/OPFSFacade.d.ts.map +1 -1
  37. package/dist/index.async.cjs +1 -1
  38. package/dist/index.async.js +4 -4
  39. package/dist/index.cjs +1 -1
  40. package/dist/index.js +7 -7
  41. package/dist/index.pure.cjs +1 -1
  42. package/dist/index.pure.js +3 -3
  43. package/dist/index.sharedworker.cjs +1 -1
  44. package/dist/index.sharedworker.js +4 -4
  45. package/dist/index.sync.cjs +1 -1
  46. package/dist/index.sync.js +4 -4
  47. package/dist/shared.worker.js +430 -356
  48. package/dist/shared.worker.js.map +1 -1
  49. package/dist/types.d.ts +33 -0
  50. package/dist/types.d.ts.map +1 -1
  51. package/docs/api/backend.md +3 -3
  52. package/docs/api/create.md +1 -1
  53. package/docs/api/facade.md +28 -27
  54. package/docs/choosing-a-mode.md +6 -6
  55. package/docs/file-descriptors.md +46 -604
  56. package/docs/guides/async.md +2 -2
  57. package/docs/guides/dedicated.md +5 -5
  58. package/docs/guides/hashing.md +2 -2
  59. package/docs/guides/pure.md +3 -3
  60. package/docs/guides/sharedworker.md +1 -1
  61. package/docs/guides/streaming.md +145 -11
  62. package/docs/guides/watching.md +3 -3
  63. package/docs/migration.md +3 -3
  64. package/docs/types.md +92 -154
  65. package/package.json +12 -2
  66. package/src/core/BaseOPFS.ts +148 -25
  67. package/src/facade/OPFSFacade.ts +51 -4
  68. package/src/types.ts +37 -0
  69. package/dist/BaseOPFS-BPw9AIQ-.cjs.map +0 -1
  70. package/dist/BaseOPFS-Cylz6ijk.js.map +0 -1
  71. package/dist/OPFSFacade-DePnNRgt.cjs +0 -2
  72. package/dist/OPFSFacade-DePnNRgt.cjs.map +0 -1
  73. package/dist/OPFSFacade-XohWlHuu.js +0 -281
  74. package/dist/OPFSFacade-XohWlHuu.js.map +0 -1
  75. package/dist/assets/dedicated.worker-nY3tK4zi.js.map +0 -1
  76. package/dist/createOPFSAsync-BwKDmHsy.cjs +0 -2
  77. package/dist/createOPFSAsync-Y4Mg6qte.js +0 -10
  78. package/docs/README.md +0 -30
package/dist/types.d.ts CHANGED
@@ -56,6 +56,39 @@ export interface OPFSOptions {
56
56
  /** Custom name for the broadcast channel (default: 'opfs-worker') */
57
57
  broadcastChannel?: string | BroadcastChannel | null;
58
58
  }
59
+ /** Payload accepted by {@link importFiles} for a single entry. */
60
+ export type ImportFileData = string | Uint8Array | Blob;
61
+ /**
62
+ * Entries for {@link importFiles}: an array of `[path, data]` tuples, a `Map`,
63
+ * or any iterable that yields the same pairs.
64
+ */
65
+ export type ImportFilesEntries = Iterable<[string, ImportFileData]> | Map<string, ImportFileData>;
66
+ /** Progress event fired while {@link importFiles} writes entries. */
67
+ export interface ImportFilesProgress {
68
+ /** Path of the file currently being written */
69
+ path: string;
70
+ /** 0-based index of the current file */
71
+ index: number;
72
+ /** Total number of entries in this import */
73
+ count: number;
74
+ /** Bytes written for the current file so far */
75
+ bytesWritten: number;
76
+ /** Size of the current file in bytes */
77
+ bytesTotal: number;
78
+ /** Bytes written across all files so far */
79
+ totalBytesWritten: number;
80
+ /** Sum of all entry sizes in bytes */
81
+ totalBytes: number;
82
+ }
83
+ /** Result of a finished {@link importFiles} call. */
84
+ export interface ImportFilesResult {
85
+ /** Paths written, in import order */
86
+ paths: string[];
87
+ /** Number of files imported (`paths.length`) */
88
+ count: number;
89
+ /** Total bytes written across all files */
90
+ bytesWritten: number;
91
+ }
59
92
  export interface RenameOptions {
60
93
  /** Whether to overwrite existing files (default: false) */
61
94
  overwrite?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,GAAG,CAAC;AAEpC,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,WAAW,CAAC;AAExC,MAAM,MAAM,cAAc,GAAG,OAAO,GAChC,MAAM,GACN,OAAO,GACP,SAAS,GACT,UAAU,GACV,MAAM,GACN,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,KAAK,CAAC;AAEV,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;AAEtC,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,cAAc,CAAC;AAEvD,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;CACxB;AAED,oBAAY,cAAc;IACtB,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,OAAO,YAAY;CACtB;AAED,MAAM,WAAW,UAAU;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,YAAY,EAAE,QAAQ,EAAE,CAAC;AAEzB;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG;KAAG,CAAC,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC;CAAE,CAAC;AAE7D,MAAM,WAAW,WAAW;IACxB,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,aAAa,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACpF,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAC;CACvD;AAED,MAAM,WAAW,aAAa;IAC1B,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IACzB,mDAAmD;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  # Backend API
2
2
 
3
- Classes from `opfs-worker/pure` (also re-exported from `/sync`, `/async`, `/sharedworker` where it makes sense). Bytes only — no encoding helpers.
3
+ Classes from `opfs-worker/pure` (also re-exported from `/sync`, `/async`, `/sharedworker`). Bytes only — no encoding helpers.
4
4
 
5
5
  ```
6
- BaseOPFS mkdir, stat, readDir, watch, index, createIndex, …
6
+ BaseOPFS mkdir, stat, readDir, watch, index, importFiles, …
7
7
  ├─ OPFSSync sync access handles + FDs + writeStream
8
8
  └─ OPFSAsync getFile / createWritable + writeStream (no FDs)
9
9
  ```
@@ -12,7 +12,7 @@ BaseOPFS mkdir, stat, readDir, watch, index, createIndex, …
12
12
 
13
13
  ## Shared methods (`BaseOPFS`)
14
14
 
15
- Path ops: `mkdir`, `stat`, `readDir`, `exists`, `clear`, `remove`, `rename`, `copy`, `realpath`, `index`, `createIndex`, `watch`, `unwatch`, `setOptions`, `dispose`.
15
+ Path ops: `mkdir`, `stat`, `readDir`, `exists`, `clear`, `remove`, `rename`, `copy`, `realpath`, `index`, `readBlob`, `importFiles`, `watch`, `unwatch`, `setOptions`, `dispose`.
16
16
 
17
17
  Subclasses implement:
18
18
 
@@ -22,7 +22,7 @@ On the main entry only:
22
22
  - `createWorker` → same (deprecated)
23
23
  - `OPFSFileSystem` → `OPFSFacade` (deprecated)
24
24
 
25
- ## Escape hatch
25
+ ## Backend access
26
26
 
27
27
  Every facade exposes:
28
28
 
@@ -1,45 +1,46 @@
1
1
  # OPFSFacade
2
2
 
3
- Node-ish API: encodings, auto-detect by extension, path as `string` or `URL`. You normally get one from [`createOPFS*`](./create.md); you can also `new OPFSFacade({ fs, worker?, dispose })`.
3
+ Node-like API: encodings, auto-detect by extension, path as `string` or `URL`. Usually from [`createOPFS*`](./create.md); or `new OPFSFacade({ fs, worker?, dispose })`.
4
4
 
5
5
  `fs.promises === fs`.
6
6
 
7
- ## Escape hatch
7
+ ## Backend access
8
8
 
9
- | Field | Notes |
10
- | ----- | ----- |
9
+ | Field | Notes |
10
+ | --------- | ---------------------------------------------------------------------------- |
11
11
  | `backend` | Raw [`OPFSApi`](../types.md#opfsapi) — same methods without encoding helpers |
12
- | `worker` | `Worker` / `SharedWorker` if this facade owns one; `undefined` for async |
12
+ | `worker` | `Worker` / `SharedWorker` if this facade owns one; `undefined` for async |
13
13
 
14
14
  ## File I/O
15
15
 
16
- | Method | Notes |
17
- | ------ | ----- |
18
- | `readFile` / `writeFile` / `appendFile` | Encoding as string, `{ encoding }`, or auto |
19
- | `importStream` | Stream / Blob / File — [streaming](../guides/streaming.md) |
20
- | `readText` / `writeText` / `appendText` | UTF-8 by default |
16
+ | Method | Notes |
17
+ | --------------------------------------- | --------------------------------------------------------------------------------------------- |
18
+ | `readFile` / `writeFile` / `appendFile` | Encoding as string, `{ encoding }`, or auto |
19
+ | `readBlob` | Disk-backed `Blob`, nothing copied into memory — [streaming](../guides/streaming.md) |
20
+ | `importStream` | Stream / Blob / File [streaming](../guides/streaming.md) |
21
+ | `importFiles` | Bulk array / `Map` of `[path, data]` with rich progress — [streaming](../guides/streaming.md) |
22
+ | `readText` / `writeText` / `appendText` | UTF-8 by default |
21
23
 
22
24
  ## Directories & metadata
23
25
 
24
- | Method | Notes |
25
- | ------ | ----- |
26
- | `mkdir` | `{ recursive }`; numeric mode is accepted and ignored |
27
- | `readDir` | `DirentData[]` |
28
- | `stat` / `exists` / `realpath` | |
29
- | `remove` | `{ recursive, force }` |
30
- | `rename` / `copy` | `copy` takes `{ recursive, overwrite }` |
31
- | `clear` | Empty a dir (default `/`) |
32
- | `index` | `Map<path, FileStat>` |
33
- | `createIndex` | Bulk `[path, string \| Uint8Array \| Blob][]` |
26
+ | Method | Notes |
27
+ | ------------------------------ | ----------------------------------------------------- |
28
+ | `mkdir` | `{ recursive }`; numeric mode is accepted and ignored |
29
+ | `readDir` | `DirentData[]` |
30
+ | `stat` / `exists` / `realpath` | |
31
+ | `remove` | `{ recursive, force }` |
32
+ | `rename` / `copy` | `copy` takes `{ recursive, overwrite }` |
33
+ | `clear` | Empty a dir (default `/`) |
34
+ | `index` | `Map<path, FileStat>` |
34
35
 
35
36
  ## Watch & lifecycle
36
37
 
37
- | Method | Notes |
38
- | ------ | ----- |
39
- | `watch` | Returns `() => void` |
40
- | `unwatch` | |
41
- | `setOptions` | [Hashing](../guides/hashing.md) and friends |
42
- | `dispose` | Tear down the backend |
38
+ | Method | Notes |
39
+ | ------------ | ----------------------------------- |
40
+ | `watch` | Returns `() => void` |
41
+ | `unwatch` | |
42
+ | `setOptions` | See [hashing](../guides/hashing.md) |
43
+ | `dispose` | Dispose the backend |
43
44
 
44
45
  ## Node aliases
45
46
 
@@ -49,4 +50,4 @@ Node-ish API: encodings, auto-detect by extension, path as `string` or `URL`. Yo
49
50
 
50
51
  `open`, `read`, `write`, `close`, `fstat`, `ftruncate`, `fsync` — dedicated / `OPFSSync` only. Async throws `ENOTSUP`.
51
52
 
52
- Full story: [file descriptors](../file-descriptors.md).
53
+ Details: [file descriptors](../file-descriptors.md).
@@ -16,14 +16,14 @@ Sync access handles only work in a **dedicated** worker. Async writes (`createWr
16
16
 
17
17
  ## Modes
18
18
 
19
- | | API | Reach for it when… | FD | Comlink |
19
+ | | API | When | FD | Comlink |
20
20
  | ----- | --------------------------------------------------------- | ------------------------------- | --------- | ------- |
21
- | **1** | [`createOPFSDedicated()`](./guides/dedicated.md) | You want a normal `fs`-like API | yes | yes |
22
- | **2** | [`OPFSSync` / `OPFSAsync` from `/pure`](./guides/pure.md) | You’re already in a worker | sync only | no |
23
- | **3** | [`createOPFSAsync()`](./guides/async.md) | You don’t want a worker at all | no | no |
24
- | **4** | [`createOPFSShared()`](./guides/sharedworker.md) | All tabs should share one fs | no | yes |
21
+ | **1** | [`createOPFSDedicated()`](./guides/dedicated.md) | Normal `fs`-like API | yes | yes |
22
+ | **2** | [`OPFSSync` / `OPFSAsync` from `/pure`](./guides/pure.md) | Already in a worker | sync only | no |
23
+ | **3** | [`createOPFSAsync()`](./guides/async.md) | No worker | no | no |
24
+ | **4** | [`createOPFSShared()`](./guides/sharedworker.md) | One fs shared by all tabs | no | yes |
25
25
 
26
- Need the raw bytes API or the browser Worker? Use `fs.backend` / `fs.worker` on any facade — no separate factory.
26
+ For the raw bytes API or the browser Worker, use `fs.backend` / `fs.worker` on any facade.
27
27
 
28
28
  If size matters, import from `/sync`, `/async`, or `/sharedworker` instead of the main barrel.
29
29