data-transport
Version:
A simple and responsive transport
37 lines (35 loc) • 1.03 kB
text/typescript
import { listenerKey, senderKey } from './constant';
import { createTransport } from './createTransport';
import type { ListenerOptions } from './interface';
import { Transport } from './transport';
/**
* Merge multiple transports into one transport
*/
export const merge = (
first: Transport,
seconds: Transport,
..._args: Transport[]
) => {
const args = [first, seconds, ..._args] as Transport[];
if (typeof first === 'undefined' || typeof seconds === 'undefined') {
throw new Error(`Only more than one transports can be merged.`);
}
return createTransport('Base', {
listener: (callback) => {
const handler = (data: ListenerOptions) => {
callback(data);
};
const disposers = args.map((transport) =>
transport[listenerKey](handler)
);
return () => {
disposers.forEach((dispose) => dispose && dispose());
};
},
sender: (message) => {
args.forEach((transport) => {
transport[senderKey](message);
});
},
});
};