Variable Port

Port: Port

A backend for usage with ports and workers. See the examples below.

Main:

import { configure } from '@zenfs/core';
import { Port } from '@zenfs/port';
import { Worker } from 'node:worker_threads';

const worker = new Worker('worker.js');

await configure({
mounts: {
'/worker': {
backend: Port,
port: worker,
},
},
});

Worker:

import { InMemory, resolveRemoteMount, attachFS } from '@zenfs/core';
import { parentPort } from 'node:worker_threads';

await resolveRemoteMount(parentPort, { backend: InMemory, name: 'tmp' });

If you are using using web workers, you would use self instead of importing parentPort in the worker, and would not need to import Worker in the main thread.

import { InMemory, fs, resolveMountConfig, resolveRemoteMount, Port } from '@zenfs/core';
import { MessageChannel } from 'node:worker_threads';

const { port1: localPort, port2: remotePort } = new MessageChannel();

fs.mount('/remote', await resolveRemoteMount(remotePort, { backend: InMemory, name: 'tmp' }));
fs.mount('/port', await resolveMountConfig({ backend: Port, port: localPort }));

const content = 'FS is in a port';

await fs.promises.writeFile('/port/test', content);

fs.readFileSync('/remote/test', 'utf8'); // FS is in a port
await fs.promises.readFile('/port/test', 'utf8'); // FS is in a port