medama
Version:
A minimalist, powerful, and dependency-free reactive state management library for TypeScript and JavaScript applications.
62 lines • 2.2 kB
JavaScript
;
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