UNPKG

@apollo/client-react-streaming

Version:

This package provides building blocks to create framework-level integration of Apollo Client with React's streaming SSR. See the [@apollo/client-integration-nextjs](https://github.com/apollographql/apollo-client-integrations/tree/main/packages/nextjs) pac

123 lines (114 loc) 3.59 kB
'use strict'; var React2 = require('react'); var clientReactStreaming = require('@apollo/client-react-streaming'); var invariant = require('@apollo/client/utilities/invariant'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var React2__default = /*#__PURE__*/_interopDefault(React2); // src/ManualDataTransport/ManualDataTransport.tsx // src/ManualDataTransport/ApolloRehydrateSymbols.tsx var ApolloSSRDataTransport = /* @__PURE__ */ Symbol.for( "ApolloSSRDataTransport" ); var ApolloHookRehydrationCache = /* @__PURE__ */ Symbol.for( "apollo.hookRehydrationCache" ); // src/ManualDataTransport/lateInitializingQueue.ts function registerLateInitializingQueue(key, callback) { const previousData = window[key] || []; if (Array.isArray(previousData)) { window[key] = { push: (...data) => { for (const value of data) { callback(value); } } }; window[key].push(...previousData); } } function registerDataTransport({ onQueryEvent, onRehydrate, revive: revive2 }) { registerLateInitializingQueue(ApolloSSRDataTransport, (data) => { const parsed = revive2(data); invariant.invariant.debug(`received data from the server:`, parsed); onRehydrate(parsed.rehydrate); for (const result of parsed.events) { onQueryEvent(result); } }); } // src/ManualDataTransport/serialization.ts function revive(value) { return value; } // src/ManualDataTransport/ManualDataTransport.tsx var buildManualDataTransportBrowserImpl = ({ reviveFromStream = revive }) => function ManualDataTransportBrowserImpl({ children, onQueryEvent, rerunSimulatedQueries }) { const hookRehydrationCache = React2.useRef( window[ApolloHookRehydrationCache] ??= {} ); registerDataTransport({ onQueryEvent, onRehydrate(rehydrate) { Object.assign(hookRehydrationCache.current, rehydrate); }, revive: reviveFromStream }); React2.useEffect(() => { if (document.readyState !== "complete") { window.addEventListener("load", rerunSimulatedQueries, { once: true }); return () => window.removeEventListener("load", rerunSimulatedQueries); } else { rerunSimulatedQueries(); } }, [rerunSimulatedQueries]); const useStaticValueRef = React2.useCallback(function useStaticValueRef2(v) { const id = React2.useId(); const store = hookRehydrationCache.current; const dataRef = React2.useRef(UNINITIALIZED); if (dataRef.current === UNINITIALIZED) { if (store && id in store) { dataRef.current = store[id]; delete store[id]; } else { dataRef.current = v; } } return dataRef; }, []); return /* @__PURE__ */ React2__default.default.createElement( clientReactStreaming.DataTransportContext.Provider, { value: React2.useMemo( () => ({ useStaticValueRef }), [useStaticValueRef] ) }, children ); }; var UNINITIALIZED = {}; var buildManualDataTransport = buildManualDataTransportBrowserImpl; function resetManualSSRApolloSingletons() { clientReactStreaming.resetApolloSingletons(); delete window[ApolloHookRehydrationCache]; delete window[ApolloSSRDataTransport]; } exports.built_for_browser = true; exports.buildManualDataTransport = buildManualDataTransport; exports.registerLateInitializingQueue = registerLateInitializingQueue; exports.resetManualSSRApolloSingletons = resetManualSSRApolloSingletons; //# sourceMappingURL=out.js.map //# sourceMappingURL=manual-transport.browser.cjs.map