@data-client/react
Version:
Async State Management without the Management. REST, GraphQL, SSE, Websockets, Fetch
52 lines (51 loc) • 8.69 kB
JavaScript
'use client';
import { Controller, NetworkManager, initialState, createReducer, applyManager, initManager } from '@data-client/core';
import { useSyncExternalStore } from 'react';
import { PromiseifyMiddleware } from './redux/index.js';
import { createStore, applyMiddleware } from './redux/redux.js';
import SSRDataProvider from './SSRDataProvider.js';
import { NetworkManager as ReactNetworkManager } from '../managers/index.js';
import { jsx as _jsx } from "react/jsx-runtime";
export default function createPersistedStore(managers, hasDevManager = true) {
const controller = new Controller();
managers = managers != null ? managers : [new ReactNetworkManager()];
const networkManager = managers.find(m => m instanceof NetworkManager);
if (networkManager === undefined) throw new Error('managers must include a NetworkManager');
const reducer = createReducer(controller);
const enhancer = applyMiddleware(
// redux 5's types are wrong and do not allow any return typing from next, which is incorrect.
// `next: (action: unknown) => unknown`: allows any action, but disallows all return types.
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
...applyManager(managers, controller), PromiseifyMiddleware);
const store = createStore(reducer, initialState, enhancer);
initManager(managers, controller, store.getState())();
const selector = state => state;
const getState = () => selector(store.getState());
let firstRender = true;
function useReadyCacheState() {
const inFlightFetches = networkManager.allSettled();
if (inFlightFetches) {
firstRender = false;
throw inFlightFetches;
}
if (firstRender) {
firstRender = false;
throw new Promise(resolve => setTimeout(resolve, 10));
}
return useSyncExternalStore(store.subscribe, getState, getState);
}
function ServerDataProvider({
children
}) {
return /*#__PURE__*/_jsx(SSRDataProvider, {
getState: store.getState,
subscribe: store.subscribe,
dispatch: store.dispatch,
hasDevManager: hasDevManager,
children: children
});
}
return [ServerDataProvider, useReadyCacheState, controller, store];
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb250cm9sbGVyIiwiTmV0d29ya01hbmFnZXIiLCJpbml0aWFsU3RhdGUiLCJjcmVhdGVSZWR1Y2VyIiwiYXBwbHlNYW5hZ2VyIiwiaW5pdE1hbmFnZXIiLCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZSIsIlByb21pc2VpZnlNaWRkbGV3YXJlIiwiY3JlYXRlU3RvcmUiLCJhcHBseU1pZGRsZXdhcmUiLCJTU1JEYXRhUHJvdmlkZXIiLCJSZWFjdE5ldHdvcmtNYW5hZ2VyIiwianN4IiwiX2pzeCIsImNyZWF0ZVBlcnNpc3RlZFN0b3JlIiwibWFuYWdlcnMiLCJoYXNEZXZNYW5hZ2VyIiwiY29udHJvbGxlciIsIm5ldHdvcmtNYW5hZ2VyIiwiZmluZCIsIm0iLCJ1bmRlZmluZWQiLCJFcnJvciIsInJlZHVjZXIiLCJlbmhhbmNlciIsInN0b3JlIiwiZ2V0U3RhdGUiLCJzZWxlY3RvciIsInN0YXRlIiwiZmlyc3RSZW5kZXIiLCJ1c2VSZWFkeUNhY2hlU3RhdGUiLCJpbkZsaWdodEZldGNoZXMiLCJhbGxTZXR0bGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0Iiwic3Vic2NyaWJlIiwiU2VydmVyRGF0YVByb3ZpZGVyIiwiY2hpbGRyZW4iLCJkaXNwYXRjaCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2ZXIvY3JlYXRlUGVyc2lzdGVkU3RvcmUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcbmltcG9ydCB7XG4gIENvbnRyb2xsZXIsXG4gIE1hbmFnZXIsXG4gIE5ldHdvcmtNYW5hZ2VyLFxuICBTdGF0ZSxcbiAgaW5pdGlhbFN0YXRlLFxuICBjcmVhdGVSZWR1Y2VyLFxuICBhcHBseU1hbmFnZXIsXG4gIGluaXRNYW5hZ2VyLFxufSBmcm9tICdAZGF0YS1jbGllbnQvY29yZSc7XG5pbXBvcnQgeyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgUHJvbWlzZWlmeU1pZGRsZXdhcmUgfSBmcm9tICcuL3JlZHV4L2luZGV4LmpzJztcbmltcG9ydCB7IGNyZWF0ZVN0b3JlLCBhcHBseU1pZGRsZXdhcmUgfSBmcm9tICcuL3JlZHV4L3JlZHV4LmpzJztcbmltcG9ydCBTU1JEYXRhUHJvdmlkZXIgZnJvbSAnLi9TU1JEYXRhUHJvdmlkZXIuanMnO1xuaW1wb3J0IHsgTmV0d29ya01hbmFnZXIgYXMgUmVhY3ROZXR3b3JrTWFuYWdlciB9IGZyb20gJy4uL21hbmFnZXJzL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUGVyc2lzdGVkU3RvcmUoXG4gIG1hbmFnZXJzPzogTWFuYWdlcltdLFxuICBoYXNEZXZNYW5hZ2VyOiBib29sZWFuID0gdHJ1ZSxcbikge1xuICBjb25zdCBjb250cm9sbGVyID0gbmV3IENvbnRyb2xsZXIoKTtcbiAgbWFuYWdlcnMgPSBtYW5hZ2VycyA/PyBbbmV3IFJlYWN0TmV0d29ya01hbmFnZXIoKV07XG4gIGNvbnN0IG5ldHdvcmtNYW5hZ2VyOiBOZXR3b3JrTWFuYWdlciA9IG1hbmFnZXJzLmZpbmQoXG4gICAgbSA9PiBtIGluc3RhbmNlb2YgTmV0d29ya01hbmFnZXIsXG4gICkgYXMgYW55O1xuICBpZiAobmV0d29ya01hbmFnZXIgPT09IHVuZGVmaW5lZClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21hbmFnZXJzIG11c3QgaW5jbHVkZSBhIE5ldHdvcmtNYW5hZ2VyJyk7XG4gIGNvbnN0IHJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKGNvbnRyb2xsZXIpO1xuICBjb25zdCBlbmhhbmNlciA9IGFwcGx5TWlkZGxld2FyZShcbiAgICAvLyByZWR1eCA1J3MgdHlwZXMgYXJlIHdyb25nIGFuZCBkbyBub3QgYWxsb3cgYW55IHJldHVybiB0eXBpbmcgZnJvbSBuZXh0LCB3aGljaCBpcyBpbmNvcnJlY3QuXG4gICAgLy8gYG5leHQ6IChhY3Rpb246IHVua25vd24pID0+IHVua25vd25gOiBhbGxvd3MgYW55IGFjdGlvbiwgYnV0IGRpc2FsbG93cyBhbGwgcmV0dXJuIHR5cGVzLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgLi4uYXBwbHlNYW5hZ2VyKG1hbmFnZXJzLCBjb250cm9sbGVyKSxcbiAgICBQcm9taXNlaWZ5TWlkZGxld2FyZSxcbiAgKTtcbiAgY29uc3Qgc3RvcmUgPSBjcmVhdGVTdG9yZShyZWR1Y2VyLCBpbml0aWFsU3RhdGUgYXMgYW55LCBlbmhhbmNlcik7XG4gIGluaXRNYW5hZ2VyKG1hbmFnZXJzLCBjb250cm9sbGVyLCBzdG9yZS5nZXRTdGF0ZSgpKSgpO1xuXG4gIGNvbnN0IHNlbGVjdG9yID0gKHN0YXRlOiBhbnkpID0+IHN0YXRlO1xuXG4gIGNvbnN0IGdldFN0YXRlID0gKCkgPT4gc2VsZWN0b3Ioc3RvcmUuZ2V0U3RhdGUoKSk7XG4gIGxldCBmaXJzdFJlbmRlciA9IHRydWU7XG4gIGZ1bmN0aW9uIHVzZVJlYWR5Q2FjaGVTdGF0ZSgpOiBTdGF0ZTx1bmtub3duPiB7XG4gICAgY29uc3QgaW5GbGlnaHRGZXRjaGVzID0gbmV0d29ya01hbmFnZXIuYWxsU2V0dGxlZCgpO1xuICAgIGlmIChpbkZsaWdodEZldGNoZXMpIHtcbiAgICAgIGZpcnN0UmVuZGVyID0gZmFsc2U7XG4gICAgICB0aHJvdyBpbkZsaWdodEZldGNoZXM7XG4gICAgfVxuICAgIGlmIChmaXJzdFJlbmRlcikge1xuICAgICAgZmlyc3RSZW5kZXIgPSBmYWxzZTtcbiAgICAgIHRocm93IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMCkpO1xuICAgIH1cbiAgICByZXR1cm4gdXNlU3luY0V4dGVybmFsU3RvcmUoc3RvcmUuc3Vic2NyaWJlLCBnZXRTdGF0ZSwgZ2V0U3RhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gU2VydmVyRGF0YVByb3ZpZGVyKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH0pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFNTUkRhdGFQcm92aWRlclxuICAgICAgICBnZXRTdGF0ZT17c3RvcmUuZ2V0U3RhdGV9XG4gICAgICAgIHN1YnNjcmliZT17c3RvcmUuc3Vic2NyaWJlfVxuICAgICAgICBkaXNwYXRjaD17c3RvcmUuZGlzcGF0Y2h9XG4gICAgICAgIGhhc0Rldk1hbmFnZXI9e2hhc0Rldk1hbmFnZXJ9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvU1NSRGF0YVByb3ZpZGVyPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIFtTZXJ2ZXJEYXRhUHJvdmlkZXIsIHVzZVJlYWR5Q2FjaGVTdGF0ZSwgY29udHJvbGxlciwgc3RvcmVdIGFzIGNvbnN0O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxZQUFZOztBQUNaLFNBQ0VBLFVBQVUsRUFFVkMsY0FBYyxFQUVkQyxZQUFZLEVBQ1pDLGFBQWEsRUFDYkMsWUFBWSxFQUNaQyxXQUFXLFFBQ04sbUJBQW1CO0FBQzFCLFNBQVNDLG9CQUFvQixRQUFRLE9BQU87QUFFNUMsU0FBU0Msb0JBQW9CLFFBQVEsa0JBQWtCO0FBQ3ZELFNBQVNDLFdBQVcsRUFBRUMsZUFBZSxRQUFRLGtCQUFrQjtBQUMvRCxPQUFPQyxlQUFlLE1BQU0sc0JBQXNCO0FBQ2xELFNBQVNULGNBQWMsSUFBSVUsbUJBQW1CLFFBQVEsc0JBQXNCO0FBQUMsU0FBQUMsR0FBQSxJQUFBQyxJQUFBO0FBRTdFLGVBQWUsU0FBU0Msb0JBQW9CQSxDQUMxQ0MsUUFBb0IsRUFDcEJDLGFBQXNCLEdBQUcsSUFBSSxFQUM3QjtFQUNBLE1BQU1DLFVBQVUsR0FBRyxJQUFJakIsVUFBVSxDQUFDLENBQUM7RUFDbkNlLFFBQVEsR0FBR0EsUUFBUSxXQUFSQSxRQUFRLEdBQUksQ0FBQyxJQUFJSixtQkFBbUIsQ0FBQyxDQUFDLENBQUM7RUFDbEQsTUFBTU8sY0FBOEIsR0FBR0gsUUFBUSxDQUFDSSxJQUFJLENBQ2xEQyxDQUFDLElBQUlBLENBQUMsWUFBWW5CLGNBQ3BCLENBQVE7RUFDUixJQUFJaUIsY0FBYyxLQUFLRyxTQUFTLEVBQzlCLE1BQU0sSUFBSUMsS0FBSyxDQUFDLHdDQUF3QyxDQUFDO0VBQzNELE1BQU1DLE9BQU8sR0FBR3BCLGFBQWEsQ0FBQ2MsVUFBVSxDQUFDO0VBQ3pDLE1BQU1PLFFBQVEsR0FBR2YsZUFBZTtFQUM5QjtFQUNBO0VBQ0E7RUFDQTtFQUNBLEdBQUdMLFlBQVksQ0FBQ1csUUFBUSxFQUFFRSxVQUFVLENBQUMsRUFDckNWLG9CQUNGLENBQUM7RUFDRCxNQUFNa0IsS0FBSyxHQUFHakIsV0FBVyxDQUFDZSxPQUFPLEVBQUVyQixZQUFZLEVBQVNzQixRQUFRLENBQUM7RUFDakVuQixXQUFXLENBQUNVLFFBQVEsRUFBRUUsVUFBVSxFQUFFUSxLQUFLLENBQUNDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRXJELE1BQU1DLFFBQVEsR0FBSUMsS0FBVSxJQUFLQSxLQUFLO0VBRXRDLE1BQU1GLFFBQVEsR0FBR0EsQ0FBQSxLQUFNQyxRQUFRLENBQUNGLEtBQUssQ0FBQ0MsUUFBUSxDQUFDLENBQUMsQ0FBQztFQUNqRCxJQUFJRyxXQUFXLEdBQUcsSUFBSTtFQUN0QixTQUFTQyxrQkFBa0JBLENBQUEsRUFBbUI7SUFDNUMsTUFBTUMsZUFBZSxHQUFHYixjQUFjLENBQUNjLFVBQVUsQ0FBQyxDQUFDO0lBQ25ELElBQUlELGVBQWUsRUFBRTtNQUNuQkYsV0FBVyxHQUFHLEtBQUs7TUFDbkIsTUFBTUUsZUFBZTtJQUN2QjtJQUNBLElBQUlGLFdBQVcsRUFBRTtNQUNmQSxXQUFXLEdBQUcsS0FBSztNQUNuQixNQUFNLElBQUlJLE9BQU8sQ0FBQ0MsT0FBTyxJQUFJQyxVQUFVLENBQUNELE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2RDtJQUNBLE9BQU81QixvQkFBb0IsQ0FBQ21CLEtBQUssQ0FBQ1csU0FBUyxFQUFFVixRQUFRLEVBQUVBLFFBQVEsQ0FBQztFQUNsRTtFQUVBLFNBQVNXLGtCQUFrQkEsQ0FBQztJQUFFQztFQUF3QyxDQUFDLEVBQUU7SUFDdkUsb0JBQ0V6QixJQUFBLENBQUNILGVBQWU7TUFDZGdCLFFBQVEsRUFBRUQsS0FBSyxDQUFDQyxRQUFTO01BQ3pCVSxTQUFTLEVBQUVYLEtBQUssQ0FBQ1csU0FBVTtNQUMzQkcsUUFBUSxFQUFFZCxLQUFLLENBQUNjLFFBQVM7TUFDekJ2QixhQUFhLEVBQUVBLGFBQWM7TUFBQXNCLFFBQUEsRUFFNUJBO0lBQVEsQ0FDTSxDQUFDO0VBRXRCO0VBQ0EsT0FBTyxDQUFDRCxrQkFBa0IsRUFBRVAsa0JBQWtCLEVBQUViLFVBQVUsRUFBRVEsS0FBSyxDQUFDO0FBQ3BFIiwiaWdub3JlTGlzdCI6W119