UNPKG

sichqon

Version:

Create tunnel with your react application

43 lines (37 loc) 1.21 kB
'use strict'; const React = require('react'); function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; } const React__default = /*#__PURE__*/_interopDefaultCompat(React); const useIsomorphicLayoutEffect = typeof window !== "undefined" ? React.useLayoutEffect : React.useEffect; function createTunnel() { let localState = []; let listeners = []; function subscribe(listener) { listeners = [...listeners, listener]; return () => { listeners = listeners.filter((l) => l !== listener); }; } function notifyListeners() { for (const listener of listeners) { listener(); } } return { In({ children }) { useIsomorphicLayoutEffect(() => { localState = [...localState, children]; notifyListeners(); return () => { localState = localState.filter((c) => c !== children); }; }, [children]); return null; }, Out() { const currentState = React.useSyncExternalStore(subscribe, () => localState); return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, currentState); } }; } exports.createTunnel = createTunnel;