opfs-worker 2.1.0 → 2.1.2
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 +51 -37
- package/dist/BaseOPFS-Bu7FZtCb.cjs +2 -0
- package/dist/BaseOPFS-Bu7FZtCb.cjs.map +1 -0
- package/dist/{BaseOPFS-Cylz6ijk.js → BaseOPFS-C3NE4BKr.js} +804 -484
- package/dist/BaseOPFS-C3NE4BKr.js.map +1 -0
- package/dist/OPFSAsync-C0RsxCX5.cjs +2 -0
- package/dist/OPFSAsync-C0RsxCX5.cjs.map +1 -0
- package/dist/{OPFSAsync-BKSAJJeh.js → OPFSAsync-aeLUdIqd.js} +19 -19
- package/dist/OPFSAsync-aeLUdIqd.js.map +1 -0
- package/dist/OPFSFacade-BJv2yuWU.cjs +2 -0
- package/dist/OPFSFacade-BJv2yuWU.cjs.map +1 -0
- package/dist/OPFSFacade-DiogtQoq.js +308 -0
- package/dist/OPFSFacade-DiogtQoq.js.map +1 -0
- package/dist/OPFSSync-3qlSBYmz.cjs +2 -0
- package/dist/OPFSSync-3qlSBYmz.cjs.map +1 -0
- package/dist/{OPFSSync-CsSQkpk5.js → OPFSSync-CvSOswhW.js} +57 -57
- package/dist/OPFSSync-CvSOswhW.js.map +1 -0
- package/dist/assets/dedicated.worker-Bqqr9UBA.js.map +1 -0
- package/dist/core/BaseOPFS.d.ts +60 -9
- package/dist/core/BaseOPFS.d.ts.map +1 -1
- package/dist/core/OPFSAsync.d.ts.map +1 -1
- package/dist/core/OPFSSync.d.ts.map +1 -1
- package/dist/createOPFSAsync-B611B63X.js +10 -0
- package/dist/{createOPFSAsync-Y4Mg6qte.js.map → createOPFSAsync-B611B63X.js.map} +1 -1
- package/dist/createOPFSAsync-BATjJg8k.cjs +2 -0
- package/dist/{createOPFSAsync-BwKDmHsy.cjs.map → createOPFSAsync-BATjJg8k.cjs.map} +1 -1
- package/dist/createOPFSDedicated-DgudPTB8.js +2676 -0
- package/dist/createOPFSDedicated-DgudPTB8.js.map +1 -0
- package/dist/createOPFSDedicated-EmIwluQo.cjs +2597 -0
- package/dist/createOPFSDedicated-EmIwluQo.cjs.map +1 -0
- package/dist/{createOPFSShared-CGdd__PH.js → createOPFSShared-BWYln8jJ.js} +2 -2
- package/dist/{createOPFSShared-CGdd__PH.js.map → createOPFSShared-BWYln8jJ.js.map} +1 -1
- package/dist/{createOPFSShared-CskROt7U.cjs → createOPFSShared-DPJpCd7z.cjs} +2 -2
- package/dist/{createOPFSShared-CskROt7U.cjs.map → createOPFSShared-DPJpCd7z.cjs.map} +1 -1
- package/dist/dedicated.worker.js +1104 -790
- 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/facade/createOPFSDedicated.d.ts +4 -2
- package/dist/facade/createOPFSDedicated.d.ts.map +1 -1
- package/dist/index.async.cjs +1 -1
- package/dist/index.async.js +33 -32
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +44 -43
- package/dist/index.pure.cjs +1 -1
- package/dist/index.pure.js +38 -37
- package/dist/index.sharedworker.cjs +1 -1
- package/dist/index.sharedworker.js +34 -33
- package/dist/index.sync.cjs +1 -1
- package/dist/index.sync.d.ts +2 -0
- package/dist/index.sync.d.ts.map +1 -1
- package/dist/index.sync.js +34 -32
- package/dist/shared.worker.js +1101 -791
- package/dist/shared.worker.js.map +1 -1
- package/dist/types.d.ts +38 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/helpers.d.ts +13 -3
- package/dist/utils/helpers.d.ts.map +1 -1
- package/dist/worker/createDedicatedWorker.d.ts +8 -3
- package/dist/worker/createDedicatedWorker.d.ts.map +1 -1
- package/docs/README.md +13 -25
- package/docs/api/README.md +221 -0
- package/docs/api/file-descriptors.md +137 -0
- package/docs/guides/async.md +4 -4
- package/docs/guides/dedicated.md +10 -8
- package/docs/guides/hashing.md +3 -3
- package/docs/guides/pure.md +4 -4
- package/docs/guides/sharedworker.md +2 -2
- package/docs/guides/streaming.md +146 -12
- package/docs/guides/watching.md +3 -3
- package/docs/migration.md +10 -11
- package/docs/types.md +93 -155
- package/package.json +20 -9
- package/src/core/BaseOPFS.ts +194 -29
- package/src/core/OPFSAsync.ts +4 -5
- package/src/core/OPFSSync.ts +6 -7
- package/src/facade/OPFSFacade.ts +51 -4
- package/src/facade/createOPFSDedicated.ts +4 -2
- package/src/index.sync.ts +2 -0
- package/src/index.ts +1 -5
- package/src/types.ts +42 -3
- package/src/utils/helpers.ts +32 -6
- package/src/worker/createDedicatedWorker.ts +85 -7
- package/src/worker/dedicated.worker.ts +12 -1
- package/dist/BaseOPFS-BPw9AIQ-.cjs +0 -4
- package/dist/BaseOPFS-BPw9AIQ-.cjs.map +0 -1
- package/dist/BaseOPFS-Cylz6ijk.js.map +0 -1
- package/dist/OPFSAsync-BKSAJJeh.js.map +0 -1
- package/dist/OPFSAsync-s2P7y3sw.cjs +0 -2
- package/dist/OPFSAsync-s2P7y3sw.cjs.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/OPFSSync-C7KBepe_.cjs +0 -2
- package/dist/OPFSSync-C7KBepe_.cjs.map +0 -1
- package/dist/OPFSSync-CsSQkpk5.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/dist/createOPFSDedicated-CsnV6MLP.js +0 -2333
- package/dist/createOPFSDedicated-CsnV6MLP.js.map +0 -1
- package/dist/createOPFSDedicated-pKTRWLdz.cjs +0 -2283
- package/dist/createOPFSDedicated-pKTRWLdz.cjs.map +0 -1
- package/docs/api/backend.md +0 -36
- package/docs/api/create.md +0 -82
- package/docs/api/facade.md +0 -52
- package/docs/choosing-a-mode.md +0 -41
- package/docs/file-descriptors.md +0 -695
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createOPFSDedicated-EmIwluQo.cjs","sources":["../src/worker/createDedicatedWorker.ts","../src/facade/createOPFSDedicated.ts"],"sourcesContent":["import { wrap } from 'comlink';\n\nimport WorkerCtor from './dedicated.worker?worker&inline';\nimport { normalizePath } from '../utils/helpers';\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`) — not pooled */\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 /** Drops this facade's port; terminates the Worker when the last user of this pool entry disposes */\n dispose: () => void;\n}\n\ninterface PoolEntry {\n worker: Worker;\n refs: number;\n}\n\n/** Same root (+ same worker url) → one Worker per page. */\nconst pool = new Map<string, PoolEntry>();\n\nfunction poolKey(root: string, url?: string | URL): string {\n return `${ normalizePath(root) }\\0${ url?.toString() ?? 'inline' }`;\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\nfunction connectProxy(worker: Worker): { fs: RemoteOPFSSync; port: MessagePort } {\n const { port1, port2 } = new MessageChannel();\n\n worker.postMessage({ type: 'opfs-connect', port: port2 }, [port2]);\n\n return { fs: wrap<RemoteOPFSSync>(port1), port: port1 };\n}\n\n/**\n * Internal helper: spawn (or reuse) a dedicated worker and wrap `OPFSSync` with Comlink.\n * Prefer {@link createOPFSDedicated}; access the proxy / Worker via\n * `facade.backend` / `facade.worker`.\n *\n * Calls with the same `root` (and same `url`, if any) share one Worker on this page.\n * Different roots get different Workers. Passing `worker` bypasses the pool.\n *\n * `setOptions` hits the shared instance — keep options consistent for the same root.\n */\nexport function createDedicatedWorker(options: DedicatedWorkerOptions = {}): RawWorker {\n const { url, worker: providedWorker, ...fsOptions } = options;\n const root = normalizePath(fsOptions.root ?? '/');\n\n if (providedWorker) {\n const { fs, port } = connectProxy(providedWorker);\n\n applyWorkerOptions(fs, fsOptions);\n\n return {\n fs,\n worker: providedWorker,\n dispose() {\n port.close();\n },\n };\n }\n\n const key = poolKey(root, url);\n let entry = pool.get(key);\n\n if (!entry) {\n entry = {\n worker: url ? new Worker(url, { type: 'module' }) : new InlineWorker(),\n refs: 0,\n };\n pool.set(key, entry);\n }\n\n entry.refs += 1;\n\n const { worker } = entry;\n const { fs, port } = connectProxy(worker);\n\n applyWorkerOptions(fs, fsOptions);\n\n let disposed = false;\n\n return {\n fs,\n worker,\n dispose() {\n if (disposed) {\n return;\n }\n\n disposed = true;\n\n void (async() => {\n const current = pool.get(key);\n const isLast = !!current && current.worker === worker && current.refs <= 1;\n\n try {\n // Only the last facade may dispose the shared OPFSSync backend\n if (isLast) {\n await fs.dispose();\n }\n }\n finally {\n port.close();\n }\n\n if (!current || current.worker !== worker) {\n return;\n }\n\n current.refs -= 1;\n\n if (current.refs <= 0) {\n pool.delete(key);\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. Calls with the same `root` (and same `url`)\n * reuse one Worker on this page; different roots get different Workers.\n * Pass `url` / `worker` to load `opfs-worker/dedicated.worker.js` instead\n * (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","pool","poolKey","root","url","normalizePath","applyWorkerOptions","fs","options","connectProxy","worker","port1","port2","wrap","createDedicatedWorker","providedWorker","fsOptions","port","key","entry","disposed","current","isLast","createOPFSDedicated","dispose","OPFSFacade"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qdAQA,MAAMA,EAAeC,EA+BfC,MAAW,IAEjB,SAASC,EAAQC,EAAcC,EAA4B,CACvD,MAAO,GAAIC,EAAAA,cAAcF,CAAI,CAAE,KAAMC,GAAK,YAAc,QAAS,EACrE,CAGA,SAASE,EAAmBC,EAAwCC,EAA6B,CACxFA,IAIDA,EAAQ,4BAA4B,mBACpCA,EAAQ,iBAAmBA,EAAQ,iBAAiB,MAGnDD,EAAG,WAAWC,CAAO,EAC9B,CAEA,SAASC,EAAaC,EAA2D,CAC7E,KAAM,CAAE,MAAAC,EAAO,MAAAC,CAAA,EAAU,IAAI,eAE7B,OAAAF,EAAO,YAAY,CAAE,KAAM,eAAgB,KAAME,CAAA,EAAS,CAACA,CAAK,CAAC,EAE1D,CAAE,GAAIC,EAAAA,KAAqBF,CAAK,EAAG,KAAMA,CAAA,CACpD,CAYO,SAASG,EAAsBN,EAAkC,GAAe,CACnF,KAAM,CAAE,IAAAJ,EAAK,OAAQW,EAAgB,GAAGC,GAAcR,EAChDL,EAAOE,EAAAA,cAAcW,EAAU,MAAQ,GAAG,EAEhD,GAAID,EAAgB,CAChB,KAAM,CAAE,GAAAR,EAAI,KAAAU,CAAAA,EAASR,EAAaM,CAAc,EAEhD,OAAAT,EAAmBC,EAAIS,CAAS,EAEzB,CACH,GAAAT,EACA,OAAQQ,EACR,SAAU,CACNE,EAAK,MAAA,CACT,CAAA,CAER,CAEA,MAAMC,EAAMhB,EAAQC,EAAMC,CAAG,EAC7B,IAAIe,EAAQlB,EAAK,IAAIiB,CAAG,EAEnBC,IACDA,EAAQ,CACJ,OAAQf,EAAM,IAAI,OAAOA,EAAK,CAAE,KAAM,QAAA,CAAU,EAAI,IAAIL,EACxD,KAAM,CAAA,EAEVE,EAAK,IAAIiB,EAAKC,CAAK,GAGvBA,EAAM,MAAQ,EAEd,KAAM,CAAE,OAAAT,GAAWS,EACb,CAAE,GAAAZ,EAAI,KAAAU,GAASR,EAAaC,CAAM,EAExCJ,EAAmBC,EAAIS,CAAS,EAEhC,IAAII,EAAW,GAEf,MAAO,CACH,GAAAb,EACA,OAAAG,EACA,SAAU,CACFU,IAIJA,EAAW,IAEL,SAAW,CACb,MAAMC,EAAUpB,EAAK,IAAIiB,CAAG,EACtBI,EAAS,CAAC,CAACD,GAAWA,EAAQ,SAAWX,GAAUW,EAAQ,MAAQ,EAEzE,GAAI,CAEIC,GACA,MAAMf,EAAG,QAAA,CAEjB,QAAA,CAEIU,EAAK,MAAA,CACT,CAEI,CAACI,GAAWA,EAAQ,SAAWX,IAInCW,EAAQ,MAAQ,EAEZA,EAAQ,MAAQ,IAChBpB,EAAK,OAAOiB,CAAG,EACfR,EAAO,UAAA,GAEf,GAAA,EACJ,CAAA,CAER,CCnIO,SAASa,EAAoBf,EAA8C,CAC9E,KAAM,CAAE,GAAAD,EAAI,OAAAG,EAAQ,QAAAc,CAAA,EAAYV,EAAsBN,CAAO,EAE7D,OAAO,IAAIiB,EAAAA,WAAW,CAAE,GAAAlB,EAAI,OAAAG,EAAQ,QAAAc,EAAS,CACjD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { O as b } from "./OPFSFacade-
|
|
1
|
+
import { O as b } from "./OPFSFacade-DiogtQoq.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-
|
|
23
|
+
//# sourceMappingURL=createOPFSShared-BWYln8jJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createOPFSShared-
|
|
1
|
+
{"version":3,"file":"createOPFSShared-BWYln8jJ.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-
|
|
2
|
-
//# sourceMappingURL=createOPFSShared-
|
|
1
|
+
"use strict";const g=require("./OPFSFacade-BJv2yuWU.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-DPJpCd7z.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-DPJpCd7z.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createOPFSShared-
|
|
1
|
+
{"version":3,"file":"createOPFSShared-DPJpCd7z.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"}
|