UNPKG

medama

Version:

A minimalist, powerful, and dependency-free reactive state management library for TypeScript and JavaScript applications.

62 lines 2.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createMedama = void 0; const selectorStore_1 = require("./selectorStore"); const state_1 = require("./state"); const createMedama = (initState) => { let state = (0, state_1.createStateImage)(initState); let selectorStore = (0, selectorStore_1.createSelectorStore)(state.runOverState); let flagSubscriptionInProgress = false; let flagStateUpdating = false; const resetInit = () => { flagSubscriptionInProgress = false; flagStateUpdating = false; }; const subscribeToState = (selector, subscription) => { try { flagSubscriptionInProgress = true; return [ selectorStore.subscribeToStateInSelectorStore(selector, subscription), (flagSubscriptionInProgress = false), ][0]; } catch (e) { resetInit(); throw e; } }; const readState = (selector) => { try { return selectorStore.getSelectorValue(selector); } catch (e) { resetInit(); throw e; } }; const setState = (stateChange) => { try { if (flagSubscriptionInProgress) throw new Error('Medama Error: The state update occurs during a subscription'); if (flagStateUpdating) throw new Error('Medama Error: A subscription job launches the state update'); flagStateUpdating = true; return [state.setState(stateChange), (flagStateUpdating = false)][0]; } catch (e) { resetInit(); throw e; } }; const resetState = (initState) => { const newState = (0, state_1.createStateImage)(initState); const newSelectorStore = (0, selectorStore_1.createSelectorStore)(newState.runOverState); state = newState; selectorStore = newSelectorStore; resetInit(); }; const pupil = { subscribeToState, resetState, setState, readState }; return Object.assign(pupil, { pupil }); }; exports.createMedama = createMedama; //# sourceMappingURL=medama.js.map