opfs-worker 2.0.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 (134) hide show
  1. package/README.md +64 -428
  2. package/dist/BaseOPFS-BusBkyJX.js +2114 -0
  3. package/dist/BaseOPFS-BusBkyJX.js.map +1 -0
  4. package/dist/BaseOPFS-CYwrD7-q.cjs +4 -0
  5. package/dist/BaseOPFS-CYwrD7-q.cjs.map +1 -0
  6. package/dist/OPFSAsync-B2dR-2VR.cjs +2 -0
  7. package/dist/OPFSAsync-B2dR-2VR.cjs.map +1 -0
  8. package/dist/OPFSAsync-CO44W23e.js +124 -0
  9. package/dist/OPFSAsync-CO44W23e.js.map +1 -0
  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-BPrNtvFS.cjs +2 -0
  15. package/dist/OPFSSync-BPrNtvFS.cjs.map +1 -0
  16. package/dist/OPFSSync-D7obTsl3.js +208 -0
  17. package/dist/OPFSSync-D7obTsl3.js.map +1 -0
  18. package/dist/assets/dedicated.worker-DW6UqFo0.js.map +1 -0
  19. package/dist/{OPFSWorker.d.ts → core/BaseOPFS.d.ts} +53 -292
  20. package/dist/core/BaseOPFS.d.ts.map +1 -0
  21. package/dist/core/OPFSAsync.d.ts +55 -0
  22. package/dist/core/OPFSAsync.d.ts.map +1 -0
  23. package/dist/core/OPFSSync.d.ts +54 -0
  24. package/dist/core/OPFSSync.d.ts.map +1 -0
  25. package/dist/createOPFSAsync-DdhJYoC0.js +10 -0
  26. package/dist/createOPFSAsync-DdhJYoC0.js.map +1 -0
  27. package/dist/createOPFSAsync-DyWpvmL-.cjs +2 -0
  28. package/dist/createOPFSAsync-DyWpvmL-.cjs.map +1 -0
  29. package/dist/createOPFSDedicated-BwTc0NV5.js +2407 -0
  30. package/dist/createOPFSDedicated-BwTc0NV5.js.map +1 -0
  31. package/dist/createOPFSDedicated-CEeRexom.cjs +2357 -0
  32. package/dist/createOPFSDedicated-CEeRexom.cjs.map +1 -0
  33. package/dist/createOPFSShared-BSFWsoLe.js +23 -0
  34. package/dist/createOPFSShared-BSFWsoLe.js.map +1 -0
  35. package/dist/createOPFSShared-BoCft_BS.cjs +2 -0
  36. package/dist/createOPFSShared-BoCft_BS.cjs.map +1 -0
  37. package/dist/dedicated.worker.js +2355 -0
  38. package/dist/dedicated.worker.js.map +1 -0
  39. package/dist/{OPFSFacade.d.ts → facade/OPFSFacade.d.ts} +51 -25
  40. package/dist/facade/OPFSFacade.d.ts.map +1 -0
  41. package/dist/facade/createOPFSAsync.d.ts +16 -0
  42. package/dist/facade/createOPFSAsync.d.ts.map +1 -0
  43. package/dist/facade/createOPFSDedicated.d.ts +17 -0
  44. package/dist/facade/createOPFSDedicated.d.ts.map +1 -0
  45. package/dist/facade/createOPFSShared.d.ts +24 -0
  46. package/dist/facade/createOPFSShared.d.ts.map +1 -0
  47. package/dist/index.async.cjs +2 -0
  48. package/dist/index.async.cjs.map +1 -0
  49. package/dist/index.async.d.ts +10 -0
  50. package/dist/index.async.d.ts.map +1 -0
  51. package/dist/index.async.js +55 -0
  52. package/dist/index.async.js.map +1 -0
  53. package/dist/index.cjs +1 -2477
  54. package/dist/index.cjs.map +1 -1
  55. package/dist/index.d.ts +17 -3
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +61 -2828
  58. package/dist/index.js.map +1 -1
  59. package/dist/index.pure.cjs +1 -1
  60. package/dist/index.pure.cjs.map +1 -1
  61. package/dist/index.pure.d.ts +3 -1
  62. package/dist/index.pure.d.ts.map +1 -1
  63. package/dist/index.pure.js +50 -1053
  64. package/dist/index.pure.js.map +1 -1
  65. package/dist/index.sharedworker.cjs +2 -0
  66. package/dist/index.sharedworker.cjs.map +1 -0
  67. package/dist/index.sharedworker.d.ts +11 -0
  68. package/dist/index.sharedworker.d.ts.map +1 -0
  69. package/dist/index.sharedworker.js +55 -0
  70. package/dist/index.sharedworker.js.map +1 -0
  71. package/dist/index.sync.cjs +2 -0
  72. package/dist/index.sync.cjs.map +1 -0
  73. package/dist/index.sync.d.ts +11 -0
  74. package/dist/index.sync.d.ts.map +1 -0
  75. package/dist/index.sync.js +55 -0
  76. package/dist/index.sync.js.map +1 -0
  77. package/dist/shared.worker.js +2240 -0
  78. package/dist/shared.worker.js.map +1 -0
  79. package/dist/types.d.ts +42 -4
  80. package/dist/types.d.ts.map +1 -1
  81. package/dist/worker/createDedicatedWorker.d.ts +30 -0
  82. package/dist/worker/createDedicatedWorker.d.ts.map +1 -0
  83. package/dist/worker/createSharedWorker.d.ts +37 -0
  84. package/dist/worker/createSharedWorker.d.ts.map +1 -0
  85. package/dist/worker/dedicated.worker.d.ts +2 -0
  86. package/dist/worker/dedicated.worker.d.ts.map +1 -0
  87. package/dist/worker/shared.worker.d.ts +2 -0
  88. package/dist/worker/shared.worker.d.ts.map +1 -0
  89. package/docs/api/backend.md +36 -0
  90. package/docs/api/create.md +82 -0
  91. package/docs/api/facade.md +53 -0
  92. package/docs/choosing-a-mode.md +41 -0
  93. package/docs/file-descriptors.md +46 -605
  94. package/docs/guides/async.md +36 -0
  95. package/docs/guides/dedicated.md +76 -0
  96. package/docs/guides/hashing.md +34 -0
  97. package/docs/guides/pure.md +46 -0
  98. package/docs/guides/sharedworker.md +57 -0
  99. package/docs/guides/streaming.md +185 -0
  100. package/docs/guides/watching.md +35 -0
  101. package/docs/migration.md +41 -0
  102. package/docs/types.md +105 -153
  103. package/package.json +53 -4
  104. package/src/{OPFSWorker.ts → core/BaseOPFS.ts} +159 -629
  105. package/src/core/OPFSAsync.ts +248 -0
  106. package/src/core/OPFSSync.ts +460 -0
  107. package/src/{OPFSFacade.ts → facade/OPFSFacade.ts} +134 -58
  108. package/src/facade/createOPFSAsync.ts +22 -0
  109. package/src/facade/createOPFSDedicated.ts +23 -0
  110. package/src/facade/createOPFSShared.ts +30 -0
  111. package/src/index.async.ts +11 -0
  112. package/src/index.pure.ts +3 -2
  113. package/src/index.sharedworker.ts +12 -0
  114. package/src/index.sync.ts +12 -0
  115. package/src/index.ts +37 -8
  116. package/src/types.ts +45 -4
  117. package/src/worker/createDedicatedWorker.ts +74 -0
  118. package/src/worker/createSharedWorker.ts +67 -0
  119. package/src/worker/dedicated.worker.ts +13 -0
  120. package/src/worker/shared.worker.ts +17 -0
  121. package/dist/OPFSFacade.d.ts.map +0 -1
  122. package/dist/OPFSWorker.d.ts.map +0 -1
  123. package/dist/assets/worker.entry-DUlEoroc.js.map +0 -1
  124. package/dist/createOPFSWorker.d.ts +0 -17
  125. package/dist/createOPFSWorker.d.ts.map +0 -1
  126. package/dist/helpers-DNj8ZoMu.cjs +0 -4
  127. package/dist/helpers-DNj8ZoMu.cjs.map +0 -1
  128. package/dist/helpers-WY2jfbOT.js +0 -1427
  129. package/dist/helpers-WY2jfbOT.js.map +0 -1
  130. package/dist/worker.entry.d.ts +0 -2
  131. package/dist/worker.entry.d.ts.map +0 -1
  132. package/docs/api-reference.md +0 -815
  133. package/src/createOPFSWorker.ts +0 -57
  134. package/src/worker.entry.ts +0 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createOPFSDedicated-CEeRexom.cjs","sources":["../src/worker/createDedicatedWorker.ts","../src/facade/createOPFSDedicated.ts"],"sourcesContent":["import { wrap } from 'comlink';\n\nimport WorkerCtor from './dedicated.worker?worker&inline';\n\nimport type { OPFSOptions, OPFSSync } from '../types';\nimport type { Remote } from 'comlink';\n\nconst InlineWorker = WorkerCtor as new (options?: WorkerOptions) => Worker;\n\ntype RemoteOPFSSync = Remote<OPFSSync>;\n\nexport interface DedicatedWorkerOptions extends OPFSOptions {\n /**\n * URL of the worker script, e.g. `import url from 'opfs-worker/dedicated.worker.js?url'` (Vite).\n *\n * Defaults to the inlined worker (no URL needed). Pass an explicit url when you\n * prefer the self-contained file (strict CSP without `blob:`, or DIY hosting).\n */\n url?: string | URL;\n /** Bring your own Worker instance (overrides `url`) */\n worker?: Worker;\n}\n\nexport interface RawWorker {\n /** Comlink proxy to `OPFSSync` (bytes in / bytes out) */\n fs: RemoteOPFSSync;\n /** Underlying browser Worker */\n worker: Worker;\n /** Calls worker `dispose()` then `terminate()` */\n dispose: () => void;\n}\n\n/** A `BroadcastChannel` instance can't cross the wire — send its name instead. */\nfunction applyWorkerOptions(fs: Pick<RemoteOPFSSync, 'setOptions'>, options?: OPFSOptions): void {\n if (!options) {\n return;\n }\n\n if (options.broadcastChannel instanceof BroadcastChannel) {\n options.broadcastChannel = options.broadcastChannel.name;\n }\n\n void fs.setOptions(options);\n}\n\n/**\n * Internal helper: spawn a dedicated worker and wrap `OPFSSync` with Comlink.\n * Prefer {@link createOPFSDedicated}; access the proxy / Worker via\n * `facade.backend` / `facade.worker`.\n */\nexport function createDedicatedWorker(options: DedicatedWorkerOptions = {}): RawWorker {\n const { url, worker: providedWorker, ...fsOptions } = options;\n\n const worker = providedWorker\n ?? (url ? new Worker(url, { type: 'module' }) : new InlineWorker());\n const fs = wrap<RemoteOPFSSync>(worker);\n\n applyWorkerOptions(fs, fsOptions);\n\n return {\n fs,\n worker,\n dispose() {\n void (async() => {\n try {\n await fs.dispose();\n }\n finally {\n worker.terminate();\n }\n })();\n },\n };\n}\n","import { OPFSFacade } from './OPFSFacade';\nimport { createDedicatedWorker } from '../worker/createDedicatedWorker';\n\nimport type { DedicatedWorkerOptions } from '../worker/createDedicatedWorker';\n\n/**\n * Dedicated mode: start a dedicated worker and get a Node-like `fs` API\n * backed by `OPFSSync`.\n *\n * Prefer importing from `opfs-worker/sync` when you only need the worker backend\n * (avoids pulling `OPFSAsync` into the graph). Importing from `opfs-worker` works too.\n *\n * By default uses an inlined worker. Pass `url` / `worker` to load\n * `opfs-worker/dedicated.worker.js` instead (see {@link DedicatedWorkerOptions}).\n *\n * Need the raw bytes API or the Worker instance? Use `fs.backend` / `fs.worker`.\n * For the workerless async backend, use {@link createOPFSAsync}.\n */\nexport function createOPFSDedicated(options?: DedicatedWorkerOptions): OPFSFacade {\n const { fs, worker, dispose } = createDedicatedWorker(options);\n\n return new OPFSFacade({ fs, worker, dispose });\n}\n"],"names":["InlineWorker","WorkerCtor","applyWorkerOptions","fs","options","createDedicatedWorker","url","providedWorker","fsOptions","worker","wrap","createOPFSDedicated","dispose","OPFSFacade"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qdAOA,MAAMA,EAAeC,EA0BrB,SAASC,EAAmBC,EAAwCC,EAA6B,CACxFA,IAIDA,EAAQ,4BAA4B,mBACpCA,EAAQ,iBAAmBA,EAAQ,iBAAiB,MAGnDD,EAAG,WAAWC,CAAO,EAC9B,CAOO,SAASC,EAAsBD,EAAkC,GAAe,CACnF,KAAM,CAAE,IAAAE,EAAK,OAAQC,EAAgB,GAAGC,GAAcJ,EAEhDK,EAASF,IACTD,EAAM,IAAI,OAAOA,EAAK,CAAE,KAAM,QAAA,CAAU,EAAI,IAAIN,GAChDG,EAAKO,EAAAA,KAAqBD,CAAM,EAEtC,OAAAP,EAAmBC,EAAIK,CAAS,EAEzB,CACH,GAAAL,EACA,OAAAM,EACA,SAAU,EACA,SAAW,CACb,GAAI,CACA,MAAMN,EAAG,QAAA,CACb,QAAA,CAEIM,EAAO,UAAA,CACX,CACJ,GAAA,CACJ,CAAA,CAER,CCvDO,SAASE,EAAoBP,EAA8C,CAC9E,KAAM,CAAE,GAAAD,EAAI,OAAAM,EAAQ,QAAAG,CAAA,EAAYP,EAAsBD,CAAO,EAE7D,OAAO,IAAIS,EAAAA,WAAW,CAAE,GAAAV,EAAI,OAAAM,EAAQ,QAAAG,EAAS,CACjD"}
@@ -0,0 +1,23 @@
1
+ import { O as b } from "./OPFSFacade-CEaSqTut.js";
2
+ import { wrap as t } from "comlink";
3
+ function l(c = {}) {
4
+ const { url: e, worker: n, name: r = "opfs-worker", ...o } = c, a = n ?? new SharedWorker(
5
+ e ?? new URL("data:video/mp2t;base64,aW1wb3J0IHsgZXhwb3NlIH0gZnJvbSAnY29tbGluayc7CgppbXBvcnQgeyBPUEZTQXN5bmMgfSBmcm9tICcuLi9jb3JlL09QRlNBc3luYyc7CgovKioKICogU2hhcmVkIHdvcmtlciBlbnRyeSDigJQgYnVpbHQgc2VsZi1jb250YWluZWQgKGNvbWxpbmsgYnVuZGxlZCBpbikgdG8KICogYGRpc3Qvc2hhcmVkLndvcmtlci5qc2AsIGV4cG9zZWQgYXMgYG9wZnMtd29ya2VyL3NoYXJlZC53b3JrZXIuanNgLgogKgogKiBPbmUgYE9QRlNBc3luY2AgaW5zdGFuY2Ugc2VydmVzIGV2ZXJ5IGNvbm5lY3RlZCB0YWIsIHNvIHBlci1wYXRoIGxvY2tzCiAqIG5hdHVyYWxseSBzZXJpYWxpemUgd3JpdGVzIGFjcm9zcyB0YWJzLiBTeW5jIGFjY2VzcyBoYW5kbGVzIGFyZSBub3QKICogYXZhaWxhYmxlIGluIGEgU2hhcmVkV29ya2VyLCBoZW5jZSB0aGUgYXN5bmMgYmFja2VuZC4KICovCmNvbnN0IGZzID0gbmV3IE9QRlNBc3luYygpOwoKKGdsb2JhbFRoaXMgYXMgdW5rbm93biBhcyB7IG9uY29ubmVjdDogKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHZvaWQgfSkub25jb25uZWN0ID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHsKICAgIGV4cG9zZShmcywgZXZlbnQucG9ydHNbMF0pOwp9Owo=", import.meta.url),
6
+ { type: "module", name: r }
7
+ ), g = t(a.port);
8
+ return Object.keys(o).length > 0 && (o.broadcastChannel instanceof BroadcastChannel && (o.broadcastChannel = o.broadcastChannel.name), g.setOptions(o)), {
9
+ fs: g,
10
+ worker: a,
11
+ dispose() {
12
+ a.port.close();
13
+ }
14
+ };
15
+ }
16
+ function m(c) {
17
+ const { fs: e, worker: n, dispose: r } = l(c);
18
+ return new b({ fs: e, worker: n, dispose: r });
19
+ }
20
+ export {
21
+ m as c
22
+ };
23
+ //# sourceMappingURL=createOPFSShared-BSFWsoLe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createOPFSShared-BSFWsoLe.js","sources":["../src/worker/createSharedWorker.ts","../src/facade/createOPFSShared.ts"],"sourcesContent":["import { wrap } from 'comlink';\n\nimport type { OPFSAsync } from '../core/OPFSAsync';\nimport type { OPFSOptions } from '../types';\nimport type { Remote } from 'comlink';\n\ntype RemoteOPFSAsync = Remote<OPFSAsync>;\n\nexport interface SharedWorkerOptions extends OPFSOptions {\n /**\n * URL of the worker script, e.g. `import url from 'opfs-worker/shared.worker.js?url'` (Vite).\n *\n * Defaults to `new URL('./shared.worker.js', import.meta.url)`, which works when\n * `opfs-worker` is served as-is (CDN, unbundled deps). When your bundler inlines\n * the package into app chunks, pass the url explicitly.\n */\n url?: string | URL;\n /** Bring your own SharedWorker instance (overrides `url`) */\n worker?: SharedWorker;\n /** Worker name — tabs with the same script URL + name share one instance (default: 'opfs-worker') */\n name?: string;\n}\n\nexport interface RawSharedWorker {\n /** Comlink proxy to the `OPFSAsync` instance shared by all connected tabs */\n fs: RemoteOPFSAsync;\n /** Underlying browser SharedWorker */\n worker: SharedWorker;\n /** Closes this tab's port; the worker keeps running for other tabs */\n dispose: () => void;\n}\n\n/**\n * Internal helper: connect to the SharedWorker and wrap `OPFSAsync` with Comlink.\n * Prefer {@link createOPFSShared}; access the proxy / SharedWorker via\n * `facade.backend` / `facade.worker`.\n *\n * Note: `OPFSOptions` are applied via `setOptions()` on the shared instance, so\n * they affect every connected tab — use the same options in all tabs.\n */\nexport function createSharedWorker(options: SharedWorkerOptions = {}): RawSharedWorker {\n const { url, worker: providedWorker, name = 'opfs-worker', ...fsOptions } = options;\n\n const worker = providedWorker ?? new SharedWorker(\n url ?? new URL('./shared.worker.js', import.meta.url),\n { type: 'module', name }\n );\n\n const fs = wrap<RemoteOPFSAsync>(worker.port);\n\n if (Object.keys(fsOptions).length > 0) {\n // A BroadcastChannel instance can't cross the wire — send its name instead\n if (fsOptions.broadcastChannel instanceof BroadcastChannel) {\n fsOptions.broadcastChannel = fsOptions.broadcastChannel.name;\n }\n\n void fs.setOptions(fsOptions);\n }\n\n return {\n fs,\n worker,\n dispose() {\n worker.port.close();\n },\n };\n}\n","import { OPFSFacade } from './OPFSFacade';\nimport { createSharedWorker } from '../worker/createSharedWorker';\n\nimport type { SharedWorkerOptions } from '../worker/createSharedWorker';\n\n/**\n * Shared mode: Node-like `fs` API over a SharedWorker running one `OPFSAsync`\n * instance for every tab — writes are serialized across tabs by per-path locks,\n * watch events reach all tabs via `BroadcastChannel`.\n *\n * Uses the async backend (sync access handles are unavailable in SharedWorker):\n * writing requires `createWritable()` (Chrome, Firefox, Safari 26+), and file\n * descriptors throw `OperationNotSupportedError`.\n *\n * Need the raw bytes API or the SharedWorker? Use `fs.backend` / `fs.worker`.\n *\n * @example\n * ```typescript\n * // Vite: pass the worker url explicitly\n * import workerUrl from 'opfs-worker/shared.worker.js?url';\n * import { createOPFSShared } from 'opfs-worker/sharedworker';\n *\n * const fs = createOPFSShared({ root: '/my-app', url: workerUrl });\n * ```\n */\nexport function createOPFSShared(options?: SharedWorkerOptions): OPFSFacade {\n const { fs, worker, dispose } = createSharedWorker(options);\n\n return new OPFSFacade({ fs, worker, dispose });\n}\n"],"names":["createSharedWorker","options","url","providedWorker","name","fsOptions","worker","fs","wrap","createOPFSShared","dispose","OPFSFacade"],"mappings":";;AAwCO,SAASA,EAAmBC,IAA+B,IAAqB;AACnF,QAAM,EAAE,KAAAC,GAAK,QAAQC,GAAgB,MAAAC,IAAO,eAAe,GAAGC,MAAcJ,GAEtEK,IAASH,KAAkB,IAAI;AAAA,IACjCD,KAAO,IAAA,IAAA,+0BAAA,YAAA,GAAA;AAAA,IACP,EAAE,MAAM,UAAU,MAAAE,EAAA;AAAA,EAAK,GAGrBG,IAAKC,EAAsBF,EAAO,IAAI;AAE5C,SAAI,OAAO,KAAKD,CAAS,EAAE,SAAS,MAE5BA,EAAU,4BAA4B,qBACtCA,EAAU,mBAAmBA,EAAU,iBAAiB,OAGvDE,EAAG,WAAWF,CAAS,IAGzB;AAAA,IACH,IAAAE;AAAA,IACA,QAAAD;AAAA,IACA,UAAU;AACN,MAAAA,EAAO,KAAK,MAAA;AAAA,IAChB;AAAA,EAAA;AAER;ACzCO,SAASG,EAAiBR,GAA2C;AACxE,QAAM,EAAE,IAAAM,GAAI,QAAAD,GAAQ,SAAAI,EAAA,IAAYV,EAAmBC,CAAO;AAE1D,SAAO,IAAIU,EAAW,EAAE,IAAAJ,GAAI,QAAAD,GAAQ,SAAAI,GAAS;AACjD;"}
@@ -0,0 +1,2 @@
1
+ "use strict";const g=require("./OPFSFacade-hrNXCn6w.cjs"),s=require("comlink");var a=typeof document<"u"?document.currentScript:null;function b(c={}){const{url:n,worker:o,name:r="opfs-worker",...e}=c,t=o??new SharedWorker(n??new URL("data:video/mp2t;base64,aW1wb3J0IHsgZXhwb3NlIH0gZnJvbSAnY29tbGluayc7CgppbXBvcnQgeyBPUEZTQXN5bmMgfSBmcm9tICcuLi9jb3JlL09QRlNBc3luYyc7CgovKioKICogU2hhcmVkIHdvcmtlciBlbnRyeSDigJQgYnVpbHQgc2VsZi1jb250YWluZWQgKGNvbWxpbmsgYnVuZGxlZCBpbikgdG8KICogYGRpc3Qvc2hhcmVkLndvcmtlci5qc2AsIGV4cG9zZWQgYXMgYG9wZnMtd29ya2VyL3NoYXJlZC53b3JrZXIuanNgLgogKgogKiBPbmUgYE9QRlNBc3luY2AgaW5zdGFuY2Ugc2VydmVzIGV2ZXJ5IGNvbm5lY3RlZCB0YWIsIHNvIHBlci1wYXRoIGxvY2tzCiAqIG5hdHVyYWxseSBzZXJpYWxpemUgd3JpdGVzIGFjcm9zcyB0YWJzLiBTeW5jIGFjY2VzcyBoYW5kbGVzIGFyZSBub3QKICogYXZhaWxhYmxlIGluIGEgU2hhcmVkV29ya2VyLCBoZW5jZSB0aGUgYXN5bmMgYmFja2VuZC4KICovCmNvbnN0IGZzID0gbmV3IE9QRlNBc3luYygpOwoKKGdsb2JhbFRoaXMgYXMgdW5rbm93biBhcyB7IG9uY29ubmVjdDogKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHZvaWQgfSkub25jb25uZWN0ID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHsKICAgIGV4cG9zZShmcywgZXZlbnQucG9ydHNbMF0pOwp9Owo=",typeof document>"u"?require("url").pathToFileURL(__filename).href:a&&a.tagName.toUpperCase()==="SCRIPT"&&a.src||new URL("createOPFSShared-BoCft_BS.cjs",document.baseURI).href),{type:"module",name:r}),d=s.wrap(t.port);return Object.keys(e).length>0&&(e.broadcastChannel instanceof BroadcastChannel&&(e.broadcastChannel=e.broadcastChannel.name),d.setOptions(e)),{fs:d,worker:t,dispose(){t.port.close()}}}function l(c){const{fs:n,worker:o,dispose:r}=b(c);return new g.OPFSFacade({fs:n,worker:o,dispose:r})}exports.createOPFSShared=l;
2
+ //# sourceMappingURL=createOPFSShared-BoCft_BS.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createOPFSShared-BoCft_BS.cjs","sources":["../src/worker/createSharedWorker.ts","../src/facade/createOPFSShared.ts"],"sourcesContent":["import { wrap } from 'comlink';\n\nimport type { OPFSAsync } from '../core/OPFSAsync';\nimport type { OPFSOptions } from '../types';\nimport type { Remote } from 'comlink';\n\ntype RemoteOPFSAsync = Remote<OPFSAsync>;\n\nexport interface SharedWorkerOptions extends OPFSOptions {\n /**\n * URL of the worker script, e.g. `import url from 'opfs-worker/shared.worker.js?url'` (Vite).\n *\n * Defaults to `new URL('./shared.worker.js', import.meta.url)`, which works when\n * `opfs-worker` is served as-is (CDN, unbundled deps). When your bundler inlines\n * the package into app chunks, pass the url explicitly.\n */\n url?: string | URL;\n /** Bring your own SharedWorker instance (overrides `url`) */\n worker?: SharedWorker;\n /** Worker name — tabs with the same script URL + name share one instance (default: 'opfs-worker') */\n name?: string;\n}\n\nexport interface RawSharedWorker {\n /** Comlink proxy to the `OPFSAsync` instance shared by all connected tabs */\n fs: RemoteOPFSAsync;\n /** Underlying browser SharedWorker */\n worker: SharedWorker;\n /** Closes this tab's port; the worker keeps running for other tabs */\n dispose: () => void;\n}\n\n/**\n * Internal helper: connect to the SharedWorker and wrap `OPFSAsync` with Comlink.\n * Prefer {@link createOPFSShared}; access the proxy / SharedWorker via\n * `facade.backend` / `facade.worker`.\n *\n * Note: `OPFSOptions` are applied via `setOptions()` on the shared instance, so\n * they affect every connected tab — use the same options in all tabs.\n */\nexport function createSharedWorker(options: SharedWorkerOptions = {}): RawSharedWorker {\n const { url, worker: providedWorker, name = 'opfs-worker', ...fsOptions } = options;\n\n const worker = providedWorker ?? new SharedWorker(\n url ?? new URL('./shared.worker.js', import.meta.url),\n { type: 'module', name }\n );\n\n const fs = wrap<RemoteOPFSAsync>(worker.port);\n\n if (Object.keys(fsOptions).length > 0) {\n // A BroadcastChannel instance can't cross the wire — send its name instead\n if (fsOptions.broadcastChannel instanceof BroadcastChannel) {\n fsOptions.broadcastChannel = fsOptions.broadcastChannel.name;\n }\n\n void fs.setOptions(fsOptions);\n }\n\n return {\n fs,\n worker,\n dispose() {\n worker.port.close();\n },\n };\n}\n","import { OPFSFacade } from './OPFSFacade';\nimport { createSharedWorker } from '../worker/createSharedWorker';\n\nimport type { SharedWorkerOptions } from '../worker/createSharedWorker';\n\n/**\n * Shared mode: Node-like `fs` API over a SharedWorker running one `OPFSAsync`\n * instance for every tab — writes are serialized across tabs by per-path locks,\n * watch events reach all tabs via `BroadcastChannel`.\n *\n * Uses the async backend (sync access handles are unavailable in SharedWorker):\n * writing requires `createWritable()` (Chrome, Firefox, Safari 26+), and file\n * descriptors throw `OperationNotSupportedError`.\n *\n * Need the raw bytes API or the SharedWorker? Use `fs.backend` / `fs.worker`.\n *\n * @example\n * ```typescript\n * // Vite: pass the worker url explicitly\n * import workerUrl from 'opfs-worker/shared.worker.js?url';\n * import { createOPFSShared } from 'opfs-worker/sharedworker';\n *\n * const fs = createOPFSShared({ root: '/my-app', url: workerUrl });\n * ```\n */\nexport function createOPFSShared(options?: SharedWorkerOptions): OPFSFacade {\n const { fs, worker, dispose } = createSharedWorker(options);\n\n return new OPFSFacade({ fs, worker, dispose });\n}\n"],"names":["createSharedWorker","options","url","providedWorker","name","fsOptions","worker","fs","wrap","createOPFSShared","dispose","OPFSFacade"],"mappings":"qIAwCO,SAASA,EAAmBC,EAA+B,GAAqB,CACnF,KAAM,CAAE,IAAAC,EAAK,OAAQC,EAAgB,KAAAC,EAAO,cAAe,GAAGC,GAAcJ,EAEtEK,EAASH,GAAkB,IAAI,aACjCD,GAAO,IAAA,IAAA,4/BAAA,EACP,CAAE,KAAM,SAAU,KAAAE,CAAA,CAAK,EAGrBG,EAAKC,EAAAA,KAAsBF,EAAO,IAAI,EAE5C,OAAI,OAAO,KAAKD,CAAS,EAAE,OAAS,IAE5BA,EAAU,4BAA4B,mBACtCA,EAAU,iBAAmBA,EAAU,iBAAiB,MAGvDE,EAAG,WAAWF,CAAS,GAGzB,CACH,GAAAE,EACA,OAAAD,EACA,SAAU,CACNA,EAAO,KAAK,MAAA,CAChB,CAAA,CAER,CCzCO,SAASG,EAAiBR,EAA2C,CACxE,KAAM,CAAE,GAAAM,EAAI,OAAAD,EAAQ,QAAAI,CAAA,EAAYV,EAAmBC,CAAO,EAE1D,OAAO,IAAIU,EAAAA,WAAW,CAAE,GAAAJ,EAAI,OAAAD,EAAQ,QAAAI,EAAS,CACjD"}