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
@@ -1 +1 @@
1
- {"version":3,"file":"createOPFSDedicated-pKTRWLdz.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"}
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"}
@@ -1,4 +1,4 @@
1
- import { O as b } from "./OPFSFacade-XohWlHuu.js";
1
+ import { O as b } from "./OPFSFacade-CEaSqTut.js";
2
2
  import { wrap as t } from "comlink";
3
3
  function l(c = {}) {
4
4
  const { url: e, worker: n, name: r = "opfs-worker", ...o } = c, a = n ?? new SharedWorker(
@@ -20,4 +20,4 @@ function m(c) {
20
20
  export {
21
21
  m as c
22
22
  };
23
- //# sourceMappingURL=createOPFSShared-CGdd__PH.js.map
23
+ //# sourceMappingURL=createOPFSShared-BSFWsoLe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createOPFSShared-CGdd__PH.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;"}
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;"}
@@ -1,2 +1,2 @@
1
- "use strict";const g=require("./OPFSFacade-DePnNRgt.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-CskROt7U.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-CskROt7U.cjs.map
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
@@ -1 +1 @@
1
- {"version":3,"file":"createOPFSShared-CskROt7U.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"}
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"}